{"record":{"id":"cf96f9a23c6813b3","repo":"mudler/LocalAI","slug":"error-transcription-failed-n","errorCode":null,"errorMessage":"error: transcription failed\\n","messagePattern":"error: transcription failed\\\\n","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"backend/go/crispasr/cpp/crispasr_shim.cpp","lineNumber":262,"sourceCode":"  }\n\n  // Reset stale abort flag from any prior cancelled call. set_abort remains\n  // best-effort: the session transcribe call is blocking and exposes no abort\n  // hook, so a mid-decode abort cannot interrupt it.\n  g_abort.store(0, std::memory_order_relaxed);\n\n  crispasr_session_set_translate(g_session, translate ? 1 : 0);\n\n  if (g_result) {\n    crispasr_session_result_free(g_result);\n    g_result = nullptr;\n  }\n\n  const char *language = (lang && *lang) ? lang : nullptr;\n  g_result = crispasr_session_transcribe_lang(g_session, pcmf32, (int)pcmf32_len,\n                                              language);\n  if (!g_result) {\n    fprintf(stderr, \"error: transcription failed\\n\");\n    return 1;\n  }\n\n  *segs_out_len = crispasr_session_result_n_segments(g_result);\n  return 0;\n}\n\nconst char *get_segment_text(int i) {\n  if (!g_result) {\n    return \"\";\n  }\n  return crispasr_session_result_segment_text(g_result, i);\n}\n\nint64_t get_segment_t0(int i) {\n  if (!g_result) {\n    return 0;\n  }","sourceCodeStart":244,"sourceCodeEnd":280,"githubUrl":"https://github.com/mudler/LocalAI/blob/44413a9d06bf5bc52ce088ba8ca74e5a2e8bee26/backend/go/crispasr/cpp/crispasr_shim.cpp#L244-L280","documentation":"transcribe() failed: crispasr_session_transcribe_lang() returned NULL after the session accepted parameters (translate flag, freed previous result). A NULL result means the transcription run itself errored — decode failure, invalid language string, or an internal session state problem. The shim returns 1 and leaves g_result NULL.","triggerScenarios":"transcribe(pcm, len, lang, translate) with an unsupported lang code, pcm length of zero or exceeding the session's limit, corrupted session state after a prior failed run, or backend compute errors during decoding.","commonSituations":"Passing an empty-string or invalid language identifier instead of NULL; feeding an audio buffer that is empty because upstream resampling failed; GPU backend faults mid-decode; repeatedly reusing a session after an OOM event.","solutions":["Pass a known language code (e.g., \"en\") or NULL for auto-detect — never an unrecognized string.","Check pcmf32_len > 0 and the PCM is valid 16 kHz float mono as whisper expects.","Inspect ggml logs immediately before the error for the decoding failure reason.","If the session is suspect, reload the model (load_model) to get a fresh session."],"exampleFix":"// before: empty string is not auto-detect\ntranscribe(pcm, n, \"\", 0);\n// after: NULL selects auto-detection in the shim\ncode := (*C.char)(unsafe.Pointer(nil));\nif lang != \"\" { code = C.CString(lang); defer C.free(unsafe.Pointer(code)) }\ntranscribe(pcm, n, code, 0);","handlingStrategy":"validation","validationCode":"if len(pcm) == 0 { return nil, errors.New(\"empty audio\") }\nif lang != \"\" && !knownLanguages()[lang] { lang = \"\" } // fall back to auto-detect","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Pass NULL (not empty string) for auto language detection.","Check the result pointer for NULL and report a transcription error rather than reading segments.","Reload the session if transcribe fails repeatedly — state may be corrupted."],"tags":["crispasr","asr","transcription","language-code"],"backgroundTag":null,"analyzedSha":"44413a9d06bf5bc52ce088ba8ca74e5a2e8bee26","analyzedAt":"2026-08-15T10:13:50.291Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}