Introduction
Chat compatible OpenAI pour Grok 4.5, le modèle de code de la gamme Grok de xAI. Un tour porte des blocs texte et image_url, l’effort de raisonnement monte jusqu’à xhigh, et une seule réponse peut atteindre 450 000 tokens.
xAI publie Grok 4.5 pour le développement logiciel agentique, l’ingénierie et les tâches de workflow, l’a entraîné avec des données supplémentaires de sciences, d’ingénierie et de mathématiques, et le sert aussi sous les alias grok-4.5-latest et grok-build-latest. Ici, il tient en un point de terminaison sur /v1/chat/completions qui lit jusqu’à 500 000 tokens répartis sur 256 messages ordonnés au plus et en rend jusqu’à 450 000 dans une seule réponse. L’entrée, l’entrée en cache et la sortie sont mesurées séparément : c’est précisément ce que paie une boucle d’agent qui rejoue un long préfixe.
Fonctionnalités et points forts
Le préfixe que vous renvoyez a son propre compteur
Une boucle d’agent envoie à chaque étape le même prompt système, les mêmes définitions d’outils et la même carte des fichiers ; seule la fin de la conversation est neuve. L’entrée servie depuis le cache est comptée à part dans le bloc usage et mesurée à son propre tarif, plus bas. Rien à activer. Laisser les premiers messages inchangés d’une étape à l’autre, c’est toute la technique, et la réponse vous dit quelle part du préfixe a réellement été servie depuis le cache au lieu de vous laisser le supposer.
Texte et images en entrée, texte en sortie
Le contenu peut être une simple chaîne ou un tableau de blocs, et ce modèle en déclare deux : {"type": "text", "text": "..."} et {"type": "image_url", "image_url": {"url": "...", "detail": "auto|low|high"}}. Une capture d’écran et la question qui l’accompagne arrivent dans le même tour, et le contenu des images est compté à l’intérieur de la fenêtre de 500 000 tokens, pas en plus. Il n’y a ni bloc fichier ni bloc PDF sur ce point de terminaison : une spécification, un journal ou un diff doit donc arriver sous forme de texte collé. L’effort de raisonnement accepte low, medium, high ou xhigh et vaut high par défaut ; il se paie en tokens de sortie et compte donc autant contre le plafond de réponse que contre la facture.
Paramètres de requête
| Paramètre | Obligatoire | Description |
|---|---|---|
messages | Oui | 256 tours au maximum. Le contenu peut mêler blocs text et |
reasoning_effort | Non | low, medium, high ou xhigh. High est le défaut ; l’effort se dépense en tokens de sortie, xhigh alourdit donc la facture même quand la réponse est courte. |
max_tokens | Non | Plafonne la réponse visible à 450 000 ; la valeur par défaut, 4 096, tronque sans prévenir une réponse longue. |
temperature | Non | 0 à 2, 0,7 par défaut. Mettez 0 pour comparer deux correctifs ou deux exécutions de la même tâche. |
top_p | Non | 0,01 à 1. Réglez ce paramètre ou temperature, pas les deux à la fois. |
tools | Non | Jusqu’à 128 définitions de fonctions par requête. Garder leur ordre stable d’une étape à l’autre aide le préfixe à rester éligible au cache. 128 éléments maximum |
parallel_tool_calls | Non | true ou false, true par défaut : le modèle peut demander plusieurs appels d’outils dans un même tour. Valeur par défaut: |
tool_choice | Non | auto, none, required, ou un objet qui nomme la fonction à appeler. |
response_format | Non | Réclamez un objet JSON quand la réponse est analysée par l’étape suivante d’un agent plutôt que lue par un humain. |
Tarification
Entrée $2 / Sortie $6 par 1 million de tokens; Prompts de 200K tokens ou plus: Entrée $4 / Sortie $12
L’entrée totale inclut les tokens mis en cache. À partir de 200 000 tokens d’entrée, les tarifs long contexte s’appliquent à toute l’entrée, à l’entrée en cache et à la sortie de la requête ; en dessous, les tarifs standard s’appliquent. L’entrée en cache est mesurée à part de l’entrée fraîche et tarifée en dessous. La sortie inclut les tokens de raisonnement, un effort plus élevé coûte donc davantage même si la réponse visible fait la même longueur. Vérifiez le budget avant l’envoi. Le montant bloqué au départ ne suppose aucune économie de cache ; la régularisation rembourse ensuite la différence d’après l’usage mesuré.
Cas d’utilisation
Garder toute la boucle dans le contexte
Un agent de code renvoie à chaque étape ses instructions, ses définitions d’outils et sa carte des fichiers, et ajoute quelques centaines de tokens neufs. Tout cela tient dans la fenêtre de 500 000 tokens, la partie répétée est mesurée comme entrée en cache, et la requête ne bascule au tarif long contexte qu’à 200 000 tokens cumulés d’entrée et d’entrée en cache — ce que l’estimation affichée avant envoi vous indique avant que vous ne payiez.
Refactoriser avec le module, ses tests et l’échec dans un même tour
Collez ensemble le module, le fichier de tests et la sortie en échec, puis demandez le correctif et le raisonnement qui le justifie. Montez reasoning_effort à xhigh quand le changement doit être pensé avant d’être écrit : il dépense davantage de tokens de sortie avant la première ligne de code, ce qui est le bon compromis pour une modification que vous relirez ligne à ligne.
Faire lire ensemble une capture et une trace d’appel
Joignez un tableau de bord en échec comme bloc image_url en detail high, collez la trace d’appel en texte dans le même message, puis demandez les causes par ordre de vraisemblance. L’image et le journal arrivent en un seul tour : le modèle lit donc le panneau lui-même plutôt que votre description.
Récupérer un dossier de migration en une réponse
450 000 tokens de sortie suffisent pour un plan de migration complet, un module réécrit ou un manuel traduit en une seule réponse plutôt qu’en boucle de chapitres. Relevez max_tokens explicitement : la valeur par défaut de 4 096 tronque une longue génération sans lever d’erreur, et la troncature est la panne qui ressemble le plus à une réponse terminée.
Guide de prompt et conseils pratiques
Choisir le niveau d’effort par tâche, pas par projet
reasoning_effort vaut high par défaut : omettre le champ, c’est déjà payer un travail minutieux et les tokens de sortie qui vont avec. Décidez appel par appel : xhigh pour une migration ou une preuve, high pour une relecture ordinaire, low pour un tour mécanique comme classer une ligne de journal. Comme l’effort se paie en tokens de sortie, une réponse courte en xhigh peut coûter plus cher qu’une longue en low.
Demander l’artefact, avec un corps prêt à coller
Fixez la forme de la sortie dans le message système et laissez le tour utilisateur porter les pièces — le fichier, le journal, la capture — pour que le modèle n’ait pas à deviner le format pendant qu’il traite le problème.
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
}'
Lire le bloc usage avant de régler quoi que ce soit
La réponse indique séparément les tokens d’entrée, d’entrée en cache et de sortie, et c’est la seule réponse honnête à la question « mon préfixe a-t-il été mis en cache ? ». Réglez à partir de là plutôt qu’à partir de la forme de la conversation : si la part en cache reste à zéro d’une étape à l’autre, c’est que quelque chose change dans les premiers messages — un horodatage dans le prompt système, une liste d’outils réordonnée — et déplacer ce contenu vers la fin de la requête suffit presque toujours. Pour les longues réponses, activez le streaming avec stream: true, qui rend des événements chat.completion.chunk jusqu’à data: [DONE].
Démarrage rapide de l’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'
La référence API détaille l’authentification, le schéma complet, le polling et la gestion des erreurs.










