Spaces:
Sleeping
Sleeping
| from collections import deque | |
| from typing import List, Tuple | |
| class ConversationMemory: | |
| """ | |
| Sliding-window conversation memory. | |
| Keeps the last `max_turns` user/assistant pairs. | |
| Converts to OpenAI-format messages for API calls. | |
| """ | |
| def __init__(self, max_turns: int = 10): | |
| self.max_turns = max_turns | |
| self._history: deque = deque(maxlen=max_turns) | |
| def add(self, user_msg: str, assistant_msg: str) -> None: | |
| self._history.append((user_msg, assistant_msg)) | |
| def to_openai_messages(self, system_prompt: str) -> List[dict]: | |
| messages = [{"role": "system", "content": system_prompt}] | |
| for user_msg, assistant_msg in self._history: | |
| messages.append({"role": "user", "content": user_msg}) | |
| messages.append({"role": "assistant", "content": assistant_msg}) | |
| return messages | |
| def to_gradio_history(self) -> List[Tuple[str, str]]: | |
| return list(self._history) | |
| def clear(self) -> None: | |
| self._history.clear() | |
| def __len__(self) -> int: | |
| return len(self._history) | |