---
title: "Estima el coste antes de una ejecución"
description: "Dimensiona una ejecución de traducción antes de gastar: cuenta las claves con un dry run, deja que verbatra calcule el coste y limita la ejecución acordada."
type: "how-to"
---
# Estima el coste antes de una ejecución

Dimensiona una ejecución de traducción antes de gastar: cuenta las claves con un dry run, deja que verbatra calcule el coste y limita la ejecución acordada.

Usa esto antes de la primera ejecución en un proyecto real, o antes de cualquier ejecución que alguien tenga que aprobar. verbatra no publica precios, porque las tarifas son del proveedor y cambian sin avisar. Cuenta lo que se te va a facturar y lo convierte en dinero en cuanto le das las tarifas actuales de tu proveedor.

En un proyecto típico, lo que cuesta es la primera ejecución, y la siguiente casi nada, porque solo se envían las claves que cambiaron.

## Cuenta el trabajo [#cuenta-el-trabajo]

```bash
verbatra translate --dry-run
```

```text output
verbatra translate (dry run)
  de: 400 would translate, 0 unchanged
  es: 400 would translate, 0 unchanged
  fr: 400 would translate, 0 unchanged
3 succeeded, 0 partial, 0 failed (dry run: nothing written)
```

`would translate` es el número de claves que enviaría una ejecución real: las que faltan en el archivo de destino más las que cambiaron de texto de origen. Un dry run no construye ningún proveedor, no lee ninguna clave y no escribe nada. Toma la cifra como un límite superior: se salta [la caché](https://verbatra.kreitz-webdev.de/es/docs/the-cache.md), que en una ejecución real sirve gratis las cadenas repetidas, y no agrupa las cadenas de origen idénticas, que una ejecución real envía una sola vez.

## Estima el gasto [#estima-el-gasto]

<AvailableFrom version="0.11.0" />

```bash
verbatra translate --estimate
```

```text output
verbatra translate (estimate)
  de: 400 would translate, 0 unchanged
  es: 400 would translate, 0 unchanged
  fr: 400 would translate, 0 unchanged
  estimate: 1200 keys in 24 requests, ~40944 input + ~30720 output tokens
  estimated spend: no rate on file for gemini/gemini-2.5-flash; add rates.table["gemini/gemini-2.5-flash"] to your config to see a currency figure
  estimate excludes: cache hits, duplicate source strings, provider-side retries, translation length, tokenizer differences, repair requests
3 succeeded, 0 partial, 0 failed (dry run: nothing written)
```

`--estimate` implica `--dry-run`, así que no gasta nada. Informa en la unidad que factura tu proveedor: tokens para un LLM, caracteres de origen para DeepL y Google Cloud Translation, y ningún coste de API para un servidor propio `openai-compatible` o `libretranslate`. Con `--json`, las mismas cifras están en `result.estimate`, por locale y en total, para que un script pueda decidir con ellas.

Para ver dinero, consulta la tarifa actual de tu modelo en la página de precios del propio proveedor:

| Proveedor | Factura por | Precios |
| --- | --- | --- |
| Gemini | tokens de entrada y de salida (con nivel gratuito) | [Gemini API pricing](https://ai.google.dev/gemini-api/docs/pricing) |
| Anthropic | tokens de entrada y de salida | [Anthropic pricing](https://platform.claude.com/docs/en/about-claude/pricing) |
| OpenAI | tokens de entrada y de salida | [OpenAI API pricing](https://developers.openai.com/api/docs/pricing) |
| OpenCode | tokens de entrada y de salida | [OpenCode Zen pricing](https://opencode.ai/docs/zen/) |
| DeepL | caracteres de origen | [DeepL API pricing](https://www.deepl.com/pro#api) |
| Google Cloud Translation | caracteres de origen | [Cloud Translation pricing](https://cloud.google.com/products/translate/pricing) |
| openai-compatible, LibreTranslate | nada: tu propio servidor | sin coste de API |

Luego añádela a la configuración con la fecha en que la consultaste:

```ts title="verbatra.config.ts"
export default defineConfig({
  // ...
  rates: {
    asOf: "2026-01-15",
    currency: "USD",
    table: {
      // placeholders: copy the current rates from https://ai.google.dev/gemini-api/docs/pricing
      "gemini/gemini-2.5-flash": { inputPerMillionTokens: 1, outputPerMillionTokens: 2 },
    },
  },
});
```

Las tarifas de arriba son marcadores, no precios citados. Cada cifra calculada con ellas lleva la fecha `asOf`, así que una tabla de precios antigua se ve antigua. verbatra nunca inventa una tarifa que falta ni imprime `0.00` para un modelo que no puede tarificar; en su lugar nombra la entrada que falta. El formato de las claves y las unidades están en [`rates`](https://verbatra.kreitz-webdev.de/es/docs/config-file.md#rates).

## Entiende qué cubre la cifra [#entiende-qué-cubre-la-cifra]

La estimación hace las cuentas que, si no, harías a mano:

- **Peticiones.** Las claves de cada locale se reparten en lotes de como mucho [`maxBatchSize`](https://verbatra.kreitz-webdev.de/es/docs/config-file.md#maxbatchsize) (por defecto `50`), una petición por lote, más los lotes que enviaría [`generatePlurals`](https://verbatra.kreitz-webdev.de/es/docs/config-file.md#generateplurals).
- **Entrada.** Cada petición a un LLM lleva unas reglas de sistema fijas (unos 550 tokens) y un esquema de respuesta (unos 100 tokens), y después las claves, sus descripciones, el tono y el glosario completo del locale de destino. El prompt se mide serializando la carga que se enviaría, así que un glosario grande cuenta en cada petición que lo lleva.
- **Salida.** La traducción aún no existe, así que se calcula como el texto de origen más un 50 por ciento, porque el alemán, el francés y el ruso suelen ser entre un tercio y la mitad más largos que el inglés.
- **Tokens.** Los caracteres se convierten a razón de unos cuatro por token, lo que encaja con prosa en inglés; otras escrituras son más densas.

Una ejecución real suele costar menos, por las dos razones por las que la cifra del dry run es un límite superior. También puede costar más, y la línea `estimate excludes` nombra cada motivo. Dos pesan más que el resto:

- **Reintentos.** Una petición fallida se [reintenta](https://verbatra.kreitz-webdev.de/es/docs/providers.md#reintentos): hasta dos intentos extra en Anthropic, OpenAI, OpenCode, `openai-compatible` y Gemini, cinco en DeepL, ninguno en Google Cloud Translation y LibreTranslate. Un intento que llegó al modelo se factura.
- **Reparaciones.** Cuando vuelven claves que faltan, verbatra envía una petición de reparación, que lleva de nuevo completos las reglas de sistema, el glosario y el tono.

Planifica con la cifra, pero no la prometas como techo. Además, la estimación solo cubre `translate`: volver a traducir una entrada desde [Studio](https://verbatra.kreitz-webdev.de/es/docs/review-in-studio.md) o con una herramienta de agente gasta por su propio camino.

## Limita la ejecución [#limita-la-ejecución]

<AvailableFrom version="0.12.0" />

Pon a la ejecución acordada un tope firme algo por encima de la suma de tokens de entrada y salida estimados:

```bash
verbatra translate --max-tokens 80000
```

Una petición que superaría el tope se retiene en lugar de enviarse, y sus claves quedan pendientes para la siguiente ejecución. Si la configuración también fija `maxTokens`, se aplica la cifra menor. DeepL, Google Cloud Translation y LibreTranslate no informan de tokens, así que con ellos el tope se aplica contra la proyección propia de verbatra. Consulta [Tope de tokens](https://verbatra.kreitz-webdev.de/es/docs/cli/translate.md#tope-de-tokens), y [`maxTokens` y `budgetBehavior`](https://verbatra.kreitz-webdev.de/es/docs/config-file.md#maxtokens-y-budgetbehavior) para un presupuesto que valga en cada ejecución.

## Calibra con un locale [#calibra-con-un-locale]

La cifra exacta sale de una ejecución real. Traduce un locale y lee el consumo:

```bash
verbatra translate --locales de
```

```text output
verbatra translate
  de: 400 translated, 0 unchanged, 18400 tokens (10800 in, 7600 out)
  total: 18400 tokens (10800 in, 7600 out)
1 succeeded, 0 partial, 0 failed
```

Multiplica por el número de locales que quedan. Con `--json`, las cifras son `usage.inputTokens` y `usage.outputTokens`. La ejecución gasta dinero real, pero el trabajo se conserva: ese locale ya está hecho.

## Lee lo que costaron las ejecuciones pasadas [#lee-lo-que-costaron-las-ejecuciones-pasadas]

<AvailableFrom version="0.7.0" pkg="@verbatra/studio" />

El Overview de Studio lista las ejecuciones registradas con su coste, fijado cuando terminó la ejecución, así que un cambio posterior en `rates` nunca lo reescribe. Un importe son los tokens que informó el proveedor por la tarifa vigente entonces. **Estimated** es una cifra de caracteres de origen para un proveedor que no informa del uso. **At least** es un mínimo, porque un locale no informó de tokens. **No rate** significa que ninguna tarifa coincidía con ese modelo, y **unknown** significa que se enviaron claves pero no volvieron tokens; ninguno es gratis. Los proveedores autoalojados muestran **not billed**. El registro está documentado en [`runHistory`](https://verbatra.kreitz-webdev.de/es/docs/sdk/history.md#runhistory); [Review in Studio](https://verbatra.kreitz-webdev.de/es/docs/review-in-studio.md) muestra la página.

## Proveedores de traducción automática [#proveedores-de-traducción-automática]

DeepL y Google Cloud Translation facturan caracteres de origen, no tokens, y LibreTranslate cuenta caracteres de origen sin facturar nada. verbatra les envía el texto de origen con los placeholders como marcadores numerados cortos, sin reglas de sistema, nombres de clave ni JSON alrededor. La estimación solo cuenta caracteres de origen. DeepL no factura las etiquetas alrededor de sus marcadores; si Google factura el marcado `span` que los rodea no está documentado. Un valor que estos proveedores retienen ([`PLACEHOLDER_UNSUPPORTED`](https://verbatra.kreitz-webdev.de/es/docs/error-codes.md#placeholder_unsupported)) no se envía, así que los caracteres enviados pueden ser menos que el total bruto.

### Google Cloud Translation [#google-cloud-translation]

<AvailableFrom version="0.10.0" />

Google Cloud Translation se cuenta como DeepL: caracteres de origen en la estimación y una cifra de tokens proyectada para un presupuesto `maxTokens`, marcada como estimada en el resumen de la ejecución.

## Estima desde un agente [#estima-desde-un-agente]

Dos herramientas de agente devuelven lo que imprime `translate --estimate --json`, para todos los locales o un subconjunto, y nunca llaman a un proveedor:

| Herramienta | Dónde |
| --- | --- |
| `translation.estimate` | el [servidor MCP](https://verbatra.kreitz-webdev.de/es/docs/cli/mcp.md) <AvailableFrom version="0.3.0" pkg="@verbatra/mcp" /> |
| `verbatra_translation_estimate` | [las herramientas de agente de Studio](https://verbatra.kreitz-webdev.de/es/docs/agent-tools-in-studio.md) <AvailableFrom version="0.6.0" pkg="@verbatra/studio" /> |

### Gasta dentro de lo estimado [#gasta-dentro-de-lo-estimado]

<AvailableFrom version="0.3.0" pkg="@verbatra/mcp" />

Después, `translation.translatePending` acepta los mismos `locales` y un tope `maxTokens`. Consulta [Estimar y luego gastar](https://verbatra.kreitz-webdev.de/es/docs/cli/mcp.md#estimar-y-luego-gastar).

## Por qué la siguiente ejecución cuesta menos [#por-qué-la-siguiente-ejecución-cuesta-menos]

Las cifras de arriba son el coste de la primera ejecución. Después, verbatra solo envía las claves que faltan o cuyo origen cambió desde la referencia de [el archivo de bloqueo](https://verbatra.kreitz-webdev.de/es/docs/the-lock-file.md), y [la caché](https://verbatra.kreitz-webdev.de/es/docs/the-cache.md) reutiliza traducciones anteriores de cadenas idénticas. En el día a día pagas por las cadenas que editaste. Para ensayar gratis, usa el nivel gratuito de Gemini o apunta `openai-compatible` a un modelo local; consulta [Proveedores](https://verbatra.kreitz-webdev.de/es/docs/providers.md).

## Relacionado [#relacionado]

- [`verbatra translate`](https://verbatra.kreitz-webdev.de/es/docs/cli/translate.md): `--dry-run`, `--estimate`, `--max-tokens` y `--locales`.
- [El archivo de configuración](https://verbatra.kreitz-webdev.de/es/docs/config-file.md#rates): `rates`, `maxTokens`, `budgetBehavior` y `maxBatchSize`.
- [Proveedores](https://verbatra.kreitz-webdev.de/es/docs/providers.md): las opciones de cada proveedor y dónde conseguir una clave.
