Skip to content

[Bug]: infer audio transcribe and infer image describe emit "No transcript/description returned for ... <path>" when no provider is configured, blaming the input instead of the missing config #73569

Description

@Crystora

Bug type

Behavior bug (incorrect output/state without crash)

Beta release blocker

No

Summary

When no audio (resp. image-understanding) provider is configured, pnpm openclaw infer audio transcribe --file <path> and pnpm openclaw infer image describe --file <path> exit 1 with Error: No transcript returned for audio: <path> and Error: No description returned for image: <path>. The error blames the input file. Reproduces with a nonexistent file, a directory, an empty file, or a wrong-format text file pretending to be audio — every input shape gives the same path-blaming error. Sibling subcommand infer image generate correctly says Error: No image-generation model configured. Set agents.defaults.imageGenerationModel.primary to a provider/model like "comfy/workflow"... and points the operator at the missing config. The audio/image-describe paths should follow the same shape.

Steps to reproduce

  1. Fresh checkout of openclaw at v2026.4.26 (commit afd0304); pnpm install && pnpm build on Node 22.22.2; gateway running locally.
  2. Confirm no audio/image-understanding provider is configured: pnpm openclaw infer audio providers --json | head -3 shows every entry as "configured": false (none have credentials in this default install).
  3. Run pnpm openclaw infer audio transcribe --file /tmp/totally-not-real.mp3. Observe Error: No transcript returned for audio: /tmp/totally-not-real.mp3 and exit 1.
  4. Repeat with: --file /tmp (a directory), --file /tmp/empty.mp3 (touch'd empty file), --file /tmp/fake.mp3 (a text file). Same error every time, only the path in the message changes.
  5. Run pnpm openclaw infer image describe --file /tmp/totally-not-real.png. Observe Error: No description returned for image: /tmp/totally-not-real.png and exit 1. Same shape.
  6. For comparison: pnpm openclaw infer image generate --prompt "test". Observe Error: No image-generation model configured. Set agents.defaults.imageGenerationModel.primary to a provider/model like "comfy/workflow". If you want a specific provider, also configure that provider's auth/API key first (comfy: COMFY_API_KEY / COMFY_CLOUD_API_KEY; fal: FAL_KEY / FAL_API_KEY; google: GEMINI_API_KEY / GOOGLE_API_KEY). — clearly identifies the missing config and points at the fix.

Expected behavior

When no audio (resp. image-understanding) provider is configured, the CLI should emit a clear error that names the missing config and the next step, not a path-blaming message. The closest in-tree precedent is infer image generate, which on the same "no provider configured" condition emits:

Error: No image-generation model configured. Set agents.defaults.imageGenerationModel.primary to a provider/model like "comfy/workflow". If you want a specific provider, also configure that provider's auth/API key first ...

infer audio transcribe and infer image describe should follow that pattern — detect "no providers configured" upfront, emit a clear "no audio/image-understanding provider configured" error pointing at the relevant agents.defaults.* knob, and exit 1.

The current "No transcript/description returned for ...: " wording should be reserved for the case where a provider was actually called and returned an empty result — which is the case the closed issues #65394, #66506, #65076 patched. Today the same error string is overloaded across both failure modes; operators cannot tell from the message whether to debug their input file, their provider config, or the provider's response.

Actual behavior

$ pnpm openclaw infer audio transcribe --file /tmp/totally-not-real.mp3
Error: No transcript returned for audio: /tmp/totally-not-real.mp3
ELIFECYCLE Command failed with exit code 1.

$ pnpm openclaw infer audio transcribe --file /tmp # directory
Error: No transcript returned for audio: /tmp
ELIFECYCLE Command failed with exit code 1.

$ pnpm openclaw infer audio transcribe --file /tmp/empty.mp3 # empty
Error: No transcript returned for audio: /tmp/empty.mp3
ELIFECYCLE Command failed with exit code 1.

$ pnpm openclaw infer audio transcribe --file /tmp/fake.mp3 # text file
Error: No transcript returned for audio: /tmp/fake.mp3
ELIFECYCLE Command failed with exit code 1.

$ pnpm openclaw infer image describe --file /tmp/totally-not-real.png
Error: No description returned for image: /tmp/totally-not-real.png
ELIFECYCLE Command failed with exit code 1.

$ pnpm openclaw infer image generate --prompt "test"
Error: No image-generation model configured. Set agents.defaults.imageGenerationModel.primary to a provider/model like "comfy/workflow". If you want a specific provider, also configure that provider's auth/API key first (comfy: COMFY_API_KEY / COMFY_CLOUD_API_KEY; fal: FAL_KEY / FAL_API_KEY; google: GEMINI_API_KEY / GOOGLE_API_KEY).
ELIFECYCLE Command failed with exit code 1.

OpenClaw version

2026.4.26

Operating system

Ubuntu 24.04.4 LTS (Linux 6.8.0-110-generic)

Install method

pnpm dev

Model

anthropic/claude-opus-4-7

Provider / routing chain

N/A

Additional provider/model setup details

  • Default model: anthropic/claude-opus-4-7 (text inference works fine via Claude CLI OAuth).
  • Audio providers: all 8 listed by infer audio providers are configured: false (deepgram, elevenlabs, google, groq, mistral, openai, senseaudio, xai). No credentials in env, no ~/.openclaw/credentials/ entries for any of them.
  • Image-understanding providers: same — all listed providers are configured: false.
  • No per-agent overrides; default agent main; gateway mode=local.

Logs, screenshots, and evidence

=== Audio transcribe — error blames input file across every input shape ===

$ pnpm openclaw infer audio transcribe --file /tmp/totally-not-real.mp3
Error: No transcript returned for audio: /tmp/totally-not-real.mp3
 ELIFECYCLE  Command failed with exit code 1.

$ pnpm openclaw infer audio transcribe --file /tmp                       # directory
Error: No transcript returned for audio: /tmp

$ touch /tmp/empty.mp3 && pnpm openclaw infer audio transcribe --file /tmp/empty.mp3
Error: No transcript returned for audio: /tmp/empty.mp3

$ echo "hello" > /tmp/fake.mp3 && pnpm openclaw infer audio transcribe --file /tmp/fake.mp3
Error: No transcript returned for audio: /tmp/fake.mp3

=== Confirmation that no provider is configured ===

$ pnpm openclaw infer audio providers --json | python3 -c "
import json, sys
for line in sys.stdin:
    line=line.strip()
    if not line.startswith('{'): continue
    d = json.loads(line)
    print(f\"{d['id']}: configured={d['configured']}\")
"
deepgram: configured=False
elevenlabs: configured=False
google: configured=False
groq: configured=False
mistral: configured=False
openai: configured=False
senseaudio: configured=False
xai: configured=False

=== Image describe — same shape ===

$ pnpm openclaw infer image describe --file /tmp/totally-not-real.png
Error: No description returned for image: /tmp/totally-not-real.png
 ELIFECYCLE  Command failed with exit code 1.

$ pnpm openclaw infer image describe --file /tmp
Error: No description returned for image: /tmp
 ELIFECYCLE  Command failed with exit code 1.

=== In-tree counter-example: image generate gets it right ===

$ pnpm openclaw infer image generate --prompt "test"
Error: No image-generation model configured. Set agents.defaults.imageGenerationModel.primary to a provider/model like "comfy/workflow". If you want a specific provider, also configure that provider's auth/API key first (comfy: COMFY_API_KEY / COMFY_CLOUD_API_KEY; fal: FAL_KEY / FAL_API_KEY; google: GEMINI_API_KEY / GOOGLE_API_KEY).
 ELIFECYCLE  Command failed with exit code 1.

=== Cross-capability error-wording matrix (same "no provider configured" condition) ===

CAPABILITY                 ERROR WORDING                                                                       VERDICT
infer image generate       "No image-generation model configured. Set agents.defaults.imageGenerationModel..." Clear, actionable
infer web search           "missing_brave_api_key" / "needs a Brave Search API key. Run openclaw configure..." Clear, actionable
infer web fetch            "web.fetch is disabled or no provider is available."                                Clear, actionable
infer tts convert          Per-provider list: "openai: not configured; elevenlabs: not configured; ..."        Verbose but clear
infer audio transcribe     "No transcript returned for audio: <path>"                                          Misleading
infer image describe       "No description returned for image: <path>"                                         Misleading

Impact and severity

Affected users/systems/channels:

  • Every operator running infer audio transcribe or infer image describe without a configured provider for the relevant capability. Linux directly observed (Ubuntu 24.04 / Node 22.22.2 / pnpm 10.33.0); platform-agnostic code path so macOS/Windows are expected to reproduce, only Linux directly verified.
  • New users following the docs to try out audio/image-understanding capabilities. The "No transcript returned" message sends them down the wrong debugging path (they check their audio file, re-encode, try a different format) instead of pointing at the missing provider config.

Severity:

  • Misleading error wording. Not a crash, not a security issue, no data loss. The underlying behavior (refusing to call non-existent providers) is correct; only the error message is wrong.
  • Trust-eroding: the operator sees an error that names their file and exits 1, naturally assumes the file is bad, and wastes time before discovering the real cause.
  • Inconsistent with sibling capability subcommands. image generate, web search, web fetch, tts convert all emit clear "no provider configured" errors. Two outliers (audio transcribe, image describe) misattribute to input.

Frequency:

  • Always, deterministic. 100% reproduction across nonexistent files, directories, empty files, and wrong-format files when no audio/image-understanding provider is configured. Independent of model/provider/transport — the error happens before any provider call.

Consequence:

Additional information

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions