daihui.zhang commited on
Commit
ab22d1a
·
1 Parent(s): 0b0ef2f

fix error handle in main

Browse files
Files changed (2) hide show
  1. main.py +7 -5
  2. transcribe/whisper_llm_serve.py +21 -12
main.py CHANGED
@@ -1,4 +1,4 @@
1
- from fastapi import FastAPI, WebSocket
2
  from urllib.parse import urlparse, parse_qsl
3
  from transcribe.whisper_llm_serve import PyWhiperCppServe
4
  from uuid import uuid1
@@ -68,10 +68,12 @@ async def translate(websocket: WebSocket):
68
  client.set_lang(from_lang, to_lang)
69
  logger.info(f"Source lange: {from_lang} -> Dst lange: {to_lang}")
70
  await websocket.accept()
71
- while True:
72
- frame_data = await get_audio_from_websocket(websocket)
73
- client.add_frames(frame_data)
74
-
 
 
75
 
76
  if __name__ == '__main__':
77
  freeze_support()
 
1
+ from fastapi import FastAPI, WebSocket, WebSocketDisconnect
2
  from urllib.parse import urlparse, parse_qsl
3
  from transcribe.whisper_llm_serve import PyWhiperCppServe
4
  from uuid import uuid1
 
68
  client.set_lang(from_lang, to_lang)
69
  logger.info(f"Source lange: {from_lang} -> Dst lange: {to_lang}")
70
  await websocket.accept()
71
+ try:
72
+ while True:
73
+ frame_data = await get_audio_from_websocket(websocket)
74
+ client.add_frames(frame_data)
75
+ except WebSocketDisconnect:
76
+ return
77
 
78
  if __name__ == '__main__':
79
  freeze_support()
transcribe/whisper_llm_serve.py CHANGED
@@ -36,9 +36,10 @@ class PyWhiperCppServe(ServeClientBase):
36
  self.sample_rate = 16000
37
 
38
  self.send_ready_state()
39
-
40
- self.run_in_thread(self.speech_to_text)
41
- self.run_in_thread(self.get_frame_from_queue)
 
42
 
43
  self.text_sep = ""
44
 
@@ -46,6 +47,7 @@ class PyWhiperCppServe(ServeClientBase):
46
  t = threading.Thread(target=func)
47
  t.daemon = True
48
  t.start()
 
49
 
50
  def send_ready_state(self):
51
  self.websocket.send(json.dumps({
@@ -72,7 +74,7 @@ class PyWhiperCppServe(ServeClientBase):
72
 
73
 
74
  def get_frame_from_queue(self,):
75
- while True:
76
  try:
77
  frame_np = self._frame_queue.get(timeout=0.1)
78
  with self.lock:
@@ -145,7 +147,7 @@ class PyWhiperCppServe(ServeClientBase):
145
 
146
  def speech_to_text(self):
147
  # c = 0
148
- while True:
149
  if self.exit:
150
  logger.info("Exiting speech to text thread")
151
  break
@@ -221,11 +223,17 @@ class PyWhiperCppServe(ServeClientBase):
221
  )
222
 
223
  def send_to_client(self, data:TransResult):
224
-
225
- coro = self.websocket.send_text(
226
- Message(result=data, request_id=self.client_uid).model_dump_json(by_alias=True)
227
- )
228
- asyncio.run(coro)
 
 
 
 
 
 
229
 
230
 
231
  def get_audio_chunk_for_processing(self):
@@ -240,5 +248,6 @@ class PyWhiperCppServe(ServeClientBase):
240
  padded_audio = np.concatenate([silence, self.frames_np])
241
  return padded_audio.copy()
242
 
243
- def cleanup(self):
244
- return super().cleanup()#
 
 
36
  self.sample_rate = 16000
37
 
38
  self.send_ready_state()
39
+ self._translate_thread_stop = threading.Event()
40
+ self._frame_to_queue_thread_stop = threading.Event()
41
+ self.translate_thread = self.run_in_thread(self.speech_to_text)
42
+ self.frame_to_queue_thread = self.run_in_thread(self.get_frame_from_queue)
43
 
44
  self.text_sep = ""
45
 
 
47
  t = threading.Thread(target=func)
48
  t.daemon = True
49
  t.start()
50
+ return t
51
 
52
  def send_ready_state(self):
53
  self.websocket.send(json.dumps({
 
74
 
75
 
76
  def get_frame_from_queue(self,):
77
+ while not self._frame_to_queue_thread_stop.is_set():
78
  try:
79
  frame_np = self._frame_queue.get(timeout=0.1)
80
  with self.lock:
 
147
 
148
  def speech_to_text(self):
149
  # c = 0
150
+ while not self._translate_thread_stop.is_set():
151
  if self.exit:
152
  logger.info("Exiting speech to text thread")
153
  break
 
223
  )
224
 
225
  def send_to_client(self, data:TransResult):
226
+ try:
227
+ coro = self.websocket.send_text(
228
+ Message(result=data, request_id=self.client_uid).model_dump_json(by_alias=True)
229
+ )
230
+ asyncio.run(coro)
231
+ except RuntimeError as e:
232
+ self.stop()
233
+ return
234
+ except Exception as e:
235
+ logger.error(e)
236
+
237
 
238
 
239
  def get_audio_chunk_for_processing(self):
 
248
  padded_audio = np.concatenate([silence, self.frames_np])
249
  return padded_audio.copy()
250
 
251
+ def stop(self):
252
+ self._translate_thread_stop.set()
253
+ self._frame_to_queue_thread_stop.set()