| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- """
- 语音识别V2路由
- 提供异步语音识别的API端点
- """
- from fastapi import APIRouter, Depends, HTTPException
- from sqlalchemy.orm import Session
- from app.database import get_db
- from app.models.user import User
- from app.middleware import get_current_user_from_request
- from app.schemas.model_schema import ApiResponse
- from app.schemas.audio_v2 import (
- ASRRecognitionV2CreateRequest,
- ASRRecognitionV2Response,
- ASRRecognitionV2ListResponse,
- TaskListQueryParams
- )
- from app.services.audio_v2 import ASRRecognitionV2Service
- router = APIRouter(prefix="/asr", tags=["语音识别V2"])
- @router.post("/recognition", response_model=ApiResponse[ASRRecognitionV2Response])
- async def create_recognition_task(
- request: ASRRecognitionV2CreateRequest,
- db: Session = Depends(get_db),
- current_user: User = Depends(get_current_user_from_request)
- ):
- """
- 创建语音识别任务(异步)
-
- 提交音频文件URL进行异步识别,返回任务ID用于后续查询
-
- Args:
- request: 创建请求(包含model和file_url)
-
- Returns:
- 任务信息(包含task_id)
- """
- if not current_user.apikey:
- raise HTTPException(
- status_code=403,
- detail="未配置API密钥,请在用户设置中配置apikey"
- )
-
- service = ASRRecognitionV2Service(db, current_user.id, current_user.apikey)
- result = await service.create_task(request)
-
- return ApiResponse(
- code=200,
- message="识别任务已创建",
- data=result
- )
- @router.get("/recognition/{task_id}", response_model=ApiResponse[ASRRecognitionV2Response])
- async def get_recognition_task(
- task_id: str,
- db: Session = Depends(get_db),
- current_user: User = Depends(get_current_user_from_request)
- ):
- """
- 查询语音识别任务详情
-
- 根据task_id查询任务状态和识别结果
-
- Args:
- task_id: 任务ID
-
- Returns:
- 任务详情(包含状态、结果等)
- """
- service = ASRRecognitionV2Service(db, current_user.id, current_user.apikey)
- result = await service.get_task(task_id)
-
- return ApiResponse(
- code=200,
- message="success",
- data=result
- )
- @router.get("/recognition", response_model=ApiResponse[ASRRecognitionV2ListResponse])
- async def list_recognition_tasks(
- status: str = None,
- page: int = 1,
- page_size: int = 20,
- order_by: str = "created_at",
- order: str = "desc",
- db: Session = Depends(get_db),
- current_user: User = Depends(get_current_user_from_request)
- ):
- """
- 查询语音识别任务列表
-
- 支持分页、筛选和排序
-
- Args:
- status: 状态筛选(PENDING/PROCESSING/SUCCEEDED/FAILED)
- page: 页码(从1开始)
- page_size: 每页数量(1-100)
- order_by: 排序字段(created_at/updated_at)
- order: 排序方向(asc/desc)
-
- Returns:
- 任务列表(包含总数和分页数据)
- """
- params = TaskListQueryParams(
- status=status,
- page=page,
- page_size=page_size,
- order_by=order_by,
- order=order
- )
-
- service = ASRRecognitionV2Service(db, current_user.id, current_user.apikey)
- result = await service.list_tasks(params)
-
- return ApiResponse(
- code=200,
- message="success",
- data=result
- )
|