- internal/llama/template.go: ChatML/Llama3 template engine with stop tokens - internal/agent/reasoning.go: parse <think>/<reasoning> tags from LLM output - companion/promptbuilder.go: output structured BuildResult, add date/time context - agent/agent.go: wire templates + reasoning split into message loop - storage: add reasoning TEXT column to messages table + migration - channel/tui.go: collapsible reasoning (tab toggle), mouse scroll, polished dimmed style - config: CHAT_TEMPLATE env var (chatml|llama3|none) - plan.md: mark Phase 2 complete, add themes TODO
118 lines
3.3 KiB
Go
118 lines
3.3 KiB
Go
package storage
|
|
|
|
var migrations = []string{
|
|
divacodeSchema,
|
|
companionSchema,
|
|
addReasoningColumn,
|
|
}
|
|
|
|
const divacodeSchema = `
|
|
CREATE TABLE IF NOT EXISTS conversations (
|
|
id TEXT PRIMARY KEY,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS messages (
|
|
id TEXT PRIMARY KEY,
|
|
conversation_id TEXT NOT NULL REFERENCES conversations(id),
|
|
role TEXT NOT NULL CHECK(role IN ('user','assistant','system','tool')),
|
|
content TEXT NOT NULL,
|
|
reasoning TEXT,
|
|
tool_call TEXT,
|
|
token_count INTEGER,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_messages_conversation ON messages(conversation_id);
|
|
|
|
CREATE TABLE IF NOT EXISTS context_state (
|
|
conversation_id TEXT PRIMARY KEY REFERENCES conversations(id),
|
|
token_count INTEGER NOT NULL DEFAULT 0,
|
|
summary TEXT
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS memories (
|
|
id TEXT PRIMARY KEY,
|
|
content TEXT NOT NULL,
|
|
embedding BLOB,
|
|
source TEXT,
|
|
importance REAL DEFAULT 0.5,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
last_accessed TEXT
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_memories_importance ON memories(importance);
|
|
CREATE INDEX IF NOT EXISTS idx_memories_created ON memories(created_at);
|
|
`
|
|
|
|
const companionSchema = `
|
|
CREATE TABLE IF NOT EXISTS personality_traits (
|
|
id TEXT PRIMARY KEY,
|
|
trait TEXT NOT NULL UNIQUE,
|
|
value REAL NOT NULL DEFAULT 0.5,
|
|
min_value REAL NOT NULL DEFAULT 0.0,
|
|
max_value REAL NOT NULL DEFAULT 1.0,
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS relationship_metrics (
|
|
id TEXT PRIMARY KEY,
|
|
metric TEXT NOT NULL UNIQUE,
|
|
value REAL NOT NULL DEFAULT 0.0,
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS shared_topics (
|
|
id TEXT PRIMARY KEY,
|
|
topic TEXT NOT NULL UNIQUE,
|
|
count INTEGER NOT NULL DEFAULT 1,
|
|
last_discussed TEXT
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS inside_jokes (
|
|
id TEXT PRIMARY KEY,
|
|
joke TEXT NOT NULL,
|
|
context TEXT,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS diary_entries (
|
|
id TEXT PRIMARY KEY,
|
|
date TEXT NOT NULL,
|
|
summary TEXT NOT NULL,
|
|
mood TEXT,
|
|
topics TEXT,
|
|
observations TEXT,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS observations (
|
|
id TEXT PRIMARY KEY,
|
|
content TEXT NOT NULL,
|
|
confidence REAL DEFAULT 0.5,
|
|
category TEXT,
|
|
applied INTEGER DEFAULT 0,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS agent_promises (
|
|
id TEXT PRIMARY KEY,
|
|
promise TEXT NOT NULL,
|
|
context TEXT,
|
|
fulfilled INTEGER DEFAULT 0,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
deadline TEXT
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS agent_strategies (
|
|
id TEXT PRIMARY KEY,
|
|
situation TEXT NOT NULL,
|
|
strategy TEXT NOT NULL,
|
|
outcome TEXT,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
);
|
|
`
|
|
|
|
const addReasoningColumn = `ALTER TABLE messages ADD COLUMN reasoning TEXT;`
|