MCPcopy Create free account
hub / github.com/Dizzy-K/AutoPT / ExperimentRunner

Class ExperimentRunner

runner/experiment_runner.py:55–121  ·  view source on GitHub ↗

Orchestrate batch experiments across benchmarks x models x repeats.

Source from the content-addressed store, hash-verified

53
54@dataclass(slots=True)
55class ExperimentRunner:
56 """Orchestrate batch experiments across benchmarks x models x repeats."""
57 task_runner: TaskRunner = field(default_factory=TaskRunner)
58
59 def build_task_requests(self, request: ExperimentRequest) -> list[TaskRequest]:
60 benchmarks = self._resolve_benchmarks(request.benchmark_file, request.benchmark_names)
61 if not request.model_identifiers:
62 raise ValueError("ExperimentRequest requires at least one model identifier.")
63
64 task_requests: list[TaskRequest] = []
65 for benchmark in benchmarks:
66 for model_identifier in request.model_identifiers:
67 task_requests.append(
68 build_task_request(
69 benchmark=benchmark,
70 model=resolve_model(
71 model_identifier,
72 default_provider=request.config.llm.default_provider,
73 ),
74 ip_addr=request.ip_addr,
75 config=request.config,
76 prompt_bundle_name=request.prompt_bundle_name,
77 )
78 )
79 return task_requests
80
81 def run(self, request: ExperimentRequest) -> ExperimentReport:
82 results: list[TaskResult] = []
83 task_requests = self.build_task_requests(request)
84 benchmarks = self._dedupe_names(task_request.benchmark.name for task_request in task_requests)
85 total_rounds = max(request.repeat, 1)
86 report = ExperimentReport(
87 benchmark_file=str(request.benchmark_file),
88 output_file=str(request.output_file) if request.output_file else None,
89 repeat=total_rounds,
90 benchmarks=benchmarks,
91 models=list(request.model_identifiers),
92 )
93
94 for round_index in range(total_rounds):
95 for task_request in task_requests:
96 result = self.task_runner.run(task_request)
97 result.details["round_index"] = round_index
98 results.append(result)
99 if request.output_file:
100 write_jsonl_record(request.output_file, result.to_dict())
101 report.results.extend(results)
102 return report
103
104 @staticmethod
105 def _resolve_benchmarks(benchmark_file: str | Path, benchmark_names: list[str]) -> list[BenchmarkItem]:
106 if benchmark_names:
107 return [find_benchmark_by_name(benchmark_file, name) for name in benchmark_names]
108 return load_benchmarks(benchmark_file)
109
110 @staticmethod
111 def _dedupe_names(names: Any) -> list[str]:
112 deduped: list[str] = []

Callers 1

handle_experimentFunction · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected