Skip to content

Commit 58099d3

Browse files
committed
perf(evaluate): optimize reference product evaluation with concurrency
1 parent a9563f7 commit 58099d3

1 file changed

Lines changed: 12 additions & 11 deletions

File tree

src/cas_evals/reference_product.py

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
from __future__ import annotations
44

5+
import concurrent.futures
56
import hashlib
67
import json
78
from collections.abc import Callable
@@ -122,9 +123,8 @@ def evaluate_reference_suite(
122123
suite = json.loads(fixture_path.read_text(encoding="utf-8"))
123124
released_at = suite.get("releasedAt", DEFAULT_RELEASED_AT)
124125
invoke = transport or _http_transport(endpoint, timeout_seconds)
125-
evaluated = []
126126

127-
for source_case in suite["cases"]:
127+
def process_case(source_case: dict[str, Any]) -> tuple[dict[str, Any], dict[str, Any]]:
128128
envelope = _build_envelope(source_case, suite["suiteId"], released_at)
129129
output, events = _validate_response(invoke(envelope), envelope)
130130
live_case = {**source_case, "response": output}
@@ -142,17 +142,18 @@ def evaluate_reference_suite(
142142
"normalization": "fixture-observed",
143143
},
144144
}
145-
evaluated.append(
146-
_evaluate_case_with_evidence(
147-
live_case,
148-
suite["suiteId"],
149-
released_at,
150-
source_case=source_case,
151-
metadata=envelope,
152-
execution_evidence=evidence,
153-
)
145+
return _evaluate_case_with_evidence(
146+
live_case,
147+
suite["suiteId"],
148+
released_at,
149+
source_case=source_case,
150+
metadata=envelope,
151+
execution_evidence=evidence,
154152
)
155153

154+
with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
155+
evaluated = list(executor.map(process_case, suite["cases"]))
156+
156157
results = [result for result, _ in evaluated]
157158
return {
158159
"schemaVersion": "0.2.0",

0 commit comments

Comments
 (0)