Commit
·
18fe292
1
Parent(s):
8095782
change in main.py for handling X-api via Query
Browse files
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
|
| 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(
|
|
|
|
|
|
|
|
|
|
| 250 |
"""
|
| 251 |
Main WebSocket endpoint for browser-based audio.
|
| 252 |
-
|
| 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.")
|