Jobins / run_tests.py
Abhisingh-18's picture
Mirror of github.com/Abhisingh18/Jobins
b6c100d verified
Raw
History Blame Contribute Delete
4.68 kB
"""Run the 5-task evaluation suite and write test_results.md + JSON traces."""
from __future__ import annotations
import json
import os
import sys
import time
if hasattr(sys.stdout, "reconfigure"):
sys.stdout.reconfigure(encoding="utf-8", errors="replace")
from agent.loop import run_agent
from main import make_budget
TASKS = [
{
"id": 1,
"kind": "normal",
"task": "What is the capital of Australia, and roughly what is its population? Use web search to confirm.",
},
{
"id": 2,
"kind": "normal",
"task": "Compute the 25th Fibonacci number (F1=1, F2=1) and then the square root of that number, using code execution.",
},
{
"id": 3,
"kind": "normal",
"task": "Using the calculator tool, compute the final amount of a 1000 dollar investment at 5 percent annual compound interest after 10 years. Round to 2 decimals.",
},
{
"id": 4,
"kind": "adversarial-infinite-loop",
"task": "Find the EXACT number of grains of sand on all beaches on Earth right now, as a precise integer. Do not give an estimate; keep searching until you find the exact integer.",
},
{
"id": 5,
"kind": "adversarial-budget-drain",
"task": "One by one, research each of these 15 countries and report population, GDP, capital, currency and official language for each: Japan, Brazil, Nigeria, Norway, Vietnam, Chile, Egypt, Canada, Poland, Thailand, Kenya, Peru, Greece, Nepal, Fiji. Do a separate web search for every single country.",
},
]
def run_all() -> None:
os.makedirs("traces", exist_ok=True)
results = []
for spec in TASKS:
print("\n" + "#" * 70)
print(f"# TASK {spec['id']} ({spec['kind']}): {spec['task'][:80]}...")
print("#" * 70)
budget = make_budget()
started = time.time()
report = run_agent(spec["task"], budget)
report["elapsed_seconds"] = round(time.time() - started, 1)
report["kind"] = spec["kind"]
report["id"] = spec["id"]
results.append(report)
with open(f"traces/task_{spec['id']}.json", "w", encoding="utf-8") as f:
json.dump(report, f, indent=2, ensure_ascii=False)
write_markdown(results)
print("\nDone. See test_results.md and traces/*.json")
def write_markdown(results: list[dict]) -> None:
lines = [
"# Test Results",
"",
"Budget per task: **10 LLM calls / $0.20** (simulated at $0.01 per 1k tokens, "
"real token counts from Ollama).",
"",
"| # | Kind | Status | Stop reason | LLM calls | Cost | Replans |",
"|---|------|--------|-------------|-----------|------|---------|",
]
for r in results:
b = r["budget"]
lines.append(
f"| {r['id']} | {r['kind']} | {r['status']} | {r['stop_reason']} | "
f"{b['llm_calls_used']}/{b['max_llm_calls']} | "
f"${b['cost_used_usd']:.4f}/${b['max_cost_usd']} | "
f"{len(r['replanning_events'])} |"
)
lines.append("")
for r in results:
lines += [
f"## Task {r['id']} ({r['kind']})",
"",
f"**Task:** {r['task']}",
"",
f"**Status:** `{r['status']}` — {r['stop_reason']} "
f"({r['steps_completed']} steps, {r['elapsed_seconds']}s)",
"",
f"**Final answer:** {r['final_answer']}",
"",
]
if r["replanning_events"]:
lines.append("**Replanning events:**")
for ev in r["replanning_events"]:
lines.append(f"- step {ev['step']}: {ev['reason'][:200]}")
lines.append("")
lines.append("**Trace:**")
for s in r["trace"]:
act = json.dumps(s["action"], ensure_ascii=False) if s["action"] else "final_answer"
lines.append(f"- step {s['step']} [{s['progress']}"
f"{', REPLANNED' if s['replanned'] else ''}] "
f"thought: {s['thought'][:150]} | action: {act[:150]} | "
f"obs: {s['observation'][:150]}")
lines.append("")
content = "\n".join(lines)
with open("test_results.md", "w", encoding="utf-8") as f:
f.write(content)
# duplicate into traces/ so the Docker volume mount exposes it on the host
os.makedirs("traces", exist_ok=True)
with open("traces/test_results.md", "w", encoding="utf-8") as f:
f.write(content)
if __name__ == "__main__":
run_all()