From 1e334407e0be406465055402c890d426d3cd2b4c Mon Sep 17 00:00:00 2001 From: Sebo Wang <50386965+sebowang@users.noreply.github.com> Date: Thu, 17 Sep 2026 22:10:52 +0800 Subject: [PATCH 1/3] add DeepSeek Flash vision capability --- backend/agent/llm/openai_provider.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/backend/agent/llm/openai_provider.py b/backend/agent/llm/openai_provider.py index 49f0538..33a6138 100644 --- a/backend/agent/llm/openai_provider.py +++ b/backend/agent/llm/openai_provider.py @@ -540,6 +540,14 @@ class DeepSeekProvider(OpenAIProvider): _is_deepseek: bool = True + def supports_vision(self) -> bool: + """Return whether the selected DeepSeek model accepts image blocks.""" + return self.model.lower() in { + "deepseek-flash", + "deepseek-v4-flash", + "deepseek-v4-flash-vision-exp", + } + def __init__(self, model: str = "deepseek-flash", api_key: str | None = None, **kwargs) -> None: super().__init__(model=model, api_key=api_key, base_url="https://api.deepseek.com", **kwargs) @@ -640,4 +648,4 @@ async def complete( register_provider(LLMProvider.OPENROUTER, OpenRouterProvider) register_provider(LLMProvider.PERPLEXITY, PerplexityProvider) register_provider(LLMProvider.MISTRAL, MistralProvider) -register_provider(LLMProvider.MINIMAX, MinimaxProvider) +register_provider(LLMProvider.MINIMAX, MinimaxProvider) \ No newline at end of file From e58ed0cd5d331ea8d90c576cc239db463939d06d Mon Sep 17 00:00:00 2001 From: Sebo Wang <50386965+sebowang@users.noreply.github.com> Date: Thu, 17 Sep 2026 22:11:04 +0800 Subject: [PATCH 2/3] test DeepSeek Flash vision capability --- tests/test_deepseek_vision.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 tests/test_deepseek_vision.py diff --git a/tests/test_deepseek_vision.py b/tests/test_deepseek_vision.py new file mode 100644 index 0000000..0fc3d0b --- /dev/null +++ b/tests/test_deepseek_vision.py @@ -0,0 +1,19 @@ +"""Vision capability checks for DeepSeek models.""" + +from backend.agent.llm.openai_provider import DeepSeekProvider + + +def test_deepseek_flash_supports_vision(): + provider = DeepSeekProvider(model="deepseek-flash", api_key="test-key") + assert provider.supports_vision() is True + + +def test_legacy_deepseek_flash_aliases_support_vision(): + for model in ("deepseek-v4-flash", "deepseek-v4-flash-vision-exp"): + provider = DeepSeekProvider(model=model, api_key="test-key") + assert provider.supports_vision() is True + + +def test_deepseek_pro_does_not_claim_vision_support(): + provider = DeepSeekProvider(model="deepseek-v4-pro", api_key="test-key") + assert provider.supports_vision() is False From 9ee9433fc700baab01d84fe784ddb5cd4e5316e4 Mon Sep 17 00:00:00 2001 From: thinkwee Date: Sun, 4 Oct 2026 12:15:59 +0100 Subject: [PATCH 3/3] Restore trailing newline in openai_provider.py (ruff W292) Co-Authored-By: Claude Opus 5.5 --- backend/agent/llm/openai_provider.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/agent/llm/openai_provider.py b/backend/agent/llm/openai_provider.py index 33a6138..139d840 100644 --- a/backend/agent/llm/openai_provider.py +++ b/backend/agent/llm/openai_provider.py @@ -648,4 +648,4 @@ async def complete( register_provider(LLMProvider.OPENROUTER, OpenRouterProvider) register_provider(LLMProvider.PERPLEXITY, PerplexityProvider) register_provider(LLMProvider.MISTRAL, MistralProvider) -register_provider(LLMProvider.MINIMAX, MinimaxProvider) \ No newline at end of file +register_provider(LLMProvider.MINIMAX, MinimaxProvider)