antirez / antirez/ds4

ds4-server 400s valid OpenAI tool-role image messages as invalid JSON

オープン
#933 コメント 2 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
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 はまだ評価されていません。

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。