Merge pull request #5895 from deepseek-harness/worktree/fix-deepseek-v4-1-flash-name

fix(llm-deepseek): correct V4.1 Flash display name
This commit is contained in:
Yichen Jiang authored and GitHub committed 2026-10-08 19:12:13 +08:00
commit c17df5dbac
13 files changed
+18 -18

No files matched your search

@@ -29,7 +29,7 @@
- text: deepseek-flash
- textbox "显示名称 1":
- /placeholder: 显示名称
- text: DeepSeek-V41-Flash
- text: DeepSeek-V4.1-Flash
- button "模型选项 1"
- button "删除模型 1"
- textbox "模型 ID 2":
@@ -29,7 +29,7 @@
- text: deepseek-flash
- textbox "显示名称 1":
- /placeholder: 显示名称
- text: DeepSeek-V41-Flash
- text: DeepSeek-V4.1-Flash
- button "模型选项 1" [expanded]
- button "删除模型 1"
- text: 上下文窗口
@@ -208,7 +208,7 @@ describe.skipIf(MODE === 'record')('web e2e: first-run DeepSeek credential setup
await deepSeek.locator('xpath=ancestor::li').getByRole('button', { name: '编辑' }).click()
await settings.getByText('自定义设置').click()
expect(await settings.getByLabel('模型 ID 1').inputValue()).toBe('deepseek-flash')
expect(await settings.getByLabel('显示名称 1').inputValue()).toBe('DeepSeek-V41-Flash')
expect(await settings.getByLabel('显示名称 1').inputValue()).toBe('DeepSeek-V4.1-Flash')
expect(await settings.getByLabel('模型 ID 2').inputValue()).toBe('deepseek-v4-pro')
expect(await settings.getByRole('button', { name: /删除模型/ }).count()).toBe(2)
await settings.getByRole('button', { name: '模型选项 1' }).click()
+2 -2
View File
@@ -18,8 +18,8 @@
en: 3bd37b85139d2fa7
zh: ba86c807eb83866e
/deepseek-ai-dsh-web-app/use-this-package/starting-the-web-gui:
en: b7ab01cfe9fed40f
zh: 23703ab7727c3ab5
en: e3cac911f080d8ef
zh: 60749e9f5c39c1bc
/deepseek-ai-dsh-web-app/use-this-package/configuration:
en: a9ee366c5af68a6c
zh: 2711d7a3926e1101
+1 -1
View File
@@ -40,7 +40,7 @@ dsh --profile web --no-open --port 8080
After startup you see a `dsh web:` line whose root URL carries a fresh process token. Unless `--no-open` or an SSH session suppresses it, the default browser opens that URL, receives a signed cookie, and redirects to the same directory without the token. You know it worked when the page loads and you can chat with the agent. Two failures to expect: if the frontend is not built, startup stops with a build hint (`pnpm run build` in a checkout); if the browser cannot be opened, a credential-free diagnostic prints to stderr while the server keeps running — open the printed startup URL yourself.
**Settings → Models** displays **DeepSeek**, using `DEEPSEEK_API_KEY`. The default is `deepseek-official` / `deepseek-flash` (DeepSeek-V41-Flash). The [DeepSeek plugin](../../llm/llm-deepseek/README.md#endpoint-and-wire-format) uses the Messages API.
**Settings → Models** displays **DeepSeek**, using `DEEPSEEK_API_KEY`. The default is `deepseek-official` / `deepseek-flash` (DeepSeek-V4.1-Flash). The [DeepSeek plugin](../../llm/llm-deepseek/README.md#endpoint-and-wire-format) uses the Messages API.
Saved model selections override the composition default. The settings card accepts a Messages-compatible API address and a credential reference.
+1 -1
View File
@@ -40,7 +40,7 @@ dsh --profile web --no-open --port 8080
启动后你会看到 `dsh web:` 行,其根 URL 携带新的进程 token。除非 `--no-open` 或 SSH 会话抑制,否则默认浏览器会打开该 URL、取得签名 cookie,再重定向到不含认证参数的同一目录。页面加载且你可以与 agent 对话,就说明成功了。两种可预期的失败:前端未构建时,启动会以构建提示停止(checkout 中运行 `pnpm run build`);浏览器无法打开时,stderr 会打印不含凭据的诊断,但服务器会继续运行——请自行打开已打印的启动 URL。
**设置 → 模型**显示 **DeepSeek**,使用 `DEEPSEEK_API_KEY`。默认模型为 `deepseek-official` / `deepseek-flash`(DeepSeek-V41-Flash)。[DeepSeek 插件](../../llm/llm-deepseek/README.zh.md#endpoint-and-wire-format)使用 Messages API。
**设置 → 模型**显示 **DeepSeek**,使用 `DEEPSEEK_API_KEY`。默认模型为 `deepseek-official` / `deepseek-flash`(DeepSeek-V4.1-Flash)。[DeepSeek 插件](../../llm/llm-deepseek/README.zh.md#endpoint-and-wire-format)使用 Messages API。
已保存的模型选择覆盖组合默认值。设置卡接受兼容 Messages 的 API 地址与凭据引用。
+2 -2
View File
@@ -21,8 +21,8 @@
en: cbeb14a9a602c2c9
zh: c78c0d26c5791085
/deepseek-ai-dsh-llm-deepseek/use-this-package/minimal-configuration:
en: 2248932972465067
zh: d1e4b7988d80d3b2
en: cfc2de7ef728dbf9
zh: 2ce1a406061a71aa
/deepseek-ai-dsh-llm-deepseek/use-this-package/endpoint-and-wire-format:
en: fce88d2ebad6296c
zh: 0c351f26b472d521
+1 -1
View File
@@ -58,7 +58,7 @@ A request selects the route with `provider: deepseek-official`; the model id pas
| `reasoningEffort` | `high` | Default effort: `off`, `low`, `high`, or `max` |
| `maxTokens` | `256,000` | Per-request output cap; a model's own cap and explicit request values win |
| `defaultContextWindow` | `1,000,000` | Capacity fallback for models without an exact value |
| `models` | V41 Flash + V4 Pro | Advisory catalog shown by discovery consumers |
| `models` | V4.1 Flash + V4 Pro | Advisory catalog shown by discovery consumers |
| `streamIdleTimeoutMs` | `300,000` | Maximum provider idle time per outstanding stream read |
| `maxRequestFilesBytes` | `128 MiB` | File-mode request-image byte budget; a request whose retained images exceed it fails with `IMAGE_OFFLOAD_REQUIRED` |
| `maxInlineRequestImageBytes` | `20 MiB` | Independent base64 fallback high watermark |
+1 -1
View File
@@ -58,7 +58,7 @@ kind: "package-reference"
| `reasoningEffort` | `high` | 默认强度:`off`、`low`、`high` 或 `max` |
| `maxTokens` | `256,000` | 单次请求输出上限;模型自身上限与显式请求值优先 |
| `defaultContextWindow` | `1,000,000` | 无精确值模型的容量回退 |
| `models` | V41 Flash + V4 Pro | 供发现消费方查看的建议性目录 |
| `models` | V4.1 Flash + V4 Pro | 供发现消费方查看的建议性目录 |
| `streamIdleTimeoutMs` | `300,000` | 单次流读取未完成的最大提供方空闲时间 |
| `maxRequestFilesBytes` | `128 MiB` | file 模式请求图片字节预算,保留图片超过时请求以 `IMAGE_OFFLOAD_REQUIRED` 失败 |
| `maxInlineRequestImageBytes` | `20 MiB` | 独立的 base64 回退高水位 |
+1 -1
View File
@@ -26,7 +26,7 @@ export interface Config {
maxTokens: Volatile<number>
/** Positive context capacity used when the selected model has no exact value (default 1,000,000). */
defaultContextWindow: Volatile<number>
/** Advisory models shown by discovery consumers; defaults to V41 Flash and V4 Pro. */
/** Advisory models shown by discovery consumers; defaults to V4.1 Flash and V4 Pro. */
models: Volatile<DeepSeekCatalogModel[]>
/** Maximum provider idle time while one stream read is outstanding (default five minutes). */
streamIdleTimeoutMs: Volatile<number>
+1 -1
View File
@@ -6,7 +6,7 @@ import type { DeepSeekCatalogModel } from './types.ts'
export const DEFAULT_MODELS: DeepSeekCatalogModel[] = [
{
id: 'deepseek-flash',
name: 'DeepSeek-V41-Flash',
name: 'DeepSeek-V4.1-Flash',
contextWindow: DEFAULT_CONTEXT_WINDOW,
inputModalities: ['text', 'image'],
systemPromptUpdate: 'in-history',
@@ -141,7 +141,7 @@ describe('direct Messages HTTP', () => {
expect(llm.providerInfo('deepseek-official')).toEqual({ id: 'deepseek-official', name: 'DeepSeek' })
expect(await llm.listModels('deepseek-official')).toEqual([])
expect(await llm.resolveModel('deepseek-official', 'deepseek-flash')).toMatchObject({
name: 'DeepSeek-V41-Flash', inputModalities: ['text', 'image'], systemPromptUpdate: 'in-history',
name: 'DeepSeek-V4.1-Flash', inputModalities: ['text', 'image'], systemPromptUpdate: 'in-history',
})
expect(await llm.resolveModel('deepseek-official', MODEL)).toMatchObject({ id: MODEL })
expect(llm.imageRequestPricing('deepseek-official', MODEL)).toBeDefined()
@@ -1788,7 +1788,7 @@ describe('plugin registration and config', () => {
await ctx.plugin(LlmDeepSeek, { baseURL: 'http://127.0.0.1:1' })
expect(ctx.llm.listProviders()).toEqual([{ id: 'deepseek-official', name: 'DeepSeek' }])
await expect(ctx.llm.listModels('deepseek-official')).resolves.toEqual([
{ provider: 'deepseek-official', id: 'deepseek-flash', name: 'DeepSeek-V41-Flash', inputModalities: ['text', 'image'] },
{ provider: 'deepseek-official', id: 'deepseek-flash', name: 'DeepSeek-V4.1-Flash', inputModalities: ['text', 'image'] },
{
provider: 'deepseek-official',
id: 'deepseek-v4-pro',
@@ -1801,7 +1801,7 @@ describe('plugin registration and config', () => {
.resolves.toMatchObject({
provider: 'deepseek-official',
id: 'deepseek-flash',
name: 'DeepSeek-V41-Flash',
name: 'DeepSeek-V4.1-Flash',
inputModalities: ['text', 'image'],
systemPromptUpdate: 'in-history',
context: { contextWindow: 1_000_000 },
@@ -1916,7 +1916,7 @@ describe('plugin registration and config', () => {
await ctx.plugin(LlmRuntime)
LlmDeepSeek.apply(ctx, LlmDeepSeek.Config({ baseURL: 'http://127.0.0.1:1' }))
await expect(ctx.llm.listModels('deepseek-official')).resolves.toEqual([
{ provider: 'deepseek-official', id: 'deepseek-flash', name: 'DeepSeek-V41-Flash', inputModalities: ['text', 'image'] },
{ provider: 'deepseek-official', id: 'deepseek-flash', name: 'DeepSeek-V4.1-Flash', inputModalities: ['text', 'image'] },
{
provider: 'deepseek-official',
id: 'deepseek-v4-pro',
@@ -2308,7 +2308,7 @@ describe('plugin registration and config', () => {
const adapter = adapterOf()
expect(adapter).toBeInstanceOf(DeepSeekAdapter)
await expect(adapter.listModels('deepseek-official')).resolves.toEqual([])
await expect(adapter.resolveModel('deepseek-official', 'deepseek-flash')).resolves.toMatchObject({ name: 'DeepSeek-V41-Flash' })
await expect(adapter.resolveModel('deepseek-official', 'deepseek-flash')).resolves.toMatchObject({ name: 'DeepSeek-V4.1-Flash' })
})
it('resolves connection facts and the credential exactly once per stream call', async () => {