Files
wiki/tasks/bytik/chat_history.py
2026-04-15 01:00:01 +03:00

46 lines
1.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import json
import os
import logging
from typing import List, Dict
logger = logging.getLogger(__name__)
HISTORY_DIR = "data/chat_history"
MAX_MESSAGES = 10
os.makedirs(HISTORY_DIR, exist_ok=True)
def _get_file_path(user_id: int) -> str:
return os.path.join(HISTORY_DIR, f"{user_id}.json")
def load_history(user_id: int) -> List[Dict[str, str]]:
path = _get_file_path(user_id)
if not os.path.exists(path):
return []
try:
with open(path, "r", encoding="utf-8") as f:
return json.load(f)
except (json.JSONDecodeError, IOError):
return []
def save_history(user_id: int, history: List[Dict[str, str]]):
path = _get_file_path(user_id)
try:
with open(path, "w", encoding="utf-8") as f:
json.dump(history, f, ensure_ascii=False, indent=2)
except IOError as e:
logger.error(f"Не удалось сохранить историю для user {user_id}: {e}")
def add_message(user_id: int, role: str, content: str):
history = load_history(user_id)
history.append({"role": role, "content": content})
if len(history) > MAX_MESSAGES:
history = history[-MAX_MESSAGES:]
save_history(user_id, history)
def clear_history(user_id: int):
path = _get_file_path(user_id)
if os.path.exists(path):
os.remove(path)
logger.info(f"История очищена для user {user_id}")