| | import os |
| | import tempfile |
| | from fastapi import FastAPI, UploadFile, File, Header, HTTPException |
| | from fastapi.middleware.cors import CORSMiddleware |
| | from openai import OpenAI |
| |
|
| | APP_SHARED_SECRET = os.environ.get("APP_SHARED_SECRET", "") |
| |
|
| | app = FastAPI() |
| |
|
| | app.add_middleware( |
| | CORSMiddleware, |
| | allow_origins=["*"], |
| | allow_methods=["*"], |
| | allow_headers=["*"], |
| | ) |
| |
|
| | client = OpenAI(api_key=os.environ["OPENAI_API_KEY"]) |
| |
|
| |
|
| | def require_secret(x_app_secret: str | None) -> None: |
| | if APP_SHARED_SECRET and x_app_secret != APP_SHARED_SECRET: |
| | raise HTTPException(status_code=401, detail="Unauthorized") |
| |
|
| |
|
| | @app.post("/v1/session") |
| | async def session(x_app_secret: str | None = Header(default=None)): |
| | require_secret(x_app_secret) |
| | return { |
| | "token": "hf-dev", |
| | "expiresAt": None, |
| | "requestId": None |
| | } |
| |
|
| |
|
| | @app.post("/v1/stt") |
| | async def stt( |
| | audio: UploadFile = File(...), |
| | metadata: str | None = None, |
| | x_app_secret: str | None = Header(default=None) |
| | ): |
| | require_secret(x_app_secret) |
| |
|
| | with tempfile.NamedTemporaryFile(suffix=".m4a") as tmp: |
| | tmp.write(await audio.read()) |
| | tmp.flush() |
| |
|
| | result = client.audio.transcriptions.create( |
| | file=open(tmp.name, "rb"), |
| | model="whisper-1" |
| | ) |
| |
|
| | return { |
| | "transcript": result.text, |
| | "language": "en", |
| | "requestId": None |
| | } |