LCA-LLM/codeinterpreter/db_manager.py

99 lines
3.5 KiB
Python

import sqlite3
from datetime import datetime
class DBManager:
def __init__(self, db_name='chat.db'):
self.conn = sqlite3.connect(db_name)
self.cursor = self.conn.cursor()
self._initialize_database()
def _initialize_database(self):
self.execute_query('''
CREATE TABLE IF NOT EXISTS chats (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL DEFAULT 'New Chat',
created_at DATETIME NOT NULL,
updated_at DATETIME NOT NULL
)
''')
self.execute_query('''
CREATE TABLE IF NOT EXISTS chat_messages (
id INTEGER PRIMARY KEY AUTOINCREMENT,
chat_id INTEGER,
category TEXT,
content TEXT,
created_at DATETIME NOT NULL,
updated_at DATETIME NOT NULL,
FOREIGN KEY(chat_id) REFERENCES chats(id)
)
''')
self.execute_query('''
CREATE TABLE IF NOT EXISTS generated_files (
id INTEGER PRIMARY KEY AUTOINCREMENT,
chat_message_id INTEGER,
name TEXT,
content BLOB,
created_at DATETIME NOT NULL,
updated_at DATETIME NOT NULL,
FOREIGN KEY(chat_message_id) REFERENCES chat_messages(id)
)
''')
def execute_query(self, query, params=()):
self.cursor.execute(query, params)
self.conn.commit()
def fetch_query(self, query, params=()):
self.cursor.execute(query, params)
return self.cursor.fetchall()
# Chat Operations
def save_chat(self, title):
now = datetime.now()
self.execute_query('''
INSERT INTO chats (title, created_at, updated_at)
VALUES (?, ?, ?)
''', (title, now, now))
return self.cursor.lastrowid
def update_chat_title(self, chat_id, title):
now = datetime.now()
self.execute_query('''
UPDATE chats
SET title = ?, updated_at = ?
WHERE id = ?
''', (title, now, chat_id))
def get_chats(self):
return self.fetch_query("SELECT * FROM chats ORDER BY updated_at DESC")
def get_chat(self, chat_id):
return self.fetch_query("SELECT * FROM chats WHERE id = ?", (chat_id,))[0]
# Chat Message Operations
def save_message(self, chat_id, category, content):
now = datetime.now()
self.execute_query('''
INSERT INTO chat_messages (chat_id, category, content, created_at, updated_at)
VALUES (?, ?, ?, ?, ?)
''', (chat_id, category, content, now, now))
return self.cursor.lastrowid
def get_chat_messages(self, chat_id):
return self.fetch_query("SELECT * FROM chat_messages WHERE chat_id = ?", (chat_id,))
def get_chat_message(self, chat_message_id):
return self.fetch_query("SELECT * FROM chat_messages WHERE id = ?", (chat_message_id,))[0]
# File Operations
def save_file(self, chat_message_id, name, content):
now = datetime.now()
self.execute_query('''
INSERT INTO generated_files (chat_message_id, name, content, created_at, updated_at)
VALUES (?, ?, ?, ?, ?)
''', (chat_message_id, name, content, now, now))
def get_generated_files(self, chat_message_id):
return self.fetch_query("SELECT * FROM generated_files WHERE chat_message_id = ?", (chat_message_id,))