import aiosqlite from config import settings SCHEMA = """ CREATE TABLE IF NOT EXISTS chat_sessions ( id TEXT PRIMARY KEY, title TEXT, model TEXT NOT NULL, role TEXT NOT NULL DEFAULT 'guest', created_at REAL NOT NULL ); CREATE TABLE IF NOT EXISTS chat_messages ( id TEXT PRIMARY KEY, session_id TEXT NOT NULL REFERENCES chat_sessions(id), role TEXT NOT NULL, content TEXT NOT NULL, created_at REAL NOT NULL ); CREATE TABLE IF NOT EXISTS usage_logs ( id INTEGER PRIMARY KEY AUTOINCREMENT, backend_id TEXT NOT NULL, model TEXT NOT NULL, prompt_tokens INTEGER DEFAULT 0, completion_tokens INTEGER DEFAULT 0, latency_ms REAL DEFAULT 0, user_role TEXT NOT NULL DEFAULT 'guest', created_at REAL NOT NULL ); CREATE INDEX IF NOT EXISTS idx_messages_session ON chat_messages(session_id); CREATE INDEX IF NOT EXISTS idx_usage_created ON usage_logs(created_at); """ async def init_db(): """Initialize SQLite database with WAL mode and schema.""" async with aiosqlite.connect(settings.db_path) as db: await db.execute("PRAGMA journal_mode=WAL") await db.executescript(SCHEMA) await db.commit() async def get_db() -> aiosqlite.Connection: """Get a database connection.""" db = await aiosqlite.connect(settings.db_path) await db.execute("PRAGMA journal_mode=WAL") return db