-- Semantic search: embeddings tracking and queue -- Note: actual vectors are stored in the HNSW index file on disk. -- This table tracks which messages have been embedded and by which provider. CREATE TABLE IF NOT EXISTS embeddings ( message_id INTEGER PRIMARY KEY REFERENCES messages(id) ON DELETE CASCADE, provider TEXT NOT NULL, model TEXT NOT NULL, dimensions INTEGER NOT NULL, embedded_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE TABLE IF NOT EXISTS embedding_queue ( id INTEGER PRIMARY KEY AUTOINCREMENT, message_id INTEGER NOT NULL REFERENCES messages(id) ON DELETE CASCADE, status TEXT NOT NULL DEFAULT 'pending' CHECK (status IN ('pending', 'processing', 'completed', 'failed')), attempts INTEGER NOT NULL DEFAULT 0, last_error TEXT, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, completed_at TIMESTAMP ); CREATE UNIQUE INDEX IF NOT EXISTS idx_embedding_queue_message ON embedding_queue(message_id); CREATE INDEX IF NOT EXISTS idx_embedding_queue_status ON embedding_queue(status); INSERT INTO schema_migrations (version) VALUES (5);