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);