From b3f7e99e9e7263ccd28bad6d670c236dcf490331 Mon Sep 17 00:00:00 2001 From: wangyunlai Date: Thu, 21 May 2026 10:23:45 +0800 Subject: [PATCH] fix test empty results and hybrid_search refresh_index Co-authored-by: Cursor --- src/pyseekdb/client/client_base.py | 8 ------ ...llection_hybrid_search_source_inference.py | 2 ++ .../test_hybrid_search_source_inference.py | 26 +++++++++++++++++++ 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/pyseekdb/client/client_base.py b/src/pyseekdb/client/client_base.py index 9b30ea27..95e3df71 100644 --- a/src/pyseekdb/client/client_base.py +++ b/src/pyseekdb/client/client_base.py @@ -3723,14 +3723,6 @@ def _transform_sql_result( # noqa: C901 Standard format dictionary with ids, distances, metadatas, documents, embeddings in query-compatible format (List[List[...]] for consistency with query method) """ - if not result_rows: - return { - "ids": [[]], - "distances": [[]], - "metadatas": [[]], - "documents": [[]], - "embeddings": [[]], - } ids = [] distances = [] diff --git a/tests/integration_tests/test_collection_hybrid_search_source_inference.py b/tests/integration_tests/test_collection_hybrid_search_source_inference.py index 053f3641..90a29277 100644 --- a/tests/integration_tests/test_collection_hybrid_search_source_inference.py +++ b/tests/integration_tests/test_collection_hybrid_search_source_inference.py @@ -93,6 +93,8 @@ def test_include_infers_source_result_shape_matrix(self, db_client): query_vector = self._generate_query_vector(dimension) knn = {"query_embeddings": query_vector, "n_results": 2} + collection.refresh_index() + # 1) include=None: default returns documents+metadatas; should not return embedding column default_include = collection.hybrid_search(knn=knn, n_results=2) assert set(default_include.keys()) == {"ids", "distances", "documents", "metadatas"} diff --git a/tests/unit_tests/test_hybrid_search_source_inference.py b/tests/unit_tests/test_hybrid_search_source_inference.py index 1ea019e3..2795a54a 100644 --- a/tests/unit_tests/test_hybrid_search_source_inference.py +++ b/tests/unit_tests/test_hybrid_search_source_inference.py @@ -26,6 +26,9 @@ class _DummyClient: def _build_source_fields(self, include: list[str] | None) -> list[str]: return BaseClient._build_source_fields(self, include) + def _convert_id_from_bytes(self, value: Any) -> Any: + return value + class TestHybridSearchPublicSurfaceUnit: def test_collection_forwards_include_only(self) -> None: @@ -87,3 +90,26 @@ def test_build_source_fields_ignores_non_source_include_items(self) -> None: assert BaseClient._build_source_fields(dummy, include=["ids"]) == ["_id"] assert BaseClient._build_source_fields(dummy, include=["distances"]) == ["_id"] assert BaseClient._build_source_fields(dummy, include=["documents", "ids", "distances"]) == ["_id", "document"] + + +class TestTransformSqlResultEmptyRowsUnit: + def test_empty_rows_returns_expected_columns_by_include(self) -> None: + dummy = _DummyClient() + + default_result = BaseClient._transform_sql_result(dummy, result_rows=[], include=None) + assert set(default_result.keys()) == {"ids", "distances", "documents", "metadatas"} + assert default_result["ids"] == [[]] + assert default_result["distances"] == [[]] + assert default_result["documents"] == [[]] + assert default_result["metadatas"] == [[]] + + ids_only_result = BaseClient._transform_sql_result(dummy, result_rows=[], include=[]) + assert set(ids_only_result.keys()) == {"ids", "distances"} + assert ids_only_result["ids"] == [[]] + assert ids_only_result["distances"] == [[]] + + embeddings_result = BaseClient._transform_sql_result(dummy, result_rows=[], include=["embeddings"]) + assert set(embeddings_result.keys()) == {"ids", "distances", "embeddings"} + assert embeddings_result["ids"] == [[]] + assert embeddings_result["distances"] == [[]] + assert embeddings_result["embeddings"] == [[]]