fokemal / server /src /routes /models.ts
automindy's picture
Upload 603 files
5569a86 verified
Raw
History Blame Contribute Delete
2.12 kB
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();
// List all models with availability info
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
`);
// Count keys per platform
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);
});