Spaces:
Sleeping
Sleeping
| import sqlite3 | |
| import json | |
| import os | |
| import logging | |
| logger = logging.getLogger(__name__) | |
| base_dir = os.path.dirname(os.path.abspath(__file__)) | |
| DB_DIR = os.path.join(base_dir, "data") | |
| DB_PATH = os.path.join(DB_DIR, "chat_memory.db") | |
| os.makedirs(DB_DIR, exist_ok=True) | |
| try: | |
| conn = sqlite3.connect(DB_PATH) | |
| c = conn.cursor() | |
| c.execute(''' | |
| CREATE TABLE IF NOT EXISTS memory ( | |
| session_id TEXT PRIMARY KEY, | |
| history TEXT | |
| ) | |
| ''') | |
| conn.commit() | |
| conn.close() | |
| logger.info(f"✅ تم إنشاء/فتح قاعدة البيانات في: {DB_PATH}") | |
| except sqlite3.Error as e: | |
| logger.error(f"❌ خطأ في إنشاء قاعدة البيانات: {str(e)}") | |
| def get_history(session_id: str): | |
| try: | |
| conn = sqlite3.connect(DB_PATH) | |
| c = conn.cursor() | |
| c.execute("SELECT history FROM memory WHERE session_id = ?", (session_id,)) | |
| row = c.fetchone() | |
| conn.close() | |
| if not row or not isinstance(row[0], str): | |
| return [] | |
| data = json.loads(row[0]) | |
| if isinstance(data, list) and all(isinstance(pair, list) and len(pair) == 2 for pair in data): | |
| return data | |
| else: | |
| logger.warning(f"⚠️ تم تجاهل تاريخ غير متوافق: {type(data)}") | |
| return [] | |
| except Exception as e: | |
| logger.error(f"❌ خطأ أثناء استرجاع التاريخ: {str(e)}") | |
| return [] | |
| def save_history(session_id: str, history: list): | |
| try: | |
| conn = sqlite3.connect(DB_PATH) | |
| c = conn.cursor() | |
| c.execute( | |
| "REPLACE INTO memory (session_id, history) VALUES (?, ?)", | |
| (session_id, json.dumps(history)) | |
| ) | |
| conn.commit() | |
| conn.close() | |
| logger.debug(f"💾 تم حفظ التاريخ للجلسة: {session_id}") | |
| except Exception as e: | |
| logger.error(f"❌ خطأ أثناء حفظ التاريخ: {str(e)}") |