Make pgvector extension optional - use BYTEA fallback for embeddings

This commit is contained in:
Rodrigo Rodriguez (Pragmatismo) 2025-12-29 08:27:57 -03:00
parent c665189279
commit 84fa9abe0a

View file

@ -34,11 +34,24 @@ CREATE TABLE IF NOT EXISTS knowledge_chunks (
chunk_index INTEGER NOT NULL, chunk_index INTEGER NOT NULL,
content TEXT NOT NULL, content TEXT NOT NULL,
token_count INTEGER NOT NULL DEFAULT 0, token_count INTEGER NOT NULL DEFAULT 0,
embedding vector(1536), embedding BYTEA,
metadata JSONB DEFAULT '{}'::jsonb, metadata JSONB DEFAULT '{}'::jsonb,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
); );
-- Add vector column if pgvector extension is available
DO $$
BEGIN
IF EXISTS (SELECT 1 FROM pg_extension WHERE extname = 'vector') THEN
IF NOT EXISTS (SELECT 1 FROM information_schema.columns
WHERE table_name = 'knowledge_chunks' AND column_name = 'embedding_vector') THEN
EXECUTE 'ALTER TABLE knowledge_chunks ADD COLUMN embedding_vector vector(1536)';
END IF;
END IF;
EXCEPTION WHEN OTHERS THEN
RAISE NOTICE 'Could not add vector column: %', SQLERRM;
END $$;
-- Indexes for knowledge_chunks -- Indexes for knowledge_chunks
CREATE INDEX IF NOT EXISTS idx_knowledge_chunks_source_id ON knowledge_chunks(source_id); CREATE INDEX IF NOT EXISTS idx_knowledge_chunks_source_id ON knowledge_chunks(source_id);
CREATE INDEX IF NOT EXISTS idx_knowledge_chunks_chunk_index ON knowledge_chunks(chunk_index); CREATE INDEX IF NOT EXISTS idx_knowledge_chunks_chunk_index ON knowledge_chunks(chunk_index);
@ -52,8 +65,8 @@ CREATE INDEX IF NOT EXISTS idx_knowledge_chunks_content_fts
DO $$ DO $$
BEGIN BEGIN
IF EXISTS (SELECT 1 FROM pg_extension WHERE extname = 'vector') THEN IF EXISTS (SELECT 1 FROM pg_extension WHERE extname = 'vector') THEN
EXECUTE 'CREATE INDEX IF NOT EXISTS idx_knowledge_chunks_embedding EXECUTE 'CREATE INDEX IF NOT EXISTS idx_knowledge_chunks_embedding_vector
ON knowledge_chunks USING ivfflat (embedding vector_cosine_ops) WITH (lists = 100)'; ON knowledge_chunks USING ivfflat (embedding_vector vector_cosine_ops) WITH (lists = 100)';
END IF; END IF;
EXCEPTION WHEN OTHERS THEN EXCEPTION WHEN OTHERS THEN
RAISE NOTICE 'Could not create vector index: %', SQLERRM; RAISE NOTICE 'Could not create vector index: %', SQLERRM;