import openai from fastapi import FastAPI, HTTPException from fastapi.middleware.cors import CORSMiddleware from pydantic import BaseModel import pydantic from fastapi import FastAPI, HTTPException, Depends, Request, Response from fastapi.security import OAuth2PasswordBearer from tinydb import TinyDB from tinydb import Query from datetime import datetime from utils import generate_token import whisper import numpy as np from typing import List model = whisper.load_model("medium") # model = whisper.load_model("base") query = Query() db = TinyDB(".token.json") app = FastAPI() origins = ["*"] app.add_middleware( CORSMiddleware, allow_origins=origins, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") REF_KEY = "F0eeQ419wvoCSPH7KBmsd9OiVkF0W0DxK1XE9T3BlbkFJ0" model_name = "" def verify_token(token: str = Depends(oauth2_scheme)): expiry = -1 res = db.get(query.token == token) if res: expiry = (datetime.strptime(res["expiry_date"], '%Y-%m-%d') - datetime.strptime(res["created_at"], '%Y-%m-%d')).days if expiry < 0: return {"message": "Token is not Valid"} return token class AudioInput(BaseModel): data: List class RefToken(BaseModel): expiry_date: str ref_key: str @app.get("/") async def base_url(): try: return { "Please Check the documentation here": "https://huggingface.co/spaces/Subhraj07/transcription-api/blob/main/README.md", "Swagger UI" : "https://subhraj07-transcription-api.hf.space/docs" } except Exception as e: raise HTTPException(status_code=500, detail="An error occurred while processing the request." + str(e)) @app.post("/create") async def create(data: RefToken): token = "Reference Key is incorrect" try: if data.ref_key == REF_KEY: token = generate_token(data.expiry_date, db) return {"TOKEN": token} except Exception as e: raise HTTPException(status_code=500, detail="An error occurred while processing the request." + str(e)) @app.get("/list") async def list(token: str = Depends(verify_token)): try: data = db.all() return {"data": data} except Exception as e: raise HTTPException(status_code=500, detail="An error occurred while processing the request." + str(e)) @app.post("/transcribe") async def chat(audio_input: AudioInput, token: str = Depends(verify_token)): try: transcription = model.transcribe(np.asarray(audio_input)) return { "transcript": transcription["text"] } except Exception as e: raise HTTPException(status_code=500, detail="An error occurred while processing the request." + str(e))