Skip to content
Open
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions bigtop-manager-ai/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,10 @@
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-client-webflux</artifactId>
</dependency>
</dependencies>

</project>
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

import org.apache.bigtop.manager.ai.assistant.config.GeneralAssistantConfig;
import org.apache.bigtop.manager.ai.assistant.provider.ChatMemoryStoreProvider;
import org.apache.bigtop.manager.ai.config.McpAsyncClientManager;
import org.apache.bigtop.manager.ai.core.AbstractAIAssistantFactory;
import org.apache.bigtop.manager.ai.core.config.AIAssistantConfig;
import org.apache.bigtop.manager.ai.core.enums.PlatformType;
Expand All @@ -34,11 +35,15 @@

import org.springframework.stereotype.Component;

import lombok.extern.slf4j.Slf4j;

import jakarta.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;

@Component
@Slf4j
public class GeneralAssistantFactory extends AbstractAIAssistantFactory {

@Resource
Expand All @@ -47,6 +52,9 @@ public class GeneralAssistantFactory extends AbstractAIAssistantFactory {
@Resource
private ChatMemoryStoreProvider chatMemoryStoreProvider;

@Resource
private McpAsyncClientManager mcpAsyncClientManager;

private void configureSystemPrompt(AIAssistant.Builder builder, SystemPrompt systemPrompt, String locale) {
List<String> systemPrompts = new ArrayList<>();
if (systemPrompt != null) {
Expand All @@ -68,7 +76,15 @@ private AIAssistant.Builder initializeBuilder(PlatformType platformType) {
}

@Override
public AIAssistant createWithPrompt(AIAssistantConfig config, Object toolProvider, SystemPrompt systemPrompt) {
public AIAssistant createWithPrompt(AIAssistantConfig config, SystemPrompt systemPrompt) {
return createWithPrompt(config, systemPrompt, null);
}

@Override
public AIAssistant createWithPrompt(
AIAssistantConfig config,
SystemPrompt systemPrompt,
Consumer<AIAssistant.ToolExecutionEvent> toolExecutionListener) {
GeneralAssistantConfig generalAssistantConfig = (GeneralAssistantConfig) config;
PlatformType platformType = generalAssistantConfig.getPlatformType();
Object id = generalAssistantConfig.getId();
Expand All @@ -80,14 +96,23 @@ public AIAssistant createWithPrompt(AIAssistantConfig config, Object toolProvide
builder.id(id)
.memoryStore(chatMemoryStoreProvider.createPersistentChatMemoryStore(id))
.withConfig(generalAssistantConfig);
builder.withToolExecutionListener(toolExecutionListener);

List<io.modelcontextprotocol.client.McpAsyncClient> mcpAsyncClients = mcpAsyncClientManager.getClients();
if (!mcpAsyncClients.isEmpty()) {
log.info("MCP clients available for platform {} (chat), count={}", platformType, mcpAsyncClients.size());
builder.withMcpClients(mcpAsyncClients);
} else {
log.info("MCP client unavailable for platform {} (chat)", platformType);
}

configureSystemPrompt(builder, systemPrompt, generalAssistantConfig.getLanguage());

return builder.build();
}

@Override
public AIAssistant createForTest(AIAssistantConfig config, Object toolProvider) {
public AIAssistant createForTest(AIAssistantConfig config) {
GeneralAssistantConfig generalAssistantConfig = (GeneralAssistantConfig) config;
PlatformType platformType = generalAssistantConfig.getPlatformType();
AIAssistant.Builder builder = initializeBuilder(platformType);
Expand All @@ -96,6 +121,34 @@ public AIAssistant createForTest(AIAssistantConfig config, Object toolProvider)
.memoryStore(chatMemoryStoreProvider.createInMemoryChatMemoryStore())
.withConfig(generalAssistantConfig);

List<io.modelcontextprotocol.client.McpAsyncClient> mcpAsyncClients = mcpAsyncClientManager.getClients();
if (!mcpAsyncClients.isEmpty()) {
log.info("MCP clients available for platform {} (test), count={}", platformType, mcpAsyncClients.size());
builder.withMcpClients(mcpAsyncClients);
} else {
log.info("MCP client unavailable for platform {} (test)", platformType);
}

return builder.build();
}

@Override
public List<String> getModels(AIAssistantConfig config) {
GeneralAssistantConfig generalAssistantConfig = (GeneralAssistantConfig) config;
PlatformType platformType = generalAssistantConfig.getPlatformType();
try {
AIAssistant.Builder builder = initializeBuilder(platformType);
builder.withConfig(generalAssistantConfig);
List<String> models = builder.getModels();
if (models != null && !models.isEmpty()) {
log.info("Fetched {} dynamic models for platform {}.", models.size(), platformType);
return models;
}
} catch (Exception e) {
log.warn("Failed to fetch dynamic models from platform {}: {}", platformType, e.getMessage());
}

log.info("No dynamic models for platform {}, fallback to default models.", platformType);
return java.util.Collections.emptyList();
}
}
Loading
Loading