Le 12 juin 2026, les contrôles à l'exportation américains ont forcé Anthropic à mettre Claude Fable 5 hors ligne presque sans préavis, et le modèle est resté inactif jusqu'à son retour le 1er juillet. Les équipes qui avaient codé en dur une chaîne de modèles ont passé dix-neuf jours à se démener ; les équipes disposant d'une chaîne de secours ont modifié une valeur de configuration et ont repris le travail.
La leçon dépasse le cadre d'une simple panne. La plupart des applications basées sur les LLM considèrent la disponibilité des modèles comme une constante, comme le DNS ou la gravité. C'est une hypothèse architecturale, et elle est fausse. Un modèle est un produit avec une exposition légale, des plafonds de capacité, un calendrier de dépréciation et une équipe de sécurité qui peut le retirer. Ce guide explique comment concevoir une reprise sur incident pour les API d'IA afin que la prochaine disparition, quel que soit le fournisseur concerné, ne vous coûte qu'une modification de configuration au lieu d'une cellule de crise.
Pourquoi les modèles disparaissent
Les modèles disparaissent pour plus de raisons que la plupart des équipes ne l'anticipent :
- Réglementation. La suspension de Fable 5 est due à des contrôles à l'exportation, et non à une défaillance technique. Les événements juridiques et de conformité ne suivent pas les calendriers de dépréciation et n'envoient pas de préavis de 90 jours. Voici à quoi ressemblait la panne de l'extérieur pendant qu'elle se produisait.
- Incidents du fournisseur. Tous les grands fournisseurs ont connu des pannes de plusieurs heures. Votre SLA avec vos propres clients ne s'interrompt pas pendant qu'ils se rétablissent.
- Dépréciation. Les fournisseurs retirent les modèles selon des calendriers publiés. OpenAI maintient une page de dépréciations continue, et Anthropic a mis hors service les anciennes versions de Claude de la même manière. Une dépréciation est une panne au ralenti avec une date calendaire.
- Capacité. Pendant les semaines de lancement et les pics de trafic, les fournisseurs réduisent la charge. Vos requêtes commencent à renvoyer des 429 et 529 même si le modèle "existe".
- Rollbacks de sécurité. Un fournisseur peut restreindre ou retirer un modèle après avoir découvert un problème post-lancement. Cela se produit discrètement et parfois par compte.
Causes différentes, même symptôme : l'ID du modèle dont votre code dépend cesse de répondre. La solution est la même quelle que soit la cause, c'est pourquoi la conception de la reprise sur incident est un travail continu plutôt qu'une réponse à un incident.
La hiérarchie de la reprise sur incident
La reprise sur incident n'est pas une seule décision. Elle comporte trois niveaux, et les systèmes matures en implémentent généralement plus d'un.
Niveau 1 : repli chez le même fournisseur. Acheminer vers un modèle frère du même fournisseur, par exemple Fable 5 → Opus 4.8 → Sonnet 4.6. Même SDK, même authentification, même format de réponse, donc la commutation est rapide et peu coûteuse. Anthropic prend même en charge cela côté serveur via un paramètre de repli qui réessaie une requête refusée sur un modèle de substitution au sein du même appel d'API. Connaissez votre paire de repli avant d'en avoir besoin : la comparaison Fable 5 vs Opus 4.8 est le genre de travail qui rapporte à 3h du matin.
Niveau 2 : repli entre fournisseurs. Acheminer vers un fournisseur entièrement différent. Cela protège contre les pannes à l'échelle du fournisseur, les suspensions de compte et les restrictions régionales qu'une chaîne du même fournisseur ne peut pas surmonter. Le coût est un deuxième SDK, une deuxième relation de facturation, un deuxième chemin d'authentification et des invites qui se comportent différemment.
Niveau 3 : mode dégradé. Fournir quelque chose d'utile sans aucun modèle de pointe : réponses mises en cache pour les requêtes répétées, un petit modèle local pour les tâches de classification, ou la fonctionnalité désactivée derrière un message clair. L'aggravation de la fonctionnalité est acceptable. La panne de l'application ne l l'est pas.
| Niveau | Latence de la commutation | Chute de qualité | Coût d'ingénierie |
|---|---|---|---|
| Repli chez le même fournisseur | Secondes à minutes ; un changement de configuration ou une nouvelle tentative automatique | Faible à modérée ; même famille de modèles, comportement familier | Faible ; même SDK, authentification et format de réponse |
| Repli entre fournisseurs | Minutes à heures ; nécessite une logique de routage et des invites testées | Modérée ; jetoniseurs, formats et comportements de refus différents | Moyen à élevé ; seconde intégration, facturation et surveillance |
| Mode dégradé | Effectivement instantané une fois construit | Important mais prévisible et honnête | Moyen ; couche de cache, modèle local ou indicateurs de fonctionnalité |
La plupart des équipes devraient déployer le niveau 1 ce trimestre, maintenir le niveau 3 comme niveau minimum, et n'ajouter le niveau 2 que lorsque le revenu à risque justifie une deuxième intégration.
Un autre point de conception : définissez les conditions de déclenchement, pas seulement les destinations. Une chaîne est incomplète tant que vous n'avez pas décidé ce qui y fait transiter le trafic. Valeurs par défaut sensées : une erreur 404 sur l'ID du modèle bascule immédiatement, un refus réessaie une fois sur le modèle suivant, une erreur 429 recule avant de basculer, et trois timeouts consécutifs ouvrent un disjoncteur pour ce modèle. Encodez ces règles dans la couche de routage afin que la décision de 3h du matin soit déjà prise.
Des choix de conception qui rendent la reprise sur incident abordable
La reprise sur incident est bon marché ou coûteuse selon les décisions que vous prenez bien avant toute panne.
Placez les ID de modèle dans la configuration, pas dans le code. Effectuez un grep rapide de votre chaîne de modèles. Si elle apparaît dans le code de l'application plutôt que dans un seul fichier de configuration, vous ne pouvez pas basculer sans un déploiement. Une liste de priorités par route est la forme qui fonctionne :
# config/model-routes.yaml
routes:
chat-assist:
primary: claude-fable-5
fallbacks:
- claude-opus-4-8
- claude-sonnet-4-6
degraded_mode: cached_answers
max_output_tokens: 8192
timeout_seconds: 120
ticket-classifier:
primary: claude-sonnet-4-6
fallbacks:
- claude-haiku-4-5
degraded_mode: rules_engine
Gérez le routage en un seul endroit. Qu'il s'agisse d'un service de passerelle ou d'un wrapper de cent lignes, un seul module doit décider quel modèle traite une requête, et tout le reste doit l'appeler. Une version minimale ressemble à ceci :
MODEL_CHAIN = ["claude-fable-5", "claude-opus-4-8", "claude-sonnet-4-6"]
def complete(prompt: str) -> str:
last_error = None
for model in MODEL_CHAIN:
try:
response = client.messages.create(
model=model,
max_tokens=8192,
messages=[{"role": "user", "content": prompt}],
)
if response.stop_reason == "refusal":
last_error = RefusalError(model)
continue # essaie le modèle suivant dans la chaîne
return response.content[0].text
except (anthropic.NotFoundError, anthropic.RateLimitError,
anthropic.APIStatusError) as err:
last_error = err
continue
raise AllModelsUnavailable(MODEL_CHAIN) from last_error
Les versions de production ajoutent des disjoncteurs et des délais d'attente par modèle, mais le principe reste valable quelle que soit la taille : les appelants demandent une complétion, pas un modèle.
Écrivez des invites par niveau de capacité. Une invite qui dépend des particularités d'un modèle rend votre reprise sur incident illusoire. Écrivez des invites de base qui produisent une sortie acceptable sur l'ensemble de votre ensemble de repli, puis isolez les astuces spécifiques au modèle (une configuration de pensée particulière, une habitude de formatage que vous avez ajustée) dans des superpositions par modèle qui peuvent être supprimées sans interrompre la tâche. Testez l'invite de base sur votre repli le plus faible, pas sur votre primaire le plus fort. Cela est plus important qu'il n'y paraît : les nouveaux modèles de pointe récompensent souvent les invites éparses et axées sur les objectifs, tandis que les replis plus petits ont besoin d'une structure plus explicite. Si vous ajustez tout pour le primaire, le repli hérite d'instructions qu'il ne peut pas bien suivre ; si vous ajustez pour l'ensemble, vous perdez un peu de finesse sur le primaire et gagnez une chaîne qui fonctionne de bout en bout.
Maintenez également la portabilité des paramètres de requête. Les invites ne sont pas la seule surface spécifique au modèle. La configuration de pensée, les paramètres d'échantillonnage et les limites de sortie diffèrent selon les générations de modèles, et un paramètre que le primaire accepte peut renvoyer un 400 sur le repli. Stockez les ensembles de paramètres par modèle à côté des ID de modèle dans la configuration, et demandez à la couche de routage de les appliquer au moment de l'envoi. Une reprise sur incident qui échoue sur une erreur de paramètre invalide est une reprise sur incident que vous n'aviez pas.
Gérez les réponses de manière indépendante du fournisseur. Normalisez les réponses dans votre propre forme interne à la limite du routage : texte de sortie, champs structurés validés, raisons d'arrêt mappées à votre propre énumération. Un code qui accède à un objet de réponse spécifique au fournisseur depuis douze endroits se brisera le jour où vous changerez de fournisseur.
Prévoyez les différences de coût et de limites. Les modèles de repli diffèrent par le prix par jeton, la fenêtre contextuelle et la sortie maximale. Passer de Fable 5 à Opus 4.8 réduit le coût par jeton d'environ la moitié, tandis que Sonnet 4.6 est de nouveau moins cher mais limite la sortie ; vérifiez l'aperçu actuel des modèles plutôt que de faire confiance aux chiffres de mémoire. Votre couche de routage doit prendre en charge les max_output_tokens et le comportement de troncation par modèle afin qu'un repli ne produise pas silencieusement des réponses tronquées ou une facture surprise.
Tests de contrat sur votre ensemble de repli
Le chemin de reprise sur incident que vous n'exercez jamais est celui qui échoue lorsque vous en avez besoin. Traitez votre chaîne de secours comme un contrat d'API et testez-la comme telle.
Le modèle qui fonctionne : maintenez un scénario de test dans Apidog qui exécute vos invites critiques sur chaque modèle de la chaîne de secours, selon un calendrier et dans l'intégration continue. Pour chaque modèle, affirmez trois choses :
- Schéma. La réponse est analysée, les champs requis existent et la sortie structurée est validée par rapport à votre schéma JSON. Cela détecte les ruptures subtiles, comme un modèle de secours qui échappe le JSON différemment ou supprime un champ que votre analyseur suppose.
- Latence. Le p95 reste inférieur au budget que vous avez défini pour ce modèle. Un repli qui fonctionne techniquement mais prend 40 secondes est un autre type de panne.
- Signaux de qualité. Vérifications mécaniques et peu coûteuses : la sortie n'est pas vide, est dans la bonne langue, contient les éléments requis, et le taux de refus sur l'ensemble des invites reste proche de sa ligne de base. Vous n'évaluez pas l'éloquence en CI ; vous détectez un modèle qui a cessé de faire le travail.
Structurez-le avec un environnement Apidog par modèle ou fournisseur, contenant l'URL du point de terminaison, la clé API et l'ID du modèle comme variables d'environnement. Le même scénario s'exécute alors sans changement sur claude-fable-5, claude-opus-4-8 et claude-sonnet-4-6 en changeant d'environnement, et l'ajout d'un quatrième modèle à la chaîne signifie l'ajout d'un environnement, et non l'écriture de nouveaux tests.
Choisissez délibérément l'ensemble d'invites. Vous n'avez pas besoin de centaines de cas ; vous avez besoin des dix à vingt invites qui représentent votre trafic de production : le contexte le plus long que vous envoyez, la sortie structurée la plus stricte que vous analysez, le cas limite qui a un jour cassé votre analyseur, et au moins une invite proche de la limite sensible de votre domaine afin que la dérive de refus apparaisse dans une exécution de test plutôt que dans un ticket de support. Versionnez cet ensemble avec vos invites, et lorsque la production vous surprend, ajoutez le cas surprenant à la suite.
Il y a un bonus pendant une panne : pointez un environnement vers un serveur mock qui renvoie des réponses enregistrées, et votre CI continue de valider tout ce qui se trouve en aval du modèle pendant que le fournisseur est en panne. Apidog peut générer ce mock à partir de la même spécification d'API que vos tests utilisent déjà, de sorte que la panne ne bloque pas non plus votre pipeline de publication.
Le 12 juin, la différence entre les équipes sereines et les équipes frénétiques se résumait à ceci. Certaines avaient des preuves nocturnes que leur chemin Opus 4.8 produisait une sortie valide pour leurs principales invites. D'autres avaient de l'espoir.
Préparation opérationnelle
L'architecture vous donne la capacité de basculer. Les opérations vous permettent de prendre la décision rapidement et proprement.
- Sondez chaque modèle, pas seulement le primaire. Exécutez une invite synthétique planifiée sur chaque modèle de la chaîne, séparément du trafic utilisateur. Les pages d'état des fournisseurs comme status.anthropic.com sont utiles, mais elles sont en retard et décrivent le monde du fournisseur, pas votre compte, votre région ou votre niveau de limite de débit. Votre propre sonde échoue en premier.
- Alertez sur les taux de refus et d'erreur, pas seulement les 5xx. Les problèmes au niveau du modèle se manifestent souvent par un taux de refus croissant, une rafale d'erreurs 404
model_not_foundou de 429, tandis que les tableaux de bord au niveau HTTP restent verts. - Rédigez le manuel de basculement avant d'en avoir besoin. Qui décide de basculer, quelle valeur de configuration change, ce que l'annonce aux supports et aux clients dit, et quels tableaux de bord surveiller pendant la première heure. Pendant la panne de Fable 5, les équipes sans manuel ont perdu plus de temps à décider qu'à agir.
- Préparez le retour. Lorsque le primaire revient, ne basculez pas 100 % du trafic en une seule fois. Mettez en œuvre une approche Canary pour une petite partie, comparez les métriques de qualité et de refus par rapport à votre base de référence de repli, puis augmentez progressivement. Nous couvrons la mécanique de ce processus dans comment revenir à l'API Fable 5, et le modèle s'applique à tout primaire qui revient.
- Répétez l'opération. Une fois par trimestre, effectuez un basculement intentionnel en staging, ou en production pour une petite partie du trafic si votre tolérance au risque le permet. Un exercice révèle la clé API expirée sur le compte de secours, le tableau de bord introuvable et la valeur de configuration qui a été renommée six mois auparavant. Il est toujours moins coûteux de trouver ces problèmes un mardi calme.
Ce que l'épisode Fable 5 nous apprend spécifiquement
Le retour du 1er juillet comportait un détail qui mérite d'être intégré à la politique : Anthropic a redéployé Fable 5 avec un classificateur de sécurité réentraîné. Même ID de modèle, même interface API, mais pas le même modèle au bit près que celui qui a été mis hors ligne. Les limites de refus ont bougé. Les invites qui passaient sans problème début juin pourraient se comporter différemment en juillet, et quelques refus qui se déclenchaient auparavant ne le faisaient plus.
La règle qui en découle est la suivante : retester au retour, ne pas réactiver. Un modèle revenant de toute absence, qu'il s'agisse d'une suspension, d'une annulation ou d'un long sursis de dépréciation, doit être traité comme une nouvelle version de modèle. Exécutez la suite de tests de contrat complète. Comparez les métriques de refus et de qualité avec vos lignes de base d'avant la panne, et non avec les chiffres de votre repli. Effectuez un test Canary avant d'augmenter la charge.
Il y a une deuxième leçon, plus discrète. Dix-neuf jours, c'est assez long pour que votre repli devienne votre ligne de base de facto. Les utilisateurs se sont adaptés au comportement d'Opus 4.8 ; les équipes internes ont ajusté les invites en conséquence. Un retour n'est pas seulement un événement technique, c'est un changement de produit, et il mérite le même soin que le lancement d'un nouveau produit.
FAQ
Une chaîne de secours du même fournisseur est-elle suffisante, ou ai-je besoin d'un deuxième fournisseur ?
Commencez par le même fournisseur. Cela couvre les dépréciations, les incidents de capacité, les retours de sécurité et les suspensions spécifiques au modèle pour une fraction du coût d'ingénierie, et des fonctionnalités comme les replis côté serveur d'Anthropic le rendent presque gratuit à adopter. Ajoutez un chemin entre fournisseurs lorsqu'une panne complète du fournisseur ou un événement au niveau du compte vous coûterait plus cher que le maintien d'une deuxième intégration. Le mode dégradé vaut la peine d'être construit dans les deux cas.
Les utilisateurs remarqueront-ils un basculement vers un modèle plus petit ?
Cela dépend de la tâche, alors mesurez au lieu de deviner. Pour l'extraction et la classification, un modèle plus petit bien sollicité est souvent indiscernable. Pour le raisonnement à long terme, des lacunes apparaissent ; des benchmarks comme notre comparaison Fable 5 vs Opus 4.8 vous donnent une première carte. Les invites à plusieurs niveaux de capacité et une copie d'interface utilisateur honnête (« les réponses peuvent être plus brèves en ce moment ») réduisent encore l'écart perçu.
À quelle fréquence le chemin de secours doit-il être testé ?
Toutes les nuits selon un calendrier, dans l'intégration continue à chaque modification des invites ou de la configuration de routage, et immédiatement après toute annonce du fournisseur qui affecte votre chaîne. Le coût en jetons de l'exécution de vos vingt principales invites sur trois modèles est une petite monnaie par rapport à la découverte d'un secours défaillant lors d'une panne.
La disponibilité des modèles va devenir moins prévisible, et non plus : réglementation plus stricte, cycles de publication et de dépréciation plus rapides, et capacité fluctuante à chaque lancement. Les équipes qui traverseront le prochain moment Fable 5 seront celles qui auront traité le modèle comme un composant remplaçable avec une pièce de rechange testée, et non comme un élément permanent. Le travail tient dans un fichier de configuration, un wrapper de routage et une suite de contrats qui s'exécute chaque nuit. Téléchargez Apidog et intégrez votre chaîne de secours à un test planifié dès aujourd'hui ; la prochaine panne n'est qu'une question de temps.
