Volver a la wiki

Wiki Translate — Pipeline de traducción ES→EN (CF Pages Function + script batch)

Descripción

Pipeline de traducción automática de páginas wiki de Español a Inglés en el repo CreaRackSL-workspace. Consta de dos callers que comparten la misma lógica y modelo de IA:

ComponenteArchivoContexto de uso
CF Pages Functionfunctions/api/wiki/translate.tsTraducción on-demand vía HTTP POST desde el editor wiki
Batch scriptscripts/translate-wiki.mjsTraducción en batch antes de astro build o manualmente

Modelo de IA

Gemma 4 26B-A4B-IT vía Google AI Studio Paid Tier (REST directo).

ENDPOINT: https://generativelanguage.googleapis.com/v1beta/models/gemma-4-26b-a4b-it:generateContent
ENV VAR:  GOOGLE_AI_API_KEY

Nota: workerd (Cloudflare Pages runtime) no soporta el SDK google-genai. Se usa fetch nativo directo a la REST API — patrón canónico documentado en archivo-core.ts (Help Widget bib_ask).

Historia de migraciones

FechaCambio
~2026-04-01Gemini 2.5 Flash (API directa) — versión original
2026-04-28 (s?, ADR decision--20260428--gemma-4-via-openrouter-migration)Gemini 2.5 Flash → Gemma 4 vía OpenRouter
2026-05-12 (s58 d21, commit e2e6847)OpenRouter → Google AI Studio Paid Tier directo (cierre de deuda s55)

Flujo (CF Pages Function translate.ts)

POST /api/wiki/translate   { file: "slug.md" }
        ↓
1. Lee source ES desde GitHub (GH_PAT, ya committed por el editor)
2. Traduce title + description con Gemma 4 (instrucción corta, quirúrgica)
3. Traduce body con Gemma 4 (instrucción de translator profesional)
4. Commit versión EN a wiki-en/
5. Actualiza titles.json con el par ES → EN

Auth: gestionado por _middleware.ts (CF Access o Bearer token).

Flujo (batch script translate-wiki.mjs)

node scripts/translate-wiki.mjs
        ↓
1. Escanea src/content/wiki/*.md
2. Filtra solo páginas user-facing (prefijo crearack--)
3. Para cada archivo nuevo/modificado:
   a. Traduce body con BODY_INSTRUCTION
   b. Traduce frontmatter con FM_INSTRUCTION
   c. Escribe resultado en src/content/wiki-en/
4. Genera/actualiza src/content/wiki-en/titles.json

Solo se traducen archivos con prefijo crearack-- (páginas user-facing del Help Widget). Las páginas internas (decision--*, concept--*, workspace--*) se omiten para reducir coste.

Configuración de parámetros AI

{
  "temperature": 0.2,
  "maxOutputTokens": 8192
}

Variables de entorno requeridas

VarDescripción
GOOGLE_AI_API_KEYAPI key de Google AI Studio Paid Tier (compartida con el resto del workspace)
GH_PATPersonal Access Token de GitHub con permisos de escritura al repo

OPENROUTER_API_KEY ya NO es requerida por este pipeline. Solo persiste en functions/types.ts para el caller ai-eval/run.ts (herramienta de comparación multi-proveedor, excepción legítima documentada en el ADR).

Fix TypeScript (s57 lote 3, s58 d21)

request.json() devuelve Promise<unknown> con TypeScript estricto. Se aplica el patrón canónico:

// ✅ Correcto (patrón s57 lote 3)
const body = (await request.json().catch(() => ({}))) as { file?: string };

// ❌ Incorrecto (pre-s58)
const body: any = await request.json().catch(() => ({}));

Véase también

Subir