Saltar al contenido
Saltar al contenido

Referencia / Configuración

Página traducida automáticamente

Esta página se tradujo automáticamente, así que puede contener errores o sonar un poco rara. La versión en inglés es la fuente de la verdad. Leer el original en inglés.

Proveedores

Todos los proveedores de IA y de traducción automática que admite verbatra, con sus opciones y la variable de su clave de API, más el comportamiento común.

Selecciona un proveedor por id en el bloque provider de tu configuración. Anthropic, OpenAI, Gemini, OpenCode y openai-compatible son modelos de lenguaje; DeepL, Google Cloud Translation y LibreTranslate son servicios de traducción automática; none desactiva la traducción automática. La cobertura de idiomas está en Idiomas y locales, y qué recibe cada proveedor en Tratamiento de datos y privacidad.

¿Cuál elijo?

Cualquier proveedor funciona con cualquier formato y comando, y cambiar más tarde significa editar un solo id.

Si quieresUsa
Gratis, para un proyecto pequeño con cadenas no confidencialesGemini: un nivel de API gratuito, cuyas peticiones Google puede hacer que revisen personas fuera del EEE, Suiza y el Reino Unido (condiciones).
La mejor calidad para una app de producciónAnthropic u OpenAI, ambos de pago.
Alto volumen, un glosario nativo, sin LLMDeepL, nivel gratuito o de pago.
La cobertura más amplia con una clave de API en Google CloudGoogle Cloud Translation (Basic, v2).
Sin conexión, sin coste, sin que nada salga de tu redopenai-compatible con LM Studio, Ollama o vLLM.
Sin modelo de lenguaje, pero autoalojadoLibreTranslate en tu propio servidor.
Nada de traducción automáticanone: solo memoria y personas.

Las claves vienen del entorno

verbatra nunca lee una clave de la configuración. Cada proveedor alojado lee una variable:

Id de proveedorVariable de entorno
anthropicANTHROPIC_API_KEY
openaiOPENAI_API_KEY
geminiGEMINI_API_KEY
deeplDEEPL_API_KEY
google-translateGOOGLE_TRANSLATE_API_KEY
opencodeOPENCODE_API_KEY

Defínela en .env (que verbatra init añade a .gitignore), en tu shell o en el almacén de secretos de tu CI, y nunca la confirmes. Una variable no definida o vacía falla con MISSING_API_KEY, nombrando la variable pero nunca un valor. openai-compatible y libretranslate normalmente no necesitan clave.

Anthropic

verbatra.config.ts
provider: {
  id: "anthropic",
  options: {
    model: "claude-sonnet-4-6", // example model id
    maxTokens: 4096,
  },
}
OpciónTipoPor defectoEfecto
modelstringobligatoriaEl id del modelo.
maxTokensentero positivoobligatoriaLimita los tokens de salida de una respuesta (límites); sin relación con el presupuesto de nivel superior.
requestTimeoutMsentero positivo120000Acota cada intento de petición (Tiempo de espera de petición).
localeMapmapa de locale a códigoningunoSustituye el código enviado por locale (Códigos de locale).

Lee ANTHROPIC_API_KEY.

OpenAI

verbatra.config.ts
provider: {
  id: "openai",
  options: {
    model: "gpt-5.4-mini", // example model id
    maxOutputTokens: 4096,
  },
}
OpciónTipoPor defectoEfecto
modelstringobligatoriaEl id del modelo.
maxOutputTokensentero positivoobligatoriaLimita los tokens de salida de una respuesta.
requestTimeoutMsentero positivo120000Acota cada intento de petición.
localeMapmapa de locale a códigoningunoSustituye el código enviado por locale.

Lee OPENAI_API_KEY.

Gemini

verbatra.config.ts
provider: {
  id: "gemini",
  options: {
    model: "gemini-2.5-flash", // example model id
    maxOutputTokens: 4096,
  },
}
OpciónTipoPor defectoEfecto
modelstringobligatoriaEl id del modelo.
maxOutputTokensentero positivoobligatoriaLimita los tokens de salida de una respuesta.
requestTimeoutMsentero positivo120000Acota cada intento de petición.
localeMapmapa de locale a códigoningunoSustituye el código enviado por locale.

Lee GEMINI_API_KEY.

El nivel gratuito y sus límites

Una clave de Google AI Studio no necesita facturación, pero sus topes por minuto y por día pueden frenar una primera ejecución sobre muchos locales: traduce un locale cada vez o baja maxBatchSize, y vuelve a ejecutar para recoger el resto.

DeepL

verbatra.config.ts
provider: {
  id: "deepl",
  options: {
    glossaryId: "<your-glossary-id>",
  },
}
OpciónTipoPor defectoEfecto
glossaryIdstringningunoUn glosario que creaste en DeepL, aplicado de forma nativa.
requestTimeoutMsentero positivo120000La espera mínima por intento, hasta seis intentos.
localeMapmapa de locale a códigoningunoSustituye el código enviado por locale.

Lee DEEPL_API_KEY; options puede ser {}. DeepL no tiene modelo ni límite de tokens de salida, y se degrada con un aviso en lugar de fallar:

  • Los placeholders viajan como marcadores numerados en una etiqueta ignorada (Hello {{name}} como Hello <x>{0}</x>) y se restauran. PLACEHOLDER_UNSUPPORTED retiene un valor con un placeholder no literal o con <, >, { o } en el resto del texto, y un resultado con un marcador perdido, repetido, cambiado o sin etiqueta, una entidad desconocida o una etiqueta ajena. El marcado sin placeholders va como texto plano.
  • El tono se asigna a la formalidad (formal más, informal menos, neutral se omite). Una clave del nivel gratuito no envía ninguna formalidad e informa FORMALITY_DOWNGRADED. Una clave de pago la pide con prefer_more o prefer_less, así que un idioma sin formalidad, como el sueco, vuelve al registro predeterminado con el mismo aviso en lugar de fallar. El glosario no se aplica.

verbatra incluye la tabla de idiomas fechada de DeepL y rechaza un idioma que no está en ella con LOCALE_UNSUPPORTED_BY_PROVIDER antes de gastar nada. Un glossaryId solo funciona cuando los dos idiomas están en la lista de glosarios de DeepL (como DE, EN, FR, JA, ZH).

Google Cloud Translation

verbatra.config.ts
provider: {
  id: "google-translate",
  options: {},
}
OpciónTipoPor defectoEfecto
requestTimeoutMsentero positivo120000Acota la llamada completa (sin reintentos).
localeMapmapa de locale a códigoningunoSustituye el código enviado por locale.

Lee GOOGLE_TRANSLATE_API_KEY, una clave de API de un proyecto de Google Cloud con la Cloud Translation API activada. Solo funciona Basic (v2): Advanced (v3) necesita una cuenta de servicio.

  • Los placeholders se enmascaran como en DeepL, dentro de <span translate="no">; los saltos de línea, tabuladores y dobles espacios también se retienen.
  • Códigos. Cada código enviado se comprueba como BCP 47 bien formado antes de cualquier llamada (en_US falla con INVALID_REQUEST). Se permiten códigos regionales; un par que Google rechaza falla con INVALID_REQUEST desde la API.

verbatra incluye la tabla de idiomas fechada de Google y rechaza un idioma que no está en ella antes de gastar nada. Un código regional cuyo idioma solo aparece en la lista como un todo, como de-AT, se envía tal como está escrito con un aviso.

OpenCode

Aquí solo funcionan los modelos de OpenCode Zen que se sirven por /chat/completions (la tabla de modelos indica el endpoint de cada uno). OpenCode reserva Go y los modelos gratuitos de Zen para sus propios clientes.

verbatra.config.ts
provider: {
  id: "opencode",
  options: {
    model: "glm-5.3", // example: a Zen model served over Chat Completions
    maxOutputTokens: 4096,
  },
}
OpciónTipoPor defectoEfecto
modelstringobligatorioEl id del modelo.
maxOutputTokensentero positivoobligatorioLimita los tokens de salida de una respuesta.
requestTimeoutMsentero positivo120000Acota cada intento de petición.
localeMapmapa de locale a códigoningunoSustituye el código enviado por locale.

Endpoint fijo, sin baseUrl. Lee OPENCODE_API_KEY.

openai-compatible

Cualquier servidor que hable la API Chat Completions de OpenAI: LM Studio, Ollama, vLLM o una API alojada.

El servidor debe servir Chat Completions en <baseUrl>/chat/completions con salida de JSON schema estricto. Las pasarelas que solo atienden a sus propias apps cliente no funcionan.

verbatra.config.ts
provider: {
  id: "openai-compatible",
  options: {
    baseUrl: "http://192.168.178.74:1234/v1",
    model: "qwen2.5-14b-instruct", // example: whatever your server exposes
    maxOutputTokens: 1024,
  },
}
OpciónTipoPor defectoEfecto
baseUrlURL http o httpsobligatoriaLa raíz de la API, que suele terminar en /v1. Una URL que termina en /chat/completions o /completions se rechaza; una sin /v1 pasa la validación y falla al hacer la petición.
modelstringobligatoriaEl modelo que exponga tu servidor.
maxOutputTokensentero positivoobligatoriaLimita los tokens de salida de una respuesta.
apiKeyEnvVarnombre de variableningunoLa variable que contiene la clave de este servidor.
requestTimeoutMsentero positivo120000Acota cada intento de petición.
localeMapmapa de locale a códigoningunoSustituye el código enviado por locale.

Para una API alojada como Mistral:

verbatra.config.ts
provider: {
  id: "openai-compatible",
  options: {
    baseUrl: "https://api.mistral.ai/v1",
    model: "mistral-large-latest", // example: check Mistral's current model list
    maxOutputTokens: 4096,
    apiKeyEnvVar: "MISTRAL_API_KEY",
  },
}

La respuesta usa el mismo esquema estricto que openai; el primer objeto JSON balanceado se toma de cualquier prosa o bloque de código que lo rodee y se valida. verbatra init --provider openai-compatible --base-url <url> --model <name> escribe este bloque (init), y --api-key-env-var <NAME> añade el nombre de la variable.

Las claves son opcionales

La clave se resuelve en orden:

  1. apiKeyEnvVar: si está definido, su variable debe contener una clave, o la ejecución falla con MISSING_API_KEY.
  2. OPENAI_COMPATIBLE_API_KEY: se usa si está definida y no vacía.
  3. "local": un placeholder fijo y no secreto, que es lo que hace funcionar un servidor sin clave.

apiKeyEnvVar no puede nombrar la variable de un proveedor alojado, y el cliente nunca lee OPENAI_API_KEY, así que una clave alojada nunca llega a un baseUrl personalizado.

Una clave real sobre http en claro viaja sin cifrar

Con una clave y una URL http:// que no es loopback, la clave cruza tu red sin cifrar y sin aviso, así que usa https:// para un servidor que necesite clave.

Elegir un modelo local

Prefiere un modelo multilingüe ajustado por instrucciones y sin razonamiento, tan grande como tu hardware ejecute bien, como qwen2.5-14b-instruct. Los modelos de razonamiento y las compilaciones muy cuantizadas tienden a envolver o truncar la respuesta, lo que falla como INVALID_RESPONSE u OUTPUT_TRUNCATED.

LibreTranslate

Un servidor LibreTranslate autoalojado (Argos Translate, sin modelo de lenguaje). verbatra solo llama a su API HTTP, así que la licencia AGPL-3.0 del servidor no se extiende a tu proyecto.

verbatra.config.ts
provider: {
  id: "libretranslate",
  options: {
    baseUrl: "http://localhost:5000",
  },
}
OpciónTipoPor defectoEfecto
baseUrlURL http o httpsobligatoriaLa raíz de la API, sin /translate.
requestTimeoutMsentero positivo120000Acota la llamada completa (sin reintentos).
localeMapmapa de locale a códigoningunoSustituye el código enviado por locale.

Sus idiomas son los modelos instalados en tu servidor:

docker run -p 5000:5000 libretranslate/libretranslate --load-only en,de,fr
  • Clave. LIBRETRANSLATE_API_KEY se envía como api_key solo cuando está definida. Un servidor arrancado con --api-keys hace fallar la ejecución con MISSING_API_KEY cuando no está definida, y con AUTH_FAILED cuando la rechaza.
  • Los placeholders se enmascaran como en DeepL, como marcadores {0} sin etiqueta; el marcado se conserva, así que solo cuentan las llaves junto a un placeholder.
  • Marcado. Un valor con etiquetas de estilo HTML se envía en formato html: el texto dentro de las etiquetas se traduce, las etiquetas se quedan (una frase que cruza una etiqueta puede resentirse) y las etiquetas cambiadas se rechazan.
  • Comprobación de idiomas. Cada destino avisa LOCALE_UNVERIFIED_BY_PROVIDER en cada ejecución; verbatra doctor --locales --live los comprueba contra el servidor.

verbatra init --provider libretranslate --base-url <url> escribe este bloque.

none

Desactiva la traducción automática por política, para una norma que prohíbe enviar cadenas a cualquier servicio.

verbatra.config.ts
provider: { id: "none" }

options puede omitirse o ser {}. No se construye ningún proveedor, no se lee ninguna clave y no se hace ninguna petición; lo que hace cada comando en su lugar está en Trabajar sin traducción automática.

Tono y glosario entre proveedores

Una petición lleva solo los términos del glosario de su locale de destino, y cada salida se comprueba contra ellos.

Proveedortoneglossary
Anthropic, OpenAI, Gemini, OpenCode, openai-compatiblese envía y se respetatraducciones, traducciones prohibidas, términos que no se traducen y notas, enviados como datos vinculantes
DeepLse asigna a la formalidadGLOSSARY_IGNORED; solo se aplica glossaryId
Google Cloud Translation, LibreTranslateFORMALITY_DOWNGRADED con formal o informalGLOSSARY_IGNORED

Comportamiento que todo proveedor comparte

Lotes

El trabajo de un locale se envía en sublotes secuenciales de como mucho maxBatchSize entradas. Un sublote fallido se retiene y se reintenta en la siguiente ejecución mientras los demás siguen avanzando. DeepL y Google Cloud Translation además dividen un sublote para respetar sus propios topes por petición.

Reintentos

Los límites de tasa y los errores de servidor se reintentan con espera, por el cliente en OpenAI, OpenCode, openai-compatible, Anthropic y DeepL y por verbatra en Gemini. Google Cloud Translation y LibreTranslate no reintentan. Gemini respeta una espera indicada de hasta 5 segundos y hace fallar una más larga, como una cuota diaria agotada, al instante con RATE_LIMITED, que nombra la espera.

Tiempo de espera de petición

requestTimeoutMs (por defecto 120000 ms) evita que un servidor que nunca responde atasque una ejecución y retenga el bloqueo de escritura de un locale. Súbelo para un modelo local lento o un maxBatchSize grande.

verbatra.config.ts
provider: {
  id: "openai-compatible",
  options: {
    baseUrl: "http://192.168.178.74:1234/v1",
    model: "qwen2.5-14b-instruct",
    maxOutputTokens: 1024,
    requestTimeoutMs: 300000, // 5 minutes
  },
}
  • Por intento. Cada reintento recibe el límite completo. Los proveedores LLM también reintentan un intento que agotó el tiempo, y todos menos Gemini un error de conexión, así que un servidor colgado tarda hasta tres límites más las pausas.
  • El error nombra la causa. TIMEOUT significa que un intento no recibió respuesta a tiempo; las conexiones rechazadas repetidas fallan como PROVIDER_ERROR.
  • DeepL no puede abortar una petición en vuelo, así que una ejecución interrumpida la deja resolverse en DeepL.

Códigos de locale enviados al proveedor

Los archivos, el bloqueo y la memoria siempre usan los códigos de tu configuración. Solo la petición se traduce a lo que espera el proveedor:

ProveedorLocale de origenLocale de destino
DeepLSolo el idioma: en-US como EN, zh-Hant-TW como ZH.zh-Hant, zh-TW, zh-HK, zh-MO como ZH-HANT; zh-Hans, zh-CN, zh-SG como ZH-HANS. Las variantes de DeepL se conservan (EN-GB, EN-US, PT-BR, PT-PT, ES-419, FR-CA, FR-FR, DE-CH, DE-DE). El español con una región de Latinoamérica o del Caribe (MX, AR, CO, CL, PE, VE, EC, GT, CU, BO, DO, HN, PY, SV, NI, CR, PA, UY, PR, US, 419) como ES-419. Las demás regiones y escrituras se descartan: de-AT como DE.
Google Cloud Translationzh-Hant (zh-HK, zh-MO) como zh-TW, zh-Hans (zh-SG) como zh-CN, nb como no; todo lo demás tal como está escrito.Igual que el origen.
LibreTranslateSolo el idioma (de-AT como de), salvo que pt-BR se conserva y el chino se envía como zh-Hans o zh-Hant (zh-TW como zh-Hant).Igual que el origen.
Anthropic, OpenAI, Gemini, OpenCode, openai-compatibleTal como está escrito.Igual que el origen.

Un LLM recibe además los nombres de idioma, escritura y región. DeepL no tiene un inglés ni un portugués genéricos como destino, así que un destino que acaba siendo un en o pt escueto (como en-AU) se rechaza antes de la ejecución: asígnalo a EN-GB, EN-US, PT-BR o PT-PT.

localeMap sustituye el código por locale:

verbatra.config.ts
provider: {
  id: "deepl",
  options: {
    localeMap: {
      "en-AU": "EN-GB",
      "fr-BE": "FR-FR",
    },
  },
}
  • Las claves deben ser sourceLocale o un locale de destino como en la configuración, o la configuración falla con CONFIG_INVALID. El mapa va bajo options, en todos los proveedores salvo none.
  • Los valores son cadenas no vacías de 64 caracteres como máximo, enviadas sin cambios: como código de idioma a un proveedor de traducción automática, en lugar del código a un LLM ("pt-BR (Brazilian Portuguese)" funciona), cuyos nombres de idioma siguen saliendo de la clave. Un EN o PT escueto para DeepL falla con INVALID_REQUEST; un valor que el proveedor rechace hace fallar su sublote.
  • Efecto en la memoria. Solo las cadenas nuevas y cambiadas se envían con un código nuevo. Un mapa no vacío forma parte de la huella de la memoria, así que cambiarlo abre un compartimento aparte.

Comprobar el soporte de idiomas de un proveedor

Cada locale configurado se evalúa antes de gastar nada:

ProveedorSe evalúa contraSe rechaza antes de la ejecuciónGenera un aviso
DeepLSu tabla de idiomas incluida, con el soporte de glosario y de formalidad por idiomaUn idioma de origen o de destino que no está en la listaUn glosario para un par fuera de los idiomas de glosario, un tono sin formalidad, un código que aparece solo en parte en la lista
Google Cloud TranslationSu tabla de idiomas incluidaUn idioma que no está en la listaCualquier glosario, un tono formal o informal, un código regional que aparece en la lista solo como idioma
LibreTranslateNada antes de una ejecución; el /languages del servidor con doctor --liveNuncaCada locale de destino en cada ejecución, cualquier glosario, un tono formal o informal
Anthropic, OpenAI, Gemini, OpenCode, openai-compatibleNada: un LLM acepta cualquier idiomaNuncaUn idioma fuera de la lista de idiomas bien probados
noneNo aplicaNuncaNunca

Un locale no admitido se rechaza con LOCALE_UNSUPPORTED_BY_PROVIDER (salida 2) antes de construir ningún proveedor; una advertencia nunca rechaza y aparece como aviso. verbatra doctor informa de cada veredicto, y su opción --live comprueba la lista actual del proveedor, pero translate siempre usa la tabla incluida. Para un idioma añadido después, asigna el locale en localeMap: un código explícito se envía con un aviso, no se rechaza.

Errores estructurados

Un fallo de proveedor aflora como un error estructurado y sin secretos que solo afecta a su propio sublote. Un PROVIDER_ERROR nombra solo el host y el puerto de un baseUrl de openai-compatible o LibreTranslate, y en Google solo translation.googleapis.com, nunca la consulta que lleva su clave.

Límites de tokens de salida

Los proveedores LLM limitan los tokens de cada respuesta; un modelo que se detiene en el tope levanta OUTPUT_TRUNCATED. verbatra vuelve a dividir un sublote truncado en mitades, bajando hacia una sola entrada, y retiene solo una entrada que sigue desbordándose. Para resolverlo del todo, baja maxBatchSize o sube maxTokens (Anthropic) o maxOutputTokens. Un modelo de razonamiento gasta tokens de razonamiento ocultos del mismo presupuesto, así que dale margen de sobra.

Señales de revisión

Una traducción sospechosa de cualquier proveedor se marca para revisión, no se rechaza. Consulta los motivos de revisión y Revisar en Studio.

Editar en GitHub

En esta página