Skip to content
Open
Show file tree
Hide file tree
Changes from all 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