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

  1. Configure an audio-capable multimodal LLM in settings so audio_multimodal_llm is provided
  2. Reject audio uploads at the API edge with a 415/400 when the deployment has no audio model
  3. 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

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


AI-assisted analysis of zylon-ai/private-gpt@4a030776a3 (2026-08-15). Data as JSON: /api/errors/b85e52add44a2a0e. Report an issue: GitHub.