logic-engine / examples /ace /rr_stress_test.py
ghostdrive1's picture
Upload folder using huggingface_hub
116524e verified
Raw
History Blame Contribute Delete
3.78 kB
#!/usr/bin/env python3
"""Stress test: RR analyzing 30 real benchmark traces at once.
Usage:
uv run python examples/ace/rr_stress_test.py
"""
import json
import logging
import os
import sys
import time
from pathlib import Path
from dotenv import load_dotenv
_root = Path(__file__).resolve().parents[2]
sys.path.insert(0, str(_root))
load_dotenv(_root / ".env")
from ace.steps.rr_step import RRConfig, RRStep
from ace.core.context import ACEStepContext, SkillbookView
from ace.core.skillbook import Skillbook
MODEL = os.getenv("ACE_MODEL", "bedrock/us.anthropic.claude-haiku-4-5-20251001-v1:0")
logging.basicConfig(level=logging.INFO, format=" %(name)s | %(message)s")
for name in ("LiteLLM", "litellm", "httpx", "httpcore"):
logging.getLogger(name).setLevel(logging.WARNING)
def load_traces(n: int = 30) -> list[dict]:
"""Load n traces from benchmark results, deduplicating by task."""
traces_path = _root / "ace-eval" / "results" / "benchmarks" / "bench_20260314_154608" / "benchmark" / "traces.json"
data = json.loads(traces_path.read_text())
batch = []
for key, val in data.items():
for trial in val.get("trials", []):
if trial.get("trace"):
t = trial["trace"]
batch.append({
"task_id": f"task_{key}_r{trial.get('reward', '?')}",
"question": t.get("question", ""),
"feedback": t.get("feedback", ""),
"trace": t,
})
if len(batch) >= n:
return batch
return batch
def main():
traces = load_traces(30)
print(f"Model: {MODEL}")
print(f"Loaded {len(traces)} traces")
print(f"Total trace chars: {sum(len(t['trace'].get('reasoning', '')) for t in traces):,}")
print()
rr = RRStep(
MODEL,
config=RRConfig(
max_requests=80,
max_depth=1, # allow recursion
max_tokens=1_500_000,
),
)
ctx = ACEStepContext(
trace={
"question": "Analyze these agent traces from a customer service benchmark. Identify common failure patterns, categorize them, and extract actionable learnings.",
"batch_items": traces,
"item_ids": [t["task_id"] for t in traces],
},
skillbook=SkillbookView(Skillbook()),
)
print("Running RR...")
t0 = time.time()
result_ctx = rr(ctx)
elapsed = time.time() - t0
print(f"\n{'=' * 60}")
print(f" Completed in {elapsed:.1f}s")
print(f" Reflections: {len(result_ctx.reflections)}")
print(f"{'=' * 60}\n")
for i, ref in enumerate(result_ctx.reflections):
print(f"--- Reflection {i} ---")
print(f" Reasoning: {ref.reasoning[:200]}...")
print(f" Key insight: {ref.key_insight[:200] if ref.key_insight else '(none)'}")
if ref.error_identification:
print(f" Error: {ref.error_identification[:200]}")
if ref.root_cause_analysis:
print(f" Root cause: {ref.root_cause_analysis[:200]}")
if ref.correct_approach:
print(f" Correct approach: {ref.correct_approach[:200]}")
raw = ref.raw or {}
if "rr_trace" in raw:
rt = raw["rr_trace"]
print(f" RR trace: depth={rt.get('depth')}, iters={rt.get('total_iterations')}, "
f"compactions={rt.get('compactions')}, timed_out={rt.get('timed_out')}")
if "usage" in raw:
u = raw["usage"]
print(f" Usage: {u.get('total_tokens'):,} tokens, {u.get('requests')} requests")
print()
if __name__ == "__main__":
main()