Attributed compile + two small offline scripts
Primary sources (DeepSeek, 2026-10-17): DeepSeek-V4.1-Flash-1017: Wish-Driven Programming Made Real (and the Chinese version); the Hugging Face model card; DeepSeek API docs: Your First API Call, Models & Pricing, Thinking Mode, Search & Fetch.
Community reports (Chinese, 2026-10-17 to 10-19): V2EX thread deepseek-v4.1-flash-1017 发布了 (started by ifpelset); 程序员天天困, DeepSeek-V4.1-Flash-1017 上手实测:3D 直出,效果到底如何 (Alibaba Cloud Developer Community); Ai学习的老章, 关于 DeepSeek-V4.1-Flash-1017 的 10 句大实话 (woshipm).
I have not called the DeepSeek API (no key on this box) or run the weights. The scripts below check request settings and do price math using the published rules.
On October 17 DeepSeek swapped the model behind deepseek-flash to DeepSeek-V4.1-Flash-1017. Website, app and API all switched at once — same name, no opt-in. Weights are on Hugging Face under MIT (HF lists 763B params). The API has a 1M context, up to 384K output, vision, tool calls, JSON, and OpenAI- plus Anthropic-format endpoints.
DeepSeek's own table (harness-dependent): DeepSWE v1.1 74.2 → 77.0 (Mini-SWE-V2), Terminal-Bench 4.0 31.2 → 42.3 (Claude Code). They also claim shorter outputs and faster tasks. Chinese forums lit up. This post skips the leaderboard and covers what changes for code that already calls deepseek-flash.
1. You were upgraded whether you asked or not
A V2EX commenter asked how to tell whether they're on 1017 or a gradual rollout, given the shared name. Another replied it's officially out, so there's only one Flash. The docs agree: deepseek-flash "is now served by DeepSeek-V4.1-Flash-1017". Legacy names deepseek-v4-flash and deepseek-v4-flash-vision-exp still work but are retired — they hit 1017 at the Flash price.
What to do this week:
- Re-run your evals. Prompts and golden files tuned on the September Flash now hit a different model. If "shorter outputs" holds, length heuristics may drift.
-
Rename legacy model strings to
deepseek-flashso logs match reality. -
Check third-party routers. 老章 notes some channels (he names OpenCode Go) hadn't switched when he wrote. "DeepSeek Flash" elsewhere is not always
api.deepseek.com.
2. First call, and three settings that are silently ignored
The first call hasn't changed:
import os
from openai import OpenAI
client = OpenAI(api_key=os.environ["DEEPSEEK_API_KEY"], base_url="https://api.deepseek.com")
r = client.chat.completions.create(
model="deepseek-flash",
messages=[{"role": "user", "content": "Find the bug: def avg(xs): return sum(xs) / len(xs)"}],
reasoning_effort="high",
extra_body={"thinking": {"type": "enabled"}},
)
print(r.choices[0].message.reasoning_content)
print(r.choices[0].message.content)
(I didn't run this. I don't have a key.)
The traps are in the Thinking Mode guide:
-
Thinking is on by default, at
higheffort. Only three effort levels actually exist.minimalmaps tolow,mediumandxhighmap tohigh, andultramaps tomax. -
temperature,presence_penaltyandfrequency_penaltydo nothing in thinking mode. You get no error, so an old eval config withtemperature: 0looks deterministic but isn't. -
top_pis clamped on Flash. In thinking mode, values below 0.95 are treated as 0.95. In non-thinking mode, it's fixed at 1.0. -
With
tools, you must send backreasoning_contentfor every previous assistant turn, including turns with no tool call. Otherwise you get HTTP 400. Withouttools, it's ignored.
runs/21-deepseek-flash-1017/lint_request.py encodes those rules as an offline pre-flight check. Actual output:
[old eval config]
WARN model 'deepseek-v4-flash' is retired; served by V4.1-Flash-1017 at Flash price. Use 'deepseek-flash'.
WARN temperature is silently ignored in thinking mode.
WARN top_p 0.9 is treated as 0.95 in thinking mode.
[medium effort]
INFO reasoning_effort 'medium' maps to 'high'.
[agent loop, dropped CoT]
ERROR messages[1] assistant turn lacks reasoning_content; with tools this returns HTTP 400.
[agent loop, CoT kept]
OK
[non-thinking classifier]
WARN top_p is fixed at 1.0 in non-thinking mode on deepseek-flash.
If you need a deterministic classifier, use {"thinking": {"type": "disabled"}} and don't rely on top_p. The simplest fix for the 400: append response.choices[0].message as-is (DeepSeek's own sample).
3. Peak pricing, in North American time
From Models & Pricing, Flash per 1M tokens at peak is $0.006 for cache hits, $0.30 for cache misses and $1.20 for output (Pro: $0.044 / $1.32 / $3.96). Off-peak is half. Peak hours are 01:00–04:00 and 06:00–10:00 UTC, Monday to Friday, and Chinese public holidays are off-peak all day.
Those windows are set around Beijing working hours. peak_cost.py converts them to Toronto time (it ignores holidays). Actual output:
Week of Mon 2026-10-19 (EDT, UTC-4) -> PEAK hours in Toronto local time
Mon 10-19: 02:00-06:00, 21:00-00:00
...
Fri 10-23: 02:00-06:00
Sun 10-25: 21:00-00:00
Toronto Mon-Fri 09:00-17:00 hours at peak: 0/40
Week of Mon 2026-11-02 (EST, UTC-5) -> PEAK hours in Toronto local time
Mon 11-02: 01:00-05:00, 20:00-23:00
...
Toronto Mon-Fri 09:00-17:00 hours at peak: 0/40
So for Eastern-time teams, the whole working day is off-peak. Peak hits your nightly batch jobs: weekday evenings from 9 PM (8 PM after the Nov 1 clock change), Sunday evening, and the early morning. Move your cron jobs, not your standups.
Cost per turn, using the same example agent turn as my Muse Spark Open post (60K input with 50K from cache, 4K output including reasoning):
model peak $/turn off $/turn peak $/1k off $/1k
deepseek-flash 0.00810 0.00405 8.10 4.05
deepseek-v4-pro 0.03124 0.01562 31.24 15.62
deepseek-flash peak, zero cache hits: 0.02280/turn (22.80/1k)
Cache hits matter more than the time of day: losing the cache costs ~2.8× at peak, while peak only doubles the bill. Keep the system prompt and tool schemas byte-stable at the front of the prompt.
4. Search & Fetch: free in your harness until Oct 31 at noon (Toronto)
The same release opened DeepSeek's Search (POST /v1/tools/search) and Fetch (POST /v1/tools/fetch) APIs to everyone, at $0.75 per 1,000 successful requests each. Billing rules from the guide: you only pay for HTTP 200 with a non-empty result, failed calls and timeouts are free, and count (1–50) doesn't change the price. Limits are 100 QPS for Search and 25 QPS for Fetch, per account.
The important detail: if you use the DeepSeek API through DeepSeek Harness, Claude Code or Codex, the server-side tool calls already hit these APIs, and they're free only until 00:00 Beijing time on Nov 1. peak_cost.py converts that: 2026-10-31 16:00 UTC = 2026-10-31 12:00 EDT (Toronto).
The per-task comparison is the surprise:
task with 3 search + 5 fetch: tools $0.00600 vs one off-peak flash turn $0.00405 -> tools = 1.5x the model turn
task with 10 search + 20 fetch: tools $0.02250 vs one off-peak flash turn $0.00405 -> tools = 5.6x the model turn
Tokens are so cheap that a research-heavy agent's web calls can cost more than the model. Before Nov 1, log Search/Fetch per task. Since price doesn't depend on count, one search with a larger count (and need_content: true when snippets aren't enough) may replace several narrow ones — I haven't verified the savings.
5. If you self-host
The model card says there's no Jinja chat template. Use the shipped encoding.py or deepseek-recipe Rust bindings, with temperature 1.0, top_p 1.0, and max_tokens ≥ 256K.
Reality check (and what I skipped)
程序员天天困 had 1017 build four 3D projects that all ran and none fully met his bar — his rule is tests, a read of the diff, and a manual try before merge. 老章 likes it for coding/agents but also reports long runtimes and higher-than-expected cost on some tasks. I did not call the API, measure output length vs the old Flash, reproduce any benchmark, check whether a response reports the 1017 version, evaluate Search/Fetch quality, or run the weights.
Why this matters
When a model name is an alias, an upgrade is a deploy you didn't schedule. Lint request settings against the current docs, re-run evals when the alias moves, and price the tool calls as well as the tokens.
YongBo Yu is an AI engineer in Toronto building LLM workflows and agent systems. More at yongbo-yu.vercel.app and GitHub.
Top comments (0)