create or replace function match_thoughts( query_embedding vector, match_threshold float default 0.7, match_count int default 10, filter jsonb default '{}'::jsonb, embedding_model text default '' ) returns table ( id uuid, content text, metadata jsonb, similarity float, created_at timestamptz ) language plpgsql as $$ begin return query select t.id, t.content, t.metadata, 1 - (e.embedding <=> query_embedding) as similarity, t.created_at from thoughts t join embeddings e on e.thought_id = t.id where 1 - (e.embedding <=> query_embedding) > match_threshold and t.archived_at is null and (embedding_model = '' or e.model = embedding_model) and (filter = '{}'::jsonb or t.metadata @> filter) order by e.embedding <=> query_embedding limit match_count; end; $$;