feat(embedding): expose model_version on dense and sparse embedder ports

Why:
- ADR-0001's Qdrant payload records embedding_model_version so a future model
  swap can identify which chunks need re-embedding. The embedder is what
  knows which model produced its vectors, so it reports this rather than the
  call site reconstructing it from settings.

Changes:
- DenseEmbedder/SparseEmbedder protocols gain a model_version: str attribute.
- OpenAICompatibleEmbedder reports its configured model; Bm25SparseEmbedder
  reports its analyzer (bm25-<analyzer>).
This commit is contained in:
Ali Zarinkolah
2026-08-20 18:15:38 +03:30
parent 5e0addcc55
commit 58ca6109d1
5 changed files with 23 additions and 0 deletions

View File

@@ -37,6 +37,7 @@ class _TrackingDenseEmbedder:
"""
name: str
model_version: str = "stub-v1"
dimensions: int = 3
batches: list[list[str]] = field(default_factory=list)
in_flight: int = 0
@@ -54,6 +55,7 @@ class _TrackingDenseEmbedder:
@dataclass
class _FailingDenseEmbedder:
name: str
model_version: str = "stub-v1"
async def embed_batch(self, texts: Sequence[str]) -> list[list[float]]:
raise RuntimeError("boom")
@@ -62,6 +64,7 @@ class _FailingDenseEmbedder:
@dataclass
class _StubSparseEmbedder:
name: str = "sparse"
model_version: str = "stub-sparse-v1"
calls: list[list[str]] = field(default_factory=list)
def embed_batch(self, texts: Sequence[str], *, query: bool = False) -> list[SparseVector]:
@@ -72,6 +75,7 @@ class _StubSparseEmbedder:
@dataclass
class _FailingSparseEmbedder:
name: str = "sparse"
model_version: str = "stub-sparse-v1"
def embed_batch(self, texts: Sequence[str], *, query: bool = False) -> list[SparseVector]:
raise RuntimeError("boom")