11import asyncio
22
3- from fishjam .agent import Agent , AgentResponseTrackData
3+ from fishjam .agent import Agent
44from transcription .worker import BackgroundWorker
55
66from .transcription import TranscriptionSession
@@ -11,24 +11,19 @@ def __init__(self, room_id: str, agent: Agent, worker: BackgroundWorker):
1111 self ._room_id = room_id
1212 self ._agent = agent
1313 self ._sessions : dict [str , TranscriptionSession ] = {}
14- self ._disconnect = asyncio .Event ()
1514 self ._worker = worker
16-
17- @agent .on_track_data
18- def _ (track_data : AgentResponseTrackData ):
19- if track_data .peer_id not in self ._sessions :
20- return
21- self ._sessions [track_data .peer_id ].transcribe (track_data .data )
15+ self ._task : asyncio .Task [None ] | None = None
2216
2317 async def _start (self ):
24- async with self ._agent :
18+ async with self ._agent . connect () as session :
2519 print (f"Agent connected to room { self ._room_id } " )
26- await self ._disconnect .wait ()
27- self ._disconnect .clear ()
28- print (f"Agent disconnected from room { self ._room_id } " )
2920
30- def _stop (self ):
31- self ._disconnect .set ()
21+ async for track_data in session .receive ():
22+ if track_data .peer_id not in self ._sessions :
23+ return
24+ self ._sessions [track_data .peer_id ].transcribe (track_data .data )
25+
26+ print (f"Agent disconnected from room { self ._room_id } " )
3227
3328 def _handle_transcription (self , peer_id : str , text : str ):
3429 print (f"Peer { peer_id } in room { self ._room_id } said: { text } " )
@@ -38,7 +33,7 @@ def on_peer_enter(self, peer_id: str):
3833 return
3934
4035 if len (self ._sessions ) == 0 :
41- self ._worker .run_in_background (self ._start ())
36+ self ._task = self . _worker .run_in_background (self ._start ())
4237
4338 session = TranscriptionSession (lambda t : self ._handle_transcription (peer_id , t ))
4439 self ._sessions [peer_id ] = session
@@ -48,8 +43,8 @@ def on_peer_leave(self, peer_id: str):
4843 if peer_id not in self ._sessions :
4944 return
5045
51- self ._sessions [peer_id ].end ()
52- self ._sessions .pop (peer_id )
46+ self ._sessions .pop (peer_id ).end ()
5347
54- if len (self ._sessions ) == 0 :
55- self ._stop ()
48+ if len (self ._sessions ) == 0 and self ._task is not None :
49+ self ._task .cancel ()
50+ self ._task = None
0 commit comments