* Introduced EmbeddingModel method in Client and Provider interfaces * Updated InsertThought and SearchThoughts methods to handle embedding models * Created embeddings table and updated match_thoughts function for model filtering * Removed embedding column from thoughts table * Adjusted permissions for new embeddings table
35 lines
874 B
PL/PgSQL
35 lines
874 B
PL/PgSQL
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;
|
|
$$;
|