feat(embeddings): add embedding model support and related changes
* 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
This commit is contained in:
@@ -1,5 +0,0 @@
|
||||
-- Grant these permissions to the database role used by the application.
|
||||
-- Replace amcs_user with the actual role in your deployment before applying.
|
||||
grant select, insert, update, delete on table public.thoughts to amcs_user;
|
||||
grant select, insert, update, delete on table public.projects to amcs_user;
|
||||
grant select, insert, update, delete on table public.thought_links to amcs_user;
|
||||
16
migrations/007_embeddings_table.sql
Normal file
16
migrations/007_embeddings_table.sql
Normal file
@@ -0,0 +1,16 @@
|
||||
create table if not exists embeddings (
|
||||
id bigserial primary key,
|
||||
guid uuid not null default gen_random_uuid(),
|
||||
thought_id uuid not null references thoughts(id) on delete cascade,
|
||||
model text not null,
|
||||
dim int not null,
|
||||
embedding vector not null,
|
||||
created_at timestamptz default now(),
|
||||
updated_at timestamptz default now(),
|
||||
constraint embeddings_guid_unique unique (guid),
|
||||
constraint embeddings_thought_model_unique unique (thought_id, model)
|
||||
);
|
||||
|
||||
create index if not exists embeddings_thought_id_idx on embeddings (thought_id);
|
||||
|
||||
alter table thoughts drop column if exists embedding;
|
||||
34
migrations/008_update_match_thoughts.sql
Normal file
34
migrations/008_update_match_thoughts.sql
Normal file
@@ -0,0 +1,34 @@
|
||||
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;
|
||||
$$;
|
||||
7
migrations/009_rls_and_grants.sql
Normal file
7
migrations/009_rls_and_grants.sql
Normal file
@@ -0,0 +1,7 @@
|
||||
-- Grant these permissions to the database role used by the application.
|
||||
-- Replace amcs_user with the actual role in your deployment before applying.
|
||||
grant ALL ON TABLE public.thoughts to amcs;
|
||||
grant ALL ON TABLE public.projects to amcs;
|
||||
grant ALL ON TABLE public.thought_links to amcs;
|
||||
grant ALL ON TABLE public.embeddings to amcs;
|
||||
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO amcs;
|
||||
Reference in New Issue
Block a user