Skip to content

Métricas y Observabilidad

Cada llamada al motor IA genera un registro en AIUsageMetric (modelo Prisma en apps/api):

// MetricsService registra después de cada respuesta LLM
await this.apiClient.post('/internal/ai-metrics', {
useCase,
provider,
model,
inputTokens,
outputTokens,
latencyMs,
estimatedCostUsd: this.estimateCost(provider, model, inputTokens, outputTokens),
userId,
errorCode: null, // o el código de error si falló
});

Tabla de precios por token (TOKEN_PRICING)

Section titled “Tabla de precios por token (TOKEN_PRICING)”

Archivo: apps/ai-backend/src/modules/metrics/pricing.constants.ts

ProveedorModeloInput (per 1K tokens)Output (per 1K tokens)
Anthropicclaude-sonnet-4-5$0.003$0.015
Anthropicclaude-haiku-4-5$0.00025$0.00125
OpenAIgpt-4o$0.005$0.015
OpenAIgpt-4o-mini$0.00015$0.0006
OpenAItext-embedding-3-small$0.00002$0
Geminigemini-1.5-pro$0.0035$0.0105
Geminigemini-1.5-flash$0.000075$0.0003

Archivo: apps/ai-backend/src/modules/router/circuit-breaker.service.ts

Protege contra proveedores degradados:

stateDiagram-v2
[*] --> CLOSED
CLOSED --> OPEN: failures >= 5 en 60s
OPEN --> HALF_OPEN: después de 30s
HALF_OPEN --> CLOSED: request exitosa
HALF_OPEN --> OPEN: fallo
EstadoComportamiento
CLOSEDTráfico normal al proveedor
OPENRedirige automáticamente al fallback
HALF_OPENPrueba una request — si falla vuelve a OPEN
interface CircuitStatus {
isOpen: boolean;
failures: number; // Contador de fallos en la ventana
lastFailureAt: Date;
nextRetryAt: Date; // Cuándo pasar a HALF_OPEN
}

El sistema genera AIAlert en BD cuando detecta anomalías. Tipos:

TipoCondiciónSeveridad
PROVIDER_ERROR_RATE_HIGHTasa de error > 10% en 5 minHIGH
LATENCY_DEGRADEDP95 latencia > 5000msMEDIUM
COST_THRESHOLD_EXCEEDEDCoste diario > umbral configuradoHIGH
CIRCUIT_BREAKER_OPENEDCircuit breaker activadoHIGH

Las alertas activas se muestran en /admin/ai/alerts y también aparecen en el dashboard de /admin/ai.

Accesible en /admin/ai/metrics (solo SUPER_ADMIN). Permite filtrar por:

  • Período (1h, 24h, 7d, 30d)
  • Proveedor (Anthropic / OpenAI / Gemini / all)
  • Caso de uso
  • Modelo

Métricas disponibles:

  • Número de llamadas totales
  • Tokens consumidos (input + output)
  • Coste estimado acumulado
  • Latencia P50 / P95 / P99
  • Tasa de error
  • Uso por caso de uso (chart)