Files
product/core/state_machine.py
2026-03-27 10:49:34 +08:00

36 lines
1020 B
Python

import asyncio
from enum import Enum
class SessionState(str, Enum):
IDLE = "idle"
USER_SPEAKING = "user_speaking"
THINKING = "thinking"
AVATAR_SPEAKING = "avatar_speaking"
class Arbitrator:
def __init__(self) -> None:
self.state = SessionState.IDLE
self._lock = asyncio.Lock()
self.cancel_avatar_event = asyncio.Event()
async def on_speech_start(self) -> None:
async with self._lock:
if self.state == SessionState.AVATAR_SPEAKING:
self.cancel_avatar_event.set()
self.state = SessionState.USER_SPEAKING
async def on_speech_end(self) -> None:
async with self._lock:
self.cancel_avatar_event.clear()
self.state = SessionState.THINKING
async def on_avatar_start(self) -> None:
async with self._lock:
self.state = SessionState.AVATAR_SPEAKING
async def on_avatar_done(self) -> None:
async with self._lock:
self.state = SessionState.IDLE