Introducción
Chat compatible con OpenAI para Grok 4.5, el modelo de código de la línea Grok de xAI. Un turno lleva partes de texto e image_url, el esfuerzo de razonamiento sube hasta xhigh y una sola respuesta puede alcanzar 450.000 tokens.
xAI publica Grok 4.5 para software agéntico, ingeniería y tareas de flujo de trabajo, lo entrenó con datos adicionales de ciencia, ingeniería y matemáticas y también lo sirve bajo los alias grok-4.5-latest y grok-build-latest. Aquí vive como un endpoint en /v1/chat/completions que lee hasta 500.000 tokens repartidos en 256 mensajes ordenados como máximo y devuelve hasta 450.000 en una sola respuesta. La entrada, la entrada en caché y la salida se contabilizan por separado: eso es exactamente lo que paga un bucle de agente que repite un prefijo largo.
Funciones y aspectos destacados
El prefijo que reenvías tiene su propio medidor
Un bucle de agente manda en cada paso el mismo prompt de sistema, las mismas definiciones de herramientas y el mismo mapa de archivos; lo único nuevo es el final de la conversación. La entrada que se sirve desde la caché se cuenta aparte en el bloque usage y se contabiliza con su propia tarifa, más baja. No hay nada que activar. Dejar quietos los primeros mensajes entre pasos es toda la técnica, y la respuesta te dice qué parte del prefijo cayó de verdad en la caché en lugar de dejarte suponerlo.
Texto e imágenes de entrada, texto de salida
El contenido puede ser una cadena simple o un arreglo de partes, y este modelo declara dos: {"type": "text", "text": "..."} e {"type": "image_url", "image_url": {"url": "...", "detail": "auto|low|high"}}. Una captura de pantalla y la pregunta sobre ella viajan en el mismo turno, y el contenido de las imágenes se cuenta dentro de la ventana de 500.000 tokens, no encima de ella. En este endpoint no hay partes de archivo ni de PDF, así que una especificación, un registro o un diff tiene que llegar como texto pegado. El esfuerzo de razonamiento toma low, medium, high o xhigh y arranca en high; se paga en tokens de salida, así que cuenta contra el límite de respuesta tanto como contra la cuenta.
Parámetros de la solicitud
| Parámetro | Obligatorio | Descripción |
|---|---|---|
messages | Sí | 256 turnos como máximo. El contenido puede mezclar partes de texto e |
reasoning_effort | No | low, medium, high o xhigh. High es el valor por defecto; el esfuerzo se gasta en tokens de salida, así que xhigh sube la cuenta aunque la respuesta sea corta. |
max_tokens | No | Limita la respuesta visible a 450.000; el valor por defecto de 4.096 recorta una respuesta larga sin avisar. |
temperature | No | De 0 a 2, 0,7 por defecto. Usa 0 cuando compares dos parches o dos ejecuciones de la misma tarea. |
top_p | No | De 0,01 a 1. Ajusta este valor o temperature, pero no ambos a la vez. |
tools | No | Hasta 128 definiciones de funciones por solicitud. Mantener su orden estable entre pasos ayuda a que el prefijo siga siendo cacheable. máximo 128 elementos |
parallel_tool_calls | No | true o false, true por defecto: el modelo puede pedir varias llamadas a herramientas en un mismo turno. Valor predeterminado: |
tool_choice | No | auto, none, required, o un objeto que nombre la función a llamar. |
response_format | No | Pide un objeto JSON cuando la respuesta la parsee el siguiente paso de un agente y no la lea una persona. |
Precios
Entrada $2 / Salida $6 por 1 millón de tokens; Prompts de 200K tokens o más: Entrada $4 / Salida $12
El total de entrada incluye los tokens en caché. A partir de 200.000 tokens de entrada, las tarifas de contexto largo se aplican a toda la entrada, la entrada en caché y la salida de la solicitud; por debajo de ese umbral se usan las tarifas estándar. La entrada en caché se contabiliza aparte de la entrada nueva y se tarifa por debajo de ella. La salida incluye los tokens de razonamiento, así que subir el esfuerzo cuesta más aunque la respuesta visible mida lo mismo. Revisa el presupuesto antes de enviar. La retención inicial se calcula sin descontar ahorro por caché, y la liquidación devuelve la diferencia respecto del uso medido.
Casos de uso
Mantener el bucle entero dentro del contexto
Un agente de código reenvía en cada paso sus instrucciones, sus definiciones de herramientas y su mapa de archivos, y añade unos cientos de tokens nuevos cada vez. Todo eso cabe en la ventana de 500.000 tokens, la parte repetida se contabiliza como entrada en caché y la solicitud solo cruza a la tarifa de contexto largo a los 200.000 tokens sumados de entrada y entrada en caché, algo que la estimación previa al envío te dice antes de que lo pagues.
Refactorizar con el módulo, sus pruebas y el fallo en un turno
Pega juntos el módulo, el archivo de pruebas y la salida que falla, y pide el parche con el razonamiento detrás. Sube reasoning_effort a xhigh cuando el cambio haya que pensarlo antes de escribirlo: gasta más tokens de salida antes de que aparezca la primera línea de código, y eso es lo que conviene en una modificación que vas a revisar línea por línea.
Leer juntas una captura y una traza de error
Adjunta un tablero que falla como parte image_url con detail high, pega la traza de error como texto en el mismo mensaje y pide las causas en orden de probabilidad. La imagen y el registro llegan en un solo turno, así que el modelo lee el panel mismo en vez de tu descripción de él.
Recuperar un expediente de migración en una respuesta
450.000 tokens de salida alcanzan para un plan de migración completo, un módulo reescrito o un manual traducido en una sola respuesta en lugar de un bucle por capítulos. Sube max_tokens de forma explícita: el valor por defecto de 4.096 recorta una generación larga sin levantar ningún error, y el recorte es la falla que más se parece a una respuesta terminada.
Guía de prompts y consejos prácticos
Elige el nivel de esfuerzo por tarea, no por proyecto
reasoning_effort arranca en high, así que omitir el campo ya te hace pagar un trabajo cuidadoso y los tokens de salida que vienen con él. Decide llamada por llamada: xhigh para una migración o una demostración, high para una revisión normal, low para un turno mecánico como clasificar una línea de registro. Como el esfuerzo se paga en tokens de salida, una respuesta corta en xhigh puede salir más cara que una larga en low.
Pide el artefacto, con un cuerpo listo para pegar
Fija la forma de la salida en el mensaje de sistema y deja que el turno de usuario lleve las pruebas —el archivo, el registro, la captura— para que el modelo no tenga que adivinar el formato mientras resuelve el problema.
curl https://api.spicyapi.ai/v1/chat/completions \
-H "Authorization: Bearer $SPICY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "xai/grok-4.5",
"messages": [
{"role": "system", "content": "Return the patched file in full. No diffs, no commentary, no omitted regions."},
{"role": "user", "content": [
{"type": "text", "text": "Both panels are the same service before and after the deploy. Which one regressed, and what in the diff explains it?"},
{"type": "image_url", "image_url": {"url": "https://cdn.spicyapi.ai/models/examples/inputs/c681580c3c6a0b63.jpeg", "detail": "high"}}
]}
],
"reasoning_effort": "high",
"max_tokens": 32000
}'
Lee el bloque usage antes de ajustar nada
La respuesta informa por separado los tokens de entrada, de entrada en caché y de salida, y esa es la única contestación honesta a «¿se cacheó mi prefijo?». Ajusta desde ahí y no desde la forma de la conversación: si la parte en caché se queda en cero paso tras paso, algo cambia en los primeros mensajes —una marca de tiempo en el prompt de sistema, una lista de herramientas reordenada— y mover ese contenido al final de la solicitud suele ser toda la corrección. Para respuestas largas, activa el streaming con stream: true, que devuelve eventos chat.completion.chunk hasta data: [DONE].
Inicio rápido de la API
curl --fail-with-body -sN https://api.spicyapi.ai/v1/chat/completions \
-H "Authorization: Bearer $SPICY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"model": "xai/grok-4.5/chat",
"messages": [
{
"role": "user",
"content": "Summarise the following release notes into three bullet points."
}
],
"stream": true
}' \
| jq --unbuffered -Rrj 'select(startswith("data: ")) | .[6:] | select(. != "[DONE]") | fromjson | if .error then "\n[error] \(.error.message)\n" else (.choices[0].delta.content? // empty) end'
Consulta la referencia de la API para autenticación, el esquema completo, sondeo y gestión de errores.










