sipeed/picoclaw · error

selected vision model does not support image input; update a

Error message

selected vision model does not support image input; update agents.defaults.image_model to a multimodal model

What it means

Same vision-unsupported condition as error 273, but the configured image model's name could not be determined (empty/blank after trim), so the error cannot name it. It still confirms an image_model was explicitly configured under agents.defaults.image_model and that model rejected image input.

Source

Thrown at pkg/agent/llm_media.go:83

	// JSON schema level with an "unknown variant" error rather than a semantic
	// "not supported" message.
	if strings.Contains(msg, "unknown variant") && strings.Contains(msg, "image_url") {
		return true
	}

	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
	}

View on GitHub (pinned to 49183d7e8d)

Solutions

  1. Inspect the loaded config (print the effective agents.defaults.image_model) to see why the name is empty
  2. Set image_model to an explicit multimodal model id
  3. Fix the config templating/env var that yields a blank value

Example fix

# before
agents:
  defaults:
    image_model: "${VISION_MODEL}"   # env var unset → empty

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

Strategy: validation

Validate before calling

func effectiveImageModel(cfg *config.Config) string {
    return strings.TrimSpace(cfg.Agents.Defaults.ImageModel)
}

// fail fast at startup if the field is configured but resolves empty
if cfg.Agents.Defaults.ImageModelKeySet && effectiveImageModel(cfg) == "" {
    return errors.New("agents.defaults.image_model is set but resolves to an empty model name")
}

Try / catch

resp, err := stream(ctx, req)
if err != nil && strings.Contains(err.Error(), "does not support image input") {
    return resp, fmt.Errorf("vision routing broken: %w", err)
}

Prevention

When it happens

Trigger: agents.defaults.image_model configured but resolving to an empty/whitespace model name at failure time — misparsed config, an empty-string override, or a lookup that produced no name — combined with an image-bearing request whose provider error matched isVisionUnsupportedError.

Common situations: Template/env interpolation producing an empty model name in generated config; config key typo causing the value to be read from elsewhere; a stale config where the image model field is blank.

Related errors


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