/v1/responses to /chat/completions automatically. It also remaps
OpenAI-style reasoning levels to the two DeepSeek accepts.
Configure
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 acceptreasoning_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 requiresreasoning_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 acceptsresponse_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.Not supported by DeepSeek
- Embeddings (returns
invalid_request_error).