CommandCodeAI / CommandCodeAI/command-code

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

Offen
#685 1 Kommentar 0 Reaktionen 1 zugewiesene Person Auf GitHub ansehen

@ahmadbilaldev arbeitet bereits daran.

Seit 18.8.2026.

Vorherrschende Sprache
Keine Sprachdaten
Sterne
4k
Forks
350
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

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.

Beitragsleitfaden

Für dieses Repository ist kein Beitragsleitfaden indexiert

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.