whisper.api / app /api /endpoints /transcribe.py
Ved Gupta
getToken added
f1cd69e
from typing import Annotated, List, Union
from fastapi import APIRouter, File, UploadFile, Request, Header, HTTPException
from fastapi.background import BackgroundTasks
from app.core.database import SessionLocal
from app.utils.utils import (
save_audio_file,
transcribe_file,
get_audio_duration,
get_model_name,
)
from app.core.models import AuthTokenController, TranscribeController
from app.api.models import Transcription
router = APIRouter()
database = SessionLocal()
@router.post("/", response_model=Transcription)
async def post_audio(
background_tasks: BackgroundTasks,
request: Request,
file: UploadFile = File(...),
model: str = "tiny.en.q5",
Authentication: Annotated[Union[str, None], Header()] = None,
):
try:
userId = AuthTokenController(database).get_userid_from_token(Authentication)
file_path = save_audio_file(file)
[data, output_audio_path] = transcribe_file(file_path, get_model_name(model))
background_tasks.add_task(
create_transcribe_record, database, userId, data, output_audio_path
)
return Transcription(filename=file.filename, text=data)
except Exception as exc:
raise HTTPException(status_code=400, detail=exc.__str__())
def create_transcribe_record(database, userId, data, file_path):
duration = get_audio_duration(file_path)
TranscribeController(database).create(user_id=userId, text=data, duration=duration)