cleaned version

This commit is contained in:
JiriUhlir
2026-07-10 09:54:05 +02:00
parent 7a3f61c125
commit 5d2ba407f4
7 changed files with 104 additions and 180 deletions
+21 -53
View File
@@ -1,6 +1,7 @@
# Endpointy přepisu
# Endpoint přepisu
Audio se posílá jako proměnná `file` (multipart/form-data). Všechny ostatní parametry
Jediná metoda, která udělá vše najednou: přepis Deepgramem + OpenAI (whisper-1) a jejich
AI sloučení. Audio se posílá jako proměnná `file` (multipart/form-data), ostatní parametry
jsou form fields v POST. API klíče jsou v X- hlavičkách. Výstup je vždy JSON.
## Hlavičky (secrets)
@@ -8,90 +9,57 @@ jsou form fields v POST. API klíče jsou v X- hlavičkách. Výstup je vždy JS
| Hlavička | Nutná | Popis |
|----------|-------|-------|
| `X-Deepgram-Api-Key` | ano | Deepgram API klíč |
| `X-OpenAI-Api-Key` | ano | OpenAI API klíč (Whisper + slučovací chat) |
| `X-OpenAI-Api-Key` | ano | OpenAI API klíč (whisper-1 přepis + slučovací chat) |
## POST /transcribe/dual
Paralelní přepis dvěma engine. Vrací dva nezávislé texty.
## POST /dual-with-merge
### Form parametry
| Pole | Typ | Default | Popis |
|------|-----|---------|-------|
| `file` | soubor | — | Audio k přepisu (povinné) |
| `combine_prompt` | text | výchozí „Czech Transcript Merger“ | System prompt pro sloučení |
| `deepgram_model` | text | `nova-2` | Deepgram model |
| `whisper_model` | text | `whisper-1` | OpenAI přepisový model |
| `chat_model` | text | `gpt-4o` | OpenAI chat model pro sloučení |
| `language` | text | `cs` | Jazyk (ISO kód) |
| `diarize` | bool | `true` | Deepgram diarizace |
| `smart_format` | bool | `true` | Deepgram smart formatting |
### Odpověď
```json
{
"text1": "přepis z Deepgramu",
"text2": "přepis z OpenAI Whisper",
"deepgram_model": "nova-2",
"whisper_model": "whisper-1",
"language": "cs"
}
```
### Příklad (curl)
```bash
curl -X POST https://services.csbot.cz/apps/audio-transcription/transcribe/dual \
-H "X-Deepgram-Api-Key: <DEEPGRAM_KEY>" \
-H "X-OpenAI-Api-Key: <OPENAI_KEY>" \
-F "file=@nahravka.mp3" \
-F "language=cs"
```
## POST /transcribe/combined
Jako `dual`, navíc oba přepisy sloučí přes OpenAI Chat do jednoho výsledku (`merged`).
### Form parametry
Vše z `dual`, plus:
| Pole | Typ | Default | Popis |
|------|-----|---------|-------|
| `combine_prompt` | text | výchozí „Czech Transcript Merger“ | System prompt pro sloučení |
| `chat_model` | text | `gpt-4o` | OpenAI chat model pro sloučení |
Nezadá-li se `combine_prompt`, použije se výchozí prompt z `app/prompts.py`.
### Odpověď
```json
{
"text1": "přepis z Deepgramu",
"text2": "přepis z OpenAI Whisper",
"merged": "sloučený, co nejpřesnější výsledný přepis",
"deepgram_model": "nova-2",
"whisper_model": "whisper-1",
"chat_model": "gpt-4o",
"language": "cs"
"gpt": "přepis z OpenAI (whisper-1)",
"deepgram": "přepis z Deepgramu",
"merge": "sloučený, co nejpřesnější výsledný přepis"
}
```
### Příklad (curl)
```bash
curl -X POST https://services.csbot.cz/apps/audio-transcription/transcribe/combined \
curl -X POST https://services.csbot.cz/apps/audio-transcription/dual-with-merge \
-H "X-Deepgram-Api-Key: <DEEPGRAM_KEY>" \
-H "X-OpenAI-Api-Key: <OPENAI_KEY>" \
-F "file=@nahravka.mp3"
-F "file=@nahravka.mp3" \
-F "language=cs"
```
## Chybové stavy
Chybové odpovědi jsou JSON: `{"error": "<TypChyby>", "message": "...", "detail": "<text z upstreamu>"}`.
| HTTP | Kdy |
|------|-----|
| 400 | Chybí / prázdný audio soubor |
| 401 | Chybí `X-Deepgram-Api-Key` nebo `X-OpenAI-Api-Key` |
| 502 | Chyba upstream API (Deepgram / OpenAI) |
| 400 | Chybí / prázdný audio soubor; **nepodporovaný nebo poškozený audio formát** (Deepgram/OpenAI vrátí 400/415/422) |
| 401 | Chybí `X-Deepgram-Api-Key` / `X-OpenAI-Api-Key`, **nebo upstream odmítl API klíč** (Deepgram/OpenAI 401/403) |
| 429 | Rate limit na Deepgram nebo OpenAI |
| 502 | Výpadek / neočekávaná chyba upstreamu (5xx, síťová chyba, timeout, neočekávaná struktura odpovědi) |
| 500 | Neočekávaná chyba serveru |
Mapování dělá `raise_for_upstream` v `app/errors.py`. Špatný typ souboru se pozná až
z odpovědi Deepgramu/OpenAI (bytes validují oni) a mapuje se na **400**, ne na 502.
Všechny chyby se logují (bez secrets), žádné tiché selhání.