start_within est requis pour chaque requête FlexInference. Il définit la durée maximale pendant laquelle le routeur peut attendre le démarrage de la requête. Utilisez default, priority ou auto lorsque vous souhaitez un niveau de fournisseur directement. Utilisez une durée lorsque vous souhaitez que FlexInference essaie d’abord le niveau flex sur un modèle compatible flex, puis passe au niveau standard si flex ne peut pas démarrer à temps.
Le champ se présente sous quatre formes.
Les quatre formes
- par défaut
- prioritaire
- auto
- une durée
default d’OpenAI, standard de Gemini ou standard_only d’Anthropic. Fonctionne avec n’importe quel modèle.default, priority et auto proxysent n’importe quel modèle à son fournisseur (OpenAI, Gemini ou Anthropic). Seule une durée demande la course flex. Si le modèle ne peut pas utiliser flex, une durée renvoie 400 (flex_unsupported_for_anthropic ou flex_model_not_capable) ; utilisez plutôt une valeur de niveau.
La course flex n’est pas disponible sur Claude car Anthropic n’a pas de
niveau flex. Une durée
start_within sur un modèle claude-* renvoie 400 flex_unsupported_for_anthropic. Anthropic fonctionne toujours avec les
requêtes proxy de niveau default, priority et auto.Une durée
start_within ne peut pas être combinée avec des paramètres de Chat
Completions natifs uniquement, tels que logprobs ou seed. Supprimez ces
paramètres, ou utilisez default, priority ou auto à la place.La course flex
Avec une durée, FlexInference tente d’abord le niveau flex du fournisseur (OpenAI ou Gemini). flex est facturé à la moitié du tarif standard, mais la capacité est en mode “meilleur effort”. Le routeur attend le démarrage de la requête en amont dans votre fenêtre de temps :1
Lancement de flex
FlexInference envoie votre requête au niveau flex et attend la confirmation
du fournisseur qu’elle est en cours de traitement, le tout dans le délai que
vous avez défini.
2
Engagement sur flex
Si le fournisseur démarre la requête à temps, FlexInference s’engage. Votre
réponse est diffusée normalement, facturée aux tarifs flex. La réponse
affiche
"service_tier": "flex".3
Escalade vers le standard
Si flex ne peut pas démarrer à temps, FlexInference l’annule et envoie la
requête au niveau standard. Il s’agit d’une escalade du niveau flex moins
cher vers le standard, et non d’une rétrogradation. La réponse affiche
"service_tier": "default" (OpenAI) ou "standard" (Gemini).429 (pas de capacité), un 5xx quelconque, un échec avant le démarrage, ou aucun démarrage avant la date limite. Le passage de flex au standard est le seul changement de niveau effectué par FlexInference. Un fallback de fournisseur, où vous définissez un tableau provider optionnel et FlexInference essaie la route suivante après l’échec transitoire d’une route, modifie la route, jamais le niveau ou le modèle. Une clé manquante pour toute route que vous avez nommée est une erreur de configuration plutôt qu’un échec transitoire, elle renvoie donc un 400 au lieu de passer à la suivante. Voir routage des fournisseurs.
Choisissez la durée la plus longue que votre expérience utilisateur peut
tolérer. Des fenêtres plus longues donnent plus de temps à flex pour réussir,
augmentant la proportion de requêtes servies au tarif le plus bas.
Lecture du résultat
Les réponses200 réussies incluent des en-têtes de résultat Flex sur chaque endpoint, pour les appels en streaming et non-streaming. Les réponses d’erreur utilisent le corps de l’erreur à la place.
Les valeurs
x-flexinference-flex-reason en direct sont :
Une durée qui ne peut pas exécuter une course flex renvoie
400
(flex_unsupported_for_anthropic sur un modèle claude-*,
flex_model_not_capable sur un modèle OpenAI/Gemini non compatible flex) ;
les raisons d’en-tête décrivent uniquement les requêtes qui ont exécuté flex
ou ne l’ont pas demandé.Lorsque le pool flex est indisponible
Le niveau flex utilise une capacité partagée, en mode “meilleur effort”. Avant le démarrage d’une requête, flex peut renvoyer un429 en cas d’absence de capacité, renvoyer un 5xx quelconque, échouer avant le démarrage, ou manquer le délai. FlexInference envoie alors la requête au standard.
Dans de rares cas, flex échoue après que la requête a été acceptée et que le streaming a commencé. FlexInference expose cet échec. Sur une requête en streaming, vous recevez un événement terminal response.failed. Sur une requête non-streaming, vous recevez un 502. Il n’y a pas de nouvelle tentative après l’engagement, car cela pourrait masquer une requête incomplète. Si cela se produit, réessayez, ou utilisez default, priority ou auto pour ignorer flex.
Nouvelle tentative de transport
La course flex décide quel niveau sert votre requête. La nouvelle tentative de transport (transport retry) décide ce qui se passe lorsque ce niveau ne parvient pas à démarrer. Ajoutez un objetretry optionnel et FlexInference attend et relance le niveau établi en cas d’échec transitoire en amont, au lieu de vous renvoyer l’erreur.
Une valeur
retry invalide renvoie 400 invalid_retry.
FlexInference ne réessaie qu’un véritable échec de transport pré-engagement du niveau établi : un vrai 429, un vrai 5xx, ou une connexion qui n’a jamais été ouverte (upstream_unavailable). Il ne réessaie pas un 4xx client, un échec d’authentification en amont (upstream_auth_failed), un timeout en amont (upstream_timeout), ou une requête annulée par le client. Ceux-ci échouent de la même manière lors d’une nouvelle tentative ou signifient que l’appelant est déjà parti.
La nouvelle tentative relance le niveau qui a établi votre requête, et non la branche flex. Pour une requête default, priority ou auto, c’est le niveau que vous avez nommé. Pour une requête de durée qui perd la course flex, c’est le niveau standard vers lequel vous avez escaladé. La tentative flex et l’escalade sont le travail propre de la course flex et ne sont jamais comptées dans count. L’escalade d’un niveau et la nouvelle tentative sur le même niveau sont des étapes distinctes qui s’enchaînent : flex perd face au standard, puis le standard peut se relancer.
Lorsque le fournisseur envoie un en-tête Retry-After, FlexInference attend cette durée au lieu du calendrier de backoff, limitée à 60 secondes afin qu’une mauvaise valeur ne puisse pas bloquer votre requête.
La nouvelle tentative n’est effectuée qu’avant l’engagement. Elle s’arrête au
moment où un niveau s’engage, c’est-à-dire la ligne de statut
200 pour les
appels en streaming et non-streaming. Une fois que le premier octet est en
route vers vous, FlexInference ne réessaie jamais, la même règle que la
course flex suit après l’engagement. Un échec en cours de streaming, ou un
502 non-streaming après un 200 engagé, vous est transmis.retry côté serveur est distincte de toute boucle de nouvelle tentative dans votre client, et les deux s’empilent. Les SDK FlexInference ne réessaient pas, mais un SDK OpenAI ou Anthropic standard réessaie deux fois par défaut. Un client qui réessaie deux fois en plus d’un count serveur de 3 entraîne jusqu’à six tentatives en amont, car chaque tentative client exécute un budget serveur complet. Lorsque vous définissez retry, FlexInference appose x-flexinference-retries sur la réponse avec le nombre de relances effectuées, afin que vous puissiez réduire le max_retries de votre client.
Facturation
Avec BYOK, FlexInference utilise votre clé de fournisseur chiffrée stockée côté serveur ; vous n’envoyez pas de clés de fournisseur par requête. Votre fournisseur facture votre compte au tarif du niveau qui a servi la requête. Vous payez les tarifs flex lorsque flex s’engage et les tarifs standard après l’escalade. Une tentative flex peut consommer quelques tokens avant d’échouer. Votre fournisseur facture cette utilisation de la même manière que si vous appeliez flex directement, et FlexInference l’inclut dans l’utilisation. FlexInference n’ajoute aucune majoration sur vos tokens. Il facture 20 % des économies qu’il vous fait réaliser, et ne facture rien en l’absence d’économies.Ce que FlexInference modifie
FlexInference peut changer le niveau. Il ne modifie pas la signification de votre requête ni le résultat du fournisseur. Il ne réécrit jamais le statut ou le message d’un fournisseur. Il normalise uniquement l’enveloppe d’erreur : une erreur est renvoyée sous la forme de l’endpoint que vous avez appelé (OpenAI sur les réponses et le chat, Anthropic sur les messages, Google sur les interactions), portant le statut et le message du fournisseur, afin que votre SDK puisse l’analyser. Voir Erreurs.start_within est requis. Sans lui, la requête renvoie 400 missing_start_within, y compris avec un SDK OpenAI simple pointant vers
notre URL de base. Si vous envoyez une valeur que FlexInference ne peut pas
lire, vous obtenez invalid_start_within. Les valeurs valides sont
"default", "priority", "auto", ou une durée telle que
"00h-00m-30s". Le mot standard était autrefois autorisé et ne l’est plus,
envoyez donc default à la place. Voir Erreurs pour la liste
complète.