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
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import com.bytechef.component.definition.ComponentDsl;
import com.bytechef.platform.component.definition.ai.agent.ChatMemoryFunction;
import org.springframework.ai.chat.client.advisor.PromptChatMemoryAdvisor;
import org.springframework.ai.chat.client.advisor.api.BaseAdvisor;
import org.springframework.ai.chat.memory.ChatMemoryRepository;
import org.springframework.ai.chat.memory.MessageWindowChatMemory;

Expand All @@ -48,6 +49,7 @@ protected static PromptChatMemoryAdvisor apply(ChatMemoryRepository chatMemoryRe
.build();

return PromptChatMemoryAdvisor.builder(chatMemory)
.order(BaseAdvisor.HIGHEST_PRECEDENCE + 200)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import com.bytechef.platform.component.definition.ai.agent.ChatMemoryFunction;
import java.util.Map;
import org.springframework.ai.chat.client.advisor.PromptChatMemoryAdvisor;
import org.springframework.ai.chat.client.advisor.api.BaseAdvisor;
import org.springframework.ai.chat.memory.ChatMemoryRepository;
import org.springframework.ai.chat.memory.MessageWindowChatMemory;

Expand Down Expand Up @@ -55,6 +56,7 @@ protected static PromptChatMemoryAdvisor apply(
.build();

return PromptChatMemoryAdvisor.builder(chatMemory)
.order(BaseAdvisor.HIGHEST_PRECEDENCE + 200)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import com.bytechef.platform.component.definition.ai.agent.ChatMemoryFunction;
import java.util.Map;
import org.springframework.ai.chat.client.advisor.PromptChatMemoryAdvisor;
import org.springframework.ai.chat.client.advisor.api.BaseAdvisor;
import org.springframework.ai.chat.memory.ChatMemoryRepository;
import org.springframework.ai.chat.memory.MessageWindowChatMemory;

Expand Down Expand Up @@ -55,6 +56,7 @@ protected static PromptChatMemoryAdvisor apply(
.build();

return PromptChatMemoryAdvisor.builder(chatMemory)
.order(BaseAdvisor.HIGHEST_PRECEDENCE + 200)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import com.bytechef.platform.component.definition.ai.agent.ChatMemoryFunction;
import java.util.Map;
import org.springframework.ai.chat.client.advisor.PromptChatMemoryAdvisor;
import org.springframework.ai.chat.client.advisor.api.BaseAdvisor;
import org.springframework.ai.chat.memory.MessageWindowChatMemory;

/**
Expand All @@ -50,6 +51,7 @@ protected static PromptChatMemoryAdvisor apply(
Map<String, ComponentConnection> componentConnections) {

return PromptChatMemoryAdvisor.builder(inMemoryChatMemory)
.order(BaseAdvisor.HIGHEST_PRECEDENCE + 200)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
import com.bytechef.platform.component.service.ClusterElementDefinitionService;
import java.util.Map;
import org.springframework.ai.chat.client.advisor.PromptChatMemoryAdvisor;
import org.springframework.ai.chat.client.advisor.api.BaseAdvisor;
import org.springframework.ai.chat.memory.ChatMemoryRepository;
import org.springframework.ai.chat.memory.MessageWindowChatMemory;

Expand Down Expand Up @@ -67,6 +68,7 @@ protected PromptChatMemoryAdvisor apply(
.build();

return PromptChatMemoryAdvisor.builder(chatMemory)
.order(BaseAdvisor.HIGHEST_PRECEDENCE + 200)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import com.bytechef.platform.component.definition.ai.agent.ChatMemoryFunction;
import java.util.Map;
import org.springframework.ai.chat.client.advisor.PromptChatMemoryAdvisor;
import org.springframework.ai.chat.client.advisor.api.BaseAdvisor;
import org.springframework.ai.chat.memory.ChatMemoryRepository;
import org.springframework.ai.chat.memory.MessageWindowChatMemory;

Expand All @@ -52,6 +53,7 @@ protected static PromptChatMemoryAdvisor apply(
.build();

return PromptChatMemoryAdvisor.builder(chatMemory)
.order(BaseAdvisor.HIGHEST_PRECEDENCE + 200)
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import com.bytechef.platform.component.definition.ai.agent.ChatMemoryFunction;
import java.util.Map;
import org.springframework.ai.chat.client.advisor.PromptChatMemoryAdvisor;
import org.springframework.ai.chat.client.advisor.api.BaseAdvisor;
import org.springframework.ai.chat.memory.ChatMemoryRepository;
import org.springframework.ai.chat.memory.MessageWindowChatMemory;

Expand Down Expand Up @@ -55,6 +56,7 @@ protected static PromptChatMemoryAdvisor apply(
.build();

return PromptChatMemoryAdvisor.builder(chatMemory)
.order(BaseAdvisor.HIGHEST_PRECEDENCE + 200)
.build();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
import com.bytechef.platform.component.definition.ai.agent.ChatMemoryFunction;
import java.util.Map;
import org.springframework.ai.chat.client.advisor.PromptChatMemoryAdvisor;
import org.springframework.ai.chat.client.advisor.api.BaseAdvisor;
import org.springframework.ai.chat.memory.ChatMemoryRepository;
import org.springframework.ai.chat.memory.MessageWindowChatMemory;

Expand All @@ -52,6 +53,7 @@ protected static PromptChatMemoryAdvisor apply(
.build();

return PromptChatMemoryAdvisor.builder(chatMemory)
.order(BaseAdvisor.HIGHEST_PRECEDENCE + 200)
.build();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import com.bytechef.platform.configuration.domain.ClusterElement;
import com.bytechef.platform.configuration.domain.ClusterElementMap;
import java.util.Map;
import org.springframework.ai.chat.client.advisor.api.BaseAdvisor;
import org.springframework.ai.chat.client.advisor.vectorstore.VectorStoreChatMemoryAdvisor;
import org.springframework.ai.chat.client.advisor.vectorstore.VectorStoreChatMemoryAdvisor.Builder;

Expand Down Expand Up @@ -82,7 +83,8 @@ protected VectorStoreChatMemoryAdvisor apply(
ParametersFactory.create(componentConnectionConnectionParameters),
ParametersFactory.create(clusterElement.getExtensions()), componentConnections))
.defaultTopK(
inputParameters.getInteger(CHAT_MEMORY_RETRIEVE_SIZE, 20));
inputParameters.getInteger(CHAT_MEMORY_RETRIEVE_SIZE, 20))
.order(BaseAdvisor.HIGHEST_PRECEDENCE + 200);

return builder.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
import com.bytechef.platform.component.definition.AbstractComponentDefinitionWrapper;
import com.bytechef.platform.component.definition.AiAgentComponentDefinition;
import com.bytechef.platform.component.service.ClusterElementDefinitionService;
import org.springframework.ai.model.tool.ToolCallingManager;
import org.springframework.stereotype.Component;

/**
Expand All @@ -41,10 +42,11 @@ public class AiAgentComponentHandler implements ComponentHandler {
private final AiAgentComponentDefinition componentDefinition;

public AiAgentComponentHandler(
ClusterElementDefinitionService clusterElementDefinitionService, AiAgentToolFacade aiAgentToolFacade) {
AiAgentToolFacade aiAgentToolFacade, ClusterElementDefinitionService clusterElementDefinitionService,
ToolCallingManager toolCallingManager) {

final ActionDefinition aiAgentChatActionDefinition =
AiAgentChatAction.of(clusterElementDefinitionService, aiAgentToolFacade);
AiAgentChatAction.of(aiAgentToolFacade, clusterElementDefinitionService, toolCallingManager);

this.componentDefinition = new AiAgentComponentDefinitionImpl(
component(AI_AGENT)
Expand All @@ -54,7 +56,7 @@ public AiAgentComponentHandler(
.categories(ComponentCategory.ARTIFICIAL_INTELLIGENCE)
.actions(
aiAgentChatActionDefinition,
AiAgentStreamChatAction.of(clusterElementDefinitionService, aiAgentToolFacade))
AiAgentStreamChatAction.of(aiAgentToolFacade, clusterElementDefinitionService, toolCallingManager))
.clusterElements(AiAgentChatTool.of(aiAgentChatActionDefinition)));
Comment thread
ivicac marked this conversation as resolved.
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,11 +63,14 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.ToolCallAdvisor;
import org.springframework.ai.chat.client.advisor.api.Advisor;
import org.springframework.ai.chat.client.advisor.api.BaseAdvisor;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.chat.model.ToolContext;
import org.springframework.ai.chat.prompt.ChatOptions;
import org.springframework.ai.model.tool.ToolCallingManager;
import org.springframework.ai.tool.ToolCallback;
import org.springframework.ai.tool.augment.AugmentedToolCallbackProvider;
import org.springframework.ai.tool.definition.ToolDefinition;
Expand All @@ -83,12 +86,15 @@ public abstract class AbstractAiAgentChatAction {

private final ClusterElementDefinitionService clusterElementDefinitionService;
private final AiAgentToolFacade aiAgentToolFacade;
private final ToolCallingManager toolCallingManager;

protected AbstractAiAgentChatAction(
ClusterElementDefinitionService clusterElementDefinitionService, AiAgentToolFacade aiAgentToolFacade) {
AiAgentToolFacade aiAgentToolFacade, ClusterElementDefinitionService clusterElementDefinitionService,
ToolCallingManager toolCallingManager) {

this.clusterElementDefinitionService = clusterElementDefinitionService;
this.aiAgentToolFacade = aiAgentToolFacade;
this.clusterElementDefinitionService = clusterElementDefinitionService;
this.toolCallingManager = toolCallingManager;
}

protected ChatClient.ChatClientRequestSpec getChatClientRequestSpec(
Expand Down Expand Up @@ -143,7 +149,7 @@ private static ChatClient.ChatClientRequestSpec createPrompt(
return chatClient.prompt(converter.getFormat());
}

private List<Advisor> getAdvisors(
List<Advisor> getAdvisors(
ClusterElementMap clusterElementMap, Map<String, ComponentConnection> connectionParameters,
ActionContext context) {

Expand All @@ -155,11 +161,25 @@ private List<Advisor> getAdvisors(
.map(clusterElement -> getGuardrailsAdvisor(connectionParameters, clusterElement))
.ifPresent(advisors::add);

// tool call

ToolCallAdvisor.Builder<?> toolCallAdvisorBuilder = ToolCallAdvisor.builder()
.toolCallingManager(toolCallingManager)
.advisorOrder(BaseAdvisor.HIGHEST_PRECEDENCE + 300);

// memory

clusterElementMap.fetchClusterElement(CHAT_MEMORY)
Advisor chatMemoryAdvisor = clusterElementMap.fetchClusterElement(CHAT_MEMORY)
.map(clusterElement -> getChatMemoryAdvisor(connectionParameters, clusterElement))
.ifPresent(advisors::add);
.orElse(null);

if (chatMemoryAdvisor != null) {
advisors.add(chatMemoryAdvisor);

toolCallAdvisorBuilder.disableInternalConversationHistory();
}

advisors.add(toolCallAdvisorBuilder.build());
Comment thread
ivicac marked this conversation as resolved.

// RAG

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,21 +42,25 @@
import org.jspecify.annotations.Nullable;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.ChatClient.ChatClientRequestSpec;
import org.springframework.ai.model.tool.ToolCallingManager;

/**
* @author Ivica Cardic
*/
public class AiAgentChatAction extends AbstractAiAgentChatAction {

public static ChatActionDefinitionWrapper of(
ClusterElementDefinitionService clusterElementDefinitionService, AiAgentToolFacade aiAgentToolFacade) {
AiAgentToolFacade aiAgentToolFacade, ClusterElementDefinitionService clusterElementDefinitionService,
ToolCallingManager toolCallingManager) {

return new AiAgentChatAction(clusterElementDefinitionService, aiAgentToolFacade).build();
return new AiAgentChatAction(aiAgentToolFacade, clusterElementDefinitionService, toolCallingManager).build();
}
Comment thread
ivicac marked this conversation as resolved.

private AiAgentChatAction(ClusterElementDefinitionService clusterElementDefinitionService,
AiAgentToolFacade aiAgentToolFacade) {
super(clusterElementDefinitionService, aiAgentToolFacade);
private AiAgentChatAction(
AiAgentToolFacade aiAgentToolFacade, ClusterElementDefinitionService clusterElementDefinitionService,
ToolCallingManager toolCallingManager) {

super(aiAgentToolFacade, clusterElementDefinitionService, toolCallingManager);
}

private ChatActionDefinitionWrapper build() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
import org.springframework.ai.chat.client.ChatClient.ChatClientRequestSpec;
import org.springframework.ai.chat.messages.AssistantMessage;
import org.springframework.ai.chat.model.Generation;
import org.springframework.ai.model.tool.ToolCallingManager;
import reactor.core.publisher.Flux;

/**
Expand All @@ -53,15 +54,18 @@
public class AiAgentStreamChatAction extends AbstractAiAgentChatAction {

public static ActionDefinition of(
ClusterElementDefinitionService clusterElementDefinitionService, AiAgentToolFacade aiAgentToolFacade) {
AiAgentToolFacade aiAgentToolFacade, ClusterElementDefinitionService clusterElementDefinitionService,
ToolCallingManager toolCallingManager) {

return new AiAgentStreamChatAction(clusterElementDefinitionService, aiAgentToolFacade).build();
return new AiAgentStreamChatAction(aiAgentToolFacade, clusterElementDefinitionService, toolCallingManager)
.build();
}

private AiAgentStreamChatAction(
ClusterElementDefinitionService clusterElementDefinitionService, AiAgentToolFacade aiAgentToolFacade) {
AiAgentToolFacade aiAgentToolFacade, ClusterElementDefinitionService clusterElementDefinitionService,
ToolCallingManager toolCallingManager) {

super(clusterElementDefinitionService, aiAgentToolFacade);
super(aiAgentToolFacade, clusterElementDefinitionService, toolCallingManager);
}

private ChatActionDefinitionWrapper build() {
Expand Down
Loading
Loading