From 98368cbe0636fc41e71f792c40e412d83e47f8a3 Mon Sep 17 00:00:00 2001 From: hrz <1710360675@qq.com> Date: Fri, 4 Apr 2025 02:01:48 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E6=96=87=E5=AD=97=E5=9B=9E=E5=A4=8D?= =?UTF-8?q?=E5=8D=A1=E4=BD=8Fbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main/xiaozhi-server/core/connection.py | 17 +++-------------- .../xiaozhi-server/core/handle/intentHandler.py | 3 +-- main/xiaozhi-server/core/providers/tts/base.py | 11 ++++++----- 3 files changed, 10 insertions(+), 21 deletions(-) diff --git a/main/xiaozhi-server/core/connection.py b/main/xiaozhi-server/core/connection.py index b2e8e1db..fbbff134 100644 --- a/main/xiaozhi-server/core/connection.py +++ b/main/xiaozhi-server/core/connection.py @@ -1,4 +1,3 @@ -import os import json import uuid import time @@ -311,7 +310,6 @@ class ConnectionHandler: self.dialogue.put(Message(role="user", content=query)) response_message = [] - processed_chars = 0 # 跟踪已处理的字符位置 try: start_time = time.time() # 使用带记忆的对话 @@ -332,7 +330,6 @@ class ConnectionHandler: text_index = 0 uuid_str = str(uuid.uuid4()).replace("-", "") self.u_id = uuid_str - msg_type = None for content in llm_responses: response_message.append(content) if self.client_abort: @@ -390,7 +387,6 @@ class ConnectionHandler: if hasattr(self, "func_handler"): functions = self.func_handler.get_functions() response_message = [] - processed_chars = 0 # 跟踪已处理的字符位置 try: start_time = time.time() @@ -424,7 +420,6 @@ class ConnectionHandler: content_arguments = "" uuid_str = str(uuid.uuid4()).replace("-", "") self.u_id = uuid_str - msg_type = None for response in llm_responses: content, tools_call = response if "content" in response: @@ -588,9 +583,7 @@ class ConnectionHandler: if result.action == Action.RESPONSE: # 直接回复前端 text = result.response self.recode_first_last_text(text, text_index) - asyncio.run_coroutine_threadsafe( - self.tts.tts_one_sentence(text), loop=self.loop - ) + self.tts.tts_one_sentence(self, text) self.dialogue.put(Message(role="assistant", content=text)) elif result.action == Action.REQLLM: # 调用函数后再请求llm生成回复 text = result.result @@ -622,16 +615,12 @@ class ConnectionHandler: elif result.action == Action.NOTFOUND: text = result.result self.recode_first_last_text(text, text_index) - asyncio.run_coroutine_threadsafe( - self.tts.tts_one_sentence(text), loop=self.loop - ) + self.tts.tts_one_sentence(self, text) self.dialogue.put(Message(role="assistant", content=text)) else: text = result.result self.recode_first_last_text(text, text_index) - asyncio.run_coroutine_threadsafe( - self.tts.tts_one_sentence(text), loop=self.loop - ) + self.tts.tts_one_sentence(self, text) self.dialogue.put(Message(role="assistant", content=text)) def _audio_play_priority_thread(self): diff --git a/main/xiaozhi-server/core/handle/intentHandler.py b/main/xiaozhi-server/core/handle/intentHandler.py index 7ad9537d..3eaf08c5 100644 --- a/main/xiaozhi-server/core/handle/intentHandler.py +++ b/main/xiaozhi-server/core/handle/intentHandler.py @@ -102,8 +102,7 @@ async def process_intent_result(conn, intent_result, original_text): if text is None: text = result.result if text is not None: - # TODO 将text转换为tts_message_dto - pass + conn.tts.tts_one_sentence(conn, text) # 将函数执行放在线程池中 conn.executor.submit(process_function_call) return True diff --git a/main/xiaozhi-server/core/providers/tts/base.py b/main/xiaozhi-server/core/providers/tts/base.py index 2cceec5b..454d5af3 100644 --- a/main/xiaozhi-server/core/providers/tts/base.py +++ b/main/xiaozhi-server/core/providers/tts/base.py @@ -118,17 +118,18 @@ class TTSProviderBase(ABC): async def finish_session(self, session_id): pass - async def tts_one_sentence(self, text, u_id=None): + def tts_one_sentence(self,conn, text, u_id=None): if not u_id: u_id = str(uuid.uuid4()).replace("-", "") - self.tts.tts_text_queue.put( + conn.u_id = u_id + self.tts_text_queue.put( TTSMessageDTO(u_id=u_id, msg_type=MsgType.START_TTS_REQUEST, content="") ) - self.tts.tts_text_queue.put( + self.tts_text_queue.put( TTSMessageDTO(u_id=u_id, msg_type=MsgType.TTS_TEXT_REQUEST, content=text) ) - self.tts.tts_text_queue.put( - TTSMessageDTO(u_id=u_id, msg_type=MsgType.STOP_TTS_REQUEST, content=text) + self.tts_text_queue.put( + TTSMessageDTO(u_id=u_id, msg_type=MsgType.STOP_TTS_REQUEST, content="") ) def _enable_two_way_tts(self):