Si tu código analiza la respuesta del modelo, necesitas un JSON que se pueda parsear en cada llamada. En GetVibe API hay tres formas de conseguirlo: el modo json_object, el modo estricto json_schema y las llamadas forzadas a herramientas. Los modelos difieren en cuáles admiten. Este artículo presenta la matriz según nuestro catálogo y muestra qué enfoque usar en cada caso.
Los tres enfoques
response_format: {"type": "json_object"}: el modelo devuelve JSON válido. Tú describes los campos en el prompt.response_format: {"type": "json_schema", ...}constrict: true: el modelo rellena exactamente el esquema que le pasas. Lo admiten GPT-5.x y los modelos compatibles.- Llamada forzada a herramienta (
toolsmástool_choicecon una función concreta): el modelo devuelve los argumentos de la función como JSON según el esquema de parámetros. Todos los modelos de texto de nuestro catálogo admiten llamadas a herramientas, así que esta es la opción portable.
La matriz
La columna de modo JSON es caps.jsonMode de https://getvibeapi.com/api/catalog, leído el 25 de septiembre de 2026.
| Modelo | Modo JSON | Herramientas | Precio |
|---|---|---|---|
| GPT-6 Luna | sí | sí | $0.0055 entrada · $0.0274 salida por 1M de tokens |
| GPT-6 Sol | sí | sí | $0.1096 entrada · $0.548 salida por 1M de tokens |
| GPT-6 Astra | no | sí | $0.548 entrada · $2.7398 salida por 1M de tokens |
| GPT-5.6 Sol (también Luna y Terra) | sí | sí | $0.0667 entrada · $0.40 salida por 1M de tokens |
| Claude Opus 5.5 | sí | sí | $0.1067 entrada · $0.5334 salida por 1M de tokens |
| Claude Sonnet 5 | sí | sí | $0.3334 entrada · $1.6667 salida por 1M de tokens |
| Gemini 3.1 Pro | sí | sí | $0.2515 entrada · $1.5086 salida por 1M de tokens |
| Gemini 3.8 Flash (también 3.7 Flash) | no | sí | $0.0097 entrada · $0.0483 salida por 1M de tokens |
| DeepSeek V4.1 Flash | sí | sí | $0.0112 entrada · $0.0445 salida por 1M de tokens |
| Qwen3.8 Max (también 3.8 Flash) | sí | sí | $0.1543 entrada · $0.4629 salida por 1M de tokens |
| Kimi K3 | sí | sí | $0.1715 entrada · $0.8572 salida por 1M de tokens |
| MiniMax M3 | sí | sí | $0.0148 entrada · $0.0591 salida por 1M de tokens |
| Tencent Hy4 Preview | sí | sí | $0.0334 entrada · $0.1001 salida por 1M de tokens |
| GLM-5.3 (también 5.3 Flash y 5.2) | no | sí | $0.10 entrada · $0.3143 salida por 1M de tokens |
En los modelos marcados con "no", usa una llamada forzada a herramienta, o describe el JSON en el prompt y valídalo en tu lado.
Qué hace el modo estricto en nuestro lado
Con strict: true en una solicitud json_schema, la pasarela enruta solo a variantes de modelo que realmente respetan el esquema. Lo hace en cada intento, incluido un cambio a un respaldo. Si no hay ninguna variante adecuada disponible, recibes un error explícito structured_output_unsupported en lugar de texto plano donde esperabas JSON. Esta protección se basa en nuestras mediciones y cubre solo las variantes que hemos medido.
Un caso conocido: la API propia de DeepSeek no tiene modo json_schema. Con los modelos DeepSeek, usa json_object, o una llamada forzada a herramienta cuando necesites exactamente una forma.
Ejemplos
Esquema estricto:
from openai import OpenAI
import json
client = OpenAI(base_url="https://getvibeapi.com/v1", api_key="sk-pv-...")
schema = {
"type": "object",
"properties": {"name": {"type": "string"}, "score": {"type": "number"}},
"required": ["name", "score"],
"additionalProperties": False,
}
resp = client.chat.completions.create(
model="gpt-6-luna",
response_format={"type": "json_schema",
"json_schema": {"name": "review", "strict": True, "schema": schema}},
messages=[{"role": "user", "content": "Rate this product: fast delivery, careful packaging"}],
)
print(json.loads(resp.choices[0].message.content))
Llamada forzada a herramienta, que funciona en modelos sin modo JSON:
resp = client.chat.completions.create(
model="gemini-3.8-flash",
tools=[{"type": "function", "function": {"name": "save_review", "parameters": schema}}],
tool_choice={"type": "function", "function": {"name": "save_review"}},
messages=[{"role": "user", "content": "Rate this product: fast delivery, careful packaging"}],
)
args = json.loads(resp.choices[0].message.tool_calls[0].function.arguments)
Valida siempre
Aunque el modo JSON esté activado, comprueba el objeto parseado contra tu esquema antes de usarlo y reintenta si falla. Esto importa sobre todo en salidas largas, donde una respuesta cortada en max_tokens es un JSON truncado. Revisa finish_reason: length significa que la respuesta se cortó.
Siguientes pasos
Lee la documentación de salidas estructuradas y la guía de llamadas a herramientas, o busca un modelo económico con JSON en nuestra lista de las APIs de LLM más baratas.
