openclaw - 💡(How to fix) Fix Model picker resolves opencode-go DeepSeek V4 Pro to OpenRouter DeepSeek when both are configured

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…

When both opencode-go/deepseek-v4-pro and openrouter/deepseek/deepseek-v4-pro are available in the model picker / allowed model catalog, selecting the fully-qualified OpenCode Go model runs the OpenRouter model instead.

This makes it impossible to keep both DeepSeek V4 Pro routes available for manual selection, even though their provider-qualified model refs are distinct.

Root Cause

When both opencode-go/deepseek-v4-pro and openrouter/deepseek/deepseek-v4-pro are available in the model picker / allowed model catalog, selecting the fully-qualified OpenCode Go model runs the OpenRouter model instead.

This makes it impossible to keep both DeepSeek V4 Pro routes available for manual selection, even though their provider-qualified model refs are distinct.

Fix Action

Workaround

Hide/remove openrouter/deepseek/deepseek-v4-pro from the allowed picker/catalog. Then opencode-go/deepseek-v4-pro runs correctly.

Code Example

openrouter/deepseek/deepseek-v4-pro        text       1024k  configured,alias:DeepSeek-V4-Pro
opencode-go/deepseek-v4-pro                text       977k   configured,alias:OpenCode Go DeepSeek V4 Pro

---

openclaw agent \
  --local \
  --session-id ds-go-dual-test \
  --message "Reply exactly: DS_GO_DUAL_OK" \
  --model "opencode-go/deepseek-v4-pro" \
  --timeout 180 \
  --json

---

{
  "provider": "opencode-go",
  "model": "deepseek-v4-pro",
  "fallbackUsed": false
}

---

{
  "text": "DS_GO_DUAL_OK",
  "provider": "openrouter",
  "model": "deepseek/deepseek-v4-pro",
  "fallbackUsed": false,
  "attempts": [
    {
      "provider": "openrouter",
      "model": "deepseek/deepseek-v4-pro",
      "result": "success",
      "stage": "assistant"
    }
  ]
}

---

{
  "provider": "opencode-go",
  "model": "deepseek-v4-pro",
  "contextTokens": 1000000,
  "fallbackUsed": false,
  "attempts": [
    {
      "provider": "opencode-go",
      "model": "deepseek-v4-pro",
      "result": "success",
      "stage": "assistant"
    }
  ]
}

---

POST https://opencode.ai/zen/go/v1/chat/completions
model=deepseek-v4-pro
http=200

---

opencode-go/deepseek-v4-pro

---

openrouter/deepseek/deepseek-v4-pro
RAW_BUFFERClick to expand / collapse

Summary

When both opencode-go/deepseek-v4-pro and openrouter/deepseek/deepseek-v4-pro are available in the model picker / allowed model catalog, selecting the fully-qualified OpenCode Go model runs the OpenRouter model instead.

This makes it impossible to keep both DeepSeek V4 Pro routes available for manual selection, even though their provider-qualified model refs are distinct.

Environment

  • OpenClaw: 2026.5.7 (eeef486)
  • Runtime: embedded/pi agent runtime
  • Providers involved:
    • opencode-go/deepseek-v4-pro
    • openrouter/deepseek/deepseek-v4-pro

Reproduction

Configure both model refs so they are visible/allowed:

openrouter/deepseek/deepseek-v4-pro        text       1024k  configured,alias:DeepSeek-V4-Pro
opencode-go/deepseek-v4-pro                text       977k   configured,alias:OpenCode Go DeepSeek V4 Pro

Then run a fully-qualified OpenCode Go model selection:

openclaw agent \
  --local \
  --session-id ds-go-dual-test \
  --message "Reply exactly: DS_GO_DUAL_OK" \
  --model "opencode-go/deepseek-v4-pro" \
  --timeout 180 \
  --json

Expected Behavior

The selected provider/model should be preserved exactly:

{
  "provider": "opencode-go",
  "model": "deepseek-v4-pro",
  "fallbackUsed": false
}

Actual Behavior

The run succeeds, but on the wrong provider/model:

{
  "text": "DS_GO_DUAL_OK",
  "provider": "openrouter",
  "model": "deepseek/deepseek-v4-pro",
  "fallbackUsed": false,
  "attempts": [
    {
      "provider": "openrouter",
      "model": "deepseek/deepseek-v4-pro",
      "result": "success",
      "stage": "assistant"
    }
  ]
}

Since fallbackUsed is false, this does not appear to be normal model fallback. It looks like model resolution / normalization changes the provider before execution.

Control Check

If openrouter/deepseek/deepseek-v4-pro is removed from the picker/allowlist, the same OpenCode Go model works correctly:

{
  "provider": "opencode-go",
  "model": "deepseek-v4-pro",
  "contextTokens": 1000000,
  "fallbackUsed": false,
  "attempts": [
    {
      "provider": "opencode-go",
      "model": "deepseek-v4-pro",
      "result": "success",
      "stage": "assistant"
    }
  ]
}

A direct OpenCode Go API call also works:

POST https://opencode.ai/zen/go/v1/chat/completions
model=deepseek-v4-pro
http=200

Expected Fix

A fully-qualified model ref should be honored exactly. If the user selects:

opencode-go/deepseek-v4-pro

OpenClaw should not resolve it to:

openrouter/deepseek/deepseek-v4-pro

This likely affects provider/model collision cases where multiple providers expose semantically similar models with different provider-qualified refs.

Workaround

Hide/remove openrouter/deepseek/deepseek-v4-pro from the allowed picker/catalog. Then opencode-go/deepseek-v4-pro runs correctly.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING