JatsTheAIGen's picture
Initial commit V1
66dbebd
"""
Database initialization and management
"""
import sqlite3
import logging
import os
from pathlib import Path
logger = logging.getLogger(__name__)
class DatabaseManager:
def __init__(self, db_path: str = "sessions.db"):
self.db_path = db_path
self.connection = None
self._init_db()
def _init_db(self):
"""Initialize database with required tables"""
try:
# Create database directory if needed
os.makedirs(os.path.dirname(self.db_path), exist_ok=True)
self.connection = sqlite3.connect(self.db_path, check_same_thread=False)
self.connection.row_factory = sqlite3.Row
# Create tables
self._create_tables()
logger.info(f"Database initialized at {self.db_path}")
except Exception as e:
logger.error(f"Database initialization failed: {e}")
# Fallback to in-memory database
self.connection = sqlite3.connect(":memory:", check_same_thread=False)
self._create_tables()
logger.info("Using in-memory database as fallback")
def _create_tables(self):
"""Create required database tables"""
cursor = self.connection.cursor()
# Sessions table
cursor.execute("""
CREATE TABLE IF NOT EXISTS sessions (
session_id TEXT PRIMARY KEY,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
last_activity TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
context_data TEXT,
user_metadata TEXT
)
""")
# Interactions table
cursor.execute("""
CREATE TABLE IF NOT EXISTS interactions (
interaction_id TEXT PRIMARY KEY,
session_id TEXT REFERENCES sessions(session_id),
user_input TEXT NOT NULL,
agent_trace TEXT,
final_response TEXT,
processing_time INTEGER,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
""")
self.connection.commit()
logger.info("Database tables created successfully")
def get_connection(self):
"""Get database connection"""
return self.connection
def close(self):
"""Close database connection"""
if self.connection:
self.connection.close()
logger.info("Database connection closed")
# Global database instance
db_manager = None
def init_database(db_path: str = "sessions.db"):
"""Initialize global database instance"""
global db_manager
if db_manager is None:
db_manager = DatabaseManager(db_path)
return db_manager
def get_db():
"""Get database connection"""
global db_manager
if db_manager is None:
init_database()
return db_manager.get_connection()
# Initialize database on import
init_database()