From 7e18abd1088ea0b10f4a449d27d3335bd7f16650 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=CE=B1I?= Date: Tue, 8 Sep 2026 14:08:40 +0800 Subject: [PATCH] fix(llm): route all DashScope models through native provider (#7234) DashScope's OpenAI-compatible endpoint serves DeepSeek/Kimi/GLM/etc., not only Qwen. Stop restricting the native match to the qwen* prefix so DASHSCOPE_BASE_URL applies consistently. Fixes #7233. Co-authored-by: Alphaxiaoteng <230277249+Alphaxiaoteng@users.noreply.github.com> Co-authored-by: Vidit Ostwal <110953813+Vidit-Ostwal@users.noreply.github.com> --- lib/crewai/src/crewai/llm.py | 3 ++- .../openai_compatible/test_openai_compatible.py | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/crewai/src/crewai/llm.py b/lib/crewai/src/crewai/llm.py index e6604805d..6c9c60911 100644 --- a/lib/crewai/src/crewai/llm.py +++ b/lib/crewai/src/crewai/llm.py @@ -573,7 +573,8 @@ class LLM(BaseLLM): return True if provider == "dashscope": - return model_lower.startswith("qwen") + # DashScope's OpenAI-compatible endpoint serves Qwen plus DeepSeek/Kimi/GLM/etc. + return True if provider == "openrouter": # OpenRouter uses org/model format but accepts anything diff --git a/lib/crewai/tests/llms/openai_compatible/test_openai_compatible.py b/lib/crewai/tests/llms/openai_compatible/test_openai_compatible.py index d8747571f..49106050b 100644 --- a/lib/crewai/tests/llms/openai_compatible/test_openai_compatible.py +++ b/lib/crewai/tests/llms/openai_compatible/test_openai_compatible.py @@ -298,6 +298,20 @@ class TestLLMIntegration: assert isinstance(llm, OpenAICompatibleCompletion) assert llm.provider == "dashscope" + def test_llm_creates_openai_compatible_for_dashscope_non_qwen(self): + """Non-Qwen DashScope models must still use the native OpenAI-compatible path.""" + with patch.dict( + os.environ, + { + "DASHSCOPE_API_KEY": "test-key", + "DASHSCOPE_BASE_URL": "https://my-dashscope.example.com/v1", + }, + ): + llm = LLM(model="dashscope/deepseek-v3") + assert isinstance(llm, OpenAICompatibleCompletion) + assert llm.provider == "dashscope" + assert llm.base_url == "https://my-dashscope.example.com/v1" + def test_llm_with_explicit_provider(self): """Test LLM with explicit provider parameter.""" with patch.dict(os.environ, {"DEEPSEEK_API_KEY": "test-key"}):