diff --git a/python/ebook_search/eval/dataset.py b/python/ebook_search/eval/dataset.py index fbff635..aabbd65 100644 --- a/python/ebook_search/eval/dataset.py +++ b/python/ebook_search/eval/dataset.py @@ -28,11 +28,11 @@ class GoldQuery: def load_gold_queries(path: Path = DEFAULT_QUERIES_PATH) -> list[GoldQuery]: - """Load labeled queries from a JSONL file.""" + """Load labeled queries from a JSONL file. Blank lines and ``//`` comment lines are skipped.""" queries: list[GoldQuery] = [] for line in path.read_text(encoding="utf-8").splitlines(): stripped = line.strip() - if not stripped: + if not stripped or stripped.startswith("//"): continue record = json.loads(stripped) queries.append( diff --git a/tests/ebook_search/test_core.py b/tests/ebook_search/test_core.py index f1a8b54..64a517e 100644 --- a/tests/ebook_search/test_core.py +++ b/tests/ebook_search/test_core.py @@ -68,7 +68,7 @@ def test_reciprocal_rank_fusion_combines_vector_and_bm25_rankings() -> None: SearchResult(chunk_id=3, text="c", source_title="C", score=2.1, bm25_score=2.1), ] - fused = reciprocal_rank_fusion(vector_results, lexical_results) + fused = reciprocal_rank_fusion(vector_results, lexical_results, rank_constant=60) assert [result.chunk_id for result in fused] == [2, 1, 3] assert fused[0].rank_source == "Hybrid" @@ -146,7 +146,7 @@ def test_reciprocal_rank_fusion_marks_hybrid_source() -> None: vector_results = [SearchResult(chunk_id=1, text="a", source_title="A")] lexical_results = [SearchResult(chunk_id=2, text="b", source_title="B")] - fused = reciprocal_rank_fusion(vector_results, lexical_results) + fused = reciprocal_rank_fusion(vector_results, lexical_results, rank_constant=60) assert {result.rank_source for result in fused} == {"Hybrid"} diff --git a/tests/ebook_search/test_rag_pipeline.py b/tests/ebook_search/test_rag_pipeline.py index 57620e5..cc2a2b5 100644 --- a/tests/ebook_search/test_rag_pipeline.py +++ b/tests/ebook_search/test_rag_pipeline.py @@ -30,7 +30,7 @@ def test_search_ebooks_runs_vector_and_bm25_in_parallel(mocker: MockerFixture) - def fake_bm25_candidates(query, _config): """Return BM25 candidates after confirming vector search has started.""" - assert query == "parallel" + assert query == "what is parallel" bm25_started.set() assert vector_started.wait(timeout=2) return [SearchResult(chunk_id=2, text="bm25", source_title="BM25", bm25_score=2.0)] @@ -46,5 +46,4 @@ def test_search_ebooks_runs_vector_and_bm25_in_parallel(mocker: MockerFixture) - assert timings["Embedding + vector search"].counts_toward_total is False assert timings["BM25 search"].counts_toward_total is False assert timings["Hybrid retrieval"].counts_toward_total is True - assert timings["BM25 query preparation"].counts_toward_total is True assert received_engines == [engine] diff --git a/tests/ebook_search/test_rerank.py b/tests/ebook_search/test_rerank.py index 15ccf3f..b421832 100644 --- a/tests/ebook_search/test_rerank.py +++ b/tests/ebook_search/test_rerank.py @@ -33,7 +33,7 @@ def rerank_response(payload: dict[str, object] | None = None, *, content: bytes ) -def test_config_defaults_keep_reranking_optional(mocker: MockerFixture) -> None: +def test_config_defaults_enable_reranking(mocker: MockerFixture) -> None: mocker.patch.dict(environ, {}, clear=False) environ.pop("EBOOK_SEARCH_RERANK_ENABLED", None) environ.pop("EBOOK_SEARCH_RERANK_BASE_URL", None) @@ -43,7 +43,7 @@ def test_config_defaults_keep_reranking_optional(mocker: MockerFixture) -> None: config = load_rerank_config() - assert config.enabled is False + assert config.enabled is True assert config.base_url == "http://192.168.90.25:8001" assert config.model == "qwen3-reranker-06b" assert config.candidates == 24