first
This commit is contained in:
+47
-15
@@ -1,25 +1,57 @@
|
||||
"""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
|
||||
|
||||
APP_NAME = os.getenv("APP_NAME", "audio-transcription")
|
||||
APP_VERSION = os.getenv("APP_VERSION", "1.0.0")
|
||||
ROOT_PATH = os.getenv("ROOT_PATH", "")
|
||||
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,
|
||||
root_path=ROOT_PATH
|
||||
description=DESCRIPTION,
|
||||
root_path=ROOT_PATH,
|
||||
)
|
||||
|
||||
@app.get("/health")
|
||||
def health():
|
||||
return {"status": "ok"}
|
||||
register_exception_handlers(app)
|
||||
|
||||
@app.get("/version")
|
||||
def version():
|
||||
return {
|
||||
"app": APP_NAME,
|
||||
"version": APP_VERSION,
|
||||
"language": "python",
|
||||
"root_path": ROOT_PATH
|
||||
}
|
||||
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")),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user