Repository Public
1// Vrai-Prix — admin méthode du coût : consommation IA (ai_usage) et budgets jour / mois.2import { NextResponse } from "next/server";3import { adminAuth } from "@/lib/cost/connectors/admin";4import { getCostDb } from "@/lib/cost/db";56export const runtime = "nodejs";78export function GET(req: Request) {9 const denied = adminAuth(req);10 if (denied) return denied;11 const d = getCostDb();12 const day = d.prepare("SELECT COUNT(*) n, COALESCE(SUM(estimated_cost_usd),0) usd, COALESCE(SUM(input_tokens),0) input, COALESCE(SUM(output_tokens),0) output FROM ai_usage WHERE created_at >= date('now')").get();13 const month = d.prepare("SELECT COUNT(*) n, COALESCE(SUM(estimated_cost_usd),0) usd, COALESCE(SUM(input_tokens),0) input, COALESCE(SUM(output_tokens),0) output FROM ai_usage WHERE created_at >= date('now','start of month')").get();14 const byPurpose = d.prepare("SELECT purpose, model, COUNT(*) n, ROUND(COALESCE(SUM(estimated_cost_usd),0),4) usd, ROUND(AVG(latency_ms)) latencyMs, ROUND(AVG(estimated_cost_usd),5) avgUsd FROM ai_usage GROUP BY purpose, model ORDER BY usd DESC").all();15 const recent = d.prepare("SELECT id, analysis_id analysisId, purpose, model, input_images inputImages, input_tokens inputTokens, output_tokens outputTokens, estimated_cost_usd usd, latency_ms latencyMs, created_at createdAt FROM ai_usage ORDER BY created_at DESC LIMIT 50").all();16 const budgets = { dailyUsd: Number(process.env.AI_DAILY_BUDGET_USD ?? 5), monthlyUsd: Number(process.env.AI_MONTHLY_BUDGET_USD ?? 60) };17 const dayUsd = (day as { usd: number }).usd;18 const monthUsd = (month as { usd: number }).usd;19 return NextResponse.json({ day, month, byPurpose, recent, budgets, alerts: [dayUsd > budgets.dailyUsd ? "budget quotidien dépassé" : null, monthUsd > budgets.monthlyUsd ? "budget mensuel dépassé" : null].filter(Boolean) });20}21