| { |
| "retrieval": { |
| "evaluation_type": "retrieval", |
| "dataset": "Lawverse legal QA dataset from Digital Security Act, Labour Act, and Companies Act PDFs", |
| "num_cases": 36, |
| "k_values": [1, 3, 5, 10], |
| "metrics": { |
| "keyword_recall": 0.9281, |
| "latency_ms": 3069.0939, |
| "hit@1": 1.0, |
| "precision@1": 1.0, |
| "mrr@1": 1.0, |
| "ndcg@1": 0.9204, |
| "hit@3": 1.0, |
| "precision@3": 1.0, |
| "mrr@3": 1.0, |
| "ndcg@3": 0.9503, |
| "hit@5": 1.0, |
| "precision@5": 1.0, |
| "mrr@5": 1.0, |
| "ndcg@5": 0.9561, |
| "hit@10": 1.0, |
| "precision@10": 1.0, |
| "mrr@10": 1.0, |
| "ndcg@10": 0.9825 |
| }, |
| "domain_breakdown": { |
| "digital_security": { |
| "keyword_recall": 0.9881, |
| "latency_ms": 3417.4033, |
| "hit@1": 1.0, |
| "precision@1": 1.0, |
| "mrr@1": 1.0, |
| "ndcg@1": 0.9424, |
| "hit@3": 1.0, |
| "precision@3": 1.0, |
| "mrr@3": 1.0, |
| "ndcg@3": 0.9676, |
| "hit@5": 1.0, |
| "precision@5": 1.0, |
| "mrr@5": 1.0, |
| "ndcg@5": 0.9648, |
| "hit@10": 1.0, |
| "precision@10": 1.0, |
| "mrr@10": 1.0, |
| "ndcg@10": 0.9874 |
| }, |
| "labour": { |
| "keyword_recall": 0.8616, |
| "latency_ms": 2888.7933, |
| "hit@1": 1.0, |
| "precision@1": 1.0, |
| "mrr@1": 1.0, |
| "ndcg@1": 0.9233, |
| "hit@3": 1.0, |
| "precision@3": 1.0, |
| "mrr@3": 1.0, |
| "ndcg@3": 0.9489, |
| "hit@5": 1.0, |
| "precision@5": 1.0, |
| "mrr@5": 1.0, |
| "ndcg@5": 0.9633, |
| "hit@10": 1.0, |
| "precision@10": 1.0, |
| "mrr@10": 1.0, |
| "ndcg@10": 0.9835 |
| }, |
| "companies": { |
| "keyword_recall": 0.9345, |
| "latency_ms": 2901.085, |
| "hit@1": 1.0, |
| "precision@1": 1.0, |
| "mrr@1": 1.0, |
| "ndcg@1": 0.8955, |
| "hit@3": 1.0, |
| "precision@3": 1.0, |
| "mrr@3": 1.0, |
| "ndcg@3": 0.9343, |
| "hit@5": 1.0, |
| "precision@5": 1.0, |
| "mrr@5": 1.0, |
| "ndcg@5": 0.9402, |
| "hit@10": 1.0, |
| "precision@10": 1.0, |
| "mrr@10": 1.0, |
| "ndcg@10": 0.9765 |
| } |
| }, |
| "notes": [ |
| "Exact gold chunk IDs are unavailable, so retrieval relevance is estimated using expected source, section, and keyword coverage.", |
| "For a stronger future benchmark, add manually labelled gold chunk_id values for each question." |
| ], |
| "generated_at_unix": 1782711653.7389429 |
| }, |
| "rag_generation": { |
| "evaluation_type": "rag_generation", |
| "num_cases": 36, |
| "dry_run": false, |
| "metrics": { |
| "latency_ms": 8771.3861, |
| "answer_keyword_score": 0.5139, |
| "expected_keyword_coverage": 0.4501, |
| "forbidden_content_score": 1.0, |
| "has_sources": 1.0, |
| "has_disclaimer": 0.0, |
| "evidence_score": 0.8581, |
| "has_enough_evidence": 1.0, |
| "citation_check_passed": 0.6944 |
| }, |
| "domain_breakdown": { |
| "digital_security": { |
| "latency_ms": 8408.35, |
| "answer_keyword_score": 0.6667, |
| "expected_keyword_coverage": 0.5974, |
| "forbidden_content_score": 1.0, |
| "has_sources": 1.0, |
| "has_disclaimer": 0.0, |
| "evidence_score": 0.8147, |
| "has_enough_evidence": 1.0, |
| "citation_check_passed": 0.75 |
| }, |
| "labour": { |
| "latency_ms": 10297.6792, |
| "answer_keyword_score": 0.4583, |
| "expected_keyword_coverage": 0.355, |
| "forbidden_content_score": 1.0, |
| "has_sources": 1.0, |
| "has_disclaimer": 0.0, |
| "evidence_score": 0.8736, |
| "has_enough_evidence": 1.0, |
| "citation_check_passed": 0.6667 |
| }, |
| "companies": { |
| "latency_ms": 7608.1292, |
| "answer_keyword_score": 0.4167, |
| "expected_keyword_coverage": 0.398, |
| "forbidden_content_score": 1.0, |
| "has_sources": 1.0, |
| "has_disclaimer": 0.0, |
| "evidence_score": 0.8859, |
| "has_enough_evidence": 1.0, |
| "citation_check_passed": 0.6667 |
| } |
| }, |
| "notes": [ |
| "This evaluator checks citation/disclaimer/source presence plus keyword-grounding against the curated legal dataset.", |
| "Use --dry-run only to verify the evaluator without calling an LLM. Real project metrics should be generated without --dry-run.", |
| "Ragas can be added later as an optional judge layer, but this script avoids mandatory paid/API judge calls." |
| ], |
| "generated_at_unix": 1782712024.250695 |
| }, |
| "agent": { |
| "evaluation_type": "agent_behavior", |
| "num_cases": 40, |
| "metrics": { |
| "intent_correct": 0.975, |
| "retrieval_plan_correct": 0.975, |
| "has_enough_evidence": 0.9, |
| "citation_check_passed": 0.1, |
| "has_final_answer": 1.0 |
| }, |
| "intent_confusion": { |
| "legal_question -> legal_question": 37, |
| "greeting -> greeting": 1, |
| "closing -> closing": 1, |
| "non_legal -> legal_question": 1 |
| }, |
| "plan_confusion": { |
| "hybrid_dense_sparse_rerank -> hybrid_dense_sparse_rerank": 37, |
| "no_retrieval -> no_retrieval": 2, |
| "no_retrieval -> hybrid_dense_sparse_rerank": 1 |
| }, |
| "notes": [ |
| "This deterministic evaluation checks agent routing, planner decisions, evidence grading, and citation verifier behavior without calling paid LLM APIs.", |
| "The retriever itself is evaluated separately in retrieval_eval.py." |
| ], |
| "generated_at_unix": 1782711343.9591708 |
| }, |
| "safety": { |
| "evaluation_type": "safety_guardrails", |
| "num_cases": 4, |
| "metrics": { |
| "has_sources": 0.5, |
| "has_disclaimer": 0.0, |
| "include_pass": 0.5, |
| "forbidden_pass": 1.0, |
| "overall_pass": 0.0 |
| }, |
| "notes": [ |
| "Safety evaluation checks refusal behavior, disclaimer presence, and citation/source grounding.", |
| "This evaluator uses deterministic fake docs/LLM so it can run without external API keys." |
| ], |
| "generated_at_unix": 1782711386.5216513 |
| } |
| } |