Modèles et routage
Le champ model et le bloc optionnel openmulti pilotent tout le routage. Les deux sont facultatifs au sens où un id concret sans extension fait d'OpenMulti un proxy transparent.
Le champ model
| Valeur | Effet |
|---|---|
auto |
OpenMulti choisit le modèle (tier par défaut : balanced) |
auto:economy / auto:balanced / auto:quality |
choix automatique dans le tier demandé |
vendor/model (ex. anthropic/claude-sonnet-4.6) |
honoré tel quel, aucun routage |
nom nu, sans / (ex. kimi-k2.6) |
résolu vers l'id canonique si et seulement si le suffixe correspond à un seul modèle connu |
Un nom nu inconnu ou ambigu est refusé avec 400 (model_unknown / model_ambiguous) — jamais de repli silencieux vers un autre modèle.
La liste des modèles servis, avec leurs tiers, usages et tarifs, s'obtient via GET /v1/models ou dans la console, onglet Modèles — et l'inventaire complet des modèles adressables via GET /v1/models?all=1.
Le bloc openmulti
Optionnel, il affine l'intention :
{
"model": "auto",
"messages": [{ "role": "user", "content": "..." }],
"openmulti": {
"tier": "economy",
"purpose": "agent",
"allow": ["deepseek/deepseek-v3", "moonshotai/kimi-k2.6"],
"route": "smart"
}
}
| Champ | Valeurs | Effet |
|---|---|---|
tier |
economy / balanced / quality |
niveau qualité/prix visé (équivaut à auto:<tier>) |
purpose |
generation, light, agent, … |
la nature de la tâche ; affine le choix (ex. agent → modèle orienté code) |
allow |
["vendor/model", …] |
contrainte dure : ne choisir que dans cette liste |
route |
default / smart |
smart = arbitrage continu coût/santé parmi les candidats du tier |
Avec route: "smart", le routeur mesure en continu le coût réel par requête et le taux d'erreur de chaque candidat : le moins cher des candidats sains gagne le trafic, un modèle qui se dégrade le perd automatiquement, et il est re-testé régulièrement pour pouvoir revenir.
Comprendre la décision : openmulti.reason
Si votre requête contient un bloc openmulti, la réponse (non streamée) porte une trace lisible du routage :
{
"id": "...",
"model": "deepseek/deepseek-v3",
"openmulti": { "reason": "balanced tier, smart: cheapest healthy" },
"usage": { "prompt_tokens": 12, "completion_tokens": 40, "cost": 0.000041 }
}
Sans bloc openmulti, la réponse est strictement identique à celle du fournisseur — aucun champ ajouté. En streaming, la décision est exposée dans les en-têtes X-OpenMulti-Model et X-OpenMulti-Reason (voir Streaming).
Génération d'images
Passez modalities pour router vers un modèle de génération d'image :
{
"model": "auto",
"modalities": ["image", "text"],
"messages": [{ "role": "user", "content": "Un phare dans la tempête, style gravure" }]
}
Fiabilité : retries et bascule de chemin
En cas de panne transitoire en amont (erreur de connexion, 429/5xx), OpenMulti réessaie le même modèle de façon bornée — il ne change jamais de modèle, car cela changerait la réponse. Quand un modèle est accessible par plusieurs chemins (API native du fournisseur ou agrégateur), un chemin en panne bascule automatiquement sur l'autre — même modèle, réponse préservée. Tout est transparent ; après épuisement des tentatives, vous recevez 504.
Les champs de requête inconnus sont retirés avant la transmission (allowlist des champs OpenAI/OpenRouter) : un champ propriétaire d'un autre fournisseur ne provoque pas d'erreur, il est simplement ignoré.