Agent-Reach Transcribe Feature: Groq Whisper vs OpenAI Whisper Implementation Guide
TLDR: Agent-Reach provides a unified transcription pipeline in agent_reach/transcribe.py that routes audio to Groq Whisper by default, with automatic fallback to OpenAI Whisper, requiring only API key configuration in ~/.agent-reach/config.yaml.
The Panniantong/Agent-Reach repository offers a provider-agnostic transcription system that converts audio from YouTube videos or local files into text using either Groq's or OpenAI's Whisper implementations. This article examines the architectural differences between these providers and demonstrates how to configure and invoke the Agent-Reach transcribe feature through both Python and CLI interfaces.
Provider Architecture and Configuration
The PROVIDERS Registry
At the core of the system lies the PROVIDERS dictionary defined in agent_reach/transcribe.py. This registry maps provider identifiers to their respective API endpoints, model names, and configuration key requirements:
PROVIDERS = {
"groq": {
"endpoint": "https://api.groq.com/openai/v1/audio/transcriptions",
"model": "whisper-large-v3",
"key_field": "groq_api_key",
},
"openai": {
"endpoint": "https://api.openai.com/v1/audio/transcriptions",
"model": "whisper-1",
"key_field": "openai_api_key",
},
}
Each entry specifies the HTTP endpoint for audio transcriptions, the specific model identifier (whisper-large-v3 for Groq, whisper-1 for OpenAI), and the configuration key name used to retrieve the API token.
Configuration Requirements
The configuration system (agent_reach/config.py) stores user secrets in ~/.agent-reach/config.yaml. The Agent-Reach transcribe feature requires one or both of these keys:
groq_api_key– Enables Groq Whisper accessopenai_api_key– Enables OpenAI Whisper access
The FEATURE_REQUIREMENTS map in the configuration module validates that at least one provider is properly configured before allowing transcription operations. The Config.is_configured helper method checks for these prerequisites, enabling the YouTube channel to advertise transcription capability only when ready.
Audio Processing Pipeline
Download and Compression
When processing URLs (particularly YouTube videos), the download_audio function utilizes yt-dlp to fetch M4A files. The compress_audio function then normalizes audio to mono, 16 kHz, 32 kbps, guaranteeing that files remain under the Whisper 25 MiB limit. This compression step is critical for subsequent API transmission.
Chunking Strategy
For audio exceeding the 25 MiB limit after compression, the chunk_audio function splits files into segments defined by CHUNK_SECONDS = 600 (10 minutes). Each chunk is processed independently by transcribe_chunk, with results concatenated using newline characters to form the complete transcript.
Provider Selection and Fallback Logic
The public transcribe(source, *, provider="auto", …) function accepts a provider argument that determines routing behavior:
provider="auto"(default): Uses the internal_provider_orderlist["groq", "openai"], attempting Groq first due to its free tier and fast inference, then falling back to OpenAI if needed.- Explicit selection: Passing
"groq"or"openai"bypasses the order and targets that specific service.
The _transcribe_with_fallback internal method implements the retry logic. If a provider fails (e.g., returns a 429 error), the system silently attempts the next configured provider. If no API keys are configured, the NoProviderConfigured exception is raised immediately to prevent unnecessary audio downloads. Other specific exceptions include TranscribeError for API failures and MissingDependency for missing ffmpeg or yt-dlp binaries.
Usage Examples
Python API
Configure Groq Whisper explicitly:
from agent_reach import transcribe as tr
from agent_reach.config import Config
cfg = Config()
cfg.set("groq_api_key", "YOUR_GROQ_KEY")
text = tr.transcribe(
"https://youtu.be/abc123",
provider="groq",
config=cfg,
)
print(text)
Utilize automatic fallback to OpenAI:
cfg.set("openai_api_key", "YOUR_OPENAI_KEY")
# With Groq unavailable, auto mode will try OpenAI directly
text = tr.transcribe("my_podcast.m4a", provider="auto", config=cfg)
Handle large files with automatic chunking:
# Files >24 MiB automatically split into 10-minute chunks
transcript = tr.transcribe("large_audio.wav", provider="auto", config=cfg)
CLI Interface
Install optional dependencies:
pip install "agent-reach[transcribe]"
Configure your preferred provider:
agent-reach configure groq-key YOUR_GROQ_KEY
# or
agent-reach configure openai-key YOUR_OPENAI_KEY
Transcribe content:
# Explicit Groq usage
agent-reach transcribe https://youtu.be/abc123 --provider groq
# Auto-fallback (Groq → OpenAI)
agent-reach transcribe https://youtu.be/abc123
Key Source Files
agent_reach/transcribe.py– Core orchestration including download, compression, chunking, provider routing, and fallback logic.agent_reach/config.py– YAML-based configuration management, environment-variable overrides, and feature-requirement mapping.agent_reach/channels/youtube.py– YouTube channel implementation that checks foryt-dlp,ffmpeg, and Whisper readiness before delegating to the transcribe orchestrator.agent_reach/cli.py– Command-line interface entry point exposing thetranscribesub-command and configuration helpers.tests/test_transcribe.py– Test suite validating provider routing, fallback logic, and chunking workflows.
Summary
- Agent-Reach transcribe feature uses a unified
transcribe()function that abstracts Groq Whisper and OpenAI Whisper behind a single interface. - The
PROVIDERSregistry inagent_reach/transcribe.pydefines endpoint URLs, model names (whisper-large-v3vswhisper-1), and required API keys. - Automatic fallback follows the order Groq → OpenAI when
provider="auto"is specified, with_transcribe_with_fallbackhandling retry logic. - The chunking system automatically processes files larger than 25 MiB by splitting them into 10-minute segments via
chunk_audio. - Configuration requires storing
groq_api_keyoropenai_api_keyin~/.agent-reach/config.yaml, validated throughConfig.is_configured.
Frequently Asked Questions
How does Agent-Reach decide which Whisper provider to use?
When provider="auto" is specified (the default), Agent-Reach consults the internal _provider_order list ["groq", "openai"] and attempts Groq first. If Groq returns an error or lacks configuration, _transcribe_with_fallback automatically retries with OpenAI. You can override this by passing provider="groq" or provider="openai" explicitly.
What audio file limits does the transcribe feature enforce?
The system enforces a 25 MiB limit per API request. The compress_audio function normalizes audio to mono, 16 kHz, 32 kbps to stay under this limit. If compression alone is insufficient, chunk_audio splits files into 10-minute segments using CHUNK_SECONDS = 600, processing each chunk separately and concatenating results.
Why does Agent-Reach require both groq_api_key and openai_api_key?
Neither key is strictly required individually; you only need at least one configured provider to use the transcription feature. However, configuring both enables the fallback mechanism, allowing the system to automatically switch to OpenAI Whisper if Groq reaches rate limits or experiences outages. The NoProviderConfigured exception prevents execution when neither key is present.
Where does Agent-Reach store configuration and API keys?
According to the source code in agent_reach/config.py, the system stores secrets in ~/.agent-reach/config.yaml. The Config class manages these values, supporting direct file edits or programmatic setting via cfg.set("groq_api_key", "value"). The FEATURE_REQUIREMENTS map validates that required keys exist before attempting expensive audio downloads.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →