diff --git a/backend/server/api/coach/transcribe.post.ts b/backend/server/api/coach/transcribe.post.ts index cd73983..1dcfe3a 100644 --- a/backend/server/api/coach/transcribe.post.ts +++ b/backend/server/api/coach/transcribe.post.ts @@ -83,31 +83,39 @@ export default defineEventHandler(async (event) => { buffer.length, ); - // Deepgram language mapping. WICHTIG: model=nova-3, NICHT nova-2 — - // nova-2 unterstützt weder Arabisch (ar) noch Türkisch (tr) und antwortet - // dafür mit 400 "No such model/language/tier combination" → leeres - // Transcript / Fehler beim Client ("kein Text nach Speech"). nova-3 deckt - // alle hier gelisteten Sprachen als diskrete Codes ab (inkl. ar + tr), - // ohne Regression für de/en/fr/es/pt/it. Verifiziert gg. Deepgram-Doc - // models-languages-overview (2026-05). + // Deepgram language mapping. + // Live-Diagnose (2026-05-30): nova-3 lehnt language=ar (und tr) mit + // 400 "No such model/language/tier combination found" ab — entgegen + // der vorherigen Annahme. Fallback für ar/tr: nova-2-general + // (multilingual auto-detect). Für alle anderen Sprachen bleibt nova-3 + // (bessere Genauigkeit, diskrete language-codes). const deepgramLang = language && ["de", "en", "tr", "ar", "fr", "es", "pt", "it"].includes(language) ? language : "de"; + const needsGeneralModel = ["ar", "tr"].includes(deepgramLang); + const deepgramUrl = needsGeneralModel + ? "https://api.deepgram.com/v1/listen?model=nova-2-general" + : `https://api.deepgram.com/v1/listen?language=${deepgramLang}&model=nova-3`; + + console.log( + "[transcribe] language:", + deepgramLang, + "model:", + needsGeneralModel ? "nova-2-general" : "nova-3", + ); + try { - const response = await fetch( - `https://api.deepgram.com/v1/listen?language=${deepgramLang}&model=nova-3`, - { - method: "POST", - headers: { - Authorization: `Token ${config.deepgramApiKey}`, - "Content-Type": blobType, - }, - body: buffer, + const response = await fetch(deepgramUrl, { + method: "POST", + headers: { + Authorization: `Token ${config.deepgramApiKey}`, + "Content-Type": blobType, }, - ); + body: buffer, + }); const result = await response.json();