Monitor all AI integrations: Gemini Flash (text), Gemini Pro Image (design), GPT Image 1.5 (avatars). Cost tracking, rate limits, error monitoring, and optimization.
Backend schemas, queries, hooks, and components powering the AI Usage Dashboard.
_id: Id<"aiUsageLogs">
timestamp: number // Date.now()
model: "gemini-3-flash" | "gemini-3-pro-image" | "gpt-image-1.5"
feature: "ai_assistant" | "job_detection" | "sentiment" | "design_studio" | "avatar"
status: "success" | "error" | "cached" | "retried"
inputTokens: v.optional(v.number())
outputTokens: v.optional(v.number())
cost: number // USD cents
latencyMs: number
userId: v.optional(v.string())
errorType: v.optional("timeout" | "rate_limit" | "content_filter" | "invalid_input")
errorMessage: v.optional(v.string())
retryCount: v.optional(v.number())
cached: boolean // default false
resolution: v.optional(v.string()) // "256x256" | "512x512" | "1024x1024"
metadata: v.optional(v.any())
_id: Id<"aiQuotas">
model: "gemini-3-flash" | "gemini-3-pro-image" | "gpt-image-1.5"
rpmLimit: number // requests per minute
rpdLimit: number // requests per day
currentRpm: number
currentRpd: number
burstCapacity: number // percentage remaining
autoScale: boolean
fallbackEnabled: boolean
lastUpdated: number
_id: Id<"aiBudgets">
month: string // "2026-02"
budgetCents: number // $440 = 44000
spentCents: number
alertThreshold: number // 0.75 = 75%
alertSent: boolean
projectedCents: number
// Per-model breakdown
flashSpent: number
proImageSpent: number
gptImageSpent: number
_id: Id<"aiOptimizations">
type: "prompt_trim" | "resolution_downgrade" | "batch" | "cache_ttl"
title: string
description: string
estimatedSavingsCents: number
impact: "high" | "medium" | "low"
effort: "low" | "medium" | "high"
status: "pending" | "applied" | "dismissed"
appliedAt: v.optional(v.number())
appliedBy: v.optional(v.string())
// api.admin.aiUsage
overview({ period: "today" | "7d" | "30d" | "custom" })
modelDetail({ model: string, period })
costBreakdown({ period })
errorLog({ model?, errorType?, limit })
quotaStatus() // real-time quota snapshot
optimizations() // computed recommendations
// api.admin.aiUsage (mutations)
applyOptimization({ optimizationId })
dismissOptimization({ optimizationId })
updateBudget({ month, budgetCents, alertThreshold })
toggleAutoScale({ model, enabled })
toggleFallback({ model, enabled })
// Hooks
useAIUsageStats(period) // overview KPIs + model breakdown
useModelMetrics(model) // per-model detail
useAICostMetrics(period) // cost breakdown + budget
useQuotaMetrics() // real-time quota gauges
useAIErrorMetrics() // error feed + timeline
useAIOptimizations() // computed savings recs
// Screen Components
AIUsageOverview // KPIs + donut + model cards
ModelDetailScreen // per-model deep dive
CostBreakdownScreen // stacked bars + budget + pie
RateLimitsScreen // quota bars + throttle log
ErrorMonitoringScreen // timeline + error feed
OptimizationScreen // recs + cache stats
// Shared Components
ModelBreakdownChart // donut/conic-gradient
TokenUsageBar // input/output split bar
RequestsBarChart // horizontal bar chart
CostStackedBar // stacked segments by model
BudgetProgressBar // fill + threshold marker
QuotaGaugeRow // usage vs limit bar
ThrottleEventFeed // throttle log list
ErrorRateTimeline // color-coded bar timeline
ErrorLogFeed // error list + stack traces
RecommendationCard // optimization rec with actions
CachePerformanceCard // hit rate + saved $
RecentGenerationsGrid // lazy image grid
AvatarQueueStatus // live queue depth