antirez / antirez/ds4

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

Abierto
#933 2 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
C
Estrellas
22.3k
Forks
2.1k
Merge medio
1 d 3 h
PR fusionados (30 d)
4

Descripción

## 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.

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.