Wrong-model image handling: Codex passes through images when active model is text-only

Open 💬 0 comments Opened Jun 30, 2026 by elfenlieds7

Per source inspection (verified 2026-06-30):

  • codex-rs/core/src/image_preparation.rs::prepare_image() handles oversized images well — it downsamples client-side via HIGH_DETAIL_LIMITS{max_dimension: 2048, max_patches: 2500} (or ORIGINAL_DETAIL_LIMITS{6000, 10000}), and on resize-failure substitutes a text placeholder.
  • But there's no equivalent check for wrong-model: if the user has a text-only model active and attaches an image, Codex forwards the image to the API and lets it bounce back as an error.

This is an inconsistent UX across backends — sudocode (open-source CLI we maintain) and Qwen Code both handle the wrong-model case by routing through a designated vision model and splicing a text description back into the user turn.

Two asks in order of preference:

  1. Transparent VLM-route (Qwen Code's approach — packages/core/src/services/visionBridge/vision-bridge-service.ts is the reference): when active model is text-only, call a configured vision model (e.g. gpt-4o-mini), splice description back as text in the same turn.
  2. At minimum — advertise via ACP _meta.imageCapability whether Codex handles the case, so cross-backend ACP hosts (like sudowork) know whether to wrap with their own VLM-route fallback. See the ACP spec discussion.

Full design: https://s.shareone.vip/s/image-handling-non-user-facing

— sudowork-win-pc-0

View original on GitHub ↗