rjzevallos commited on
Commit
b809819
·
1 Parent(s): d711f84

WS: accept both binary audio chunks and text control messages (FINISH/RESET)

Browse files
Files changed (1) hide show
  1. app.py +30 -14
app.py CHANGED
@@ -89,21 +89,37 @@ async def websocket_audio(websocket: WebSocket):
89
  server_wrapper.reset()
90
 
91
  while True:
92
- data = await websocket.receive_bytes()
93
-
94
- if data == b"FINISH":
95
- # Finish transcription
96
- result = await asyncio.get_event_loop().run_in_executor(None, server_wrapper.finish)
97
- await websocket.send_json({"type": "finish", **result})
98
- break
99
- elif data == b"RESET":
100
- server_wrapper.reset()
101
- await websocket.send_json({"type": "reset", "status": "ok"})
 
 
 
 
 
 
 
 
 
 
 
 
102
  else:
103
- # Process audio chunk
104
- result = await asyncio.get_event_loop().run_in_executor(None, server_wrapper.process_chunk_from_bytes, data)
105
- if result and result.get("text"):
106
- await websocket.send_json({"type": "update", "text": result["text"]})
 
 
 
 
107
 
108
  except Exception as e:
109
  logger.error(f"WebSocket error: {e}")
 
89
  server_wrapper.reset()
90
 
91
  while True:
92
+ # Accept either binary frames (audio) or text frames (control messages like FINISH)
93
+ message = await websocket.receive()
94
+ data = None
95
+ is_text = False
96
+ if 'bytes' in message and message['bytes'] is not None:
97
+ data = message['bytes']
98
+ elif 'text' in message and message['text'] is not None:
99
+ data = message['text']
100
+ is_text = True
101
+
102
+ if is_text:
103
+ # Control messages
104
+ if data == "FINISH":
105
+ result = await asyncio.get_event_loop().run_in_executor(None, server_wrapper.finish)
106
+ await websocket.send_json({"type": "finish", **(result or {})})
107
+ break
108
+ elif data == "RESET":
109
+ server_wrapper.reset()
110
+ await websocket.send_json({"type": "reset", "status": "ok"})
111
+ else:
112
+ # Unknown text message - ignore or log
113
+ logger.debug(f"Unknown WS text message: {data}")
114
  else:
115
+ # Binary audio chunk
116
+ try:
117
+ result = await asyncio.get_event_loop().run_in_executor(None, server_wrapper.process_chunk_from_bytes, data)
118
+ if result and result.get("text"):
119
+ await websocket.send_json({"type": "update", "text": result["text"]})
120
+ except Exception as e:
121
+ logger.error(f"Error processing audio chunk via websocket: {e}")
122
+ await websocket.send_json({"type": "error", "message": str(e)})
123
 
124
  except Exception as e:
125
  logger.error(f"WebSocket error: {e}")