mudler/LocalAI · critical

error: failed to open CrispASR session for model\n

Error message

error: failed to open CrispASR session for model\n

What it means

The crispasr shim's load_model() failed: neither crispasr_session_open_explicit (with a requested backend name) nor crispasr_session_open could create a session for the given model path. This happens before any transcription and returns 1. The session layer validates the model file and backend availability, so failure means the model is unreadable/unsupported or the chosen backend cannot be instantiated.

Source

Thrown at backend/go/crispasr/cpp/crispasr_shim.cpp:161

  fprintf(stderr, "[%-5s] ", level_str);
  fputs(log, stderr);
  fflush(stderr);
}

int load_model(const char *const model_path, int threads,
               const char *backend_name) {
  whisper_log_set(ggml_log_cb, nullptr);
  ggml_backend_load_all();

  if (backend_name && *backend_name) {
    g_session =
        crispasr_session_open_explicit(model_path, backend_name, threads);
  } else {
    g_session = crispasr_session_open(model_path, threads);
  }
  if (g_session == nullptr) {
    fprintf(stderr, "error: failed to open CrispASR session for model\n");
    return 1;
  }

  fprintf(stderr, "info: CrispASR backend selected: %s\n",
          crispasr_session_backend(g_session));
  return 0;
}

// set_codec_path forwards a companion file (qwen3-tts codec, orpheus SNAC,
// chatterbox s3gen, or mimo-asr tokenizer) to the active session. Returns 0 on
// success or when the active backend needs no companion, negative on failure,
// and -1 when no session is open.
int set_codec_path(const char *path) {
  return g_session ? crispasr_session_set_codec_path(g_session, path) : -1;
}

int load_model_vad(const char *const model_path) {
  whisper_log_set(ggml_log_cb, nullptr);

View on GitHub (pinned to 44413a9d06)

Solutions

  1. Verify the model path exists and is a model format CrispASR accepts; re-download if the file is truncated.
  2. Check that the requested backend name matches one reported available by the build; drop the explicit backend to let crispasr_session_open pick a default.
  3. Pass a sane thread count (> 0).
  4. Read the ggml log lines (routed via ggml_log_cb) above the error — the underlying open failure is logged there.

Example fix

// before
rc := C.load_model(path, 0, "cuda"); // cuda not available, threads=0
// after
rc := C.load_model(path, runtime.NumCPU(), "") // let the session pick a backend
Defensive patterns

Strategy: validation

Validate before calling

if threads <= 0 { threads = runtime.NumCPU() }
if _, err := os.Stat(modelPath); err != nil {
    return fmt.Errorf("crispasr model missing: %w", err)
}
if backend != "" && !availableBackends().Contains(backend) {
    backend = ""
}

Prevention

When it happens

Trigger: load_model(path, threads, backend) with a nonexistent/invalid model file, an unsupported model format for CrispASR, threads <= 0, or a backend_name that is not compiled in / has no compatible device. Leaving backend_name empty still fails if no usable default backend exists.

Common situations: Model path from gallery config wrong or file partially downloaded; requesting "cuda" on a CPU-only build; incompatible whisper-family model version that CrispASR's session layer rejects; threads misconfigured as 0.

Related errors


AI-assisted analysis of mudler/LocalAI@44413a9d06 (2026-08-15). Data as JSON: /api/errors/103f02f425c95bae. Report an issue: GitHub.