Skip to content

feat(deepseek): add V4 Pro/Flash [1m] variants to model dropdown#1418

Open
SivanCola wants to merge 1 commit intonesquena:masterfrom
SivanCola:master
Open

feat(deepseek): add V4 Pro/Flash [1m] variants to model dropdown#1418
SivanCola wants to merge 1 commit intonesquena:masterfrom
SivanCola:master

Conversation

@SivanCola
Copy link
Copy Markdown

Summary

Add deepseek-v4-pro[1m] and deepseek-v4-flash[1m] (1M context window variants) to the DeepSeek provider model dropdown while keeping the existing V4 and legacy entries.

Changes

  • Added deepseek-v4-pro[1m] — DeepSeek V4 Pro (1M)
  • Added deepseek-v4-flash[1m] — DeepSeek V4 Flash (1M)
  • Reordered so V4 models appear first, legacy models at the bottom

Related

Add deepseek-v4-pro, deepseek-v4-flash, and their 1M context variants
to the DeepSeek provider model list.
@nesquena-hermes
Copy link
Copy Markdown
Collaborator

Thanks for adding the 1M variants. The diff itself is clean — three lines into api/config.py to surface the new IDs in the DeepSeek dropdown, with the V4 entries reordered so the 1M variants sit next to their base counterparts and the legacy v3 / reasoner rows stay at the bottom.

One coupling concern worth flagging before merge:

The [1m] suffix is novel — no other model ID in the dropdown registry uses bracket characters today. The hermes-agent side normalizes V-series IDs through _DEEPSEEK_V_SERIES_RE, and on current master that regex is ^deepseek-v\d+([-.].+)?$, which does not match deepseek-v4-flash[1m]. So if this PR ships before the companion hermes-agent#18509 lands (which widens the regex to ^deepseek-v\d+.*$), selecting either new entry in the dropdown would silently normalize the model to deepseek-chat and the user would get the legacy V3 chat completion path instead of the 1M-context model they picked.

That makes hermes-agent#18509 a hard prerequisite. Two options to handle the ordering:

  1. Hold this PR until hermes-agent#18509 is merged and a release is cut, then merge here. Cleanest from a "no broken intermediate state" angle.
  2. Merge both close together and call out the agent-version requirement in the WebUI CHANGELOG entry (e.g. "requires hermes-agent ≥ X.Y.Z").

Either is fine, but the dropdown shouldn't list [1m] IDs while the agent silently strips them — that's a confusing failure mode for anyone who upgrades WebUI ahead of the agent.

Two small nits, neither blocking:

  • The mirror entry in the opencode-go provider list at api/config.py:777-778 (which already has bare deepseek-v4-pro / deepseek-v4-flash) doesn't get the 1M variants in this PR. If OpenCode Go also exposes the 1M endpoints, those would want the same treatment for consistency.
  • static/ui.js has a hand-maintained STATIC_LABELS map for the message header model badge. New IDs without an entry there fall back to showing the raw ID. Adding the 1M labels there would round out the cosmetics, but isn't required for the picker to work.

Otherwise this is good. Ping when hermes-agent#18509 lands and I'll take another look.

@nesquena-hermes
Copy link
Copy Markdown
Collaborator

Status update — agent companion PR is #18534, not #18509

Quick correction on the agent-side dependency referenced in the PR description: the regex-widening companion is actually hermes-agent #18534 — "feat(deepseek): add deepseek-v4-pro[1m] and deepseek-v4-flash[1m] to canonical models". The number cited in the body (#18509) is an unrelated DeepSeek Anthropic-endpoint thinking-block fix.

Status: agent #18534 is still OPEN (not merged).

Putting this on hold until that lands. The reasoning from my earlier review still stands — without the regex widening, selecting deepseek-v4-pro[1m] or deepseek-v4-flash[1m] in the WebUI dropdown would silently normalize to deepseek-chat and route through the legacy V3 endpoint. That's a confusing failure mode worth avoiding.

When agent #18534 merges and a hermes-agent release is cut, ping me here and I'll re-open the review. Two non-blocking items to consider for that review pass:

  1. The mirror in the opencode-go provider entries at api/config.py:777-778 already has bare deepseek-v4-pro / deepseek-v4-flash but doesn't get the 1M variants. Worth adding for consistency if OpenCode Go also exposes 1M endpoints.
  2. static/ui.js::STATIC_LABELS map needs entries for the new IDs so the message-header model badge renders the friendly name instead of the raw [1m] ID.

Thanks again for the cleanup — V4 first, legacy at the bottom is the right ordering.

sunnysktsang pushed a commit to sunnysktsang/hermes-webui that referenced this pull request May 3, 2026
…sorbed

CHANGELOG, ROADMAP, TESTING bumped (3936 \u2192 3946).

8 constituent PRs:
- nesquena#1523 (@franksong2702) branch indicator codepoint fix
- nesquena#1519 (@franksong2702) onboarding API-key focus loss fix
- nesquena#1518 (@franksong2702) voice-mode toggle-off recognizer stop
- nesquena#1516 (@franksong2702) YAML newline CSS rules
- nesquena#1517 (@franksong2702) __CACHE_VERSION__ \u2192 __WEBUI_VERSION__ rename
- nesquena#1532 (@ai-ag2026) state.db WebUI session recovery
- nesquena#1525 (@ai-ag2026) stale stream state proactive cleanup
- nesquena#1526 (@ai-ag2026) max_tokens forwarding + OpenRouter quota classifier

Opus MUST-FIX absorbed: sw.js conflict-marker cleanup + regression guard.
Opus SHOULD-FIX deferred to follow-up nesquena#1533 (race in _clear_stale_stream_state).

2 closed as duplicates: nesquena#1528 (identical to nesquena#1517), nesquena#1529 (superseded by nesquena#1516).
1 maintainer-review label: nesquena#1531 (Asunfly stowaway change in force-push).
5 stay on hold: nesquena#1418 nesquena#1464 nesquena#1404 nesquena#1353 nesquena#1311.
@nesquena nesquena added the upstream-change Requires an upstream change before it can be resolved. label May 5, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

hold upstream-change Requires an upstream change before it can be resolved.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants