CreaRack-SL

Tool AI Eval — Evaluación Matriz de Modelos IA (Workspace)

Tool AI Eval — Evaluación Matriz de Modelos IA

Resumen

Herramienta web integrada en el Workspace de CreaRack que permite evaluar una matriz de modelos IA contra casos de prueba canónicos, sin pasar por el agente Django ni por CreaRack-Pro. Constituye el cierre formal de la Fase 4 del plan Gemini Lite Migration (sesión 33, 2026-04-27).

Replica funcionalmente el script scripts/eval_ai_models.py de CreaRack-Pro, trasladando la capacidad de evaluación a una interfaz web accesible a cualquier miembro del equipo autenticado vía Cloudflare Access.


Motivación

Durante la Fase 4 de la migración Gemini Lite se identificó la necesidad de comparar modelos en condiciones realistas (mismos prompts que producción) antes de migrar cada call site. El script Python era la herramienta de referencia pero requería acceso a la máquina de desarrollo. Esta tool lo democratiza y lo persiste.


Arquitectura

Sidebar.tsx
  └─ /tools (landing con cards)
       └─ /tools/ai-eval
            └─ AiEvalPanel.tsx (island React, ~570 LOC)
                 ├─ POST /api/tools/ai-eval/run      ← ejecuta matriz
                 ├─ GET  /api/tools/ai-eval/history  ← histórico paginado
                 └─ GET  /api/tools/ai-eval/templates ← 4 prompts canónicos

El backend corre como Cloudflare Pages Functions con acceso a la binding D1 (env.DB).


Endpoints

POST /api/tools/ai-eval/run

Ejecuta una matriz candidates × cases en paralelo. Cap de 25 celdas por run (margen bajo el límite de 50 subrequests de CF Workers).

Request body:

{
  "candidates": [
    { "provider": "gemini|openrouter", "model": "gemini-2.0-flash", "label": "Flash 2.0" }
  ],
  "cases": [
    {
      "name": "mib_classify",
      "prompt": "...",
      "system_instruction": "...",
      "temperature": 0.1,
      "max_tokens": 8192,
      "response_json": true,
      "image_b64": "<PNG base64 sin prefijo>"
    }
  ],
  "api_keys": { "gemini": "AIza...", "openrouter": "sk-or-..." },
  "notes": "Evaluación pre-migración v1.0.55"
}

Response:

{
  "run_id": 42,
  "duration_ms": 3210,
  "status": "completed|partial|failed",
  "results": {
    "mib_classify": {
      "gemini:gemini-2.0-flash": {
        "answer": "...",
        "latency_ms": 1200,
        "tokens_in": 512,
        "tokens_out": 384,
        "error": null
      }
    }
  }
}

⚠️ Las API keys NUNCA se persisten. Viajan únicamente en el body de cada request y se descartan tras la respuesta. La tabla D1 almacena modelos, prompts y respuestas, pero nunca credenciales.

Proveedores soportados:

  • gemini → llama a https://generativelanguage.googleapis.com/v1beta/models/{model}:generateContent
  • openrouter → llama a https://openrouter.ai/api/v1/chat/completions

Soporta imágenes (campo image_b64) para evaluar modelos con capacidad vision (ej. Auto-Plan AI). Las imágenes no se persisten en D1 — solo se registra has_image: true.


GET /api/tools/ai-eval/history

Devuelve histórico paginado de runs del workspace (interno, sin filtro por usuario).

ParamDefaultMáxDescripción
limit20100Filas por página
offset0—Desplazamiento
id——Si se pasa, devuelve ese run con results completos

GET /api/tools/ai-eval/templates

Devuelve los 4 prompts canónicos extraídos de scripts/eval_ai_models.py:

idLabelTipo salidaRequiere imagen
mibMIB AssistantJSON estructuradoNo
tutorNetwork TutorTexto naturalNo
perf_reviewPerf ReviewTexto naturalNo
visionVision (Auto-Plan)JSON estructuradoSí (PNG)

Estos templates replican los call sites IA reales de producción (Regla 8 CLAUDE.md), asegurando que la evaluación mida rendimiento en condiciones realistas.


Seguridad

  • API keys en body, no en headers ni D1: el usuario introduce sus keys en campos <input type="password">. La UI muestra un aviso explícito. Las keys se descartan tras cada request.
  • Autenticación Cloudflare Access: el email del runner se captura del header cf-access-authenticated-user-email (solo informacional, no restrictivo).
  • Sin CORS laxo: los endpoints de CF Pages Functions heredan la política del dominio workspace.

Tabla D1: ai_eval_runs

Ver [[entity—workspace—d1table—ai-eval-runs]].

Migración 0016_create_ai_eval_runs.sql — aplicada 2026-04-27.


Tamaño y excepción Regla 21

El commit suma ~1.250 LOC en 9 archivos, excediendo el límite de ≤400 LOC de la Regla 21 de CLAUDE.md. El propio commit documenta la excepción legítima: cierre formal de la Fase 4 del plan Gemini Lite Migration (iniciativa documentada, sesión 33).


Véase también

  • [[entity—workspace—d1table—ai-eval-runs]]
  • [[concept—general—que-paginas-wiki-existen-sobre-cloudflare-pages-fu]]