mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-22 07:03:53 +08:00
fix:文字回复卡住bug
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user