Summary
Claude Desktop (Cowork, custom3p managed config) pointed at the opencodex gateway fails with HTTP 400 — the desktop client sends the injected alias model id (e.g. claude-opus-4-8-20261210) and opencodex forwards that alias verbatim to the routed provider (deepseek) instead of reverse-mapping it to the real model (deepseek/deepseek-v4-flash).
Expected
opencodex should reverse-map the alias from claudeCode.desktopProfile.assignments (alias → provider/model) before forwarding to the provider, like it does for Claude Code CLI aliases.
Actual
- Claude Desktop sends: model=
claude-opus-4-8-20261210
- opencodex forwards to deepseek provider unchanged
- DeepSeek API rejects:
The supported API model names are deepseek-v4-pro or deepseek-v4-flash, but you passed claude-opus-4-8-20261210 (400)
- Usage log confirms:
provider=deepseek, model=claude-opus-4-8-20261210, requestedModel=claude-opus-4-8-20261210, status=400
Repro
ocx login deepseek, add deepseek provider
ocx claude desktop apply (injects configLibrary json with inferenceModels: name=claude-opus-4-8-20261210, labelOverride=Deepseek V4 Flash (deepseek))
- Open Claude Desktop → it shows "Deepseek V4 Flash (deepseek)" in the model picker
- Send a message → 400, model never reaches DeepSeek
Notes
- Manually changing the configLibrary name to
deepseek/deepseek-v4-flash fails Claude Desktop validation ("is not an Anthropic model"); changing to anthropic/deepseek-v4-flash passes validation but opencodex still forwards it verbatim and DeepSeek rejects it.
- Environment: opencodex 2.8.0, Claude Desktop 1.24012.9 (macOS), deepseek provider (openai-chat adapter).
Summary
Claude Desktop (Cowork, custom3p managed config) pointed at the opencodex gateway fails with HTTP 400 — the desktop client sends the injected alias model id (e.g.
claude-opus-4-8-20261210) and opencodex forwards that alias verbatim to the routed provider (deepseek) instead of reverse-mapping it to the real model (deepseek/deepseek-v4-flash).Expected
opencodex should reverse-map the alias from
claudeCode.desktopProfile.assignments(alias → provider/model) before forwarding to the provider, like it does for Claude Code CLI aliases.Actual
claude-opus-4-8-20261210The supported API model names are deepseek-v4-pro or deepseek-v4-flash, but you passed claude-opus-4-8-20261210(400)provider=deepseek, model=claude-opus-4-8-20261210, requestedModel=claude-opus-4-8-20261210, status=400Repro
ocx login deepseek, add deepseek providerocx claude desktop apply(injects configLibrary json withinferenceModels: name=claude-opus-4-8-20261210, labelOverride=Deepseek V4 Flash (deepseek))Notes
deepseek/deepseek-v4-flashfails Claude Desktop validation ("is not an Anthropic model"); changing toanthropic/deepseek-v4-flashpasses validation but opencodex still forwards it verbatim and DeepSeek rejects it.