Save evaluation results to a JSON file.
(
args: argparse.Namespace,
stats: dict,
results: list[dict],
gt_dir: Path,
agent_dir: Path,
llm_model: Any | None,
master: MasterData | None,
)
| 1373 | |
| 1374 | |
| 1375 | def _save_results( |
| 1376 | args: argparse.Namespace, |
| 1377 | stats: dict, |
| 1378 | results: list[dict], |
| 1379 | gt_dir: Path, |
| 1380 | agent_dir: Path, |
| 1381 | llm_model: Any | None, |
| 1382 | master: MasterData | None, |
| 1383 | ) -> None: |
| 1384 | """Save evaluation results to a JSON file.""" |
| 1385 | if args.output: |
| 1386 | output_file = Path(args.output) |
| 1387 | output_file.parent.mkdir(parents=True, exist_ok=True) |
| 1388 | else: |
| 1389 | EVAL_OUTPUT_DIR.mkdir(parents=True, exist_ok=True) |
| 1390 | timestamp = datetime.now().strftime("%Y%m%d_%H%M%S") |
| 1391 | output_file = EVAL_OUTPUT_DIR / f"eval_{timestamp}.json" |
| 1392 | |
| 1393 | output_json = { |
| 1394 | "timestamp": datetime.now().isoformat(), |
| 1395 | "config": { |
| 1396 | "domain": master.domain if master else "invoice_processing", |
| 1397 | "display_name": master.display_name |
| 1398 | if master |
| 1399 | else "Invoice Processing", |
| 1400 | "master_data": str(master.source_path) |
| 1401 | if master and master.source_path |
| 1402 | else None, |
| 1403 | "ground_truth_dir": str(gt_dir), |
| 1404 | "agent_output_dir": str(agent_dir), |
| 1405 | "tolerance": args.tolerance, |
| 1406 | "llm_judge": llm_model is not None, |
| 1407 | }, |
| 1408 | "statistics": stats, |
| 1409 | "results": results, |
| 1410 | } |
| 1411 | |
| 1412 | with open(output_file, "w", encoding="utf-8") as f: |
| 1413 | json.dump(output_json, f, indent=2, ensure_ascii=False) |
| 1414 | |
| 1415 | print(f"Results saved to: {output_file}") |
| 1416 | |
| 1417 | |
| 1418 | def main(): |