FreeLLMAPI / server /dist /routes /embeddings.js
Nryn215's picture
Upload folder using huggingface_hub
077865a verified
Raw
History Blame Contribute Delete
3.78 kB
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