Messung · 13. und 14. Oktober 2026 · 80 Durchgänge
Qwen3.8-Flash-Next als Coding-Agent auf dem Mac Studio M1 Ultra
sushi 1.2.1 · Mac Studio M1 Ultra · OpenCode 2.0.26
Autoren
Maschine und Server
Mac Studio M1 Ultra
- SoC
- Apple M1 Ultra, 20 CPU-Kerne, 64 GPU-Kerne
- Speicher
- 64 GiB Unified Memory, davon bis 56 GiB für die GPU
- System
- macOS 26.2, Netzbetrieb
- Server
- sushi 1.2.1, MTP an, KV-Cache 8 bit, Denkstufe xhigh
- Gewichte
beamster/Qwen3.8-Flash-Next-Sushi-2.6bpw, alle 512 Experten
Protokoll
40 Issues, zwei Durchgänge
- Agent
- OpenCode 2.0.26
- Aufgaben
- SWE-bench Verified, Stufe „<15 min fix“, zufällig gezogen aus Django, sympy, Sphinx und pytest
- Grenzen
- 262.144 Token Kontext, 60 bzw. 120 Minuten
- Netz
- gesperrt bis auf den eigenen Server
- Gewertet
- mit den Tests der Aufgabe wie bei SWE-bench
72von 80
Durchgänge gelöst 90,0 %, 95-%-Bereich 80,0 bis 97,5 %
10,4Minuten
Dauer eines Durchgangs Median, kürzester 2,1, längster 120 Minuten
539Token/s
Einlesen Median der Anfragen mit mindestens 2.048 neuen Token
44,2Token/s
Ausgabe Median aller Anfragen, Denken eingeschlossen
01 · Aufbau
Zufällig gezogene Issues, offline, gewertet mit den Tests von SWE-bench
Der Agent bekommt ein Repository auf dem Stand vor der Reparatur und das Issue im Wortlaut, dazu einen Satz: Löse das Issue, du darfst Befehle und die vorhandenen Tests ausführen, höre auf, wenn du fertig bist. Die Tests, mit denen gewertet wird, bekommt er nicht. Die Abhängigkeiten sind installiert; erreichbar ist nur der eigene Sprachmodell-Server.
Die Aufgaben stammen aus SWE-bench Verified, und zwar aus der leichtesten Stufe: Issues, für die ein erfahrener Entwickler laut Datensatz weniger als 15 Minuten braucht. Infrage kommen die 87 Aufgaben dieser Stufe aus Django, sympy, Sphinx und pytest, die unter Python 3.9 bis 3.11 laufen. Daraus sind 40 zufällig gezogen, geschichtet nach Repository, mit festem Startwert. Ausgewählt ist nichts nach Lösbarkeit. Eine Sphinx-Aufgabe ließ sich in der Umgebung der Wertung nicht prüfen und ist durch die nächste gezogene ersetzt.
Gewertet wird wie bei SWE-bench: Der Patch, den der Agent im Arbeitsbaum hinterlässt, kommt auf einen frischen Stand, dazu die Tests der Aufgabe. Gelöst ist eine Aufgabe, wenn die Tests zum Fehler bestehen (FAIL_TO_PASS) und kein vorher bestehender Test fällt (PASS_TO_PASS). Die Wertung läuft ohne Docker in einer Python-Umgebung nach der Harness von SWE-bench in Version 4.1.0. Jede der 40 Aufgaben bestand dort vorab mit der Referenzlösung.
Einstellungen: Kontext bis 262.144 Token, Ausgabe bis 32.768 Token je Anfrage, Temperatur 1,0, top_p 0,95, Denkstufe xhigh, automatische Kompaktierung an, Prompt-Cache auf der SSD (bis 20 GB, zu Beginn geleert). Erst laufen alle 40 Aufgaben einmal, dann alle ein zweites Mal, in derselben Reihenfolge, mit einem Serverstart für alle Durchgänge. Nebenher läuft nichts.
| Projekt | in Verified | Python 3.9–3.11 | davon „<15 min fix“ | gezogen | Kennungen |
|---|---|---|---|---|---|
| Django | 231 | 82 | 32 | 15 | G01–G15 |
| sympy | 75 | 75 | 25 | 11 | G16–G26 |
| Sphinx | 44 | 44 | 22 | 10 | M01–M10 |
| pytest | 19 | 19 | 8 | 4 | M11–M14 |
| zusammen | 369 | 220 | 87 | 40 |
02 · Ergebnis
72 von 80 Durchgängen gelöst
Der Agent löst 72 von 80 Durchgängen, also 90,0 %. Der 95-%-Bereich reicht von 80,0 bis 97,5 %; er ist über die Aufgaben gezogen, nicht über die Durchgänge, weil zwei Durchgänge derselben Aufgabe nicht unabhängig sind. Die Quote gilt für die 87 Aufgaben, aus denen gezogen wurde, nicht für SWE-bench Verified insgesamt.
35 Aufgaben löst der Agent in beiden Durchgängen, 2 in einem und 3 in keinem.
| Projekt | Aufgaben | Durchgänge gelöst | Aufgaben zweimal gelöst |
|---|---|---|---|
| Django | 15 | 27 / 30 | 13 |
| sympy | 11 | 21 / 22 | 10 |
| Sphinx | 10 | 16 / 20 | 8 |
| pytest | 4 | 8 / 8 | 4 |
03 · Fehlschläge
Drei Aufgaben, an denen der Agent scheitert, und zwei mit wechselndem Ausgang
G01 (django__django-15127): Der Agent beendet beide Durchgänge nach 4,6 und 8,6 Minuten mit einem Patch, unter dem alle bisherigen Tests bestehen, der Test zum Fehler aber nicht.
G03 (django__django-15277): Im ersten Durchgang gelöst nach 3,9 Minuten. Im zweiten endet der Agent nach 6,9 Minuten mit einem Patch, unter dem alle bisherigen Tests bestehen, die zwei Tests zum Fehler aber nicht.
G18 (sympy__sympy-15875): Im ersten Durchgang dasselbe Bild wie bei G01, nach 33,5 Minuten und 82 Schritten. Der zweite Durchgang erreicht nach 131 Schritten die Zeitgrenze von 120 Minuten; der Patch bis dahin besteht alle Tests.
M08 (sphinx-doc__sphinx-7462): Von den zwei Tests zum Fehler besteht im ersten Durchgang einer, im zweiten keiner.
M04 (sphinx-doc__sphinx-8595): Der Agent legt in beiden Durchgängen eine Testdatei an, tests/roots/test-ext-autodoc/target/empty_all.py, die auch der Testpatch der Aufgabe anlegt. Der Testpatch lässt sich deshalb nicht anwenden, und der Durchgang zählt als nicht gelöst.
04 · Zeit
Wie lange ein Durchgang dauert und wohin die Zeit geht
Die Hälfte der Durchgänge ist nach 10,4 Minuten fertig. Django und sympy brauchen im Median 8,8, Sphinx und pytest 12,8 Minuten. Einzelne dauern viel länger: Die drei längsten brauchten 120,0, 91,9 und 59,5 Minuten. Alle 80 Durchgänge liefen in einem Stück und ohne Eingriff durch, in 20,6 Stunden einschließlich der Wertung.
Jeder Schritt des Agenten ist eine Anfrage an den Server: Er liest den neuen Teil des Verlaufs ein, meist die Ausgabe des letzten Werkzeugs, und schreibt Denken und den nächsten Werkzeugaufruf. Die Durchgänge selbst dauerten zusammen 19,9 Stunden. Davon entfallen 159 Minuten aufs Einlesen, 697 auf die Ausgabe und 339 auf Werkzeuge, vor allem die Tests, die der Agent selbst laufen lässt, und OpenCode. Die Ausgabe bleibt mit wachsendem Kontext fast gleich schnell; das Einlesen ist bei 64k bis 128k um 8 % langsamer als unter 32k.
| Prompt | Einlesen | Ausgabe |
|---|---|---|
| 0k–32k | 548 n=307 | 44,7 n=2.002 |
| 32k–64k | 518 n=83 | 43,9 n=976 |
| 64k–128k | 504 n=29 | 42,8 n=413 |
| 128k–256k | 463 n=3 | 43,7 n=59 |
05 · Verlauf
Kontext, Werkzeuge und Netz
Im Median braucht ein Durchgang 36 Schritte. Am tiefsten ging eine Sitzung mit 146.869 Token, gut die Hälfte des Kontextfensters von 262.144. Von 3.591 Werkzeugaufrufen scheiterten 32.
Ein Durchgang endete an der Zeitgrenze: G18 im zweiten Durchgang, nach 120 Minuten und 131 Schritten. Der Patch, den der Agent bis dahin geschrieben hatte, besteht alle Tests und zählt deshalb als gelöst, wie bei SWE-bench.
Außer zum eigenen Server kam in keinem Durchgang eine Verbindung zustande. Die Sandbox des Betriebssystems sperrt jedes andere Ziel; eine Netzwache prüft das je Durchgang.
06 · Alle Zahlen
Alle 80 Durchgänge
Je Durchgang: Ergebnis der Wertung, Wandzeit, Schritte des Agenten, höchster Kontext der Sitzung und erzeugte Token einschließlich Denken. Aus dieser Tabelle sind alle Zahlen dieses Berichts gerechnet, das Tempo zusätzlich aus dem Protokoll des Servers.
| Aufgabe | Durchgang | Ergebnis | FAIL_TO_PASS | PASS_TO_PASS | Wandzeit (min) | Schritte | Kontext max. | Token erzeugt |
|---|---|---|---|---|---|---|---|---|
G01django__django-15127 | 1 | nicht gelöst | 0/1 | 1/1 | 4,6 | 24 | 20.997 | 9.043 |
| 2 | nicht gelöst | 0/1 | 1/1 | 8,6 | 24 | 43.718 | 15.877 | |
G02django__django-16333 | 1 | gelöst | 1/1 | 87/87 | 7,0 | 33 | 23.352 | 13.407 |
| 2 | gelöst | 1/1 | 87/87 | 6,9 | 25 | 33.829 | 13.276 | |
G03django__django-15277 | 1 | gelöst | 2/2 | 158/158 | 3,9 | 17 | 17.512 | 7.205 |
| 2 | nicht gelöst | 0/2 | 158/158 | 6,9 | 34 | 28.385 | 13.015 | |
G04django__django-15930 | 1 | gelöst | 1/1 | 88/88 | 12,3 | 44 | 44.443 | 25.104 |
| 2 | gelöst | 1/1 | 88/88 | 22,3 | 81 | 90.408 | 41.640 | |
G05django__django-16595 | 1 | gelöst | 1/1 | 37/37 | 8,8 | 32 | 36.749 | 16.865 |
| 2 | gelöst | 1/1 | 37/37 | 10,5 | 39 | 40.719 | 20.224 | |
G06django__django-17029 | 1 | gelöst | 1/1 | 43/43 | 12,1 | 38 | 39.389 | 23.632 |
| 2 | gelöst | 1/1 | 43/43 | 13,0 | 38 | 46.678 | 24.814 | |
G07django__django-16569 | 1 | gelöst | 2/2 | 111/111 | 5,4 | 30 | 24.452 | 10.164 |
| 2 | gelöst | 2/2 | 111/111 | 3,3 | 26 | 17.311 | 6.074 | |
G08django__django-15572 | 1 | gelöst | 1/1 | 10/10 | 19,8 | 60 | 64.490 | 39.072 |
| 2 | gelöst | 1/1 | 10/10 | 5,9 | 16 | 30.302 | 11.959 | |
G09django__django-15987 | 1 | gelöst | 1/1 | 52/52 | 8,9 | 38 | 35.444 | 18.284 |
| 2 | gelöst | 1/1 | 52/52 | 4,3 | 22 | 22.910 | 8.886 | |
G10django__django-16429 | 1 | gelöst | 4/4 | 21/21 | 10,0 | 38 | 105.429 | 13.045 |
| 2 | gelöst | 4/4 | 21/21 | 3,4 | 20 | 35.739 | 5.053 | |
G11django__django-16139 | 1 | gelöst | 1/1 | 86/86 | 14,3 | 60 | 57.526 | 25.730 |
| 2 | gelöst | 1/1 | 86/86 | 12,0 | 53 | 41.640 | 22.117 | |
G12django__django-15380 | 1 | gelöst | 1/1 | 133/133 | 8,5 | 28 | 45.975 | 16.689 |
| 2 | gelöst | 1/1 | 133/133 | 7,6 | 19 | 30.909 | 15.695 | |
G13django__django-15467 | 1 | gelöst | 1/1 | 62/62 | 7,6 | 40 | 31.392 | 12.239 |
| 2 | gelöst | 1/1 | 62/62 | 5,6 | 31 | 29.376 | 10.025 | |
G14django__django-15851 | 1 | gelöst | 1/1 | 8/8 | 2,8 | 16 | 17.062 | 5.007 |
| 2 | gelöst | 1/1 | 8/8 | 3,4 | 25 | 18.330 | 6.005 | |
G15django__django-15569 | 1 | gelöst | 2/2 | 242/242 | 6,5 | 34 | 45.317 | 11.600 |
| 2 | gelöst | 2/2 | 242/242 | 4,8 | 21 | 21.684 | 9.375 | |
G16sympy__sympy-16886 | 1 | gelöst | 1/1 | 42/42 | 2,6 | 14 | 13.140 | 5.094 |
| 2 | gelöst | 1/1 | 42/42 | 2,1 | 20 | 12.478 | 3.546 | |
G17sympy__sympy-24562 | 1 | gelöst | 1/1 | 105/105 | 5,7 | 20 | 20.230 | 9.001 |
| 2 | gelöst | 1/1 | 105/105 | 16,1 | 53 | 53.964 | 30.926 | |
G18sympy__sympy-15875 | 1 | nicht gelöst | 0/1 | 80/80 | 33,5 | 82 | 87.480 | 53.254 |
| 2 | gelöst, Zeitgrenze | 1/1 | 80/80 | 120,0 | 131 | 146.869 | 96.403 | |
G19sympy__sympy-24539 | 1 | gelöst | 1/1 | 62/62 | 9,3 | 36 | 32.425 | 13.769 |
| 2 | gelöst | 1/1 | 62/62 | 9,7 | 36 | 25.499 | 11.268 | |
G20sympy__sympy-16450 | 1 | gelöst | 1/1 | 38/38 | 14,5 | 39 | 37.639 | 15.923 |
| 2 | gelöst | 1/1 | 38/38 | 59,5 | 89 | 81.532 | 48.965 | |
G21sympy__sympy-12481 | 1 | gelöst | 1/1 | 7/7 | 18,5 | 67 | 80.834 | 37.978 |
| 2 | gelöst | 1/1 | 7/7 | 23,6 | 83 | 72.499 | 38.339 | |
G22sympy__sympy-23534 | 1 | gelöst | 1/1 | 11/11 | 10,4 | 29 | 27.197 | 9.124 |
| 2 | gelöst | 1/1 | 11/11 | 4,7 | 20 | 23.189 | 6.571 | |
G23sympy__sympy-21847 | 1 | gelöst | 1/1 | 9/9 | 10,3 | 35 | 49.433 | 19.856 |
| 2 | gelöst | 1/1 | 9/9 | 12,1 | 46 | 54.788 | 23.523 | |
G24sympy__sympy-13372 | 1 | gelöst | 1/1 | 44/44 | 14,2 | 31 | 33.449 | 16.082 |
| 2 | gelöst | 1/1 | 44/44 | 5,1 | 27 | 25.642 | 10.357 | |
G25sympy__sympy-12096 | 1 | gelöst | 1/1 | 43/43 | 91,9 | 97 | 58.753 | 33.282 |
| 2 | gelöst | 1/1 | 43/43 | 24,9 | 25 | 34.515 | 19.944 | |
G26sympy__sympy-14711 | 1 | gelöst | 1/1 | 2/2 | 5,2 | 26 | 22.488 | 7.364 |
| 2 | gelöst | 1/1 | 2/2 | 24,7 | 25 | 44.025 | 20.317 | |
M01sphinx-doc__sphinx-9698 | 1 | gelöst | 1/1 | 45/45 | 3,1 | 17 | 21.453 | 5.017 |
| 2 | gelöst | 1/1 | 45/45 | 5,5 | 34 | 39.779 | 9.464 | |
M02sphinx-doc__sphinx-8269 | 1 | gelöst | 1/1 | 5/5 | 10,9 | 46 | 46.049 | 22.512 |
| 2 | gelöst | 1/1 | 5/5 | 11,5 | 29 | 45.674 | 24.370 | |
M03sphinx-doc__sphinx-7910 | 1 | gelöst | 1/1 | 16/16 | 30,3 | 59 | 86.256 | 54.313 |
| 2 | gelöst | 1/1 | 16/16 | 30,7 | 78 | 86.568 | 58.212 | |
M04sphinx-doc__sphinx-8595 | 1 | nicht gelöst, Testpatch nicht anwendbar | – | – | 7,7 | 40 | 31.197 | 15.670 |
| 2 | nicht gelöst, Testpatch nicht anwendbar | – | – | 12,8 | 64 | 42.100 | 22.323 | |
M05sphinx-doc__sphinx-10435 | 1 | gelöst | 1/1 | 74/74 | 19,4 | 53 | 56.068 | 29.953 |
| 2 | gelöst | 1/1 | 74/74 | 20,7 | 42 | 61.324 | 39.979 | |
M06sphinx-doc__sphinx-8475 | 1 | gelöst | 1/1 | 17/17 | 5,1 | 27 | 26.286 | 9.827 |
| 2 | gelöst | 1/1 | 17/17 | 4,8 | 24 | 29.929 | 9.317 | |
M07sphinx-doc__sphinx-8459 | 1 | gelöst | 1/1 | 17/17 | 28,6 | 98 | 95.289 | 51.544 |
| 2 | gelöst | 1/1 | 17/17 | 17,2 | 56 | 65.468 | 27.652 | |
M08sphinx-doc__sphinx-7462 | 1 | nicht gelöst | 1/2 | 49/49 | 21,3 | 64 | 69.790 | 36.796 |
| 2 | nicht gelöst | 0/2 | 49/49 | 11,2 | 47 | 39.803 | 21.036 | |
M09sphinx-doc__sphinx-7440 | 1 | gelöst | 1/1 | 12/12 | 34,4 | 78 | 107.701 | 60.908 |
| 2 | gelöst | 1/1 | 12/12 | 37,0 | 81 | 109.312 | 63.300 | |
M10sphinx-doc__sphinx-9367 | 1 | gelöst | 1/1 | 25/25 | 7,2 | 29 | 23.953 | 8.903 |
| 2 | gelöst | 1/1 | 25/25 | 8,0 | 44 | 30.932 | 14.301 | |
M11pytest-dev__pytest-7205 | 1 | gelöst | 10/10 | 16/16 | 20,1 | 79 | 57.035 | 34.970 |
| 2 | gelöst | 10/10 | 16/16 | 7,4 | 32 | 27.902 | 14.560 | |
M12pytest-dev__pytest-7982 | 1 | gelöst | 1/1 | 78/78 | 11,7 | 30 | 34.706 | 18.123 |
| 2 | gelöst | 1/1 | 78/78 | 16,1 | 45 | 47.135 | 27.075 | |
M13pytest-dev__pytest-7432 | 1 | gelöst | 1/1 | 77/77 | 13,4 | 50 | 48.729 | 26.625 |
| 2 | gelöst | 1/1 | 77/77 | 12,9 | 42 | 39.018 | 21.463 | |
M14pytest-dev__pytest-6202 | 1 | gelöst | 1/1 | 72/72 | 3,6 | 20 | 17.637 | 6.645 |
| 2 | gelöst | 1/1 | 72/72 | 13,1 | 37 | 30.311 | 14.212 |
07 · Grenzen
Was diese Messung nicht zeigt
Nur leichte Aufgaben. Die Quote gilt für die 87 Aufgaben der Stufe „<15 min fix“ aus vier Projekten, nicht für SWE-bench Verified insgesamt und nicht für schwierigere Issues. Neben veröffentlichte Werte für Verified lässt sie sich nicht stellen.
Bekannte Aufgaben. Issues und Lösungen von SWE-bench Verified sind öffentlich. Ob Qwen3.8-Flash-Next sie aus dem Training kennt, lässt sich hier nicht prüfen.
Nachgebildete Wertung. Gewertet wurde ohne die Docker-Images von SWE-bench, in einer Umgebung nach den Vorgaben der Harness 4.1.0.
Nur bestandene Tests. Ob ein gelöster Patch die Ursache trifft oder nur den getesteten Fall, sagt die Wertung nicht. Eine Beurteilung der Patches enthält dieser Bericht nicht.
Zwei Durchgänge. Bei Temperatur 1,0 kann ein dritter Durchgang anders ausgehen. Der Bereich der Quote berücksichtigt die Streuung über die Aufgaben, nicht die innerhalb einer Aufgabe.
Grenzen des Agenten. Begrenzt sind Kontext (262.144 Token) und Zeit: 120 Minuten für Django und sympy, 60 für Sphinx und pytest. Die Zahl der Schritte begrenzt nichts: 79 Durchgänge liefen mit einer Grenze von 150 Schritten, die keiner erreichte und die OpenCode vorher nicht anwendet. Der eine Durchgang, der sie erreichte, lief ohne Grenze und mit einem eigenen Start des Servers neu; Kapitel 06 zeigt diesen Durchgang.