WebashalarForML's picture
Upload 178 files
330b6e4 verified
"""Database utilities and initialization for the chat agent."""
import os
from flask import Flask
from chat_agent.models import db, ChatSession, Message, LanguageContext
def init_database(app: Flask):
"""Initialize the database with the Flask app."""
db.init_app(app)
with app.app_context():
# Create all tables
db.create_all()
print("Database tables created successfully")
def create_tables():
"""Create all database tables."""
db.create_all()
print("All database tables created")
def drop_tables():
"""Drop all database tables."""
db.drop_all()
print("All database tables dropped")
def reset_database():
"""Reset the database by dropping and recreating all tables."""
print("Resetting database...")
drop_tables()
create_tables()
print("Database reset completed")
def get_database_info():
"""Get information about the current database."""
try:
# Get table names
inspector = db.inspect(db.engine)
tables = inspector.get_table_names()
info = {
'database_url': str(db.engine.url),
'tables': tables,
'table_count': len(tables)
}
# Get row counts for each table
table_counts = {}
for table in tables:
try:
result = db.session.execute(f"SELECT COUNT(*) FROM {table}")
count = result.scalar()
table_counts[table] = count
except Exception as e:
table_counts[table] = f"Error: {e}"
info['table_counts'] = table_counts
return info
except Exception as e:
return {'error': str(e)}
def check_database_connection():
"""Check if database connection is working."""
try:
# Try to execute a simple query
db.session.execute('SELECT 1')
return True
except Exception as e:
print(f"Database connection failed: {e}")
return False
class DatabaseManager:
"""Database management utilities."""
def __init__(self, app=None):
"""Initialize database manager."""
self.app = app
if app:
self.init_app(app)
def init_app(self, app):
"""Initialize with Flask app."""
self.app = app
init_database(app)
def create_sample_data(self):
"""Create sample data for testing."""
from uuid import uuid4
from datetime import datetime
# Create a sample user session
user_id = uuid4()
session = ChatSession.create_session(user_id=user_id, language='python')
# Create sample messages
user_message = Message.create_user_message(
session_id=session.id,
content="Hello! Can you help me with Python?",
language='python'
)
assistant_message = Message.create_assistant_message(
session_id=session.id,
content="Hello! I'd be happy to help you with Python programming. What would you like to learn about?",
language='python',
metadata={'response_time': 0.5}
)
# Create language context
context = LanguageContext.create_context(
session_id=session.id,
language='python'
)
# Add to database
db.session.add_all([user_message, assistant_message])
db.session.commit()
print(f"Sample data created:")
print(f"- Session ID: {session.id}")
print(f"- User ID: {user_id}")
print(f"- Messages: 2")
print(f"- Language Context: Python")
return {
'session_id': session.id,
'user_id': user_id,
'message_count': 2
}
def cleanup_old_sessions(self, hours=24):
"""Clean up old inactive sessions."""
count = ChatSession.cleanup_expired_sessions(timeout_seconds=hours * 3600)
print(f"Cleaned up {count} expired sessions")
return count
def get_stats(self):
"""Get database statistics."""
stats = {
'total_sessions': db.session.query(ChatSession).count(),
'active_sessions': db.session.query(ChatSession).filter(ChatSession.is_active == True).count(),
'total_messages': db.session.query(Message).count(),
'total_contexts': db.session.query(LanguageContext).count(),
}
# Get language distribution
from sqlalchemy import func
language_stats = (db.session.query(ChatSession.language, func.count(ChatSession.id))
.group_by(ChatSession.language)
.all())
stats['languages'] = dict(language_stats)
return stats