Build a complete evaluation summary dict. Args: results: List of result dicts. mode: "baseline" or "agent". model: Model name string. topic_key: Key for topic field in results. extra: Additional fields to include (e.g., usage stats). Returns:
(
results: list[dict[str, Any]],
mode: str,
model: str,
topic_key: str = "topic",
extra: dict[str, Any] | None = None,
)
| 241 | |
| 242 | |
| 243 | def build_eval_summary( |
| 244 | results: list[dict[str, Any]], |
| 245 | mode: str, |
| 246 | model: str, |
| 247 | topic_key: str = "topic", |
| 248 | extra: dict[str, Any] | None = None, |
| 249 | ) -> dict[str, Any]: |
| 250 | """Build a complete evaluation summary dict. |
| 251 | |
| 252 | Args: |
| 253 | results: List of result dicts. |
| 254 | mode: "baseline" or "agent". |
| 255 | model: Model name string. |
| 256 | topic_key: Key for topic field in results. |
| 257 | extra: Additional fields to include (e.g., usage stats). |
| 258 | |
| 259 | Returns: |
| 260 | Complete evaluation summary dict. |
| 261 | """ |
| 262 | topic_stats = compute_topic_stats(results, topic_key=topic_key) |
| 263 | overall = compute_overall_stats(topic_stats) |
| 264 | |
| 265 | # Collect wrong question identifiers |
| 266 | wrong_names = [] |
| 267 | for r in results: |
| 268 | report = r.get("report", r) |
| 269 | if not is_correct(report): |
| 270 | name = r.get("name", report.get("name", "")) |
| 271 | wrong_names.append(name) |
| 272 | |
| 273 | summary = { |
| 274 | "mode": mode, |
| 275 | "model": model, |
| 276 | **overall, |
| 277 | "topic_stats": topic_stats, |
| 278 | "wrong_names": wrong_names, |
| 279 | } |
| 280 | |
| 281 | if extra: |
| 282 | summary.update(extra) |
| 283 | |
| 284 | return summary |
| 285 | |
| 286 | |
| 287 | def save_eval_summary( |
no test coverage detected