You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
1.9 KiB
41 lines
1.9 KiB
-- Enable pgvector extension |
|
CREATE EXTENSION IF NOT EXISTS vector; |
|
|
|
-- Table: indexed code chunks dari monorepo |
|
CREATE TABLE IF NOT EXISTS code_chunks ( |
|
id BIGSERIAL PRIMARY KEY, |
|
repo TEXT NOT NULL, -- nama repo/subproject, e.g. 'server-connection' |
|
file_path TEXT NOT NULL, -- path relatif dari root monorepo |
|
language TEXT, -- php, ts, tsx, py, md, dll |
|
start_line INTEGER, |
|
end_line INTEGER, |
|
content TEXT NOT NULL, -- teks chunk asli |
|
embedding vector(768), -- nomic-embed-text output |
|
indexed_at TIMESTAMPTZ DEFAULT NOW(), |
|
checksum TEXT -- MD5 file untuk deteksi perubahan |
|
); |
|
|
|
-- Table: user interaction memory |
|
CREATE TABLE IF NOT EXISTS user_memory ( |
|
id BIGSERIAL PRIMARY KEY, |
|
username TEXT NOT NULL, -- LDAP username |
|
pattern TEXT NOT NULL, -- kategori: 'email_izin', 'coding_php', dll |
|
context JSONB, -- detail konteks (atasan, gaya, dll) |
|
embedding vector(768), -- embedding dari interaksi |
|
created_at TIMESTAMPTZ DEFAULT NOW(), |
|
updated_at TIMESTAMPTZ DEFAULT NOW() |
|
); |
|
|
|
-- Index HNSW untuk similarity search (lebih cepat dari IVFFlat) |
|
CREATE INDEX IF NOT EXISTS code_chunks_embedding_idx |
|
ON code_chunks USING hnsw (embedding vector_cosine_ops) |
|
WITH (m = 16, ef_construction = 64); |
|
|
|
CREATE INDEX IF NOT EXISTS user_memory_embedding_idx |
|
ON user_memory USING hnsw (embedding vector_cosine_ops) |
|
WITH (m = 16, ef_construction = 64); |
|
|
|
-- Index biasa |
|
CREATE INDEX IF NOT EXISTS code_chunks_repo_idx ON code_chunks (repo); |
|
CREATE INDEX IF NOT EXISTS code_chunks_file_idx ON code_chunks (file_path); |
|
CREATE INDEX IF NOT EXISTS user_memory_username_idx ON user_memory (username);
|
|
|