| """ |
| Standalone evaluation runner for the contract drafting system. |
| Runs on CPU; no GPU required for template-based generation. |
| """ |
|
|
| import json |
| import sys |
|
|
| from clause_retriever import ClauseRetriever, build_retriever_from_hf_datasets |
| from drafting_engine import ContractDraftingEngine, DraftingContext |
| from eval_runner import EvalRunner, GOLD_TASKS |
|
|
|
|
| def main(): |
| print("Initializing clause retriever...") |
| retriever = ClauseRetriever(use_bm25=True, use_embeddings=False) |
| |
| try: |
| from datasets import load_dataset |
| ds = load_dataset("asapworks/Contract_Clause_SampleDataset", split="train") |
| for row in ds: |
| retriever.add_clauses([{ |
| "clause_text": row["clause_text"], |
| "clause_type": row.get("clause_type", "unknown"), |
| "source": row.get("file", "seed"), |
| }]) |
| print(f"Loaded {len(retriever.corpus)} seed clauses.") |
| except Exception as e: |
| print(f"Warning: could not load seed clauses: {e}") |
|
|
| engine = ContractDraftingEngine(retriever=retriever) |
| runner = EvalRunner(engine) |
|
|
| print("Running gold task suite...") |
| results = runner.run_suite(GOLD_TASKS) |
| report = runner.report(results) |
| print(report) |
|
|
| with open("eval_report.md", "w") as f: |
| f.write(report) |
|
|
| |
| detailed = [] |
| for r in results: |
| detailed.append({ |
| "task_id": r.task_id, |
| "contract_type": r.contract_type, |
| "total_score": r.total_score, |
| "scores": r.scores, |
| }) |
| with open("eval_results.json", "w") as f: |
| json.dump(detailed, f, indent=2) |
|
|
| print("\nSaved eval_report.md and eval_results.json") |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|