Aller au contenu principal
Leçon 8 sur 12 · Raisonnement IA avec Mistral — reasoning_effort, Small 4 et Large 4

Migrer depuis Magistral

Leçon 8 sur 12 Mis à jour le 2 novembre 2026 Développeur
Sur cette page
  1. Où en est votre code ?
  2. La table de correspondance
  3. Ce qui change dans le code
  4. Valider la migration
  5. Profiter de la migration
  6. Points clés à retenir

Leçon réécrite le 2 novembre 2026. Elle décrivait le raisonnement « toujours actif » de Magistral. Tous les modèles Magistral étant retirés depuis le 31 juillet 2026, elle déroule désormais la migration vers reasoning_effort. Sources : Models — modèles dépréciés et retirés · Reasoning · Native reasoning (deprecated).

Où en est votre code ?

Les dernières versions de Magistral, Small 1.2 et Medium 1.2 (-2509), ont été dépréciées au printemps 2026 et retirées le 31 juillet 2026 ; les versions 1.0 et 1.1 l’étaient depuis le 30 novembre 2025. Un code qui appelle encore magistral-small-latest, magistral-medium-latest ou un identifiant daté de la gamme vise donc un modèle qui n’est plus disponible. La migration n’est plus à planifier : elle est à faire.

La table de correspondance

Vous utilisiezRemplaçant désigné par MistralCe que nous conseillons aujourd’hui
Magistral Small (1.0, 1.1, 1.2)Mistral Small 4mistral-small-2603 avec reasoning_effort="high"
Magistral Medium (1.0, 1.1, 1.2)Mistral Medium 3.5Small 4 si la qualité suffit, sinon mistral-large-4-0 avec reasoning_effort="high"

Pourquoi ne pas suivre à la lettre le remplaçant désigné de Magistral Medium ? Parce que Mistral Medium 3.5 est lui-même déprécié depuis le 31 octobre 2026, avec un retrait le 30 avril 2027 et Large 4 pour successeur. Migrer vers lui, c’est s’engager dans une seconde migration six mois plus tard. Large 4 est en Public Preview : si cette maturité ne convient pas à votre production, Medium 3.5 reste une étape possible, à condition de dater dès maintenant la bascule suivante.

Ce qui change dans le code

Magistral raisonnait toujours ; les modèles actuels raisonnent quand vous le leur demandez. La correspondance naturelle de « toujours actif » est donc reasoning_effort="high".

# Avant : Magistral (retiré)
response = client.chat.complete(
    model="magistral-medium-latest",
    messages=[
        {"role": "system", "content": "Tu es un analyste rigoureux."},
        {"role": "user", "content": question},
    ],
    prompt_mode=None,   # désactivait le prompt système par défaut de Magistral
)

# Après : Mistral Large 4 avec raisonnement explicite
response = client.chat.complete(
    model="mistral-large-4-0",
    messages=[
        {"role": "system", "content": "Tu es un analyste rigoureux."},
        {"role": "user", "content": question},
    ],
    reasoning_effort="high",
)

Quatre points à reprendre au passage :

  1. Les identifiants de modèle : cherchez magistral dans le code, les fichiers de configuration et les variables d’environnement.
  2. prompt_mode : la documentation du raisonnement ne le mentionne plus ; retirez-le de vos appels.
  3. Les prompts système : supprimez le gabarit de réflexion propre à Magistral (le fragment thinking placé dans le message système) et gardez les consignes de méthode et de format (leçon 6).
  4. La lecture des réponses : la structure de Magistral 25.07 et 25.09 (ThinkChunk puis TextChunk) est celle des modèles actuels, votre code de lecture reste valable. Ajoutez seulement le cas de la chaîne simple, que renvoient Small 4 et Medium 3.5 avec reasoning_effort="none". Si votre code venait de Magistral 25.06 et cherchait des balises <think> dans le texte, remplacez-le par la fonction separer de la leçon 3.

Valider la migration

Ne basculez pas à l’aveugle. Rejouez un échantillon de vos cas réels, avec leurs réponses de référence, et comparez trois mesures : la qualité (exactitude, respect du format), les tokens consommés (usage.completion_tokens) et la latence. Un script suffit :

import time

def comparer(client, cas, configs):
    """cas : liste de (question, verifier) ; configs : liste de (modèle, niveau)."""
    for model, niveau in configs:
        justes = tokens = 0
        debut = time.perf_counter()
        for question, verifier in cas:
            r = client.chat.complete(
                model=model,
                messages=[{"role": "user", "content": question}],
                reasoning_effort=niveau,
            )
            _, reponse = separer(r.choices[0].message.content)
            justes += bool(verifier(reponse))
            tokens += r.usage.completion_tokens
        duree = time.perf_counter() - debut
        print(f"{model} ({niveau}) : {justes}/{len(cas)} justes, {tokens} tokens, {duree:.0f} s")

comparer(client, mes_cas, [
    ("mistral-small-2603", "high"),
    ("mistral-large-4-0", "medium"),
    ("mistral-large-4-0", "high"),
])

La fonction verifier dépend de votre domaine : comparaison à une valeur attendue, présence d’éléments obligatoires, validation d’un JSON. C’est elle qui transforme une impression en décision.

Profiter de la migration

Vous touchez de toute façon à chaque appel de modèle : profitez-en pour épingler des identifiants datés en production (mistral-small-2603 plutôt que mistral-small-latest) et pour centraliser le choix du modèle et du niveau de raisonnement dans une configuration unique. La prochaine dépréciation, et il y en aura, se traitera alors en une ligne.

Points clés à retenir

  • Magistral est retiré depuis le 31 juillet 2026 : tout appel restant vise un modèle indisponible
  • Magistral Small → Small 4 ; Magistral Medium → Small 4 ou Large 4 plutôt que Medium 3.5, lui-même déprécié
  • « Toujours actif » se traduit par reasoning_effort="high"
  • Retirez prompt_mode et le gabarit de réflexion des prompts système
  • Validez sur vos cas réels (qualité, tokens, latence), puis épinglez des identifiants datés