diff --git a/models/spring-ai-anthropic/src/main/java/org/springframework/ai/anthropic/api/AnthropicApi.java b/models/spring-ai-anthropic/src/main/java/org/springframework/ai/anthropic/api/AnthropicApi.java
index eb5a96289..76c969a44 100644
--- a/models/spring-ai-anthropic/src/main/java/org/springframework/ai/anthropic/api/AnthropicApi.java
+++ b/models/spring-ai-anthropic/src/main/java/org/springframework/ai/anthropic/api/AnthropicApi.java
@@ -26,6 +26,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
+import org.springframework.ai.model.ModelDescription;
import org.springframework.ai.model.ModelOptionsUtils;
import org.springframework.ai.retry.RetryUtils;
import org.springframework.http.HttpHeaders;
@@ -116,7 +117,7 @@ public class AnthropicApi {
* "https://docs.anthropic.com/claude/docs/models-overview#model-comparison">model
* comparison for additional details and options.
*/
- public enum ChatModel {
+ public enum ChatModel implements ModelDescription {
// @formatter:off
CLAUDE_3_OPUS("claude-3-opus-20240229"),
@@ -140,6 +141,11 @@ public class AnthropicApi {
return this.value;
}
+ @Override
+ public String getModelName() {
+ return this.value;
+ }
+
}
/**
diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/api/AnthropicChatBedrockApi.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/api/AnthropicChatBedrockApi.java
index 55a2d80af..8c800a382 100644
--- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/api/AnthropicChatBedrockApi.java
+++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/api/AnthropicChatBedrockApi.java
@@ -29,6 +29,7 @@ import software.amazon.awssdk.regions.Region;
import org.springframework.ai.bedrock.anthropic.api.AnthropicChatBedrockApi.AnthropicChatRequest;
import org.springframework.ai.bedrock.anthropic.api.AnthropicChatBedrockApi.AnthropicChatResponse;
import org.springframework.ai.bedrock.api.AbstractBedrockApi;
+import org.springframework.ai.model.ModelDescription;
import org.springframework.util.Assert;
/**
@@ -225,7 +226,7 @@ public class AnthropicChatBedrockApi extends
/**
* Anthropic models version.
*/
- public enum AnthropicChatModel {
+ public enum AnthropicChatModel implements ModelDescription {
/**
* anthropic.claude-instant-v1
*/
@@ -251,6 +252,11 @@ public class AnthropicChatBedrockApi extends
AnthropicChatModel(String value) {
this.id = value;
}
+
+ @Override
+ public String getModelName() {
+ return this.id;
+ }
}
@Override
diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic3/api/Anthropic3ChatBedrockApi.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic3/api/Anthropic3ChatBedrockApi.java
index 0148b4983..8b5b29ed1 100644
--- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic3/api/Anthropic3ChatBedrockApi.java
+++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic3/api/Anthropic3ChatBedrockApi.java
@@ -23,6 +23,7 @@ import org.springframework.ai.bedrock.anthropic3.api.Anthropic3ChatBedrockApi.An
import org.springframework.ai.bedrock.anthropic3.api.Anthropic3ChatBedrockApi.AnthropicChatResponse;
import org.springframework.ai.bedrock.anthropic3.api.Anthropic3ChatBedrockApi.AnthropicChatStreamingResponse;
import org.springframework.ai.bedrock.api.AbstractBedrockApi;
+import org.springframework.ai.model.ModelDescription;
import org.springframework.util.Assert;
import reactor.core.publisher.Flux;
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
@@ -436,7 +437,7 @@ public class Anthropic3ChatBedrockApi extends
/**
* Anthropic models version.
*/
- public enum AnthropicChatModel {
+ public enum AnthropicChatModel implements ModelDescription {
/**
* anthropic.claude-instant-v1
@@ -476,6 +477,11 @@ public class Anthropic3ChatBedrockApi extends
this.id = value;
}
+ @Override
+ public String getModelName() {
+ return this.id;
+ }
+
}
@Override
diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/cohere/api/CohereChatBedrockApi.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/cohere/api/CohereChatBedrockApi.java
index 5b133a997..766271b87 100644
--- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/cohere/api/CohereChatBedrockApi.java
+++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/cohere/api/CohereChatBedrockApi.java
@@ -30,6 +30,7 @@ import software.amazon.awssdk.regions.Region;
import org.springframework.ai.bedrock.api.AbstractBedrockApi;
import org.springframework.ai.bedrock.cohere.api.CohereChatBedrockApi.CohereChatRequest;
import org.springframework.ai.bedrock.cohere.api.CohereChatBedrockApi.CohereChatResponse;
+import org.springframework.ai.model.ModelDescription;
import org.springframework.util.Assert;
/**
@@ -366,7 +367,7 @@ public class CohereChatBedrockApi extends
/**
* Cohere models version.
*/
- public enum CohereChatModel {
+ public enum CohereChatModel implements ModelDescription {
/**
* cohere.command-light-text-v14
@@ -390,6 +391,11 @@ public class CohereChatBedrockApi extends
CohereChatModel(String value) {
this.id = value;
}
+
+ @Override
+ public String getModelName() {
+ return this.id;
+ }
}
@Override
diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/jurassic2/api/Ai21Jurassic2ChatBedrockApi.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/jurassic2/api/Ai21Jurassic2ChatBedrockApi.java
index 0ec58c8bd..fecf70fa4 100644
--- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/jurassic2/api/Ai21Jurassic2ChatBedrockApi.java
+++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/jurassic2/api/Ai21Jurassic2ChatBedrockApi.java
@@ -27,6 +27,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.ai.bedrock.api.AbstractBedrockApi;
import org.springframework.ai.bedrock.jurassic2.api.Ai21Jurassic2ChatBedrockApi.Ai21Jurassic2ChatRequest;
import org.springframework.ai.bedrock.jurassic2.api.Ai21Jurassic2ChatBedrockApi.Ai21Jurassic2ChatResponse;
+import org.springframework.ai.model.ModelDescription;
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
import software.amazon.awssdk.regions.Region;
@@ -371,7 +372,7 @@ public class Ai21Jurassic2ChatBedrockApi extends
/**
* Ai21 Jurassic2 models version.
*/
- public enum Ai21Jurassic2ChatModel {
+ public enum Ai21Jurassic2ChatModel implements ModelDescription {
/**
* ai21.j2-mid-v1
@@ -395,6 +396,11 @@ public class Ai21Jurassic2ChatBedrockApi extends
Ai21Jurassic2ChatModel(String value) {
this.id = value;
}
+
+ @Override
+ public String getModelName() {
+ return this.id;
+ }
}
@Override
diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/llama/api/LlamaChatBedrockApi.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/llama/api/LlamaChatBedrockApi.java
index 25d71aede..16af9735e 100644
--- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/llama/api/LlamaChatBedrockApi.java
+++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/llama/api/LlamaChatBedrockApi.java
@@ -26,6 +26,7 @@ import software.amazon.awssdk.regions.Region;
import org.springframework.ai.bedrock.api.AbstractBedrockApi;
import org.springframework.ai.bedrock.llama.api.LlamaChatBedrockApi.LlamaChatRequest;
import org.springframework.ai.bedrock.llama.api.LlamaChatBedrockApi.LlamaChatResponse;
+import org.springframework.ai.model.ModelDescription;
import java.time.Duration;
@@ -204,7 +205,7 @@ public class LlamaChatBedrockApi extends
/**
* Llama models version.
*/
- public enum LlamaChatModel {
+ public enum LlamaChatModel implements ModelDescription {
/**
* meta.llama2-13b-chat-v1
@@ -238,6 +239,11 @@ public class LlamaChatBedrockApi extends
LlamaChatModel(String value) {
this.id = value;
}
+
+ @Override
+ public String getModelName() {
+ return this.id;
+ }
}
@Override
diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/titan/api/TitanChatBedrockApi.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/titan/api/TitanChatBedrockApi.java
index 78c7cd931..ce1842adf 100644
--- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/titan/api/TitanChatBedrockApi.java
+++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/titan/api/TitanChatBedrockApi.java
@@ -31,6 +31,7 @@ import org.springframework.ai.bedrock.titan.api.TitanChatBedrockApi.TitanChatReq
import org.springframework.ai.bedrock.titan.api.TitanChatBedrockApi.TitanChatResponse;
import org.springframework.ai.bedrock.titan.api.TitanChatBedrockApi.TitanChatResponse.CompletionReason;
import org.springframework.ai.bedrock.titan.api.TitanChatBedrockApi.TitanChatResponseChunk;
+import org.springframework.ai.model.ModelDescription;
/**
* Java client for the Bedrock Titan chat model.
@@ -265,7 +266,7 @@ public class TitanChatBedrockApi extends
/**
* Titan models version.
*/
- public enum TitanChatModel {
+ public enum TitanChatModel implements ModelDescription {
/**
* amazon.titan-text-lite-v1
@@ -294,6 +295,11 @@ public class TitanChatBedrockApi extends
TitanChatModel(String value) {
this.id = value;
}
+
+ @Override
+ public String getModelName() {
+ return this.id;
+ }
}
@Override
diff --git a/models/spring-ai-minimax/src/main/java/org/springframework/ai/minimax/api/MiniMaxApi.java b/models/spring-ai-minimax/src/main/java/org/springframework/ai/minimax/api/MiniMaxApi.java
index 915e13142..e92b1ac2e 100644
--- a/models/spring-ai-minimax/src/main/java/org/springframework/ai/minimax/api/MiniMaxApi.java
+++ b/models/spring-ai-minimax/src/main/java/org/springframework/ai/minimax/api/MiniMaxApi.java
@@ -19,6 +19,8 @@ import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonInclude.Include;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonValue;
+
+import org.springframework.ai.model.ModelDescription;
import org.springframework.ai.model.ModelOptionsUtils;
import org.springframework.ai.retry.RetryUtils;
import org.springframework.boot.context.properties.bind.ConstructorBinding;
@@ -111,7 +113,7 @@ public class MiniMaxApi {
* MiniMax Chat Completion Models:
* MiniMax Model.
*/
- public enum ChatModel {
+ public enum ChatModel implements ModelDescription {
ABAB_6_Chat("abab6-chat"),
ABAB_5_5_Chat("abab5.5-chat"),
ABAB_5_5_S_Chat("abab5.5s-chat");
@@ -125,6 +127,11 @@ public class MiniMaxApi {
public String getValue() {
return value;
}
+
+ @Override
+ public String getModelName() {
+ return this.value;
+ }
}
/**
diff --git a/models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/api/MistralAiApi.java b/models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/api/MistralAiApi.java
index 16f2465c5..b2d5230eb 100644
--- a/models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/api/MistralAiApi.java
+++ b/models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/api/MistralAiApi.java
@@ -27,6 +27,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
+import org.springframework.ai.model.ModelDescription;
import org.springframework.ai.model.ModelOptionsUtils;
import org.springframework.ai.retry.RetryUtils;
import org.springframework.boot.context.properties.bind.ConstructorBinding;
@@ -706,7 +707,7 @@ public class MistralAiApi {
*
LARGE - mistral-large-latest (aka mistral-large-2402)
*
*/
- public enum ChatModel {
+ public enum ChatModel implements ModelDescription {
// @formatter:off
TINY("open-mistral-7b"),
@@ -726,6 +727,11 @@ public class MistralAiApi {
return this.value;
}
+ @Override
+ public String getModelName() {
+ return this.value;
+ }
+
}
/**
diff --git a/models/spring-ai-ollama/src/main/java/org/springframework/ai/ollama/api/OllamaModel.java b/models/spring-ai-ollama/src/main/java/org/springframework/ai/ollama/api/OllamaModel.java
index 73d41053c..449bab647 100644
--- a/models/spring-ai-ollama/src/main/java/org/springframework/ai/ollama/api/OllamaModel.java
+++ b/models/spring-ai-ollama/src/main/java/org/springframework/ai/ollama/api/OllamaModel.java
@@ -15,13 +15,15 @@
*/
package org.springframework.ai.ollama.api;
+import org.springframework.ai.model.ModelDescription;
+
/**
* Helper class for common Ollama models.
*
* @author Siarhei Blashuk
* @since 0.8.1
*/
-public enum OllamaModel {
+public enum OllamaModel implements ModelDescription {
/**
* Llama 2 is a collection of language models ranging from 7B to 70B parameters.
@@ -99,4 +101,9 @@ public enum OllamaModel {
return this.id;
}
+ @Override
+ public String getModelName() {
+ return this.id;
+ }
+
}
diff --git a/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/api/OpenAiApi.java b/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/api/OpenAiApi.java
index cc4256267..5d1a8b12b 100644
--- a/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/api/OpenAiApi.java
+++ b/models/spring-ai-openai/src/main/java/org/springframework/ai/openai/api/OpenAiApi.java
@@ -26,6 +26,7 @@ import com.fasterxml.jackson.annotation.JsonProperty;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
+import org.springframework.ai.model.ModelDescription;
import org.springframework.ai.model.ModelOptionsUtils;
import org.springframework.ai.retry.RetryUtils;
import org.springframework.boot.context.properties.bind.ConstructorBinding;
@@ -113,7 +114,7 @@ public class OpenAiApi {
* - GPT-4 and GPT-4 Turbo
* - GPT-3.5 Turbo.
*/
- public enum ChatModel {
+ public enum ChatModel implements ModelDescription {
/**
* Multimodal flagship model that’s cheaper and faster than GPT-4 Turbo.
* Currently points to gpt-4o-2024-05-13.
@@ -199,6 +200,11 @@ public class OpenAiApi {
public String getValue() {
return value;
}
+
+ @Override
+ public String getModelName() {
+ return this.value;
+ }
}
/**
diff --git a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatClientIT.java b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatClientIT.java
index 758d27f75..a0d8b8a70 100644
--- a/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatClientIT.java
+++ b/models/spring-ai-openai/src/test/java/org/springframework/ai/openai/chat/OpenAiChatClientIT.java
@@ -33,9 +33,8 @@ import reactor.core.publisher.Flux;
import org.springframework.ai.chat.ChatClient;
import org.springframework.ai.chat.ChatResponse;
-import org.springframework.ai.chat.Generation;
-import org.springframework.ai.chat.messages.AssistantMessage;
import org.springframework.ai.converter.BeanOutputConverter;
+import org.springframework.ai.model.ModelOptionsUtils;
import org.springframework.ai.openai.OpenAiChatOptions;
import org.springframework.ai.openai.OpenAiTestConfiguration;
import org.springframework.ai.openai.api.OpenAiApi;
@@ -62,14 +61,17 @@ class OpenAiChatClientIT extends AbstractIT {
@Test
void roleTest() {
+ // @formatter:off
ChatResponse response = ChatClient.builder(modelCaller).build().prompt()
.system(s -> s.text(systemTextResource)
.param("name", "Bob")
.param("voice", "pirate"))
.user("Tell me about 3 famous pirates from the Golden Age of Piracy and what they did")
- .call().chatResponse();
+ .call()
+ .chatResponse();
+ // @formatter:on
- System.out.println(response);
+ logger.info("" + response);
// UserMessage userMessage = new UserMessage(
// "Tell me about 3 famous pirates from the Golden Age of Piracy and what they
// did.");
@@ -88,10 +90,13 @@ class OpenAiChatClientIT extends AbstractIT {
void listOutputConverter() {
// TODO: there is a problem here.
+ // @formatter:off
Collection list = ChatClient.builder(modelCaller).build().prompt()
.user(u -> u.text("List five {subject}")
.param("subject", "ice cream flavors"))
- .call().list(String.class);
+ .call()
+ .list(String.class);
+ // @formatter:on
// DefaultConversionService conversionService = new DefaultConversionService();
// ListOutputConverter outputConverter = new
@@ -115,12 +120,13 @@ class OpenAiChatClientIT extends AbstractIT {
@Test
void mapOutputConverter() {
-
+ // @formatter:off
Map result = ChatClient.builder(modelCaller).build().prompt()
.user(u -> u.text("Provide me a List of {subject}")
.param("subject", "an array of numbers from 1 to 9 under they key name 'numbers'"))
.call().single(new ParameterizedTypeReference