import subprocess, time, json
from pathlib import Path
cands = [
'cohere/north-mini-code:free',
'minimax/minimax-m2.7:free',
'nvidia/nemotron-3.5-lightning:free',
'poolside/laguna-s-2.1:free',
'thinkingmachines/inkling-small:free',
'google/gemma-4-31b-it:free',
'nvidia/nemotron-3-nano-omni-30b-a3b-reasoning:free',
]
tests = [
('A', 'Antworte exakt mit: MODEL-TEST-OK'),
('B', 'Löse diese kurze mehrstufige Aufgabe und gib nur die Endwerte aus: Addiere 17 und 28, multipliziere das Ergebnis mit 3 und ziehe 5 ab. Erwartetes Ergebnis: 130.'),
('C', 'Führe für diese Aufgabe einen ungefährlichen Tool-Aufruf aus: Verwende das Terminal-Tool ausschließlich für `printf TOOL-CALL-OK` und antworte danach exakt mit TOOL-CALL-OK.'),
]
extra = {
'cohere/north-mini-code:free': ('D', 'Korrigiere diese fehlerhafte Python-Funktion und gib nur den korrigierten Code aus: def add(a, b): return a - b'),
'poolside/laguna-s-2.1:free': ('D', 'Korrigiere diese fehlerhafte Python-Funktion und gib nur den korrigierten Code aus: def add(a, b): return a - b'),
}
out = Path('/tmp/openrouter-candidate-tests.json')
results = []
for model in cands:
seq = tests + ([extra[model]] if model in extra else [])
for label, prompt in seq:
cmd = "set -a; . /home/hermes/.hermes/.env; set +a; exec /home/hermes/.hermes/hermes-agent/venv/bin/hermes chat --profile agent-template --provider openrouter --model %s -q %s --oneshot -Q --run-budget 60" % (model, repr(prompt))
started = time.time()
try:
r = subprocess.run(['bash','-lc',cmd], capture_output=True, text=True, timeout=90)
rec = {'model': model, 'test': label, 'rc': r.returncode, 'seconds': round(time.time()-started,1), 'stdout': r.stdout.strip(), 'stderr': r.stderr.strip()}
except subprocess.TimeoutExpired as e:
rec = {'model': model, 'test': label, 'rc': 'TIMEOUT', 'seconds': 90, 'stdout': str(e.stdout or ''), 'stderr': str(e.stderr or '')}
results.append(rec)
out.write_text(json.dumps(results, ensure_ascii=False, indent=2))
print(json.dumps({'model':model,'test':label,'rc':rec['rc'],'seconds':rec['seconds'],'stdout':rec['stdout']},ensure_ascii=False), flush=True)