Spaces:
Sleeping
Sleeping
| """Qdrant stable point IDs and hybrid gating (Phase 1).""" | |
| from __future__ import annotations | |
| import uuid | |
| from unittest.mock import MagicMock, patch | |
| import pytest | |
| from app.vectorstore.qdrant_wrapper import _stable_point_id | |
| def test_stable_point_id_is_uuid_and_deterministic() -> None: | |
| cid = "doc-1_hier_paragraph_3" | |
| a = _stable_point_id(cid) | |
| b = _stable_point_id(cid) | |
| assert a == b | |
| uuid.UUID(a) | |
| assert _stable_point_id("other") != a | |
| def test_hybrid_does_not_require_async_pipeline_flag(monkeypatch: pytest.MonkeyPatch) -> None: | |
| from app.config import settings | |
| from app.vectorstore.qdrant_wrapper import QdrantVectorStore | |
| monkeypatch.setattr(settings, "enable_hybrid_retrieval", True, raising=False) | |
| monkeypatch.setattr(settings, "enable_async_pipeline", False, raising=False) | |
| monkeypatch.setattr(settings, "vectorstore_backend", "qdrant", raising=False) | |
| vs = QdrantVectorStore.__new__(QdrantVectorStore) | |
| vs._bm25_rows = {"t1": [MagicMock()]} | |
| vs._bm25_texts = {"t1": ["text"]} | |
| vs._ensure_bm25_for_tenant = MagicMock(return_value=True) # type: ignore[method-assign] | |
| assert vs._want_hybrid("t1") is True | |