Codifies the project's dual vector search systems (Memory Store for agent domain knowledge, RAG Pipeline for document retrieval), the multi-provider embedding abstraction, pgvector indexing, hybrid search scoring, and chunking strategies. All patterns are built on Supabase/PostgreSQL with pgvector.
Description
Codifies pgvector embedding queries, similarity search, hybrid search, and multi-provider embedding generation for NodeJS-Starter-V1's Supabase/PostgreSQL stack, covering the Memory Store and RAG Pipeline vector infrastructure, indexing strategies, and chunking patterns.
When to Apply
Positive Triggers
Adding semantic search to new data types
Creating or modifying embedding generation logic
Implementing similarity queries or nearest-neighbour lookups
Configuring chunking strategies for document ingestion
Key parameters: match_threshold (0.0–1.0, cosine similarity minimum), match_count (max results). Domain and user filters are applied server-side in the RPC function.
Hybrid Search (RAG Pipeline)
RAGStore.hybrid_search() combines vector similarity with keyword matching using configurable weights:
CREATE TABLE documents (
id UUID PRIMARY KEYDEFAULT gen_random_uuid(),
title VARCHAR(500) NOT NULL,
content TEXT NOT NULL,
embedding VECTOR(1536),
-- ... other columns
);
CREATE INDEX idx_documents_embedding ON documents USING ivfflat (embedding vector_cosine_ops);
domain_memories Table
Stores agent memories with embeddings for semantic retrieval. Accessed via MemoryStore class.
document_chunks Table
Stores RAG pipeline chunks with embeddings. Accessed via RAGStore class. Includes heading_hierarchy, summary, entities, keywords, and classification_tags for enriched retrieval.
RPC Functions
Function
Purpose
find_similar_memories
Cosine similarity search on domain_memories with domain/user filters
hybrid_search
Combined vector + keyword search on document_chunks
prune_stale_memories
Delete low-relevance or expired memories
increment_memory_access
Increment access count on retrieval
Anti-Patterns
Anti-Pattern
Why It Fails
Correct Approach
Client-side similarity computation
Downloads all vectors, O(n) per query, no index usage
PostgreSQL RPC with pgvector index
Mixing embedding dimensions in one column
VECTOR(1536) rejects 768-dim vectors
Standardise dimension or use separate columns
No similarity threshold
Returns noise matches below 0.3
Always set match_threshold (0.5–0.7)
Embedding at query time without caching
Re-embeds identical queries
Cache query embeddings for repeated searches
IVFFlat with probes=1 on large datasets
Poor recall (misses relevant results)
Increase probes or migrate to HNSW
Storing embeddings without indexing
Sequential scan on every query
Create IVFFlat or HNSW index
Hardcoding OpenAI API calls
Breaks local development, vendor lock-in
Use EmbeddingProvider abstraction
Chunking without overlap
Loses context at chunk boundaries
Set chunk_overlap=50 minimum
Checklist for New Vector Search Features
Embedding
Uses EmbeddingProvider abstraction (never direct API calls)
Dimension matches existing index (1536 default)
Handles provider unavailability (fallback or graceful error)
Search
Hybrid search by default (vector + keyword)
Similarity threshold configured (not unbounded)
Server-side computation via PostgreSQL RPC
Results include similarity scores for transparency
Indexing
pgvector index created on embedding column
Distance function matches query pattern (cosine for normalised)
Index type appropriate for dataset size (IVFFlat < 10K, HNSW >= 10K)
Data Quality
Chunking strategy matches content type
Chunk overlap prevents boundary information loss
Stale/expired entries have pruning mechanism
Integration
Search latency instrumented via metrics-collector
Errors use error-taxonomy codes
Queries logged via structured-logging
Response Format
[AGENT_ACTIVATED]: Vector Search
[PHASE]: {Design | Implementation | Review}
[STATUS]: {in_progress | complete}
{vector search analysis or implementation guidance}
[NEXT_ACTION]: {what to do next}
Integration Points
Council of Logic
Turing: Verify search is O(log n) via index, not O(n) sequential scan
Shannon: Embedding dimension and chunk size tuned for information density
Metrics Collector
search_query_duration_ms histogram for search latency
search_result_count gauge for average results per query
embedding_generation_duration_ms histogram for provider latency
Structured Logging
Debug-level embedding generation logs (model, dimensions, text length)
Info-level search execution logs (query, domain, result count)
Error Taxonomy
DATA_VECTOR_PROVIDER_UNAVAILABLE (503) — embedding provider down