init
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
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
|
||||
Reference in New Issue
Block a user