feat(llm): add LLM integration instructions and handler

* Serve LLM instructions at `/llm`
* Include markdown content for memory instructions
* Update README with LLM integration details
* Add tests for LLM instructions handler
* Modify database migrations to use GUIDs for thoughts and projects
This commit is contained in:
Hein
2026-03-25 18:02:42 +02:00
parent cebef3a07c
commit 8d0a91a961
16 changed files with 600 additions and 41 deletions

View File

@@ -1,10 +1,12 @@
create table if not exists thoughts (
id uuid default gen_random_uuid() primary key,
content text not null,
embedding vector(1536),
metadata jsonb default '{}'::jsonb,
id bigserial primary key,
guid uuid not null default gen_random_uuid(),
content text not null,
embedding vector(1536),
metadata jsonb default '{}'::jsonb,
created_at timestamptz default now(),
updated_at timestamptz default now()
updated_at timestamptz default now(),
constraint thoughts_guid_unique unique (guid)
);
create index if not exists thoughts_embedding_hnsw_idx

View File

@@ -1,12 +1,14 @@
create table if not exists projects (
id uuid default gen_random_uuid() primary key,
name text not null unique,
description text,
created_at timestamptz default now(),
last_active_at timestamptz default now()
id bigserial primary key,
guid uuid not null default gen_random_uuid(),
name text not null unique,
description text,
created_at timestamptz default now(),
last_active_at timestamptz default now(),
constraint projects_guid_unique unique (guid)
);
alter table thoughts add column if not exists project_id uuid references projects(id);
alter table thoughts add column if not exists project_id uuid references projects(guid);
alter table thoughts add column if not exists archived_at timestamptz;
create index if not exists thoughts_project_id_idx on thoughts (project_id);

View File

@@ -1,7 +1,7 @@
create table if not exists thought_links (
from_id uuid references thoughts(id) on delete cascade,
to_id uuid references thoughts(id) on delete cascade,
relation text not null,
from_id bigint not null references thoughts(id) on delete cascade,
to_id bigint not null references thoughts(id) on delete cascade,
relation text not null,
created_at timestamptz default now(),
primary key (from_id, to_id, relation)
);

View File

@@ -16,7 +16,7 @@ as $$
begin
return query
select
t.id,
t.guid,
t.content,
t.metadata,
1 - (t.embedding <=> query_embedding) as similarity,

View File

@@ -1,7 +1,7 @@
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,
thought_id uuid not null references thoughts(guid) on delete cascade,
model text not null,
dim int not null,
embedding vector not null,

View File

@@ -17,13 +17,13 @@ as $$
begin
return query
select
t.id,
t.guid,
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
join embeddings e on e.thought_id = t.guid
where 1 - (e.embedding <=> query_embedding) > match_threshold
and t.archived_at is null
and (embedding_model = '' or e.model = embedding_model)