diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index e44b68006..4b3d75daa 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,4 +1,4 @@ -FROM python:3.11-buster as builder-image +FROM python:3.11 as builder-image RUN apt-get update diff --git a/.devcontainer/devcontainer-lock.json b/.devcontainer/devcontainer-lock.json new file mode 100644 index 000000000..0878ae935 --- /dev/null +++ b/.devcontainer/devcontainer-lock.json @@ -0,0 +1,9 @@ +{ + "features": { + "ghcr.io/devcontainers/features/docker-in-docker": { + "version": "4.0.0", + "resolved": "ghcr.io/devcontainers/features/docker-in-docker@sha256:4fa87399214366e320d489991769c4f3f461e1ffe461f54eea78a41b34945bb5", + "integrity": "sha256:4fa87399214366e320d489991769c4f3f461e1ffe461f54eea78a41b34945bb5" + } + } +} diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 1b13439e5..9a333ad2f 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -20,7 +20,11 @@ "workspaceFolder": "/opt/code/VectorDBBench", // Features to add to the dev container. More info: https://containers.dev/features. - // "features": {}, + "features": { + "ghcr.io/devcontainers/features/docker-in-docker": { + "moby": false + } + }, // Use 'forwardPorts' to make a list of ports inside the container available locally. "forwardPorts": [ diff --git a/install/requirements_py3.11.txt b/install/requirements_py3.11.txt index a6f3f32cf..8519fdb7d 100644 --- a/install/requirements_py3.11.txt +++ b/install/requirements_py3.11.txt @@ -1,5 +1,5 @@ -grpcio==1.53.2 -grpcio-tools==1.53.0 +grpcio>=1.66.2 +grpcio-tools>=1.66.2 qdrant-client pinecone weaviate-client diff --git a/tests/test_pgvector.py b/tests/test_pgvector.py index cdd9461a9..0a7236d48 100644 --- a/tests/test_pgvector.py +++ b/tests/test_pgvector.py @@ -27,6 +27,7 @@ from vectordb_bench.backend.clients import DB from vectordb_bench.backend.clients.pgvector.config import PgVectorHNSWConfig +from vectordb_bench.backend.clients.pgvector.pgvector import PgVector from vectordb_bench.backend.dataset import Dataset, DatasetSource from vectordb_bench.backend.filter import Filter, FilterOp, non_filter from vectordb_bench.backend.runner.concurrent_runner import ConcurrentInsertRunner @@ -84,6 +85,13 @@ def random_embeddings(n: int = COUNT, d: int = DIM) -> list[list[float]]: class TestPgVectorBasic: """Unit tests for the PgVector client (no subprocess).""" + def test_create_connection_installs_vector_extension(self): + conn, cursor = PgVector._create_connection(**DB_CONFIG["connect_config"]) + try: + assert conn.execute("SELECT 1 FROM pg_extension WHERE extname = 'vector'").fetchone() is not None + finally: + cursor.close() + conn.close() def test_insert_and_search(self): db = make_db("test_basic") diff --git a/vectordb_bench/backend/clients/pgvector/pgvector.py b/vectordb_bench/backend/clients/pgvector/pgvector.py index 41060af27..2f651af50 100644 --- a/vectordb_bench/backend/clients/pgvector/pgvector.py +++ b/vectordb_bench/backend/clients/pgvector/pgvector.py @@ -57,10 +57,6 @@ def __init__( # construct basic units self.conn, self.cursor = self._create_connection(**self.connect_config) - # create vector extension - self.cursor.execute("CREATE EXTENSION IF NOT EXISTS vector") - self.conn.commit() - log.info(f"{self.name} config values: {self.connect_config}\n{self.case_config}") if not any( ( @@ -90,6 +86,8 @@ def __init__( @staticmethod def _create_connection(**kwargs) -> tuple[Connection, Cursor]: conn = psycopg.connect(**kwargs) + conn.execute("CREATE EXTENSION IF NOT EXISTS vector") + conn.commit() register_vector(conn) conn.autocommit = False cursor = conn.cursor()