zylon-ai/private-gpt · error · ValueError
Audio blocks found but no audio-capable LLM provided.
Error message
Audio blocks found but no audio-capable LLM provided.
What it means
The audio preprocessor detected audio blocks in the incoming message (needs_audio_preprocessing was true, extract_audio_blocks non-empty) but audio_multimodal_llm is None — no audio-capable LLM was wired into the component. Transcription cannot proceed, so it fails fast instead of silently dropping the audio.
Source
Thrown at private_gpt/components/chat/processors/chat_history/multimodality/audio_preprocessor.py:59
Preprocessed message with audio content converted to text descriptions
Raises:
ValueError: If audio preprocessing fails or required capabilities are missing
"""
needs_audio_preprocessing = requires_audio_preprocessing(
main_llm, audio_multimodal_llm
)
if not needs_audio_preprocessing:
yield AudioProcessingResponse(message=message)
return
audio_blocks = extract_audio_blocks(message)
if not audio_blocks:
yield AudioProcessingResponse(message=message)
return
if audio_multimodal_llm is None:
raise ValueError("Audio blocks found but no audio-capable LLM provided.")
event = MultimodalProcessingStatus(status="processing", type="audio")
yield AudioProcessingResponse(processing_status=event)
try:
audio_description = await process_audio_in_message(
audio_multimodal_llm, message, user_query=message.content, **kwargs
)
if not audio_description:
raise ValueError("Failed to describe audio in the message.")
event = event.model_copy(
update={
"status": "completed",
"content": audio_description,
}
)View on GitHub (pinned to 4a030776a3)
Solutions
- Configure an audio-capable multimodal LLM in settings so audio_multimodal_llm is provided
- Reject audio uploads at the API edge with a 415/400 when the deployment has no audio model
- If audio is not supported, block audio blocks client-side so this path is never reached
Example fix
# before (settings): no audio multimodal llm configured # after # settings.yaml multimodality: audio_llm: "my-audio-model"
Defensive patterns
Strategy: validation
Validate before calling
audio_blocks = extract_audio_blocks(message)
if audio_blocks and audio_multimodal_llm is None:
raise HTTPException(400, "Audio uploads are not supported by this deployment") Type guard
def can_process_audio(message: ChatMessage, llm) -> bool:
return not extract_audio_blocks(message) or llm is not None Try / catch
try:
async for resp in audio_preprocessor.run(message, ...):
...
except ValueError as e:
if "no audio-capable LLM" in str(e):
return 400, "audio not supported" # surface as client error, not 500
raise Prevention
- Gate audio uploads at the API layer based on deployment capabilities
- Fail startup checks when ingestion allows audio but no audio LLM is configured
- Advertise supported modalities to clients so they never send unsupported blocks
When it happens
Trigger: Sending a chat message containing AudioBlock content while the audio multimodal LLM was not configured/injected into the audio preprocessor's run().
Common situations: Deployment enables multimodal ingestion but never configures the audio model in settings; DI wiring returns None because the audio LLM profile is unset; clients uploading audio to a text-only deployment.
Related errors
- Failed to describe audio in the message.
- LLM does not support structured chat.
- Failed to describe images in the message.
- Configured model does not support function calling
- Invalid reasoning_effort budget: {budget}. Must be a number
AI-assisted analysis of zylon-ai/private-gpt@4a030776a3 (2026-08-15).
Data as JSON: /api/errors/b85e52add44a2a0e.
Report an issue: GitHub.