forked from killua/TakwayDisplayPlatform
update: 更新了进入沉默模式的功能
This commit is contained in:
parent
76c7adc1b5
commit
34f3fd62f5
|
@ -2,6 +2,8 @@ from abc import ABC, abstractmethod
|
||||||
|
|
||||||
#------ 抽象 ASR, LLM, TTS 类 ------ #
|
#------ 抽象 ASR, LLM, TTS 类 ------ #
|
||||||
class ASR(ABC):
|
class ASR(ABC):
|
||||||
|
def __init__(self):
|
||||||
|
self.is_slience = False
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
async def stream_recognize(self, chunk):
|
async def stream_recognize(self, chunk):
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -29,6 +29,7 @@ LAST_FRAME =3
|
||||||
|
|
||||||
class XF_ASR(ASR):
|
class XF_ASR(ASR):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
super().__init__()
|
||||||
self.websocket = None
|
self.websocket = None
|
||||||
self.current_message = ""
|
self.current_message = ""
|
||||||
self.audio = ""
|
self.audio = ""
|
||||||
|
@ -58,6 +59,16 @@ class XF_ASR(ASR):
|
||||||
self.current_message += parse_xfasr_recv(json.loads(await self.websocket.recv()))
|
self.current_message += parse_xfasr_recv(json.loads(await self.websocket.recv()))
|
||||||
if self.current_message == "":
|
if self.current_message == "":
|
||||||
raise AsrResultNoneError()
|
raise AsrResultNoneError()
|
||||||
|
if "进入沉默模式" in self.current_message:
|
||||||
|
self.is_slience = True
|
||||||
|
asyncio.create_task(self.websocket.close())
|
||||||
|
raise EnterSlienceMode()
|
||||||
|
if "退出沉默模式" in self.current_message:
|
||||||
|
self.is_slience = False
|
||||||
|
self.current_message = "已退出沉默模式"
|
||||||
|
if self.is_slience:
|
||||||
|
asyncio.create_task(self.websocket.close())
|
||||||
|
raise SlienceMode()
|
||||||
asyncio.create_task(self.websocket.close())
|
asyncio.create_task(self.websocket.close())
|
||||||
return [{"text":self.current_message, "audio":self.audio}]
|
return [{"text":self.current_message, "audio":self.audio}]
|
||||||
|
|
||||||
|
@ -145,6 +156,9 @@ class VOLCENGINE_LLM(LLM):
|
||||||
model = model,
|
model = model,
|
||||||
messages=messages,
|
messages=messages,
|
||||||
stream=True,
|
stream=True,
|
||||||
|
temperature=llm_info['temperature'],
|
||||||
|
top_p=llm_info['top_p'],
|
||||||
|
max_tokens=llm_info['max_tokens'],
|
||||||
stream_options={'include_usage': True}
|
stream_options={'include_usage': True}
|
||||||
)
|
)
|
||||||
for chunk in stream:
|
for chunk in stream:
|
||||||
|
|
|
@ -51,3 +51,15 @@ class LLMResponseEnd(Exception):
|
||||||
def __init__(self, message="LLM Response End!"):
|
def __init__(self, message="LLM Response End!"):
|
||||||
super().__init__(message)
|
super().__init__(message)
|
||||||
self.message = message
|
self.message = message
|
||||||
|
|
||||||
|
# 进入静音模式(非异常)
|
||||||
|
class EnterSlienceMode(Exception):
|
||||||
|
def __init__(self, message="Enter Slience Mode!"):
|
||||||
|
super().__init__(message)
|
||||||
|
self.message = message
|
||||||
|
|
||||||
|
# 处于静音模式(非异常)
|
||||||
|
class SlienceMode(Exception):
|
||||||
|
def __init__(self, message="Slience Mode!"):
|
||||||
|
super().__init__(message)
|
||||||
|
self.message = message
|
||||||
|
|
6
main.py
6
main.py
|
@ -221,6 +221,12 @@ async def streaming_chat(ws: WebSocket,db=Depends(get_db)):
|
||||||
agent.recorder.output_text = llm_text
|
agent.recorder.output_text = llm_text
|
||||||
agent.save()
|
agent.save()
|
||||||
logger.debug("音频保存成功")
|
logger.debug("音频保存成功")
|
||||||
|
except EnterSlienceMode:
|
||||||
|
tts_audio = agent.synthetize(assistant, "已进入沉默模式", db)
|
||||||
|
await ws.send_bytes(agent.encode("已进入沉默模式", tts_audio))
|
||||||
|
await ws.send_text(json.dumps({"type":"info","code":201,"msg":"进入沉默模式"}, ensure_ascii=False))
|
||||||
|
except SlienceMode:
|
||||||
|
await ws.send_text(json.dumps({"type":"info","code":201,"msg":"处于沉默模式"}, ensure_ascii=False))
|
||||||
except AsrResultNoneError:
|
except AsrResultNoneError:
|
||||||
await ws.send_text(json.dumps({"type":"error","code":501,"msg":"asr结果为空"}, ensure_ascii=False))
|
await ws.send_text(json.dumps({"type":"error","code":501,"msg":"asr结果为空"}, ensure_ascii=False))
|
||||||
except AbnormalLLMFrame as e:
|
except AbnormalLLMFrame as e:
|
||||||
|
|
Loading…
Reference in New Issue