Comparatif des fournisseurs LLM — Orkeon
État au 2026-09-19, dérivé du code source (
src/core/Orkeon.Infrastructure/LLMs/) et desLlmProviderCapabilitiesdéclarées par chaque fournisseur. Légende : ✓ supporté · ✗ absent · ◐ partiel/générique · † non campagné (déclaré depuis la documentation du vendeur, en attente de la première campagne en exécution réelle — les détails datés sont dans la version anglaise).
| Fournisseur | Classe de base | Streaming SSE | Tool calling natif | Chat multi-tours (rôles tool) | Message système | top_p / stop | Grammaire GBNF | response_format | thinking | Vision | reasoning_content round-trip | Cache prompt | Métriques timing | Résilience Polly | Sanitization clé API |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| OpenAI | OpenAI-compat | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ schema | ✓ effort | ✓ | ✗ | ◐ auto | ✗ | ✓ | ✓ |
| Azure OpenAI | OpenAI-compat | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ schema | ✓ effort | ✓ | ✗ | ◐ auto | ✗ | ✓ | ✓ |
| Anthropic | HttpLlmProviderBase | ✓ natif | ✓ | ✓ | ✓ (natif, séparé) | ✓ | ✗ | ✓ schema | ✓ toggle | ✓ | ✗ | ✓ explicite | ✗ | ✓ | ✓ |
| DeepSeek | OpenAI-compat | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ object | ✓ toggle | ✓ | ✓ | ✓ métriques | ✗ | ✓ | ✓ |
| Z.AI (GLM) | OpenAI-compat | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ object | ✓ toggle | ✓ | ✗ | ✓ métriques | ✗ | ✓ | ✓ |
| Together AI | OpenAI-compat | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ schema | ✗ | ✓ | ✗ | ◐ auto | ✗ | ✓ | ✓ |
| Mistral AI | OpenAI-compat | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ schema | ✓ effort | ✓ | ✗ | ◐ auto | ✗ | ✓ | ✓ |
| Qwen | OpenAI-compat | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ object | ✓ budget | ✓ | ✗ | ◐ auto | ✗ | ✓ | ✓ |
| Kimi / Moonshot | OpenAI-compat | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ object | ✓ toggle | ✓ | ✗ | ◐ auto | ✗ | ✓ | ✓ |
| Google Gemini | OpenAI-compat | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ schema | ✓ effort | ✓ | ✗ | ◐ auto | ✗ | ✓ | ✓ |
| Grok (x.AI) | OpenAI-compat | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ schema | ✓ effort | ✓ | ✗ | ◐ auto | ✗ | ✓ | ✓ |
| MiniMax | OpenAI-compat | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ (accepté mais non contraignant — mesuré) | ✗ (toujours actif, inline, extrait) | ✓ | ✓ | ◐ auto | ✗ | ✓ | ✓ |
| HuggingFace | OpenAI-compat | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ object | ✗ | ✓ | ✗ | ◐ auto | ✗ | ✓ | ✓ |
| OpenRouter † | OpenAI-compat | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ schema (par endpoint) | ✓ budget (objet reasoning) |
✓ (par modèle) | ✗ | ◐ auto (+ cache_write_tokens) |
✗ (usage.cost exposé) |
✓ | ✓ |
| Mammouth AI † | OpenAI-compat | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✗ (non documenté) | ✗ (non documenté) | ✓ (par modèle) | ✗ | ◐ auto | ✗ | ✓ | ✓ |
| Ollama | HttpLlmProviderBase | ✓ | ✓ (/api/chat) |
✓ (/api/chat) |
✓ (prepend) | ✗ | ✓ | ✓ schema | ✓ toggle | ✓ (images) |
✗ | ✗ | ✗ | ✓ | ✓ |
Comment lire les colonnes de capacités
response_format, thinking et Vision ne sont pas maintenus à la main ici : chaque fournisseur
déclare un value object LlmProviderCapabilities, et OpenAICompatibleProviderBase le traduit une
seule fois dans le dialecte OpenAI. Anthropic, Ollama et Qwen surchargent le hook parce que leurs
API parlent leur propre dialecte.
response_format—objectsignifie que l'API garantit un JSON bien formé ;schemasignifie qu'elle valide contre un JSON Schema côté serveur. Un schéma envoyé à un fournisseur qui ne supporte queobjectest rétrogradé avec un avertissement, jamais en silence. Anthropic est schema-only : il n'a pas d'équivalent dejson_object, donc une demande JSON sans schéma y est signalée plutôt qu'envoyée.thinking—effortn'accepte qu'une indication de niveau ;togglepeut en plus activer et désactiver le raisonnement ;budgetaccepte en outre un budget de tokens explicite (Qwen uniquement — Anthropic rejettebudget_tokensavec un 400 sur la génération actuelle). Sur le fil, le toggle d'Anthropic s'écritthinking: {type: adaptive|disabled}— un détail de payload, pas un niveau de capacité.- Tout ce qu'un fournisseur ne supporte pas est signalé. Une option déclarée en YAML sur un fournisseur qui ne peut pas l'honorer produit un avertissement actionnable nommant l'option, le fournisseur et le remède. C'était le vrai défaut relevé par l'audit du 2026-07-27 : pas le câblage manquant, mais son invisibilité.
Notes
- ◐ cache prompt (auto) : le fournisseur met en cache les préfixes de prompt implicitement et
rapporte le hit ;
OpenAICompatibleProviderBase.ParseSuccessResponselit génériquementprompt_cache_hit/miss_tokenset le champ standard OpenAIprompt_tokens_details.cached_tokens. ✓ explicite (Anthropic) signifie que le cache ne fait rien tant qu'un point d'arrêtcache_controln'est pas posé — opt-in viaLlmCacheConfig/ le bloc YAMLcache:. - SSE Anthropic :
ChatStreamingAsyncparse nativement le flux d'événements de la Messages API depuis LLM-05 ; auparavant il retombait sur une émulation bufferisée, donc aucun token n'arrivait tôt. - Tool calling Ollama : passe par
/api/chatdès que la conversation déclare des outils, rejoue des appels d'outils, ou transporte une image ; tout le reste conserve/api/generate(streaming NDJSON, GBNF). Le protocole de repli textuel reste en charge pour les modèles sans support des outils. - Azure OpenAI : deux formes d'API — l'URL de déploiement datée (par défaut) et la surface
v1 GA (
api_version: v1), seule voie vers la Responses API et vers les modèles non-OpenAI qu'Azure revend. - HuggingFace : les identifiants de modèle acceptent un suffixe de routage (
:fastest/:cheapest/:preferred/:<partner>) — le seul levier de coût et de latence sur Inference Providers. - top_p / stop : Ollama n'expose que
temperature+num_predict(= max_tokens). - OpenAI
max_completion_tokens: OpenAI a retirémax_tokensde ses modèles actuels (la campagne du 2026-08-30 a perdu dix modes sur ce seul champ), le dialecte OpenAI écrit doncmax_completion_tokens— accepté aussi par les générations antérieures (vérifié surgpt-4o-minile même jour). Les fournisseurs compatibles gardentmax_tokens: le retrait n'appartient qu'à OpenAI. response_formatGemini : non documenté sur la surface compat au premier audit (2026-08-18) et non déclaré alors ; mesuré en réel le 2026-08-30, la surface acceptejson_objectetjson_schemaet valide le schéma côté serveur — le provider déclare désormaisJsonSchema.- Vision DeepSeek : arrivée avec
deepseek-v4-flash-vision-exp(mesuré 2026-08-30), native sur le palier Flash depuis V4.1 Flash (2026-09-10) : le défautdeepseek-flashvoit, le compagnon expérimental est retiré. Déclaré par fournisseur, réel par modèle comme partout (D-03) :deepseek-v4-proreste texte seul et répond à une image par l'erreur du vendeur.deepseek-v4-flashest le nom d'un modèle retiré que l'API route « temporairement » vers V4.1 Flash — le défaut est passé à l'identifiant du vendeur le 2026-09-19. - MiniMax : adossé à sa campagne depuis le 2026-08-30 (7/2/3, le jour même de son
intégration). Le raisonnement arrive EN LIGNE — chaque réponse ouvre sur un bloc
<think>danscontent, sans champ séparé — et le dialecte l'extrait versreasoning_content, en le réinjectant au replay comme la doc du vendeur l'exige.response_formatest accepté mais NON contraignant (schéma ignoré,json_objecten clôture markdown) : la déclaration None est une mesure (appels bruts, 2026-08-30, consignée dans la note MiniMax du catalogue de campagne — le M8 archivé montre ➖ parce que la déclaration None empêche l'option d'être envoyée). Vision par modèle (D-03) :MiniMax-M2répond « I'm unable to view the image », et la famille VL n'apparaît pas au/modelsde la plateforme — pas de compagnon déclarable en l'état. - Grok (x.AI) : chaque capacité déclarée est une mesure en réel — une campagne complète de
12 modes est passée contre
api.x.aivia le dialecte OpenAI générique avant même que la classe du provider existe (2026-08-30, archivée sousllmproviders-test/custom-endpoints/). Les clés portent le préfixexai-, que la factory infère. - OpenRouter † : la place de marché (445 modèles de 60 vendeurs le 2026-09-18) derrière
une seule clé, intégrée documentation d'abord (LLM-09) — aucune campagne archivée encore.
Les identifiants sont
vendeur/modèle(préfixe obligatoire), avec les suffixes:free/:nitro/:flooret le slug routeuropenrouter/auto(utilisable, refusé comme défaut : le modèle servi dérive — la métadonnéeserved_modeldit qui a répondu). La trace de raisonnement revient dansreasoning, jamaisreasoning_content(hookReasoningFieldNamedu socle) ; le thinking voyage dans l'objet de requêtereasoning(enabled/effort/max_tokens, la déclaration Budget est donc celle du transport — OpenRouter convertit effort et budget l'un en l'autre selon le modèle) ; le coût réel arrive dansusage.cost(métadonnéecost) avec sa ventilationupstream_inference_cost/is_byok/cache_write_tokens/reasoning_tokens; deux en-têtes d'attribution constants (HTTP-Referer,X-OpenRouter-Title) nomment Orkeon.json_schemaest honoré par endpoint et le provider n'envoie pasprovider.require_parameters: savoir si un schéma peut être ignoré en silence ailleurs est la question de la première campagne. Le routage avancé (provider {…},models[],plugins[]) n'est pas exposé. Le préfixe de clésk-or-v1-n'est documenté que par des sources secondaires : la factory n'en infère rien encore. - Mammouth AI † : l'abonnement multi-modèles français dont les crédits API inclus pilotent
Orkeon, intégré documentation d'abord (LLM-09) — aucune campagne archivée encore. À trois
indices concordants (2026-09-18) l'API est un proxy LiteLLM ; rien dans le provider n'en
dépend. Les identifiants sont les chaînes nues des vendeurs (
gpt-5.6-sol,claude-sonnet-5,gemini-3.7-flash) : le provider se cible par hôte (api.mammouth.ai) ou par"Provider": "mammouth"et n'est jamais inféré d'un nom de modèle — la même chaîne sans base URL continue d'aller chez le vendeur. Seulsmessages,model,temperature,max_tokens,top_petstreamsont documentés :response_formatet le thinking restent non déclarés (avertissement structuré, jamais un drop silencieux) tant que la première campagne ne les a pas mesurés — la règle MiniMax ; la vision est déclarée depuis la listetext, imagedu vendeur. Les tarifs sont les bornes hautes du vendeur (gemini-3.7-flashà 1,5 / 7,5 $/M, le double du direct). - Clés identity-linked Anthropic : refusent toute requête sans en-tête
anthropic-workspace-id(2026-08-30). RenseignerLlmConfig.WorkspaceId(CLI :--workspace-id) ; les clés classiques n'en ont pas besoin. - Polly et Sanitization clé API : fournis par
HttpLlmProviderBase→ actifs partout.
Défauts et modèles plus récents — revue des catalogues du 2026-09-19
Les pages modèles et tarifs de chaque vendeur ont été lues le 2026-09-19, avec les catalogues
publics des deux agrégateurs (OpenRouter, 447 modèles ; Mammouth, 100). La règle est celle
qu'énonce LlmProviderDefaultModels : un défaut ne change que si le vendeur retire le nom ;
sinon un modèle plus récent est un candidat tant qu'une campagne n'a pas archivé un M1.
| Provider | Défaut (code) | Servi le 2026-09-19 | Plus récent sur l'API du vendeur | Verdict |
|---|---|---|---|---|
| OpenAI | gpt-5.6-sol |
oui — 4 / 20 $/M jusqu'au 2026-11-21, cible de remplacement des deux vagues de dépréciation 2026 | gpt-6-astra (10 / 50, effort low…max sans none, facturation ×2 au-delà de 272K tokens d'entrée) |
reste — campagné le 2026-09-21 : gpt-6-astra 10/2 avec temperature: 1 épinglée ; il n'a pas de reasoning_effort: none, les function tools sur /v1/chat/completions sont donc refusés (use /v1/responses) — pas un défaut tant que le dialecte ne parle pas Responses ; gpt-6-astra-pro est une étiquette d'agrégateur, pas un id OpenAI |
| Anthropic | claude-sonnet-5 |
oui — 2 / 10 $/M rendu définitif, actif au moins jusqu'au 2027-06-30 | claude-fable-5-1 (2026-09-01, 10 / 50, thinking toujours actif, tool_choice forcé refusé) |
reste — campagné le 2026-09-21 : claude-fable-5-1 11/1 deux fois (le rouge est M6, le protocole texte de repli ; outils natifs, schéma, vision et cache verts) — viable, à cinq fois le prix ; claude-opus-5-fast est un drapeau speed, pas un id ; temperature / top_p / top_k renvoient 400 sur tout modèle à partir d'Opus 4.7 |
| Azure OpenAI | déploiement | — | — | rien à défauter |
| Ollama | llama3.2 |
oui — 3B, texte seul, sans thinking, vieux d'un an | qwen3.5:4b, gemma4:e4b, granite4.2:3b (outils + thinking, même gabarit) |
reste : un nouveau défaut impose un pull sur chaque machine |
| Together AI | meta-llama/Llama-3.3-70B-Instruct-Turbo |
oui — 1,04 / 1,04 $/M, pas de retrait programmé | zai-org/GLM-5.3-Flash (1M, outils + JSON, 0,15 / 0,50), Qwen/Qwen3.5-9B, deepseek-ai/DeepSeek-V4.1-Flash ; Llama 4 a quitté le serverless |
candidat GLM-5.3-Flash, sept fois moins cher — campagné le 2026-09-21 : 11/0/1, il lit l'image (premier modèle vision serverless chez Together, désormais compagnon vision du kit) et son cache est lu (8000 tokens, 0,99) ; Qwen/Qwen3.5-9B 10/0/2. Tous deux prêts ; la montée est au propriétaire |
| DeepSeek | deepseek-flash (était deepseek-v4-flash) |
oui — V4.1 Flash, 0,30 / 1,20 $/M en pointe, vision native | c'est le plus récent | changé le 2026-09-19 : l'ancien nom est un modèle retiré routé « temporairement » ici ; rejoué le 2026-09-21 : 12/12 deux fois — M2 et M9, rouges pendant cinq campagnes sur deepseek-v4-flash, sont verts sur deepseek-flash |
| Kimi | kimi-k2.6 |
oui — 0,95 / 4,00 $/M, sans date de retrait | kimi-k3 (juillet 2026, 1M, 3 / 15, échantillonnage figé, pas de champ thinking, raisonne toujours) |
reste — campagné le 2026-09-21 : kimi-k3 12/12 puis 11/1 (M2 sur la forme aplatie), trace de raisonnement, cache 0,97, JSON nu là où k2.6 clôture désormais son json_object — prêt, à trois fois le prix ; kimi-k2.5 et moonshot-v1-* retirés le 2026-08-31 ; docs désormais sur platform.kimi.ai |
| Qwen | qwen3.7-plus |
oui — toujours le palier Plus, l'un des trois modèles recommandés | qwen3.8-max (= qwen3.8-max-0902), qwen3.8-flash ; pas de qwen3.8-plus |
reste — campagné le 2026-09-21 : qwen3.8-max 12/12, qwen3.8-flash 11/1 (M2), tous deux prêts, et qwen3.7-plus est toujours 12/12 ; la génération 3.8 ajoute preserve_thinking |
| Mistral AI | mistral-medium-2604 |
oui — 1,50 / 7,50 $/M, non déprécié | rien pour le chat depuis avril (OCR 4.1 seulement) | reste ; les ids devstral-* / magistral sont dans la table des dépréciés |
| HuggingFace | meta-llama/Llama-3.1-8B-Instruct |
oui — mais outils sur un seul de ses quatre fournisseurs routés, et :fastest peut en choisir un autre |
Qwen/Qwen3.5-9B (outils sur trois fournisseurs, dès 0,10 / 0,15), zai-org/GLM-5.3-Flash, deepseek-ai/DeepSeek-V4.1-Flash |
candidat Qwen3.5-9B — campagné le 2026-09-21 : 10/0/2, il voit et ses outils tiennent ; son premier passage a rendu un M1 vide après 4113 tokens de réflexion sur le repli 4096 du routeur — épingler Llm:MaxTokens (ou couper le thinking) avant d'en faire un défaut. Le routage explique toujours les rouges mouvants du défaut (M2 et M5 rouges ensemble au passage rc.4) |
| Z.AI | glm-5.2 |
oui — toujours sous « Latest Models », 1,40 / 4,40 $/M | glm-5.3 (2026-08-18), glm-5.3-flash (0,15 / 0,50, image + vidéo), glm-5.3-flashx |
reste — campagné le 2026-09-21 : glm-5.3-flash 12/12 deux fois (il voit, là où 5.2 et 5.3 répondent 1210 ; cache lu) — le candidat le plus net du parc, à un neuvième du prix ; glm-5.3 10/2 (M2, M9) n'apporte rien sur 5.2. La déclaration Toggle demande toujours une garde par modèle avant une montée |
| Google Gemini | gemini-3.7-flash |
oui — « génération précédente », sans date d'arrêt, 0,75 / 3,75 $/M jusqu'au 2026-12-31 puis 1,50 / 7,50 | gemini-3.8-flash (GA 2026-09-02, même prix, thinking minimal refusé) |
premier candidat à une montée — campagné le 2026-09-21 : gemini-3.8-flash 11/0/1 deux fois, identique à 3.7 mode pour mode sur le transport direct ; OpenRouter et Mammouth non joués (pas de clé) |
| Grok (x.AI) | grok-4.6 |
oui — recommandé, 2 / 6 $/M sous 200K tokens de prompt, 4 / 12 au-delà | aucun | reste |
| MiniMax | MiniMax-M2 |
oui — listé « legacy », sans date de retrait | MiniMax-M3 (2026-06-01, 1M, entrée image + vidéo, mêmes 0,30 / 1,20) |
reste — campagné le 2026-09-21 : MiniMax-M3 9/1/2 puis 8/1/3 — il lit l'image (désormais compagnon vision du kit), M2 rouge comme M2, le bloc <think> inline découpé comme sur M2, 128 tokens en cache une fois ; la question du format de raisonnement est tranchée |
| OpenRouter | google/gemini-3.7-flash |
oui | google/gemini-3.8-flash (2026-09-02, même prix) |
suit le défaut direct — non campagné le 2026-09-21 (pas de clé) |
| Mammouth AI | gemini-3.7-flash |
oui | gemini-3.8-flash |
suit le défaut direct — non campagné le 2026-09-21 (pas de clé) |
ModelPricingRegistry suit les mêmes pages : la famille GPT-5.6 et gpt-6-astra, Sonnet 5 à
2 / 10, Fable 5.1 / Fable 5 et Haiku 4.5.
Plafonds de sortie — le maximum documenté par modèle (LLM-10)
Une requête porte un plafond de sortie (max_tokens, max_completion_tokens chez OpenAI,
num_predict chez Ollama). Le moteur envoyait 4096 pour tous les modèles ; un modèle
raisonneur dépense ce budget à réfléchir et répond vide, la relance sans outils qui suit raconte
le livrable au lieu de l'écrire, et le run passe vert sans fichier (recette propriétaire du
2026-09-19, kimi-k3). Depuis LLM-10, le plafond non épinglé est le maximum documenté du
modèle, lu dans le catalogue LlmModelOutputLimits d'Orkeon.Constants.Llm ; une valeur
épinglée (Llm:MaxTokens, un profil Studio, le max_tokens d'une crew) gagne toujours ; un
modèle inconnu du catalogue garde le repli 4096. N'y entrent que des chiffres documentés, chacun
lu le 2026-09-19 :
| Fournisseur | Modèle | Plafond envoyé | Source | Note |
|---|---|---|---|---|
| OpenAI (et les déploiements Azure des mêmes ids) | gpt-5.6-sol, gpt-6-astra |
128 000 | developers.openai.com/api/docs/models | le raisonnement compte dans le plafond |
| Anthropic | claude-sonnet-5, claude-opus-5, claude-fable-5-1 (les variantes datées suivent la famille) |
128 000 | platform.claude.com/docs/en/about-claude/models/overview | la réflexion compte dans max_tokens ; le champ est obligatoire, un Claude inconnu reçoit 4096 |
| Gemini | gemini-3.7-flash, gemini-3.8-flash (aussi sous google/… chez OpenRouter et nu chez Mammouth) |
65 536 | ai.google.dev/gemini-api/docs/models | jetons de réflexion inclus ; 65 537 fait un 400 |
| DeepSeek | deepseek-flash (et les noms retirés deepseek-v4-flash* qu'il route) |
393 216 | api-docs.deepseek.com/api/create-chat-completion | « 1 à 384K » ; 384 000 chez Mammouth |
| Kimi | kimi-k3 |
131 072 | platform.kimi.ai/docs/guide/kimi-k3-quickstart | le défaut max_completion_tokens du fournisseur ; borne réelle 1M − prompt |
| Kimi | kimi-k2.6 |
131 072 | platform.kimi.ai/docs/guide/troubleshooting | un épinglage, pas un plafond documenté : la borne est 256K − prompt ; un rejet retire le champ au rejeu |
| Qwen | qwen3.7-plus, qwen3.8-flash, qwen3.8-max |
131 072 | alibabacloud.com/help/en/model-studio | la chaîne de pensée a son propre thinking_budget ; 65 500 chez Mammouth |
| Z.AI | glm-5.2, glm-5.3, glm-5.3-flash |
131 072 | docs.z.ai/guides/overview/concept-param | maximum du schéma ; défaut 65 536 |
| Z.AI | glm-4.6v-flash |
32 768 | docs.z.ai/guides/vlm/glm-4.6v | — |
| MiniMax | MiniMax-M2 |
131 072 | platform.minimax.io/docs/guides/models-intro | « 128k (CoT compris) » ; M3 est absent — le fournisseur ne publie aucun chiffre de sortie (512k n'apparaît que comme réglage de benchmark ; 512 000 chez Mammouth) |
| xAI | grok-4.6 |
128 000 | docs.x.ai/developers/rest-api-reference | pas de plafond par modèle ; le défaut du fournisseur quand le champ manque, raisonnement exclu |
| Mistral | mistral-medium-2604 (mistral-medium-3-5) |
aucun | docs.mistral.ai/api/endpoint/chat | pas de plafond de sortie, seulement « prompt + max_tokens ≤ contexte » : le champ est omis et le modèle écrit jusqu'à sa fenêtre |
| Together | tous | 4096 (repli) | docs.together.ai/docs/serverless-models | aucun plafond de sortie par modèle, seulement prompt + max_tokens ≤ fenêtre. La fenêtre elle-même a été le plafond du 2026-09-19 au 2026-09-21, sur l'hypothèse que context_length_exceeded_behavior: truncate la ramène à fenêtre − prompt ; la campagne du 2026-09-21 a mesuré que deux des trois moteurs serverless refusent quand même (max_new_tokens, context_length_exceeded) et que le troisième ne tronque que sur le chemin bufferisé. Le repli tient, le drapeau part toujours, et le filet de rejeu retire le plafond sur ces formulations ; omis, le champ vaut 2048 (finish_reason: length) |
| Ollama | tous | aucun (num_predict omis) |
docs.ollama.com/modelfile | -1, génération infinie est le défaut du runtime : un modèle local écrit jusqu'à son contexte |
| HuggingFace, Docker Model Runner, tout le reste | — | 4096 (repli) | — | la borne du routeur est le contexte du fournisseur routé, qui change selon la route ; épinglez Llm:MaxTokens |
Deux choses que le catalogue dit franchement. Là où le fournisseur borne le plafond par
« fenêtre − prompt » (Kimi, Together, Mistral), une valeur fixe proche de la fenêtre échoue sur
tout vrai prompt — ces lignes sont donc un épinglage, le repli, ou rien. Et un plafond que le
point d'accès refuse (Qwen « Range of max_tokens », Kimi « prompt tokens + max_tokens exceeds »,
Gemini maxOutputTokens, le 422 de DeepSeek, les moteurs Together avec max_new_tokens /
context_length_exceeded) est rejoué une
fois sans le champ quand il vient du catalogue, avec un avertissement qui nomme le modèle —
une valeur épinglée appartient à l'utilisateur, et son rejet remonte tel quel. L'éditeur de
profil de Studio lit le même catalogue : l'indication sous le champ « Réponse maximale » dit ce
qu'un champ vide signifie pour le modèle choisi, et invite à épingler quand le modèle est
inconnu.
Valeurs de paramètres obligatoires, par modèle
Certains modèles refusent une requête tant qu'un paramètre ne porte pas une valeur précise. C'est autre chose que les écarts de capacité par modèle ci-dessus (D-03 — un modèle sans thinking ou sans vision) : ici la capacité existe, mais le modèle dicte la valeur, et le vendeur répond 400 à tout le reste. La contrainte est par modèle, jamais par fournisseur — le même vendeur sert des modèles aux exigences opposées, un épinglage au niveau fournisseur est donc à une campagne de casser le modèle voisin. Chaque ligne ci-dessous est mesurée en réel ; rien n'est inféré.
| Fournisseur | Modèle | Paramètre | Valeur obligatoire | Les mots du vendeur | Mesuré |
|---|---|---|---|---|---|
| Kimi | kimi-k2.6 |
temperature |
1 |
invalid temperature: only 1 is allowed for this model |
2026-08-03 |
| OpenAI | gpt-5.6-sol |
temperature |
1 |
'temperature' does not support 0 with this model. Only the default (1) value is supported. |
2026-08-30 |
| OpenAI | gpt-5.6-sol |
reasoning_effort |
"none" quand la requête porte des function tools sur /v1/chat/completions |
Function tools with reasoning_effort are not supported for gpt-5.6-sol in /v1/chat/completions. To use function tools, use /v1/responses or set reasoning_effort to 'none'. |
2026-08-30 |
| OpenAI | gpt-6-astra |
temperature |
1 |
'temperature' does not support 0 with this model. Only the default (1) value is supported. |
2026-09-21 |
| OpenAI | gpt-6-astra |
reasoning_effort |
aucun "none" n'existe (low, medium, high, xhigh) — le contournement Sol est impossible, les function tools restent refusés sur /v1/chat/completions tant que le dialecte ne parle pas /v1/responses |
'reasoning_effort' does not support 'none' with this model. Supported values are: 'low', 'medium', 'high', and 'xhigh'. — et sans lui, Function tools with reasoning_effort are not supported for gpt-6-astra in /v1/chat/completions. To use function tools, use /v1/responses |
2026-09-21 |
| Anthropic | claude-sonnet-5 |
temperature |
1, ou omettre le champ |
`temperature` is deprecated for this model. (1 et l'omission passent ; 0 et 0.7 non) |
2026-08-30 |
| Mistral | mistral-medium-2604 |
reasoning_effort |
high ou none seulement |
reasoning_effort low is not supported for this model, supported values: [<ReasoningEffort.high: 'high'>, <ReasoningEffort.none: 'none'>] |
2026-08-30 |
| Mistral | mistral-medium-2604 |
top_p |
1 explicite quand temperature vaut 0 et que le raisonnement est actif (l'omission n'y vaut PAS 1) |
top_p must be 1 when using greedy sampling. |
2026-08-30 |
Le contre-exemple qui rend le registre par-modèle : gpt-4o-mini — même fournisseur que
gpt-5.6-sol — rejette reasoning_effort tout court (Unrecognized request argument supplied: reasoning_effort, mesuré le même jour). Un « toujours none » au niveau fournisseur
le casserait.
Jumeau lisible par machine : llmproviders-test/lib/catalog.json, clé requiredParams (par
fournisseur, indexée par identifiant de modèle) — les scripts de campagne la résolvent
automatiquement et l'en-tête du rapport imprime les valeurs réellement utilisées. Dans le code
applicatif, les mêmes valeurs s'expriment par LlmConfig (Temperature,
Thinking = { Effort = "none" }) ; sur une mauvaise valeur, l'erreur du vendeur revient
attribuée (CapabilityMismatchHint nomme le réglage thinking sur le refus
tools-avec-raisonnement).
Ce que cette table ne prouve pas
Chaque ligne est adossée à des tests unitaires qui vérifient le payload émis — contre un handler
HTTP mocké. Un mock prouve qu'Orkeon envoie ce que nous croyons envoyer ; il ne prouve pas que
le fournisseur l'accepte. Les preuves d'exécution réelle sont suivies séparément dans le journal
de la matrice de tests ; lancez une
campagne avec orkeon llm probe --provider <name> --archive <dir>.