fix(core): recognize DeepSeek V4 Flash Vision image input - #3420

Closed
sunrioa wants to merge 1 commit into
apache:mainfrom
sunrioa:fix/deepseek-v4-vision-capability
Closed

fix(core): recognize DeepSeek V4 Flash Vision image input#3420
sunrioa wants to merge 1 commit into
apache:mainfrom
sunrioa:fix/deepseek-v4-vision-capability

Conversation

@sunrioa

Copy link
Copy Markdown
Contributor

Generated-by: OpenAI Codex

Summary

DeepSeek's first-party inventory returns deepseek-v4-flash-vision-exp as a bare ID. Without a catalog entry, Maka classifies it as text-only, filters image attachments, and displays only the raw model ID.

Add explicit static metadata from DeepSeek's Vision guide and model details, including text-and-image input, friendly display metadata, documented context/output limits, structured output, tool calling, and reasoning controls. Keep this entry local to the first-party DeepSeek provider until the generated models.dev catalog catches up.

Add focused coverage for metadata and modality resolution, catalog projection from a bare provider ID, and the adjacent non-vision deepseek-v4-flash model.

Fixes#3417

Root cause

The first-party /models response supplies no modality facts for the new model, and Maka's generated metadata snapshot predates the 2026-08-21 release. resolveModelVisionSupport() therefore finds no provider or static vision signal and resolves to false.

Verification

  • npm --workspace @maka/core test — 578 passed, 0 failed
  • npm run lint — passed
  • npm run format:check — passed
  • npm run build — passed
  • npm run typecheck — passed
  • ./node_modules/.bin/knip --workspace apps/desktop — passed
  • ./node_modules/.bin/knip --workspace packages/ui — passed
  • Desktop smoke test — selected deepseek-v4-flash-vision-exp, attached an image, and received an image-grounded response

Before: Maka classifies the model as text-only and filters the attached image.

Before: Maka filters the image as unsupported

After: Maka recognizes the model as multimodal, sends the same image, and receives an image-grounded response.

After: Maka sends the image to DeepSeek V4 Flash Vision

Full npm test was not completed locally: an earlier run stalled in packages/eval/dist/__tests__/provider-admission-integration.test.js and was interrupted. The affected Core suite completed without failures, and required CI will exercise the remaining workspaces.

Scope

  • The generated models.dev snapshot is unchanged; this is an explicit static entry until the upstream catalog includes the model.
  • No lifecycle is assigned because DeepSeek calls the model experimental, while Maka has no exact matching lifecycle value.
  • Protocol selection is unchanged; the model continues to use Chat Completions, whose image input path DeepSeek documents and the Desktop smoke test verified.
  • The model is not added to the offline fallback list.

AI use

Select exactly one:

  • No generative tool made a substantive contribution
  • Generative tooling made a substantive contribution

Tool(s) and scope:

OpenAI Codex assisted with official-documentation review, diagnosis, implementation, regression tests, local verification, and drafting this description. I reproduced the issue, reviewed the final diff and test results, and performed the manual smoke test.

Checklist

  • Tests cover the change and fail without it
  • Lint, format, typecheck and the affected suites pass locally

Does this PR entail a change in behavior?

  • Yes — described under Summary above
  • No

@Astro-Han

Astro-Han commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Thanks for filling in this metadata, especially for including the official docs link and the context window.

I am closing this because #3605 is doing the same thing — registering deepseek-v4-flash-vision-exp in STATIC_MODEL_METADATA.deepseek. #3605 is out of draft and under review, while this one has been in draft without updates since 21 August, so I am closing this side to avoid two parallel efforts.

Two things here differ from #3605, and I have raised both there — please take a look:

  1. Your thinkingOptions.efforts is ['low', 'high', 'max']; fix(core): add DeepSeek V4 Flash Vision to model metadata #3605 has ['high', 'max'], without the low tier.
  2. Your capabilities has no webSearch; fix(core): add DeepSeek V4 Flash Vision to model metadata #3605 adds webSearch: true.

You also included model-catalog.test.ts and model-metadata.test.ts, and #3605 has no tests at all. If you confirm those two facts and move the tests over to #3605, nothing from this PR is lost.

简体中文

谢谢你补这条元数据,尤其是把官方文档链接和上下文窗口这些都写全了。

这条我准备关掉,因为 #3605 在做同一件事——同样在 STATIC_MODEL_METADATA.deepseek 里注册 deepseek-v4-flash-vision-exp#3605 已经脱离 draft 并在 review 中,这条从 8 月 21 日起一直是 draft 没有再动,为了避免两条并行我先关这边。

不过你这条有两处内容是 #3605 没有的,我已经在那边提出来了,麻烦你也过去看一眼:

  1. thinkingOptions.efforts 你写的是 ['low', 'high', 'max']fix(core): add DeepSeek V4 Flash Vision to model metadata #3605 写的是 ['high', 'max'],少一档 low。
  2. capabilities 你没有 webSearchfix(core): add DeepSeek V4 Flash Vision to model metadata #3605 加了 webSearch: true

另外你还带了 model-catalog.test.tsmodel-metadata.test.ts 两个测试,#3605 没有测试。如果你愿意把这两处事实确认一下、再把测试补到 #3605 上,这条的价值就都保住了。

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bug(core): DeepSeek V4 Flash Vision is treated as text-only

2 participants

@sunrioa@Astro-Han
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix(core): recognize DeepSeek V4 Flash Vision image input - #3420

Closed
sunrioa wants to merge 1 commit into
apache:mainfrom
sunrioa:fix/deepseek-v4-vision-capability
Closed

fix(core): recognize DeepSeek V4 Flash Vision image input#3420
sunrioa wants to merge 1 commit into
apache:mainfrom
sunrioa:fix/deepseek-v4-vision-capability

Conversation

@sunrioa

Copy link
Copy Markdown
Contributor

Generated-by: OpenAI Codex

Summary

DeepSeek's first-party inventory returns deepseek-v4-flash-vision-exp as a bare ID. Without a catalog entry, Maka classifies it as text-only, filters image attachments, and displays only the raw model ID.

Add explicit static metadata from DeepSeek's Vision guide and model details, including text-and-image input, friendly display metadata, documented context/output limits, structured output, tool calling, and reasoning controls. Keep this entry local to the first-party DeepSeek provider until the generated models.dev catalog catches up.

Add focused coverage for metadata and modality resolution, catalog projection from a bare provider ID, and the adjacent non-vision deepseek-v4-flash model.

Fixes#3417

Root cause

The first-party /models response supplies no modality facts for the new model, and Maka's generated metadata snapshot predates the 2026-08-21 release. resolveModelVisionSupport() therefore finds no provider or static vision signal and resolves to false.

Verification

  • npm --workspace @maka/core test — 578 passed, 0 failed
  • npm run lint — passed
  • npm run format:check — passed
  • npm run build — passed
  • npm run typecheck — passed
  • ./node_modules/.bin/knip --workspace apps/desktop — passed
  • ./node_modules/.bin/knip --workspace packages/ui — passed
  • Desktop smoke test — selected deepseek-v4-flash-vision-exp, attached an image, and received an image-grounded response

Before: Maka classifies the model as text-only and filters the attached image.

Before: Maka filters the image as unsupported

After: Maka recognizes the model as multimodal, sends the same image, and receives an image-grounded response.

After: Maka sends the image to DeepSeek V4 Flash Vision

Full npm test was not completed locally: an earlier run stalled in packages/eval/dist/__tests__/provider-admission-integration.test.js and was interrupted. The affected Core suite completed without failures, and required CI will exercise the remaining workspaces.

Scope

  • The generated models.dev snapshot is unchanged; this is an explicit static entry until the upstream catalog includes the model.
  • No lifecycle is assigned because DeepSeek calls the model experimental, while Maka has no exact matching lifecycle value.
  • Protocol selection is unchanged; the model continues to use Chat Completions, whose image input path DeepSeek documents and the Desktop smoke test verified.
  • The model is not added to the offline fallback list.

AI use

Select exactly one:

  • No generative tool made a substantive contribution
  • Generative tooling made a substantive contribution

Tool(s) and scope:

OpenAI Codex assisted with official-documentation review, diagnosis, implementation, regression tests, local verification, and drafting this description. I reproduced the issue, reviewed the final diff and test results, and performed the manual smoke test.

Checklist

  • Tests cover the change and fail without it
  • Lint, format, typecheck and the affected suites pass locally

Does this PR entail a change in behavior?

  • Yes — described under Summary above
  • No

@Astro-Han

Astro-Han commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Thanks for filling in this metadata, especially for including the official docs link and the context window.

I am closing this because #3605 is doing the same thing — registering deepseek-v4-flash-vision-exp in STATIC_MODEL_METADATA.deepseek. #3605 is out of draft and under review, while this one has been in draft without updates since 21 August, so I am closing this side to avoid two parallel efforts.

Two things here differ from #3605, and I have raised both there — please take a look:

  1. Your thinkingOptions.efforts is ['low', 'high', 'max']; fix(core): add DeepSeek V4 Flash Vision to model metadata #3605 has ['high', 'max'], without the low tier.
  2. Your capabilities has no webSearch; fix(core): add DeepSeek V4 Flash Vision to model metadata #3605 adds webSearch: true.

You also included model-catalog.test.ts and model-metadata.test.ts, and #3605 has no tests at all. If you confirm those two facts and move the tests over to #3605, nothing from this PR is lost.

简体中文

谢谢你补这条元数据,尤其是把官方文档链接和上下文窗口这些都写全了。

这条我准备关掉,因为 #3605 在做同一件事——同样在 STATIC_MODEL_METADATA.deepseek 里注册 deepseek-v4-flash-vision-exp#3605 已经脱离 draft 并在 review 中,这条从 8 月 21 日起一直是 draft 没有再动,为了避免两条并行我先关这边。

不过你这条有两处内容是 #3605 没有的,我已经在那边提出来了,麻烦你也过去看一眼:

  1. thinkingOptions.efforts 你写的是 ['low', 'high', 'max']fix(core): add DeepSeek V4 Flash Vision to model metadata #3605 写的是 ['high', 'max'],少一档 low。
  2. capabilities 你没有 webSearchfix(core): add DeepSeek V4 Flash Vision to model metadata #3605 加了 webSearch: true

另外你还带了 model-catalog.test.tsmodel-metadata.test.ts 两个测试,#3605 没有测试。如果你愿意把这两处事实确认一下、再把测试补到 #3605 上,这条的价值就都保住了。

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bug(core): DeepSeek V4 Flash Vision is treated as text-only

2 participants

@sunrioa@Astro-Han
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(core): recognize DeepSeek V4 Flash Vision image input - #3420

Closed
sunrioa wants to merge 1 commit into
apache:mainfrom
sunrioa:fix/deepseek-v4-vision-capability
Closed

fix(core): recognize DeepSeek V4 Flash Vision image input#3420
sunrioa wants to merge 1 commit into
apache:mainfrom
sunrioa:fix/deepseek-v4-vision-capability

Conversation

@sunrioa

Copy link
Copy Markdown
Contributor

Generated-by: OpenAI Codex

Summary

DeepSeek's first-party inventory returns deepseek-v4-flash-vision-exp as a bare ID. Without a catalog entry, Maka classifies it as text-only, filters image attachments, and displays only the raw model ID.

Add explicit static metadata from DeepSeek's Vision guide and model details, including text-and-image input, friendly display metadata, documented context/output limits, structured output, tool calling, and reasoning controls. Keep this entry local to the first-party DeepSeek provider until the generated models.dev catalog catches up.

Add focused coverage for metadata and modality resolution, catalog projection from a bare provider ID, and the adjacent non-vision deepseek-v4-flash model.

Fixes#3417

Root cause

The first-party /models response supplies no modality facts for the new model, and Maka's generated metadata snapshot predates the 2026-08-21 release. resolveModelVisionSupport() therefore finds no provider or static vision signal and resolves to false.

Verification

  • npm --workspace @maka/core test — 578 passed, 0 failed
  • npm run lint — passed
  • npm run format:check — passed
  • npm run build — passed
  • npm run typecheck — passed
  • ./node_modules/.bin/knip --workspace apps/desktop — passed
  • ./node_modules/.bin/knip --workspace packages/ui — passed
  • Desktop smoke test — selected deepseek-v4-flash-vision-exp, attached an image, and received an image-grounded response

Before: Maka classifies the model as text-only and filters the attached image.

Before: Maka filters the image as unsupported

After: Maka recognizes the model as multimodal, sends the same image, and receives an image-grounded response.

After: Maka sends the image to DeepSeek V4 Flash Vision

Full npm test was not completed locally: an earlier run stalled in packages/eval/dist/__tests__/provider-admission-integration.test.js and was interrupted. The affected Core suite completed without failures, and required CI will exercise the remaining workspaces.

Scope

  • The generated models.dev snapshot is unchanged; this is an explicit static entry until the upstream catalog includes the model.
  • No lifecycle is assigned because DeepSeek calls the model experimental, while Maka has no exact matching lifecycle value.
  • Protocol selection is unchanged; the model continues to use Chat Completions, whose image input path DeepSeek documents and the Desktop smoke test verified.
  • The model is not added to the offline fallback list.

AI use

Select exactly one:

  • No generative tool made a substantive contribution
  • Generative tooling made a substantive contribution

Tool(s) and scope:

OpenAI Codex assisted with official-documentation review, diagnosis, implementation, regression tests, local verification, and drafting this description. I reproduced the issue, reviewed the final diff and test results, and performed the manual smoke test.

Checklist

  • Tests cover the change and fail without it
  • Lint, format, typecheck and the affected suites pass locally

Does this PR entail a change in behavior?

  • Yes — described under Summary above
  • No

@Astro-Han

Astro-Han commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Thanks for filling in this metadata, especially for including the official docs link and the context window.

I am closing this because #3605 is doing the same thing — registering deepseek-v4-flash-vision-exp in STATIC_MODEL_METADATA.deepseek. #3605 is out of draft and under review, while this one has been in draft without updates since 21 August, so I am closing this side to avoid two parallel efforts.

Two things here differ from #3605, and I have raised both there — please take a look:

  1. Your thinkingOptions.efforts is ['low', 'high', 'max']; fix(core): add DeepSeek V4 Flash Vision to model metadata #3605 has ['high', 'max'], without the low tier.
  2. Your capabilities has no webSearch; fix(core): add DeepSeek V4 Flash Vision to model metadata #3605 adds webSearch: true.

You also included model-catalog.test.ts and model-metadata.test.ts, and #3605 has no tests at all. If you confirm those two facts and move the tests over to #3605, nothing from this PR is lost.

简体中文

谢谢你补这条元数据,尤其是把官方文档链接和上下文窗口这些都写全了。

这条我准备关掉,因为 #3605 在做同一件事——同样在 STATIC_MODEL_METADATA.deepseek 里注册 deepseek-v4-flash-vision-exp#3605 已经脱离 draft 并在 review 中,这条从 8 月 21 日起一直是 draft 没有再动,为了避免两条并行我先关这边。

不过你这条有两处内容是 #3605 没有的,我已经在那边提出来了,麻烦你也过去看一眼:

  1. thinkingOptions.efforts 你写的是 ['low', 'high', 'max']fix(core): add DeepSeek V4 Flash Vision to model metadata #3605 写的是 ['high', 'max'],少一档 low。
  2. capabilities 你没有 webSearchfix(core): add DeepSeek V4 Flash Vision to model metadata #3605 加了 webSearch: true

另外你还带了 model-catalog.test.tsmodel-metadata.test.ts 两个测试,#3605 没有测试。如果你愿意把这两处事实确认一下、再把测试补到 #3605 上,这条的价值就都保住了。

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bug(core): DeepSeek V4 Flash Vision is treated as text-only

2 participants

@sunrioa@Astro-Han
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(core): recognize DeepSeek V4 Flash Vision image input - #3420

Closed
sunrioa wants to merge 1 commit into
apache:mainfrom
sunrioa:fix/deepseek-v4-vision-capability
Closed

fix(core): recognize DeepSeek V4 Flash Vision image input#3420
sunrioa wants to merge 1 commit into
apache:mainfrom
sunrioa:fix/deepseek-v4-vision-capability

Conversation

@sunrioa

Copy link
Copy Markdown
Contributor

Generated-by: OpenAI Codex

Summary

DeepSeek's first-party inventory returns deepseek-v4-flash-vision-exp as a bare ID. Without a catalog entry, Maka classifies it as text-only, filters image attachments, and displays only the raw model ID.

Add explicit static metadata from DeepSeek's Vision guide and model details, including text-and-image input, friendly display metadata, documented context/output limits, structured output, tool calling, and reasoning controls. Keep this entry local to the first-party DeepSeek provider until the generated models.dev catalog catches up.

Add focused coverage for metadata and modality resolution, catalog projection from a bare provider ID, and the adjacent non-vision deepseek-v4-flash model.

Fixes#3417

Root cause

The first-party /models response supplies no modality facts for the new model, and Maka's generated metadata snapshot predates the 2026-08-21 release. resolveModelVisionSupport() therefore finds no provider or static vision signal and resolves to false.

Verification

  • npm --workspace @maka/core test — 578 passed, 0 failed
  • npm run lint — passed
  • npm run format:check — passed
  • npm run build — passed
  • npm run typecheck — passed
  • ./node_modules/.bin/knip --workspace apps/desktop — passed
  • ./node_modules/.bin/knip --workspace packages/ui — passed
  • Desktop smoke test — selected deepseek-v4-flash-vision-exp, attached an image, and received an image-grounded response

Before: Maka classifies the model as text-only and filters the attached image.

Before: Maka filters the image as unsupported

After: Maka recognizes the model as multimodal, sends the same image, and receives an image-grounded response.

After: Maka sends the image to DeepSeek V4 Flash Vision

Full npm test was not completed locally: an earlier run stalled in packages/eval/dist/__tests__/provider-admission-integration.test.js and was interrupted. The affected Core suite completed without failures, and required CI will exercise the remaining workspaces.

Scope

  • The generated models.dev snapshot is unchanged; this is an explicit static entry until the upstream catalog includes the model.
  • No lifecycle is assigned because DeepSeek calls the model experimental, while Maka has no exact matching lifecycle value.
  • Protocol selection is unchanged; the model continues to use Chat Completions, whose image input path DeepSeek documents and the Desktop smoke test verified.
  • The model is not added to the offline fallback list.

AI use

Select exactly one:

  • No generative tool made a substantive contribution
  • Generative tooling made a substantive contribution

Tool(s) and scope:

OpenAI Codex assisted with official-documentation review, diagnosis, implementation, regression tests, local verification, and drafting this description. I reproduced the issue, reviewed the final diff and test results, and performed the manual smoke test.

Checklist

  • Tests cover the change and fail without it
  • Lint, format, typecheck and the affected suites pass locally

Does this PR entail a change in behavior?

  • Yes — described under Summary above
  • No

@Astro-Han

Astro-Han commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Thanks for filling in this metadata, especially for including the official docs link and the context window.

I am closing this because #3605 is doing the same thing — registering deepseek-v4-flash-vision-exp in STATIC_MODEL_METADATA.deepseek. #3605 is out of draft and under review, while this one has been in draft without updates since 21 August, so I am closing this side to avoid two parallel efforts.

Two things here differ from #3605, and I have raised both there — please take a look:

  1. Your thinkingOptions.efforts is ['low', 'high', 'max']; fix(core): add DeepSeek V4 Flash Vision to model metadata #3605 has ['high', 'max'], without the low tier.
  2. Your capabilities has no webSearch; fix(core): add DeepSeek V4 Flash Vision to model metadata #3605 adds webSearch: true.

You also included model-catalog.test.ts and model-metadata.test.ts, and #3605 has no tests at all. If you confirm those two facts and move the tests over to #3605, nothing from this PR is lost.

简体中文

谢谢你补这条元数据,尤其是把官方文档链接和上下文窗口这些都写全了。

这条我准备关掉,因为 #3605 在做同一件事——同样在 STATIC_MODEL_METADATA.deepseek 里注册 deepseek-v4-flash-vision-exp#3605 已经脱离 draft 并在 review 中,这条从 8 月 21 日起一直是 draft 没有再动,为了避免两条并行我先关这边。

不过你这条有两处内容是 #3605 没有的,我已经在那边提出来了,麻烦你也过去看一眼:

  1. thinkingOptions.efforts 你写的是 ['low', 'high', 'max']fix(core): add DeepSeek V4 Flash Vision to model metadata #3605 写的是 ['high', 'max'],少一档 low。
  2. capabilities 你没有 webSearchfix(core): add DeepSeek V4 Flash Vision to model metadata #3605 加了 webSearch: true

另外你还带了 model-catalog.test.tsmodel-metadata.test.ts 两个测试,#3605 没有测试。如果你愿意把这两处事实确认一下、再把测试补到 #3605 上,这条的价值就都保住了。

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bug(core): DeepSeek V4 Flash Vision is treated as text-only

2 participants

@sunrioa@Astro-Han
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix(core): recognize DeepSeek V4 Flash Vision image input - #3420

Closed
sunrioa wants to merge 1 commit into
apache:mainfrom
sunrioa:fix/deepseek-v4-vision-capability
Closed

fix(core): recognize DeepSeek V4 Flash Vision image input#3420
sunrioa wants to merge 1 commit into
apache:mainfrom
sunrioa:fix/deepseek-v4-vision-capability

Conversation

@sunrioa

Copy link
Copy Markdown
Contributor

Generated-by: OpenAI Codex

Summary

DeepSeek's first-party inventory returns deepseek-v4-flash-vision-exp as a bare ID. Without a catalog entry, Maka classifies it as text-only, filters image attachments, and displays only the raw model ID.

Add explicit static metadata from DeepSeek's Vision guide and model details, including text-and-image input, friendly display metadata, documented context/output limits, structured output, tool calling, and reasoning controls. Keep this entry local to the first-party DeepSeek provider until the generated models.dev catalog catches up.

Add focused coverage for metadata and modality resolution, catalog projection from a bare provider ID, and the adjacent non-vision deepseek-v4-flash model.

Fixes#3417

Root cause

The first-party /models response supplies no modality facts for the new model, and Maka's generated metadata snapshot predates the 2026-08-21 release. resolveModelVisionSupport() therefore finds no provider or static vision signal and resolves to false.

Verification

  • npm --workspace @maka/core test — 578 passed, 0 failed
  • npm run lint — passed
  • npm run format:check — passed
  • npm run build — passed
  • npm run typecheck — passed
  • ./node_modules/.bin/knip --workspace apps/desktop — passed
  • ./node_modules/.bin/knip --workspace packages/ui — passed
  • Desktop smoke test — selected deepseek-v4-flash-vision-exp, attached an image, and received an image-grounded response

Before: Maka classifies the model as text-only and filters the attached image.

Before: Maka filters the image as unsupported

After: Maka recognizes the model as multimodal, sends the same image, and receives an image-grounded response.

After: Maka sends the image to DeepSeek V4 Flash Vision

Full npm test was not completed locally: an earlier run stalled in packages/eval/dist/__tests__/provider-admission-integration.test.js and was interrupted. The affected Core suite completed without failures, and required CI will exercise the remaining workspaces.

Scope

  • The generated models.dev snapshot is unchanged; this is an explicit static entry until the upstream catalog includes the model.
  • No lifecycle is assigned because DeepSeek calls the model experimental, while Maka has no exact matching lifecycle value.
  • Protocol selection is unchanged; the model continues to use Chat Completions, whose image input path DeepSeek documents and the Desktop smoke test verified.
  • The model is not added to the offline fallback list.

AI use

Select exactly one:

  • No generative tool made a substantive contribution
  • Generative tooling made a substantive contribution

Tool(s) and scope:

OpenAI Codex assisted with official-documentation review, diagnosis, implementation, regression tests, local verification, and drafting this description. I reproduced the issue, reviewed the final diff and test results, and performed the manual smoke test.

Checklist

  • Tests cover the change and fail without it
  • Lint, format, typecheck and the affected suites pass locally

Does this PR entail a change in behavior?

  • Yes — described under Summary above
  • No

@Astro-Han

Astro-Han commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Thanks for filling in this metadata, especially for including the official docs link and the context window.

I am closing this because #3605 is doing the same thing — registering deepseek-v4-flash-vision-exp in STATIC_MODEL_METADATA.deepseek. #3605 is out of draft and under review, while this one has been in draft without updates since 21 August, so I am closing this side to avoid two parallel efforts.

Two things here differ from #3605, and I have raised both there — please take a look:

  1. Your thinkingOptions.efforts is ['low', 'high', 'max']; fix(core): add DeepSeek V4 Flash Vision to model metadata #3605 has ['high', 'max'], without the low tier.
  2. Your capabilities has no webSearch; fix(core): add DeepSeek V4 Flash Vision to model metadata #3605 adds webSearch: true.

You also included model-catalog.test.ts and model-metadata.test.ts, and #3605 has no tests at all. If you confirm those two facts and move the tests over to #3605, nothing from this PR is lost.

简体中文

谢谢你补这条元数据,尤其是把官方文档链接和上下文窗口这些都写全了。

这条我准备关掉,因为 #3605 在做同一件事——同样在 STATIC_MODEL_METADATA.deepseek 里注册 deepseek-v4-flash-vision-exp#3605 已经脱离 draft 并在 review 中,这条从 8 月 21 日起一直是 draft 没有再动,为了避免两条并行我先关这边。

不过你这条有两处内容是 #3605 没有的,我已经在那边提出来了,麻烦你也过去看一眼:

  1. thinkingOptions.efforts 你写的是 ['low', 'high', 'max']fix(core): add DeepSeek V4 Flash Vision to model metadata #3605 写的是 ['high', 'max'],少一档 low。
  2. capabilities 你没有 webSearchfix(core): add DeepSeek V4 Flash Vision to model metadata #3605 加了 webSearch: true

另外你还带了 model-catalog.test.tsmodel-metadata.test.ts 两个测试,#3605 没有测试。如果你愿意把这两处事实确认一下、再把测试补到 #3605 上,这条的价值就都保住了。

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bug(core): DeepSeek V4 Flash Vision is treated as text-only

2 participants

@sunrioa@Astro-Han
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(core): recognize DeepSeek V4 Flash Vision image input - #3420

Closed
sunrioa wants to merge 1 commit into
apache:mainfrom
sunrioa:fix/deepseek-v4-vision-capability
Closed

fix(core): recognize DeepSeek V4 Flash Vision image input#3420
sunrioa wants to merge 1 commit into
apache:mainfrom
sunrioa:fix/deepseek-v4-vision-capability

Conversation

@sunrioa

Copy link
Copy Markdown
Contributor

Generated-by: OpenAI Codex

Summary

DeepSeek's first-party inventory returns deepseek-v4-flash-vision-exp as a bare ID. Without a catalog entry, Maka classifies it as text-only, filters image attachments, and displays only the raw model ID.

Add explicit static metadata from DeepSeek's Vision guide and model details, including text-and-image input, friendly display metadata, documented context/output limits, structured output, tool calling, and reasoning controls. Keep this entry local to the first-party DeepSeek provider until the generated models.dev catalog catches up.

Add focused coverage for metadata and modality resolution, catalog projection from a bare provider ID, and the adjacent non-vision deepseek-v4-flash model.

Fixes#3417

Root cause

The first-party /models response supplies no modality facts for the new model, and Maka's generated metadata snapshot predates the 2026-08-21 release. resolveModelVisionSupport() therefore finds no provider or static vision signal and resolves to false.

Verification

  • npm --workspace @maka/core test — 578 passed, 0 failed
  • npm run lint — passed
  • npm run format:check — passed
  • npm run build — passed
  • npm run typecheck — passed
  • ./node_modules/.bin/knip --workspace apps/desktop — passed
  • ./node_modules/.bin/knip --workspace packages/ui — passed
  • Desktop smoke test — selected deepseek-v4-flash-vision-exp, attached an image, and received an image-grounded response

Before: Maka classifies the model as text-only and filters the attached image.

Before: Maka filters the image as unsupported

After: Maka recognizes the model as multimodal, sends the same image, and receives an image-grounded response.

After: Maka sends the image to DeepSeek V4 Flash Vision

Full npm test was not completed locally: an earlier run stalled in packages/eval/dist/__tests__/provider-admission-integration.test.js and was interrupted. The affected Core suite completed without failures, and required CI will exercise the remaining workspaces.

Scope

  • The generated models.dev snapshot is unchanged; this is an explicit static entry until the upstream catalog includes the model.
  • No lifecycle is assigned because DeepSeek calls the model experimental, while Maka has no exact matching lifecycle value.
  • Protocol selection is unchanged; the model continues to use Chat Completions, whose image input path DeepSeek documents and the Desktop smoke test verified.
  • The model is not added to the offline fallback list.

AI use

Select exactly one:

  • No generative tool made a substantive contribution
  • Generative tooling made a substantive contribution

Tool(s) and scope:

OpenAI Codex assisted with official-documentation review, diagnosis, implementation, regression tests, local verification, and drafting this description. I reproduced the issue, reviewed the final diff and test results, and performed the manual smoke test.

Checklist

  • Tests cover the change and fail without it
  • Lint, format, typecheck and the affected suites pass locally

Does this PR entail a change in behavior?

  • Yes — described under Summary above
  • No

@Astro-Han

Astro-Han commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Thanks for filling in this metadata, especially for including the official docs link and the context window.

I am closing this because #3605 is doing the same thing — registering deepseek-v4-flash-vision-exp in STATIC_MODEL_METADATA.deepseek. #3605 is out of draft and under review, while this one has been in draft without updates since 21 August, so I am closing this side to avoid two parallel efforts.

Two things here differ from #3605, and I have raised both there — please take a look:

  1. Your thinkingOptions.efforts is ['low', 'high', 'max']; fix(core): add DeepSeek V4 Flash Vision to model metadata #3605 has ['high', 'max'], without the low tier.
  2. Your capabilities has no webSearch; fix(core): add DeepSeek V4 Flash Vision to model metadata #3605 adds webSearch: true.

You also included model-catalog.test.ts and model-metadata.test.ts, and #3605 has no tests at all. If you confirm those two facts and move the tests over to #3605, nothing from this PR is lost.

简体中文

谢谢你补这条元数据,尤其是把官方文档链接和上下文窗口这些都写全了。

这条我准备关掉,因为 #3605 在做同一件事——同样在 STATIC_MODEL_METADATA.deepseek 里注册 deepseek-v4-flash-vision-exp#3605 已经脱离 draft 并在 review 中,这条从 8 月 21 日起一直是 draft 没有再动,为了避免两条并行我先关这边。

不过你这条有两处内容是 #3605 没有的,我已经在那边提出来了,麻烦你也过去看一眼:

  1. thinkingOptions.efforts 你写的是 ['low', 'high', 'max']fix(core): add DeepSeek V4 Flash Vision to model metadata #3605 写的是 ['high', 'max'],少一档 low。
  2. capabilities 你没有 webSearchfix(core): add DeepSeek V4 Flash Vision to model metadata #3605 加了 webSearch: true

另外你还带了 model-catalog.test.tsmodel-metadata.test.ts 两个测试,#3605 没有测试。如果你愿意把这两处事实确认一下、再把测试补到 #3605 上,这条的价值就都保住了。

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bug(core): DeepSeek V4 Flash Vision is treated as text-only

2 participants

@sunrioa@Astro-Han
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(core): recognize DeepSeek V4 Flash Vision image input - #3420

Closed
sunrioa wants to merge 1 commit into
apache:mainfrom
sunrioa:fix/deepseek-v4-vision-capability
Closed

fix(core): recognize DeepSeek V4 Flash Vision image input#3420
sunrioa wants to merge 1 commit into
apache:mainfrom
sunrioa:fix/deepseek-v4-vision-capability

Conversation

@sunrioa

Copy link
Copy Markdown
Contributor

Generated-by: OpenAI Codex

Summary

DeepSeek's first-party inventory returns deepseek-v4-flash-vision-exp as a bare ID. Without a catalog entry, Maka classifies it as text-only, filters image attachments, and displays only the raw model ID.

Add explicit static metadata from DeepSeek's Vision guide and model details, including text-and-image input, friendly display metadata, documented context/output limits, structured output, tool calling, and reasoning controls. Keep this entry local to the first-party DeepSeek provider until the generated models.dev catalog catches up.

Add focused coverage for metadata and modality resolution, catalog projection from a bare provider ID, and the adjacent non-vision deepseek-v4-flash model.

Fixes#3417

Root cause

The first-party /models response supplies no modality facts for the new model, and Maka's generated metadata snapshot predates the 2026-08-21 release. resolveModelVisionSupport() therefore finds no provider or static vision signal and resolves to false.

Verification

  • npm --workspace @maka/core test — 578 passed, 0 failed
  • npm run lint — passed
  • npm run format:check — passed
  • npm run build — passed
  • npm run typecheck — passed
  • ./node_modules/.bin/knip --workspace apps/desktop — passed
  • ./node_modules/.bin/knip --workspace packages/ui — passed
  • Desktop smoke test — selected deepseek-v4-flash-vision-exp, attached an image, and received an image-grounded response

Before: Maka classifies the model as text-only and filters the attached image.

Before: Maka filters the image as unsupported

After: Maka recognizes the model as multimodal, sends the same image, and receives an image-grounded response.

After: Maka sends the image to DeepSeek V4 Flash Vision

Full npm test was not completed locally: an earlier run stalled in packages/eval/dist/__tests__/provider-admission-integration.test.js and was interrupted. The affected Core suite completed without failures, and required CI will exercise the remaining workspaces.

Scope

  • The generated models.dev snapshot is unchanged; this is an explicit static entry until the upstream catalog includes the model.
  • No lifecycle is assigned because DeepSeek calls the model experimental, while Maka has no exact matching lifecycle value.
  • Protocol selection is unchanged; the model continues to use Chat Completions, whose image input path DeepSeek documents and the Desktop smoke test verified.
  • The model is not added to the offline fallback list.

AI use

Select exactly one:

  • No generative tool made a substantive contribution
  • Generative tooling made a substantive contribution

Tool(s) and scope:

OpenAI Codex assisted with official-documentation review, diagnosis, implementation, regression tests, local verification, and drafting this description. I reproduced the issue, reviewed the final diff and test results, and performed the manual smoke test.

Checklist

  • Tests cover the change and fail without it
  • Lint, format, typecheck and the affected suites pass locally

Does this PR entail a change in behavior?

  • Yes — described under Summary above
  • No

@Astro-Han

Astro-Han commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Thanks for filling in this metadata, especially for including the official docs link and the context window.

I am closing this because #3605 is doing the same thing — registering deepseek-v4-flash-vision-exp in STATIC_MODEL_METADATA.deepseek. #3605 is out of draft and under review, while this one has been in draft without updates since 21 August, so I am closing this side to avoid two parallel efforts.

Two things here differ from #3605, and I have raised both there — please take a look:

  1. Your thinkingOptions.efforts is ['low', 'high', 'max']; fix(core): add DeepSeek V4 Flash Vision to model metadata #3605 has ['high', 'max'], without the low tier.
  2. Your capabilities has no webSearch; fix(core): add DeepSeek V4 Flash Vision to model metadata #3605 adds webSearch: true.

You also included model-catalog.test.ts and model-metadata.test.ts, and #3605 has no tests at all. If you confirm those two facts and move the tests over to #3605, nothing from this PR is lost.

简体中文

谢谢你补这条元数据,尤其是把官方文档链接和上下文窗口这些都写全了。

这条我准备关掉,因为 #3605 在做同一件事——同样在 STATIC_MODEL_METADATA.deepseek 里注册 deepseek-v4-flash-vision-exp#3605 已经脱离 draft 并在 review 中,这条从 8 月 21 日起一直是 draft 没有再动,为了避免两条并行我先关这边。

不过你这条有两处内容是 #3605 没有的,我已经在那边提出来了,麻烦你也过去看一眼:

  1. thinkingOptions.efforts 你写的是 ['low', 'high', 'max']fix(core): add DeepSeek V4 Flash Vision to model metadata #3605 写的是 ['high', 'max'],少一档 low。
  2. capabilities 你没有 webSearchfix(core): add DeepSeek V4 Flash Vision to model metadata #3605 加了 webSearch: true

另外你还带了 model-catalog.test.tsmodel-metadata.test.ts 两个测试,#3605 没有测试。如果你愿意把这两处事实确认一下、再把测试补到 #3605 上,这条的价值就都保住了。

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bug(core): DeepSeek V4 Flash Vision is treated as text-only

2 participants

@sunrioa@Astro-Han
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix(core): recognize DeepSeek V4 Flash Vision image input - #3420

Closed
sunrioa wants to merge 1 commit into
apache:mainfrom
sunrioa:fix/deepseek-v4-vision-capability
Closed

fix(core): recognize DeepSeek V4 Flash Vision image input#3420
sunrioa wants to merge 1 commit into
apache:mainfrom
sunrioa:fix/deepseek-v4-vision-capability

Conversation

@sunrioa

Copy link
Copy Markdown
Contributor

Generated-by: OpenAI Codex

Summary

DeepSeek's first-party inventory returns deepseek-v4-flash-vision-exp as a bare ID. Without a catalog entry, Maka classifies it as text-only, filters image attachments, and displays only the raw model ID.

Add explicit static metadata from DeepSeek's Vision guide and model details, including text-and-image input, friendly display metadata, documented context/output limits, structured output, tool calling, and reasoning controls. Keep this entry local to the first-party DeepSeek provider until the generated models.dev catalog catches up.

Add focused coverage for metadata and modality resolution, catalog projection from a bare provider ID, and the adjacent non-vision deepseek-v4-flash model.

Fixes#3417

Root cause

The first-party /models response supplies no modality facts for the new model, and Maka's generated metadata snapshot predates the 2026-08-21 release. resolveModelVisionSupport() therefore finds no provider or static vision signal and resolves to false.

Verification

  • npm --workspace @maka/core test — 578 passed, 0 failed
  • npm run lint — passed
  • npm run format:check — passed
  • npm run build — passed
  • npm run typecheck — passed
  • ./node_modules/.bin/knip --workspace apps/desktop — passed
  • ./node_modules/.bin/knip --workspace packages/ui — passed
  • Desktop smoke test — selected deepseek-v4-flash-vision-exp, attached an image, and received an image-grounded response

Before: Maka classifies the model as text-only and filters the attached image.

Before: Maka filters the image as unsupported

After: Maka recognizes the model as multimodal, sends the same image, and receives an image-grounded response.

After: Maka sends the image to DeepSeek V4 Flash Vision

Full npm test was not completed locally: an earlier run stalled in packages/eval/dist/__tests__/provider-admission-integration.test.js and was interrupted. The affected Core suite completed without failures, and required CI will exercise the remaining workspaces.

Scope

  • The generated models.dev snapshot is unchanged; this is an explicit static entry until the upstream catalog includes the model.
  • No lifecycle is assigned because DeepSeek calls the model experimental, while Maka has no exact matching lifecycle value.
  • Protocol selection is unchanged; the model continues to use Chat Completions, whose image input path DeepSeek documents and the Desktop smoke test verified.
  • The model is not added to the offline fallback list.

AI use

Select exactly one:

  • No generative tool made a substantive contribution
  • Generative tooling made a substantive contribution

Tool(s) and scope:

OpenAI Codex assisted with official-documentation review, diagnosis, implementation, regression tests, local verification, and drafting this description. I reproduced the issue, reviewed the final diff and test results, and performed the manual smoke test.

Checklist

  • Tests cover the change and fail without it
  • Lint, format, typecheck and the affected suites pass locally

Does this PR entail a change in behavior?

  • Yes — described under Summary above
  • No

@Astro-Han

Astro-Han commented Aug 24, 2026

Copy link
Copy Markdown
Contributor

Thanks for filling in this metadata, especially for including the official docs link and the context window.

I am closing this because #3605 is doing the same thing — registering deepseek-v4-flash-vision-exp in STATIC_MODEL_METADATA.deepseek. #3605 is out of draft and under review, while this one has been in draft without updates since 21 August, so I am closing this side to avoid two parallel efforts.

Two things here differ from #3605, and I have raised both there — please take a look:

  1. Your thinkingOptions.efforts is ['low', 'high', 'max']; fix(core): add DeepSeek V4 Flash Vision to model metadata #3605 has ['high', 'max'], without the low tier.
  2. Your capabilities has no webSearch; fix(core): add DeepSeek V4 Flash Vision to model metadata #3605 adds webSearch: true.

You also included model-catalog.test.ts and model-metadata.test.ts, and #3605 has no tests at all. If you confirm those two facts and move the tests over to #3605, nothing from this PR is lost.

简体中文

谢谢你补这条元数据,尤其是把官方文档链接和上下文窗口这些都写全了。

这条我准备关掉,因为 #3605 在做同一件事——同样在 STATIC_MODEL_METADATA.deepseek 里注册 deepseek-v4-flash-vision-exp#3605 已经脱离 draft 并在 review 中,这条从 8 月 21 日起一直是 draft 没有再动,为了避免两条并行我先关这边。

不过你这条有两处内容是 #3605 没有的,我已经在那边提出来了,麻烦你也过去看一眼:

  1. thinkingOptions.efforts 你写的是 ['low', 'high', 'max']fix(core): add DeepSeek V4 Flash Vision to model metadata #3605 写的是 ['high', 'max'],少一档 low。
  2. capabilities 你没有 webSearchfix(core): add DeepSeek V4 Flash Vision to model metadata #3605 加了 webSearch: true

另外你还带了 model-catalog.test.tsmodel-metadata.test.ts 两个测试,#3605 没有测试。如果你愿意把这两处事实确认一下、再把测试补到 #3605 上,这条的价值就都保住了。

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bug(core): DeepSeek V4 Flash Vision is treated as text-only

2 participants

@sunrioa@Astro-Han