This is an automated email from the ASF dual-hosted git repository.

lizhimins pushed a commit to branch rocketmq-studio
in repository https://gitbox.apache.org/repos/asf/rocketmq-dashboard.git


The following commit(s) were added to refs/heads/rocketmq-studio by this push:
     new c2460ec2d fix(ai): reject unsupported LLM test providers (#2236)
c2460ec2d is described below

commit c2460ec2d508ead8f406aa76b2d950c5b7fc65e7
Author: shown <[email protected]>
AuthorDate: Wed Aug 19 11:21:16 2026 +0800

    fix(ai): reject unsupported LLM test providers (#2236)
    
    Signed-off-by: yuluo-yx <[email protected]>
---
 .../rocketmq/studio/ops/ai/LlmConfigService.java   | 16 ++++++++-----
 .../studio/ops/ai/LlmConfigServiceTest.java        | 27 ++++++++++++++++++++++
 2 files changed, 37 insertions(+), 6 deletions(-)

diff --git 
a/server/src/main/java/org/apache/rocketmq/studio/ops/ai/LlmConfigService.java 
b/server/src/main/java/org/apache/rocketmq/studio/ops/ai/LlmConfigService.java
index d5666b637..7308a855d 100644
--- 
a/server/src/main/java/org/apache/rocketmq/studio/ops/ai/LlmConfigService.java
+++ 
b/server/src/main/java/org/apache/rocketmq/studio/ops/ai/LlmConfigService.java
@@ -134,12 +134,16 @@ public class LlmConfigService {
         if 
(!LlmConfigVO.ENGINE_HTTP.equalsIgnoreCase(normalized.normalizeEngine())) {
             return testCliEngine(normalized.normalizeEngine());
         }
-        if (llmClient.supports(normalized)) {
-            try {
-                llmClient.listModels(normalized);
-            } catch (LlmGatewayException exception) {
-                return LlmOperationResultVO.failure(exception.getCode(), 
exception.getMessage(), exception.getHint());
-            }
+        if (!llmClient.supports(normalized)) {
+            return LlmOperationResultVO.failure(
+                    "llm.config.unsupported_provider",
+                    "LLM provider is not supported by the OpenAI-compatible 
gateway",
+                    "Use one of: openai, deepseek, tongyi, ollama.");
+        }
+        try {
+            llmClient.listModels(normalized);
+        } catch (LlmGatewayException exception) {
+            return LlmOperationResultVO.failure(exception.getCode(), 
exception.getMessage(), exception.getHint());
         }
         return LlmOperationResultVO.success("Connection successful");
     }
diff --git 
a/server/src/test/java/org/apache/rocketmq/studio/ops/ai/LlmConfigServiceTest.java
 
b/server/src/test/java/org/apache/rocketmq/studio/ops/ai/LlmConfigServiceTest.java
index 77a774cd2..db8a5872e 100644
--- 
a/server/src/test/java/org/apache/rocketmq/studio/ops/ai/LlmConfigServiceTest.java
+++ 
b/server/src/test/java/org/apache/rocketmq/studio/ops/ai/LlmConfigServiceTest.java
@@ -327,6 +327,8 @@ class LlmConfigServiceTest {
 
     @Test
     void testConfigShouldAllowOllamaWithoutApiKey() {
+        when(llmClient.supports(any())).thenReturn(true);
+
         LlmOperationResultVO result = 
llmConfigService.testConfig(LlmConfigVO.builder()
                 .provider("ollama")
                 .engine("http")
@@ -338,6 +340,31 @@ class LlmConfigServiceTest {
         assertThat(result.getMsg()).isEqualTo("Connection successful");
     }
 
+    @Test
+    void testConfigShouldRejectHttpProvidersUnsupportedByRuntimeGateway() {
+        LlmOperationResultVO azure = 
llmConfigService.testConfig(LlmConfigVO.builder()
+                .provider("azure")
+                .engine("http")
+                .apiKey("azure-key")
+                .apiBase("https://example.openai.azure.com";)
+                .deploymentName("production-gpt")
+                .model("gpt-4o")
+                .build());
+        LlmOperationResultVO bedrock = 
llmConfigService.testConfig(LlmConfigVO.builder()
+                .provider("bedrock")
+                .engine("http")
+                .apiKey("bedrock-key")
+                .apiBase("https://bedrock-runtime.us-east-1.amazonaws.com";)
+                .model("anthropic.claude-3-sonnet")
+                .build());
+
+        assertThat(azure.getStatus()).isEqualTo(1);
+        
assertThat(azure.getCode()).isEqualTo("llm.config.unsupported_provider");
+        assertThat(bedrock.getStatus()).isEqualTo(1);
+        
assertThat(bedrock.getCode()).isEqualTo("llm.config.unsupported_provider");
+        verify(llmClient, never()).listModels(any());
+    }
+
     @Test
     void testConfigShouldProbeProviderModelsWithStoredApiKey() {
         
when(llmClient.supports(org.mockito.ArgumentMatchers.any())).thenReturn(true);

Reply via email to