// API Base URL - automatically uses the current host
const API_BASE = window.location.origin;
// Initialize on page load
document.addEventListener('DOMContentLoaded', () => {
console.log('🚀 Initializing Flare.NX & Orynx AI Labs Dashboard');
checkHealth();
checkGPU();
loadGPUInfo();
});
// Health Check
async function checkHealth() {
const statusEl = document.getElementById('healthStatus');
const cardEl = document.getElementById('healthCard');
try {
statusEl.innerHTML = '
Checking...';
const response = await fetch(`${API_BASE}/health`);
const data = await response.json();
if (data.status === 'healthy' && data.gpu_available) {
statusEl.innerHTML = `
✅ Healthy
GPU: ${data.device_name}
Devices: ${data.cuda_devices}
`;
cardEl.classList.add('status-ok');
cardEl.classList.remove('status-error');
} else {
statusEl.innerHTML = '⚠️ CPU Only
';
cardEl.classList.add('status-warning');
}
} catch (error) {
statusEl.innerHTML = '❌ Error
';
cardEl.classList.add('status-error');
console.error('Health check error:', error);
}
}
// GPU Status Check
async function checkGPU() {
const statusEl = document.getElementById('gpuStatus');
const cardEl = document.getElementById('gpuCard');
try {
statusEl.innerHTML = ' Loading...';
const response = await fetch(`${API_BASE}/gpu-info`);
const data = await response.json();
if (data.cuda_available && data.devices.length > 0) {
const device = data.devices[0];
statusEl.innerHTML = `
✅ Active
${device.name}
${device.total_memory_gb} GB VRAM
`;
cardEl.classList.add('status-ok');
cardEl.classList.remove('status-error');
} else {
statusEl.innerHTML = '⚠️ No GPU
';
cardEl.classList.add('status-warning');
}
} catch (error) {
statusEl.innerHTML = '❌ Error
';
cardEl.classList.add('status-error');
console.error('GPU check error:', error);
}
}
// Load GPU Information
async function loadGPUInfo() {
const detailsEl = document.getElementById('gpuDetails');
try {
const response = await fetch(`${API_BASE}/gpu-info`);
const data = await response.json();
if (data.cuda_available && data.devices.length > 0) {
const device = data.devices[0];
detailsEl.innerHTML = `
Total Memory:
${device.total_memory_gb} GB
Compute Capability:
${device.major}.${device.minor}
Multiprocessors:
${device.multi_processor_count}
Total Devices:
${data.device_count}
`;
} else {
detailsEl.innerHTML = `
⚠️ CUDA not available. Running on CPU.
`;
}
} catch (error) {
detailsEl.innerHTML = `
❌ Error loading GPU information.
`;
console.error('GPU info error:', error);
}
}
// Process Text
async function processText() {
const textInput = document.getElementById('textInput').value;
const maxLength = parseInt(document.getElementById('maxLength').value);
const outputGroup = document.getElementById('outputGroup');
const outputContent = document.getElementById('outputContent');
if (!textInput.trim()) {
alert('Please enter some text to process!');
return;
}
try {
outputContent.innerHTML = ' Processing with GPU...';
outputGroup.style.display = 'block';
const response = await fetch(`${API_BASE}/process`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
text: textInput,
max_length: maxLength
})
});
const data = await response.json();
outputContent.innerHTML = `
Processed:
${data.processed}
Length:
${data.length} characters
Max Length:
${data.max_length}
GPU Used:
${data.gpu_used ? '✅ Yes' : '⚠️ No'}
`;
} catch (error) {
outputContent.innerHTML = `
❌ Error processing text: ${error.message}
`;
console.error('Process error:', error);
}
}
// Test Endpoint
async function testEndpoint(endpoint) {
const responseSection = document.getElementById('responseSection');
const responseContent = document.getElementById('responseContent');
try {
responseContent.textContent = 'Loading...';
responseSection.style.display = 'block';
responseSection.scrollIntoView({ behavior: 'smooth' });
// Use /api for root endpoint, others as-is
const url = endpoint === '/' ? `${API_BASE}/api` : `${API_BASE}${endpoint}`;
const response = await fetch(url);
const data = await response.json();
responseContent.textContent = JSON.stringify(data, null, 2);
responseContent.classList.add('json-highlight');
} catch (error) {
responseContent.textContent = `Error: ${error.message}`;
console.error('Endpoint test error:', error);
}
}
// Copy Response
function copyResponse() {
const responseContent = document.getElementById('responseContent');
navigator.clipboard.writeText(responseContent.textContent).then(() => {
const btn = document.querySelector('.btn-copy');
const originalText = btn.textContent;
btn.textContent = '✅ Copied!';
setTimeout(() => {
btn.textContent = originalText;
}, 2000);
});
}
// Close Response
function closeResponse() {
document.getElementById('responseSection').style.display = 'none';
}
// Auto-refresh status every 30 seconds
setInterval(() => {
checkHealth();
checkGPU();
}, 30000);