Files
voice-chat-web/__pycache__/server.cpython-310.pyc

74 lines
8.0 KiB
Plaintext
Raw Normal View History

o
<00><><EFBFBD>iA#<00>@s<>dZddlZddlZddlmZddlmZddlZddlmZm Z m
Z
m Z m Z ddl mZddlmZddlmZmZdd lmZdd
lmZmZe<01>d d <0C>Zee<01>d d<0E><02>Zejejd<0F>e<02>e <20>Z!edddd<13>Z"e"j#edgddgdgd<16>Gdd<18>de<15>Z$Gdd<1A>de<15>Z%e"<22>&d<1B>dd<1D><00>Z'e"j&de%d<1F>d d!<21><00>Z(e"j)d"e$d<1F>e
d#d$d%<25>e dd&d%<25>fd'e d(ee*fd)d*<2A><05>Z+e"j)d+e$d<1F>e d#d,d%<25>e dd&d%<25>fd-e*d(ee*fd.d/<2F><05>Z,e"<22>-d0<64>d(e*fd1d2<64><04>Z.Gd3d4<64>d4e<15>Z/Gd5d6<64>d6e<15>Z0e"<22>&d7<64>d8d9<64><00>Z1e"<22>)d:<3A>d;e/fd<d=<3D><04>Z2e"<22>)d><3E>e d#<23>e d<02>fd-e*d?ee*fd@dA<64><05>Z3e"j4dBeedC<64>d'dD<64>e"<22>&dE<64>dFe*fdGdH<64><04>Z5e dIk<02>rHddl6Z6e6j7e"dJedK<64>dSdS)LuC
语音交互网页后端
代理转发到 Qwen2-Audio 模型服务
<EFBFBD>N)<01>Optional)<01>datetime)<05>FastAPI<50>
UploadFile<EFBFBD>File<6C> HTTPException<6F>Form)<01>CORSMiddleware)<01> StaticFiles)<02> FileResponse<73>Response)<01> BaseModel)<02> tts_manager<65> AUDIO_DIR<49>MODEL_SERVICE_URLzhttp://localhost:19018<31>PORT<52>19019)<01>levelzVoice Chat Webu语音交互网页后端z1.0.0)<03>title<6C> description<6F>version<6F>*T)<04> allow_origins<6E>allow_credentials<6C> allow_methods<64> allow_headersc@s*eZdZUdZeed<eed<eed<dS)<06> VoiceResponseu 语音响应<E5938D>reply<6C>conversation_id<69> timestampN)<06>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__doc__<5F>str<74>__annotations__<5F>r&r&<00>C/home/xian/.openclaw/workspace-coder/works/voice-chat-web/server.pyr-<00>
 rc@s*eZdZUdZeed<eed<eed<dS)<06>StatusResponseu 状态响应<E5938D>status<75> model_service<63> model_onlineN)r r!r"r#r$r%<00>boolr&r&r&r'r)4r(r)<00>/c<00>s <00>ddd<03>S)u根路径返回状态<E78AB6>okzvoice-chat-web)r*<00>servicer&r&r&r&r'<00>root;s<02>
r1z/status)<01>response_modelc
<00>s&<00>zpt<00><01>4IdH<00>[}|jt<03>d<02>tjdd<04>d<05>4IdH<00>3}|jdkrF|<01><06>IdH}tdtdd <09>Wd<00>IdHWd<00>IdHWSWd<00>IdHn 1IdHsVwYWd<00>IdHn 1IdHskwYWnty<>}zt <09>
d
|<03><00><02>WYd}~nd}~wwtd td d <09>S) u检查服务状态Nr.<00><00><01>total<61><01>timeout<75><74>r/T)r*r+r,zModel service check failed: <20>partialF) <0B>aiohttp<74> ClientSession<6F>getr<00> ClientTimeoutr*<00>jsonr)<00> Exception<6F>logger<65>warning)<04>session<6F>resp<73>data<74>er&r&r'<00>
get_statusAs4<02>&
<04><14><18>*<2A>(<28><04> <08><02><06>rFz /voice/chat.u 音频文件)ru对话ID<49>audiorc
<00>s<><00>z<>|<00><00>IdH}t<01><02>4IdH<00><>}t<01><03>}|jd||jpd|jp"dd<05>|r-|<04>d|<01>|jt<08>d<07>|tj dd <09>d
<EFBFBD>4IdH<00>K}|j
d kr\|<05> <0B>IdH}t <0C> d |<06><00><02>t|j
|d <0A><02>|<05><0F>IdH}t|d|d|<07>dt<12><13><00><14><00>d<10>Wd<00>IdHWd<00>IdHWS1IdHs<>wYWd<00>IdHWdS1IdHs<>wYWdStjy<>}zt <0C> d|<08><00><02>tddd <0A><02>d}~wty<>}zt j d|<08><00>dd<16>tdt|<08>d <0A><02>d}~ww)u6
语音聊天接口
转发到模型服务
NrGz audio.wav<61> audio/wav)<02>filename<6D> content_typerz/api/voice/inference<63>xr4<00>rDr7r8<00>Model service error: <20><02> status_code<64>detailrr<00>rrr<00>Connection error: <20><><00>模型服务连接失败zVoice chat error: T<><01>exc_info<66><6F>)<18>readr:r;<00>FormData<74> add_fieldrIrJ<00>postrr=r*<00>textr@<00>errorrr>rr<r<00>now<6F> isoformat<61> ClientErrorr?r$) rGr<00> audio_bytesrB<00>formrC<00>
error_textrDrEr&r&r'<00>
voice_chatXsT<02> <06> 
<0E>
<04><14><18> 2<> <08><08><02>rdz /voice/textu 文本消息r\c
2026-04-21 18:51:08 +08:00
<00>s<><00>z<>t<00><01>4IdH<00><>}t<00><02>}|<03>d|<00>|r|<03>d|<01>|jt<05>d<04>|tjdd<06>d<07>4IdH<00>K}|jdkrL|<04><08>IdH}t <09>
d |<05><00><02>t |j|d
<EFBFBD><02>|<04> <0C>IdH}t |d |d|<06>d t<0F><10><00><11><00>d <0A>Wd<00>IdHWd<00>IdHWS1IdHs<>wYWd<00>IdHWdS1IdHs<>wYWdStjy<>}zt <09>
d|<07><00><02>t ddd
<EFBFBD><02>d}~wty<>}zt j
d|<07><00>dd<13>t dt|<07>d
<EFBFBD><02>d}~ww)u6
文字聊天接口
转发到模型服务
Nr\rz/api/voice/textrKr4rLr8rMrNrrrQrRrSrTzText chat error: TrUrW)r:r;rYrZr[rr=r*r\r@r]rr>rr<rr^r_r`r?r$)r\rrBrbrCrcrDrEr&r&r'<00> text_chat<61>sH<02>   
2026-04-21 18:51:08 +08:00
<0E>
<04><14><18>2<> <08><08><02>rez/conversation/{conversation_id}c
<00>s<><00>z_t<00><01>4IdH<00>I}|jt<03>d|<00><00>tjdd<04>d<05>4IdH<00>}|<02><05>IdHWd<00>IdHWd<00>IdHWS1IdHsBwYWd<00>IdHWdS1IdHsYwYWdSty|}zt<07>d|<03><00><02>t dt
|<03>d<08><02>d}~ww) u 删除对话Nz/api/voice/conversation/<2F>
r4r6zDelete conversation error: rWrN) r:r;<00>deleterr=r>r?r@r]rr$)rrBrCrEr&r&r'<00>delete_conversation<6F>s$<02> 
<0E> <14><18>2<><08><02>rhc@s.eZdZUdZdZeed<dZeeed<dS)<06> TTSSettingsu
TTS 设置<E8AEBE>none<6E>providerN<72>voice) r r!r"r#rkr$r%rlrr&r&r&r'ri<00>s
 ric@s&eZdZUdZeeed<eed<dS)<05> TTSResponseu
TTS 响应<E5938D> audio_urlrkN)r r!r"r#rr$r%r&r&r&r'rm<00>s
  rmz/tts/providersc<00>s <00>t<00><01>}t<00><02>}||tjd<01>S)u 获取可用的 TTS 方案列表)<03> providers<72>voices<65>current)r<00>list_providers<72>get_edge_voices<65>current_provider)rorpr&r&r'<00>get_tts_providers<72>s<02><06>ruz /tts/settings<67>settingsc<00>sL<00>t<00>|j<02>|jdkr|jrt<00>d<01>}t|d<02>r|<01>|j<03>|j|jd<03>S)u设置 TTS 方案<E696B9>edge<67> set_voice)rkrl)r<00> set_providerrkrl<00> get_provider<65>hasattrrx)rvrkr&r&r'<00>set_tts_settings<67>s<02> 

 <06>r|z/tts/synthesizerkc
<00>sb<00>zt<00>||<01>IdH}t||ptjd<02>WSty0}zt<05>d|<03><00><02>tdt|<03>d<05><02>d}~ww)u1
合成语音
返回音频文件 URL
N)rnrkzTTS synthesis error: rWrN) r<00>
synthesizermrtr?r@r]rr$)r\rkrnrEr&r&r'<00>synthesize_tts<74>s<02><08><08><02>r~z/audio)<01> directory)<01>namez/chattts/audio/{filename}rIc
<00>s6<00>ddl}t<01>dd<04>}zs|<01><03>4IdH<00>]}|j|<02>d|<00><00>|jdd<07>d<08>4IdH<00>1}|jd kr5td
d d <0C><02>|<04><08>IdH}t |d ddid<10>Wd<00>IdHWd<00>IdHWS1IdHs`wYWd<00>IdHWdS1IdHswwYWdSt
y<EFBFBD>}zt <0B> d|<06><00><02>tdt |<06>d <0C><02>d}~ww)u代理 ChatTTS 音频文件rN<> CHATTTS_URLzhttp://192.168.2.5:12002z/audio/<2F>r4r6r8i<>zAudio not foundrNrHz Cache-Controlzpublic, max-age=3600)<03>content<6E>
media_type<EFBFBD>headerszProxy audio error: rW)r:<00>os<6F>getenvr;r<r=r*rrXr r?r@r]r$)rIr:<00> chattts_urlrBrC<00>
audio_datarEr&r&r'<00>proxy_chattts_audios6<02>  
<0E>
 <04><14><18>2<><08><02>r<EFBFBD><00>__main__z0.0.0.0)<02>host<73>port)8r#r<><00>logging<6E>typingrrr:<00>fastapirrrrr<00>fastapi.middleware.corsr <00>fastapi.staticfilesr
<00>fastapi.responsesr r <00>pydanticr <00> tts_servicerrr<>r<00>intr<00> basicConfig<69>INFO<46> getLoggerr r@<00>app<70>add_middlewarerr)r<r1rFr[r$rdrergrhrirmrur|r~<00>mountr<74><00>uvicorn<72>runr&r&r&r'<00><module>s<>      
<06><06> 
 
 

2026-04-21 18:51:08 +08:00
<04><02> <0C> 1

<04><02> <0C>(
 &
<04>