Decouvrez Claude Fable 5, le modele Mythos d'Anthropic : nouveautes face a Opus 4.8, integration API en JavaScript, streaming, tool use, vision et maitrise des couts.
Claude Fable 5 : ce qu'il faut savoir
Le 9 juin 2026, Anthropic a annonce Claude Fable 5, le premier modele d'une nouvelle famille baptisee Mythos-class. Selon l'editeur, ses capacites depassent celles de tous les modeles rendus disponibles jusqu'ici, y compris Opus 4.8. Fable 5 est concu pour les taches complexes et de longue duree : migrations de code massives, agents autonomes sur plusieurs jours, raisonnement analytique avance et comprehension visuelle de haut niveau.
Anthropic publie en realite deux variantes du meme modele de base. La distinction est importante a comprendre avant d'integrer l'API.
| Variante | Acces | Garde-fous | Pour qui |
|---|---|---|---|
| Fable 5 | Disponible immediatement (API + plans entreprise) | Garde-fous automatiques actifs | Tous les developpeurs |
| Mythos 5 | Acces restreint (programme de confiance) | Garde-fous retires | Partenaires cyber et chercheurs en biologie |
Pour la quasi-totalite des projets web et applicatifs, c'est Fable 5 que
vous appellerez, via l'identifiant API claude-fable-5. Mythos 5 vise des cas
d'usage scientifiques tres specifiques et n'est pas ouvert au grand public.
Nouveautes face a Opus 4.8
Fable 5 se positionne comme un net cran au-dessus d'Opus 4.8, jusqu'ici le modele le plus capable d'Anthropic. Les gains sont mesurables sur plusieurs dimensions : raisonnement, code, finance, vision et execution autonome. Voici les chiffres communiques par Anthropic et ses partenaires.
| Dimension | Fable 5 | Comparaison Opus 4.8 |
|---|---|---|
| OfficeQA Pro (precision) | 57,9 % (etat de l'art) | +20 % de precision |
| Appels d'outils par tache | Plus efficace | -12 % d'appels d'outils |
| Vitesse | Plus lent | Environ 30 % plus lent |
| Tokens de sortie par question | Plus verbeux | Environ 2,5x plus de tokens |
| Revue de code et detection de bugs | Rappel superieur | Meilleur qu'Opus 4.8 |
Des resultats concrets en production
- Stripe a « compresse des mois d'ingenierie en quelques jours » : migration d'un codebase Ruby de 50 millions de lignes en une journee
- Vision a l'etat de l'art : Fable 5 a joue a Pokemon FireRed uniquement a partir de l'image
- Long-context : maintien de l'attention sur des millions de tokens, avec gains nets quand une memoire persistante est ajoutee
- Scores de tete sur FrontierCode, le benchmark finance de Hebbia et les taches de vision
Migrer un projet existant vers Fable 5
Si votre code utilise deja la Messages API avec Opus 4.8, la migration est triviale : le contrat de l'API est identique. Dans la pratique, une bonne approche consiste a centraliser le nom du modele dans une variable de configuration, puis a router selon la complexite de la tache. Vous evitez ainsi de payer le tarif Fable 5 sur des requetes qui n'en ont pas besoin, tout en gardant un seul point de modification.
// config-modele.js : router le modele selon la complexite
const MODELES = {
rapide: 'claude-haiku-4-5', // requetes simples, fort volume, faible cout
avance: 'claude-fable-5' // taches difficiles, agents, vision poussee
};
// On choisit le modele en fonction du type de tache
function choisirModele(typeTache) {
// 'agent', 'migration' ou 'vision' justifient le modele frontier
const tachesLourdes = ['agent', 'migration', 'vision', 'refactor'];
return tachesLourdes.includes(typeTache) ? MODELES.avance : MODELES.rapide;
}
// Exemple : un simple resume part sur le modele rapide
const reponse = await client.messages.create({
model: choisirModele('resume'), // renvoie claude-haiku-4-5
max_tokens: 512,
messages: [{ role: 'user', content: 'Resume ce texte en une phrase.' }]
});
Prerequis et configuration de l'API
L'integration de Fable 5 passe par la Messages API d'Anthropic, identique a celle des modeles precedents : changer de modele se resume souvent a changer une seule chaine de caracteres. Voici ce dont vous avez besoin.
- Un compte Anthropic avec une cle API (console.anthropic.com)
- Node.js 18+ pour utiliser le SDK officiel JavaScript
- Le SDK
@anthropic-ai/sdk(derniere version) - Une variable d'environnement pour ne jamais exposer la cle dans le code
# Initialiser le projet et installer le SDK officiel Anthropic
npm init -y
npm install @anthropic-ai/sdk
# Stocker la cle API dans une variable d'environnement (jamais en dur dans le code)
# Sous Linux/macOS :
export ANTHROPIC_API_KEY="sk-ant-votre-cle-ici"
# Sous Windows PowerShell :
# $env:ANTHROPIC_API_KEY = "sk-ant-votre-cle-ici"
Pour un projet reel, preferez un fichier .env charge avec un paquet comme
dotenv, et ajoutez-le a votre .gitignore. Une cle API qui fuit
dans un depot public peut etre exploitee en quelques minutes.
# Fichier .env (a ne jamais committer)
ANTHROPIC_API_KEY=sk-ant-votre-cle-ici
# .gitignore
.env
node_modules/
Premier appel a l'API en JavaScript
Le coeur de l'integration tient en quelques lignes. On instancie un client, on envoie un
tableau de messages, et on lit la reponse. Le SDK lit automatiquement la cle depuis
process.env.ANTHROPIC_API_KEY.
// premier-appel.js
import Anthropic from '@anthropic-ai/sdk';
// Le client lit automatiquement process.env.ANTHROPIC_API_KEY
const client = new Anthropic();
async function poserUneQuestion() {
// On envoie une requete a la Messages API en ciblant Fable 5
const reponse = await client.messages.create({
model: 'claude-fable-5', // identifiant du nouveau modele
max_tokens: 1024, // limite de tokens generes (controle des couts)
system: 'Tu es un assistant technique concis et precis.', // role systeme = consigne globale
messages: [
{
role: 'user',
content: 'Explique en 3 phrases ce qui distingue Fable 5 d\'Opus 4.8.'
}
]
});
// La reponse texte se trouve dans le premier bloc de contenu
console.log(reponse.content[0].text);
// Le champ usage detaille la consommation de tokens (utile pour estimer le cout)
console.log('Tokens entree :', reponse.usage.input_tokens);
console.log('Tokens sortie :', reponse.usage.output_tokens);
}
poserUneQuestion();
La structure de la reponse merite quelques explications. Le champ content est
un tableau de blocs : un bloc text pour la reponse, mais aussi
potentiellement des blocs tool_use (voir plus loin). Le champ
usage est essentiel pour suivre vos couts en temps reel.
// Exemple de reponse simplifiee renvoyee par l'API
{
"id": "msg_01ABC...",
"model": "claude-fable-5",
"role": "assistant",
"content": [
{
"type": "text",
"text": "Fable 5 est un modele Mythos-class plus capable qu'Opus 4.8..."
}
],
"stop_reason": "end_turn",
"usage": {
"input_tokens": 28,
"output_tokens": 96
}
}
Gerer les erreurs et les limites de debit
En production, les appels echouent parfois : depassement de quota (HTTP 429), surcharge serveur (529) ou timeout. Une strategie de retry avec backoff exponentiel est indispensable.
// retry.js : appel robuste avec re-essais et backoff exponentiel
import Anthropic from '@anthropic-ai/sdk';
const client = new Anthropic();
async function appelAvecRetry(params, maxTentatives = 4) {
for (let tentative = 1; tentative <= maxTentatives; tentative++) {
try {
return await client.messages.create(params);
} catch (erreur) {
// 429 = rate limit, 529 = surcharge : ces erreurs sont temporaires
const recuperable = erreur.status === 429 || erreur.status === 529;
if (!recuperable || tentative === maxTentatives) {
throw erreur; // erreur definitive ou tentatives epuisees
}
// Backoff exponentiel : 1s, 2s, 4s... pour laisser le service respirer
const attente = Math.pow(2, tentative - 1) * 1000;
console.warn(`Tentative ${tentative} echouee (${erreur.status}), nouvel essai dans ${attente}ms`);
await new Promise((r) => setTimeout(r, attente));
}
}
}
// Utilisation
const reponse = await appelAvecRetry({
model: 'claude-fable-5',
max_tokens: 512,
messages: [{ role: 'user', content: 'Bonjour Fable 5 !' }]
});
console.log(reponse.content[0].text);
Streaming des reponses en temps reel
Fable 5 etant plus lent et plus verbeux qu'un modele standard, le streaming devient quasi obligatoire pour offrir une bonne experience utilisateur. Au lieu d'attendre la reponse complete, on affiche le texte au fur et a mesure de sa generation.
// streaming.js : afficher la reponse token par token
import Anthropic from '@anthropic-ai/sdk';
const client = new Anthropic();
async function reponseEnStreaming(question) {
// stream: true active le flux d'evenements Server-Sent Events
const flux = await client.messages.create({
model: 'claude-fable-5',
max_tokens: 1024,
stream: true,
messages: [{ role: 'user', content: question }]
});
let texteComplet = '';
// On parcourt chaque evenement du flux
for await (const evenement of flux) {
// Le type content_block_delta porte les fragments de texte
if (evenement.type === 'content_block_delta' && evenement.delta.type === 'text_delta') {
const fragment = evenement.delta.text;
process.stdout.write(fragment); // affichage immediat dans le terminal
texteComplet += fragment;
}
}
return texteComplet;
}
await reponseEnStreaming('Liste 5 cas d\'usage de Fable 5 pour une equipe web.');
Cote serveur web, vous relayez ce flux vers le navigateur via une reponse
text/event-stream ou un ReadableStream. Le SDK expose aussi une
API helper plus haut niveau avec des evenements text directs.
// streaming-helper.js : API haut niveau du SDK
const flux = client.messages.stream({
model: 'claude-fable-5',
max_tokens: 1024,
messages: [{ role: 'user', content: 'Resume les nouveautes de Fable 5.' }]
});
// L'evenement 'text' livre directement chaque fragment de texte
flux.on('text', (fragment) => {
process.stdout.write(fragment);
});
// 'finalMessage' renvoie l'objet message complet une fois le flux termine
const messageFinal = await flux.finalMessage();
console.log('\nTokens sortie :', messageFinal.usage.output_tokens);
Tool use : connecter Fable 5 a vos fonctions
Le tool use (appel de fonctions) permet a Fable 5 de declencher des actions concretes : interroger une base de donnees, appeler une API meteo, lancer un calcul. Anthropic souligne que Fable 5 utilise 12 % d'appels d'outils en moins qu'Opus 4.8 pour un meme resultat : il choisit ses outils plus intelligemment.
Le principe : vous declarez vos outils, le modele decide quand les utiliser, vous executez la fonction reelle, puis vous renvoyez le resultat pour la reponse finale.
// tool-use.js : definir et executer un outil
import Anthropic from '@anthropic-ai/sdk';
const client = new Anthropic();
// 1. On declare l'outil avec un schema JSON des parametres attendus
const outils = [
{
name: 'obtenir_meteo',
description: 'Renvoie la meteo actuelle pour une ville donnee',
input_schema: {
type: 'object',
properties: {
ville: { type: 'string', description: 'Nom de la ville, ex: Paris' }
},
required: ['ville']
}
}
];
// 2. Implementation reelle de l'outil (ici simulee)
function obtenirMeteo(ville) {
// Dans un vrai projet : appel a une API meteo externe
return { ville, temperature: 21, condition: 'ensoleille' };
}
async function demanderMeteo() {
const messages = [{ role: 'user', content: 'Quelle meteo a Paris aujourd\'hui ?' }];
// 3. Premier appel : le modele peut demander a utiliser l'outil
let reponse = await client.messages.create({
model: 'claude-fable-5',
max_tokens: 1024,
tools: outils,
messages
});
// 4. Si le modele demande un outil, on l'execute
if (reponse.stop_reason === 'tool_use') {
const blocOutil = reponse.content.find((b) => b.type === 'tool_use');
const resultat = obtenirMeteo(blocOutil.input.ville);
// 5. On renvoie le resultat de l'outil au modele
messages.push({ role: 'assistant', content: reponse.content });
messages.push({
role: 'user',
content: [
{
type: 'tool_result',
tool_use_id: blocOutil.id, // relie le resultat a la demande
content: JSON.stringify(resultat) // donnees serialisees
}
]
});
// 6. Second appel : le modele formule la reponse finale en langage naturel
reponse = await client.messages.create({
model: 'claude-fable-5',
max_tokens: 1024,
tools: outils,
messages
});
}
console.log(reponse.content[0].text);
}
demanderMeteo();
Taches longues et agents multi-jours
La vraie signature de Fable 5, c'est l'execution autonome de longue duree. La que les modeles precedents perdaient le fil sur de longues sessions, Fable 5 maintient son attention sur des millions de tokens et delegue de maniere fiable a des sous-agents paralleles. C'est ce qui a permis a Stripe sa migration Ruby de 50 millions de lignes en une journee.
Boucle d'agent simple
Un agent est une boucle : le modele reflechit, appelle des outils, observe les resultats, et continue jusqu'a atteindre l'objectif. Voici un squelette minimal applicable a une tache de developpement.
// agent.js : boucle d'agent avec outils et condition d'arret
import Anthropic from '@anthropic-ai/sdk';
const client = new Anthropic();
// Registre des outils disponibles pour l'agent
const implementations = {
lire_fichier: ({ chemin }) => `Contenu simule de ${chemin}`,
ecrire_fichier: ({ chemin }) => `Fichier ${chemin} ecrit avec succes`
};
async function lancerAgent(objectif, outils, maxEtapes = 15) {
const messages = [{ role: 'user', content: objectif }];
// La boucle s'arrete soit a max_etapes, soit quand le modele a fini (end_turn)
for (let etape = 0; etape < maxEtapes; etape++) {
const reponse = await client.messages.create({
model: 'claude-fable-5',
max_tokens: 4096,
tools,
messages
});
messages.push({ role: 'assistant', content: reponse.content });
// Le modele estime avoir termine : on sort de la boucle
if (reponse.stop_reason === 'end_turn') {
console.log('Agent termine :', reponse.content[0].text);
return;
}
// Sinon on execute chaque outil demande et on renvoie les resultats
const resultats = [];
for (const bloc of reponse.content) {
if (bloc.type === 'tool_use') {
const sortie = implementations[bloc.name](bloc.input);
resultats.push({
type: 'tool_result',
tool_use_id: bloc.id,
content: String(sortie)
});
}
}
messages.push({ role: 'user', content: resultats });
}
console.warn('Limite d\'etapes atteinte sans achevement.');
}
maxEtapes) et un budget de tokens. Un agent sans garde-fou peut consommer
votre quota tres vite.
Memoire persistante
Anthropic note un gain net de performance quand on ajoute une memoire persistante (jusqu'a 3x sur certaines taches). Concretement, vous stockez un resume de l'etat entre les appels et vous le reinjectez dans le message systeme.
// memoire.js : injecter un etat resume entre les sessions
const etatPersistant = {
objectif: 'Migrer le module paiement',
fichiers_traites: ['payment.rb', 'invoice.rb'],
prochaine_etape: 'Adapter les tests unitaires'
};
// On reinjecte l'etat dans le prompt systeme a chaque reprise de session
const systemPrompt = `Tu reprends une tache en cours.
Etat actuel : ${JSON.stringify(etatPersistant, null, 2)}
Continue a partir de la prochaine etape indiquee.`;
const reponse = await client.messages.create({
model: 'claude-fable-5',
max_tokens: 2048,
system: systemPrompt,
messages: [{ role: 'user', content: 'Reprends la migration.' }]
});
Vision : analyser images et captures d'ecran
Fable 5 atteint un niveau de vision etat de l'art, particulierement utile
pour les images techniques, les applications web et les captures d'ecran detaillees. On
envoie une image encodee en base64 (ou via URL) dans un bloc de contenu de type
image.
// vision.js : analyser une capture d'ecran avec Fable 5
import Anthropic from '@anthropic-ai/sdk';
import fs from 'node:fs';
const client = new Anthropic();
async function analyserImage(cheminImage) {
// On lit l'image et on l'encode en base64
const donnees = fs.readFileSync(cheminImage).toString('base64');
const reponse = await client.messages.create({
model: 'claude-fable-5',
max_tokens: 1024,
messages: [
{
role: 'user',
content: [
{
type: 'image',
source: {
type: 'base64',
media_type: 'image/png', // adapter au format reel (png, jpeg, webp)
data: donnees
}
},
{
type: 'text',
text: 'Decris cette capture d\'ecran et liste les bugs d\'interface visibles.'
}
]
}
]
});
console.log(reponse.content[0].text);
}
analyserImage('./capture-ui.png');
Ce cas d'usage est puissant pour le developpement web : detecter des problemes de mise en page, extraire des donnees d'un tableau image, ou generer du code a partir d'une maquette. Combine au tool use, le modele peut analyser un ecran puis declencher une correction.
Couts, garde-fous et bonnes pratiques
Fable 5 est un modele premium. Sa tarification et son comportement different de ceux des modeles plus legers, il faut donc l'integrer avec discernement.
Tarification
| Type de token | Prix (par million de tokens) |
|---|---|
| Tokens en entree (prompt) | 10 $ |
| Tokens en sortie (reponse) | 50 $ |
Les garde-fous automatiques de Fable 5
Fable 5 embarque trois classifieurs de securite qui, lorsqu'ils detectent un sujet sensible, basculent automatiquement la requete vers Opus 4.8. Ce repli se declenche dans moins de 5 % des sessions.
- Requetes de cybersecurite offensive (exploitation, attaque)
- Demandes en biologie/chimie a double usage
- Tentatives de distillation (extraction des capacites du modele)
Concretement, sur ces sujets, vous pourriez obtenir une reponse legerement differente, produite par Opus 4.8 plutot que Fable 5. Pour l'immense majorite des cas d'usage de developpement web, ce mecanisme reste totalement transparent.
Quand choisir Fable 5 ?
| Cas d'usage | Modele recommande |
|---|---|
| Migration de code massive, refactor complexe | Fable 5 |
| Agent autonome sur plusieurs heures/jours | Fable 5 |
| Analyse visuelle technique poussee | Fable 5 |
| Chatbot simple, FAQ, classification | Modele plus leger (cout/latence) |
| Reponses rapides a fort volume | Modele plus leger |
- Fixez toujours un
max_tokensraisonnable pour borner le cout - Activez le streaming pour masquer la latence superieure
- Surveillez
usage.output_tokensa chaque appel - Reservez Fable 5 aux taches difficiles ; deleguez le reste a un modele plus leger
- Mettez en place des plafonds d'etapes sur vos boucles d'agent
Conclusion
Claude Fable 5 marque un vrai saut par rapport a Opus 4.8 : meilleur en raisonnement, en
code, en vision et surtout en execution autonome de longue duree. Pour un developpeur,
la bonne nouvelle est que l'integration reste identique aux modeles precedents : changer
model pour claude-fable-5 suffit a beneficier de ses capacites.
La contrepartie est economique : Fable 5 est plus lent et bien plus verbeux. Il n'a de sens que sur les taches qui le justifient. Une architecture pragmatique combine Fable 5 pour les problemes difficiles et un modele plus leger pour le reste, avec streaming, retry et suivi des tokens systematiques.