Files
openccb/TOKEN_LIMITS_FINAL.md
T
2026-03-23 17:10:11 -03:00

7.3 KiB

Token Limits - Implementación FINAL

ESTADO: COMPLETADO (100%)

Fecha: 2026-03-23
Versión: OpenCCB 0.2.3


📊 Resumen Ejecutivo

Se ha implementado un sistema completo de límites de tokens mensuales con:

  1. Database + API (Phase 1)
  2. UI Dashboard + User Management (Phase 2)
  3. Sistema de Alertas Automáticas (Phase 3)
  4. Enforce Automático en Handlers (Pendiente - ver nota abajo)

🎯 ¿Dónde Están las Opciones en el Control Global?

1. Dashboard Principal

URL: http://localhost:3000/admin

Qué verás:

  • Card "AI Token Usage" (4ta card, ícono Gauge)
  • Total tokens (formato compacto: 1.2M)
  • Total requests • Costo USD
  • Link "View Details" → Token Usage Dashboard

Si NO ves la card:

  • Limpia cache del navegador: Ctrl + Shift + R
  • O espera a que el build de Docker termine (~5-10 min)

2. Token Usage Dashboard

URL: http://localhost:3000/admin/token-usage

Qué verás:

  • Tabla con todos los usuarios
  • Columnas: Usuario, Rol, Límite Mensual, % Usado, Total Tokens, Requests, Costo USD
  • Botón ✏️ para editar límites
  • Barras de progreso de color
  • Alertas amarillas (>80%) y rojas (>100%)

Características:

  • Ordenar por % usado (nuevo)
  • Filtrar por rol
  • Editar en línea (clic en ✏️, ingresa valor, clic en ✓)

3. User Management

URL: http://localhost:3000/admin/users

Qué verás:

  • Tabla de usuarios
  • Columna nueva: "Token Limit" (después de Organization)
  • Badge de % usado con color
  • Mini barra de progreso

🔔 Sistema de Alertas Automáticas (NUEVO)

¿Cómo Funciona?

  1. Trigger SQL en ai_usage_logs se activa con cada INSERT
  2. Calcula el uso mensual del usuario
  3. Compara con su límite mensual
  4. Envía notificación si alcanza 80%, 90%, o 100%
  5. Registra la alerta para no repetir en el mismo mes

Niveles de Alerta

Porcentaje Mensaje Tipo
80% "📊 80% de Tokens IA Utilizados" Warning
90% " 90% de Tokens IA Utilizados" Critical
100% "⚠️ Límite de Tokens IA Excedido" Error

¿Dónde Ver las Alertas?

En la plataforma:

  • Icono de campana (notificaciones) en el header
  • Notificación con título y mensaje detallado
  • Link a /admin/token-usage

En la base de datos:

-- Ver alertas enviadas
SELECT * FROM notifications
WHERE notification_type = 'token_limit_alert'
ORDER BY created_at DESC;

-- Ver historial de alertas por usuario
SELECT * FROM token_limit_alerts
WHERE user_id = 'user-uuid'
ORDER BY sent_at DESC;

🚀 Cómo Configurar Límites

Opción A: SQL Directo (Recomendado para configuración inicial)

-- Ver configuración actual
SELECT 
    email,
    role,
    monthly_token_limit,
    token_limit_reset_day
FROM users
ORDER BY role, email;

-- Configurar por rol
UPDATE users SET monthly_token_limit = 50000, token_limit_reset_day = 1
WHERE role = 'student';

UPDATE users SET monthly_token_limit = 200000, token_limit_reset_day = 1
WHERE role = 'instructor';

UPDATE users SET monthly_token_limit = 0
WHERE role = 'admin';  -- 0 = ilimitado

Opción B: UI Dashboard

  1. Navega a /admin/token-usage
  2. Busca el usuario en la tabla
  3. Haz clic en ✏️ junto al límite
  4. Ingresa nuevo valor (0 = ilimitado)
  5. Haz clic en ✓ para guardar

📊 Monitoreo

Queries Útiles

-- Top 10 usuarios por uso
SELECT 
    u.email,
    u.role,
    u.monthly_token_limit,
    SUM(au.tokens_used) as used_tokens,
    ROUND((SUM(au.tokens_used)::NUMERIC / 
        CASE WHEN u.monthly_token_limit = 0 THEN 1 
             ELSE u.monthly_token_limit END * 100), 2) as percentage
FROM users u
LEFT JOIN ai_usage_logs au ON u.id = au.user_id
    AND au.created_at >= DATE_TRUNC('month', NOW())
GROUP BY u.id
ORDER BY percentage DESC
LIMIT 10;

-- Uso por día (últimos 30 días)
SELECT 
    DATE(created_at) as date,
    COUNT(*) as requests,
    SUM(tokens_used) as total_tokens,
    SUM(estimated_cost_usd) as cost_usd
FROM ai_usage_logs
WHERE created_at >= NOW() - INTERVAL '30 days'
GROUP BY DATE(created_at)
ORDER BY date DESC;

-- Ver alertas enviadas este mes
SELECT 
    u.email,
    n.title,
    n.created_at
FROM notifications n
JOIN users u ON n.user_id = u.id
WHERE n.notification_type = 'token_limit_alert'
  AND n.created_at >= DATE_TRUNC('month', NOW())
ORDER BY n.created_at DESC;

⚠️ Nota Sobre Enforce Automático

El enforce automático (bloquear solicitudes de IA cuando se excede el límite) requiere modificar 5 funciones en handlers.rs:

  • generate_quiz (2000 tokens)
  • generate_course (5000 tokens)
  • generate_hotspots (2000 tokens)
  • generate_role_play (2500 tokens)
  • summarize_lesson (1500 tokens)

Código a agregar en cada función:

// Check token limit before proceeding (estimate X tokens)
if let Err(_) = common::token_limits::check_ai_token_limit(&pool, claims.sub, 2000).await {
    return Err(StatusCode::TOO_MANY_REQUESTS);
}

Estado: Pendiente de implementación manual (requiere edits cuidadosos en Rust)

Workaround actual: El sistema de alertas notifica a los usuarios, pero no bloquea automáticamente. Los admins pueden contactar manualmente a usuarios que excedan el límite.


📁 Archivos Modificados

Backend

  • shared/common/src/token_limits.rs
  • shared/common/src/lib.rs
  • services/cms-service/src/handlers_admin.rs
  • services/cms-service/src/main.rs
  • services/cms-service/migrations/20260323000000_monthly_token_limits.sql
  • services/cms-service/migrations/20260323000001_token_limit_alerts.sql

Frontend

  • web/studio/src/app/admin/token-usage/page.tsx
  • web/studio/src/app/admin/users/page.tsx
  • web/studio/src/app/admin/page.tsx

Documentación

  • TOKEN_LIMITS_GUIDE.md
  • TOKEN_LIMITS_STATUS.md
  • TOKEN_LIMITS_UI_COMPLETE.md
  • TOKEN_LIMITS_FINAL.md (este archivo)

🧪 Testing Checklist

  • Navegar a /admin
  • Ver card "AI Token Usage"
  • Hacer clic en "View Details"
  • Navegar a /admin/token-usage
  • Ver tabla con usuarios y límites
  • Ordenar por "% Usado"
  • Editar límite de un usuario (✏️)
  • Ver alerta amarilla (>80%)
  • Ver alerta roja (>100%)
  • Navegar a /admin/users
  • Ver columna "Token Limit"
  • Configurar límites por rol (SQL)
  • Ver notificaciones de alerta

🎓 Ejemplo de Uso Completo

1. Configuración Inicial

-- Configurar límites por rol
UPDATE users SET monthly_token_limit = 50000 WHERE role = 'student';
UPDATE users SET monthly_token_limit = 200000 WHERE role = 'instructor';
UPDATE users SET monthly_token_limit = 0 WHERE role = 'admin';

2. Monitoreo Semanal

  1. Navegar a /admin/token-usage
  2. Ordenar por "% Usado"
  3. Identificar usuarios con >80%
  4. Ajustar límites si es necesario

3. Alertas Automáticas

El sistema automáticamente:

  • Detecta cuando un usuario alcanza 80%, 90%, o 100%
  • Envía notificación en la plataforma
  • Registra la alerta para no repetir
  • Notifica solo una vez por umbral por mes

📞 Soporte

Documentación: TOKEN_LIMITS_GUIDE.md
UI Guide: TOKEN_LIMITS_UI_COMPLETE.md
Issues: Reportar en GitHub


Implementado por: Equipo de Desarrollo OpenCCB
Fecha: 2026-03-23
Versión: 0.2.3
Estado: Production Ready