En un post complementario comprobamos si un gateway te factura conteos de tokens honestos. Este pone a prueba la otra promesa: si el modelo detrás del nombre es de verdad ese modelo. Un revendedor puede devolverte algo que se llama a sí mismo claude-sonnet-4-6 pero es un modelo más pequeño, un fine-tune, un prompt envuelto en una plantilla fija, o el modelo real con su ventana de contexto y sus funciones nativas recortadas en silencio. La misma cadena en model, una cosa muy distinta en el cable.
No tienes que creerle a nadie su palabra. Cuatro pruebas cortas separan el modelo genuino de origen de un re-empaquetado. Ninguna depende de preguntarle al modelo "qué eres" — los modelos son narradores poco fiables de su propia identidad. Mejor sondea sus capacidades.
Las cuatro formas de falsificar un modelo
- El cambiazo. Se sirve un modelo más barato o más pequeño detrás del nombre del buque insignia. Lo más barato de ejecutar y lo más difícil de notar con prompts fáciles.
- El proxy con plantilla. Tu prompt se mete dentro de un andamiaje fijo antes de llegar al modelo — lo que cambia su comportamiento y infla tu factura de tokens con texto que nunca escribiste.
- La ventana recortada. Dice tener 200K de contexto pero trunca a una fracción, descartando en silencio la parte central de las entradas largas.
- Las funciones mutiladas. El uso de herramientas, la visión o el prompt caching se eliminan o se falsean, así que todo lo que va más allá del chat simple se degrada.
Prueba 1 — la ventana de contexto
Esconde un dato en lo profundo de un documento largo y pídelo de vuelta. Un modelo genuino de 200K de contexto lo recupera; una degradación truncada falla con la entrada o pierde la parte central:
# test_context_window.py
# Un modelo degradado detrás del nombre no puede sostener de verdad el contexto
# que dice tener. Esconde un dato en lo profundo de un documento largo y pídelo.
from openai import OpenAI
client = OpenAI(api_key="sk-brievio-...", base_url="https://api.brievio.com/v1")
needle = "The launch code is HORIZON-7741."
filler = ("This sentence is filler. " * 9000) # ~50K tokens de ruido
haystack = filler + "\n\n" + needle + "\n\n" + filler
resp = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[
{"role": "system", "content": "Answer only from the document."},
{"role": "user", "content": haystack + "\n\nWhat is the launch code?"},
],
max_tokens=20,
)
print(resp.choices[0].message.content) # genuino: "HORIZON-7741"
# Un proxy truncado/degradado falla con la entrada larga, o descarta en silencio
# la parte central y responde "no lo sé" — empuja el relleno más allá de la
# ventana que dice tener (p. ej. 150K+ tokens en un modelo de 200K) y observa qué se rompe.Prueba 2 — llamadas a herramientas nativas
Pide una llamada a herramienta e inspecciona tool_calls. El modelo genuino devuelve una llamada estructurada; un re-empaquetado que solo finge soportar herramientas devuelve null y vuelca un bloque JSON dentro del texto:
# test_tools.py — ¿llamadas a herramientas nativas, o un fake?
resp = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[{"role": "user", "content": "What's the weather in Tokyo? Use the tool."}],
tools=[{
"type": "function",
"function": {
"name": "get_weather",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}},
},
}],
tool_choice="auto",
)
msg = resp.choices[0].message
print("tool_calls:", msg.tool_calls) # genuino: una llamada estructurada get_weather(city="Tokyo")
# Un proxy re-empaquetado que en realidad no soporta herramientas devolverá tool_calls=None
# y en su lugar mete un bloque JSON en message.content como texto plano. Esa es la señal.Prueba 3 — visión
Envía una imagen cuyo contenido ya conozcas y pídele al modelo que la lea. Una degradación solo-texto no puede — alucina o falla:
# test_vision.py — ¿de verdad puede ver?
resp = client.chat.completions.create(
model="claude-sonnet-4-6",
messages=[{
"role": "user",
"content": [
{"type": "text", "text": "Reply with only the exact text shown in this image."},
{"type": "image_url", "image_url": {"url": "https://your-host/known-text.png"}},
],
}],
max_tokens=30,
)
print(resp.choices[0].message.content) # genuino: el texto de la imagen
# Una degradación solo-texto no puede leerla — alucina, falla en la parte de la
# imagen, o la ignora. Usa una imagen cuyo contenido ya conozcas de antemano.Prueba 4 — el caching y la factura
La cuarta verificación es la del post sobre inflación de tokens: envía un prefijo largo dos veces y confirma que cached_tokens no sea cero en la repetición, y que tus prompt_tokens coincidan con el texto que de verdad enviaste. Un proxy con plantilla falla en ambas — no puede cachear un prefijo que reescribe, y te factura por el envoltorio. La autenticidad del modelo y la honestidad del medidor van de la mano; verifícalas juntas.
Juntándolo todo
Un modelo genuino pasa las cuatro: sostiene su contexto completo, devuelve llamadas a herramientas reales, lee imágenes, cachea prefijos y factura los tokens que enviaste. Un re-empaquetado o una degradación falla al menos en una — normalmente primero en las caras de falsificar (contexto largo, visión). Corre la batería una vez cuando incorpores un gateway, y de nuevo cada vez que las respuestas de un modelo empeoren en silencio; estas regresiones son la forma en que se delatan las degradaciones silenciosas.
La referencia honesta
Brievio enruta los modelos genuinos de origen sobre canales de nube de primer nivel — Claude vía AWS Bedrock, Gemini vía Google Vertex — con la ventana de contexto completa, el uso nativo de herramientas, la visión y el prompt caching pasados sin tocar, y el modelo que pides es el modelo que recibes. Corre todas las pruebas de arriba contra Brievio y deberían pasar limpias. El catálogo de modelos lista las capacidades y el contexto reales de cada modelo, y la documentación muestra las formas exactas de las peticiones usadas aquí.
"¿Es el modelo real?" y "¿el medidor dice la verdad?" son las dos preguntas que vale la pena hacerle a cualquier gateway de IA — incluido este. Ambas toman cerca de un minuto en responderse. Hazlas.