diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/BedrockAnthropicChatModel.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/BedrockAnthropicChatModel.java index f5f1f91be0c..ef93a2bdac6 100644 --- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/BedrockAnthropicChatModel.java +++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic/BedrockAnthropicChatModel.java @@ -24,6 +24,7 @@ import org.springframework.ai.bedrock.anthropic.api.AnthropicChatBedrockApi; import org.springframework.ai.bedrock.anthropic.api.AnthropicChatBedrockApi.AnthropicChatRequest; import org.springframework.ai.bedrock.anthropic.api.AnthropicChatBedrockApi.AnthropicChatResponse; +import org.springframework.ai.chat.messages.AssistantMessage; import org.springframework.ai.chat.metadata.ChatGenerationMetadata; import org.springframework.ai.chat.model.ChatModel; import org.springframework.ai.chat.model.ChatResponse; @@ -68,7 +69,7 @@ public ChatResponse call(Prompt prompt) { AnthropicChatResponse response = this.anthropicChatApi.chatCompletion(request); - return new ChatResponse(List.of(new Generation(response.completion()))); + return new ChatResponse(List.of(new Generation(new AssistantMessage(response.completion())))); } @Override @@ -80,12 +81,13 @@ public Flux stream(Prompt prompt) { return fluxResponse.map(response -> { String stopReason = response.stopReason() != null ? response.stopReason() : null; - var generation = new Generation(response.completion()); + ChatGenerationMetadata chatGenerationMetadata = null; if (response.amazonBedrockInvocationMetrics() != null) { - generation = generation.withGenerationMetadata( - ChatGenerationMetadata.from(stopReason, response.amazonBedrockInvocationMetrics())); + chatGenerationMetadata = ChatGenerationMetadata.from(stopReason, + response.amazonBedrockInvocationMetrics()); } - return new ChatResponse(List.of(generation)); + return new ChatResponse( + List.of(new Generation(new AssistantMessage(response.completion()), chatGenerationMetadata))); }); } diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatModel.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatModel.java index b6f32ab2e05..db122878569 100644 --- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatModel.java +++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/anthropic3/BedrockAnthropic3ChatModel.java @@ -114,16 +114,13 @@ public Flux stream(Prompt prompt) { inputTokens.set(response.message().usage().inputTokens()); } String content = response.type() == StreamingType.CONTENT_BLOCK_DELTA ? response.delta().text() : ""; - - var generation = new Generation(content); - + ChatGenerationMetadata chatGenerationMetadata = null; if (response.type() == StreamingType.MESSAGE_DELTA) { - generation = generation.withGenerationMetadata(ChatGenerationMetadata - .from(response.delta().stopReason(), new Anthropic3ChatBedrockApi.AnthropicUsage(inputTokens.get(), - response.usage().outputTokens()))); + chatGenerationMetadata = ChatGenerationMetadata.from(response.delta().stopReason(), + new Anthropic3ChatBedrockApi.AnthropicUsage(inputTokens.get(), + response.usage().outputTokens())); } - - return new ChatResponse(List.of(generation)); + return new ChatResponse(List.of(new Generation(new AssistantMessage(content), chatGenerationMetadata))); }); } diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/cohere/BedrockCohereChatModel.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/cohere/BedrockCohereChatModel.java index f4d4c5e61e7..77856ae816c 100644 --- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/cohere/BedrockCohereChatModel.java +++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/cohere/BedrockCohereChatModel.java @@ -25,6 +25,7 @@ import org.springframework.ai.bedrock.cohere.api.CohereChatBedrockApi; import org.springframework.ai.bedrock.cohere.api.CohereChatBedrockApi.CohereChatRequest; import org.springframework.ai.bedrock.cohere.api.CohereChatBedrockApi.CohereChatResponse; +import org.springframework.ai.chat.messages.AssistantMessage; import org.springframework.ai.chat.metadata.ChatGenerationMetadata; import org.springframework.ai.chat.metadata.Usage; import org.springframework.ai.chat.model.ChatModel; @@ -61,7 +62,10 @@ public BedrockCohereChatModel(CohereChatBedrockApi chatApi, BedrockCohereChatOpt @Override public ChatResponse call(Prompt prompt) { CohereChatResponse response = this.chatApi.chatCompletion(this.createRequest(prompt, false)); - List generations = response.generations().stream().map(g -> new Generation(g.text())).toList(); + List generations = response.generations() + .stream() + .map(g -> new Generation(new AssistantMessage(g.text()))) + .toList(); return new ChatResponse(generations); } @@ -73,9 +77,9 @@ public Flux stream(Prompt prompt) { String finishReason = g.finishReason().name(); Usage usage = BedrockUsage.from(g.amazonBedrockInvocationMetrics()); return new ChatResponse(List - .of(new Generation("").withGenerationMetadata(ChatGenerationMetadata.from(finishReason, usage)))); + .of(new Generation(new AssistantMessage(""), ChatGenerationMetadata.from(finishReason, usage)))); } - return new ChatResponse(List.of(new Generation(g.text()))); + return new ChatResponse(List.of(new Generation(new AssistantMessage(g.text())))); }); } diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/jurassic2/BedrockAi21Jurassic2ChatModel.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/jurassic2/BedrockAi21Jurassic2ChatModel.java index ab463b9116f..d18492b5380 100644 --- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/jurassic2/BedrockAi21Jurassic2ChatModel.java +++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/jurassic2/BedrockAi21Jurassic2ChatModel.java @@ -19,6 +19,7 @@ import org.springframework.ai.bedrock.MessageToPromptConverter; import org.springframework.ai.bedrock.jurassic2.api.Ai21Jurassic2ChatBedrockApi; import org.springframework.ai.bedrock.jurassic2.api.Ai21Jurassic2ChatBedrockApi.Ai21Jurassic2ChatRequest; +import org.springframework.ai.chat.messages.AssistantMessage; import org.springframework.ai.chat.metadata.ChatGenerationMetadata; import org.springframework.ai.chat.model.ChatModel; import org.springframework.ai.chat.model.ChatResponse; @@ -68,8 +69,8 @@ public ChatResponse call(Prompt prompt) { return new ChatResponse(response.completions() .stream() - .map(completion -> new Generation(completion.data().text()) - .withGenerationMetadata(ChatGenerationMetadata.from(completion.finishReason().reason(), null))) + .map(completion -> new Generation(new AssistantMessage(completion.data().text()), + ChatGenerationMetadata.from(completion.finishReason().reason(), null))) .toList()); } diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/llama/BedrockLlamaChatModel.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/llama/BedrockLlamaChatModel.java index 1944b85ab25..b158a7a3fc1 100644 --- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/llama/BedrockLlamaChatModel.java +++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/llama/BedrockLlamaChatModel.java @@ -24,6 +24,7 @@ import org.springframework.ai.bedrock.llama.api.LlamaChatBedrockApi; import org.springframework.ai.bedrock.llama.api.LlamaChatBedrockApi.LlamaChatRequest; import org.springframework.ai.bedrock.llama.api.LlamaChatBedrockApi.LlamaChatResponse; +import org.springframework.ai.chat.messages.AssistantMessage; import org.springframework.ai.chat.metadata.ChatGenerationMetadata; import org.springframework.ai.chat.metadata.Usage; import org.springframework.ai.chat.model.ChatModel; @@ -68,7 +69,7 @@ public ChatResponse call(Prompt prompt) { LlamaChatResponse response = this.chatApi.chatCompletion(request); - return new ChatResponse(List.of(new Generation(response.generation()).withGenerationMetadata( + return new ChatResponse(List.of(new Generation(new AssistantMessage(response.generation()), ChatGenerationMetadata.from(response.stopReason().name(), extractUsage(response))))); } @@ -81,8 +82,8 @@ public Flux stream(Prompt prompt) { return fluxResponse.map(response -> { String stopReason = response.stopReason() != null ? response.stopReason().name() : null; - return new ChatResponse(List.of(new Generation(response.generation()) - .withGenerationMetadata(ChatGenerationMetadata.from(stopReason, extractUsage(response))))); + return new ChatResponse(List.of(new Generation(new AssistantMessage(response.generation()), + ChatGenerationMetadata.from(stopReason, extractUsage(response))))); }); } diff --git a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/titan/BedrockTitanChatModel.java b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/titan/BedrockTitanChatModel.java index 43e20163939..ce220a4b28a 100644 --- a/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/titan/BedrockTitanChatModel.java +++ b/models/spring-ai-bedrock/src/main/java/org/springframework/ai/bedrock/titan/BedrockTitanChatModel.java @@ -25,6 +25,7 @@ import org.springframework.ai.bedrock.titan.api.TitanChatBedrockApi.TitanChatRequest; import org.springframework.ai.bedrock.titan.api.TitanChatBedrockApi.TitanChatResponse; import org.springframework.ai.bedrock.titan.api.TitanChatBedrockApi.TitanChatResponseChunk; +import org.springframework.ai.chat.messages.AssistantMessage; import org.springframework.ai.chat.metadata.ChatGenerationMetadata; import org.springframework.ai.chat.metadata.Usage; import org.springframework.ai.chat.model.ChatModel; @@ -62,7 +63,7 @@ public ChatResponse call(Prompt prompt) { TitanChatResponse response = this.chatApi.chatCompletion(this.createRequest(prompt)); List generations = response.results() .stream() - .map(result -> new Generation(result.outputText())) + .map(result -> new Generation(new AssistantMessage(result.outputText()))) .toList(); return new ChatResponse(generations); @@ -71,21 +72,18 @@ public ChatResponse call(Prompt prompt) { @Override public Flux stream(Prompt prompt) { return this.chatApi.chatCompletionStream(this.createRequest(prompt)).map(chunk -> { - - Generation generation = new Generation(chunk.outputText()); - + ChatGenerationMetadata chatGenerationMetadata = null; if (chunk.amazonBedrockInvocationMetrics() != null) { String completionReason = chunk.completionReason().name(); - generation = generation.withGenerationMetadata( - ChatGenerationMetadata.from(completionReason, chunk.amazonBedrockInvocationMetrics())); + chatGenerationMetadata = ChatGenerationMetadata.from(completionReason, + chunk.amazonBedrockInvocationMetrics()); } else if (chunk.inputTextTokenCount() != null && chunk.totalOutputTextTokenCount() != null) { String completionReason = chunk.completionReason().name(); - generation = generation - .withGenerationMetadata(ChatGenerationMetadata.from(completionReason, extractUsage(chunk))); - + chatGenerationMetadata = ChatGenerationMetadata.from(completionReason, extractUsage(chunk)); } - return new ChatResponse(List.of(generation)); + return new ChatResponse( + List.of(new Generation(new AssistantMessage(chunk.outputText()), chatGenerationMetadata))); }); } diff --git a/models/spring-ai-huggingface/src/main/java/org/springframework/ai/huggingface/HuggingfaceChatModel.java b/models/spring-ai-huggingface/src/main/java/org/springframework/ai/huggingface/HuggingfaceChatModel.java index affd1a32923..161b92d6d2f 100644 --- a/models/spring-ai-huggingface/src/main/java/org/springframework/ai/huggingface/HuggingfaceChatModel.java +++ b/models/spring-ai-huggingface/src/main/java/org/springframework/ai/huggingface/HuggingfaceChatModel.java @@ -23,6 +23,8 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.ai.chat.messages.AssistantMessage; +import org.springframework.ai.chat.metadata.ChatGenerationMetadata; import org.springframework.ai.chat.model.ChatModel; import org.springframework.ai.chat.model.ChatResponse; import org.springframework.ai.chat.model.Generation; @@ -103,7 +105,7 @@ public ChatResponse call(Prompt prompt) { new TypeReference>() { }); - Generation generation = new Generation(generatedText, detailsMap); + Generation generation = new Generation(new AssistantMessage(generatedText, detailsMap)); generations.add(generation); return new ChatResponse(generations); } 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 954803fde62..3ab53059c85 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 @@ -224,10 +224,7 @@ public enum ChatModel implements ChatModelDescription { ABAB_6_5_T_Chat("abab6.5t-chat"), ABAB_6_5_G_Chat("abab6.5g-chat"), ABAB_5_5_Chat("abab5.5-chat"), - ABAB_5_5_S_Chat("abab5.5s-chat"), - - @Deprecated(since = "1.0.0-M2", forRemoval = true) // Replaced by ABAB_6_5_S_Chat - ABAB_6_Chat("abab6-chat"); + ABAB_5_5_S_Chat("abab5.5s-chat"); public final String value; @@ -269,11 +266,6 @@ public enum ChatCompletionFinishReason { */ @JsonProperty("tool_calls") TOOL_CALLS, - /** - * (deprecated) The model called a function. - */ - @JsonProperty("function_call") - FUNCTION_CALL, /** * Only for compatibility with Mistral AI API. */ diff --git a/models/spring-ai-moonshot/src/main/java/org/springframework/ai/moonshot/api/MoonshotApi.java b/models/spring-ai-moonshot/src/main/java/org/springframework/ai/moonshot/api/MoonshotApi.java index e1a67a46a0e..73a8acaa295 100644 --- a/models/spring-ai-moonshot/src/main/java/org/springframework/ai/moonshot/api/MoonshotApi.java +++ b/models/spring-ai-moonshot/src/main/java/org/springframework/ai/moonshot/api/MoonshotApi.java @@ -195,11 +195,6 @@ public enum ChatCompletionFinishReason { */ @JsonProperty("tool_calls") TOOL_CALLS, - /** - * (deprecated) The model called a function. - */ - @JsonProperty("function_call") - FUNCTION_CALL, /** * Only for compatibility with Mistral AI API. */ diff --git a/models/spring-ai-ollama/src/main/java/org/springframework/ai/ollama/api/OllamaApi.java b/models/spring-ai-ollama/src/main/java/org/springframework/ai/ollama/api/OllamaApi.java index 02975bc31d8..7302fa5c53a 100644 --- a/models/spring-ai-ollama/src/main/java/org/springframework/ai/ollama/api/OllamaApi.java +++ b/models/spring-ai-ollama/src/main/java/org/springframework/ai/ollama/api/OllamaApi.java @@ -104,54 +104,6 @@ public OllamaApi(String baseUrl, RestClient.Builder restClientBuilder, WebClient this.webClient = webClientBuilder.baseUrl(baseUrl).defaultHeaders(defaultHeaders).build(); } - /** - * Generate a completion for the given prompt. - * @param completionRequest Completion request. - * @return Completion response. - * @deprecated Use {@link #chat(ChatRequest)} instead. - */ - @Deprecated(since = "1.0.0-M2", forRemoval = true) - public GenerateResponse generate(GenerateRequest completionRequest) { - Assert.notNull(completionRequest, REQUEST_BODY_NULL_ERROR); - Assert.isTrue(!completionRequest.stream(), "Stream mode must be disabled."); - - return this.restClient.post() - .uri("/api/generate") - .body(completionRequest) - .retrieve() - .onStatus(this.responseErrorHandler) - .body(GenerateResponse.class); - } - - // -------------------------------------------------------------------------- - // Generate & Streaming Generate - // -------------------------------------------------------------------------- - - /** - * Generate a streaming completion for the given prompt. - * @param completionRequest Completion request. The request must set the stream - * property to true. - * @return Completion response as a {@link Flux} stream. - * @deprecated Use {@link #streamingChat(ChatRequest)} instead. - */ - @Deprecated(since = "1.0.0-M2", forRemoval = true) - public Flux generateStreaming(GenerateRequest completionRequest) { - Assert.notNull(completionRequest, REQUEST_BODY_NULL_ERROR); - Assert.isTrue(completionRequest.stream(), "Request must set the stream property to true."); - - return this.webClient.post() - .uri("/api/generate") - .body(Mono.just(completionRequest), GenerateRequest.class) - .retrieve() - .bodyToFlux(GenerateResponse.class) - .handle((data, sink) -> { - if (logger.isTraceEnabled()) { - logger.trace(data); - } - sink.next(data); - }); - } - /** * Generate the next message in a chat with a provided model. * This is a streaming endpoint (controlled by the 'stream' request property), so @@ -183,7 +135,7 @@ public Flux streamingChat(ChatRequest chatRequest) { return this.webClient.post() .uri("/api/chat") - .body(Mono.just(chatRequest), GenerateRequest.class) + .body(Mono.just(chatRequest), ChatRequest.class) .retrieve() .bodyToFlux(ChatResponse.class) .handle((data, sink) -> { @@ -210,28 +162,6 @@ public EmbeddingsResponse embed(EmbeddingsRequest embeddingsRequest) { .body(EmbeddingsResponse.class); } - // -------------------------------------------------------------------------- - // Chat & Streaming Chat - // -------------------------------------------------------------------------- - - /** - * Generate embeddings from a model. - * @param embeddingRequest Embedding request. - * @return Embedding response. - * @deprecated Use {@link #embed(EmbeddingsRequest)} instead. - */ - @Deprecated(since = "1.0.0-M2", forRemoval = true) - public EmbeddingResponse embeddings(EmbeddingRequest embeddingRequest) { - Assert.notNull(embeddingRequest, REQUEST_BODY_NULL_ERROR); - - return this.restClient.post() - .uri("/api/embeddings") - .body(embeddingRequest) - .retrieve() - .onStatus(this.responseErrorHandler) - .body(EmbeddingResponse.class); - } - /** * List models that are available locally on the machine where Ollama is running. */ @@ -321,192 +251,6 @@ public void handleError(ClientHttpResponse response) throws IOException { } - /** - * The request object sent to the /generate endpoint. - * - * @param model (required) The model to use for completion. - * @param prompt (required) The prompt(s) to generate completions for. - * @param format (optional) The format to return the response in. Currently, the only - * accepted value is "json". - * @param options (optional) additional model parameters listed in the documentation - * for the Model file such as temperature. - * @param system (optional) system prompt to (overrides what is defined in the Model file). - * @param template (optional) the full prompt or prompt template (overrides what is - * defined in the Model file). - * @param context the context parameter returned from a previous request to /generate, - * this can be used to keep a short conversational memory. - * @param stream (optional) if false the response will be returned as a single - * response object, rather than a stream of objects. - * @param raw (optional) if true no formatting will be applied to the prompt and no - * context will be returned. You may choose to use the raw parameter if you are - * specifying a full templated prompt in your request to the API, and are managing - * history yourself. - * @param images (optional) a list of base64-encoded images (for multimodal models such as llava). - * @param keepAlive (optional) controls how long the model will stay loaded into memory following the request (default: 5m). - */ - @Deprecated(since = "1.0.0-M2", forRemoval = true) - @JsonInclude(Include.NON_NULL) - public record GenerateRequest( - @JsonProperty("model") String model, - @JsonProperty("prompt") String prompt, - @JsonProperty("format") String format, - @JsonProperty("options") Map options, - @JsonProperty("system") String system, - @JsonProperty("template") String template, - @JsonProperty("context") List context, - @JsonProperty("stream") Boolean stream, - @JsonProperty("raw") Boolean raw, - @JsonProperty("images") List images, - @JsonProperty("keep_alive") String keepAlive) { - - /** - * Shortcut constructor to create a CompletionRequest without options. - * @param model The model used for completion. - * @param prompt The prompt(s) to generate completions for. - * @param stream Whether to stream the response. - */ - public GenerateRequest(String model, String prompt, Boolean stream) { - this(model, prompt, null, null, null, null, null, stream, null, null, null); - } - - /** - * Shortcut constructor to create a CompletionRequest without options. - * @param model The model used for completion. - * @param prompt The prompt(s) to generate completions for. - * @param enableJsonFormat Whether to return the response in json format. - * @param stream Whether to stream the response. - */ - public GenerateRequest(String model, String prompt, boolean enableJsonFormat, Boolean stream) { - this(model, prompt, (enableJsonFormat) ? "json" : null, null, null, null, null, stream, null, null, null); - } - - /** - * Create a CompletionRequest builder. - * @param prompt The prompt(s) to generate completions for. - */ - public static Builder builder(String prompt) { - return new Builder(prompt); - } - - public static class Builder { - - private final String prompt; - - private String model; - - private String format; - private Map options; - private String system; - private String template; - private List context; - private Boolean stream; - private Boolean raw; - private List images; - private String keepAlive; - - public Builder(String prompt) { - this.prompt = prompt; - } - - public Builder withModel(String model) { - this.model = model; - return this; - } - - public Builder withFormat(String format) { - this.format = format; - return this; - } - - public Builder withOptions(Map options) { - this.options = options; - return this; - } - - public Builder withOptions(OllamaOptions options) { - this.options = options.toMap(); - return this; - } - - public Builder withSystem(String system) { - this.system = system; - return this; - } - - public Builder withTemplate(String template) { - this.template = template; - return this; - } - - public Builder withContext(List context) { - this.context = context; - return this; - } - - public Builder withStream(Boolean stream) { - this.stream = stream; - return this; - } - - public Builder withRaw(Boolean raw) { - this.raw = raw; - return this; - } - - public Builder withImages(List images) { - this.images = images; - return this; - } - - public Builder withKeepAlive(String keepAlive) { - this.keepAlive = keepAlive; - return this; - } - - public GenerateRequest build() { - return new GenerateRequest(this.model, this.prompt, this.format, this.options, this.system, this.template, this.context, this.stream, this.raw, this.images, this.keepAlive); - } - - } - } - - /** - * The response object returned from the /generate endpoint. To calculate how fast the - * response is generated in tokens per second (token/s), divide eval_count / - * eval_duration. - * - * @param model The model used for completion. - * @param createdAt When the request was made. - * @param response The completion response. Empty if the response was streamed, if not - * streamed, this will contain the full response - * @param done Whether this is the final response. If true, this response may be - * followed by another response with the following, additional fields: context, - * prompt_eval_count, prompt_eval_duration, eval_count, eval_duration. - * @param context Encoding of the conversation used in this response, this can be sent - * in the next request to keep a conversational memory. - * @param totalDuration Time spent generating the response. - * @param loadDuration Time spent loading the model. - * @param promptEvalCount Number of times the prompt was evaluated. - * @param promptEvalDuration Time spent evaluating the prompt. - * @param evalCount Number of tokens in the response. - * @param evalDuration Time spent generating the response. - */ - @Deprecated(since = "1.0.0-M2", forRemoval = true) - @JsonInclude(Include.NON_NULL) - public record GenerateResponse( - @JsonProperty("model") String model, - @JsonProperty("created_at") Instant createdAt, - @JsonProperty("response") String response, - @JsonProperty("done") Boolean done, - @JsonProperty("context") List context, - @JsonProperty("total_duration") Duration totalDuration, - @JsonProperty("load_duration") Duration loadDuration, - @JsonProperty("prompt_eval_count") Integer promptEvalCount, - @JsonProperty("prompt_eval_duration") Duration promptEvalDuration, - @JsonProperty("eval_count") Integer evalCount, - @JsonProperty("eval_duration") Duration evalDuration) { - } - /** * Chat message object. * @@ -830,45 +574,6 @@ public EmbeddingsRequest(String model, String input) { } } - /** - * Generate embeddings from a model. - * - * @param model The name of model to generate embeddings from. - * @param prompt The text generate embeddings for - * @param keepAlive Controls how long the model will stay loaded into memory following the request (default: 5m). - * @param options Additional model parameters listed in the documentation for the - * @deprecated Use {@link EmbeddingsRequest} instead. - */ - @Deprecated(since = "1.0.0-M2", forRemoval = true) - @JsonInclude(Include.NON_NULL) - public record EmbeddingRequest( - @JsonProperty("model") String model, - @JsonProperty("prompt") String prompt, - @JsonProperty("keep_alive") Duration keepAlive, - @JsonProperty("options") Map options) { - - /** - * Shortcut constructor to create a EmbeddingRequest without options. - * @param model The name of model to generate embeddings from. - * @param prompt The text to generate embeddings for. - */ - public EmbeddingRequest(String model, String prompt) { - this(model, prompt, null, null); - } - } - - /** - * The response object returned from the /embedding endpoint. - * - * @param embedding The embedding generated from the model. - * @deprecated Use {@link EmbeddingsResponse} instead. - */ - @Deprecated(since = "1.0.0-M2", forRemoval = true) - @JsonInclude(Include.NON_NULL) - public record EmbeddingResponse( - @JsonProperty("embedding") List embedding) { - } - /** * The response object returned from the /embedding endpoint. * @param model The model used for generating the embeddings. diff --git a/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/api/OllamaApiIT.java b/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/api/OllamaApiIT.java index 0b2b8cc7dce..d699177012d 100644 --- a/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/api/OllamaApiIT.java +++ b/models/spring-ai-ollama/src/test/java/org/springframework/ai/ollama/api/OllamaApiIT.java @@ -24,13 +24,12 @@ import org.junit.jupiter.api.Test; import reactor.core.publisher.Flux; +import org.springframework.ai.chat.messages.UserMessage; import org.springframework.ai.ollama.BaseOllamaIT; import org.springframework.ai.ollama.api.OllamaApi.ChatRequest; import org.springframework.ai.ollama.api.OllamaApi.ChatResponse; import org.springframework.ai.ollama.api.OllamaApi.EmbeddingsRequest; import org.springframework.ai.ollama.api.OllamaApi.EmbeddingsResponse; -import org.springframework.ai.ollama.api.OllamaApi.GenerateRequest; -import org.springframework.ai.ollama.api.OllamaApi.GenerateResponse; import org.springframework.ai.ollama.api.OllamaApi.Message; import org.springframework.ai.ollama.api.OllamaApi.Message.Role; @@ -49,23 +48,6 @@ public static void beforeAll() throws IOException, InterruptedException { initializeOllama(MODEL); } - @Test - public void generation() { - var request = GenerateRequest - .builder("What is the capital of Bulgaria and what is the size? What it the national anthem?") - .withModel(MODEL) - .withStream(false) - .build(); - - GenerateResponse response = getOllamaApi().generate(request); - - System.out.println(response); - - assertThat(response).isNotNull(); - assertThat(response.model()).contains(MODEL); - assertThat(response.response()).contains("Sofia"); - } - @Test public void chat() { var request = ChatRequest.builder(MODEL) 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 63458b559d3..ffaaded2965 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 @@ -397,27 +397,12 @@ public enum ChatModel implements ChatModelDescription { */ GPT_4_TURBO_PREVIEW("gpt-4-turbo-preview"), - /** - * GPT-4 with the ability to understand images, in addition to all other GPT-4 - * Turbo capabilities. Currently points to gpt-4-1106-vision-preview. Returns a - * maximum of 4,096 output tokens Context window: 128k tokens - */ - @Deprecated(since = "1.0.0-M2", forRemoval = true) // Replaced by GPT_4_O - GPT_4_VISION_PREVIEW("gpt-4-vision-preview"), - /** * Currently points to gpt-4-0613. Snapshot of gpt-4 from June 13th 2023 with * improved function calling support. Context window: 8k tokens */ GPT_4("gpt-4"), - /** - * Currently points to gpt-4-32k-0613. Snapshot of gpt-4-32k from June 13th 2023 - * with improved function calling support. Context window: 32k tokens - */ - @Deprecated(since = "1.0.0-M2", forRemoval = true) // Replaced by GPT_4_O - GPT_4_32K("gpt-4-32k"), - /** * Currently points to gpt-3.5-turbo-0125. model with higher accuracy at * responding in requested formats and a fix for a bug which caused a text @@ -483,11 +468,6 @@ public enum ChatCompletionFinishReason { */ @JsonProperty("tool_calls") TOOL_CALLS, - /** - * (deprecated) The model called a function. - */ - @JsonProperty("function_call") - FUNCTION_CALL, /** * Only for compatibility with Mistral AI API. */ diff --git a/models/spring-ai-postgresml/src/main/java/org/springframework/ai/postgresml/PostgresMlEmbeddingModel.java b/models/spring-ai-postgresml/src/main/java/org/springframework/ai/postgresml/PostgresMlEmbeddingModel.java index b702250c371..8ff265ced7b 100644 --- a/models/spring-ai-postgresml/src/main/java/org/springframework/ai/postgresml/PostgresMlEmbeddingModel.java +++ b/models/spring-ai-postgresml/src/main/java/org/springframework/ai/postgresml/PostgresMlEmbeddingModel.java @@ -88,56 +88,6 @@ public PostgresMlEmbeddingModel(JdbcTemplate jdbcTemplate, PostgresMlEmbeddingOp this.createExtension = createExtension; } - /** - * a constructor - * @param jdbcTemplate JdbcTemplate - * @param transformer huggingface sentence-transformer name - */ - @Deprecated(since = "0.8.0", forRemoval = true) - public PostgresMlEmbeddingModel(JdbcTemplate jdbcTemplate, String transformer) { - this(jdbcTemplate, transformer, VectorType.PG_ARRAY); - } - - /** - * a constructor - * @deprecated Use the constructor with {@link PostgresMlEmbeddingOptions} instead. - * @param jdbcTemplate JdbcTemplate - * @param transformer huggingface sentence-transformer name - * @param vectorType vector type in PostgreSQL - */ - @Deprecated(since = "0.8.0", forRemoval = true) - public PostgresMlEmbeddingModel(JdbcTemplate jdbcTemplate, String transformer, VectorType vectorType) { - this(jdbcTemplate, transformer, vectorType, Map.of(), MetadataMode.EMBED, false); - } - - /** - * a constructor * @deprecated Use the constructor with - * {@link PostgresMlEmbeddingOptions} instead. - * @param jdbcTemplate JdbcTemplate - * @param transformer huggingface sentence-transformer name - * @param vectorType vector type in PostgreSQL - * @param kwargs optional arguments - */ - @Deprecated(since = "0.8.0", forRemoval = true) - public PostgresMlEmbeddingModel(JdbcTemplate jdbcTemplate, String transformer, VectorType vectorType, - Map kwargs, MetadataMode metadataMode, boolean createExtension) { - Assert.notNull(jdbcTemplate, "jdbc template must not be null."); - Assert.notNull(transformer, "transformer must not be null."); - Assert.notNull(vectorType, "vectorType must not be null."); - Assert.notNull(kwargs, "kwargs must not be null."); - Assert.notNull(metadataMode, "metadataMode must not be null."); - - this.jdbcTemplate = jdbcTemplate; - - this.defaultOptions = PostgresMlEmbeddingOptions.builder() - .withTransformer(transformer) - .withVectorType(vectorType) - .withMetadataMode(metadataMode) - .withKwargs(ModelOptionsUtils.toJsonString(kwargs)) - .build(); - this.createExtension = createExtension; - } - @SuppressWarnings("null") @Override public float[] embed(String text) { diff --git a/models/spring-ai-vertex-ai-embedding/src/test/java/org/springframework/ai/vertexai/embedding/multimodal/VertexAiMultimodalEmbeddingModelIT.java b/models/spring-ai-vertex-ai-embedding/src/test/java/org/springframework/ai/vertexai/embedding/multimodal/VertexAiMultimodalEmbeddingModelIT.java index b92079d5596..4900693b8a7 100644 --- a/models/spring-ai-vertex-ai-embedding/src/test/java/org/springframework/ai/vertexai/embedding/multimodal/VertexAiMultimodalEmbeddingModelIT.java +++ b/models/spring-ai-vertex-ai-embedding/src/test/java/org/springframework/ai/vertexai/embedding/multimodal/VertexAiMultimodalEmbeddingModelIT.java @@ -16,6 +16,10 @@ package org.springframework.ai.vertexai.embedding.multimodal; +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URL; + import org.junit.jupiter.api.Test; import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable; @@ -104,10 +108,12 @@ void textContentEmbedding() { } @Test - void textMediaEmbedding() { + void textMediaEmbedding() throws MalformedURLException { assertThat(this.multiModelEmbeddingModel).isNotNull(); - var document = Document.builder().withMedia(new Media(MimeTypeUtils.TEXT_PLAIN, "Hello World")).build(); + var document = Document.builder() + .withMedia(new Media(MimeTypeUtils.TEXT_PLAIN, URI.create("http://example.com/image.png").toURL())) + .build(); DocumentEmbeddingRequest embeddingRequest = new DocumentEmbeddingRequest(document); diff --git a/models/spring-ai-watsonx-ai/src/test/java/org/springframework/ai/watsonx/WatsonxAiChatModelTest.java b/models/spring-ai-watsonx-ai/src/test/java/org/springframework/ai/watsonx/WatsonxAiChatModelTest.java index 54c2101afbc..38e9939bca4 100644 --- a/models/spring-ai-watsonx-ai/src/test/java/org/springframework/ai/watsonx/WatsonxAiChatModelTest.java +++ b/models/spring-ai-watsonx-ai/src/test/java/org/springframework/ai/watsonx/WatsonxAiChatModelTest.java @@ -26,6 +26,7 @@ import reactor.core.publisher.Flux; import reactor.test.StepVerifier; +import org.springframework.ai.chat.messages.AssistantMessage; import org.springframework.ai.chat.messages.SystemMessage; import org.springframework.ai.chat.metadata.ChatGenerationMetadata; import org.springframework.ai.chat.model.ChatResponse; @@ -172,9 +173,9 @@ public void testCallMethod() { given(mockChatApi.generate(any(WatsonxAiChatRequest.class))) .willReturn(ResponseEntity.of(Optional.of(fakeResponse))); - Generation expectedGenerator = new Generation("LLM response") - .withGenerationMetadata(ChatGenerationMetadata.from("max_tokens", - Map.of("warnings", List.of(Map.of("message", "the message", "id", "disclaimer_warning"))))); + Generation expectedGenerator = new Generation(new AssistantMessage("LLM response"), + ChatGenerationMetadata.from("max_tokens", + Map.of("warnings", List.of(Map.of("message", "the message", "id", "disclaimer_warning"))))); ChatResponse expectedResponse = new ChatResponse(List.of(expectedGenerator)); ChatResponse response = chatModel.call(prompt); @@ -205,10 +206,9 @@ public void testStreamMethod() { Flux fakeResponse = Flux.just(fakeResponseFirst, fakeResponseSecond); given(mockChatApi.generateStreaming(any(WatsonxAiChatRequest.class))).willReturn(fakeResponse); - Generation firstGen = new Generation("LLM resp") - .withGenerationMetadata(ChatGenerationMetadata.from("max_tokens", - Map.of("warnings", List.of(Map.of("message", "the message", "id", "disclaimer_warning"))))); - Generation secondGen = new Generation("onse"); + Generation firstGen = new Generation(new AssistantMessage("LLM resp"), ChatGenerationMetadata.from("max_tokens", + Map.of("warnings", List.of(Map.of("message", "the message", "id", "disclaimer_warning"))))); + Generation secondGen = new Generation(new AssistantMessage("onse")); Flux response = chatModel.stream(prompt); diff --git a/models/spring-ai-zhipuai/src/main/java/org/springframework/ai/zhipuai/api/ZhiPuAiApi.java b/models/spring-ai-zhipuai/src/main/java/org/springframework/ai/zhipuai/api/ZhiPuAiApi.java index 90ab02c4913..836bc22b8a4 100644 --- a/models/spring-ai-zhipuai/src/main/java/org/springframework/ai/zhipuai/api/ZhiPuAiApi.java +++ b/models/spring-ai-zhipuai/src/main/java/org/springframework/ai/zhipuai/api/ZhiPuAiApi.java @@ -279,11 +279,6 @@ public enum ChatCompletionFinishReason { */ @JsonProperty("tool_calls") TOOL_CALLS, - /** - * (deprecated) The model called a function. - */ - @JsonProperty("function_call") - FUNCTION_CALL, /** * Only for compatibility with Mistral AI API. */ diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/model/Generation.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/model/Generation.java index e351b0bdc18..e8a52f2a462 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/model/Generation.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/model/Generation.java @@ -16,13 +16,11 @@ package org.springframework.ai.chat.model; -import java.util.Map; import java.util.Objects; import org.springframework.ai.chat.messages.AssistantMessage; import org.springframework.ai.chat.metadata.ChatGenerationMetadata; import org.springframework.ai.model.ModelResult; -import org.springframework.lang.Nullable; /** * Represents a response returned by the AI. @@ -33,22 +31,6 @@ public class Generation implements ModelResult { private ChatGenerationMetadata chatGenerationMetadata; - /** - * @deprecated Use {@link #Generation(AssistantMessage)} constructor instead. - */ - @Deprecated - public Generation(String text) { - this(text, Map.of()); - } - - /** - * @deprecated Use {@link #Generation(AssistantMessage)} constructor instead. - */ - @Deprecated - public Generation(String text, Map properties) { - this(new AssistantMessage(text, properties)); - } - public Generation(AssistantMessage assistantMessage) { this(assistantMessage, ChatGenerationMetadata.NULL); } @@ -69,18 +51,6 @@ public ChatGenerationMetadata getMetadata() { return chatGenerationMetadata != null ? chatGenerationMetadata : ChatGenerationMetadata.NULL; } - /** - * @deprecated Use {@link #Generation(AssistantMessage, ChatGenerationMetadata)} - * constructor instead. - * @param chatGenerationMetadata - * @return - */ - @Deprecated - public Generation withGenerationMetadata(@Nullable ChatGenerationMetadata chatGenerationMetadata) { - this.chatGenerationMetadata = chatGenerationMetadata; - return this; - } - @Override public boolean equals(Object o) { if (this == o) { diff --git a/spring-ai-core/src/main/java/org/springframework/ai/converter/StructuredOutputConverter.java b/spring-ai-core/src/main/java/org/springframework/ai/converter/StructuredOutputConverter.java index 40a5f54839b..f036e3632b0 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/converter/StructuredOutputConverter.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/converter/StructuredOutputConverter.java @@ -17,7 +17,6 @@ package org.springframework.ai.converter; import org.springframework.core.convert.converter.Converter; -import org.springframework.lang.NonNull; /** * Converts the (raw) LLM output into a structured responses of type. The @@ -30,11 +29,4 @@ */ public interface StructuredOutputConverter extends Converter, FormatProvider { - /** - * @deprecated Use the {@link #convert(Object)} instead. - */ - default T parse(@NonNull String source) { - return this.convert(source); - } - } diff --git a/spring-ai-core/src/main/java/org/springframework/ai/model/Media.java b/spring-ai-core/src/main/java/org/springframework/ai/model/Media.java index fe5cd8212fa..a994b0a6d01 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/model/Media.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/model/Media.java @@ -38,21 +38,6 @@ public class Media { private final Object data; - /** - * The Media class represents the data and metadata of a media attachment in a - * message. It consists of a MIME type and the raw data. - * - * This class is used as a parameter in the constructor of the UserMessage class. - * @deprecated This constructor is deprecated since version 1.0.0 M1 and will be - * removed in a future release. - */ - @Deprecated(since = "1.0.0 M1", forRemoval = true) - public Media(MimeType mimeType, Object data) { - Assert.notNull(mimeType, "MimeType must not be null"); - this.mimeType = mimeType; - this.data = data; - } - public Media(MimeType mimeType, URL url) { Assert.notNull(mimeType, "MimeType must not be null"); this.mimeType = mimeType; diff --git a/spring-ai-core/src/main/java/org/springframework/ai/model/function/MethodFunctionCallback.java b/spring-ai-core/src/main/java/org/springframework/ai/model/function/MethodFunctionCallback.java index cd47c4d0fdf..3d68148ab2e 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/model/function/MethodFunctionCallback.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/model/function/MethodFunctionCallback.java @@ -167,6 +167,7 @@ else if (returnType == Class.class || returnType.isRecord() || returnType == Lis return ModelOptionsUtils.toJsonString(response); } + return "" + response; } catch (Exception e) { diff --git a/spring-ai-core/src/test/java/org/springframework/ai/chat/client/ChatClientResponseEntityTests.java b/spring-ai-core/src/test/java/org/springframework/ai/chat/client/ChatClientResponseEntityTests.java index 5295a213acf..a5038f32a4c 100644 --- a/spring-ai-core/src/test/java/org/springframework/ai/chat/client/ChatClientResponseEntityTests.java +++ b/spring-ai-core/src/test/java/org/springframework/ai/chat/client/ChatClientResponseEntityTests.java @@ -26,6 +26,7 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import org.springframework.ai.chat.messages.AssistantMessage; import org.springframework.ai.chat.messages.Message; import org.springframework.ai.chat.messages.MessageType; import org.springframework.ai.chat.metadata.ChatResponseMetadata; @@ -56,9 +57,9 @@ public void responseEntityTest() { ChatResponseMetadata metadata = ChatResponseMetadata.builder().withKeyValue("key1", "value1").build(); - var chatResponse = new ChatResponse(List.of(new Generation(""" + var chatResponse = new ChatResponse(List.of(new Generation(new AssistantMessage(""" {"name":"John", "age":30} - """)), metadata); + """))), metadata); given(this.chatModel.call(this.promptCaptor.capture())).willReturn(chatResponse); @@ -82,12 +83,12 @@ public void responseEntityTest() { @Test public void parametrizedResponseEntityTest() { - var chatResponse = new ChatResponse(List.of(new Generation(""" + var chatResponse = new ChatResponse(List.of(new Generation(new AssistantMessage(""" [ {"name":"Max", "age":10}, {"name":"Adi", "age":13} ] - """))); + """)))); given(this.chatModel.call(this.promptCaptor.capture())).willReturn(chatResponse); @@ -112,9 +113,9 @@ public void parametrizedResponseEntityTest() { @Test public void customSoCResponseEntityTest() { - var chatResponse = new ChatResponse(List.of(new Generation(""" + var chatResponse = new ChatResponse(List.of(new Generation(new AssistantMessage(""" {"name":"Max", "age":10}, - """))); + """)))); given(this.chatModel.call(this.promptCaptor.capture())).willReturn(chatResponse); diff --git a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/vectorstore/cassandra/CassandraVectorStoreProperties.java b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/vectorstore/cassandra/CassandraVectorStoreProperties.java index 18be88e5ba3..6b230294d5b 100644 --- a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/vectorstore/cassandra/CassandraVectorStoreProperties.java +++ b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/vectorstore/cassandra/CassandraVectorStoreProperties.java @@ -89,18 +89,6 @@ public void setEmbeddingColumnName(String embeddingColumnName) { this.embeddingColumnName = embeddingColumnName; } - @Deprecated - public boolean getDisallowSchemaCreation() { - logger.warn("getDisallowSchemaCreation() is deprecated, use isInitializeSchema()"); - return !super.isInitializeSchema(); - } - - @Deprecated - public void setDisallowSchemaCreation(boolean disallowSchemaCreation) { - logger.warn("setDisallowSchemaCreation(boolean) is deprecated, use setInitializeSchema(boolean)"); - super.setInitializeSchema(!disallowSchemaCreation); - } - public boolean getReturnEmbeddings() { return this.returnEmbeddings; } diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vectorstore/cassandra/CassandraVectorStorePropertiesTests.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vectorstore/cassandra/CassandraVectorStorePropertiesTests.java index 3c8201eda79..d2ed94ab7ac 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vectorstore/cassandra/CassandraVectorStorePropertiesTests.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vectorstore/cassandra/CassandraVectorStorePropertiesTests.java @@ -36,7 +36,6 @@ void defaultValues() { assertThat(props.getContentColumnName()).isEqualTo(CassandraVectorStoreConfig.DEFAULT_CONTENT_COLUMN_NAME); assertThat(props.getEmbeddingColumnName()).isEqualTo(CassandraVectorStoreConfig.DEFAULT_EMBEDDING_COLUMN_NAME); assertThat(props.getIndexName()).isNull(); - assertThat(props.getDisallowSchemaCreation()).isTrue(); assertThat(props.getFixedThreadPoolExecutorSize()) .isEqualTo(CassandraVectorStoreConfig.DEFAULT_ADD_CONCURRENCY); } @@ -49,7 +48,6 @@ void customValues() { props.setContentColumnName("my_content"); props.setEmbeddingColumnName("my_vector"); props.setIndexName("my_sai"); - props.setDisallowSchemaCreation(true); props.setFixedThreadPoolExecutorSize(10); assertThat(props.getKeyspace()).isEqualTo("my_keyspace"); @@ -57,7 +55,6 @@ void customValues() { assertThat(props.getContentColumnName()).isEqualTo("my_content"); assertThat(props.getEmbeddingColumnName()).isEqualTo("my_vector"); assertThat(props.getIndexName()).isEqualTo("my_sai"); - assertThat(props.getDisallowSchemaCreation()).isTrue(); assertThat(props.getFixedThreadPoolExecutorSize()).isEqualTo(10); } diff --git a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vectorstore/neo4j/Neo4jVectorStoreAutoConfigurationIT.java b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vectorstore/neo4j/Neo4jVectorStoreAutoConfigurationIT.java index 09b12c83a23..d284f32e7e3 100644 --- a/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vectorstore/neo4j/Neo4jVectorStoreAutoConfigurationIT.java +++ b/spring-ai-spring-boot-autoconfigure/src/test/java/org/springframework/ai/autoconfigure/vectorstore/neo4j/Neo4jVectorStoreAutoConfigurationIT.java @@ -52,8 +52,6 @@ @Testcontainers public class Neo4jVectorStoreAutoConfigurationIT { - // Needs to be Neo4j 5.15+, because Neo4j 5.15 deprecated the used embedding storing - // function. @Container static Neo4jContainer neo4jContainer = new Neo4jContainer<>(DockerImageName.parse("neo4j:5.18")) .withRandomPassword(); diff --git a/vector-stores/spring-ai-neo4j-store/src/test/java/org/springframework/ai/vectorstore/Neo4jImage.java b/vector-stores/spring-ai-neo4j-store/src/test/java/org/springframework/ai/vectorstore/Neo4jImage.java index 1773f4eb891..e0133dbf1fe 100644 --- a/vector-stores/spring-ai-neo4j-store/src/test/java/org/springframework/ai/vectorstore/Neo4jImage.java +++ b/vector-stores/spring-ai-neo4j-store/src/test/java/org/springframework/ai/vectorstore/Neo4jImage.java @@ -23,8 +23,6 @@ */ public final class Neo4jImage { - // Needs to be Neo4j 5.15+ because Neo4j 5.15 deprecated the old vector index creation - // function. public static final DockerImageName DEFAULT_IMAGE = DockerImageName.parse("neo4j:5.24"); private Neo4jImage() { diff --git a/vector-stores/spring-ai-qdrant-store/src/main/java/org/springframework/ai/vectorstore/qdrant/QdrantVectorStore.java b/vector-stores/spring-ai-qdrant-store/src/main/java/org/springframework/ai/vectorstore/qdrant/QdrantVectorStore.java index 679707038ac..825c50f7b5b 100644 --- a/vector-stores/spring-ai-qdrant-store/src/main/java/org/springframework/ai/vectorstore/qdrant/QdrantVectorStore.java +++ b/vector-stores/spring-ai-qdrant-store/src/main/java/org/springframework/ai/vectorstore/qdrant/QdrantVectorStore.java @@ -79,18 +79,6 @@ public class QdrantVectorStore extends AbstractObservationVectorStore implements private final BatchingStrategy batchingStrategy; - /** - * Constructs a new QdrantVectorStore. - * @param config The configuration for the store. - * @param embeddingModel The client for embedding operations. - * @deprecated since 1.0.0 in favor of {@link QdrantVectorStore}. - */ - @Deprecated(since = "1.0.0", forRemoval = true) - public QdrantVectorStore(QdrantClient qdrantClient, QdrantVectorStoreConfig config, EmbeddingModel embeddingModel, - boolean initializeSchema) { - this(qdrantClient, config.collectionName, embeddingModel, initializeSchema); - } - /** * Constructs a new QdrantVectorStore. * @param qdrantClient A {@link QdrantClient} instance for interfacing with Qdrant. @@ -283,66 +271,4 @@ public VectorStoreObservationContext.Builder createObservationContextBuilder(Str } - /** - * Configuration class for the QdrantVectorStore. - * - * @deprecated since 1.0.0 in favor of {@link QdrantVectorStore}. - */ - @Deprecated(since = "1.0.0", forRemoval = true) - public static final class QdrantVectorStoreConfig { - - private final String collectionName; - - /* - * Constructor using the builder. - * - * @param builder The configuration builder. - */ - - private QdrantVectorStoreConfig(Builder builder) { - this.collectionName = builder.collectionName; - } - - /** - * Start building a new configuration. - * @return The entry point for creating a new configuration. - */ - public static Builder builder() { - return new Builder(); - } - - /** - * {@return the default config} - */ - public static QdrantVectorStoreConfig defaultConfig() { - return builder().build(); - } - - public final static class Builder { - - private String collectionName; - - private Builder() { - } - - /** - * @param collectionName REQUIRED. The name of the collection. - */ - public Builder withCollectionName(String collectionName) { - this.collectionName = collectionName; - return this; - } - - /** - * {@return the immutable configuration} - */ - public QdrantVectorStoreConfig build() { - Assert.notNull(this.collectionName, "collectionName cannot be null"); - return new QdrantVectorStoreConfig(this); - } - - } - - } - }