| 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('/', (_req: Request, res: Response) => {
|
| const db = getDb();
|
| const models = db.prepare(`
|
| 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
|
| `).all() as any[];
|
|
|
|
|
| const keyCounts = db.prepare(`
|
| SELECT platform, COUNT(*) as count
|
| FROM api_keys
|
| WHERE enabled = 1
|
| GROUP BY platform
|
| `).all() as { platform: string; count: number }[];
|
|
|
| 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),
|
| keyCount: keyCountMap.get(m.platform) ?? 0,
|
| }));
|
|
|
| res.json(result);
|
| });
|
|
|