Skip to content

fix(api): accept OpenAI multimodal text+image_url content parts on chat - #573

Merged
seonghobae merged 5 commits into
feat/reasoning-effort-none-store-stream-empty-noop-http-honesty-20260814114817from
feat/multimodal-content-parts-tip-http-honesty-20260816191047
Aug 16, 2026
Merged

fix(api): accept OpenAI multimodal text+image_url content parts on chat#573
seonghobae merged 5 commits into
feat/reasoning-effort-none-store-stream-empty-noop-http-honesty-20260814114817from
feat/multimodal-content-parts-tip-http-honesty-20260816191047

Conversation

@seonghobae

Copy link
Copy Markdown
Contributor

Summary

  • Accept OpenAI multimodal content parts (text + image_url) on /v1/chat/completions with named fail-closed errors for bad part shapes and unsupported types (e.g. input_audio).
  • Coerce multimodal content to plain text for agent routing (_latest_user_text) so list content never 500s.
  • Re-ships tip honesty substrate (from empty-string numeric tip). Local full unit: 921 passed.
  • Supersedes bare fix(api): accept OpenAI-style multimodal message content for vision #563 multimodal intent on a Semgrep-clean tip substrate.

Test plan

  • pytest tests/test_multimodal_message_content_http_honesty.py (+ developer multimodal suite)
  • pytest tests -q (921 passed) — evidence implementer/evidence/pytest-multimodal-full.log
  • CI Full unit + Semgrep product gates

Product gates only: Full unit + Semgrep (Strix ignored). Independent non-author APPROVE still required.

SDK clients may stringify omitted optionals as empty strings. Treat
empty/whitespace temperature, top_p, max_tokens, max_completion_tokens,
penalties, n, seed, logprobs, parallel_tool_calls, include_orchestration_trace,
echo, best_of, dimensions, max_output_tokens, and responses stream as omit.
Whitespace-only stop arrays are also omit. Local full unit: 917 passed.
Vision callers send content-parts arrays. Shape-check and passthrough
text/image_url parts; unsupported part types fail closed. Coerce part
text for agent selection so list content does not 500. Tip substrate
from empty-string numeric honesty. Local full unit: 921 passed.
@seonghobae
seonghobae enabled auto-merge (squash) August 16, 2026 10:18
@coderabbitai

coderabbitai Bot commented Aug 16, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: fe651e53-0fbe-4d63-b577-e12c34cfb5e2

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@seonghobae
seonghobae changed the base branch from main to feat/reasoning-effort-none-store-stream-empty-noop-http-honesty-20260814114817 August 16, 2026 10:58
@seonghobae
seonghobae merged commit d192fa1 into feat/reasoning-effort-none-store-stream-empty-noop-http-honesty-20260814114817 Aug 16, 2026
1 check passed
@seonghobae
seonghobae deleted the feat/multimodal-content-parts-tip-http-honesty-20260816191047 branch August 16, 2026 11:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant