|
|
|
|
|
|
|
|
|
|
|
|
|
import { nebiusClient } from './nebius-client'; |
|
import { modalClient } from './modal-client'; |
|
|
|
interface APIHealthStatus { |
|
service: string; |
|
status: 'healthy' | 'error' | 'missing_key'; |
|
message: string; |
|
responseTime?: number; |
|
} |
|
|
|
export async function checkAPIHealth(): Promise<APIHealthStatus[]> { |
|
const results: APIHealthStatus[] = []; |
|
|
|
|
|
try { |
|
if (!process.env.NEBIUS_API_KEY) { |
|
results.push({ |
|
service: 'Nebius AI', |
|
status: 'missing_key', |
|
message: 'NEBIUS_API_KEY environment variable not set' |
|
}); |
|
} else { |
|
const startTime = Date.now(); |
|
await nebiusClient.createEmbeddings({ |
|
input: "test", |
|
model: "text-embedding-3-small" |
|
}); |
|
const responseTime = Date.now() - startTime; |
|
|
|
results.push({ |
|
service: 'Nebius AI', |
|
status: 'healthy', |
|
message: 'Successfully generated test embeddings', |
|
responseTime |
|
}); |
|
} |
|
} catch (error) { |
|
results.push({ |
|
service: 'Nebius AI', |
|
status: 'error', |
|
message: `API Error: ${error instanceof Error ? error.message : 'Unknown error'}` |
|
}); |
|
} |
|
|
|
|
|
try { |
|
if (!process.env.MODAL_TOKEN_ID || !process.env.MODAL_TOKEN_SECRET) { |
|
results.push({ |
|
service: 'Modal', |
|
status: 'missing_key', |
|
message: 'MODAL_TOKEN_ID or MODAL_TOKEN_SECRET environment variable not set' |
|
}); |
|
} else { |
|
const startTime = Date.now(); |
|
|
|
try { |
|
await modalClient.getTaskStatus('health-check-test'); |
|
} catch (error) { |
|
|
|
if (error instanceof Error && error.message.includes('404')) { |
|
const responseTime = Date.now() - startTime; |
|
results.push({ |
|
service: 'Modal', |
|
status: 'healthy', |
|
message: 'API accessible and responding', |
|
responseTime |
|
}); |
|
} else { |
|
throw error; |
|
} |
|
} |
|
} |
|
} catch (error) { |
|
results.push({ |
|
service: 'Modal', |
|
status: 'error', |
|
message: `API Error: ${error instanceof Error ? error.message : 'Unknown error'}` |
|
}); |
|
} |
|
|
|
|
|
try { |
|
if (!process.env.NEBIUS_API_KEY) { |
|
results.push({ |
|
service: 'Nebius Chat (DeepSeek)', |
|
status: 'missing_key', |
|
message: 'NEBIUS_API_KEY environment variable not set' |
|
}); |
|
} else { |
|
const startTime = Date.now(); |
|
await nebiusClient.createChatCompletion({ |
|
model: "deepseek-ai/DeepSeek-R1-0528", |
|
messages: [{ role: "user", content: "Hello" }], |
|
max_tokens: 5 |
|
}); |
|
const responseTime = Date.now() - startTime; |
|
|
|
results.push({ |
|
service: 'Nebius Chat (DeepSeek)', |
|
status: 'healthy', |
|
message: 'Successfully completed test chat with DeepSeek model', |
|
responseTime |
|
}); |
|
} |
|
} catch (error) { |
|
results.push({ |
|
service: 'Nebius Chat (DeepSeek)', |
|
status: 'error', |
|
message: `API Error: ${error instanceof Error ? error.message : 'Unknown error'}` |
|
}); |
|
} |
|
|
|
|
|
try { |
|
if (!process.env.GITHUB_TOKEN) { |
|
results.push({ |
|
service: 'GitHub', |
|
status: 'missing_key', |
|
message: 'GITHUB_TOKEN environment variable not set' |
|
}); |
|
} else { |
|
const startTime = Date.now(); |
|
const response = await fetch('https://api.github.com/user', { |
|
headers: { |
|
'Authorization': `token ${process.env.GITHUB_TOKEN}`, |
|
'User-Agent': 'Knowledge-Base-Browser' |
|
} |
|
}); |
|
const responseTime = Date.now() - startTime; |
|
|
|
if (response.ok) { |
|
results.push({ |
|
service: 'GitHub', |
|
status: 'healthy', |
|
message: 'Successfully authenticated with GitHub API', |
|
responseTime |
|
}); |
|
} else { |
|
results.push({ |
|
service: 'GitHub', |
|
status: 'error', |
|
message: `HTTP ${response.status}: ${response.statusText}` |
|
}); |
|
} |
|
} |
|
} catch (error) { |
|
results.push({ |
|
service: 'GitHub', |
|
status: 'error', |
|
message: `API Error: ${error instanceof Error ? error.message : 'Unknown error'}` |
|
}); |
|
} |
|
|
|
return results; |
|
} |
|
|