team-solve: Multi-agent Harness voor Programmeerproblemen

Deze methode is gebaseerd op GVS5H (Lee, 2026: vijf Qwen3.8-27B modellen matchen Fable 5 op LiveCodeBench Hard). De implementatie is herbouwd met de exacte prompts van de auteurs op Qwen3.8-27B.

Prestaties

Bij het testen op de eerste tien LiveCodeBench Hard-problemen over vijf passes, behaalde de loop een gemiddelde score van 9,8 van de 10. Ter vergelijking: het oorspronkelijke harness van de auteurs scoorde 9,6 en Fable 5 alleen scoorde 8,0.

De bestanden zijn door de coder zelf geschreven op basis van een beschrijving van de methode (25-10-2026) en zijn niet handmatig geschreven.

Vergelijkingstabel (Vijf passes op tien problemen)

PassMemdoor workflowHarness van auteurs (27B)Fable 5 alleen
110 / 1097
210 / 10108
310 / 101010
410 / 1098
59 / 10107
Gemiddelde9,89,68,0

De kolommen van de auteurs zijn gebaseerd op de regraded resultaten uit hun repository (q38multiagentpN, fable5singlepN).

Technische Details en Kosten

Alle 50 runs (tien problemen, vijf passes) zijn opgeslagen in bench/results/parity-5pass/. Dit omvat elk request en reply, het programma, de volledige output van de grader, de kosten per call en de gebruikte host.

  • Resultaten: 49 van de 50 problemen zijn opgelost.
  • Kosten: De 50 runs kostten $35,79 (15,3M output tokens). Inclusief 16 pogingen die werden afgebroken door een timeout of stopgezet voor een fix, bedroegen de kosten $38,77.
  • Tijd: Een run nam gemiddeld 40 minuten aan model-tijd in beslag (de langste duurde 4 uur).
  • Omgeving: Alles is uitgevoerd via OpenRouter, niet op een lokale machine.
  • Opmerking over contaminatie: De wedstrijden dateren van 29 maart tot 6 april 2025; het is mogelijk dat het model deze in de trainingsset heeft gezien.

Modelconfiguratie

De configuratie is identiek aan die van de auteurs:

  • Temperatuur: Plan (0,3), Ideation (0,4), Manager en Worker (0,2).
  • Parameters: topp 0,95 en topk 20 (gebaseerd op de vLLM-configuratie van het model).
  • Cap: 128K reply cap.
  • Rondes: Maximaal 10 rondes.
  • Specifieke regels: Een afgebroken worker wordt samengevat; een reply zonder tekst wordt beantwoord door de reasoning van het model.

Host-informatie

In tegenstelling tot de auteurs (die eigen vLLM in FP8 gebruikten), maakte dit project gebruik van OpenRouter. De calls werden in de volgende volgorde aangevraagd: Modal, CoreWeave, Parasail, Wafer. Wanneer Modal vertraagde tot 14 tokens/s, werd overgeschakeld naar FP8-hosts (Wafer, Parasail, CoreWeave). In totaal werden 203 calls bediend door Modal, 27 door CoreWeave en 115 door Wafer.

Analyse van het Proces

Benodigde Aanpassingen

Er was een mismatch in de probleemtekst. De eerste versie schreef zijn eigen taakbestand, maar de 27B-model plande slechter vanuit dit bestand dan vanuit de exacte LiveCodeBench-tekst. Vier wijzigingen in Memdoor maakten het mogelijk om exact dezelfde vragen te stellen als het harness van de auteurs:

  1. Een taak antwoordt met de reasoning van het model wanneer er geen tekst is geschreven.
  2. Toevoeging van topp/topk op een modellijn.
  3. mark_cutoff voor replies die door de cap zijn afgekapt.
  4. De mogelijkheid voor een call om op een eigen klok van vier uur te draaien.

Waar het Systeem Faalde

Er werden twee gaten in de loop van de auteurs geïdentificeerd:

  1. Pass 5, abc399_e: Het programma in ronde 1 was correct, maar de manager bedacht een tegenvoorbeeld met een foutief verwacht antwoord. Het team herschreef het programma, dat vervolgens de samples passeerde, maar niet het specifieke edge-case scenario.
  2. Pass 4, arc196c en arc196d: Een programma dat alle hidden tests passeerde, werd overschreven door een latere ronde omdat de manager niet aangaf dat het voltooid was. Beide kregen uiteindelijk voor het einde van de loop weer een correct programma terug, maar tegen hogere kosten ($3,44 en $4,24).

Beide problemen zijn oplosbaar zonder de methode te wijzigen (bijv. door tegenvoorbeelden van de manager te controleren met brute force op kleine inputs, of door het laatste programma te behouden dat de samples passeerde).

Installatie en Gebruik

Setup

curl -fsSL https://memdoor.ai/install.sh | bash
memdoor connect openrouter                 # of anthropic, openai, gemini, chatgpt
# Voor lokale modellen: memdoor connect local   # Ollama, llama.cpp, vLLM, LM Studio

git clone --depth 1 https://github.com/guregodevo/memdoor
mkdir -p ~/.memdoor/workflows
cp -r memdoor/examples/workflows/team-solve ~/.memdoor/workflows/

Een probleem uitvoeren

mkdir my-problem && cd my-problem
cp -r ../memdoor/examples/workflows/team-solve/sample/* .          # task.md + tests/1.in … 5.out
memdoor workflow run team-solve --wait   # voortgang op stderr, exit 0 bij succes

Voor eigen problemen: vervang task.md en voeg gepaarde tests/N.in en tests/N.out bestanden toe.

Het programma wordt opgeslagen als solution.py, gelezen via stdin en vergeleken met de samples via diff. Er is Python 3 en bash vereist.

Werking van de Workflow

De workflow volgt dit pad: plan → (ideate-a & ideate-b) → solve → test → review → repair → verify

Rollen en Verantwoordelijkheden

StapTypeLeestSchrijft
planagenttask.mdplan.md en een notes.md ledger
ideate-a/bagenttask.md, plan.md, notes.mdEen voorstel in notes.md (A: direct bewijsbaar algoritme, B: andere techniek)
solveagentbeide voorstellenDe beslissing in notes.md, solution.py
testcommandtests/test-output.log, test-status.txt
reviewagenttest outputreview.md, reparatie-instructies in notes.md
repairagentinstructies van managereen herstelde solution.py (of niets als samples passeren)
verifycommandtests/final-test-output.log (nonzero exit faalt de run)

Elke agent krijgt de instructie: "fresh context, read the files, do not rely on chat". Er is één reparatieronde en geen menselijke tussenkomst.

Verificatie Stap (YAML)

De laatste stap is de definitieve uitspraak:

type: command
requires:
  - table_pattern: repair
command: |
  check=.memdoor/workflows/team-solve/check-samples.sh
  [ -f "$check" ] || check="$HOME/.memdoor/workflows/team-solve/check-samples.sh"
  bash "$check" > final-test-output.log 2>&1
  result=$?
  cat final-test-output.log
  exit "$result"

Bevindingen uit de Eerste Run

Het voorbeeld: Tel de substrings van een string over {a, b, c} met gelijke aantallen van elke letter, tot 200.000 tekens.

  • Resultaat: 8 van de 8 stappen voltooid, 5 van de 5 samples geslaagd.
  • Oplossing: De solver koos de prefix-state methode van ideator A, $O(N)$ met een dictionary van $(a−b, a−c)$ paren. Brute force tests op 300 random strings bevestigden de correctheid.
  • Incidenten:
  • Een provider verbrak de stream mid-answer. Omdat maxretries op 0 stond, stierf de run. Dit is nu gewijzigd naar maxretries: 1.
  • De oorspronkelijke prompts van de coder noemden specifieke methoden (bijv. "streaming prefix-state count"), wat andere problemen in de verkeerde richting zou sturen. De prompts zijn nu algemener.
  • Een initiële fout ("no agent named coder") werd veroorzaakt doordat runs hun agent alleen in de eigen workspace zochten; dit is opgelost in versie v1.692.0.