Handler CF Workers: ai-eval/run — Endpoint de evaluación multi-provider
Handler CF Workers: ai-eval/run
Identificación
| Campo | Valor |
|---|
| Ruta | functions/api/tools/ai-eval/run.ts |
| Tipo | Cloudflare Pages Function (handler HTTP) |
| Método | POST /api/tools/ai-eval/run |
| Autenticación | API keys por provider, enviadas en el body (cliente) |
| Runtime | Cloudflare Workers (edge) |
Schemas principales
Candidate
interface Candidate {
provider: 'gemini' | 'anthropic' | 'openai' | 'openrouter';
model: string; // ej: 'claude-haiku-4-5', 'gpt-5.4-mini'
label?: string;
}
EvalCase
interface EvalCase {
id: string;
prompt: string;
system_instruction?: string;
temperature?: number;
max_tokens?: number;
response_json?: boolean;
image_b64?: string; // Imagen PNG en base64 para vision
}
CellResult
interface CellResult {
answer: string;
latency_ms: number;
tokens_in?: number;
tokens_out?: number;
error?: string;
}
RunBody (request body)
interface RunBody {
candidates: Candidate[];
cases: EvalCase[];
api_keys: {
gemini?: string;
anthropic?: string;
openai?: string;
openrouter?: string;
};
notes?: string;
}
Funciones de provider
| Función | Provider | API Base | Auth |
|---|
callGemini | Google AI | generativelanguage.googleapis.com | query param key |
callAnthropic | Anthropic | api.anthropic.com/v1/messages | header x-api-key |
callOpenAI | OpenAI | api.openai.com/v1/chat/completions | Authorization: Bearer |
callOpenRouter | OpenRouter | openrouter.ai/api/v1/chat/completions | Authorization: Bearer |
callAnthropic — detalles
- Versión de API fijada:
anthropic-version: 2023-06-01
- Vision:
content array con bloques { type: 'image', source: { type: 'base64' } }
system_instruction → campo system de nivel superior (no en messages)
max_tokens por defecto: 2048
callOpenAI — detalles
- Usa
max_completion_tokens (compatible GPT-4o y GPT-5+)
- Guard o-series: regex
/^o\d/i detecta modelos de razonamiento y omite temperature
- Vision: bloque
image_url con data URI data:image/png;base64,...
- JSON mode:
response_format: { type: 'json_object' } cuando EvalCase.response_json
Enrutador runCell
async function runCell(c, ec, keys): Promise<CellResult>
Guard explícito por provider: si la key correspondiente está ausente, devuelve error inmediato sin llamada de red. El fall-through devuelve error: 'Provider desconocido: <x>'.
Historial de cambios relevantes
| Commit | Fecha | Cambio |
|---|
3ad21cc | 2026-04-27 | Añade callAnthropic y callOpenAI; extiende Candidate.provider y RunBody.api_keys |
Véase también
- [[feature—workspace—ai-eval-providers]]