diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/ChatClient.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/ChatClient.java index 07925f3ed..ae30e8490 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/ChatClient.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/ChatClient.java @@ -175,7 +175,7 @@ public interface ChatClient { private final List media = new ArrayList<>(); - private final Set functionNames = new HashSet<>(); + private final List functionNames = new ArrayList<>(); private final List functionCallbacks = new ArrayList<>(); @@ -185,6 +185,12 @@ public interface ChatClient { private final Map systemParams = new HashMap<>(); + /* copy constructor */ + ChatClientRequest(ModelCall connector, ChatClientRequest ccr) { + this(connector, ccr.userText, ccr.systemText, ccr.functionCallbacks, ccr.functionNames, ccr.media, + ccr.chatOptions); + } + public ChatClientRequest(ModelCall connector, String userText, String systemText, List functionCallbacks, List functionNames, List media, ChatOptions chatOptions) { @@ -299,7 +305,7 @@ public interface ChatClient { } if (this.request.chatOptions instanceof FunctionCallingOptionsBuilder.PortableFunctionCallingOptions functionCallingOptions) { if (!this.request.functionNames.isEmpty()) { - functionCallingOptions.setFunctions(this.request.functionNames); + functionCallingOptions.setFunctions(new HashSet<>(this.request.functionNames)); } if (!this.request.functionCallbacks.isEmpty()) { functionCallingOptions.setFunctionCallbacks(this.request.functionCallbacks); diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/DefaultChatClient.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/DefaultChatClient.java index a09eb1436..63b6b7e1b 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/DefaultChatClient.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/DefaultChatClient.java @@ -21,7 +21,7 @@ class DefaultChatClient implements ChatClient { @Override public ChatClientRequest call() { - return this.defaultChatClientRequest; + return new ChatClientRequest(this.modelCall, this.defaultChatClientRequest); } /**