Spaces:
Sleeping
Sleeping
| """Tests for evaluation metric functions.""" | |
| import sys | |
| import os | |
| # Allow importing from scripts/ | |
| sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..', 'scripts')) | |
| def test_recall_at_k_perfect(): | |
| from run_graph_ablation_eval import recall_at_k | |
| retrieved = ["c1", "c2", "c3", "c4", "c5"] | |
| gold = ["c1", "c2"] | |
| assert recall_at_k(retrieved, gold, 3) == 1.0 | |
| assert recall_at_k(retrieved, gold, 5) == 1.0 | |
| def test_recall_at_k_partial(): | |
| from run_graph_ablation_eval import recall_at_k | |
| retrieved = ["c1", "c2", "c3", "c4", "c5"] | |
| gold = ["c1", "c5", "c99"] | |
| assert recall_at_k(retrieved, gold, 3) == 1 / 3 # only c1 in top 3 | |
| assert recall_at_k(retrieved, gold, 5) == 2 / 3 # c1 and c5 in top 5 | |
| def test_recall_at_k_miss(): | |
| from run_graph_ablation_eval import recall_at_k | |
| retrieved = ["c10", "c20", "c30"] | |
| gold = ["c1", "c2"] | |
| assert recall_at_k(retrieved, gold, 3) == 0.0 | |
| def test_recall_at_k_empty_gold(): | |
| from run_graph_ablation_eval import recall_at_k | |
| assert recall_at_k(["c1", "c2"], [], 3) == 0.0 | |
| def test_recall_at_k_empty_retrieved(): | |
| from run_graph_ablation_eval import recall_at_k | |
| assert recall_at_k([], ["c1", "c2"], 3) == 0.0 | |
| def test_answer_completeness_full(): | |
| from run_graph_ablation_eval import answer_completeness | |
| answer = "Retrieval-Augmented Generation combines retrieval with generation." | |
| terms = ["retrieval", "generation"] | |
| assert answer_completeness(answer, terms) == 1.0 | |
| def test_answer_completeness_partial(): | |
| from run_graph_ablation_eval import answer_completeness | |
| answer = "This is about retrieval systems." | |
| terms = ["retrieval", "generation", "embedding"] | |
| assert abs(answer_completeness(answer, terms) - 1 / 3) < 0.01 | |
| def test_answer_completeness_empty(): | |
| from run_graph_ablation_eval import answer_completeness | |
| assert answer_completeness("some answer", []) == 0.0 | |
| assert answer_completeness("", ["term"]) == 0.0 | |
| def test_faithfulness_heuristic_supported(): | |
| from run_graph_ablation_eval import answer_faithfulness_heuristic | |
| answer = "RAG uses retrieval to find relevant documents before generating answers." | |
| sources = ["RAG retrieval finds relevant documents and generates contextual answers."] | |
| score = answer_faithfulness_heuristic(answer, sources) | |
| assert score > 0.5 # should have high overlap | |
| def test_faithfulness_heuristic_unsupported(): | |
| from run_graph_ablation_eval import answer_faithfulness_heuristic | |
| answer = "Quantum computing enables superposition of qubits for parallel processing." | |
| sources = ["RAG retrieval finds relevant documents."] | |
| score = answer_faithfulness_heuristic(answer, sources) | |
| assert score < 0.5 # low overlap with unrelated sources | |
| def test_faithfulness_heuristic_empty(): | |
| from run_graph_ablation_eval import answer_faithfulness_heuristic | |
| assert answer_faithfulness_heuristic("", ["source"]) == 0.0 | |
| assert answer_faithfulness_heuristic("answer", []) == 0.0 | |