Toda API de IA te cobra por token. Confías en que el objeto usage que devuelve el gateway — prompt_tokens, completion_tokens — sea el conteo real. Pero ese número es justo lo que un revendedor controla por completo, y es el lugar más fácil para cobrarte de más sin que lo notes. El nombre amable es inflación de tokens: el gateway reporta más tokens de los que realmente enviaste o recibiste, y pagas 5×, 10×, a veces 25× el coste honesto — sea el modelo genuino o no.
Este es el problema contra el que se construyó Brievio, así que vale la pena explicarlo sin rodeos: cómo funciona el relleno, una prueba de 20 líneas que puedes ejecutar contra cualquier gateway (incluido el nuestro) y cómo interpretar el resultado.
Qué es realmente la inflación de tokens
El conteo honesto de tokens es lo que el propio proveedor contaría para tus mensajes — tu system prompt, tu contenido de usuario, la respuesta del modelo. Un gateway confiable lo pasa tal cual. Uno inflado lo rellena. La misma petición, una factura muy distinta:
# Conteo honesto — coincide con el texto que enviaste, más una pequeña
# sobrecarga de la plantilla de chat (marcadores de rol, tokens de formato):
{"prompt_tokens": 24, "completion_tokens": 2, "total_tokens": 26}
# Inflado — enviaste ~20 tokens de texto, pero pagas por 1.840:
{"prompt_tokens": 1840, "completion_tokens": 2, "total_tokens": 1842}
# ^ un system prompt de ~1.800 tokens que nunca escribiste fue inyectado
# en la petición y te lo cobraron. En una pregunta de una sola palabra. En cada llamada.El truco más común es un system prompt inyectado y oculto: el revendedor antepone unos cientos o unos miles de tokens de su propio texto — un preámbulo de "seguridad", un envoltorio de enrutamiento, una persona falsa — a cada llamada. Nunca lo escribiste, no puedes verlo, pero lo pagas en cada petición. A las tarifas de input de Sonnet, un prefijo fantasma de 1.800 tokens son unos $0.0055 de margen puro sobre una pregunta de una sola palabra. Multiplícalo por un millón de llamadas al mes.
La prueba de 20 líneas
No tienes que creerle a nadie de palabra — tampoco a nosotros. Envía un prompt cuyo tamaño conoces y compara lo que el gateway te cobró contra los tokens a los que realmente equivale tu texto en tu propia máquina:
# token_inflation_test.py
# ¿Tu gateway reporta conteos de tokens honestos? Envía un prompt de tamaño
# conocido y compara el prompt_tokens que reporta el gateway contra el conteo
# de un tokenizador local sobre los mensajes EXACTOS que enviaste.
import tiktoken
from openai import OpenAI
client = OpenAI(api_key="sk-brievio-...", base_url="https://api.brievio.com/v1")
messages = [
{"role": "system", "content": "You are a terse assistant."},
{"role": "user", "content": "Reply with the single word: ok."},
]
# 1. Lo que el gateway te cobra:
resp = client.chat.completions.create(
model="claude-sonnet-4-6", messages=messages, max_tokens=5,
)
reported = resp.usage.prompt_tokens
# 2. A cuántos tokens equivalen realmente tus mensajes, en local:
enc = tiktoken.get_encoding("cl100k_base") # una aproximación — ver nota abajo
local = sum(len(enc.encode(m["content"])) for m in messages)
print(f"gateway reported prompt_tokens: {reported}")
print(f"local token count of your text: {local}")
print(f"ratio: {reported / local:.1f}x")
# Normal → ratio ~1.1-1.6x (marcadores de rol + sobrecarga de plantilla)
# Inflación → ratio 2x / 5x / 25x (un prompt oculto está rellenando tu input)Cómo leerlo: una pequeña sobrecarga fija es normal — los formatos de chat añaden un puñado de tokens para los marcadores de rol y los límites de mensaje, así que un ratio de alrededor de 1.1–1.6× en un prompt pequeño es correcto y baja hacia 1.0× a medida que tu prompt crece. Un ratio de 2×, 5× o 25× no es un error de redondeo: es relleno.
Una advertencia honesta: el cl100k_base de tiktoken es el tokenizador de OpenAI, y Claude o Gemini tokenizan un poco distinto (normalmente dentro de un 10–20%). Así que trata el conteo local como una aproximación, no como una auditoría token a token. Nunca explicará una diferencia de 2×, mucho menos de 25× — para una cifra exacta, usa el tokenizador propio del proveedor o su endpoint de count-tokens. La prueba está hecha para detectar inflación, no para discutir por tokens sueltos.
Revisa también el output y la caché
El input es el blanco habitual, pero el mismo relleno puede esconderse en los tokens de output y en la caché. Dos comprobaciones rápidas más:
# El output y la caché también se pueden rellenar. Dos comprobaciones más de 30 segundos:
#
# (a) Output: pide exactamente un token y limítalo.
resp = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[{"role": "user", "content": "Reply with only: ok"}],
max_tokens=2,
)
print(resp.usage.completion_tokens) # honesto: ~1-2. Rellenado: 50, 200, ...
#
# (b) Caché: envía el mismo prefijo largo dos veces en ~5 min. La segunda llamada
# debería cobrar la mayor parte del input a la tarifa reducida de lectura de caché.
# Si el campo "cached" siempre es 0, estás pagando precio completo por aciertos de caché.
print(resp.usage.prompt_tokens_details.cached_tokens)Si pides un token y te cobran cincuenta, o si tu cached_tokens se queda en cero en una llamada repetida idéntica, el contador está mal.
De dónde viene la inflación
- System prompts inyectados. Un preámbulo envoltorio añadido a cada petición — la fuente más común con diferencia. Grande, invisible, facturado.
- Modelos "proxy de plantilla" reenvueltos. Tu prompt se mete dentro de una plantilla fija y grande antes de llegar al modelo. Los tokens de la plantilla son tokens reales — para el modelo y para tu factura — pero no son tuyos.
- Cifras de uso fabricadas. La versión más burda: el objeto
usagesimplemente no coincide con la realidad. La prueba de arriba lo detecta de inmediato. - Relleno fantasma en el output. El
completion_tokensreportado supera las palabras realmente devueltas.
Nada de esto requiere un modelo falso. Un gateway puede servir el Claude genuino y aun así inflar el contador — la autenticidad del modelo y la honestidad de la factura son dos promesas distintas, y deberías verificar ambas.
La referencia honesta
Brievio pasa los conteos de tokens del propio proveedor sin alterarlos, no inyecta nada en tus peticiones y registra los tokens reales de input y output más el coste exacto en cada llamada, visible en tu panel de uso. Ejecuta la prueba de arriba contra Brievio y deberías ver reported ≈ local + sobrecarga pequeña — tal como debería leerse en todas partes. Nuestros precios muestran cada modelo frente a su tarifa de referencia oficial para que el descuento sea auditable, y la documentación de uso detalla exactamente qué campos devolvemos.
Si un gateway está un 80% por debajo del precio de lista, la primera pregunta no es "¿es real el modelo?" — es "¿qué dice el contador?". Ejecuta las 20 líneas. Cuesta menos de un centavo, y es la diligencia debida más barata que harás jamás sobre un proveedor.