Skip to content

Groq media understanding provider dropped from registry after first message — voice transcription works once then fails #60518

Description

@KurtVogel

Description

Voice message transcription (Groq Whisper) works exactly once after gateway restart, then silently fails for all subsequent voice messages with:

Error: Media provider not available: groq

The error is caught and silently swallowed by runAttachmentEntries in runner.ts, logged only via logVerbose() which is a no-op in the worker process (see #60421).

Reproduction Steps

  1. Configure Groq audio transcription in openclaw.json:
{
  "tools": {
    "media": {
      "audio": {
        "enabled": true,
        "models": [{ "provider": "groq", "model": "whisper-large-v3-turbo" }]
      }
    }
  }
}
  1. Restart the gateway
  2. Send a voice message via Telegram DM → transcription works
  3. Send a second voice message → transcription silently fails
  4. All subsequent voice messages also fail
  5. Restart gateway → cycle repeats from step 3

Root Cause

The Groq media understanding provider is registered in the plugin registry on startup, but becomes unavailable after the first message is processed. The provider entry is resolved correctly (resolveAutoEntries returns [{provider: "groq", model: "whisper-large-v3-turbo"}]), but getMediaUnderstandingProvider("groq", providerRegistry) returns null on the second call.

Likely cause: The first message triggers ensureAgentWorkspace which writes bootstrap files. The gateway file watcher detects the change and triggers a hot-reload/plugin re-registration. The rebuilt plugin registry does not include the bundled Groq media understanding provider, causing runProviderEntry to throw "Media provider not available: groq".

Debug Evidence

With console.error patches added to apply.ts and runner.ts:

First voice message (works):

[MEDIA-BUG] hasInboundMedia: true MediaPaths: 1 MediaTypes: 1
[MEDIA-BUG] entries for audio: [{"provider":"groq","model":"whisper-large-v3-turbo"}]

(No error — transcription succeeds)

Second voice message (fails):

[MEDIA-BUG] hasInboundMedia: true MediaPaths: 1 MediaTypes: 1
[MEDIA-BUG] entries for audio: [{"provider":"groq","model":"whisper-large-v3-turbo"}]
[MEDIA-BUG] attachment entry error: audio Error: Media provider not available: groq
    at runProviderEntry (runner.ts)
    at runAttachmentEntries (runner.ts)
    at runCapability (runner.ts)

Key observation: hasInboundMedia is true and the correct provider is selected for BOTH messages. But on the second call, the provider object cannot be found in the runtime registry.

Additional Context

  • The error is completely invisible at default log level because all media understanding errors are logged via logVerbose(), which requires shouldLogVerbose() = true. In the gateway worker process, isVerbose() is always false (setVerbose not called) and isFileLogLevelEnabled("debug") is false (level math: 4 <= 3 → false). See Audio/image/video transcription failures are silently swallowed unless debug logging is enabled #60421.
  • The Groq API works perfectly when called directly via curl
  • Audio files are downloaded successfully for all messages
  • resolveAutoEntries correctly identifies Groq as the provider every time — only the provider registry lookup fails

Environment

  • OpenClaw 2026.4.2
  • Windows 11
  • Node.js v25.8.1
  • Provider: Groq (whisper-large-v3-turbo)
  • Channel: Telegram DM

Related Issues

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions