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 1745991d8..a5e18160f 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 @@ -14,117 +14,85 @@ import java.net.URL; import java.util.*; import java.util.function.Consumer; +public interface ChatClient { + static ChatClientBuilder builder(ChatConnector connector) { + return new ChatClientBuilder(connector); + } -/** - * todo follow WebClient -> DefaultWebClient - * todo make sure ChatConnector also supports call(Prompt) and then mark as deprecated - * - * @author Mark Pollack - * @author Christian Tzolov - * @author Josh Long - */ + ChatClientRequest build(); -public class ChatClient { + ChatResponse call(Prompt prompt); - private final ChatConnector connector; + ChatClientRequest user(Consumer consumer); - private final String userPrompt, systemPrompt; - - private final List functions; - - private final List media; - - public ChatClient(ChatConnector connector, String defaultSystemPrompt, String defaultUserPrompt, - List defaultFunctions, List defaultMedia) { - this.connector = connector; - this.userPrompt = defaultUserPrompt; - this.systemPrompt = defaultSystemPrompt; - this.functions = defaultFunctions; - this.media = defaultMedia; - - } - - public ChatClientRequest build() { - return new ChatClientRequest(this.userPrompt, this.systemPrompt, this.functions, this.media); - } - - public ChatResponse call(Prompt prompt) { - return null; - } - - public static class UserSpec { + public static class UserSpec { - public UserSpec media(List media) { - return this; - } + public UserSpec media(List media) { + return this; + } - public UserSpec media(URL url, MimeType mimeType) { - return this; - } + public UserSpec media(URL url, MimeType mimeType) { + return this; + } - public UserSpec media(Resource resource, MimeType type) { - return this; - } + public UserSpec media(Resource resource, MimeType type) { + return this; + } - public UserSpec media(Media... m) { - return this; - } + public UserSpec media(Media... m) { + return this; + } - public UserSpec params(Map p) { - return this; - } + public UserSpec params(Map p) { + return this; + } - public UserSpec param(String k, String v) { - return this; - } - } + public UserSpec param(String k, String v) { + return this; + } + } + public static class ChatClientRequest { - public ChatClientRequest user(Consumer consumer) { - return null; - } + private String userPrompt = ""; - public static class ChatClientRequest { + private String systemPrompt = ""; - private String userPrompt = ""; + private final List media = new ArrayList<>(); - private String systemPrompt = ""; + private final List functions = new ArrayList<>(); - private final List media = new ArrayList<>(); + private final Map userPromptParams = new HashMap<>(); - private final List functions = new ArrayList<>(); + private final Map systemPromptParams = new HashMap<>(); - private final Map userPromptParams = new HashMap<>(); + List userMedia() { + return this.media; + } - private final Map systemPromptParams = new HashMap<>(); + String systemText() { + return this.systemPrompt; + } - List userMedia() { - return this.media; - } + String userText() { + return this.userPrompt; + } - String systemText() { - return this.systemPrompt; - } + List functions() { + return this.functions; + } - String userText() { - return this.userPrompt; - } + public ChatClientRequest(String userPrompt, String systemPrompt, List functions, List media) { + this.userPrompt = userPrompt; + this.systemPrompt = systemPrompt; + this.functions.addAll(functions); + this.media.addAll(media); + } - List functions() { - return this.functions; - } - - public ChatClientRequest(String userPrompt, String systemPrompt, List functions, List media) { - this.userPrompt = userPrompt; - this.systemPrompt = systemPrompt; - this.functions.addAll(functions); - this.media.addAll(media); - } - - public ChatClientRequest messages(Message... messages) { - return null; - } + public ChatClientRequest messages(Message... messages) { + return null; + } // // public ChatClientRequest userParam(String key, String value) { // this.userPromptParams.put(key, value); @@ -136,9 +104,9 @@ public class ChatClient { // return this; // } - public ChatClientRequest options(T options) { - return this; - } + public ChatClientRequest options(T options) { + return this; + } // // public ChatClientRequest systemParams(Map systemPromptParams) { // this.systemPromptParams.putAll(systemPromptParams); @@ -192,89 +160,84 @@ public class ChatClient { // return this; // } - public ChatClientRequest functions(String... functions) { - this.functions.addAll(Arrays.asList(functions)); - return this; - } + public ChatClientRequest functions(String... functions) { + this.functions.addAll(Arrays.asList(functions)); + return this; + } - public static class ChatResponseSpec { + public static class ChatResponseSpec { - public T single(ParameterizedTypeReference t) { - return null; - } + public T single(ParameterizedTypeReference t) { + return null; + } - public T single(Class clzz) { - return null; - } + public T single(Class clzz) { + return null; + } - public ChatResponse chatResponse() { - return null; - } + public ChatResponse chatResponse() { + return null; + } - public Flux stream(Class t) { - return null; - } + public Flux stream(Class t) { + return null; + } - public Flux stream(ParameterizedTypeReference t) { - return Flux.empty(); - } + public Flux stream(ParameterizedTypeReference t) { + return Flux.empty(); + } - public Collection list(Class clzz) { - return null; - } + public Collection list(Class clzz) { + return null; + } - public Collection list(ParameterizedTypeReference> ptr) { - return List.of(); - } + public Collection list(ParameterizedTypeReference> ptr) { + return List.of(); + } - } + } - public ChatResponseSpec chat() { - return null; - } + public ChatResponseSpec chat() { + return null; + } - } + } - public static class ChatClientBuilder { + public static class ChatClientBuilder { - private final ChatConnector connector; + private final ChatConnector connector; - private final List defaultMedia = new ArrayList<>(); + private final List defaultMedia = new ArrayList<>(); - private final List defaultFunctions = new ArrayList<>(); + private final List defaultFunctions = new ArrayList<>(); - private String defaultSystemPrompt; + private String defaultSystemPrompt; - private String defaultUserPrompt; + private String defaultUserPrompt; - ChatClientBuilder(ChatConnector connector) { - this.connector = connector; - } + ChatClientBuilder(ChatConnector connector) { + this.connector = connector; + } - public ChatClient build() { - return new ChatClient(this.connector, this.defaultSystemPrompt, this.defaultUserPrompt, - this.defaultFunctions, this.defaultMedia); - } + public ChatClient build() { + return new DefaultChatClient(this.connector, this.defaultSystemPrompt, this.defaultUserPrompt, + this.defaultFunctions, this.defaultMedia); + } - public ChatClientBuilder defaultSystem(String systemPrompt) { - return this; - } + public ChatClientBuilder defaultSystem(String systemPrompt) { + return this; + } - public ChatClientBuilder defaultFunctions(String... functionNames) { - return this; - } + public ChatClientBuilder defaultFunctions(String... functionNames) { + return this; + } - public ChatClientBuilder defaultUserPrompt(String userPrompt) { - return this; - } - - } - - public static ChatClientBuilder builder(ChatConnector connector) { - return new ChatClientBuilder(connector); - } + public ChatClientBuilder defaultUserPrompt(String userPrompt) { + return this; + } + } } 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 new file mode 100644 index 000000000..3544ea120 --- /dev/null +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/DefaultChatClient.java @@ -0,0 +1,56 @@ +package org.springframework.ai.chat; + +import org.springframework.ai.chat.connector.ChatConnector; +import org.springframework.ai.chat.messages.Media; +import org.springframework.ai.chat.prompt.Prompt; + +import java.util.*; +import java.util.function.Consumer; + + +/** + * todo follow WebClient -> DefaultWebClient + * todo make sure ChatConnector also supports call(Prompt) and then mark as deprecated + * + * @author Mark Pollack + * @author Christian Tzolov + * @author Josh Long + */ + +public class DefaultChatClient implements ChatClient { + + private final ChatConnector connector; + + private final String userPrompt, systemPrompt; + + private final List functions; + + private final List media; + + public DefaultChatClient(ChatConnector connector, String defaultSystemPrompt, String defaultUserPrompt, + List defaultFunctions, List defaultMedia) { + this.connector = connector; + this.userPrompt = defaultUserPrompt; + this.systemPrompt = defaultSystemPrompt; + this.functions = defaultFunctions; + this.media = defaultMedia; + + } + + @Override + public ChatClientRequest build() { + return new ChatClientRequest(this.userPrompt, this.systemPrompt, this.functions, this.media); + } + + @Override + public ChatResponse call(Prompt prompt) { + return null; + } + + + @Override + public ChatClientRequest user(Consumer consumer) { + return null; + } + +}