45 lines
1.6 KiB
Go
45 lines
1.6 KiB
Go
package db
|
|
|
|
const MessageTableScript = `
|
|
CREATE TABLE IF NOT EXISTS messages (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
role TEXT NOT NULL,
|
|
seq INTEGER NOT NULL,
|
|
content TEXT NOT NULL,
|
|
conversation_id UUID NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
tsv tsvector generated always as (to_tsvector('english', content)) stored,
|
|
UNIQUE (conversation_id, seq)
|
|
);
|
|
CREATE INDEX on messages using gin (tsv);
|
|
CREATE INDEX on messages (conversation_id, seq);
|
|
`
|
|
const ConversationTableScript = `
|
|
CREATE TABLE IF NOT EXISTS conversations (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
title TEXT,
|
|
title_source TEXT,
|
|
summary TEXT,
|
|
summary_through_seq int default 0,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
)`
|
|
const MessageChunkTableScript = `
|
|
CREATE TABLE IF NOT EXISTS message_chunks (
|
|
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
conversation_id UUID NOT NULL REFERENCES conversations(id) ON DELETE CASCADE,
|
|
message_id UUID NOT NULL REFERENCES messages(id) ON DELETE CASCADE,
|
|
content TEXT NOT NULL,
|
|
content_hash TEXT NOT NULL,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
)`
|
|
|
|
const CreateVectorTableTemplate = `
|
|
CREATE TABLE IF NOT EXISTS %s (
|
|
chunk_id UUID PRIMARY KEY REFERENCES message_chunks(id) ON DELETE CASCADE,
|
|
embedding vector(%d),
|
|
content_hash text not null
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
)`
|