Files
live-radio/src/ozan_radio/chat_store.py
T

41 lines
1.1 KiB
Python
Raw Normal View History

from __future__ import annotations
from dataclasses import dataclass, field
from time import time
@dataclass
class ChatTurn:
role: str
content: str
ts: float = field(default_factory=time)
class ChatStore:
"""In-memory chat history for the DJ panel."""
def __init__(self, max_turns: int = 40) -> None:
self._turns: list[ChatTurn] = []
self._max = max_turns
self.pending_vibe: str = ""
def add(self, role: str, content: str) -> None:
self._turns.append(ChatTurn(role=role, content=content))
if len(self._turns) > self._max:
self._turns = self._turns[-self._max :]
def history(self) -> list[dict]:
return [{"role": t.role, "content": t.content} for t in self._turns]
def public_log(self) -> list[dict]:
return [
{"role": t.role, "content": t.content, "ts": t.ts}
for t in self._turns
if t.role in ("user", "dj")
]
def take_vibe_hint(self) -> str:
hint = self.pending_vibe.strip()
self.pending_vibe = ""
return hint