"""Paths and shared constants for search evaluation.""" from pathlib import Path _PKG_DIR = Path(__file__).resolve().parent _SCRIPTS_EVAL_DIR = _PKG_DIR.parent PROJECT_ROOT = _SCRIPTS_EVAL_DIR.parents[1] RELEVANCE_EXACT = "Exact" RELEVANCE_PARTIAL = "Partial" RELEVANCE_IRRELEVANT = "Irrelevant" VALID_LABELS = {RELEVANCE_EXACT, RELEVANCE_PARTIAL, RELEVANCE_IRRELEVANT} DEFAULT_ARTIFACT_ROOT = PROJECT_ROOT / "artifacts" / "search_evaluation" DEFAULT_QUERY_FILE = _SCRIPTS_EVAL_DIR / "queries" / "queries.txt" JUDGE_PROMPT_VERSION_SIMPLE = "v3_simple_20260331" JUDGE_PROMPT_VERSION_COMPLEX = "v2_structured_20260331" DEFAULT_LABELER_MODE = "simple" # Rebuild annotation pool (build --force-refresh-labels): search recall + full-corpus rerank + LLM batches DEFAULT_SEARCH_RECALL_TOP_K = 500 DEFAULT_RERANK_HIGH_THRESHOLD = 0.5 DEFAULT_RERANK_HIGH_SKIP_COUNT = 1000 DEFAULT_REBUILD_LLM_BATCH_SIZE = 50 DEFAULT_REBUILD_MIN_LLM_BATCHES = 20 DEFAULT_REBUILD_MAX_LLM_BATCHES = 40 DEFAULT_REBUILD_IRRELEVANT_STOP_RATIO = 0.92 DEFAULT_REBUILD_IRRELEVANT_STOP_STREAK = 3