Download tests/test_evaluation_script.py from vxa8502/Sage: direct link, hf CLI and curl.
- Browser
- Download file 4.98 kB
-
https://huggingface.co/spaces/vxa8502/Sage/resolve/main/tests/test_evaluation_script.py
- Command line
-
hf download hf://spaces/vxa8502/Sage/tests/test_evaluation_script.py
-
curl -L -o test_evaluation_script.py https://huggingface.co/spaces/vxa8502/Sage/resolve/main/tests/test_evaluation_script.py
4.98 kB
| """Tests for scripts.evaluation artifact assembly.""" | |
| from sage.core.models import EvalCase, EvalCaseProvenance, MetricsReport | |
| import scripts.evaluation as evaluation_script | |
| def _case( | |
| *, | |
| query: str, | |
| query_id: str, | |
| source_type: str, | |
| category: str, | |
| intent: str, | |
| subset_tags: tuple[str, ...], | |
| query_slice_tags: tuple[str, ...], | |
| origin_family: str, | |
| curation_mode: str, | |
| ) -> EvalCase: | |
| return EvalCase( | |
| query=query, | |
| relevant_items={"ASIN1": 3.0}, | |
| query_id=query_id, | |
| source_type=source_type, | |
| category=category, | |
| intent=intent, | |
| subset_tags=subset_tags, | |
| query_slice_tags=query_slice_tags, | |
| provenance=EvalCaseProvenance( | |
| schema_version="query_provenance_v1", | |
| origin_family=origin_family, | |
| curation_mode=curation_mode, | |
| source_dataset="amazon_esci", | |
| source_split="test", | |
| selection_policy="corpus_overlap_min_relevant_items_v1", | |
| subset_assignment_policy="normalized_query_sha256_v1", | |
| ), | |
| ) | |
| def test_build_primary_evaluation_artifact_adds_metadata_breakdowns(monkeypatch): | |
| cases = [ | |
| _case( | |
| query="wireless keyboard", | |
| query_id="qb_001", | |
| source_type="amazon_esci", | |
| category="keyboards", | |
| intent="use_case", | |
| subset_tags=("retrieval_eval",), | |
| query_slice_tags=(), | |
| origin_family="amazon_esci_overlap", | |
| curation_mode="pure_import", | |
| ), | |
| _case( | |
| query="latest earbuds to avoid", | |
| query_id="qb_002", | |
| source_type="manual_seed", | |
| category="audio", | |
| intent="problem_solving", | |
| subset_tags=("retrieval_eval", "special_probe"), | |
| query_slice_tags=( | |
| "recency_sensitive_query", | |
| "negative_problem_query", | |
| ), | |
| origin_family="manual_seed", | |
| curation_mode="candidate_bootstrap", | |
| ), | |
| ] | |
| case_results = [] | |
| for case, recommended_ids, metrics in [ | |
| ( | |
| cases[0], | |
| ["ASIN1", "ASIN3"], | |
| { | |
| "ndcg": 1.0, | |
| "hit": 1.0, | |
| "mrr": 1.0, | |
| "precision": 0.5, | |
| "recall": 1.0, | |
| "diversity": 0.2, | |
| "novelty": 2.0, | |
| }, | |
| ), | |
| ( | |
| cases[1], | |
| ["ASIN4", "ASIN1"], | |
| { | |
| "ndcg": 0.6309, | |
| "hit": 1.0, | |
| "mrr": 0.5, | |
| "precision": 0.5, | |
| "recall": 1.0, | |
| "diversity": 0.6, | |
| "novelty": 3.0, | |
| }, | |
| ), | |
| ]: | |
| row = case.to_dict() | |
| row["recommended_product_ids"] = recommended_ids | |
| row["relevant_item_count"] = 1 | |
| row["relevant_hits"] = [ | |
| { | |
| "product_id": "ASIN1", | |
| "rank": recommended_ids.index("ASIN1") + 1, | |
| "relevance": 3.0, | |
| } | |
| ] | |
| row["first_relevant_rank"] = recommended_ids.index("ASIN1") + 1 | |
| row["metrics"] = metrics | |
| case_results.append(row) | |
| monkeypatch.setattr( | |
| evaluation_script, | |
| "evaluate_recommendations_with_details", | |
| lambda **_kwargs: ( | |
| MetricsReport( | |
| n_cases=2, | |
| ndcg_at_k=0.8154, | |
| hit_at_k=1.0, | |
| mrr=0.75, | |
| precision_at_k=0.5, | |
| recall_at_k=1.0, | |
| diversity=0.4, | |
| coverage=0.6, | |
| novelty=2.5, | |
| k=10, | |
| ), | |
| case_results, | |
| ), | |
| ) | |
| artifact = evaluation_script.build_primary_evaluation_artifact( | |
| cases, | |
| item_embeddings={}, | |
| item_popularity={}, | |
| total_items=5, | |
| ) | |
| assert artifact["metrics"]["ndcg_at_10"] == 0.8154 | |
| assert artifact["case_metadata_summary"]["total_cases"] == 2 | |
| assert artifact["case_metadata_summary"]["by_origin_family"] == { | |
| "amazon_esci_overlap": 1, | |
| "manual_seed": 1, | |
| } | |
| assert artifact["case_metadata_summary"]["by_query_slice_tag"] == { | |
| "recency_sensitive_query": 1, | |
| "negative_problem_query": 1, | |
| } | |
| assert ( | |
| artifact["metric_breakdowns"]["by_curation_mode"]["candidate_bootstrap"][ | |
| "n_cases" | |
| ] | |
| == 1 | |
| ) | |
| assert ( | |
| artifact["metric_breakdowns"]["by_query_slice_tag"]["recency_sensitive_query"][ | |
| "n_cases" | |
| ] | |
| == 1 | |
| ) | |
| assert ( | |
| artifact["metric_breakdowns"]["by_query_slice_tag"]["recency_sensitive_query"][ | |
| "coverage" | |
| ] | |
| == 0.4 | |
| ) | |
| assert ( | |
| artifact["metric_breakdowns"]["by_subset_tag"]["retrieval_eval"]["n_cases"] == 2 | |
| ) | |
| assert "subset_tags" in artifact["breakdown_methodology"]["multi_membership_fields"] | |