Skip to content

0.12.0 regression: local .ogg transcription via Groq returns 403, while 0.11.1 works #170

@mrpl327

Description

@mrpl327

Summary

@steipete/summarize 0.12.0 fails to transcribe a local .ogg audio file with Groq in my environment, while 0.11.1 works on the same machine with the same GROQ_API_KEY and the same audio file.

This looks like a regression in the Groq transcription path introduced/exposed between 0.11.1 and 0.12.0.

Environment

  • summarize 0.11.1 → works
  • summarize 0.12.0 → fails
  • OS: Linux
  • Node: v22.22.1
  • Input: local .ogg file (audio/ogg)
  • Groq API key is valid

What works

1) summarize@0.11.1

summarize "/path/to/file.ogg" --extract-only --json

Example output shape:

Transcript:
<successful transcript text from the local audio file>

2) Direct curl to Groq transcription endpoint

curl https://api.groq.com/openai/v1/audio/transcriptions \
  -H "Authorization: Bearer $GROQ_API_KEY" \
  -F "file=@audio.ogg" \
  -F 'model=whisper-large-v3-turbo'

Example response shape:

{"text":"<successful transcript text>", ...}

What fails

summarize@0.12.0

summarize "/path/to/file.ogg" --extract-only --json

Error:

Failed to transcribe media (Groq transcription failed; falling back to local/AssemblyAI/Gemini/OpenAI: Groq transcription failed (403): {"error":{"message":"Forbidden"}}; yt-dlp transcription failed: Groq transcription failed: Groq transcription failed (403): {"error":{"message":"Forbidden"}})

Important A/B result

Same machine, same file, same key:

  • 0.11.1 ✅ works
  • 0.12.0 ❌ fails with 403 Forbidden

Extra debugging

I also reproduced the failure with a minimal Node fetch + FormData + Blob upload using the same Groq endpoint and same model:

const form = new FormData();
form.append('file', new Blob([bytes], { type: 'audio/ogg' }), 'audio.ogg');
form.append('model', 'whisper-large-v3-turbo');
await fetch('https://api.groq.com/openai/v1/audio/transcriptions', {
  method: 'POST',
  headers: { Authorization: `Bearer ${key}` },
  body: form,
});

This also returns:

403 Forbidden

while curl succeeds.

So this may be a multipart upload compatibility regression (or a path that now consistently hits a Groq-incompatible request shape) rather than a bad key.

Why I suspect 0.12.0 specifically

The 0.12.0 release notes mention:

  • adding AssemblyAI as a first-class transcription provider
  • refactor remote fallback ordering

That matches what I’m seeing: 0.12.0 appears to hit a Groq-first path that is broken in my environment, while 0.11.1 does not.

Request

Could you check whether the Groq transcription upload path changed between 0.11.1 and 0.12.0, especially around:

  • multipart FormData construction
  • Blob/filename/content-type handling for local .ogg
  • provider/fallback ordering changes that make Groq the first path more consistently

I can provide more details if helpful.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions