Die Tests

Einfach verständliche Erklärungen zu jedem Test auf der Hauptseite. Derselbe Text wird durch Klick auf das „i“ neben jedem Spaltenkopf angezeigt. Die Tests selbst befinden sich im open-source-Projekt CrucibleForge; diese Seite beschreibt in allgemeinen Begriffen, was die Tests messen. Falls ein Test öffentliche Beispielaufgaben enthält, können Sie diese über die jeweilige Karte öffnen.

Was die Tests messen

Gesamt

Die Gesamtpunktzahl ergibt sich aus der Code-Punktzahl plus der Chat-Punktzahl. Für eine perfekte Ausführung aller Standardtests beträgt jede dieser Punktzahlen 10 – somit ist 20 die maximale mögliche Punktzahl. Bonuspakete (siehe „Bonus-Sets“) fügen weitere Punkte hinzu; dadurch kann ein Modell mehr als 20 Punkte erreichen. In dieser Suite kann das Modell mit jedem Paket die Werte 13 bzw. 15 erreichen. Die Balken in einer Zeile zeigen den maximal möglichen Wert an; an der Stelle, an der die Standardtests enden, befindet sich ein Häkchen. Die „uncensored“-Tests haben ihre eigene Registerkarte und werden niemals in die Berechnung einbezogen. Der Wert ± neben der Gesamtpunktzahl gibt die halbe Breite eines 90%-Intervalls an, das durch Bootstrap-Verfahren auf Basis der Testfälle berechnet wird. Somit gelten zwei Modelle, deren Werte innerhalb dieses Intervalls liegen, statistisch gesehen als gleichwertig.

Chat

Der Chat dient dem Rollenspiel und dem Austausch mit Begleitfiguren – nicht jedoch allgemeinen Assistenzaufgaben. Er führt 8 mehrstufige Sitzungen durch: ein Rollenspiel mit viel Hintergrundgeschichte, Gespräche mit Begleitfiguren, eine Figur mit mehreren Stimmen sowie eine gemeinsam erstellte Geschichte. In jeder Sitzung wird überprüft, ob das Modell sich an zuvor eingeführte Fakten erinnert, Korrekturen akzeptiert, die Stimme und den Standpunkt der Figur beibehält sowie die vorgegebenen Schreibregeln einhält. Ein separates Bewertungsmodell, Gemma 4 31B (uncensored “heretic” build, Q8) on our own GPU rig, bewertet die Antworten anhand einer Checkliste; zusätzliche Punkte können durch Bonuspakete vergeben werden – insgesamt bis zu 15 Punkte in diesem Paket. Das Beantworten von Fragen oder das Ausführen einmaliger Anweisungen wird hier nicht bewertet. Für eine perfekte Bewältigung der Standardaufgaben gibt es 10 Punkte; weitere Punkte können durch Bonuspakete hinzugewonnen werden.

Vollständige Übersicht auf GitHub

Chat: Beispielfragen

Ein paar echte Beispiele aus dem Open-Source-Testset, gekürzt.

  1. Sorgt dafür, dass der Begleit-Chat über Wochen hinweg konsistent bleibt

    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.

    Wie wird bewertet: Ein Bewertungsmodell beantwortet 12 Ja/Nein-Fragen zu den Antworten, und daneben werden 13 Regeln in Klartext überprüft.

    Sehen Sie sich diesen Fall auf GitHub an.

  2. Spielt drei Charaktere – jeder mit seiner eigenen Stimme.

    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? …

    Wie wird bewertet: Ein Judge-Modell beantwortet 10 Ja/Nein-Fragen zu den Antworten, und daneben werden 11 Regeln im Klartext überprüft.

    Sehen Sie sich diesen Fall auf GitHub an.

  3. Schreibt eine Geschichte unter mehreren Einschränkungen

    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. …

    Wie wird bewertet: Ein Bewertungsmodell beantwortet 5 Ja/Nein-Fragen zu den Antworten, und daneben werden 25 Regeln in Klartext überprüft.

    Sehen Sie sich diesen Fall auf GitHub an.

Vollständige Übersicht auf GitHub

Code

Der Code-Teil umfasst das Schreiben funktionierender Python-Funktionen, das Vorhersagen darüber, was ein Programm ausgibt, das Finden und Beheben von Fehlern sowie Aufgaben im Zusammenhang mit Repositories und der Nutzung von Tools. Die Antworten werden anhand versteckter Tests überprüft – daher spiegelt die Punktzahl eher den funktionierenden Code wider als Code, der nur scheinbar korrekt ist. Für eine perfekte Beantwortung aller Standardfragen gibt es 10 Punkte; zusätzliche Bonuspunkte können bis zu 13 Punkte ergeben.

Vollständige Übersicht auf GitHub

Code: Beispielfragen

Ein paar echte Beispiele aus dem Open-Source-Testset, gekürzt.

  1. Zählt Arbeitstage mit einem benutzerdefinierten Wochenende

    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. …
        """

    Wie wird bewertet: Versteckte Unit-Tests (35 Prüfungen in 16 Gruppen)

    Sehen Sie sich diesen Fall auf GitHub an.

  2. Vorhersage, was die Python-Snippets ausgeben werden

    # 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)

    Wie wird bewertet: Exakte Übereinstimmung bei 8 vorhergesagten Ausgaben

    Sehen Sie sich diesen Fall auf GitHub an.

  3. Findet zwei Fehler hinter einem Fehlbericht

    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.

    Wie wird bewertet: Versteckte Unit-Tests (4 Gruppen: Konvertieren, Hinzufügen, Einkaufen, Bestehende)

    Sehen Sie sich diesen Fall auf GitHub an.

Vollständige Übersicht auf GitHub

Bonus-Sets

In jeder Kategorie gibt es 10 Punkte für eine perfekte Beantwortung aller Standardfragen. Ein Modell, das in einem Bereich mindestens 90 % erreicht, erhält Zugang zu einer schwierigeren Bonusaufgabe in diesem Bereich. Wenn das Modell auch diese Aufgabe erfolgreich bewältigt, kann es zur nächsten Bonusaufgabe übergehen. Jedes Paket bringt 1 Punkt – somit kann eine Kategorie insgesamt 10 Punkte erreichen. Das Maximum, das eine Kategorie erreichen kann, ist 10 plus ein Punkt pro Paket. Ein neues Paket erhöht diesen Wert weiter. In der Detailansicht einer Zeile werden alle Pakete aufgelistet – samt ihren Punkten oder ob sie noch gesperrt sind. Die Bonusaufgaben sind die einzige Möglichkeit, die 10-Punkte-Grenze zu überschreiten – dadurch wird verhindert, dass alle Modelle am oberen Ende der Rangliste mit einer perfekten Punktzahl landen.

Wie die Skala wächst

Programme

Das Programm gibt dem Modell 6 Aufgaben vor. Jede Aufgabe verlangt von dem Modell, eine Python-Funktion zu erstellen – basierend auf einer detaillierten, aber auch schwierigen Beschreibung (Datum, Rundungsregeln, Textformatierung, Zeitplanung). Die erstellte Funktion wird in einer Sandbox gegen versteckte Unit-Tests getestet. Die Bewertung ergibt sich aus dem Anteil der Testgruppen, die erfolgreich bestanden wurden. Somit erhält eine fast korrekte Antwort zumindest teilweise Punkte.

Vollständige Übersicht auf GitHub

Programme: Beispielfragen

Ein paar echte Beispiele aus dem Open-Source-Testset, gekürzt.

  1. Setzt den Text in Zeilen von fester Breite um.

    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. …
        """

    Wie wird bewertet: Versteckte Unit-Tests (28 Prüfungen in 15 Gruppen)

    Sehen Sie sich diesen Fall auf GitHub an.

  2. Rundet auf die gleiche Weise wie eine Tabellenkalkulation.

    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`). …
        """

    Wie wird bewertet: Versteckte Unit-Tests (44 Prüfungen in 15 Gruppen)

    Sehen Sie sich diesen Fall auf GitHub an.

  3. Aufgaben auf mehrere Maschinen verteilen, um das bestmögliche Gesamtergebnis zu erzielen.

    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). …
        """

    Wie wird bewertet: Versteckte Unit-Tests (72 Prüfungen in 14 Gruppen)

    Sehen Sie sich diesen Fall auf GitHub an.

Vollständige Übersicht auf GitHub

Code-Bank

Der Code-Bank zeigt kurze Beispiele für typischen Python- und JavaScript-Code – also jenen Hilfscode, den eine gewöhnliche App verwendet. Dabei wird gefragt, was genau jeder Codeabschnitt ausgibt. Es gibt 2 solcher Beispiele – eines pro Sprache. Jede vorhergesagte Ausgabe wird auf exakte Übereinstimmung überprüft. Belohnt wird das Wissen darüber, wie die jeweilige Sprache tatsächlich funktioniert (Standardeinstellungen, Sortierreihenfolge, Rundungsverhalten usw.) – nicht das Schreiben neuen Codes. Der Score gibt an, welcher Anteil der vorhergesagten Ausgaben korrekt ist.

Vollständige Übersicht auf GitHub

Code-Bank: Beispielfragen

Ein paar echte Beispiele aus dem Open-Source-Testset, gekürzt.

  1. Vorhersage dessen, was Python-Codeausschnitte ausgeben werden

    # 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)

    Wie wird bewertet: Exakte Übereinstimmung bei 8 vorhergesagten Ausgaben

    Sehen Sie sich diesen Fall auf GitHub an.

  2. Vorhersage dessen, was JavaScript-Snippets ausgeben werden

    // 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(","));

    Wie wird bewertet: Exakte Übereinstimmung bei 8 vorhergesagten Ausgaben

    Sehen Sie sich diesen Fall auf GitHub an.

Vollständige Übersicht auf GitHub

Agent

Der Agent gibt dem Modell einen Fehlerbericht zu einem kleinen Projekt mit mehreren Dateien sowie die Werkzeuge, die der Kodierungsassistent verwendet: Dateien auflisten, lesen und durchsuchen, sie bearbeiten sowie die Tests ausführen. Es handelt sich um eine einzelne Aufgabe (1 in dem Paket); daher kann eine einzige Ausführung diese Spalte erheblich verschieben. Das korrigierte Projekt wird bewertet, indem seine Tests ausgeführt werden.

Vollständige Übersicht auf GitHub

Agent: Beispielfragen

Ein paar echte Beispiele aus dem Open-Source-Testset, gekürzt.

  1. Findet zwei Fehler hinter einem Fehlbericht

    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.

    Wie wird bewertet: Versteckte Unit-Tests (4 Gruppen: Konvertieren, Hinzufügen, Einkaufen, Bestehende)

    Sehen Sie sich diesen Fall auf GitHub an.

Vollständige Übersicht auf GitHub

Werkzeuge

„Tools“ prüft, ob ein Modell Werkzeuge korrekt aufruft. Jeder Fall ist ein skriptgesteuerter Dialog mit einem Werkzeug – das Modell muss das richtige Werkzeug auswählen, gültige Argumente übergeben, das Ergebnis verwenden und dabei die in der Konfiguration eingebauten Fallstricke vermeiden. Ein fehlerhaft formulierter Aufruf gilt als Fehler.

Vollständige Übersicht auf GitHub

Werkzeuge: Beispielfragen

Ein paar echte Beispiele aus dem Open-Source-Testset, gekürzt.

  1. Prüft eine Abholzeit über einen Zeitumstellung hinweg

    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 …

    Wie wird bewertet: Skriptgesteuerter 6-Schritte-Ablauf: Jeder Tool-Aufruf, seine Argumente und die Antworten werden überprüft.

    Sehen Sie sich diesen Fall auf GitHub an.

  2. Leitet anhand der Antwort des Tools eine Buchungsfrist ab.

    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.

    Wie wird bewertet: Vorgeschriebener 11-Schritte-Ablauf: Jeder Tool-Aufruf, seine Argumente und die Antworten werden überprüft; eine Antwort mit verbotenem Inhalt führt zum Fehler.

    Sehen Sie sich diesen Fall auf GitHub an.

  3. Wählen Sie den richtigen Tag und die passende Altersgruppe vor der Buchung aus.

    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 …

    Wie wird bewertet: Skriptgesteuerter 8-Schritte-Ablauf: Jeder Tool-Aufruf, seine Argumente und die Antworten werden überprüft.

    Sehen Sie sich diesen Fall auf GitHub an.

Vollständige Übersicht auf GitHub

Tok/S

„Tok/s“ ist die mittlere Geschwindigkeit, mit der das Modell während der Ausführung Text generiert hat. Die lokalen Modelle wurden auf unserer eigenen Hardware ausgeführt; daher sind diese Geschwindigkeiten untereinander vergleichbar. Bei den gehosteten Modellen hängt die Geschwindigkeit vom Anbieter sowie von dessen Auslastung ab. Deswegen sollte man diese Werte eher als grobe Richtwerte betrachten.

Laufkosten

Die Laufkosten berechnen sich aus den Kosten für jede Anfrage – basierend auf den vom Anbieter angegebenen Preisen: dazu gehören die gesendeten sowie die zurückgesendeten Tokens, einschließlich der Zeit, die für die Verarbeitung benötigt wird. Diese Berechnung gilt für die Standard-Tests „Code“ und „Chat“. Ausgeschlossen sind dabei Bonuspakete, Wiederholungen der Anfragen, der „Judge“-Prozess (der auf unserer eigenen Hardware läuft) sowie eventuelle Rabatte bei Nutzung außerhalb der Hauptverkehrszeiten. Somit entspricht dieser Betrag in etwa dem Preis, den man zu zahlen hätte, wenn man die regulären Preise zahlt. Ein „~“ bedeutet, dass der Anbieter nicht pro Token abrechnet – es handelt sich dabei um ein Festpreismodell. In diesem Fall haben wir die Anzahl der Tokens zu den regulären Preisen berechnet. Ein „*“ bedeutet, dass bei einigen Anfragen keine Nutzungsdaten zurückgegeben wurden; daher kann der Wert untertrieben sein. Der Inhaltsfilter des Anbieters kann dazu führen, dass Antworten blockiert werden. In der entsprechenden Zeile wird angegeben, wie viele Antworten blockiert wurden – jede blockierte Antwort erhält dabei die Bewertung „0“.

Klasse

Die Klassifizierung ist eine einfache Möglichkeit, Modelle nach ihrem Gesamtergebnis zu gruppieren: S, A, B und C – wobei S die beste Bewertung darstellt. Die Grenzwerte für jede Klasse sind in den Anmerkungen unter dem Board aufgeführt. Ein Modell, das keine vollständige Chat-Bewertung aufweist, hat weder ein Gesamtergebnis noch eine Klassifizierung.

Schlank

Lean vergleicht die Chat- und Code-Werte eines Modells mit dem Medianwert des Boards für beide Kategorien. Ist das Modell in einer der Kategorien deutlich besser als in der anderen, wird es als chat-leaning oder code-leaning eingestuft; ansonsten gilt es als ausgewogen. Die erforderliche Größe der Differenz ist in den Anmerkungen unter dem Board angegeben.

Suite

Die „Suite“ ist die Version des Testsets, mit der die Ergebnisse erzeugt wurden. Wenn sich die Tests ändern, werden die Modelle erneut ausgeführt – die alte Version bleibt unter „Vorherige Suite-Versionen“ gespeichert. Vergleichen Sie die Ergebnisse nur innerhalb einer einzigen Suite.

Testdatum

Das Testdatum ist der Tag, an dem die Ergebnisse des Modells für dieses Board erstellt wurden. Ein erneuter Lauf des Modells zeigt ein neueres Datum an.

Basiert auf

„Fine-Tune“ behält hier den Namen der Basisversion bei – und wird niemals durch „Nur neueste Versionen“ ausgeblendet. Dieses Feld ist standardmäßig aktiviert; es versteckt ältere Versionen eines Herstellers, wenn eine neuere Version derselben Reihe verfügbar ist und einen Rang hat. Wenn man in das Filterfeld einen Basisnamen eingibt – beispielsweise „Gemma 4“ –, werden alle darauf basierenden Produkte aufgelistet.

Quant

„Quant“ ist das Kompressionsformat für die Gewichte eines lokalen Modells. „Q8_0“ kommt dem Modell mit voller Präzision am nächchsten und ist der Standardwert auf diesem Board. Eine geringere Quantisierung ermöglicht eine schnellere Ausführung sowie die Nutzung kleinerer GPUs – doch die Leistung kann dadurch etwas abnehmen. Wir verwenden „Q6“ oder „Q5“ nur dann, wenn „Q8_0“ nicht auf unserem System funktioniert; unter „Q5“ gehen wir niemals hinunter. Ältere Einträge, deren Bewertung unter „Q5“ lag, bleiben im System mit dem Vermerk „unter Q5“ erhalten. Sie werden nur dann erneut getestet – und zwar mit dem Standard-Quantisierungswert –, falls sie bessere Ergebnisse erzielen. Falls dieselben Gewichte mit zwei verschiedenen Quantisierungswerten getestet wurden, wird eine Variante als „besser“ eingestuft; die andere Variante wird als „weitere Variante“ aufgeführt. „API“ bezeichnet ein gehostetes Modell – also ein Modell, das vom Anbieter in beliebiger Form bereitgestellt wird.

Hauptwerkbank öffnen Jeder Punktestand hier ist eine Spalte auf dem Brett.