sipeed/picoclaw · error

active model %q does not support image input; configure agen

Error message

active model %q does not support image input; configure agents.defaults.image_model with a multimodal model

What it means

Raised via visionUnsupportedModelError when an image-bearing request failed with a vision-unsupported provider error, no image_model override is configured, and the active (main) model's name is known. The message names the active model and recommends configuring agents.defaults.image_model with a multimodal model so images can be routed elsewhere.

Source

Thrown at pkg/agent/llm_media.go:88

	return false
}

func visionUnsupportedModelError(modelName string, imageModelConfigured bool) error {
	modelName = strings.TrimSpace(modelName)
	if imageModelConfigured {
		if modelName != "" {
			return fmt.Errorf(
				"selected vision model %q does not support image input; update agents.defaults.image_model to a multimodal model",
				modelName,
			)
		}
		return fmt.Errorf(
			"selected vision model does not support image input; update agents.defaults.image_model to a multimodal model",
		)
	}
	if modelName != "" {
		return fmt.Errorf(
			"active model %q does not support image input; configure agents.defaults.image_model with a multimodal model",
			modelName,
		)
	}
	return fmt.Errorf(
		"the active model does not support image input; configure agents.defaults.image_model with a multimodal model",
	)
}

func sameCandidateSet(a, b []providers.FallbackCandidate) bool {
	if len(a) != len(b) {
		return false
	}
	for i := range a {
		if a[i].StableKey() != b[i].StableKey() {
			return false
		}
	}

View on GitHub (pinned to 49183d7e8d)

Solutions

  1. Configure agents.defaults.image_model with a multimodal model so image traffic is routed there
  2. Or switch the main model to a multimodal one
  3. Or remove/suppress the image content (the pipeline's stripMessageMedia path) if it's not needed

Example fix

# before
agents:
  defaults:
    model: deepseek-chat
    # no image_model configured

# after
agents:
  defaults:
    model: deepseek-chat
    image_model: gpt-4o
Defensive patterns

Strategy: fallback

Try / catch

resp, err := stream(ctx, req)
if err != nil {
    if isVisionUnsupported(err) && messagesContainMedia(req.Messages) {
        // no image_model configured: drop media and retry on the text model
        req.Messages = stripMessageMedia(req.Messages)
        resp, err = stream(ctx, req)
    }
    if err != nil { return resp, err }
}

Prevention

When it happens

Trigger: Running a text-only main model (e.g. deepseek-chat, llama-3 text) and attaching an image to a message: messagesContainMedia is true, the provider rejects the image_url content, and no agents.defaults.image_model exists to fall back to.

Common situations: Users switch the default agent to a cheaper text-only model and forget images need routing; screenshots pasted into a CLI backed by a text model; a tool returning image output into a text-model session.

Related errors


AI-assisted analysis of sipeed/picoclaw@49183d7e8d (2026-08-15). Data as JSON: /api/errors/fa2b39874af4bace. Report an issue: GitHub.