Skip to main content

Using DeepSeek with Oh My Pi

Oh My Pi is a terminal AI coding agent. As of v14.5 it ships DeepSeek V4 model entries, but the built-in compat is incomplete — a custom models.yml is still required for reliable use.

Prerequisites

Install Oh My Pi: https://github.com/can1357/oh-my-pi#installation

Get an API key from the DeepSeek Platform:

export DEEPSEEK_API_KEY=<your API key>

Configuration

Create ~/.omp/agent/models.yml:

providers:
deepseek:
baseUrl: https://api.deepseek.com
api: openai-completions
apiKey: DEEPSEEK_API_KEY
authHeader: true
models:
- id: deepseek-v4-pro
name: DeepSeek V4 Pro
reasoning: true
thinking:
minLevel: high
maxLevel: xhigh
mode: effort
input: [text]
contextWindow: 1000000
maxTokens: 384000
compat:
supportsDeveloperRole: false
supportsReasoningEffort: true
maxTokensField: max_tokens
reasoningEffortMap:
high: high
xhigh: max
supportsToolChoice: false
requiresReasoningContentForToolCalls: true
requiresAssistantContentForToolCalls: true
extraBody:
thinking:
type: enabled
- id: deepseek-v4-flash
name: DeepSeek V4 Flash
reasoning: true
thinking:
minLevel: high
maxLevel: xhigh
mode: effort
input: [text]
contextWindow: 1000000
maxTokens: 384000
compat:
supportsDeveloperRole: false
supportsReasoningEffort: true
maxTokensField: max_tokens
reasoningEffortMap:
high: high
xhigh: max
supportsToolChoice: false
requiresReasoningContentForToolCalls: true
requiresAssistantContentForToolCalls: true
extraBody:
thinking:
type: enabled

Configuration notes

Basics

FieldNotes
baseUrl: https://api.deepseek.comDeepSeek OpenAI-compatible endpoint. Do not append /v1.
authHeader: trueSends Authorization: Bearer $DEEPSEEK_API_KEY. Does not go through OAuth /login.
supportsDeveloperRole: falseSends system prompt as system role. DeepSeek rejects the developer role.
maxTokensField: max_tokensDeepSeek uses max_tokens, not OpenAI's max_completion_tokens.

Thinking mode

FieldNotes
thinking.mode: effortUses effort-based thinking. OMP sends a reasoning_effort parameter.
thinking.minLevel: high / maxLevel: xhighLocks the selector to DeepSeek's two supported levels.
reasoningEffortMap: { high: high, xhigh: max }Maps OMP's xhigh to DeepSeek's max. Without this, xhigh is unrecognized.
extraBody.thinking.type: enabledExplicitly enables DeepSeek V4 thinking mode.
supportsReasoningEffort: trueAllows OMP to send reasoning_effort.

Three critical compat fields

These three fields are essential. Without them, DeepSeek V4 will return 400 errors when using tools in thinking mode.

FieldNotes
supportsToolChoice: falseDeepSeek V4 thinking mode rejects the tool_choice parameter.
requiresReasoningContentForToolCalls: trueDeepSeek requires reasoning_content to be preserved across tool-call turns in conversation history. Skipping this causes 400.
requiresAssistantContentForToolCalls: trueEnsures tool-call messages have non-null content. Use together with the field above.

Usage

cd /path/to/your-project
omp --model deepseek/deepseek-v4-pro

For faster responses:

omp --model deepseek/deepseek-v4-flash

Switch models inside Oh My Pi with /model or Ctrl+L.

Known issues

Do not rely on the built-in model entries. Recent builds list deepseek-v4-pro and deepseek-v4-flash via omp --list-models deepseek, but they lack the three critical compat fields above. Long thinking-mode conversations with tool calls will 400. Always use the models.yml configuration shown above.

Oh My Pi does not currently have a DeepSeek OAuth /login entry. API keys must be provided via the DEEPSEEK_API_KEY environment variable or the apiKey field in models.yml.

When using DeepSeek V4 through unofficial providers (DeepInfra, KiloCode, NVIDIA NIM, Zenmux, etc.) via OpenAI-compatible endpoints, reasoning_content replay behavior varies and compatibility is unresolved. Prefer the official api.deepseek.com endpoint.

In models.yml, compat replaces the built-in block wholesale — it does not merge. Always specify the full set of compat fields.