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