diff --git a/agent/canvas.py b/agent/canvas.py index 8fb94cdec..667caec29 100644 --- a/agent/canvas.py +++ b/agent/canvas.py @@ -481,14 +481,40 @@ class Canvas(Graph): _m = "" buff_m = "" stream = cpn_obj.output("content")() + async def _process_stream(m): + nonlocal buff_m, _m, tts_mdl + if not m: + return + if m == "": + return decorate("message", {"content": "", "start_to_think": True}) + + elif m == "": + return decorate("message", {"content": "", "end_to_think": True}) + + buff_m += m + _m += m + + if len(buff_m) > 16: + ev = decorate( + "message", + { + "content": m, + "audio_binary": self.tts(tts_mdl, buff_m) + } + ) + buff_m = "" + return ev + + return decorate("message", {"content": m}) + if inspect.isasyncgen(stream): async for m in stream: - buff_m, _m, ev = await self._process_stream(m, buff_m, _m, decorate, tts_mdl) + ev= await _process_stream(m) if ev: yield ev else: for m in stream: - buff_m, _m, ev = await self._process_stream(m, buff_m, _m, decorate, tts_mdl) + ev= await _process_stream(m) if ev: yield ev if buff_m: @@ -614,31 +640,6 @@ class Canvas(Graph): return False return True - async def _process_stream(self, m, buff_m, _m, decorate, tts_mdl): - if not m: - return buff_m, _m, None - if m == "": - return buff_m, _m, decorate("message", {"content": "", "start_to_think": True}) - - if m == "": - return buff_m, _m, decorate("message", {"content": "", "end_to_think": True}) - - buff_m += m - _m += m - - if len(buff_m) > 16: - ev = decorate( - "message", - { - "content": m, - "audio_binary": self.tts(tts_mdl, buff_m) - } - ) - buff_m = "" - return buff_m, _m, ev - - ev = decorate("message", {"content": m}) - return buff_m, _m, ev def tts(self,tts_mdl, text): def clean_tts_text(text: str) -> str: