JOURNAL
The Case of the Missing Thinking Toggle: ZCode, DeepSeek, and a Rename That Broke the Mapper
I pointed ZCode at DeepSeek's official API. The model works, tool calls work, the price is great — but there is no thinking toggle. Every GLM model in the picker has one; deepseek-flash has nothing.
Root Cause
ZCode keeps its model registry at ~/.zcode/v2/config.json (C:\Users\<you>\.zcode\v2\config.json on Windows). Every model the app recognizes carries a reasoning block that ZCode itself writes:
JSON"reasoning": {
"enabled": true,
"variants": ["low", "max", "high"],
"defaultVariant": "max"
}
My DeepSeek entry had limit and modalities but no reasoning block. The UI just reads this file: no block, no toggle.
Those blocks come from a model catalog bundled inside the app. I grepped the desktop bundle (app.asar) for DeepSeek's entries and found three things:
-
The old versioned names are all there, with full reasoning options:
CODE
"deepseek/deepseek-v4-flash": { ..., family: "deepseek-flash", reasoning: true, reasoning_options: [{ type: "toggle" }, { type: "effort", values: ["low", "high", "max"] }] } -
V4.1 Flash only appears under aggregator-style IDs like
deepseek/deepseek-v4.1-flash. -
The bare ID
deepseek-flash— the one name DeepSeek's API has answered to since September 10 — is not in the catalog at all.
My read: ZCode matches custom model IDs against this catalog to decide which capabilities to write into the config. V4.1's launch retired the versioned names and collapsed the API to one unversioned name, so the lookup misses and no reasoning block is written. I haven't traced the matching code line by line, but every observation fits: recognized models get app-managed capability blocks, and my entry only got one for the modalities I configured by hand.
The plumbing itself is fine — the effort variants translate directly into the Anthropic thinking budget on the wire (max maps to a maximum budget, right there in the binary). The toggle was never missing. The name just stopped matching.
The Fix
- Open
~/.zcode/v2/config.jsonand find the provider entry with"name": "deepseek"("kind": "anthropic", keyed by a UUID). ZCode can stay running — it occasionally rewrites this file but preserves manual edits (verified twice). - Add a
reasoningblock to the model entry undermodels:
JSON"deepseek-flash": {
"reasoning": {
"enabled": true,
"variants": ["low", "high", "max"],
"defaultVariant": "high"
},
"limit": { "context": 1000000, "output": 128000 },
"modalities": { "input": ["text", "image"], "output": ["text"] }
}
- Restart ZCode and open a new session. The toggle appears in the model picker.
Two notes:
- The three variants are the effort levels
deepseek-flashactually supports; ZCode maps them onto the Anthropic thinking budget.highis the cost-sane default — thinking tokens are billed at output price, $1.20 per million on this model. I flipped mine tomaxanyway. - Add
"image"tomodalities.inputif you want native vision, and you can bumpoutputto 384000 for the official limit.
Copy, Paste, Delegate
Or hand the whole thing to your AI:
TEXTMy ZCode (Z.ai's coding agent) is connected to DeepSeek's official API, but the
model has no thinking-mode toggle. Please fix my ZCode config for me.
Context:
- ZCode stores its model config at ~/.zcode/v2/config.json
(Windows: C:\Users\<YOUR-NAME>\.zcode\v2\config.json).
- My DeepSeek provider is the entry under "provider" whose "name" is "deepseek"
("kind": "anthropic", "baseURL": "https://api.deepseek.com/anthropic",
keyed by a UUID).
- ZCode only shows a thinking toggle when the model entry carries a "reasoning"
block. Mine is missing one, because ZCode's bundled model catalog still keys
DeepSeek by the old versioned names (deepseek-v4-flash etc.) and doesn't
recognize the new official API name "deepseek-flash".
What to do:
1. ZCode can stay running while you edit — it occasionally rewrites this config
file but preserves manual edits. No need to quit.
2. In the deepseek provider entry, find my model under "models" (its key is the
model ID, e.g. "deepseek-flash"). Add this block as a sibling of "limit" and
"modalities":
"reasoning": {
"enabled": true,
"variants": ["low", "high", "max"],
"defaultVariant": "high"
}
3. Keep every existing field ("limit", "modalities", "zcode", ...) untouched,
and keep the JSON valid — parse it before and after your edit to prove it.
4. Ask me whether "defaultVariant" should be "high" (cost-sane default) or "max"
(full effort by default; thinking tokens are billed at DeepSeek's output
price, $1.20 per million tokens on this model).
5. While you're in there: if "modalities.input" doesn't include "image" and I
want V4.1 Flash's native vision, add it.
6. When done, remind me to restart ZCode and open a NEW session — the thinking
toggle should appear in the model picker.
That's It
One unversioned rename on DeepSeek's side, one silent lookup miss on ZCode's side — nothing errors, a capability just quietly doesn't exist. ZCode will refresh its catalog eventually and make this post obsolete, which is fine. Until then: ten lines of JSON, or one pasted prompt, and the toggle is back. (´・ᴗ・`)
Thirty Cents a Million: DeepSeek V4.1 Flash and the Collapsing Cost of Intelligence
Sep 12, 202620 MIN READ5 CHAPTERSAgent Time: Turning AI Idle Hours into the Ultimate Life-Lever
Sep 20, 20267 MIN READ1 CHAPTEREvergreen or Evergrave: 10 Genres That Keep Paying, and 10 That Will Eat You Alive
Aug 14, 202620 MIN READ3 CHAPTERS2026: Can Indie Developers Still Make Money?
Aug 13, 202622 MIN READ5 CHAPTERSLet It Be: My First Programming Lesson Came from a Beatles Song
Aug 11, 20269 MIN READ2 CHAPTERS