mirror of
https://github.com/xinnan-tech/xiaozhi-esp32-server.git
synced 2026-07-26 00:53:54 +08:00
fix:文字回复卡住bug
This commit is contained in:
@@ -1,4 +1,3 @@
|
|||||||
import os
|
|
||||||
import json
|
import json
|
||||||
import uuid
|
import uuid
|
||||||
import time
|
import time
|
||||||
@@ -311,7 +310,6 @@ class ConnectionHandler:
|
|||||||
self.dialogue.put(Message(role="user", content=query))
|
self.dialogue.put(Message(role="user", content=query))
|
||||||
|
|
||||||
response_message = []
|
response_message = []
|
||||||
processed_chars = 0 # 跟踪已处理的字符位置
|
|
||||||
try:
|
try:
|
||||||
start_time = time.time()
|
start_time = time.time()
|
||||||
# 使用带记忆的对话
|
# 使用带记忆的对话
|
||||||
@@ -332,7 +330,6 @@ class ConnectionHandler:
|
|||||||
text_index = 0
|
text_index = 0
|
||||||
uuid_str = str(uuid.uuid4()).replace("-", "")
|
uuid_str = str(uuid.uuid4()).replace("-", "")
|
||||||
self.u_id = uuid_str
|
self.u_id = uuid_str
|
||||||
msg_type = None
|
|
||||||
for content in llm_responses:
|
for content in llm_responses:
|
||||||
response_message.append(content)
|
response_message.append(content)
|
||||||
if self.client_abort:
|
if self.client_abort:
|
||||||
@@ -390,7 +387,6 @@ class ConnectionHandler:
|
|||||||
if hasattr(self, "func_handler"):
|
if hasattr(self, "func_handler"):
|
||||||
functions = self.func_handler.get_functions()
|
functions = self.func_handler.get_functions()
|
||||||
response_message = []
|
response_message = []
|
||||||
processed_chars = 0 # 跟踪已处理的字符位置
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
start_time = time.time()
|
start_time = time.time()
|
||||||
@@ -424,7 +420,6 @@ class ConnectionHandler:
|
|||||||
content_arguments = ""
|
content_arguments = ""
|
||||||
uuid_str = str(uuid.uuid4()).replace("-", "")
|
uuid_str = str(uuid.uuid4()).replace("-", "")
|
||||||
self.u_id = uuid_str
|
self.u_id = uuid_str
|
||||||
msg_type = None
|
|
||||||
for response in llm_responses:
|
for response in llm_responses:
|
||||||
content, tools_call = response
|
content, tools_call = response
|
||||||
if "content" in response:
|
if "content" in response:
|
||||||
@@ -588,9 +583,7 @@ class ConnectionHandler:
|
|||||||
if result.action == Action.RESPONSE: # 直接回复前端
|
if result.action == Action.RESPONSE: # 直接回复前端
|
||||||
text = result.response
|
text = result.response
|
||||||
self.recode_first_last_text(text, text_index)
|
self.recode_first_last_text(text, text_index)
|
||||||
asyncio.run_coroutine_threadsafe(
|
self.tts.tts_one_sentence(self, text)
|
||||||
self.tts.tts_one_sentence(text), loop=self.loop
|
|
||||||
)
|
|
||||||
self.dialogue.put(Message(role="assistant", content=text))
|
self.dialogue.put(Message(role="assistant", content=text))
|
||||||
elif result.action == Action.REQLLM: # 调用函数后再请求llm生成回复
|
elif result.action == Action.REQLLM: # 调用函数后再请求llm生成回复
|
||||||
text = result.result
|
text = result.result
|
||||||
@@ -622,16 +615,12 @@ class ConnectionHandler:
|
|||||||
elif result.action == Action.NOTFOUND:
|
elif result.action == Action.NOTFOUND:
|
||||||
text = result.result
|
text = result.result
|
||||||
self.recode_first_last_text(text, text_index)
|
self.recode_first_last_text(text, text_index)
|
||||||
asyncio.run_coroutine_threadsafe(
|
self.tts.tts_one_sentence(self, text)
|
||||||
self.tts.tts_one_sentence(text), loop=self.loop
|
|
||||||
)
|
|
||||||
self.dialogue.put(Message(role="assistant", content=text))
|
self.dialogue.put(Message(role="assistant", content=text))
|
||||||
else:
|
else:
|
||||||
text = result.result
|
text = result.result
|
||||||
self.recode_first_last_text(text, text_index)
|
self.recode_first_last_text(text, text_index)
|
||||||
asyncio.run_coroutine_threadsafe(
|
self.tts.tts_one_sentence(self, text)
|
||||||
self.tts.tts_one_sentence(text), loop=self.loop
|
|
||||||
)
|
|
||||||
self.dialogue.put(Message(role="assistant", content=text))
|
self.dialogue.put(Message(role="assistant", content=text))
|
||||||
|
|
||||||
def _audio_play_priority_thread(self):
|
def _audio_play_priority_thread(self):
|
||||||
|
|||||||
@@ -102,8 +102,7 @@ async def process_intent_result(conn, intent_result, original_text):
|
|||||||
if text is None:
|
if text is None:
|
||||||
text = result.result
|
text = result.result
|
||||||
if text is not None:
|
if text is not None:
|
||||||
# TODO 将text转换为tts_message_dto
|
conn.tts.tts_one_sentence(conn, text)
|
||||||
pass
|
|
||||||
# 将函数执行放在线程池中
|
# 将函数执行放在线程池中
|
||||||
conn.executor.submit(process_function_call)
|
conn.executor.submit(process_function_call)
|
||||||
return True
|
return True
|
||||||
|
|||||||
@@ -118,17 +118,18 @@ class TTSProviderBase(ABC):
|
|||||||
async def finish_session(self, session_id):
|
async def finish_session(self, session_id):
|
||||||
pass
|
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:
|
if not u_id:
|
||||||
u_id = str(uuid.uuid4()).replace("-", "")
|
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="")
|
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)
|
TTSMessageDTO(u_id=u_id, msg_type=MsgType.TTS_TEXT_REQUEST, content=text)
|
||||||
)
|
)
|
||||||
self.tts.tts_text_queue.put(
|
self.tts_text_queue.put(
|
||||||
TTSMessageDTO(u_id=u_id, msg_type=MsgType.STOP_TTS_REQUEST, content=text)
|
TTSMessageDTO(u_id=u_id, msg_type=MsgType.STOP_TTS_REQUEST, content="")
|
||||||
)
|
)
|
||||||
|
|
||||||
def _enable_two_way_tts(self):
|
def _enable_two_way_tts(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user