ds4-server 400s valid OpenAI tool-role image messages as invalid JSON
- 主要言語
- C
- スター
- 22.3k
- フォーク
- 2.1k
- 平均マージ
- 1日 3時間
- マージ済み PR(30日)
- 4
説明
## Summary
`ds4-server` rejects a well-formed OpenAI Chat Completions request that includes an inline PNG/JPEG data URI on a `role=tool` (or `role=function`) message. The HTTP status is 400 with `"invalid JSON request"`, even though the body is valid JSON.
This breaks OpenAI-compatible coding agents that attach tool-result screenshots as `image_url` content parts on the tool message, which is the normal Chat Completions shape. A `role=user` data URI of the same image is accepted.
## Repro
`POST /v1/chat/completions` with messages:
1. `role=user` text
2. `role=assistant` with a `tool_calls` entry
3. `role=tool` whose `content` is an array of `{type:text}` plus `{type:image_url, image_url:{url:"data:image/png;base64,..."}}` (or jpeg)
Observed: `400 {"error":{"message":"invalid JSON request","type":"invalid_request_error"}}` before vision encode.
The same data URI on `role=user` returns 200.
## Cause
In `parse_messages` / `parse_anthropic_messages`, any message with images whose role is not exactly `"user"` fails parse. That path always reports `"invalid JSON request"`.
The user-only restriction matches the GLM note that image tokens should land on a user-shaped turn, and `ds4-agent` already remaps `view_image` onto a user turn. The server still needs to accept the OpenAI wire format: DeepSeek already wraps tool results in a user turn (`<|User|>…`).
File paths and remote URLs should stay rejected.
## Suggested fix
Allow inline images on `user`, `tool`, and `function`. Keep rejecting assistant/system images, paths, and `https` URLs. Prefer a specific error string for remaining schema failures instead of `"invalid JSON request"` (optional, not required for the role check).
I can send a PR with a parser unit test for the tool-role shape.
コントリビューションガイド
評価
この issue はまだ評価されていません。