Significant-Gravitas/AutoGPT · error · Error

Transcription failed

Error message

Transcription failed

What it means

HTTP 403 from POST /blocks/{block_id}/execute when the block is registered but flagged disabled. Disabled blocks are known to the registry but barred from execution — usually pending fixes, policy reasons, or feature flags. Distinct from 404: the block exists; it is intentionally blocked.

Source

Thrown at autogpt_platform/frontend/src/app/(platform)/copilot/components/ChatInput/useVoiceRecording.ts:109

      setIsTranscribing(true);
      setError(null);

      try {
        const formData = new FormData();
        formData.append("audio", audioBlob);
        const draft = valueRef.current.trim();
        if (isBrainDumpEnabledRef.current && draft) {
          formData.append("context", draft);
        }

        const response = await fetch("/api/transcribe", {
          method: "POST",
          body: formData,
        });

        if (!response.ok) {
          const data = await response.json().catch(() => ({}));
          throw new Error(data.error || "Transcription failed");
        }

        const data = await response.json();
        if (data.text) {
          handleTranscription(data.text);
        }
      } catch (err) {
        const message =
          err instanceof Error ? err.message : "Transcription failed";
        setError(message);
        console.error("Transcription error:", err);
      } finally {
        setIsTranscribing(false);
      }
    },
    [handleTranscription, inputId],
  );

View on GitHub (pinned to 9c8bb5550f)

Solutions

  1. Filter the block palette / execution path on the block's disabled flag from GET /blocks so disabled blocks are not callable.
  2. Refresh block metadata after deployment and honor the disabled state in the UI.
  3. If the block should be enabled, check its registration flags and server config, then redeploy.

Example fix

// before
await api.post(`/blocks/${blockId}/execute`, data);

// after
const block = (await api.get('/blocks')).find(b => b.id === blockId);
if (block?.disabled) throw new Error('Block is disabled');
await api.post(`/blocks/${blockId}/execute`, data);
Defensive patterns

Strategy: validation

Validate before calling

const block = (await api.get('/blocks')).find(b => b.id === blockId);
if (block?.disabled) throw new Error('Block is disabled');

Type guard

const isExecutableBlock = (b: Block | undefined): b is Block =>
  !!b && !b.disabled;

Try / catch

const resp = await api.post(`/blocks/${blockId}/execute`, data);
if (resp.status === 403) { /* surface 'disabled' message, hide block */ }

Prevention

When it happens

Trigger: Calling execute on a block whose class sets disabled=True (or that was disabled via config) — e.g. a block deactivated in the current deployment while still visible to the client.

Common situations: Platform deployment disabled a problematic block; frontend still lists it from stale cache; version skew where a newly disabled block still appears in an older client's palette.

Related errors


AI-assisted analysis of Significant-Gravitas/AutoGPT@9c8bb5550f (2026-08-14). Data as JSON: /api/errors/9600551ae7ed8d8f. Report an issue: GitHub.