fix(vector): separate write transport fields

This commit is contained in:
2026-07-11 20:35:57 +02:00
parent ff4d662aba
commit fe8d70da47
6 changed files with 117 additions and 26 deletions
+8 -14
View File
@@ -4,12 +4,11 @@ from tht.ports.vector import (
VectorCapabilities,
VectorHealth,
VectorHit,
VectorRecord,
VectorStoreError,
VectorWriteRecord,
VectorWriteUnavailable,
)
from tht.vectorstore.rest_client import VectorRestClient
from tht.vectorstore.store import content_hash, hit_from_metadata
from tht.vectorstore.store import hit_from_metadata
def _merge(hits: list[VectorHit], limit: int) -> list[VectorHit]:
@@ -63,31 +62,26 @@ class ThothHttpVectorStore:
def existing_hashes(self, collection: str, kinds: list[str]) -> dict[str, str]:
return self._require_writer().existing_hashes(collection, kinds)
def upsert(self, collection: str, records: list[VectorRecord]) -> int:
def upsert(self, collection: str, records: list[VectorWriteRecord]) -> int:
writer = self._require_writer()
rows = [self._row(record) for record in records]
return writer.upsert_records(collection, rows)
@staticmethod
def _row(record: VectorRecord) -> dict:
extra = dict(record.metadata)
try:
embedding = extra.pop("embedding")
except KeyError as exc:
raise VectorStoreError(f"Vector record {record.id!r} has no embedding") from exc
digest = extra.pop("content_hash", content_hash(record.content))
def _row(write_record: VectorWriteRecord) -> dict:
record = write_record.record
metadata = {
"kind": record.kind,
"ref": record.ref,
"record_key": record.id,
"title": record.title,
"content": record.content,
**extra,
**record.metadata,
}
return {
"record_key": record.id,
"kind": record.kind,
"content_hash": digest,
"content_hash": write_record.content_hash,
"metadata": metadata,
"embedding": embedding,
"embedding": write_record.embedding,
}