# -*- coding: utf-8 -*- """WebSocket ASR API routes.""" import logging import time import uuid from typing import Optional from fastapi import APIRouter, WebSocket from ...services.qwen3_websocket_asr import Qwen3ASRService logger = logging.getLogger(__name__) router = APIRouter(prefix="/ws/v1/asr", tags=["WebSocket ASR"]) @router.websocket("/funasr") async def funasr_websocket(websocket: WebSocket) -> None: await websocket.accept() task_id = f"deprecated_funasr_ws_{int(time.time())}_{id(websocket)}" try: await websocket.send_json( { "type": "error", "task_id": task_id, "code": "FUNASR_REALTIME_REMOVED", "message": "FunASR/Paraformer realtime websocket has been removed. Use /ws/v1/asr/qwen instead.", } ) except Exception: pass finally: await websocket.close(code=1008, reason="Use /ws/v1/asr/qwen") _qwen3_service = Qwen3ASRService() @router.websocket("") @router.websocket("/qwen") async def qwen_asr_websocket( websocket: WebSocket, task_id: Optional[str] = None, ) -> None: if task_id is None: task_id = str(uuid.uuid4())[:8] await _qwen3_service.handle_connection(websocket, task_id)