Skip to content

Commit 3d4b4be

Browse files
committed
merge main and fix conflict
Signed-off-by: lambochen <[email protected]>
2 parents b737af9 + 61c32ae commit 3d4b4be

File tree

119 files changed

+1061
-560
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

119 files changed

+1061
-560
lines changed

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
Thank you for taking time to contribute this pull request!
22
You might have already read the [contributor guide][1], but as a reminder, please make sure to:
33

4-
* Sign the [contributor license agreement](https://cla.pivotal.io/sign/spring)
4+
* Add a Signed-off-by line to each commit (`git commit -s`) per the [DCO](https://spring.io/blog/2025/01/06/hello-dco-goodbye-cla-simplifying-contributions-to-spring#how-to-use-developer-certificate-of-origin)
55
* Rebase your changes on the latest `main` branch and squash your commits
66
* Add/Update unit tests as needed
77
* Run a build and make sure all tests pass prior to submission
8+
9+
For more details, please check the [contributor guide][1].
10+
Thank you upfront!
11+
12+
[1]: https://github.com/spring-projects/spring-ai/blob/main/CONTRIBUTING.adoc

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ You can find more details in the [Reference Documentation](https://docs.spring.i
2525
- [Moderation](https://docs.spring.io/spring-ai/reference/api/index.html#api/moderation)
2626
* Portable API support across AI providers for both synchronous and streaming options. Access to [model-specific features](https://docs.spring.io/spring-ai/reference/api/chatmodel.html#_chat_options) is also available.
2727
* [Structured Outputs](https://docs.spring.io/spring-ai/reference/api/structured-output-converter.html) - Mapping of AI Model output to POJOs.
28-
* Support for all major [Vector Database providers](https://docs.spring.io/spring-ai/reference/api/vectordbs.html) such as *Apache Cassandra, Azure Vector Search, Chroma, Milvus, MongoDB Atlas, MariaDB, Neo4j, Oracle, PostgreSQL/PGVector, PineCone, Qdrant, Redis, and Weaviate*.
28+
* Support for all major [Vector Database providers](https://docs.spring.io/spring-ai/reference/api/vectordbs.html) such as *Apache Cassandra, Azure Vector Search, Chroma, Elasticsearch, Milvus, MongoDB Atlas, MariaDB, Neo4j, Oracle, PostgreSQL/PGVector, PineCone, Qdrant, Redis, and Weaviate*.
2929
* Portable API across Vector Store providers, including a novel SQL-like [metadata filter API](https://docs.spring.io/spring-ai/reference/api/vectordbs.html#metadata-filters).
3030
* [Tools/Function Calling](https://docs.spring.io/spring-ai/reference/api/tools.html) - permits the model to request the execution of client-side tools and functions, thereby accessing necessary real-time information as required.
3131
* [Observability](https://docs.spring.io/spring-ai/reference/observability/index.html) - Provides insights into AI-related operations.

auto-configurations/mcp/spring-ai-autoconfigure-mcp-client/src/main/java/org/springframework/ai/mcp/client/autoconfigure/properties/McpStdioClientProperties.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,9 @@ public Map<String, Parameters> getConnections() {
7575

7676
private Map<String, ServerParameters> resourceToServerParameters() {
7777
try {
78-
Map<String, Map<String, Parameters>> stdioConnection = new ObjectMapper().readValue(
79-
this.serversConfiguration.getInputStream(),
80-
new TypeReference<Map<String, Map<String, Parameters>>>() {
81-
});
78+
Map<String, Map<String, Parameters>> stdioConnection = new ObjectMapper()
79+
.readValue(this.serversConfiguration.getInputStream(), new TypeReference<>() {
80+
});
8281

8382
Map<String, Parameters> mcpServerJsonConfig = stdioConnection.entrySet().iterator().next().getValue();
8483

auto-configurations/mcp/spring-ai-autoconfigure-mcp-client/src/test/java/org/springframework/ai/mcp/client/autoconfigure/McpToolCallbackAutoConfigurationTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public class McpToolCallbackAutoConfigurationTests {
2929
.withConfiguration(AutoConfigurations.of(McpToolCallbackAutoConfiguration.class));
3030

3131
@Test
32-
void enableddByDefault() {
32+
void enabledByDefault() {
3333

3434
this.applicationContext.run(context -> {
3535
assertThat(context).hasBean("mcpToolCallbacks");

auto-configurations/mcp/spring-ai-autoconfigure-mcp-client/src/test/java/org/springframework/ai/mcp/client/autoconfigure/properties/McpSseClientPropertiesTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ void sseParametersRecord() {
112112
}
113113

114114
@Test
115-
void sseParametersRecordWithNullSseEdnpoint() {
115+
void sseParametersRecordWithNullSseEndpoint() {
116116
String url = "http://test-server:8080/events";
117117
McpSseClientProperties.SseParameters params = new McpSseClientProperties.SseParameters(url, null);
118118

auto-configurations/models/spring-ai-autoconfigure-model-ollama/pom.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
<groupId>org.springframework.ai</groupId>
4040
<artifactId>spring-ai-autoconfigure-retry</artifactId>
4141
<version>${project.parent.version}</version>
42-
<optional>true</optional>
4342
</dependency>
4443

4544
<dependency>

auto-configurations/models/spring-ai-autoconfigure-model-ollama/src/main/java/org/springframework/ai/model/ollama/autoconfigure/OllamaApiAutoConfiguration.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,15 @@
1717
package org.springframework.ai.model.ollama.autoconfigure;
1818

1919
import org.springframework.ai.ollama.api.OllamaApi;
20+
import org.springframework.ai.retry.autoconfigure.SpringAiRetryAutoConfiguration;
2021
import org.springframework.beans.factory.ObjectProvider;
2122
import org.springframework.boot.autoconfigure.AutoConfiguration;
23+
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
2224
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
2325
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
2426
import org.springframework.boot.context.properties.EnableConfigurationProperties;
2527
import org.springframework.context.annotation.Bean;
28+
import org.springframework.web.client.ResponseErrorHandler;
2629
import org.springframework.web.client.RestClient;
2730
import org.springframework.web.reactive.function.client.WebClient;
2831

@@ -38,6 +41,7 @@
3841
@AutoConfiguration
3942
@ConditionalOnClass(OllamaApi.class)
4043
@EnableConfigurationProperties(OllamaConnectionProperties.class)
44+
@ImportAutoConfiguration(classes = { SpringAiRetryAutoConfiguration.class })
4145
public class OllamaApiAutoConfiguration {
4246

4347
@Bean
@@ -50,11 +54,12 @@ public PropertiesOllamaConnectionDetails ollamaConnectionDetails(OllamaConnectio
5054
@ConditionalOnMissingBean
5155
public OllamaApi ollamaApi(OllamaConnectionDetails connectionDetails,
5256
ObjectProvider<RestClient.Builder> restClientBuilderProvider,
53-
ObjectProvider<WebClient.Builder> webClientBuilderProvider) {
57+
ObjectProvider<WebClient.Builder> webClientBuilderProvider, ResponseErrorHandler responseErrorHandler) {
5458
return OllamaApi.builder()
5559
.baseUrl(connectionDetails.getBaseUrl())
5660
.restClientBuilder(restClientBuilderProvider.getIfAvailable(RestClient::builder))
5761
.webClientBuilder(webClientBuilderProvider.getIfAvailable(WebClient::builder))
62+
.responseErrorHandler(responseErrorHandler)
5863
.build();
5964
}
6065

auto-configurations/models/spring-ai-autoconfigure-model-ollama/src/main/java/org/springframework/ai/model/ollama/autoconfigure/OllamaChatAutoConfiguration.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import org.springframework.boot.autoconfigure.web.reactive.function.client.WebClientAutoConfiguration;
4040
import org.springframework.boot.context.properties.EnableConfigurationProperties;
4141
import org.springframework.context.annotation.Bean;
42+
import org.springframework.retry.support.RetryTemplate;
4243

4344
/**
4445
* {@link AutoConfiguration Auto-configuration} for Ollama Chat model.
@@ -47,6 +48,7 @@
4748
* @author Eddú Meléndez
4849
* @author Thomas Vitale
4950
* @author Ilayaperumal Gopinathan
51+
* @author Jonghoon Park
5052
* @since 0.8.0
5153
*/
5254
@AutoConfiguration(after = { RestClientAutoConfiguration.class, ToolCallingAutoConfiguration.class })
@@ -64,7 +66,8 @@ public OllamaChatModel ollamaChatModel(OllamaApi ollamaApi, OllamaChatProperties
6466
OllamaInitializationProperties initProperties, ToolCallingManager toolCallingManager,
6567
ObjectProvider<ObservationRegistry> observationRegistry,
6668
ObjectProvider<ChatModelObservationConvention> observationConvention,
67-
ObjectProvider<ToolExecutionEligibilityPredicate> ollamaToolExecutionEligibilityPredicate) {
69+
ObjectProvider<ToolExecutionEligibilityPredicate> ollamaToolExecutionEligibilityPredicate,
70+
RetryTemplate retryTemplate) {
6871
var chatModelPullStrategy = initProperties.getChat().isInclude() ? initProperties.getPullModelStrategy()
6972
: PullModelStrategy.NEVER;
7073

@@ -78,6 +81,7 @@ public OllamaChatModel ollamaChatModel(OllamaApi ollamaApi, OllamaChatProperties
7881
.modelManagementOptions(
7982
new ModelManagementOptions(chatModelPullStrategy, initProperties.getChat().getAdditionalModels(),
8083
initProperties.getTimeout(), initProperties.getMaxRetries()))
84+
.retryTemplate(retryTemplate)
8185
.build();
8286

8387
observationConvention.ifAvailable(chatModel::setObservationConvention);

auto-configurations/models/spring-ai-autoconfigure-model-openai/src/main/java/org/springframework/ai/model/openai/autoconfigure/OpenAIAutoConfigurationUtil.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@
2020
import java.util.List;
2121
import java.util.Map;
2222

23-
import org.jetbrains.annotations.NotNull;
24-
23+
import org.springframework.lang.NonNull;
2524
import org.springframework.util.Assert;
2625
import org.springframework.util.CollectionUtils;
2726
import org.springframework.util.MultiValueMap;
@@ -33,7 +32,7 @@ private OpenAIAutoConfigurationUtil() {
3332
// Avoids instantiation
3433
}
3534

36-
public static @NotNull ResolvedConnectionProperties resolveConnectionProperties(
35+
public static @NonNull ResolvedConnectionProperties resolveConnectionProperties(
3736
OpenAiParentProperties commonProperties, OpenAiParentProperties modelProperties, String modelType) {
3837

3938
String baseUrl = StringUtils.hasText(modelProperties.getBaseUrl()) ? modelProperties.getBaseUrl()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
/*
2+
* Copyright 2025-2025 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
@NonNullApi
18+
@NonNullFields
19+
package org.springframework.ai.model.openai.autoconfigure;
20+
21+
import org.springframework.lang.NonNullApi;
22+
import org.springframework.lang.NonNullFields;

0 commit comments

Comments
 (0)