AumCore-AI / core /memory_db.py
AumCoreAI's picture
Update core/memory_db.py
5e12eac verified
# memory_db.py - TiDB Integration
import pymysql
import os
from datetime import datetime
class TiDBMemory:
def __init__(self):
self.connection = None
self.connect()
def connect(self):
try:
self.connection = pymysql.connect(
host=os.getenv("TIDB_HOST", "gateway01.ap-southeast-1.prod.aws.tidbcloud.com"),
port=int(os.getenv("TIDB_PORT", 4000)),
user=os.getenv("TIDB_USER", "2Rg6kfo2rNEB3PN.root"),
password=os.getenv("TIDB_PASSWORD", "9JJabiRfo0WpH9FP"),
database=os.getenv("TIDB_DATABASE", "test"),
ssl={'ssl': {'ca': ''}}
)
self.create_tables()
print("✅ TiDB connected successfully")
except Exception as e:
print(f"❌ TiDB connection failed: {e}")
self.connection = None
def create_tables(self):
if not self.connection:
return
with self.connection.cursor() as cursor:
# Create chat_history table
cursor.execute("""
CREATE TABLE IF NOT EXISTS chat_history (
id INT AUTO_INCREMENT PRIMARY KEY,
user_input TEXT,
ai_response MEDIUMTEXT,
language_mode VARCHAR(20),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
""")
# Check if language_mode column exists, if not add it
try:
cursor.execute("SHOW COLUMNS FROM chat_history LIKE 'language_mode'")
if not cursor.fetchone():
print("⚠️ Adding missing 'language_mode' column to chat_history")
cursor.execute("ALTER TABLE chat_history ADD COLUMN language_mode VARCHAR(20) DEFAULT 'en'")
except Exception as e:
print(f"⚠️ Column check failed: {e}")
cursor.execute("""
CREATE TABLE IF NOT EXISTS code_snippets (
id INT AUTO_INCREMENT PRIMARY KEY,
code_type VARCHAR(100),
code_content LONGTEXT,
description TEXT,
usage_count INT DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
""")
self.connection.commit()
def save_chat(self, user_input, ai_response, language_mode="en"):
if not self.connection:
return False
try:
with self.connection.cursor() as cursor:
# Try with language_mode column
try:
cursor.execute(
"INSERT INTO chat_history (user_input, ai_response, language_mode) VALUES (%s, %s, %s)",
(user_input, ai_response, language_mode)
)
except pymysql.err.OperationalError as e:
# If language_mode column doesn't exist, try without it
if "Unknown column 'language_mode'" in str(e):
print("⚠️ language_mode column missing, inserting without it")
cursor.execute(
"INSERT INTO chat_history (user_input, ai_response) VALUES (%s, %s)",
(user_input, ai_response)
)
else:
raise e
self.connection.commit()
return True
except Exception as e:
print(f"❌ Save chat error: {e}")
return False
def get_recent_chats(self, limit=10):
if not self.connection:
return []
try:
with self.connection.cursor() as cursor:
# Try with language_mode column
try:
cursor.execute(
"SELECT user_input, ai_response, language_mode FROM chat_history ORDER BY created_at DESC LIMIT %s",
(limit,)
)
return cursor.fetchall()
except pymysql.err.OperationalError as e:
# If language_mode column doesn't exist, select without it
if "Unknown column 'language_mode'" in str(e):
print("⚠️ language_mode column missing, selecting without it")
cursor.execute(
"SELECT user_input, ai_response FROM chat_history ORDER BY created_at DESC LIMIT %s",
(limit,)
)
# Add default language_mode for compatibility
rows = cursor.fetchall()
return [(row[0], row[1], "en") for row in rows]
else:
raise e
except Exception as e:
print(f"❌ Get chats error: {e}")
return []
def save_code_snippet(self, code_type, code_content, description):
if not self.connection:
return False
try:
with self.connection.cursor() as cursor:
cursor.execute(
"""INSERT INTO code_snippets (code_type, code_content, description)
VALUES (%s, %s, %s)""",
(code_type, code_content, description)
)
self.connection.commit()
return True
except Exception as e:
print(f"❌ Save code error: {e}")
return False
# Global instance
tidb_memory = TiDBMemory()