feat(vector): add direct pgvector adapter

This commit is contained in:
2026-07-12 01:01:15 +02:00
parent ebdd3aa2c5
commit b09341f07e
7 changed files with 515 additions and 35 deletions
+14 -10
View File
@@ -1,7 +1,7 @@
"""Central construction of deployment-specific adapters."""
from tht.adapters.dwh import PostgresDwhAdapter, ThothRestDwhAdapter
from tht.adapters.vector import LegacyDirectVectorStore, ThothHttpVectorStore
from tht.adapters.vector import PgVectorStore, ThothHttpVectorStore
from tht.config import Config, ConfigError
from tht.db.connection import make_engine
from tht.ports.dwh import DwhAdapter
@@ -32,13 +32,13 @@ def build_vector_store(cfg: Config, *, require_write: bool = False) -> VectorSto
match resource.type:
case "pgvector_direct":
if require_write:
reader = resource.reader or resource.connection
if require_write and resource.writer is None:
raise ConfigError("Vector writer non configurato per pgvector_direct")
dim = cfg.embeddings.dim if cfg.embeddings is not None else 768
return LegacyDirectVectorStore(
make_engine(resource.connection),
schema=resource.connection.db_schema,
dim=dim,
return PgVectorStore(
reader,
resource.writer,
expected_dimension=cfg.embeddings.dim if cfg.embeddings is not None else None,
)
case "thoth_vector_http":
if require_write and resource.writer is None:
@@ -60,15 +60,19 @@ def build_vector_loader(cfg: Config, collection: str):
if cfg.embeddings is None:
raise ConfigError("Embeddings non configurati")
if resource.type == "thoth_vector_http" and resource.writer is not None and (
cfg.profile == "workstation" or resource.direct is None
if (
resource.type == "thoth_vector_http"
and resource.writer is not None
and (cfg.profile == "workstation" or resource.direct is None)
):
from tht.vectorstore.rest_writer import RestVectorWriter
return RestVectorWriter(VectorRestClient(resource.writer), table=collection)
connection = (
resource.connection if resource.type == "pgvector_direct" else resource.direct
resource.writer or resource.connection
if resource.type == "pgvector_direct"
else resource.direct
)
if connection is None:
raise ConfigError("Vector writer non configurato")