CommandCodeAI / CommandCodeAI/command-code

Provider API rejects response_format (400 Invalid input) even for DeepSeek json_object mode

未关闭
#685 1 条评论 0 个 reaction 已指派 1 人 在 GitHub 查看

@ahmadbilaldev 已经在做这个了。

开始于 2026年8月18日。

主要语言
没有语言数据
星标
4k
派生
350
PR 合并指标
30 天内没有已合并 PR

描述

Summary

The Provider API (https://api.commandcode.ai/provider/v1/chat/completions) rejects the standard OpenAI response_format parameter with HTTP 400 — even for {"type": "json_object"}, which the underlying DeepSeek API supports natively. This breaks every OpenAI-compatible client that sends response_format (OpenAI SDK, Vercel AI SDK, Pydantic structured output, agent harnesses), not just the Command Code CLI.

Expected Behavior

response_format: {"type": "json_object"} (DeepSeek JSON mode) should be passed through to the upstream model, since DeepSeek's own Chat Completions API documents and supports json_object. The Provider API claims OpenAI Chat Completions schema compatibility, so OpenAI-standard request parameters should be accepted or at least documented as unsupported — not rejected with a generic 400.

Actual Behavior

HTTP 400 with a double-wrapped error:

{"error":{"message":"{\"error\":{\"message\":\"Invalid input\",\"type\":\"invalid_request_error\",\"param\":\"response_format\",\"code\":\"invalid_request_error\"}}","type":"invalid_request_error"}}

The same request without response_format succeeds (200) and the model returns clean JSON when the prompt asks for it.

Steps to reproduce the issue
curl https://api.commandcode.ai/provider/v1/chat/completions \
  -H "Authorization: Bearer $CMD_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek/deepseek-v4-pro",
    "messages": [{"role": "user", "content": "Return JSON only: {\"answer\": 42}"}],
    "response_format": {"type": "json_object"},
    "max_completion_tokens": 64
  }'

Observed:

  1. With response_format400 Invalid input, param=response_format
  2. Without response_format200, content: {"answer": 42} (clean JSON)
  3. Same request shape against DeepSeek official API with response_format: {"type":"json_object"} → works (200)
Command Code Version

Provider API (api.commandcode.ai/provider/v1) — not the CLI; no CLI version involved.

Operating System

Linux

Terminal/IDE

n/a (HTTP API test)

Shell

bash

Fix prompt (optional)

In the Provider API gateway, allow response_format: {"type": "json_object"} to pass through to DeepSeek upstream (DeepSeek Chat Completions supports it). If pass-through of json_schema is out of scope for now, at minimum accept json_object and document which response_format variants are supported on the Provider API docs page. A quick check: replay the curl above against the upstream after the fix and expect HTTP 200.

Additional context
  • Impact: any agent harness / SDK sending response_format gets 400 on the Pro route; the workaround (omit the parameter and rely on prompt instructions) is fragile because the model's JSON validity is no longer guaranteed by the API.
  • Related behavior: the opencode.ai zen/go route accepts response_format only when the prompt contains the literal word json — also worth documenting.
  • Note: this issue is about the Provider API endpoint (/provider/v1/chat/completions), not the CLI — there is no separate Provider API bug tracker, so filing here.

贡献指南

这个仓库没有索引到贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。