Un seul model=auto, et c’est la passerelle qui décide « quel modèle utiliser ».
Le routage automatique (Auto Router) sélectionne en temps réel, selon le contenu de la requête, le modèle le plus adapté parmi les centaines de modèles de la plateforme. Il vous suffit de renseigner auto comme model — pas besoin de choisir un modèle, ni de comparer les prix, ni de suivre les évolutions des modèles.
La facturation se fait selon le modèle réellement utilisé, sans surcoût, et sans aucune modification du code client. Le modèle effectivement appelé est inscrit dans les en-têtes et le corps de la réponse (voir Comment confirmer le modèle réellement utilisé) : c’est entièrement traçable.
Cas d’usage
- Applications généralistes : lorsque vous ne savez pas quel type de requête vos utilisateurs vont envoyer, laissez
autorépartir selon le contenu. - Optimisation des coûts : laissez les tâches simples basculer automatiquement vers des modèles moins chers et plus rapides (
autoprivilégie le coût par défaut). - Optimisation de la qualité : assurez-vous que les requêtes complexes sont routées vers des modèles plus puissants (
auto:quality_first). - Scénarios à faible latence : pour la voix en temps réel ou les boucles multi-tours d’un agent, privilégiez le modèle le plus rapide à répondre (
auto:latency_critical). - Point d’entrée unique, sans choix de modèle : les différents types de requêtes sont automatiquement répartis vers leur modèle optimal — plus besoin de maintenir une table de correspondance « tâche → modèle », ni de suivre en continu les évolutions des modèles ou de comparer manuellement les prix et de changer de nom.
Démarrage rapide
Réglezmodel sur auto ; le reste du corps de la requête est identique à un appel normal. L’URL de base est https://aihubmix.com/v1.
Comment confirmer le modèle réellement utilisé
C’est l’ancre de confiance du routage automatique : vous savez toujours quel modèle a finalement servi cette requête.- Le champ
modeldu corps de la réponse est renseigné avec le vrai modèle utilisé (par exemplemimo-v2.5-pro), et nonauto. - Les en-têtes de la réponse fournissent l’information complète sur la décision :
| En-tête de réponse | Signification | Exemple de valeur |
|---|---|---|
X-Aihubmix-Router-Resolved-Model | Le modèle réellement utilisé, sur lequel se base la facturation | xiaomi-mimo-v2.5-pro |
X-Aihubmix-Router-Policy | La stratégie utilisée pour cette requête | cost_optimized |
X-Aihubmix-Router-Dimension | La dimension de tâche identifiée | text.overall |
X-Aihubmix-Router-Decision-Id | L’identifiant unique de cette décision, utile pour le diagnostic | 05dbad09-33c5-42de-… |
X-Aihubmix-Router-Reason | Brève explication de la décision (stratégie / dimension / meilleur score / nombre de candidats) | policy=cost_optimized dim=text.overall top=0.182 survivors=20/33 |
X-Aihubmix-Router-Fallback | Apparaît uniquement lorsque la solution de repli « aucun candidat » est déclenchée | true |
Les en-têtes HTTP sont insensibles à la casse : le tableau ci-dessus utilise par convention une majuscule en début de mot, mais le retour réel en HTTP/2 est en minuscules x-aihubmix-router-* ; les deux sont équivalents.
Lire la décision de routage (curl pour voir les en-têtes ; avec un SDK, récupérez l’en-tête via l’objet de réponse brut) :
reason : survivors=20/33 signifie que sur 33 candidats, 20 ont passé le filtrage strict et sont entrés dans la phase de scoring ; top=0.182 est le score global normalisé du modèle gagnant au sein du pool de candidats (capacité / coût / latence pondérés selon la stratégie).
Le
Resolved-Model de l’exemple dépend des candidats et des prix actuels du catalogue en ligne et varie au gré des mises en ligne et retraits de modèles de la plateforme — c’est précisément là toute la valeur du routage automatique : vous n’avez pas à suivre ces changements. Pour que la décision soit auditable, fiez-vous au vrai nom de modèle dans les en-têtes / le corps de la réponse, et ne supposez pas qu’il reste fixe.Stratégies de routage
Sans suffixe,auto utilise la stratégie par défaut cost_optimized. Vous pouvez utiliser auto:<stratégie> pour spécifier explicitement la priorité :
| Écriture de la stratégie | Priorité | Cas d’usage |
|---|---|---|
auto (= auto:cost_optimized) | Coût prioritaire : à capacité suffisante, choisit le moins cher | Tâches en lot, sensibilité au coût |
auto:balanced | Équilibré : capacité / coût / latence pris en compte | Usage général, choix sûr en cas d’incertitude |
auto:quality_first | Qualité prioritaire : privilégie le modèle le plus puissant | Raisonnement complexe, sorties critiques |
auto:latency_critical | Faible latence prioritaire : privilégie le plus rapide à répondre | Voix en temps réel, boucles d’agent |
model :
What is the meaning of life?, toutes tombant dans la dimension text.overall) :
| Stratégie | Modèle utilisé | Score top |
|---|---|---|
auto (= cost_optimized) | xiaomi-mimo-v2.5-pro | 0.182 |
auto:balanced | claude-opus-4-6-think | 0.488 |
auto:latency_critical | claude-opus-4-6 | 0.646 |
auto:quality_first | claude-opus-4-6-think | 0.758 |
latency_criticala choisi la version non-think— la variante « thinking » a une latence de raisonnement plus élevée, et la stratégie faible latence l’évite activement. On voit que les pondérations de stratégie agissent réellement sur l’arbitrage « capacité / coût / latence », et pas seulement sur la capacité.
Le contenu modifie aussi le résultat : si l’on applique le mêmeauto:quality_firstà une tâche de code (la requête de l’exemple ci-dessus), la dimension passe detext.overallàtext.codinget, en mesure réelle, c’estclaude-opus-4-6-thinkqui est utilisé — la stratégie et le contenu de la requête déterminent ensemble le modèle final.
Un suffixe de stratégie inconnu (comme
auto:fast) revient à la stratégie par défaut cost_optimized sans déclencher d’erreur.Fonctionnement
À la réception demodel=auto, la passerelle transforme « l’intention » en « modèle concret » en trois étapes :
Extraire les caractéristiques de la requête
Analyse les modalités d’entrée / sortie de cette requête (texte, image, fichier), l’intention du contenu (code, mathématiques, OCR, graphiques, langue, recherche en ligne ou non, etc.) et l’ampleur de la requête (estimation des tokens en entrée / sortie), puis normalise le tout en une dimension de tâche. Par exemple : une question contenant du code →
text.coding ; une image accompagnée d’une demande d’OCR → vision.ocr ; un texte ordinaire → text.overall.Filtrer les candidats (filtre strict)
Exclut directement les modèles qui ne respectent pas les contraintes strictes : ne prennent pas en charge les modalités d’entrée / sortie requises, fenêtre de contexte insuffisante, retirés par le coupe-circuit (voir Fiabilité et tolérance aux pannes), ou hors de la plage de modèles autorisés par votre clé.
Scorer avec pondération selon la stratégie
Pour les candidats ayant passé le filtre, on combine le score de capacité du modèle issu de benchmarks de référence reconnus dans l’industrie, les prix en temps réel et les données de performance, puis on applique un scoring tridimensionnel pondéré « capacité / coût / latence » selon la stratégie choisie, et on retient le score le plus élevé. Le nom du modèle final est réécrit dans la requête et les en-têtes de réponse.
quality_first, top 3 d’un même pool de candidats, données issues des journaux de décision de production) :
| Modèle candidat | Score de capacité | Coût relatif | Latence | Score global |
|---|---|---|---|---|
claude-opus-4-6-think | 1504 | 220 | 1963ms | 0.758 |
claude-opus-4-6 | 1498 | 220 | 822ms | 0.721 |
claude-fable-5 | 1510 | 484 | 11130ms | 0.600 |
Remarquez que claude-fable-5 a le score de capacité le plus élevé (1510), mais qu’il est relégué à la troisième place sur le score global en raison d’un coût plus élevé et d’une latence plus grande. C’est tout l’intérêt du scoring pondéré : non pas un « tout-capacité », mais un arbitrage entre capacité / coût / latence selon la stratégie.
L’identification de la dimension est automatique — le routage automatique intègre plus de 30 dimensions de tâche fines (code / mathématiques / OCR / graphiques / texte long / chinois / recherche en ligne…), bien plus précises qu’une « répartition grossière par famille de modèles ». Avec le même auto, des contenus différents sont routés vers des dimensions différentes :
| Votre requête | Dimension identifiée |
|---|---|
| Question en texte ordinaire | text.overall |
| Contient du code, demande d’écrire / déboguer un programme | text.coding |
| Preuve / résolution mathématique | text.math |
| Question très longue (environ 500+ tokens) | text.longer_query |
| Question en chinois | text.language.chinese |
| Entrée image + « What is in this image? » | vision.overall |
| Entrée image + « OCR… » / « reconnaître le texte » | vision.ocr |
| Entrée image + graphique / organigramme | vision.diagram |
| Recherche en ligne activée | search.overall |
Les entrées image passent aussi par le routage automatique : lorsqu’une image est jointe dans
/v1/chat/completions, la requête est routée vers un modèle aux fortes capacités visuelles selon la tâche image. En mesure réelle de production — « OCR this image » → vision.ocr, modèle utilisé qwen3.5-397b-a17b ; analyse d’image générale « What is in this image? » → vision.overall, modèle utilisé gpt-5.4-mini. (Il s’agit ici de la compréhension d’image ; la génération d’image /v1/images/* ne prend pas encore en charge auto, voir FAQ.)Fiabilité et tolérance aux pannes
Le routage automatique intègre une tolérance aux pannes multicouche pour garantir que le cheminauto n’échoue jamais sans raison :
Coupe-circuit : retrait automatique des modèles défaillants
Coupe-circuit : retrait automatique des modèles défaillants
La passerelle maintient pour chaque modèle une statistique de taux d’échec sur une fenêtre glissante. Lorsqu’un modèle accumule suffisamment d’échecs dans la fenêtre et dépasse le seuil de taux d’échec, il est temporairement retiré du pool de candidats puis rétabli automatiquement après une période de refroidissement — afin d’éviter de continuer à envoyer les requêtes suivantes à un modèle qui dysfonctionne. Le signal d’échec provient des erreurs renvoyées par l’upstream pour cette requête ; le « aucun canal disponible » propre à la passerelle n’est pas comptabilisé (ce n’est pas un problème du modèle lui-même).
Repli sans candidat : jamais de 400 sur auto
Repli sans candidat : jamais de 400 sur auto
Si jamais le filtre strict exclut tous les candidats (par exemple si une certaine combinaison de modalités n’a temporairement aucun modèle disponible), la passerelle ne renvoie pas d’erreur, mais attribue un modèle de repli selon le type de sortie afin de garantir une réponse, et ajoute l’en-tête
X-Aihubmix-Router-Fallback: true pour vous en informer.Garde-fou contre le dépassement de droits : une clé restreinte n'est pas contournée par le repli
Garde-fou contre le dépassement de droits : une clé restreinte n'est pas contournée par le repli
Si votre clé limite la plage de modèles disponibles, le modèle choisi par le routage automatique (repli inclus) reste toujours dans cette plage. Si aucun modèle de la plage ne peut réellement servir cette requête, un 403 explicite est renvoyé, plutôt que d’utiliser silencieusement un modèle hors plage (potentiellement plus cher).
Facturation
Facturation au prix réel du modèle effectivement utilisé ; le routage automatique lui-même ne facture aucun surcoût. Quel que soit le modèle qui répond finalement, le calcul se fait selon le prix, les capacités et les limites de contexte de ce modèle — ce modèle étant la valeur figurant dans l’en-têteX-Aihubmix-Router-Resolved-Model et dans le champ model du corps de la réponse. Autrement dit, le routage automatique n’utilise pas « en douce un modèle cher » : chaque utilisation est inscrite dans la réponse et peut être rapprochée ligne par ligne.
Limitations
-
Le routage automatique vise actuellement l’interface de complétion de conversation
/v1/chat/completions(voir FAQ : quelles interfaces sont prises en charge). -
?router=offou l’en-têteX-Router-Offfont renvoyer un 400 directement àmodel=auto— c’est un refus explicite de l’usage ambigu « vouloir auto tout en désactivant le routage », plutôt qu’une ignorance silencieuse : -
L’ensemble des candidats varie dynamiquement avec le catalogue de la plateforme : un même
autopeut utiliser des modèles différents à différents moments (c’est voulu par conception, auditable via les en-têtes de réponse).
Différences avec OpenRouter / LiteLLM
La « sélection automatique de modèle » n’est pas propre à AIHubMix ; OpenRouter et LiteLLM offrent des capacités similaires. Les différences portent surtout sur le coût d’intégration et le mode d’hébergement :| Point de différence | OpenRouter | LiteLLM | AIHubMix |
|---|---|---|---|
| Sélection automatique selon le contenu de la requête | ✅ | ✅ | ✅ |
| Zéro configuration, prêt à l’emploi (pas de règles de routage / utterances à écrire) | ✅ | ❌ | ✅ |
| Hébergé par la plateforme, pas de proxy à auto-héberger / déployer | ✅ | ❌ | ✅ |
| Multi-stratégies coût / qualité / latence, basculées par un seul paramètre | ❌ | ❌ | ✅ |
| Décision d’utilisation traçable (en-têtes avec dimension / policy / reason) | ❌ | ❌ | ✅ |
| Facturation selon le modèle finalement utilisé | ✅ | ❌ | ✅ |
FAQ
Q : Quelles interfaces le routage automatique prend-il en charge ? R : Actuellement,model=auto prend en charge l’interface de complétion de conversation compatible OpenAI /v1/chat/completions. Les interfaces de génération / édition d’images (/v1/images/*), l’audio, /v1/embeddings, /v1/rerank, etc. ne prennent pas encore en charge auto ; veuillez spécifier directement un modèle concret.
Q : Le routage automatique prend-il en charge les entrées image ?
R : Oui. Joindre une image (image_url) dans /v1/chat/completions relève de la compréhension d’image et la requête est routée vers un modèle aux fortes capacités visuelles selon la tâche image (vision.ocr / vision.diagram / vision.overall, etc.). À ne pas confondre : la génération d’image passe par l’interface /v1/images/* et ne prend pas encore en charge auto.
Q : Comment savoir quel modèle a réellement été utilisé pour cette requête ?
R : Regardez l’en-tête X-Aihubmix-Router-Resolved-Model, ou le champ model du corps de la réponse — les deux sont renseignés avec le vrai nom du modèle. Voir Comment confirmer le modèle réellement utilisé.
Q : Le routage automatique va-t-il utiliser en douce un modèle cher ?
R : Non. La stratégie par défaut cost_optimized privilégie le coût ; et chaque modèle utilisé est inscrit dans la réponse et facturé à son prix d’origine, rapprochable ligne par ligne. Voir Facturation.
Q : Comment contrôler / estimer les coûts ?
R : Trois moyens cumulables — ① par défaut, auto (cost_optimized) privilégie déjà le coût ; ② utilisez la plage de modèles disponibles de la clé pour verrouiller les candidats dans une fourchette de prix acceptable, ce qui revient à fixer une borne supérieure de coût ; ③ chaque utilisation est facturée au prix d’origine du modèle figurant dans l’en-tête Resolved-Model, rapprochable ligne par ligne. Quand vous avez besoin de plus de puissance, utilisez explicitement auto:quality_first.
Q : Quelle est la différence entre auto et le « mappage de modèles / fallback » ?
R : Le mappage de modèles / fallback est un alias fixe au niveau de la clé + un repli ordonné en cas d’échec (toujours la même cible) ; le routage automatique sélectionne dynamiquement le modèle selon le contenu de chaque requête. Le premier résout « le client n’accepte qu’un certain nom / le modèle principal est tombé, on bascule sur le secours », le second résout « peu m’importe lequel, donnez-moi le plus adapté ».
Q : Peut-on limiter le routage automatique à un choix parmi quelques modèles seulement ?
R : Oui — via la contrainte de la plage de modèles disponibles de la clé : le routage automatique ne choisira que parmi les modèles autorisés par cette clé, et aucun modèle hors plage ne sera utilisé.
Q : Les requêtes en streaming sont-elles prises en charge ?
R : Oui. Le routage s’effectue avant que la requête n’atteigne l’upstream et traite de la même manière le streaming et le non-streaming.
Q : Pourquoi deux appels avec la même phrase ont-ils utilisé des modèles différents ?
R : L’ensemble des candidats et les prix varient dynamiquement avec le catalogue de la plateforme, c’est voulu par conception. Utilisez le Decision-Id et le Resolved-Model des en-têtes de réponse pour auditer chaque décision.
Q : Comment faire pour qu’une requête utilise de façon stable le même modèle (par exemple pour réutiliser le cache de prompt) ?
R : auto sélectionne le modèle dynamiquement selon le catalogue actuel et ne garantit pas le déterminisme. Si vous avez besoin d’utiliser de façon stable le même modèle (par exemple pour dépendre du cache de prompt de l’upstream, ou pour une reproduction stricte), spécifiez directement un nom de modèle concret, ou limitez la plage disponible de la clé à un modèle unique — dans ces deux cas, le modèle utilisé est déterministe.
Ressources connexes
- Mappage de modèles et fallback : alias fixe au niveau de la clé + repli en cas d’échec, complémentaire au routage automatique.
- Paramètres d’inférence unifiés : paramètres de requête cohérents entre modèles.
- Page des modèles AIHubMix : consultez les noms de modèles, les prix et les
Input Modalities.