Arnavkumar01 commited on
Commit
18fe292
·
1 Parent(s): 8095782

change in main.py for handling X-api via Query

Browse files
Files changed (1) hide show
  1. main.py +16 -6
main.py CHANGED
@@ -4,8 +4,8 @@ import logging
4
  import json
5
  import re
6
  from contextlib import asynccontextmanager
7
- from fastapi import FastAPI, WebSocket, WebSocketDisconnect, Request, status, Depends, Header, HTTPException
8
- from fastapi.concurrency import run_in_threadpool # This line is corrected (no syntax error)
9
  from pydantic import BaseModel
10
  from dotenv import load_dotenv
11
  from openai import OpenAI
@@ -15,6 +15,7 @@ from langchain_postgres.vectorstores import PGVector
15
  from sqlalchemy import create_engine
16
  import asyncio
17
  import io
 
18
 
19
  # --- SETUP ---
20
  os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
@@ -246,13 +247,23 @@ async def test_text_query_endpoint(query: TextQuery):
246
 
247
 
248
  @app.websocket("/browser-listen")
249
- async def browser_websocket_endpoint(websocket: WebSocket):
 
 
 
250
  """
251
  Main WebSocket endpoint for browser-based audio.
252
- Receives one audio blob, returns one audio blob.
253
  """
 
 
 
 
 
 
 
254
  await websocket.accept()
255
- logging.info("Browser client connected.")
256
 
257
  try:
258
  while True:
@@ -267,7 +278,6 @@ async def browser_websocket_endpoint(websocket: WebSocket):
267
  audio_bytes = base64.b64decode(audio_base64)
268
 
269
  # 2. Transcribe (Shared logic)
270
- # This works for WAV, WebM, Opus, etc.
271
  user_text = await run_in_threadpool(transcribe_audio, audio_bytes)
272
  if not user_text:
273
  logging.info("Transcription empty; skipping.")
 
4
  import json
5
  import re
6
  from contextlib import asynccontextmanager
7
+ from fastapi import FastAPI, WebSocket, WebSocketDisconnect, Request, status, Depends, Header, HTTPException, Query
8
+ from fastapi.concurrency import run_in_threadpool # This line is corrected (no syntax error)
9
  from pydantic import BaseModel
10
  from dotenv import load_dotenv
11
  from openai import OpenAI
 
15
  from sqlalchemy import create_engine
16
  import asyncio
17
  import io
18
+ from typing import Optional
19
 
20
  # --- SETUP ---
21
  os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
 
247
 
248
 
249
  @app.websocket("/browser-listen")
250
+ async def browser_websocket_endpoint(
251
+ websocket: WebSocket,
252
+ token: Optional[str] = Query(None) # Get token from query param
253
+ ):
254
  """
255
  Main WebSocket endpoint for browser-based audio.
256
+ Authenticates using a query parameter.
257
  """
258
+ # Authentication block
259
+ if not token or token != SHARED_SECRET:
260
+ logging.warning(f"Browser auth failed: Invalid token '{token}'")
261
+ await websocket.accept() # Accept briefly to send error
262
+ await websocket.close(code=status.WS_1008_POLICY_VIOLATION)
263
+ return
264
+
265
  await websocket.accept()
266
+ logging.info("Browser client connected and authenticated.")
267
 
268
  try:
269
  while True:
 
278
  audio_bytes = base64.b64decode(audio_base64)
279
 
280
  # 2. Transcribe (Shared logic)
 
281
  user_text = await run_in_threadpool(transcribe_audio, audio_bytes)
282
  if not user_text:
283
  logging.info("Transcription empty; skipping.")