Les tests

Des notes en langue simple sur chaque test présent sur Main Bench. Le même texte s’ouvre en cliquant sur le i situé à côté de chaque en-tête de colonne. Les tests eux-mêmes se trouvent dans le projet open source CrucibleForge ; cette page décrit de manière générale ce qu’ils mesurent. Lorsqu’un test propose des exemples de questions publiques, vous pouvez les consulter depuis sa fiche correspondante.

Ce que les tests mesurent

Total

Le total correspond à la somme du score Code et du score Chat. Chacun de ces scores vaut 10 en cas de réussite parfaite aux tests standards ; ainsi, 20 est le maximum théorique. Les packs de bonus (voir « Packs de bonus ») ajoutent des points en plus, ce qui permet à un modèle de dépasser 20 ; dans cette suite de tests, Code peut atteindre 13 et Chat 15 avec chaque pack. Les barres dans chaque ligne s’étendent jusqu’à ce maximum possible, avec une coche indiquant la limite fixée par les tests standards. Les tests non censurés disposent de leur propre onglet et ne sont jamais pris en compte dans le calcul du total. Le chiffre ± indiqué à côté du total représente la moitié d’un intervalle de confiance à 90 % obtenu via une méthode bootstrap appliquée aux cas de test ; par conséquent, deux modèles dont les scores se situent à l’intérieur de cette marge sont statistiquement considérés comme équivalents.

Chat

Le chat évalue les scénarios de jeu de rôle et les conversations avec un compagnon, mais pas les tâches d’assistant général. Il exécute 8 sessions multi-tours : un jeu de rôle riche en lore, des discussions avec un compagnon, un personnage ayant plusieurs voix, ainsi qu’une histoire écrite collectivement. Chaque session vérifie si le modèle se souvient des faits introduits précédemment, s’il accepte les corrections, s’il conserve la voix et le point de vue du personnage, et s’il respecte l’ensemble des règles d’écriture. Un modèle évaluateur distinct, Gemma 4 31B (uncensored “heretic” build, Q8) on our own GPU rig, note les réponses en se basant sur une liste de critères pour chaque cas ; d’autres règles en texte brut complètent le processus d’évaluation. Répondre à des questions ou exécuter des instructions ponctuelles ne fait pas l’objet d’une évaluation ici. Le score maximal pour une série parfaite de questions standard est de 10 ; des packs bonus permettent d’obtenir davantage de points, jusqu’à un total de 15 dans cette suite d’évaluations.

Détails complets sur GitHub

Chat : exemples de questions

Quelques cas réels tirés de l’ensemble de tests en open source, abrégés.

  1. Maintient un chat compagnon cohérent pendant des semaines

    User (Fri 6 Nov) Evening, Hettie. Day off. I did nothing at all until two o'clock and I regret nothing. Biscuit and I sat at the window watching the park like two old men on a bench. The flat's mostly sorted now. One odd thing though. Biscuit goes out fine in the morning, but when we get back in he just flops down by the front door, and in the evening he won't go out for his walk at all. He's gone a bit off his food as well.

    Mode de notation : Un modèle juge répond à 12 questions de type oui/non concernant les réponses, et 13 règles en texte brut sont vérifiées à côté.

    Voir ce cas sur GitHub

  2. Interprète trois personnages, chacun avec sa propre voix

    User The door of the Lamp and Ladle bangs open on wind and rain. Daro Kessen, thirty, a river-guild assessor with a satchel of papers under his oilskin, shakes the water off his hat and looks at the three people at the table by the stove. "Evening. Daro Kessen, river guild. I'm here about your toll-ledger. I gather it went missing three nights ago? …

    Mode de notation : Un modèle juge répond à 10 questions de type oui/non concernant les réponses, et 11 règles en texte brut sont vérifiées à côté.

    Voir ce cas sur GitHub

  3. Co-écrit une histoire sous des contraintes multiples

    User Hi! Let's write a short story together, one section per message. Ground rules for the whole piece: first person, past tense; the narrator is Wren Adair, 34, a piano tuner. …

    Several turns later

    User One more author's change, from here to the end: the Hales live on a houseboat moored on the canal, not in a flat. Don't use the word "flat" again, in any sense, and call it the boat. Earlier sections stay as they are. …

    Mode de notation : Un modèle juge répond à 5 questions de type oui/non concernant les réponses, et 25 règles en texte brut sont vérifiées en parallèle.

    Voir ce cas sur GitHub

Détails complets sur GitHub

Code

Le code porte sur l’écriture de fonctions Python fonctionnelles, la prédiction du résultat affiché par un programme, la détection et la correction de bugs, les tâches liées aux dépôts de code ainsi que l’utilisation d’outils. Les réponses sont testées via des tests cachés ; le score reflète donc uniquement le code qui fonctionne, et non celui qui semble correct en apparence. Le score maximal est de 10 pour une résolution parfaite des questions standards ; des packs bonus permettent d’obtenir davantage de points, jusqu’à un total de 13 dans cette série.

Détails complets sur GitHub

Code : exemples de questions

Quelques cas réels tirés de l’ensemble de tests en open source, abrégés.

  1. Compte les jours ouvrables avec un week-end personnalisé

    def workday_intl(start, days, weekend=1, holidays=()):
        """
        Implement `def workday_intl(start, days, weekend=1,
        holidays=()):` in the spirit
        of a spreadsheet WORKDAY.INTL function, with exactly these
        rules:
    
        - Dates are strings of the exact shape `YYYY-MM-DD` (ASCII
        digits, a real
          calendar date). `start` and every holiday must be valid, else
        ValueError.
          The result is a date string of the same shape.
        - `days` is an `int` (not `bool`), else ValueError. …
        """

    Mode de notation : Tests d’unité cachés (35 vérifications réparties en 16 groupes)

    Voir ce cas sur GitHub

  2. Prédit exactement ce que les extraits de code Python affichent

    # Q1: shared basket (Python 3.13) - what does it print?
    class Basket:
        items = []
        count = 0
    
        def add(self, thing):
            self.items.append(thing)
            self.count += 1
    
    a, b = Basket(), Basket()
    a.add("milk")
    b.add("eggs")
    b.add("tea")
    Basket.count = 10
    print(a.items, a.count, b.count, Basket.count, Basket().count)

    Mode de notation : Correspondance exacte sur les 8 sorties prédites

    Voir ce cas sur GitHub

  3. Trouve deux bogues dans un seul rapport de bug

    Bug report: "I have 750 g of flour, the bread recipe needs 1.25 kg, and the shopping list tells me to buy the whole 1.25 kg. Also, after I bought another 500 g and added it, the pantry shows 500 g of flour instead of 1250 g." tests/test_shopping.py::test_partial_stock fails too.

    Find the causes and fix them so the package does what README.md says.

    Mode de notation : Tests d’unité cachés (4 groupes : convertir, ajouter, achats, existants)

    Voir ce cas sur GitHub

Détails complets sur GitHub

Ensembles de bonus

Chaque catégorie vaut 10 points pour une exécution parfaite des questions standardes. Un modèle qui obtient au moins 90 % à une catégorie peut accéder à un ensemble de questions bonus plus difficiles pour cette même catégorie ; s’il les réussit, il peut débloquer l’ensemble suivant. Chaque paquet rapporte 1 point supplémentaire, si bien qu’une catégorie peut dépasser 10 points. Le maximum possible est de 10 points plus un point par paquet disponible ; chaque nouveau paquet augmente ce total. Les détails d’une ligne indiquent chaque paquet : ses points attribués, ou s’il est verrouillé. Les ensembles de questions bonus sont le seul moyen de dépasser 10 points, ce qui empêche tous les modèles d’atteindre la note maximale en même temps.

Comment l’échelle se développe

Programmes

Le programme soumet au modèle 6 tâches, chacune demandant de créer une fonction Python à partir d’une description précise mais truffée de pièges (dates, arrondis, mise en forme du texte, planification). La réponse est exécutée dans un environnement isolé face à des tests unitaires cachés ; le score correspond à la proportion de groupes de tests qui sont réussis. Ainsi, une réponse presque correcte obtient un crédit partiel.

Détails complets sur GitHub

Programmes : exemples de questions

Quelques cas réels tirés de l’ensemble de tests en open source, abrégés.

  1. Dispose le texte en lignes de largeur fixe

    def wrap(text, width):
        """
        Implement `def wrap(text, width):` that lays `text` out into
        lines of at most
        `width` characters and returns them as a list of strings.
    
        Rules:
    
        1. `width` must be an `int` >= 2, otherwise raise ValueError.
        2. Whitespace means exactly these four characters: space, tab,
        `\r`, `\n`.
           Every other character (including non-breaking space U+00A0)
        is part of a
           word. Words are maximal runs of non-whitespace characters.
        3. …
        """

    Mode de notation : Tests d’unité cachés (28 vérifications réparties en 15 groupes)

    Voir ce cas sur GitHub

  2. Arrondit de la même manière qu’un tableur

    def sheet_round(func, number, *args):
        """
        Implement `def sheet_round(func, number, *args):` — six
        spreadsheet rounding
        functions with exact decimal arithmetic.
    
        Numbers (`number`, a multiple, a significance) are given as an
        `int` or as a
        `str` decimal: optional `-`, one or more digits, optionally `.`
        and one or more
        digits (`"-0.125"`, `"12"`, `"007.50"`). Floats, bools and other
        shapes raise
        ValueError. `digits` and `mode` are `int`s (not `bool`). …
        """

    Mode de notation : Tests d’unité cachés (44 vérifications réparties en 15 groupes)

    Voir ce cas sur GitHub

  3. Planifie les tâches entre les machines pour un résultat global optimal

    def best_plan(tasks, k, gap=0, machine_cost=0):
        """
        Implement `def best_plan(tasks, k, gap=0, machine_cost=0):` that
        returns an `int`.
    
        - `tasks` is a list of `(start, end, value)` tuples of ints with
        `start < end` and
          `value >= 1`. There are `k` identical machines (`k >= 1`).
        - A machine runs one task at a time. On the same machine, a task
        `y` may run after
          a task `x` only if `y.start >= x.end + gap` (`gap` is an int
        >= 0). …
        """

    Mode de notation : Tests d’unité cachés (72 vérifications réparties en 14 groupes)

    Voir ce cas sur GitHub

Détails complets sur GitHub

Banque de codes

La banque de codes présente au modèle de courts extraits de code Python et JavaScript du quotidien, le genre de code auxiliaire que l’on trouve dans une application grand public, et demande précisément ce que chacun affiche en sortie. Il y a 2 ensembles, un par langage, et chaque sortie prédite est vérifiée par correspondance exacte. L’exercice récompense la connaissance du comportement réel du langage (valeurs par défaut communes, ordre de tri, arrondi, notion de valeur « vraie »), plutôt que la capacité à écrire du nouveau code. Le score correspond à la proportion de sorties prédites qui sont exactes.

Détails complets sur GitHub

Banque de codes : exemples de questions

Quelques cas réels tirés de l’ensemble de tests en open source, abrégés.

  1. Prédit ce que les extraits de code Python affichent

    # Q1: shared basket (Python 3.13) - what does it print?
    class Basket:
        items = []
        count = 0
    
        def add(self, thing):
            self.items.append(thing)
            self.count += 1
    
    a, b = Basket(), Basket()
    a.add("milk")
    b.add("eggs")
    b.add("tea")
    Basket.count = 10
    print(a.items, a.count, b.count, Basket.count, Basket().count)

    Mode de notation : Correspondance exacte sur les 8 sorties prédites

    Voir ce cas sur GitHub

  2. Prédit ce que les extraits de code JavaScript affichent

    // Q1: sorting quantities (Node 24 (ES module)) - what does it print?
    const qty = ["10", "9", "1", "25"];
    console.log([...qty].sort().join(","), qty.map(parseInt).join(","), qty.map(Number).sort().join(","));
    console.log([3, 20, 100].sort().join(","), [3, 20, 100].sort((a, b) => b - a).join(","));

    Mode de notation : Correspondance exacte sur les 8 sorties prédites

    Voir ce cas sur GitHub

Détails complets sur GitHub

Agent

L’agent fournit au modèle un rapport de bug concernant un petit projet réparti sur plusieurs fichiers, ainsi que les outils utilisés par l’assistant de codage : lister, lire et rechercher des fichiers, les modifier et exécuter les tests. Il s’agit d’une tâche unique (1 dans la suite), donc une seule exécution peut faire évoluer cette colonne de manière significative. Le projet corrigé est évalué en exécutant ses tests.

Détails complets sur GitHub

Agent : exemples de questions

Quelques cas réels tirés de l’ensemble de tests en open source, abrégés.

  1. Trouve deux bogues dans un seul rapport de bug

    Bug report: "I have 750 g of flour, the bread recipe needs 1.25 kg, and the shopping list tells me to buy the whole 1.25 kg. Also, after I bought another 500 g and added it, the pantry shows 500 g of flour instead of 1250 g." tests/test_shopping.py::test_partial_stock fails too.

    Find the causes and fix them so the package does what README.md says.

    Mode de notation : Tests d’unité cachés (4 groupes : convertir, ajouter, shopping, existants)

    Voir ce cas sur GitHub

Détails complets sur GitHub

Outils

L’outil teste si un modèle appelle correctement les outils. Chaque cas correspond à une conversation scriptée avec un aller-retour vers un outil : le modèle doit choisir le bon outil, fournir des arguments valides, utiliser le résultat et éviter les pièges intégrés dans la configuration. Un appel mal formé est considéré comme un échec.

Détails complets sur GitHub

Outils : exemples de questions

Quelques cas réels tirés de l’ensemble de tests en open source, abrégés.

  1. Vérifie un horaire de prise en charge lors d’un changement d’heure

    User Book a pickup for my mother, Maria Sousa, at Lisbon airport on Sunday 25 October. …

    User Her mobile is +351 912 345 678.

    User Her husband Joao Sousa is on TP1351 with her but his phone is broken - book him a pickup too, same place and time …

    Several steps later

    User Finally: Maria might switch to the earlier TP1349 instead, so book her a second pickup for that flight too, just in …

    Mode de notation : Échange scripté en 6 étapes : chaque appel d’outil, ses arguments et les réponses sont vérifiés

    Voir ce cas sur GitHub

  2. Détermine une date limite de réservation à partir de la réponse de l’outil.

    User Book a room at Harbour Inn Bergen (hotel BGO-2) for two nights from Friday 13 November for me, Ola …

    User Jonas really does sleep in the cot, so switch us to R-412 - it's cheaper, and the hotel's own note on …

    User OK, we stay in R-509. Until when can we still cancel this Bergen booking for free?

    Several steps later

    User Then just move that Oslo booking to the weekend of 4 December instead.

    Mode de notation : Échange scripté en 11 étapes : chaque appel d’outil, ses arguments et les réponses sont vérifiés ; une réponse contenant du contenu interdit échoue.

    Voir ce cas sur GitHub

  3. Choisit le bon jour et le bon groupe d’âge avant de réserver

    User Please sign my son Leo Brandt (born 7 November 2021) up for this term's Saturday class at Northpool - the earliest …

    User Lovely. What time does his class start, and is anyone else still able to get a spot in it?

    User Hm, he's still only four, so the Minnows would suit him better - move him to the 09:45 Minnows. …

    Several steps later

    User His sister Mia Brandt, born 3 March 2019, wants a Saturday class at Northpool too - the earliest one she can join …

    Mode de notation : Échange scripté en 8 étapes : chaque appel d’outil, ses arguments et les réponses sont vérifiés

    Voir ce cas sur GitHub

Détails complets sur GitHub

tok/s

Le tok/s représente la vitesse médiane à laquelle le modèle a généré du texte pendant l’exécution. Les modèles locaux ont été exécutés sur notre propre matériel ; ces vitesses peuvent donc être comparées entre elles. Pour les modèles hébergés, la vitesse dépend du fournisseur et de sa charge de travail ; il convient donc de considérer cette vitesse comme une indication approximative.

Coût d’exécution

Le coût d’exécution calcule le montant que représente chaque demande lors d’une exécution complète, selon le tarif publié par le fournisseur : les tokens envoyés et ceux renvoyés, y compris les données de réflexion. Ce calcul couvre les tests standard « Code » et « Chat ». Il ne prend pas en compte les ensembles de tests bonus, les nouvelles tentatives, le juge (qui fonctionne sur notre propre matériel) ainsi que tout rabais lié au cache ou aux heures creuses ; il reflète donc approximativement ce que vous paieriez au prix catalogue. Un symbole ~ indique que le fournisseur ne facture pas au nombre de tokens (abonnement forfaitaire) ; nous avons donc calculé le coût en appliquant le tarif catalogue aux quantités de tokens. Un astérisque * signifie que certaines demandes n’ont pas retourné de données d’utilisation, donc le chiffre indiqué pourrait être sous-estimé. Le filtre de contenu du fournisseur peut bloquer une réponse ; la ligne correspondante indique alors combien de réponses ont été bloquées, chaque réponse bloquée obtenant une note nulle.

Classe

La classe est un moyen rapide de regrouper les modèles selon leur score total : S, A, B et C, S étant le plus élevé. Les seuils pour chaque catégorie sont indiqués dans les notes sous le tableau. Un modèle sans score de Chat complet n’a ni score total ni classe.

Maigre

Lean compare les scores de Chat et de Code du modèle avec la médiane du tableau pour chacun d’eux. S’il se montre nettement meilleur dans l’un des deux domaines, il est qualifié de « orienté chat » ou « orienté code » ; sinon, il est considéré comme équilibré. L’ampleur de l’écart requise est indiquée dans les notes sous le tableau.

Suite

La suite est la version de l’ensemble de tests avec laquelle un score a été généré. Lorsque les tests changent, les modèles sont à nouveau exécutés et l’ancienne version est conservée dans « Versions précédentes de la suite ». Comparez les scores uniquement au sein d’une même suite.

Date de test

La date de test est le jour où les résultats du modèle sur cette plateforme ont été générés. Un nouveau lancement du modèle affiche une date plus récente.

Fonctionne sur

Une version fine-tunée conserve ici le nom de sa base et n’est jamais masquée par « Seules les dernières versions ». Cette case est cochée par défaut ; elle masque les anciennes versions d’un éditeur lorsqu’une version plus récente de la même série est présente dans la liste et possède un classement. En saisissant un nom de base dans le filtre, comme « gemma 4 », on obtient la liste de tout ce qui a été construit à partir de celle-ci.

Quant

Le quant est le format de compression des poids d’un modèle local. Le Q8_0 est proche du modèle en précision complète et constitue le standard de quantification sur cette carte ; une quantification plus faible permet un fonctionnement plus rapide et convient mieux aux GPU de petite taille, mais peut entraîner des performances inférieures. Nous n’utilisons le Q6 ou le Q5 que lorsque le Q8_0 ne convient pas à notre configuration, et nous ne descendons jamais en dessous du Q5. Les anciennes lignes ayant obtenu un score inférieur au Q5 restent sur la liste avec une mention « en dessous du Q5 » ; elles ne sont retestées avec la quantification standard que si elles se classent en tête. Lorsque les mêmes poids ont été testés avec deux quantifications différentes, une seule ligne est classée et l’autre apparaît en dessous en tant que variante. Le terme API désigne un modèle hébergé, que le fournisseur met à disposition sous la forme qu’il souhaite.

Ouvrir le banc principal Chaque score ici correspond à une colonne sur le tableau.