Skip to main content
DeepSeek does not expose a native Responses API, so GoModel translates /v1/responses to /chat/completions automatically. It also remaps OpenAI-style reasoning levels to the two DeepSeek accepts.

Configure

Or in config.yaml:
If you previously configured DeepSeek as type: openai, switch to type: deepseek. The generic OpenAI provider does not translate /responses or remap reasoning effort.

Reasoning effort mapping

DeepSeek V4 reasoning models accept reasoning_effort as a top-level string with two permitted levels: high and max. GoModel rewrites the OpenAI-shaped "reasoning": {"effort": "..."} into DeepSeek’s top-level reasoning_effort — no client change required. Validate or normalize custom client values to high or max before calling GoModel. To disable reasoning, omit the reasoning field entirely; any provided reasoning.effort, including low, is mapped and enables reasoning.

Tool calls and reasoning

In thinking mode, DeepSeek requires reasoning_content on every earlier assistant turn whenever the request includes tools, even turns without tool calls. GoModel keeps the value a client sends and fills in a single space when it is missing, so clients that don’t know DeepSeek serves the request (for example through a virtual model) keep working.

Structured outputs

DeepSeek accepts response_format: {"type": "json_object"} but not json_schema. For json_schema requests (including text.format on /v1/responses), GoModel follows DEEPSEEK_JSON_SCHEMA_MODE:
Downgraded output is valid JSON aimed at the schema, but DeepSeek does not enforce it. Validate the result if you depend on the exact shape, or set error when clients must never receive unenforced output.
Both rules also apply to DeepSeek models served by OpenCode Go.

Not supported by DeepSeek

  • Embeddings (returns invalid_request_error).
Last modified on September 23, 2026