first commit
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
import aiosqlite
|
||||
import os
|
||||
|
||||
DB_PATH = os.getenv("DB_PATH", "data/chat.db")
|
||||
|
||||
|
||||
async def init_db():
|
||||
os.makedirs(os.path.dirname(DB_PATH), exist_ok=True)
|
||||
async with aiosqlite.connect(DB_PATH) as db:
|
||||
await db.executescript("""
|
||||
CREATE TABLE IF NOT EXISTS sessions (
|
||||
session_id TEXT PRIMARY KEY,
|
||||
persona_id TEXT DEFAULT 'default',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
title TEXT DEFAULT 'Новый чат'
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS messages (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
session_id TEXT NOT NULL,
|
||||
role TEXT NOT NULL,
|
||||
content TEXT NOT NULL,
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (session_id) REFERENCES sessions(session_id)
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS idx_messages_session
|
||||
ON messages(session_id);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS personas (
|
||||
persona_id TEXT PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
emoji TEXT DEFAULT '🤖',
|
||||
description TEXT DEFAULT '',
|
||||
prompt TEXT NOT NULL,
|
||||
custom INTEGER DEFAULT 1,
|
||||
sd_enabled INTEGER DEFAULT 0,
|
||||
lora_name TEXT DEFAULT '',
|
||||
lora_weight REAL DEFAULT 0.8,
|
||||
appearance_tags TEXT DEFAULT ''
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS characters (
|
||||
card_id TEXT PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
description TEXT DEFAULT '',
|
||||
personality TEXT DEFAULT '',
|
||||
scenario TEXT DEFAULT '',
|
||||
first_mes TEXT DEFAULT '',
|
||||
mes_example TEXT DEFAULT '',
|
||||
raw_json TEXT NOT NULL,
|
||||
lora_name TEXT DEFAULT '',
|
||||
lora_weight REAL DEFAULT 0.8,
|
||||
appearance_tags TEXT DEFAULT '',
|
||||
lorebook_json TEXT DEFAULT '[]',
|
||||
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
""")
|
||||
await _migrate_messages_columns(db)
|
||||
await db.commit()
|
||||
|
||||
|
||||
async def _migrate_messages_columns(db):
|
||||
async with db.execute("PRAGMA table_info(messages)") as cur:
|
||||
cols = {row[1] for row in await cur.fetchall()}
|
||||
if "image_prompt" not in cols:
|
||||
await db.execute("ALTER TABLE messages ADD COLUMN image_prompt TEXT")
|
||||
if "image_path" not in cols:
|
||||
await db.execute("ALTER TABLE messages ADD COLUMN image_path TEXT")
|
||||
Reference in New Issue
Block a user