mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-05-18 04:41:56 +00:00
fix(agent): catch ChatGPT-account Codex data-URL rejection so images are stripped instead of cascading to compression (#23602)
When the user's main provider is openai-codex on the ChatGPT-account backend (https://chatgpt.com/backend-api/codex), sending a native image attachment encodes it as data:image/...base64,... in the input_image field. The OpenAI Responses API on the public endpoint accepts that, but the ChatGPT-account variant rejects it with HTTP 400: Invalid 'input[N].content[K].image_url'. Expected a valid URL, but got a value with an invalid format. Hermes' image-rejection phrase list didn't include this wording, so the error escaped the strip-and-retry branch and fell through to the generic recovery path: model fallback → context-too-large → compression cascade → auxiliary OpenRouter 402 spam (issue #23570). Add a NARROW phrase keyed on the field-path apostrophe used by the Codex Responses error format: "image_url'. expected". This matches the actual error format without false-tripping on generic 'Expected a valid URL' errors from unrelated tools (webhooks, redirect_uri, etc.). Once matched, the existing branch strips images from history, sets _vision_supported= False for the session, and retries text-only. Refs #23570 (1 of 3 image-replay improvements; persistence rewrite to store image PATHS instead of inlined base64 is a separate follow-up)
This commit is contained in:
parent
3e7145e0bb
commit
7026af4e23
2 changed files with 39 additions and 0 deletions
15
run_agent.py
15
run_agent.py
|
|
@ -13117,6 +13117,21 @@ class AIAgent:
|
|||
"does not support multimodal",
|
||||
"does not support vision",
|
||||
"model does not support image",
|
||||
# ChatGPT-account Codex backend
|
||||
# (https://chatgpt.com/backend-api/codex) rejects
|
||||
# data:image/...base64 URLs in input_image fields
|
||||
# with HTTP 400 "Invalid 'input[N].content[K].image_url'.
|
||||
# Expected a valid URL, but got a value with an
|
||||
# invalid format." The OpenAI Responses API on the
|
||||
# public endpoint accepts data URLs, but the
|
||||
# ChatGPT-account variant does not. Without this
|
||||
# phrase the agent cascaded into compression /
|
||||
# context-too-large recovery instead of just
|
||||
# stripping the images. Match is narrow on
|
||||
# purpose — keyed on the field-path apostrophe so
|
||||
# we don't false-trip on other URL validation
|
||||
# errors. (issue #23570)
|
||||
"image_url'. expected",
|
||||
)
|
||||
_err_lower = _err_body.lower()
|
||||
_looks_like_image_rejection = any(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue