From 3cb79894216c2752f2d374dfbf15e8d1c9a96e96 Mon Sep 17 00:00:00 2001 From: charliejinc Date: Tue, 1 Sep 2026 15:02:05 +0800 Subject: [PATCH] fix(dashscope): broaden kimi-k multimodal detection to cover all variants Replace specific kimi-k2.5/kimi-k2.6 checks with a single kimi-k contains match so that k2.7-code, k3 and future variants are detected. Add kimi-k2-thinking and moonshot-kimi-k2-instruct to the text-only exclusion list. --- .../model/dashscope/DashScopeHttpClient.java | 7 ++++--- .../model/dashscope/DashScopeHttpClientTest.java | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/agentscope-extensions/agentscope-extensions-model/agentscope-extensions-model-dashscope/src/main/java/io/agentscope/extensions/model/dashscope/DashScopeHttpClient.java b/agentscope-extensions/agentscope-extensions-model/agentscope-extensions-model-dashscope/src/main/java/io/agentscope/extensions/model/dashscope/DashScopeHttpClient.java index 9eefb478d8..1ad19fd650 100644 --- a/agentscope-extensions/agentscope-extensions-model/agentscope-extensions-model-dashscope/src/main/java/io/agentscope/extensions/model/dashscope/DashScopeHttpClient.java +++ b/agentscope-extensions/agentscope-extensions-model/agentscope-extensions-model-dashscope/src/main/java/io/agentscope/extensions/model/dashscope/DashScopeHttpClient.java @@ -393,7 +393,9 @@ public static boolean isMultimodalModel(String modelName) { String lowerModelName = modelName.toLowerCase(); // Reverse exclusions: text-only models whose prefix would otherwise match. if (lowerModelName.equals("qwen3.6-max-preview") - || lowerModelName.startsWith("qwen3.7-max")) { + || lowerModelName.startsWith("qwen3.7-max") + || lowerModelName.contains("kimi-k2-thinking") + || lowerModelName.contains("moonshot-kimi-k2-instruct")) { return false; } return lowerModelName.startsWith("qvq") @@ -403,8 +405,7 @@ public static boolean isMultimodalModel(String modelName) { || lowerModelName.startsWith("qwen3.6") || lowerModelName.startsWith("qwen3.7") || lowerModelName.startsWith("qwen3.8-max") - || lowerModelName.contains("kimi-k2.5") - || lowerModelName.contains("kimi-k2.6"); + || lowerModelName.contains("kimi-k"); } /** diff --git a/agentscope-extensions/agentscope-extensions-model/agentscope-extensions-model-dashscope/src/test/java/io/agentscope/extensions/model/dashscope/DashScopeHttpClientTest.java b/agentscope-extensions/agentscope-extensions-model/agentscope-extensions-model-dashscope/src/test/java/io/agentscope/extensions/model/dashscope/DashScopeHttpClientTest.java index 2f355474ac..87e4b5604c 100644 --- a/agentscope-extensions/agentscope-extensions-model/agentscope-extensions-model-dashscope/src/test/java/io/agentscope/extensions/model/dashscope/DashScopeHttpClientTest.java +++ b/agentscope-extensions/agentscope-extensions-model/agentscope-extensions-model-dashscope/src/test/java/io/agentscope/extensions/model/dashscope/DashScopeHttpClientTest.java @@ -250,6 +250,20 @@ void testIsMultimodalModelPatterns() { assertFalse(DashScopeHttpClient.isMultimodalModel("")); } + @Test + void testIsMultimodalModelKimiFamily() { + // kimi-k variants with vision/multimodal support + assertTrue(DashScopeHttpClient.isMultimodalModel("kimi-k2.5")); + assertTrue(DashScopeHttpClient.isMultimodalModel("kimi-k2.6")); + assertTrue(DashScopeHttpClient.isMultimodalModel("kimi-k2.7-code")); + assertTrue(DashScopeHttpClient.isMultimodalModel("kimi-k3")); + assertTrue(DashScopeHttpClient.isMultimodalModel("kimi/kimi-k2.5")); + assertTrue(DashScopeHttpClient.isMultimodalModel("Moonshot-Kimi-K2.5")); + // Text-only kimi models + assertFalse(DashScopeHttpClient.isMultimodalModel("kimi-k2-thinking")); + assertFalse(DashScopeHttpClient.isMultimodalModel("Moonshot-Kimi-K2-Instruct")); + } + @Test void testRequestEndpointTypePassedToEndpointSelection() throws Exception { // Verify that endpointType in DashScopeRequest is used for endpoint routing