import { Router } from 'express'; import { z } from 'zod'; import { getDb, setSetting } from '../db/index.js'; import { listEmbeddingModels, getDefaultFamily } from '../services/embeddings.js'; export const embeddingsRouter = Router(); // Families with their provider chains, for the dashboard Embeddings tab. embeddingsRouter.get('/', (_req, res) => { const db = getDb(); const keyCounts = new Map(db.prepare("SELECT platform, COUNT(*) AS n FROM api_keys WHERE enabled = 1 AND status IN ('healthy', 'unknown') GROUP BY platform").all().map(r => [r.platform, r.n])); const byFamily = new Map(); for (const row of listEmbeddingModels()) { const list = byFamily.get(row.family) ?? []; list.push(row); byFamily.set(row.family, list); } const defaultFamily = getDefaultFamily(); res.json({ defaultFamily, families: [...byFamily.entries()].map(([family, rows]) => ({ family, dimensions: rows[0].dimensions, maxInputTokens: rows[0].max_input_tokens, isDefault: family === defaultFamily, providers: rows.map(r => ({ id: r.id, platform: r.platform, modelId: r.model_id, displayName: r.display_name, priority: r.priority, enabled: r.enabled === 1, quotaLabel: r.quota_label, keyCount: keyCounts.get(r.platform) ?? 0, })), })), }); }); const updateSchema = z.object({ defaultFamily: z.string().optional(), providers: z.array(z.object({ id: z.number(), priority: z.number(), enabled: z.boolean(), })).optional(), }); embeddingsRouter.put('/', (req, res) => { const parsed = updateSchema.safeParse(req.body); if (!parsed.success) { res.status(400).json({ error: { message: 'Invalid request body' } }); return; } const db = getDb(); if (parsed.data.defaultFamily) { const exists = db.prepare('SELECT 1 FROM embedding_models WHERE family = ?').get(parsed.data.defaultFamily); if (!exists) { res.status(400).json({ error: { message: `Unknown family '${parsed.data.defaultFamily}'` } }); return; } setSetting('embeddings_default_family', parsed.data.defaultFamily); } if (parsed.data.providers) { const update = db.prepare('UPDATE embedding_models SET priority = ?, enabled = ? WHERE id = ?'); const apply = db.transaction((rows) => { for (const r of rows) update.run(r.priority, r.enabled ? 1 : 0, r.id); }); apply(parsed.data.providers); } res.json({ success: true }); }); // Per-family usage: requests today (most embedding quotas are daily/RPM) and // tokens this calendar month, from the tagged request log. embeddingsRouter.get('/usage', (_req, res) => { const db = getDb(); const usage = db.prepare(` SELECT em.family, COALESCE(SUM(CASE WHEN r.created_at >= datetime('now', 'start of day') THEN 1 ELSE 0 END), 0) AS requests_today, COALESCE(SUM(CASE WHEN r.created_at >= datetime('now', 'start of month') THEN r.input_tokens ELSE 0 END), 0) AS tokens_month FROM embedding_models em LEFT JOIN requests r ON r.request_type = 'embedding' AND r.status = 'success' AND r.platform = em.platform AND r.model_id = em.model_id AND r.created_at >= datetime('now', 'start of month') GROUP BY em.family `).all(); res.json({ families: usage.map(u => ({ family: u.family, requestsToday: u.requests_today, tokensMonth: u.tokens_month, })), }); }); //# sourceMappingURL=embeddings.js.map