Files
audio-transcription/app/main.py
T
JiriUhlir 7a3f61c125 first
2026-07-10 09:46:49 +02:00

58 lines
1.7 KiB
Python

"""Vstupní bod aplikace audio-transcription.
Stateless FastAPI služba běžící v AppFactory za reverse proxy `/apps/<app-id>`.
Přijímá audio + parametry v POST, přepisuje ho paralelně (Deepgram + OpenAI Whisper)
a volitelně slučuje do jednoho co nejlepšího přepisu. Výstup je vždy JSON.
API klíče se předávají per-request v X- hlavičkách, nikdy se neukládají ani nelogují.
"""
import os
from fastapi import FastAPI
from .config import APP_NAME, APP_VERSION, ROOT_PATH
from .errors import register_exception_handlers
from .logging_config import configure_logging
from .routers import meta, transcribe
configure_logging()
DESCRIPTION = """
Přepis hovorů / audia dvěma engine (Deepgram + OpenAI Whisper) a jejich AI sloučení.
### Přihlašovací údaje (hlavičky)
Secrets se předávají v hlavičkách u každého requestu — nikdy v těle ani v URL:
- `X-Deepgram-Api-Key` — Deepgram API klíč (Deepgram Console → API Keys)
- `X-OpenAI-Api-Key` — OpenAI API klíč (platform.openai.com → API keys)
### Endpointy
- `POST /transcribe/dual` — vrátí dva nezávislé přepisy (`text1` = Deepgram, `text2` = Whisper)
- `POST /transcribe/combined` — dual + `merged` (sloučený výsledek dle `combine_prompt`)
Audio se posílá jako proměnná `file` (multipart/form-data). Ostatní parametry
(modely, jazyk, prompt) jsou form fields v POST.
"""
app = FastAPI(
title=APP_NAME,
version=APP_VERSION,
description=DESCRIPTION,
root_path=ROOT_PATH,
)
register_exception_handlers(app)
app.include_router(meta.router)
app.include_router(transcribe.router)
if __name__ == "__main__":
import uvicorn
uvicorn.run(
"app.main:app",
host="0.0.0.0",
port=int(os.getenv("PORT", "8000")),
)