Ajustes tras validar el harness contra la API real

Un lote de humo de 2 pedidos contra la Batch API confirmó el camino completo
—crear, consultar estado, recoger, normalizar— y dejó dos cosas a corregir:

- El costo estimado se redondeaba a 2 decimales, así que un trabajo chico
  informaba US$ 0.0. Pasa a 4 decimales: en una prueba de humo importa saber
  que gastaste algo, no que gastaste nada.
- cache_read_input_tokens quedó en 0. La causa es que el mínimo cacheable de
  Opus 5 son 512 tokens y el prompt de sistema de la prueba tenía 86: la marca
  cache_control no hace nada por debajo de ese umbral, y no avisa. Queda
  documentado en el código y en la config, con cómo detectarlo.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-27 23:39:25 -03:00
parent b88264f41b
commit 5b9f2a58bc
3 changed files with 12 additions and 2 deletions
+5 -1
View File
@@ -470,6 +470,10 @@ def resumen_de_uso(trabajo: Trabajo, config: DistillConfig) -> dict[str, Any]:
# Los tokens leídos de caché cuestan ~0,1x y los escritos ~1,25x; el
# descuento del lote se aplica sobre todo. Es una estimación para saber en
# qué orden de magnitud estamos, no una factura.
#
# Si cache_read_input_tokens da 0 en un trabajo grande, el prompt de sistema
# es más corto que el mínimo cacheable del modelo (512 tokens en Opus 5) y
# la marca cache_control no está haciendo nada.
entrada_efectiva = entrada + cache_read * 0.1 + cache_write * 1.25
usd = (
entrada_efectiva / 1e6 * config.usd_per_mtok_input
@@ -482,7 +486,7 @@ def resumen_de_uso(trabajo: Trabajo, config: DistillConfig) -> dict[str, Any]:
"output_tokens": salida,
"cache_read_input_tokens": cache_read,
"cache_creation_input_tokens": cache_write,
"usd_estimado": round(usd, 2),
"usd_estimado": round(usd, 4),
}