| import { Router } from 'express'; |
| import type { Request, Response } from 'express'; |
| import { getDb } from '../db/index.js'; |
| import { hasProvider } from '../providers/index.js'; |
|
|
| export const modelsRouter = Router(); |
|
|
| |
| modelsRouter.get('/', async (_req: Request, res: Response) => { |
| const db = getDb(); |
| const models = await db.all<{ |
| id: number; |
| platform: string; |
| model_id: string; |
| display_name: string; |
| intelligence_rank: number; |
| speed_rank: number; |
| size_label: string; |
| rpm_limit: number | null; |
| rpd_limit: number | null; |
| tpm_limit: number | null; |
| tpd_limit: number | null; |
| monthly_token_budget: string; |
| context_window: number | null; |
| enabled: number; |
| supports_vision: number; |
| supports_tools: number; |
| priority: number | null; |
| fallback_enabled: number | null; |
| }>(` |
| SELECT m.*, fc.priority, fc.enabled as fallback_enabled |
| FROM models m |
| LEFT JOIN fallback_config fc ON fc.model_db_id = m.id |
| ORDER BY COALESCE(fc.priority, m.intelligence_rank) ASC |
| `); |
|
|
| |
| const keyCounts = await db.all<{ platform: string; count: number }>(` |
| SELECT platform, COUNT(*) as count |
| FROM api_keys |
| WHERE enabled = 1 |
| GROUP BY platform |
| `); |
|
|
| const keyCountMap = new Map(keyCounts.map(k => [k.platform, k.count])); |
|
|
| const result = models.map(m => ({ |
| id: m.id, |
| platform: m.platform, |
| modelId: m.model_id, |
| displayName: m.display_name, |
| intelligenceRank: m.intelligence_rank, |
| speedRank: m.speed_rank, |
| sizeLabel: m.size_label, |
| rpmLimit: m.rpm_limit, |
| rpdLimit: m.rpd_limit, |
| tpmLimit: m.tpm_limit, |
| tpdLimit: m.tpd_limit, |
| monthlyTokenBudget: m.monthly_token_budget, |
| contextWindow: m.context_window, |
| enabled: m.enabled === 1, |
| supportsVision: m.supports_vision === 1, |
| supportsTools: m.supports_tools === 1, |
| priority: m.priority, |
| fallbackEnabled: m.fallback_enabled === 1, |
| hasProvider: hasProvider(m.platform as any), |
| keyCount: keyCountMap.get(m.platform) ?? 0, |
| })); |
|
|
| res.json(result); |
| }); |
|
|