ModelVerdict

Anthropic

Claude Sonnet 5

Comment Claude Sonnet 5 de Anthropic traite de vrais documents d'entreprise : précision, coût réel, vitesse et où il se trompe.

Prix catalogue : 1,84 € par million de tokens d'entrée, 9,20 € par million de tokens de sortie · anthropic/claude-sonnet-5

Résultats

Tâche · documentsRangChamps correctsDocuments sans erreurPour 1 000 documentsÀ corriger / 1 000Vitesse (médiane)Seuil
Clauses contractuelles · Anglais (US)1/10100,0 %100 %4,64 €03,4 satteint le seuil
Clauses contractuelles · Tchèque1/10100,0 %100 %5,57 €03,6 satteint le seuil
Clauses contractuelles · Allemand4/1098,2 %87 %6,54 €1334,3 satteint le seuil
Tri des e-mails · Anglais (US)3/1098,2 %84 %3,69 €1603,8 satteint le seuil
Tri des e-mails · Tchèque4/1098,2 %83 %4,52 €1674,7 satteint le seuil
Tri des e-mails · Allemand3/1097,9 %81 %4,70 €1874,3 satteint le seuil
Extraction de factures · Français6/1098,7 %96 %10,14 €414,4 satteint le seuil
Extraction de factures · Anglais (US)2/1099,8 %99 %8,13 €133,2 satteint le seuil
Extraction de factures · Tchèque1/10100,0 %100 %8,66 €03,6 satteint le seuil
Extraction de factures · Allemand5/1099,0 %87 %9,58 €1333,8 satteint le seuil
Extraction de factures · Espagnol8/1093,6 %77 %10,94 €2304,0 ssous le seuil
Détection des données personnelles · Anglais (US)2/1099,7 %98 %3,22 €202,5 satteint le seuil
Détection des données personnelles · Tchèque7/1098,9 %92 %3,73 €803,2 satteint le seuil
Détection des données personnelles · Allemand4/1099,7 %98 %4,05 €203,7 satteint le seuil

Où il se trompe

Les champs sur lesquels il se trompe le plus souvent et les types d'erreurs, sur tous les documents du benchmark.

Clauses contractuelles · Anglais (US)

Aucune erreur sur cette tâche.

Clauses contractuelles · Tchèque

Aucune erreur sur cette tâche.

Clauses contractuelles · Allemand

Champs les plus faibles

  • Identifiant du prestataire87,3 %
  • Identifiant du client89,3 %

Types d'erreurs (nombre de champs)

  • valeur inventée35

Tri des e-mails · Anglais (US)

Champs les plus faibles

  • Tonalité86,7 %
  • Priorité97,3 %

Types d'erreurs (nombre de champs)

  • valeur erronée24

Tri des e-mails · Tchèque

Champs les plus faibles

  • Tonalité87,3 %
  • Priorité96,0 %

Types d'erreurs (nombre de champs)

  • valeur erronée25

Tri des e-mails · Allemand

Champs les plus faibles

  • Tonalité84,7 %
  • Priorité96,0 %

Types d'erreurs (nombre de champs)

  • valeur erronée29

Extraction de factures · Français

Champs les plus faibles

  • HT par taux96,9 %
  • Référence de paiement97,9 %
  • Compte bancaire97,9 %
  • Fournisseur99,0 %

Types d'erreurs (nombre de champs)

  • JSON invalide13
  • champ manquant2
  • valeur inventée1
  • valeur erronée1

Extraction de factures · Anglais (US)

Champs les plus faibles

  • HT par taux98,7 %
  • Taxe par taux99,3 %

Types d'erreurs (nombre de champs)

  • valeur erronée2
  • champ manquant1

Extraction de factures · Tchèque

Aucune erreur sur cette tâche.

Extraction de factures · Allemand

Champs les plus faibles

  • HT par taux89,3 %
  • Compte bancaire98,0 %
  • Date de facture99,3 %

Types d'erreurs (nombre de champs)

  • champ manquant17
  • valeur erronée3

Extraction de factures · Espagnol

Champs les plus faibles

  • HT par taux79,0 %
  • Fournisseur94,0 %
  • Référence de paiement94,0 %
  • Identifiant du fournisseur (EIN, IČO…)95,0 %

Types d'erreurs (nombre de champs)

  • JSON invalide65
  • champ manquant16
  • valeur inventée1
  • valeur erronée1

Détection des données personnelles · Anglais (US)

Champs les plus faibles

  • Adresses98,0 %

Types d'erreurs (nombre de champs)

  • champ manquant3

Détection des données personnelles · Tchèque

Champs les plus faibles

  • Noms96,7 %
  • Adresses97,3 %
  • Dates de naissance98,0 %

Types d'erreurs (nombre de champs)

  • valeur inventée8
  • champ manquant4

Détection des données personnelles · Allemand

Champs les plus faibles

  • Noms98,7 %
  • Dates de naissance99,3 %

Types d'erreurs (nombre de champs)

  • valeur inventée3

Taxe linguistique

Combien de tokens en plus ce modèle consomme pour le même texte qu'en anglais.

Taxe linguistique de tous les modèles →

Conformité

EU: Amazon Bedrock eu-west-1, Google Vertex europe. ZDR: Bedrock, Vertex.

Comment nous vérifions la conformité →

À utiliser tout de suite

La requête exacte du benchmark (même prompt, schéma JSON, température 0), prête pour appeler Claude Sonnet 5 via OpenRouter.

Clauses contractuelles · Français

Python · httpx · OpenRouter
import json
import os

import httpx

PROMPT = "Extrayez les conditions essentielles du contrat ci-dessous et renvoyez uniquement du JSON avec ces clés :\n\nprovider_name         la partie qui fournit la prestation (Prestataire, Vendeur, Bailleur, Concédant),\n                      exactement comme indiqué, y compris la forme juridique\nprovider_id           numéro d'immatriculation de cette partie (p. ex. SIREN, SIRET ou RCS), s'il est indiqué\nclient_name           la partie qui paie (Client, Acheteur, Preneur, Licencié)\nclient_id             numéro d'immatriculation de cette partie, s'il est indiqué\ncontract_type         l'une des valeurs : services, supply, lease, license, maintenance\nprice                 prix convenu hors TVA (nombre)\ncurrency              code de devise selon ISO 4217 (EUR, CHF, USD, …)\nprice_period          l'une des valeurs : one_time, monthly, yearly\neffective_date        date d'entrée en vigueur du contrat (YYYY-MM-DD)\nend_date              fin d'une durée déterminée (YYYY-MM-DD) ; null si le contrat est conclu pour une\n                      durée indéterminée\nnotice_period_months  délai de préavis de résiliation en mois (nombre) ; null s'il n'y en a pas\npenalty_pct_per_day   pénalité de retard de paiement en pourcentage du montant impayé par jour\n                      (p. ex. 0.05 pour 0,05 %) ; null s'il n'y en a pas\ngoverning_law         code pays du droit applicable selon ISO 3166 (p. ex. FR) ; États américains\n                      sous la forme US-XX\n\nRègles :\n- Convertissez les dates relatives (« à la date de sa signature », « le premier jour du mois suivant ») par\n  rapport à la date de signature.\n- La date de signature n'est pas la date d'entrée en vigueur, sauf si le contrat le prévoit expressément.\n- L'acompte, le dépôt de garantie et les pénalités forfaitaires pour d'autres manquements ne sont ni le prix ni\n  la pénalité de retard de paiement.\n- Si une valeur ne figure pas dans le contrat, renvoyez null. Ne devinez pas.\n- Montants sous forme de nombres avec un point décimal, sans séparateur de milliers et sans symbole de devise.\n"
SCHEMA = json.loads("{\"type\":\"object\",\"properties\":{\"provider_name\":{\"type\":[\"string\",\"null\"]},\"provider_id\":{\"type\":[\"string\",\"null\"]},\"client_name\":{\"type\":[\"string\",\"null\"]},\"client_id\":{\"type\":[\"string\",\"null\"]},\"contract_type\":{\"type\":[\"string\",\"null\"],\"enum\":[\"services\",\"supply\",\"lease\",\"license\",\"maintenance\",null]},\"price\":{\"type\":[\"number\",\"null\"]},\"currency\":{\"type\":[\"string\",\"null\"]},\"price_period\":{\"type\":[\"string\",\"null\"],\"enum\":[\"one_time\",\"monthly\",\"yearly\",null]},\"effective_date\":{\"type\":[\"string\",\"null\"],\"description\":\"YYYY-MM-DD\"},\"end_date\":{\"type\":[\"string\",\"null\"],\"description\":\"YYYY-MM-DD\"},\"notice_period_months\":{\"type\":[\"integer\",\"null\"]},\"penalty_pct_per_day\":{\"type\":[\"number\",\"null\"]},\"governing_law\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"provider_name\",\"provider_id\",\"client_name\",\"client_id\",\"contract_type\",\"price\",\"currency\",\"price_period\",\"effective_date\",\"end_date\",\"notice_period_months\",\"penalty_pct_per_day\",\"governing_law\"],\"additionalProperties\":false}")


def run(document_text: str) -> dict:
    """Text of the document in, the extracted fields as a dict out."""
    response = httpx.post(
        "https://openrouter.ai/api/v1/chat/completions",
        headers={"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}"},
        json={
            "model": "anthropic/claude-sonnet-5",
            "temperature": 0,
            "messages": [{"role": "user", "content": f"{PROMPT}\n\n---\n{document_text}"}],
            # For a scan or photo, send [{"type": "text", "text": PROMPT},
            # {"type": "image_url", "image_url": {"url": "data:image/png;base64,..."}}] instead.
            "response_format": {
                "type": "json_schema",
                "json_schema": {"name": "contracts", "strict": False, "schema": SCHEMA},
            },
        },
        timeout=120,
    )
    response.raise_for_status()
    return json.loads(response.json()["choices"][0]["message"]["content"])

Tri des e-mails · Français

Python · httpx · OpenRouter
import json
import os

import httpx

PROMPT = "Vous triez les e-mails du support client. Lisez l'e-mail ci-dessous et renvoyez uniquement du JSON avec ces clés :\n\ncategory        l'une des valeurs : billing (factures, paiements, facturation), delivery (où est la commande,\n                expédition, changement d'adresse), complaint (marchandise endommagée, erronée ou défectueuse, réclamation),\n                technical (connexion, erreur dans une application ou un système, interfaces), cancellation (annulation\n                d'une commande, résiliation d'un contrat ou d'un abonnement), sales (demande, prix, intérêt avant l'achat)\npriority        l'une des valeurs : urgent, high, normal, low (règles ci-dessous)\nsentiment       l'une des valeurs : positive, neutral, negative (ton du client)\ncustomer_name   nom complet du client qui a écrit la demande\norder_number    numéro de commande du client, s'il est indiqué\ninvoice_number  numéro de facture, s'il est indiqué\namount          montant dont il est question dans la demande (nombre)\ncurrency        code de devise de ce montant selon ISO 4217 (EUR, CZK, USD, …)\ndeadline        date à laquelle le client souhaite une solution ou une réponse (YYYY-MM-DD)\n\nRègles de priorité :\n- urgent : le client ne peut pas travailler en ce moment, ou l'échéance tombe au plus 1 jour après la date de l'e-mail\n- high : l'échéance tombe au plus 7 jours après la date de l'e-mail, ou le client menace de mettre fin\n  à la collaboration ou d'une escalade (avocat)\n- low : le client écrit expressément que ce n'est pas urgent\n- normal : tout le reste\n\nRègles :\n- Fil de discussion : évaluez le message le plus récent ; les numéros de commande et de facture ainsi que les\n  montants peuvent provenir de messages plus anciens cités. E-mail transféré : le client est l'expéditeur d'origine,\n  pas le collègue qui l'a transféré.\n- Convertissez les échéances relatives (« d'ici vendredi », « d'ici demain », « d'ici la fin du mois ») à partir de la\n  date du message dans lequel elles figurent.\n- Les numéros de ticket du support, les numéros SIREN, SIRET ou RCS, les numéros de TVA et les numéros de téléphone\n  ne sont pas des numéros de commande ou de facture.\n- Si une valeur ne figure pas dans l'e-mail, renvoyez null. Ne devinez pas.\n- Montants sous forme de nombres avec un point décimal, sans séparateur de milliers et sans symbole de devise.\n"
SCHEMA = json.loads("{\"type\":\"object\",\"properties\":{\"category\":{\"type\":[\"string\",\"null\"],\"enum\":[\"billing\",\"delivery\",\"complaint\",\"technical\",\"cancellation\",\"sales\",null]},\"priority\":{\"type\":[\"string\",\"null\"],\"enum\":[\"urgent\",\"high\",\"normal\",\"low\",null]},\"sentiment\":{\"type\":[\"string\",\"null\"],\"enum\":[\"positive\",\"neutral\",\"negative\",null]},\"customer_name\":{\"type\":[\"string\",\"null\"]},\"order_number\":{\"type\":[\"string\",\"null\"]},\"invoice_number\":{\"type\":[\"string\",\"null\"]},\"amount\":{\"type\":[\"number\",\"null\"]},\"currency\":{\"type\":[\"string\",\"null\"]},\"deadline\":{\"type\":[\"string\",\"null\"],\"description\":\"YYYY-MM-DD\"}},\"required\":[\"category\",\"priority\",\"sentiment\",\"customer_name\",\"order_number\",\"invoice_number\",\"amount\",\"currency\",\"deadline\"],\"additionalProperties\":false}")


def run(document_text: str) -> dict:
    """Text of the document in, the extracted fields as a dict out."""
    response = httpx.post(
        "https://openrouter.ai/api/v1/chat/completions",
        headers={"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}"},
        json={
            "model": "anthropic/claude-sonnet-5",
            "temperature": 0,
            "messages": [{"role": "user", "content": f"{PROMPT}\n\n---\n{document_text}"}],
            # For a scan or photo, send [{"type": "text", "text": PROMPT},
            # {"type": "image_url", "image_url": {"url": "data:image/png;base64,..."}}] instead.
            "response_format": {
                "type": "json_schema",
                "json_schema": {"name": "emails", "strict": False, "schema": SCHEMA},
            },
        },
        timeout=120,
    )
    response.raise_for_status()
    return json.loads(response.json()["choices"][0]["message"]["content"])

Extraction de factures · Français

Python · httpx · OpenRouter
import json
import os

import httpx

PROMPT = "Extrayez du document joint les informations suivantes et renvoyez uniquement du JSON avec ces clés :\n\nsupplier_name      Nom de l'émetteur de la facture (exactement comme sur le document, accents et forme juridique compris)\nsupplier_id        Numéro SIRET de l'émetteur (14 chiffres ; ni le numéro de TVA intracommunautaire ni le seul numéro RCS)\nvat_id             Numéro de TVA intracommunautaire de l'émetteur\ninvoice_number     Numéro du document\npayment_reference  Référence à rappeler lors du paiement\nissue_date         Date d'émission (YYYY-MM-DD)\ntax_point_date     Date de la livraison ou de la prestation de services (YYYY-MM-DD)\ndue_date           Date d'échéance / « à payer avant le » (YYYY-MM-DD)\nnet_by_rate        Montant HT par taux de TVA, p. ex. {\"20\": 18450.00, \"5.5\": 1200.00}\nvat_by_rate        Montant de la TVA par taux, p. ex. {\"20\": 3690.00}\ntotal              Montant total TTC / net à payer (nombre, négatif pour un avoir)\ncurrency           Devise selon ISO 4217 (EUR, GBP, …)\nbank_account       IBAN de l'émetteur\n\nRègles :\n- Ne renvoyez aucune information concernant le client, uniquement celles de l'émetteur.\n- Si une information ne figure pas sur le document, renvoyez null. N'inventez rien.\n- Si le document ne comporte pas de ventilation de la TVA (micro-entreprise, demande d'acompte), renvoyez net_by_rate et vat_by_rate à null.\n- Montants sous forme de nombres avec un point décimal, sans séparateur de milliers et sans devise.\n"
SCHEMA = json.loads("{\"type\":\"object\",\"properties\":{\"supplier_name\":{\"type\":[\"string\",\"null\"]},\"supplier_id\":{\"type\":[\"string\",\"null\"]},\"vat_id\":{\"type\":[\"string\",\"null\"]},\"invoice_number\":{\"type\":[\"string\",\"null\"]},\"payment_reference\":{\"type\":[\"string\",\"null\"]},\"issue_date\":{\"type\":[\"string\",\"null\"],\"description\":\"YYYY-MM-DD\"},\"tax_point_date\":{\"type\":[\"string\",\"null\"],\"description\":\"YYYY-MM-DD\"},\"due_date\":{\"type\":[\"string\",\"null\"],\"description\":\"YYYY-MM-DD\"},\"net_by_rate\":{\"type\":[\"object\",\"null\"],\"additionalProperties\":{\"type\":\"number\"}},\"vat_by_rate\":{\"type\":[\"object\",\"null\"],\"additionalProperties\":{\"type\":\"number\"}},\"total\":{\"type\":[\"number\",\"null\"]},\"currency\":{\"type\":[\"string\",\"null\"]},\"bank_account\":{\"type\":[\"string\",\"null\"]}},\"required\":[\"supplier_name\",\"supplier_id\",\"vat_id\",\"invoice_number\",\"payment_reference\",\"issue_date\",\"tax_point_date\",\"due_date\",\"net_by_rate\",\"vat_by_rate\",\"total\",\"currency\",\"bank_account\"],\"additionalProperties\":false}")


def run(document_text: str) -> dict:
    """Text of the document in, the extracted fields as a dict out."""
    response = httpx.post(
        "https://openrouter.ai/api/v1/chat/completions",
        headers={"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}"},
        json={
            "model": "anthropic/claude-sonnet-5",
            "temperature": 0,
            "messages": [{"role": "user", "content": f"{PROMPT}\n\n---\n{document_text}"}],
            # For a scan or photo, send [{"type": "text", "text": PROMPT},
            # {"type": "image_url", "image_url": {"url": "data:image/png;base64,..."}}] instead.
            "response_format": {
                "type": "json_schema",
                "json_schema": {"name": "invoices", "strict": False, "schema": SCHEMA},
            },
        },
        timeout=120,
    )
    response.raise_for_status()
    return json.loads(response.json()["choices"][0]["message"]["content"])

Détection des données personnelles · Français

Python · httpx · OpenRouter
import json
import os

import httpx

PROMPT = "Trouvez dans le texte ci-dessous toutes les données personnelles de personnes physiques (en vue de l'anonymisation) et renvoyez uniquement du JSON\navec ces clés, chacune sous forme de liste de chaînes (une liste vide s'il n'y en a pas) :\n\nperson_names       noms complets des personnes, chaque personne une seule fois, tels qu'écrits dans le texte\nemail_addresses    adresses e-mail des personnes\nphone_numbers      numéros de téléphone des personnes, tels qu'écrits dans le texte\npostal_addresses   adresses personnelles ou de livraison des personnes, telles qu'écrites dans le texte (rue, ville, code postal)\nbirth_dates        dates de naissance (YYYY-MM-DD)\nnational_ids       numéros d'identification nationaux (p. ex. numéro de sécurité sociale)\nbank_accounts      numéros de compte bancaire (IBAN) des personnes, tels qu'écrits dans le texte\n\nRègles :\n- Uniquement les données de personnes physiques. Les noms de sociétés, les numéros RCS, SIREN et SIRET, les numéros de TVA\n  et autres numéros de sociétés, les adresses génériques de sociétés comme info@ ou support@, les numéros de commande et de\n  ticket ne sont pas des données personnelles : omettez-les.\n- Les dates qui ne sont pas des dates de naissance (réunions, livraisons, embauche) ne sont pas des données personnelles.\n- N'inventez et ne complétez aucune valeur ; reprenez-les du texte.\n"
SCHEMA = json.loads("{\"type\":\"object\",\"properties\":{\"person_names\":{\"type\":[\"array\",\"null\"],\"items\":{\"type\":\"string\"}},\"email_addresses\":{\"type\":[\"array\",\"null\"],\"items\":{\"type\":\"string\"}},\"phone_numbers\":{\"type\":[\"array\",\"null\"],\"items\":{\"type\":\"string\"}},\"postal_addresses\":{\"type\":[\"array\",\"null\"],\"items\":{\"type\":\"string\"}},\"birth_dates\":{\"type\":[\"array\",\"null\"],\"items\":{\"type\":\"string\"}},\"national_ids\":{\"type\":[\"array\",\"null\"],\"items\":{\"type\":\"string\"}},\"bank_accounts\":{\"type\":[\"array\",\"null\"],\"items\":{\"type\":\"string\"}}},\"required\":[\"person_names\",\"email_addresses\",\"phone_numbers\",\"postal_addresses\",\"birth_dates\",\"national_ids\",\"bank_accounts\"],\"additionalProperties\":false}")


def run(document_text: str) -> dict:
    """Text of the document in, the extracted fields as a dict out."""
    response = httpx.post(
        "https://openrouter.ai/api/v1/chat/completions",
        headers={"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}"},
        json={
            "model": "anthropic/claude-sonnet-5",
            "temperature": 0,
            "messages": [{"role": "user", "content": f"{PROMPT}\n\n---\n{document_text}"}],
            # For a scan or photo, send [{"type": "text", "text": PROMPT},
            # {"type": "image_url", "image_url": {"url": "data:image/png;base64,..."}}] instead.
            "response_format": {
                "type": "json_schema",
                "json_schema": {"name": "pii", "strict": False, "schema": SCHEMA},
            },
        },
        timeout=120,
    )
    response.raise_for_status()
    return json.loads(response.json()["choices"][0]["message"]["content"])

Badge

Intégrez le résultat actuel sur votre site ; le badge se met à jour à chaque exécution.

<a href="https://modelverdict.ai/fr/models/claude-sonnet-5/"><img src="https://modelverdict.ai/badge/claude-sonnet-5/contracts-en.svg" alt="Claude Sonnet 5 on ModelVerdict"></a>
<a href="https://modelverdict.ai/fr/models/claude-sonnet-5/"><img src="https://modelverdict.ai/badge/claude-sonnet-5/contracts-cs.svg" alt="Claude Sonnet 5 on ModelVerdict"></a>
<a href="https://modelverdict.ai/fr/models/claude-sonnet-5/"><img src="https://modelverdict.ai/badge/claude-sonnet-5/contracts-de.svg" alt="Claude Sonnet 5 on ModelVerdict"></a>
<a href="https://modelverdict.ai/fr/models/claude-sonnet-5/"><img src="https://modelverdict.ai/badge/claude-sonnet-5/emails-en.svg" alt="Claude Sonnet 5 on ModelVerdict"></a>
<a href="https://modelverdict.ai/fr/models/claude-sonnet-5/"><img src="https://modelverdict.ai/badge/claude-sonnet-5/emails-cs.svg" alt="Claude Sonnet 5 on ModelVerdict"></a>
<a href="https://modelverdict.ai/fr/models/claude-sonnet-5/"><img src="https://modelverdict.ai/badge/claude-sonnet-5/emails-de.svg" alt="Claude Sonnet 5 on ModelVerdict"></a>
<a href="https://modelverdict.ai/fr/models/claude-sonnet-5/"><img src="https://modelverdict.ai/badge/claude-sonnet-5/invoices-fr.svg" alt="Claude Sonnet 5 on ModelVerdict"></a>
<a href="https://modelverdict.ai/fr/models/claude-sonnet-5/"><img src="https://modelverdict.ai/badge/claude-sonnet-5/invoices-en.svg" alt="Claude Sonnet 5 on ModelVerdict"></a>
<a href="https://modelverdict.ai/fr/models/claude-sonnet-5/"><img src="https://modelverdict.ai/badge/claude-sonnet-5/invoices-cs.svg" alt="Claude Sonnet 5 on ModelVerdict"></a>
<a href="https://modelverdict.ai/fr/models/claude-sonnet-5/"><img src="https://modelverdict.ai/badge/claude-sonnet-5/invoices-de.svg" alt="Claude Sonnet 5 on ModelVerdict"></a>
<a href="https://modelverdict.ai/fr/models/claude-sonnet-5/"><img src="https://modelverdict.ai/badge/claude-sonnet-5/invoices-es.svg" alt="Claude Sonnet 5 on ModelVerdict"></a>
<a href="https://modelverdict.ai/fr/models/claude-sonnet-5/"><img src="https://modelverdict.ai/badge/claude-sonnet-5/pii-en.svg" alt="Claude Sonnet 5 on ModelVerdict"></a>
<a href="https://modelverdict.ai/fr/models/claude-sonnet-5/"><img src="https://modelverdict.ai/badge/claude-sonnet-5/pii-cs.svg" alt="Claude Sonnet 5 on ModelVerdict"></a>
<a href="https://modelverdict.ai/fr/models/claude-sonnet-5/"><img src="https://modelverdict.ai/badge/claude-sonnet-5/pii-de.svg" alt="Claude Sonnet 5 on ModelVerdict"></a>

Comparer avec un autre modèle