VPM100's picture
Upload shared/memory.py
80f8a66 verified
Raw
History Blame Contribute Delete
1.08 kB
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)