gitextract_2jlwg2th/ ├── .editorconfig ├── .gitattributes ├── .github/ │ ├── ISSUE_TEMPLATE/ │ │ ├── bug_report.md │ │ ├── config.yml │ │ ├── feature_request.md │ │ └── miscellaneous.md │ ├── PULL_REQUEST_TEMPLATE.md │ ├── dco.yml │ ├── release-files-spec.json │ └── workflows/ │ ├── artifactory-milestone-release.yml │ ├── auto-cherry-pick.yml │ ├── backport-issue.yml │ ├── continuous-integration.yml │ ├── dependency-ci-dashboard.yml │ ├── deploy-docs.yml │ ├── documentation-upload.yml │ ├── maven-central-release.yml │ ├── mcp-integration-tests.yml │ └── pr-check.yml ├── .gitignore ├── .mvn/ │ ├── extensions.xml │ ├── jvm.config │ ├── maven-build-cache-config.xml │ └── wrapper/ │ ├── maven-wrapper.jar │ └── maven-wrapper.properties ├── .sdkmanrc ├── CONTRIBUTING.adoc ├── LICENSE.txt ├── README.md ├── advisors/ │ └── spring-ai-advisors-vector-store/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── chat/ │ │ └── client/ │ │ └── advisor/ │ │ └── vectorstore/ │ │ ├── QuestionAnswerAdvisor.java │ │ ├── VectorStoreChatMemoryAdvisor.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── org/ │ └── springframework/ │ └── ai/ │ └── chat/ │ └── client/ │ └── advisor/ │ └── vectorstore/ │ ├── QuestionAnswerAdvisorTests.java │ └── VectorStoreChatMemoryAdvisorTests.java ├── auto-configurations/ │ ├── common/ │ │ └── spring-ai-autoconfigure-retry/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── retry/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── SpringAiRetryAutoConfiguration.java │ │ │ │ ├── SpringAiRetryProperties.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── retry/ │ │ └── autoconfigure/ │ │ ├── SpringAiRetryAutoConfigurationIT.java │ │ └── SpringAiRetryPropertiesTests.java │ ├── mcp/ │ │ ├── spring-ai-autoconfigure-mcp-client-common/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── springframework/ │ │ │ │ │ └── ai/ │ │ │ │ │ └── mcp/ │ │ │ │ │ └── client/ │ │ │ │ │ └── common/ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ ├── McpAsyncToolsChangeEventEmmiter.java │ │ │ │ │ ├── McpClientAutoConfiguration.java │ │ │ │ │ ├── McpSseClientConnectionDetails.java │ │ │ │ │ ├── McpSyncToolsChangeEventEmmiter.java │ │ │ │ │ ├── McpToolCallbackAutoConfiguration.java │ │ │ │ │ ├── NamedClientMcpTransport.java │ │ │ │ │ ├── PropertiesMcpSseClientConnectionDetails.java │ │ │ │ │ ├── StdioTransportAutoConfiguration.java │ │ │ │ │ ├── annotations/ │ │ │ │ │ │ ├── McpClientAnnotationScannerAutoConfiguration.java │ │ │ │ │ │ ├── McpClientAnnotationScannerProperties.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── aot/ │ │ │ │ │ │ ├── McpClientAutoConfigurationRuntimeHints.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── configurer/ │ │ │ │ │ │ ├── McpAsyncClientConfigurer.java │ │ │ │ │ │ ├── McpSyncClientConfigurer.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── package-info.java │ │ │ │ │ └── properties/ │ │ │ │ │ ├── McpClientCommonProperties.java │ │ │ │ │ ├── McpSseClientProperties.java │ │ │ │ │ ├── McpStdioClientProperties.java │ │ │ │ │ ├── McpStreamableHttpClientProperties.java │ │ │ │ │ └── package-info.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── spring/ │ │ │ │ ├── aot.factories │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── mcp/ │ │ │ │ └── client/ │ │ │ │ └── common/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── McpClientAutoConfigurationIT.java │ │ │ │ ├── McpClientAutoConfigurationRuntimeHintsTests.java │ │ │ │ ├── McpToolCallbackAutoConfigurationConditionTests.java │ │ │ │ ├── McpToolCallbackAutoConfigurationTests.java │ │ │ │ ├── annotations/ │ │ │ │ │ └── McpClientListChangedAnnotationsScanningIT.java │ │ │ │ └── properties/ │ │ │ │ ├── McpClientCommonPropertiesTests.java │ │ │ │ └── McpSseClientPropertiesTests.java │ │ │ └── resources/ │ │ │ ├── application-test.properties │ │ │ ├── nested/ │ │ │ │ └── nested-config.json │ │ │ └── test-config.json │ │ ├── spring-ai-autoconfigure-mcp-client-httpclient/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── springframework/ │ │ │ │ │ └── ai/ │ │ │ │ │ └── mcp/ │ │ │ │ │ └── client/ │ │ │ │ │ └── httpclient/ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ ├── SseHttpClientTransportAutoConfiguration.java │ │ │ │ │ ├── StreamableHttpHttpClientTransportAutoConfiguration.java │ │ │ │ │ ├── aot/ │ │ │ │ │ │ ├── McpClientAutoConfigurationRuntimeHints.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── package-info.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── spring/ │ │ │ │ ├── aot.factories │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── mcp/ │ │ │ │ └── client/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── SseHttpClientTransportAutoConfigurationIT.java │ │ │ │ ├── SseHttpClientTransportAutoConfigurationTests.java │ │ │ │ ├── StreamableHttpHttpClientTransportAutoConfigurationIT.java │ │ │ │ └── StreamableHttpHttpClientTransportAutoConfigurationTests.java │ │ │ └── resources/ │ │ │ ├── application-test.properties │ │ │ ├── nested/ │ │ │ │ └── nested-config.json │ │ │ └── test-config.json │ │ ├── spring-ai-autoconfigure-mcp-client-webflux/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── springframework/ │ │ │ │ │ └── ai/ │ │ │ │ │ └── mcp/ │ │ │ │ │ └── client/ │ │ │ │ │ └── webflux/ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ ├── SseWebFluxTransportAutoConfiguration.java │ │ │ │ │ ├── StreamableHttpWebFluxTransportAutoConfiguration.java │ │ │ │ │ ├── aot/ │ │ │ │ │ │ ├── McpClientAutoConfigurationRuntimeHints.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── package-info.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── spring/ │ │ │ │ ├── aot.factories │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── mcp/ │ │ │ │ └── client/ │ │ │ │ └── webflux/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── McpToolsConfigurationTests.java │ │ │ │ ├── SseWebFluxTransportAutoConfigurationIT.java │ │ │ │ ├── SseWebFluxTransportAutoConfigurationTests.java │ │ │ │ ├── StreamableHttpHttpClientTransportAutoConfigurationIT.java │ │ │ │ └── StreamableHttpWebFluxTransportAutoConfigurationTests.java │ │ │ └── resources/ │ │ │ ├── application-test.properties │ │ │ ├── nested/ │ │ │ │ └── nested-config.json │ │ │ └── test-config.json │ │ ├── spring-ai-autoconfigure-mcp-server-common/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── springframework/ │ │ │ │ │ └── ai/ │ │ │ │ │ └── mcp/ │ │ │ │ │ └── server/ │ │ │ │ │ └── common/ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ ├── McpServerAutoConfiguration.java │ │ │ │ │ ├── McpServerJsonMapperAutoConfiguration.java │ │ │ │ │ ├── McpServerStatelessAutoConfiguration.java │ │ │ │ │ ├── McpServerStdioDisabledCondition.java │ │ │ │ │ ├── StatelessToolCallbackConverterAutoConfiguration.java │ │ │ │ │ ├── ToolCallbackConverterAutoConfiguration.java │ │ │ │ │ ├── ToolCallbackUtils.java │ │ │ │ │ ├── annotations/ │ │ │ │ │ │ ├── McpServerAnnotationScannerAutoConfiguration.java │ │ │ │ │ │ ├── McpServerAnnotationScannerProperties.java │ │ │ │ │ │ ├── McpServerSpecificationFactoryAutoConfiguration.java │ │ │ │ │ │ ├── StatelessServerSpecificationFactoryAutoConfiguration.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── package-info.java │ │ │ │ │ └── properties/ │ │ │ │ │ ├── McpServerChangeNotificationProperties.java │ │ │ │ │ ├── McpServerProperties.java │ │ │ │ │ ├── McpServerSseProperties.java │ │ │ │ │ ├── McpServerStreamableHttpProperties.java │ │ │ │ │ └── package-info.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── mcp/ │ │ │ └── server/ │ │ │ └── common/ │ │ │ └── autoconfigure/ │ │ │ ├── McpServerAutoConfigurationIT.java │ │ │ ├── McpServerJsonMapperAutoConfigurationIT.java │ │ │ ├── McpStatelessServerAutoConfigurationIT.java │ │ │ ├── McpToolWithStdioIT.java │ │ │ ├── StatelessToolCallbackConverterAutoConfigurationIT.java │ │ │ └── ToolCallbackConverterAutoConfigurationIT.java │ │ ├── spring-ai-autoconfigure-mcp-server-webflux/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── springframework/ │ │ │ │ │ └── ai/ │ │ │ │ │ └── mcp/ │ │ │ │ │ └── server/ │ │ │ │ │ └── webflux/ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ ├── McpServerSseWebFluxAutoConfiguration.java │ │ │ │ │ ├── McpServerStatelessWebFluxAutoConfiguration.java │ │ │ │ │ ├── McpServerStreamableHttpWebFluxAutoConfiguration.java │ │ │ │ │ └── package-info.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── mcp/ │ │ │ └── server/ │ │ │ └── webflux/ │ │ │ └── autoconfigure/ │ │ │ ├── McpServerSseWebFluxAutoConfigurationIT.java │ │ │ ├── McpServerSseWebFluxAutoConfigurationTests.java │ │ │ ├── McpServerStatelessWebFluxAutoConfigurationIT.java │ │ │ ├── McpServerStreamableHttpWebFluxAutoConfigurationIT.java │ │ │ ├── McpToolCallProviderCachingIT.java │ │ │ ├── McpToolCallbackParameterlessToolIT.java │ │ │ ├── SseWebClientWebFluxServerIT.java │ │ │ ├── StatelessWebClientWebFluxServerIT.java │ │ │ ├── StreamableMcpAnnotations2IT.java │ │ │ ├── StreamableMcpAnnotationsIT.java │ │ │ ├── StreamableMcpAnnotationsManualIT.java │ │ │ ├── StreamableMcpAnnotationsWithLLMIT.java │ │ │ ├── StreamableWebClientWebFluxServerIT.java │ │ │ └── capabilities/ │ │ │ ├── McpHandlerConfiguration.java │ │ │ └── McpHandlerService.java │ │ └── spring-ai-autoconfigure-mcp-server-webmvc/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── mcp/ │ │ │ │ └── server/ │ │ │ │ └── webmvc/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── McpServerSseWebMvcAutoConfiguration.java │ │ │ │ ├── McpServerStatelessWebMvcAutoConfiguration.java │ │ │ │ ├── McpServerStreamableHttpWebMvcAutoConfiguration.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── mcp/ │ │ └── server/ │ │ └── webmvc/ │ │ └── autoconfigure/ │ │ ├── McpServerSseWebMvcAutoConfigurationIT.java │ │ ├── McpServerStatelessWebMvcAutoConfigurationIT.java │ │ └── McpServerStreamableHttpWebMvcAutoConfigurationIT.java │ ├── models/ │ │ ├── chat/ │ │ │ ├── client/ │ │ │ │ └── spring-ai-autoconfigure-model-chat-client/ │ │ │ │ ├── pom.xml │ │ │ │ └── src/ │ │ │ │ ├── main/ │ │ │ │ │ ├── java/ │ │ │ │ │ │ └── org/ │ │ │ │ │ │ └── springframework/ │ │ │ │ │ │ └── ai/ │ │ │ │ │ │ └── model/ │ │ │ │ │ │ └── chat/ │ │ │ │ │ │ └── client/ │ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ │ ├── ChatClientAutoConfiguration.java │ │ │ │ │ │ ├── ChatClientBuilderConfigurer.java │ │ │ │ │ │ ├── ChatClientBuilderProperties.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── resources/ │ │ │ │ │ └── META-INF/ │ │ │ │ │ ├── additional-spring-configuration-metadata.json │ │ │ │ │ └── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ └── test/ │ │ │ │ └── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── model/ │ │ │ │ └── chat/ │ │ │ │ └── client/ │ │ │ │ └── autoconfigure/ │ │ │ │ └── ChatClientObservationAutoConfigurationTests.java │ │ │ ├── memory/ │ │ │ │ ├── repository/ │ │ │ │ │ ├── spring-ai-autoconfigure-model-chat-memory-repository-cassandra/ │ │ │ │ │ │ ├── pom.xml │ │ │ │ │ │ └── src/ │ │ │ │ │ │ ├── main/ │ │ │ │ │ │ │ ├── java/ │ │ │ │ │ │ │ │ └── org/ │ │ │ │ │ │ │ │ └── springframework/ │ │ │ │ │ │ │ │ └── ai/ │ │ │ │ │ │ │ │ └── model/ │ │ │ │ │ │ │ │ └── chat/ │ │ │ │ │ │ │ │ └── memory/ │ │ │ │ │ │ │ │ └── repository/ │ │ │ │ │ │ │ │ └── cassandra/ │ │ │ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ │ │ │ ├── CassandraChatMemoryRepositoryAutoConfiguration.java │ │ │ │ │ │ │ │ ├── CassandraChatMemoryRepositoryProperties.java │ │ │ │ │ │ │ │ └── package-info.java │ │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ │ └── META-INF/ │ │ │ │ │ │ │ └── spring/ │ │ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ │ │ └── test/ │ │ │ │ │ │ └── java/ │ │ │ │ │ │ └── org/ │ │ │ │ │ │ └── springframework/ │ │ │ │ │ │ └── ai/ │ │ │ │ │ │ └── model/ │ │ │ │ │ │ └── chat/ │ │ │ │ │ │ └── memory/ │ │ │ │ │ │ └── repository/ │ │ │ │ │ │ └── cassandra/ │ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ │ ├── CassandraChatMemoryRepositoryAutoConfigurationIT.java │ │ │ │ │ │ └── CassandraChatMemoryRepositoryPropertiesTest.java │ │ │ │ │ ├── spring-ai-autoconfigure-model-chat-memory-repository-cosmos-db/ │ │ │ │ │ │ ├── pom.xml │ │ │ │ │ │ └── src/ │ │ │ │ │ │ ├── main/ │ │ │ │ │ │ │ ├── java/ │ │ │ │ │ │ │ │ └── org/ │ │ │ │ │ │ │ │ └── springframework/ │ │ │ │ │ │ │ │ └── ai/ │ │ │ │ │ │ │ │ └── model/ │ │ │ │ │ │ │ │ └── chat/ │ │ │ │ │ │ │ │ └── memory/ │ │ │ │ │ │ │ │ └── repository/ │ │ │ │ │ │ │ │ └── cosmosdb/ │ │ │ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ │ │ │ ├── CosmosDBChatMemoryRepositoryAutoConfiguration.java │ │ │ │ │ │ │ │ ├── CosmosDBChatMemoryRepositoryProperties.java │ │ │ │ │ │ │ │ └── package-info.java │ │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ │ └── META-INF/ │ │ │ │ │ │ │ └── spring/ │ │ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ │ │ └── test/ │ │ │ │ │ │ └── java/ │ │ │ │ │ │ └── org/ │ │ │ │ │ │ └── springframework/ │ │ │ │ │ │ └── ai/ │ │ │ │ │ │ └── model/ │ │ │ │ │ │ └── chat/ │ │ │ │ │ │ └── memory/ │ │ │ │ │ │ └── repository/ │ │ │ │ │ │ └── cosmosdb/ │ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ │ ├── CosmosDBChatMemoryRepositoryAutoConfigurationIT.java │ │ │ │ │ │ └── CosmosDBChatMemoryRepositoryPropertiesTest.java │ │ │ │ │ ├── spring-ai-autoconfigure-model-chat-memory-repository-jdbc/ │ │ │ │ │ │ ├── pom.xml │ │ │ │ │ │ └── src/ │ │ │ │ │ │ ├── main/ │ │ │ │ │ │ │ ├── java/ │ │ │ │ │ │ │ │ └── org/ │ │ │ │ │ │ │ │ └── springframework/ │ │ │ │ │ │ │ │ └── ai/ │ │ │ │ │ │ │ │ └── model/ │ │ │ │ │ │ │ │ └── chat/ │ │ │ │ │ │ │ │ └── memory/ │ │ │ │ │ │ │ │ └── repository/ │ │ │ │ │ │ │ │ └── jdbc/ │ │ │ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ │ │ │ ├── JdbcChatMemoryRepositoryAutoConfiguration.java │ │ │ │ │ │ │ │ ├── JdbcChatMemoryRepositoryProperties.java │ │ │ │ │ │ │ │ ├── JdbcChatMemoryRepositorySchemaInitializer.java │ │ │ │ │ │ │ │ └── package-info.java │ │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ │ └── META-INF/ │ │ │ │ │ │ │ └── spring/ │ │ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ │ │ └── test/ │ │ │ │ │ │ ├── java/ │ │ │ │ │ │ │ └── org/ │ │ │ │ │ │ │ └── springframework/ │ │ │ │ │ │ │ └── ai/ │ │ │ │ │ │ │ └── model/ │ │ │ │ │ │ │ └── chat/ │ │ │ │ │ │ │ └── memory/ │ │ │ │ │ │ │ └── repository/ │ │ │ │ │ │ │ └── jdbc/ │ │ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ │ │ ├── JdbcChatMemoryRepositoryHsqldbAutoConfigurationIT.java │ │ │ │ │ │ │ ├── JdbcChatMemoryRepositoryPostgresqlAutoConfigurationIT.java │ │ │ │ │ │ │ ├── JdbcChatMemoryRepositoryPropertiesTests.java │ │ │ │ │ │ │ ├── JdbcChatMemoryRepositorySchemaInitializerPostgresqlTests.java │ │ │ │ │ │ │ └── JdbcChatMemoryRepositorySqlServerAutoConfigurationIT.java │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ └── schema.sql │ │ │ │ │ ├── spring-ai-autoconfigure-model-chat-memory-repository-mongodb/ │ │ │ │ │ │ ├── pom.xml │ │ │ │ │ │ └── src/ │ │ │ │ │ │ ├── main/ │ │ │ │ │ │ │ ├── java/ │ │ │ │ │ │ │ │ └── org/ │ │ │ │ │ │ │ │ └── springframework/ │ │ │ │ │ │ │ │ └── ai/ │ │ │ │ │ │ │ │ └── model/ │ │ │ │ │ │ │ │ └── chat/ │ │ │ │ │ │ │ │ └── memory/ │ │ │ │ │ │ │ │ └── repository/ │ │ │ │ │ │ │ │ └── mongo/ │ │ │ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ │ │ │ ├── MongoChatMemoryAutoConfiguration.java │ │ │ │ │ │ │ │ ├── MongoChatMemoryIndexCreatorAutoConfiguration.java │ │ │ │ │ │ │ │ ├── MongoChatMemoryProperties.java │ │ │ │ │ │ │ │ └── package-info.java │ │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ │ └── META-INF/ │ │ │ │ │ │ │ └── spring/ │ │ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ │ │ └── test/ │ │ │ │ │ │ └── java/ │ │ │ │ │ │ └── org/ │ │ │ │ │ │ └── springframework/ │ │ │ │ │ │ └── ai/ │ │ │ │ │ │ └── model/ │ │ │ │ │ │ └── chat/ │ │ │ │ │ │ └── memory/ │ │ │ │ │ │ └── repository/ │ │ │ │ │ │ └── mongo/ │ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ │ ├── MongoChatMemoryAutoConfigurationIT.java │ │ │ │ │ │ └── MongoChatMemoryPropertiesTests.java │ │ │ │ │ └── spring-ai-autoconfigure-model-chat-memory-repository-neo4j/ │ │ │ │ │ ├── pom.xml │ │ │ │ │ └── src/ │ │ │ │ │ ├── main/ │ │ │ │ │ │ ├── java/ │ │ │ │ │ │ │ └── org/ │ │ │ │ │ │ │ └── springframework/ │ │ │ │ │ │ │ └── ai/ │ │ │ │ │ │ │ └── model/ │ │ │ │ │ │ │ └── chat/ │ │ │ │ │ │ │ └── memory/ │ │ │ │ │ │ │ └── repository/ │ │ │ │ │ │ │ └── neo4j/ │ │ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ │ │ ├── Neo4jChatMemoryRepositoryAutoConfiguration.java │ │ │ │ │ │ │ ├── Neo4jChatMemoryRepositoryProperties.java │ │ │ │ │ │ │ └── package-info.java │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ └── META-INF/ │ │ │ │ │ │ └── spring/ │ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ │ └── test/ │ │ │ │ │ └── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── springframework/ │ │ │ │ │ └── ai/ │ │ │ │ │ └── model/ │ │ │ │ │ └── chat/ │ │ │ │ │ └── memory/ │ │ │ │ │ └── repository/ │ │ │ │ │ └── neo4j/ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ ├── Neo4JChatMemoryRepositoryPropertiesTest.java │ │ │ │ │ └── Neo4jChatMemoryRepositoryAutoConfigurationIT.java │ │ │ │ ├── spring-ai-autoconfigure-model-chat-memory/ │ │ │ │ │ ├── pom.xml │ │ │ │ │ └── src/ │ │ │ │ │ ├── main/ │ │ │ │ │ │ ├── java/ │ │ │ │ │ │ │ └── org/ │ │ │ │ │ │ │ └── springframework/ │ │ │ │ │ │ │ └── ai/ │ │ │ │ │ │ │ └── model/ │ │ │ │ │ │ │ └── chat/ │ │ │ │ │ │ │ └── memory/ │ │ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ │ │ ├── ChatMemoryAutoConfiguration.java │ │ │ │ │ │ │ └── package-info.java │ │ │ │ │ │ └── resources/ │ │ │ │ │ │ └── META-INF/ │ │ │ │ │ │ └── spring/ │ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ │ └── test/ │ │ │ │ │ └── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── springframework/ │ │ │ │ │ └── ai/ │ │ │ │ │ └── model/ │ │ │ │ │ └── chat/ │ │ │ │ │ └── memory/ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ └── ChatMemoryAutoConfigurationTests.java │ │ │ │ └── spring-ai-autoconfigure-model-chat-memory-redis/ │ │ │ │ ├── pom.xml │ │ │ │ └── src/ │ │ │ │ ├── main/ │ │ │ │ │ ├── java/ │ │ │ │ │ │ └── org/ │ │ │ │ │ │ └── springframework/ │ │ │ │ │ │ └── ai/ │ │ │ │ │ │ └── model/ │ │ │ │ │ │ └── chat/ │ │ │ │ │ │ └── memory/ │ │ │ │ │ │ └── redis/ │ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ │ ├── RedisChatMemoryAutoConfiguration.java │ │ │ │ │ │ ├── RedisChatMemoryProperties.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── resources/ │ │ │ │ │ └── META-INF/ │ │ │ │ │ └── spring/ │ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ │ └── test/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── springframework/ │ │ │ │ │ └── ai/ │ │ │ │ │ └── model/ │ │ │ │ │ └── chat/ │ │ │ │ │ └── memory/ │ │ │ │ │ └── redis/ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ └── RedisChatMemoryAutoConfigurationIT.java │ │ │ │ └── resources/ │ │ │ │ └── logback-test.xml │ │ │ └── observation/ │ │ │ └── spring-ai-autoconfigure-model-chat-observation/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── springframework/ │ │ │ │ │ └── ai/ │ │ │ │ │ └── model/ │ │ │ │ │ └── chat/ │ │ │ │ │ └── observation/ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ ├── ChatObservationAutoConfiguration.java │ │ │ │ │ ├── ChatObservationProperties.java │ │ │ │ │ └── package-info.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── model/ │ │ │ └── chat/ │ │ │ └── observation/ │ │ │ └── autoconfigure/ │ │ │ ├── ChatObservationAutoConfigurationOrderingTests.java │ │ │ └── ChatObservationAutoConfigurationTests.java │ │ ├── embedding/ │ │ │ └── observation/ │ │ │ └── spring-ai-autoconfigure-model-embedding-observation/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── springframework/ │ │ │ │ │ └── ai/ │ │ │ │ │ └── model/ │ │ │ │ │ └── embedding/ │ │ │ │ │ └── observation/ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ ├── EmbeddingObservationAutoConfiguration.java │ │ │ │ │ └── package-info.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── model/ │ │ │ └── embedding/ │ │ │ └── observation/ │ │ │ └── autoconfigure/ │ │ │ └── EmbeddingObservationAutoConfigurationTests.java │ │ ├── image/ │ │ │ └── observation/ │ │ │ └── spring-ai-autoconfigure-model-image-observation/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── springframework/ │ │ │ │ │ └── ai/ │ │ │ │ │ └── model/ │ │ │ │ │ └── image/ │ │ │ │ │ └── observation/ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ ├── ImageObservationAutoConfiguration.java │ │ │ │ │ ├── ImageObservationProperties.java │ │ │ │ │ └── package-info.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── model/ │ │ │ └── image/ │ │ │ └── observation/ │ │ │ └── autoconfigure/ │ │ │ └── ImageObservationAutoConfigurationTests.java │ │ ├── spring-ai-autoconfigure-model-anthropic/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── springframework/ │ │ │ │ │ └── ai/ │ │ │ │ │ └── model/ │ │ │ │ │ └── anthropic/ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ ├── AnthropicChatAutoConfiguration.java │ │ │ │ │ ├── AnthropicChatProperties.java │ │ │ │ │ ├── AnthropicConnectionProperties.java │ │ │ │ │ └── package-info.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── model/ │ │ │ └── anthropic/ │ │ │ └── autoconfigure/ │ │ │ ├── AnthropicChatAutoConfigurationIT.java │ │ │ ├── AnthropicModelConfigurationTests.java │ │ │ ├── AnthropicPropertiesTests.java │ │ │ └── tool/ │ │ │ ├── FunctionCallWithFunctionBeanIT.java │ │ │ ├── FunctionCallWithPromptFunctionIT.java │ │ │ └── MockWeatherService.java │ │ ├── spring-ai-autoconfigure-model-azure-openai/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── springframework/ │ │ │ │ │ └── ai/ │ │ │ │ │ └── model/ │ │ │ │ │ └── azure/ │ │ │ │ │ └── openai/ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ ├── AzureOpenAIClientBuilderCustomizer.java │ │ │ │ │ ├── AzureOpenAiAudioTranscriptionAutoConfiguration.java │ │ │ │ │ ├── AzureOpenAiAudioTranscriptionProperties.java │ │ │ │ │ ├── AzureOpenAiChatAutoConfiguration.java │ │ │ │ │ ├── AzureOpenAiChatProperties.java │ │ │ │ │ ├── AzureOpenAiClientBuilderConfiguration.java │ │ │ │ │ ├── AzureOpenAiConnectionProperties.java │ │ │ │ │ ├── AzureOpenAiEmbeddingAutoConfiguration.java │ │ │ │ │ ├── AzureOpenAiEmbeddingProperties.java │ │ │ │ │ ├── AzureOpenAiImageAutoConfiguration.java │ │ │ │ │ └── AzureOpenAiImageOptionsProperties.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── additional-spring-configuration-metadata.json │ │ │ │ └── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── model/ │ │ │ │ └── azure/ │ │ │ │ └── openai/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── AzureOpenAiAutoConfigurationEntraIT.java │ │ │ │ ├── AzureOpenAiAutoConfigurationIT.java │ │ │ │ ├── AzureOpenAiAutoConfigurationPropertyTests.java │ │ │ │ ├── AzureOpenAiDirectOpenAiAutoConfigurationIT.java │ │ │ │ ├── AzureOpenAiModelConfigurationTests.java │ │ │ │ └── tool/ │ │ │ │ ├── DeploymentNameUtil.java │ │ │ │ ├── FunctionCallWithFunctionBeanIT.java │ │ │ │ ├── FunctionCallWithFunctionWrapperIT.java │ │ │ │ ├── FunctionCallWithPromptFunctionIT.java │ │ │ │ └── MockWeatherService.java │ │ │ └── resources/ │ │ │ └── speech/ │ │ │ └── jfk.flac │ │ ├── spring-ai-autoconfigure-model-bedrock-ai/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── springframework/ │ │ │ │ │ └── ai/ │ │ │ │ │ └── model/ │ │ │ │ │ └── bedrock/ │ │ │ │ │ ├── autoconfigure/ │ │ │ │ │ │ ├── BedrockAwsConnectionConfiguration.java │ │ │ │ │ │ ├── BedrockAwsConnectionProperties.java │ │ │ │ │ │ └── ProfileProperties.java │ │ │ │ │ ├── cohere/ │ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ │ ├── BedrockCohereEmbeddingAutoConfiguration.java │ │ │ │ │ │ └── BedrockCohereEmbeddingProperties.java │ │ │ │ │ ├── converse/ │ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ │ ├── BedrockConverseProxyChatAutoConfiguration.java │ │ │ │ │ │ └── BedrockConverseProxyChatProperties.java │ │ │ │ │ └── titan/ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ ├── BedrockTitanEmbeddingAutoConfiguration.java │ │ │ │ │ └── BedrockTitanEmbeddingProperties.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── model/ │ │ │ └── bedrock/ │ │ │ ├── autoconfigure/ │ │ │ │ ├── BedrockAwsConnectionConfigurationIT.java │ │ │ │ ├── BedrockTestUtils.java │ │ │ │ └── RequiresAwsCredentials.java │ │ │ ├── cohere/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── BedrockCohereEmbeddingAutoConfigurationIT.java │ │ │ │ └── BedrockCohereModelConfigurationTests.java │ │ │ ├── converse/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── BedrockConverseModelConfigurationTests.java │ │ │ │ ├── BedrockConverseProxyChatAutoConfigurationIT.java │ │ │ │ ├── BedrockConverseProxyChatPropertiesTests.java │ │ │ │ └── tool/ │ │ │ │ ├── FunctionCallWithFunctionBeanIT.java │ │ │ │ ├── FunctionCallWithPromptFunctionIT.java │ │ │ │ └── MockWeatherService.java │ │ │ └── titan/ │ │ │ └── autoconfigure/ │ │ │ ├── BedrockTitanEmbeddingAutoConfigurationIT.java │ │ │ └── BedrockTitanModelConfigurationTests.java │ │ ├── spring-ai-autoconfigure-model-deepseek/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── springframework/ │ │ │ │ │ └── ai/ │ │ │ │ │ └── model/ │ │ │ │ │ └── deepseek/ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ ├── DeepSeekChatAutoConfiguration.java │ │ │ │ │ ├── DeepSeekChatProperties.java │ │ │ │ │ ├── DeepSeekConnectionProperties.java │ │ │ │ │ └── DeepSeekParentProperties.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── model/ │ │ │ └── deepseek/ │ │ │ └── autoconfigure/ │ │ │ ├── BaseDeepSeekIT.java │ │ │ ├── DeepSeekAutoConfigurationIT.java │ │ │ ├── DeepSeekPropertiesTests.java │ │ │ └── tool/ │ │ │ ├── DeepSeekFunctionCallbackIT.java │ │ │ ├── FunctionCallbackInPromptIT.java │ │ │ ├── FunctionCallbackWithPlainFunctionBeanIT.java │ │ │ └── MockWeatherService.java │ │ ├── spring-ai-autoconfigure-model-elevenlabs/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── springframework/ │ │ │ │ │ └── ai/ │ │ │ │ │ └── model/ │ │ │ │ │ └── elevenlabs/ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ ├── ElevenLabsAutoConfiguration.java │ │ │ │ │ ├── ElevenLabsConnectionProperties.java │ │ │ │ │ └── ElevenLabsSpeechProperties.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── model/ │ │ │ └── elevenlabs/ │ │ │ └── autoconfigure/ │ │ │ ├── ElevenLabsAutoConfigurationIT.java │ │ │ ├── ElevenLabsITUtil.java │ │ │ └── ElevenLabsPropertiesTests.java │ │ ├── spring-ai-autoconfigure-model-google-genai/ │ │ │ ├── MIGRATION_GUIDE.md │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── springframework/ │ │ │ │ │ └── ai/ │ │ │ │ │ └── model/ │ │ │ │ │ └── google/ │ │ │ │ │ └── genai/ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ ├── chat/ │ │ │ │ │ │ ├── CachedContentServiceCondition.java │ │ │ │ │ │ ├── GoogleGenAiChatAutoConfiguration.java │ │ │ │ │ │ ├── GoogleGenAiChatProperties.java │ │ │ │ │ │ └── GoogleGenAiConnectionProperties.java │ │ │ │ │ └── embedding/ │ │ │ │ │ ├── GoogleGenAiEmbeddingConnectionAutoConfiguration.java │ │ │ │ │ ├── GoogleGenAiEmbeddingConnectionProperties.java │ │ │ │ │ ├── GoogleGenAiTextEmbeddingAutoConfiguration.java │ │ │ │ │ └── GoogleGenAiTextEmbeddingProperties.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── model/ │ │ │ └── google/ │ │ │ └── genai/ │ │ │ └── autoconfigure/ │ │ │ ├── chat/ │ │ │ │ ├── GoogleGenAiCachedContentServiceAutoConfigurationTests.java │ │ │ │ ├── GoogleGenAiChatAutoConfigurationIT.java │ │ │ │ ├── GoogleGenAiModelConfigurationTests.java │ │ │ │ ├── GoogleGenAiPropertiesTests.java │ │ │ │ └── tool/ │ │ │ │ ├── FunctionCallWithFunctionBeanIT.java │ │ │ │ ├── FunctionCallWithFunctionWrapperIT.java │ │ │ │ ├── FunctionCallWithPromptFunctionIT.java │ │ │ │ └── MockWeatherService.java │ │ │ └── embedding/ │ │ │ └── GoogleGenAiTextEmbeddingAutoConfigurationIT.java │ │ ├── spring-ai-autoconfigure-model-minimax/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── springframework/ │ │ │ │ │ └── ai/ │ │ │ │ │ └── model/ │ │ │ │ │ └── minimax/ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ ├── MiniMaxChatAutoConfiguration.java │ │ │ │ │ ├── MiniMaxChatProperties.java │ │ │ │ │ ├── MiniMaxConnectionProperties.java │ │ │ │ │ ├── MiniMaxEmbeddingAutoConfiguration.java │ │ │ │ │ ├── MiniMaxEmbeddingProperties.java │ │ │ │ │ └── MiniMaxParentProperties.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── model/ │ │ │ └── minimax/ │ │ │ └── autoconfigure/ │ │ │ ├── FunctionCallbackInPromptIT.java │ │ │ ├── FunctionCallbackWithPlainFunctionBeanIT.java │ │ │ ├── MiniMaxAutoConfigurationIT.java │ │ │ ├── MiniMaxFunctionCallbackIT.java │ │ │ ├── MiniMaxPropertiesTests.java │ │ │ ├── MinimaxModelConfigurationTests.java │ │ │ └── MockWeatherService.java │ │ ├── spring-ai-autoconfigure-model-mistral-ai/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── springframework/ │ │ │ │ │ └── ai/ │ │ │ │ │ └── model/ │ │ │ │ │ └── mistralai/ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ ├── MistralAiChatAutoConfiguration.java │ │ │ │ │ ├── MistralAiChatProperties.java │ │ │ │ │ ├── MistralAiCommonProperties.java │ │ │ │ │ ├── MistralAiEmbeddingAutoConfiguration.java │ │ │ │ │ ├── MistralAiEmbeddingProperties.java │ │ │ │ │ ├── MistralAiModerationAutoConfiguration.java │ │ │ │ │ ├── MistralAiModerationProperties.java │ │ │ │ │ ├── MistralAiOcrAutoConfiguration.java │ │ │ │ │ ├── MistralAiOcrProperties.java │ │ │ │ │ └── MistralAiParentProperties.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── additional-spring-configuration-metadata.json │ │ │ │ └── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── model/ │ │ │ └── mistralai/ │ │ │ └── autoconfigure/ │ │ │ ├── MistralAiAutoConfigurationIT.java │ │ │ ├── MistralAiOcrAutoConfigurationIT.java │ │ │ ├── MistralAiOcrPropertiesTests.java │ │ │ ├── MistralAiPropertiesTests.java │ │ │ ├── MistralModelConfigurationTests.java │ │ │ └── tool/ │ │ │ ├── PaymentStatusBeanIT.java │ │ │ ├── PaymentStatusBeanOpenAiIT.java │ │ │ ├── PaymentStatusPromptIT.java │ │ │ └── WeatherServicePromptIT.java │ │ ├── spring-ai-autoconfigure-model-ollama/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── springframework/ │ │ │ │ │ └── ai/ │ │ │ │ │ └── model/ │ │ │ │ │ └── ollama/ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ ├── OllamaApiAutoConfiguration.java │ │ │ │ │ ├── OllamaChatAutoConfiguration.java │ │ │ │ │ ├── OllamaChatProperties.java │ │ │ │ │ ├── OllamaConnectionDetails.java │ │ │ │ │ ├── OllamaConnectionProperties.java │ │ │ │ │ ├── OllamaEmbeddingAutoConfiguration.java │ │ │ │ │ ├── OllamaEmbeddingProperties.java │ │ │ │ │ └── OllamaInitializationProperties.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── model/ │ │ │ │ └── ollama/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── BaseOllamaIT.java │ │ │ │ ├── OllamaChatAutoConfigurationIT.java │ │ │ │ ├── OllamaChatAutoConfigurationTests.java │ │ │ │ ├── OllamaEmbeddingAutoConfigurationIT.java │ │ │ │ ├── OllamaEmbeddingAutoConfigurationTests.java │ │ │ │ ├── OllamaImage.java │ │ │ │ ├── OllamaModelConfigurationTests.java │ │ │ │ └── tool/ │ │ │ │ ├── FunctionCallbackInPromptIT.java │ │ │ │ ├── MockWeatherService.java │ │ │ │ ├── OllamaFunctionCallbackIT.java │ │ │ │ └── OllamaFunctionToolBeanIT.java │ │ │ └── kotlin/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── model/ │ │ │ └── ollama/ │ │ │ └── autoconfigure/ │ │ │ └── tool/ │ │ │ ├── FunctionCallbackContextKotlinIT.kt │ │ │ ├── MockKotlinWeatherService.kt │ │ │ └── ToolCallbackKotlinIT.kt │ │ ├── spring-ai-autoconfigure-model-openai/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── springframework/ │ │ │ │ │ └── ai/ │ │ │ │ │ └── model/ │ │ │ │ │ └── openai/ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ ├── OpenAiAudioSpeechAutoConfiguration.java │ │ │ │ │ ├── OpenAiAudioSpeechProperties.java │ │ │ │ │ ├── OpenAiAudioTranscriptionAutoConfiguration.java │ │ │ │ │ ├── OpenAiAudioTranscriptionProperties.java │ │ │ │ │ ├── OpenAiAutoConfigurationUtil.java │ │ │ │ │ ├── OpenAiChatAutoConfiguration.java │ │ │ │ │ ├── OpenAiChatProperties.java │ │ │ │ │ ├── OpenAiConnectionProperties.java │ │ │ │ │ ├── OpenAiEmbeddingAutoConfiguration.java │ │ │ │ │ ├── OpenAiEmbeddingProperties.java │ │ │ │ │ ├── OpenAiImageAutoConfiguration.java │ │ │ │ │ ├── OpenAiImageProperties.java │ │ │ │ │ ├── OpenAiModerationAutoConfiguration.java │ │ │ │ │ ├── OpenAiModerationProperties.java │ │ │ │ │ └── package-info.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ ├── additional-spring-configuration-metadata.json │ │ │ │ └── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── model/ │ │ │ │ └── openai/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── ChatClientAutoConfigurationIT.java │ │ │ │ ├── MockWeatherService.java │ │ │ │ ├── OpenAiAudioSpeechAutoConfigurationIT.java │ │ │ │ ├── OpenAiAudioTranscriptionAutoConfigurationIT.java │ │ │ │ ├── OpenAiAudioTranscriptionPropertiesTests.java │ │ │ │ ├── OpenAiChatAutoConfigurationIT.java │ │ │ │ ├── OpenAiChatPropertiesTests.java │ │ │ │ ├── OpenAiEmbeddingAutoConfigurationIT.java │ │ │ │ ├── OpenAiEmbeddingPropertiesTests.java │ │ │ │ ├── OpenAiFunctionCallback2IT.java │ │ │ │ ├── OpenAiImageAutoConfigurationIT.java │ │ │ │ ├── OpenAiImagePropertiesTests.java │ │ │ │ └── tool/ │ │ │ │ ├── FunctionCallbackInPrompt2IT.java │ │ │ │ ├── FunctionCallbackInPromptIT.java │ │ │ │ ├── FunctionCallbackWithPlainFunctionBeanIT.java │ │ │ │ ├── MockWeatherService.java │ │ │ │ ├── OpenAiFunctionCallback2IT.java │ │ │ │ └── OpenAiFunctionCallbackIT.java │ │ │ └── resources/ │ │ │ ├── speech/ │ │ │ │ └── jfk.flac │ │ │ └── speech.flac │ │ ├── spring-ai-autoconfigure-model-postgresml-embedding/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── springframework/ │ │ │ │ │ └── ai/ │ │ │ │ │ └── model/ │ │ │ │ │ └── postgresml/ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ ├── PostgresMlEmbeddingAutoConfiguration.java │ │ │ │ │ ├── PostgresMlEmbeddingProperties.java │ │ │ │ │ └── package-info.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── model/ │ │ │ └── postgresml/ │ │ │ └── autoconfigure/ │ │ │ ├── PostgresMlEmbeddingAutoConfigurationIT.java │ │ │ └── PostgresMlEmbeddingPropertiesTests.java │ │ ├── spring-ai-autoconfigure-model-stability-ai/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── springframework/ │ │ │ │ │ └── ai/ │ │ │ │ │ └── model/ │ │ │ │ │ └── stabilityai/ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ ├── StabilityAiConnectionProperties.java │ │ │ │ │ ├── StabilityAiImageAutoConfiguration.java │ │ │ │ │ ├── StabilityAiImageProperties.java │ │ │ │ │ └── StabilityAiParentProperties.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── model/ │ │ │ └── stabilityai/ │ │ │ └── autoconfigure/ │ │ │ ├── StabilityAiAutoConfigurationIT.java │ │ │ └── StabilityAiImagePropertiesTests.java │ │ ├── spring-ai-autoconfigure-model-transformers/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── springframework/ │ │ │ │ │ └── ai/ │ │ │ │ │ └── model/ │ │ │ │ │ └── transformers/ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ ├── TransformersEmbeddingModelAutoConfiguration.java │ │ │ │ │ └── TransformersEmbeddingModelProperties.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── model/ │ │ │ └── transformers/ │ │ │ └── autoconfigure/ │ │ │ └── TransformersEmbeddingModelAutoConfigurationIT.java │ │ ├── spring-ai-autoconfigure-model-vertex-ai/ │ │ │ ├── pom.xml │ │ │ └── src/ │ │ │ ├── main/ │ │ │ │ ├── java/ │ │ │ │ │ └── org/ │ │ │ │ │ └── springframework/ │ │ │ │ │ └── ai/ │ │ │ │ │ └── model/ │ │ │ │ │ └── vertexai/ │ │ │ │ │ └── autoconfigure/ │ │ │ │ │ └── embedding/ │ │ │ │ │ ├── VertexAiEmbeddingConnectionAutoConfiguration.java │ │ │ │ │ ├── VertexAiEmbeddingConnectionProperties.java │ │ │ │ │ ├── VertexAiMultiModalEmbeddingAutoConfiguration.java │ │ │ │ │ ├── VertexAiMultimodalEmbeddingProperties.java │ │ │ │ │ ├── VertexAiTextEmbeddingAutoConfiguration.java │ │ │ │ │ └── VertexAiTextEmbeddingProperties.java │ │ │ │ └── resources/ │ │ │ │ └── META-INF/ │ │ │ │ └── spring/ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ │ └── test/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── model/ │ │ │ └── vertexai/ │ │ │ └── autoconfigure/ │ │ │ └── embedding/ │ │ │ └── VertexAiTextEmbeddingModelAutoConfigurationIT.java │ │ └── tool/ │ │ └── spring-ai-autoconfigure-model-tool/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── model/ │ │ │ │ └── tool/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── ToolCallingAutoConfiguration.java │ │ │ │ ├── ToolCallingProperties.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── model/ │ │ └── tool/ │ │ └── autoconfigure/ │ │ └── ToolCallingAutoConfigurationTests.java │ └── vector-stores/ │ ├── spring-ai-autoconfigure-vector-store-azure/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── vectorstore/ │ │ │ │ └── azure/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── AzureVectorStoreAutoConfiguration.java │ │ │ │ ├── AzureVectorStoreProperties.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── azure/ │ │ └── autoconfigure/ │ │ └── AzureVectorStoreAutoConfigurationIT.java │ ├── spring-ai-autoconfigure-vector-store-azure-cosmos-db/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── vectorstore/ │ │ │ │ └── cosmosdb/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── CosmosDBVectorStoreAutoConfiguration.java │ │ │ │ ├── CosmosDBVectorStoreProperties.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── cosmosdb/ │ │ └── autoconfigure/ │ │ └── CosmosDBVectorStoreAutoConfigurationIT.java │ ├── spring-ai-autoconfigure-vector-store-bedrock-knowledgebase/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── vectorstore/ │ │ │ └── bedrockknowledgebase/ │ │ │ └── autoconfigure/ │ │ │ ├── BedrockKnowledgeBaseVectorStoreAutoConfiguration.java │ │ │ ├── BedrockKnowledgeBaseVectorStoreProperties.java │ │ │ └── package-info.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── spring/ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ ├── spring-ai-autoconfigure-vector-store-cassandra/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── vectorstore/ │ │ │ │ └── cassandra/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── CassandraVectorStoreAutoConfiguration.java │ │ │ │ ├── CassandraVectorStoreProperties.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── cassandra/ │ │ └── autoconfigure/ │ │ ├── CassandraVectorStoreAutoConfigurationIT.java │ │ └── CassandraVectorStorePropertiesTests.java │ ├── spring-ai-autoconfigure-vector-store-chroma/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── vectorstore/ │ │ │ │ └── chroma/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── ChromaApiProperties.java │ │ │ │ ├── ChromaConnectionDetails.java │ │ │ │ ├── ChromaVectorStoreAutoConfiguration.java │ │ │ │ ├── ChromaVectorStoreProperties.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── chroma/ │ │ └── autoconfigure/ │ │ └── ChromaVectorStoreAutoConfigurationIT.java │ ├── spring-ai-autoconfigure-vector-store-couchbase/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── vectorstore/ │ │ │ │ └── couchbase/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── CouchbaseSearchVectorStoreAutoConfiguration.java │ │ │ │ ├── CouchbaseSearchVectorStoreProperties.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── couchbase/ │ │ └── autoconfigure/ │ │ ├── CouchbaseContainerMetadata.java │ │ └── CouchbaseSearchVectorStoreAutoConfigurationIT.java │ ├── spring-ai-autoconfigure-vector-store-elasticsearch/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── vectorstore/ │ │ │ │ └── elasticsearch/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── ElasticsearchVectorStoreAutoConfiguration.java │ │ │ │ ├── ElasticsearchVectorStoreProperties.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── elasticsearch/ │ │ └── autoconfigure/ │ │ └── ElasticsearchVectorStoreAutoConfigurationIT.java │ ├── spring-ai-autoconfigure-vector-store-gemfire/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── vectorstore/ │ │ │ │ └── gemfire/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── GemFireConnectionDetails.java │ │ │ │ ├── GemFireVectorStoreAutoConfiguration.java │ │ │ │ ├── GemFireVectorStoreProperties.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ ├── springframework/ │ │ │ └── ai/ │ │ │ └── vectorstore/ │ │ │ └── gemfire/ │ │ │ └── autoconfigure/ │ │ │ ├── GemFireVectorStoreAutoConfigurationAuthenticationIT.java │ │ │ ├── GemFireVectorStoreAutoConfigurationIT.java │ │ │ └── GemFireVectorStorePropertiesTests.java │ │ └── testcontainers/ │ │ └── containers/ │ │ └── FailureDetectingExternalResource.java │ ├── spring-ai-autoconfigure-vector-store-infinispan/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── vectorstore/ │ │ │ │ └── infinispan/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── InfinispanVectorStoreAutoConfiguration.java │ │ │ │ ├── InfinispanVectorStoreProperties.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── infinispan/ │ │ └── autoconfigure/ │ │ └── InfinispanVectorStoreAutoConfigurationIT.java │ ├── spring-ai-autoconfigure-vector-store-mariadb/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── vectorstore/ │ │ │ │ └── mariadb/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── MariaDbStoreAutoConfiguration.java │ │ │ │ ├── MariaDbStoreProperties.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── mariadb/ │ │ └── autoconfigure/ │ │ ├── MariaDbStoreAutoConfigurationIT.java │ │ └── MariaDbStorePropertiesTests.java │ ├── spring-ai-autoconfigure-vector-store-milvus/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── vectorstore/ │ │ │ │ └── milvus/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── MilvusServiceClientConnectionDetails.java │ │ │ │ ├── MilvusServiceClientProperties.java │ │ │ │ ├── MilvusVectorStoreAutoConfiguration.java │ │ │ │ ├── MilvusVectorStoreProperties.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── milvus/ │ │ └── autoconfigure/ │ │ └── MilvusVectorStoreAutoConfigurationIT.java │ ├── spring-ai-autoconfigure-vector-store-mongodb-atlas/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── vectorstore/ │ │ │ │ └── mongodb/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── MongoDBAtlasVectorStoreAutoConfiguration.java │ │ │ │ ├── MongoDBAtlasVectorStoreProperties.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── mongodb/ │ │ └── autoconfigure/ │ │ └── MongoDBAtlasVectorStoreAutoConfigurationIT.java │ ├── spring-ai-autoconfigure-vector-store-neo4j/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── vectorstore/ │ │ │ │ └── neo4j/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── Neo4jVectorStoreAutoConfiguration.java │ │ │ │ ├── Neo4jVectorStoreProperties.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── neo4j/ │ │ └── autoconfigure/ │ │ └── Neo4jVectorStoreAutoConfigurationIT.java │ ├── spring-ai-autoconfigure-vector-store-observation/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── vectorstore/ │ │ │ │ └── observation/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── VectorStoreObservationAutoConfiguration.java │ │ │ │ ├── VectorStoreObservationProperties.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── observation/ │ │ └── autoconfigure/ │ │ └── VectorStoreObservationAutoConfigurationTests.java │ ├── spring-ai-autoconfigure-vector-store-opensearch/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── vectorstore/ │ │ │ │ └── opensearch/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── AwsOpenSearchConnectionDetails.java │ │ │ │ ├── OpenSearchConnectionDetails.java │ │ │ │ ├── OpenSearchNonAwsCondition.java │ │ │ │ ├── OpenSearchVectorStoreAutoConfiguration.java │ │ │ │ ├── OpenSearchVectorStoreProperties.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── opensearch/ │ │ └── autoconfigure/ │ │ ├── AwsOpenSearchVectorStoreAutoConfigurationIT.java │ │ ├── OpenSearchVectorStoreAutoConfigurationIT.java │ │ └── OpenSearchVectorStoreNonAwsFallbackIT.java │ ├── spring-ai-autoconfigure-vector-store-oracle/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── vectorstore/ │ │ │ │ └── oracle/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── OracleVectorStoreAutoConfiguration.java │ │ │ │ ├── OracleVectorStoreProperties.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── vectorstore/ │ │ │ └── oracle/ │ │ │ └── autoconfigure/ │ │ │ ├── OracleVectorStoreAutoConfigurationIT.java │ │ │ └── OracleVectorStorePropertiesTests.java │ │ └── resources/ │ │ └── oracle/ │ │ └── initialize.sql │ ├── spring-ai-autoconfigure-vector-store-pgvector/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── vectorstore/ │ │ │ │ └── pgvector/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── PgVectorStoreAutoConfiguration.java │ │ │ │ ├── PgVectorStoreProperties.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── pgvector/ │ │ └── autoconfigure/ │ │ ├── PgVectorStoreAutoConfigurationIT.java │ │ └── PgVectorStorePropertiesTests.java │ ├── spring-ai-autoconfigure-vector-store-pinecone/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── vectorstore/ │ │ │ │ └── pinecone/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── PineconeVectorStoreAutoConfiguration.java │ │ │ │ ├── PineconeVectorStoreProperties.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── pinecone/ │ │ └── autoconfigure/ │ │ ├── PineconeVectorStoreAutoConfigurationIT.java │ │ └── PineconeVectorStorePropertiesTests.java │ ├── spring-ai-autoconfigure-vector-store-qdrant/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── vectorstore/ │ │ │ │ └── qdrant/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── QdrantConnectionDetails.java │ │ │ │ ├── QdrantVectorStoreAutoConfiguration.java │ │ │ │ ├── QdrantVectorStoreProperties.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── qdrant/ │ │ └── autoconfigure/ │ │ ├── QdrantVectorStoreAutoConfigurationIT.java │ │ ├── QdrantVectorStoreCloudAutoConfigurationIT.java │ │ └── QdrantVectorStorePropertiesTests.java │ ├── spring-ai-autoconfigure-vector-store-redis/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── vectorstore/ │ │ │ │ └── redis/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── RedisVectorStoreAutoConfiguration.java │ │ │ │ ├── RedisVectorStoreProperties.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── redis/ │ │ └── autoconfigure/ │ │ ├── RedisVectorStoreAutoConfigurationIT.java │ │ └── RedisVectorStorePropertiesTests.java │ ├── spring-ai-autoconfigure-vector-store-redis-semantic-cache/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── vectorstore/ │ │ │ │ └── redis/ │ │ │ │ └── cache/ │ │ │ │ └── semantic/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── RedisSemanticCacheAutoConfiguration.java │ │ │ │ ├── RedisSemanticCacheProperties.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── vectorstore/ │ │ │ └── redis/ │ │ │ └── cache/ │ │ │ └── semantic/ │ │ │ └── autoconfigure/ │ │ │ └── RedisSemanticCacheAutoConfigurationIT.java │ │ └── resources/ │ │ └── logback-test.xml │ ├── spring-ai-autoconfigure-vector-store-s3/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── vectorstore/ │ │ │ │ └── s3/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── S3VectorStoreAutoConfiguration.java │ │ │ │ ├── S3VectorStoreProperties.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── azure/ │ │ └── autoconfigure/ │ │ └── S3VectorStoreAutoConfigurationTest.java │ ├── spring-ai-autoconfigure-vector-store-typesense/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── vectorstore/ │ │ │ │ └── typesense/ │ │ │ │ └── autoconfigure/ │ │ │ │ ├── TypesenseConnectionDetails.java │ │ │ │ ├── TypesenseServiceClientProperties.java │ │ │ │ ├── TypesenseVectorStoreAutoConfiguration.java │ │ │ │ ├── TypesenseVectorStoreProperties.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── typesense/ │ │ └── autoconfigure/ │ │ └── TypesenseVectorStoreAutoConfigurationIT.java │ └── spring-ai-autoconfigure-vector-store-weaviate/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── vectorstore/ │ │ │ └── weaviate/ │ │ │ └── autoconfigure/ │ │ │ ├── WeaviateConnectionDetails.java │ │ │ ├── WeaviateVectorStoreAutoConfiguration.java │ │ │ ├── WeaviateVectorStoreProperties.java │ │ │ └── package-info.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── spring/ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports │ └── test/ │ └── java/ │ └── org/ │ └── springframework/ │ └── ai/ │ └── vectorstore/ │ └── weaviate/ │ └── autoconfigure/ │ └── WeaviateVectorStoreAutoConfigurationIT.java ├── design/ │ ├── 00-template.adoc │ └── 01-null-safety.adoc ├── document-readers/ │ ├── jsoup-reader/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── reader/ │ │ │ └── jsoup/ │ │ │ ├── JsoupDocumentReader.java │ │ │ ├── config/ │ │ │ │ ├── JsoupDocumentReaderConfig.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── reader/ │ │ │ └── jsoup/ │ │ │ └── JsoupDocumentReaderTests.java │ │ └── resources/ │ │ ├── test-group-by.html │ │ └── test.html │ ├── markdown-reader/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── reader/ │ │ │ └── markdown/ │ │ │ ├── MarkdownDocumentReader.java │ │ │ ├── config/ │ │ │ │ ├── MarkdownDocumentReaderConfig.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── reader/ │ │ │ └── markdown/ │ │ │ └── MarkdownDocumentReaderTest.java │ │ └── resources/ │ │ ├── blockquote.md │ │ ├── code.md │ │ ├── dir-test-1/ │ │ │ ├── blockquote.md │ │ │ └── blockquote.txt │ │ ├── dir-test-2/ │ │ │ ├── only-headers.md │ │ │ └── with-formatting.md │ │ ├── horizontal-rules.md │ │ ├── lists.md │ │ ├── only-headers.md │ │ ├── simple.md │ │ └── with-formatting.md │ ├── pdf-reader/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── reader/ │ │ │ │ └── pdf/ │ │ │ │ ├── PagePdfDocumentReader.java │ │ │ │ ├── ParagraphPdfDocumentReader.java │ │ │ │ ├── aot/ │ │ │ │ │ ├── PdfReaderRuntimeHints.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── config/ │ │ │ │ │ ├── ParagraphManager.java │ │ │ │ │ ├── PdfDocumentReaderConfig.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── layout/ │ │ │ │ │ ├── Character.java │ │ │ │ │ ├── CharacterFactory.java │ │ │ │ │ ├── ForkPDFLayoutTextStripper.java │ │ │ │ │ ├── PDFLayoutTextStripperByArea.java │ │ │ │ │ ├── TextLine.java │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── aot.factories │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── reader/ │ │ └── pdf/ │ │ ├── PagePdfDocumentReaderTests.java │ │ ├── ParagraphPdfDocumentReaderTests.java │ │ ├── aot/ │ │ │ └── PdfReaderRuntimeHintsTests.java │ │ └── layout/ │ │ └── TextLineTest.java │ └── tika-reader/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── reader/ │ │ └── tika/ │ │ ├── TikaDocumentReader.java │ │ └── package-info.java │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── reader/ │ │ └── tika/ │ │ └── TikaDocumentReaderTests.java │ └── resources/ │ ├── sample.ppt │ ├── sample.pptx │ ├── word-sample.doc │ └── word-sample.docx ├── mcp/ │ ├── common/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── mcp/ │ │ │ │ ├── AsyncMcpToolCallback.java │ │ │ │ ├── AsyncMcpToolCallbackProvider.java │ │ │ │ ├── DefaultMcpToolNamePrefixGenerator.java │ │ │ │ ├── McpConnectionInfo.java │ │ │ │ ├── McpToolFilter.java │ │ │ │ ├── McpToolNamePrefixGenerator.java │ │ │ │ ├── McpToolUtils.java │ │ │ │ ├── McpToolsChangedEvent.java │ │ │ │ ├── SyncMcpToolCallback.java │ │ │ │ ├── SyncMcpToolCallbackProvider.java │ │ │ │ ├── ToolContextToMcpMetaConverter.java │ │ │ │ ├── aot/ │ │ │ │ │ ├── McpHints.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── customizer/ │ │ │ │ │ ├── McpAsyncServerCustomizer.java │ │ │ │ │ ├── McpClientCustomizer.java │ │ │ │ │ ├── McpSyncServerCustomizer.java │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── aot.factories │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── mcp/ │ │ ├── AsyncMcpToolCallbackProviderTests.java │ │ ├── AsyncMcpToolCallbackTest.java │ │ ├── SyncMcpToolCallbackBuilderTest.java │ │ ├── SyncMcpToolCallbackProviderBuilderTest.java │ │ ├── SyncMcpToolCallbackProviderTests.java │ │ ├── SyncMcpToolCallbackTests.java │ │ ├── ToolContextToMcpMetaConverterTest.java │ │ └── ToolUtilsTests.java │ ├── mcp-annotations/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── mcp/ │ │ │ └── annotation/ │ │ │ ├── McpArg.java │ │ │ ├── McpComplete.java │ │ │ ├── McpElicitation.java │ │ │ ├── McpLogging.java │ │ │ ├── McpMeta.java │ │ │ ├── McpProgress.java │ │ │ ├── McpProgressToken.java │ │ │ ├── McpPrompt.java │ │ │ ├── McpPromptListChanged.java │ │ │ ├── McpResource.java │ │ │ ├── McpResourceListChanged.java │ │ │ ├── McpSampling.java │ │ │ ├── McpTool.java │ │ │ ├── McpToolListChanged.java │ │ │ ├── McpToolParam.java │ │ │ ├── adapter/ │ │ │ │ ├── CompleteAdapter.java │ │ │ │ ├── PromptAdapter.java │ │ │ │ ├── ResourceAdapter.java │ │ │ │ └── package-info.java │ │ │ ├── common/ │ │ │ │ ├── ErrorUtils.java │ │ │ │ ├── McpPredicates.java │ │ │ │ ├── MetaUtils.java │ │ │ │ └── package-info.java │ │ │ ├── context/ │ │ │ │ ├── DefaultElicitationSpec.java │ │ │ │ ├── DefaultLoggingSpec.java │ │ │ │ ├── DefaultMcpAsyncRequestContext.java │ │ │ │ ├── DefaultMcpSyncRequestContext.java │ │ │ │ ├── DefaultMetaProvider.java │ │ │ │ ├── DefaultProgressSpec.java │ │ │ │ ├── DefaultSamplingSpec.java │ │ │ │ ├── McpAsyncRequestContext.java │ │ │ │ ├── McpRequestContextTypes.java │ │ │ │ ├── McpSyncRequestContext.java │ │ │ │ ├── MetaProvider.java │ │ │ │ ├── StructuredElicitResult.java │ │ │ │ └── package-info.java │ │ │ ├── method/ │ │ │ │ ├── changed/ │ │ │ │ │ ├── prompt/ │ │ │ │ │ │ ├── AbstractMcpPromptListChangedMethodCallback.java │ │ │ │ │ │ ├── AsyncMcpPromptListChangedMethodCallback.java │ │ │ │ │ │ ├── AsyncPromptListChangedSpecification.java │ │ │ │ │ │ ├── SyncMcpPromptListChangedMethodCallback.java │ │ │ │ │ │ ├── SyncPromptListChangedSpecification.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── resource/ │ │ │ │ │ │ ├── AbstractMcpResourceListChangedMethodCallback.java │ │ │ │ │ │ ├── AsyncMcpResourceListChangedMethodCallback.java │ │ │ │ │ │ ├── AsyncResourceListChangedSpecification.java │ │ │ │ │ │ ├── SyncMcpResourceListChangedMethodCallback.java │ │ │ │ │ │ ├── SyncResourceListChangedSpecification.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── tool/ │ │ │ │ │ ├── AbstractMcpToolListChangedMethodCallback.java │ │ │ │ │ ├── AsyncMcpToolListChangedMethodCallback.java │ │ │ │ │ ├── AsyncToolListChangedSpecification.java │ │ │ │ │ ├── SyncMcpToolListChangedMethodCallback.java │ │ │ │ │ ├── SyncToolListChangedSpecification.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── complete/ │ │ │ │ │ ├── AbstractMcpCompleteMethodCallback.java │ │ │ │ │ ├── AsyncMcpCompleteMethodCallback.java │ │ │ │ │ ├── AsyncStatelessMcpCompleteMethodCallback.java │ │ │ │ │ ├── SyncMcpCompleteMethodCallback.java │ │ │ │ │ ├── SyncStatelessMcpCompleteMethodCallback.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── elicitation/ │ │ │ │ │ ├── AbstractMcpElicitationMethodCallback.java │ │ │ │ │ ├── AsyncElicitationSpecification.java │ │ │ │ │ ├── AsyncMcpElicitationMethodCallback.java │ │ │ │ │ ├── SyncElicitationSpecification.java │ │ │ │ │ ├── SyncMcpElicitationMethodCallback.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── logging/ │ │ │ │ │ ├── AbstractMcpLoggingMethodCallback.java │ │ │ │ │ ├── AsyncLoggingSpecification.java │ │ │ │ │ ├── AsyncMcpLoggingMethodCallback.java │ │ │ │ │ ├── SyncLoggingSpecification.java │ │ │ │ │ ├── SyncMcpLoggingMethodCallback.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── progress/ │ │ │ │ │ ├── AbstractMcpProgressMethodCallback.java │ │ │ │ │ ├── AsyncMcpProgressMethodCallback.java │ │ │ │ │ ├── AsyncProgressSpecification.java │ │ │ │ │ ├── SyncMcpProgressMethodCallback.java │ │ │ │ │ ├── SyncProgressSpecification.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── prompt/ │ │ │ │ │ ├── AbstractMcpPromptMethodCallback.java │ │ │ │ │ ├── AsyncMcpPromptMethodCallback.java │ │ │ │ │ ├── AsyncStatelessMcpPromptMethodCallback.java │ │ │ │ │ ├── SyncMcpPromptMethodCallback.java │ │ │ │ │ ├── SyncStatelessMcpPromptMethodCallback.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── resource/ │ │ │ │ │ ├── AbstractMcpResourceMethodCallback.java │ │ │ │ │ ├── AsyncMcpResourceMethodCallback.java │ │ │ │ │ ├── AsyncStatelessMcpResourceMethodCallback.java │ │ │ │ │ ├── DefaultMcpReadResourceResultConverter.java │ │ │ │ │ ├── McpReadResourceResultConverter.java │ │ │ │ │ ├── SyncMcpResourceMethodCallback.java │ │ │ │ │ ├── SyncStatelessMcpResourceMethodCallback.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── sampling/ │ │ │ │ │ ├── AbstractMcpSamplingMethodCallback.java │ │ │ │ │ ├── AsyncMcpSamplingMethodCallback.java │ │ │ │ │ ├── AsyncSamplingSpecification.java │ │ │ │ │ ├── SyncMcpSamplingMethodCallback.java │ │ │ │ │ ├── SyncSamplingSpecification.java │ │ │ │ │ └── package-info.java │ │ │ │ └── tool/ │ │ │ │ ├── AbstractAsyncMcpToolMethodCallback.java │ │ │ │ ├── AbstractMcpToolMethodCallback.java │ │ │ │ ├── AbstractSyncMcpToolMethodCallback.java │ │ │ │ ├── AsyncMcpToolMethodCallback.java │ │ │ │ ├── AsyncStatelessMcpToolMethodCallback.java │ │ │ │ ├── ReactiveUtils.java │ │ │ │ ├── ReturnMode.java │ │ │ │ ├── SyncMcpToolMethodCallback.java │ │ │ │ ├── SyncStatelessMcpToolMethodCallback.java │ │ │ │ ├── package-info.java │ │ │ │ └── utils/ │ │ │ │ ├── McpJsonParser.java │ │ │ │ ├── McpJsonSchemaGenerator.java │ │ │ │ ├── SpringAiSchemaModule.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ ├── provider/ │ │ │ │ ├── changed/ │ │ │ │ │ ├── prompt/ │ │ │ │ │ │ ├── AsyncMcpPromptListChangedProvider.java │ │ │ │ │ │ ├── SyncMcpPromptListChangedProvider.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── resource/ │ │ │ │ │ │ ├── AsyncMcpResourceListChangedProvider.java │ │ │ │ │ │ ├── SyncMcpResourceListChangedProvider.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── tool/ │ │ │ │ │ ├── AsyncMcpToolListChangedProvider.java │ │ │ │ │ ├── SyncMcpToolListChangedProvider.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── complete/ │ │ │ │ │ ├── AsyncMcpCompleteProvider.java │ │ │ │ │ ├── AsyncStatelessMcpCompleteProvider.java │ │ │ │ │ ├── SyncMcpCompleteProvider.java │ │ │ │ │ ├── SyncStatelessMcpCompleteProvider.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── elicitation/ │ │ │ │ │ ├── AsyncMcpElicitationProvider.java │ │ │ │ │ ├── SyncMcpElicitationProvider.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── logging/ │ │ │ │ │ ├── AsyncMcpLoggingProvider.java │ │ │ │ │ ├── SyncMcpLogginProvider.java │ │ │ │ │ ├── SyncMcpLoggingProvider.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── progress/ │ │ │ │ │ ├── AsyncMcpProgressProvider.java │ │ │ │ │ ├── SyncMcpProgressProvider.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── prompt/ │ │ │ │ │ ├── AsyncMcpPromptProvider.java │ │ │ │ │ ├── AsyncStatelessMcpPromptProvider.java │ │ │ │ │ ├── SyncMcpPromptProvider.java │ │ │ │ │ ├── SyncStatelessMcpPromptProvider.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── resource/ │ │ │ │ │ ├── AsyncMcpResourceProvider.java │ │ │ │ │ ├── AsyncStatelessMcpResourceProvider.java │ │ │ │ │ ├── SyncMcpResourceProvider.java │ │ │ │ │ ├── SyncStatelessMcpResourceProvider.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── sampling/ │ │ │ │ │ ├── AsyncMcpSamplingProvider.java │ │ │ │ │ ├── SyncMcpSamplingProvider.java │ │ │ │ │ └── package-info.java │ │ │ │ └── tool/ │ │ │ │ ├── AbstractMcpToolProvider.java │ │ │ │ ├── AsyncMcpToolProvider.java │ │ │ │ ├── AsyncStatelessMcpToolProvider.java │ │ │ │ ├── SyncMcpToolProvider.java │ │ │ │ ├── SyncStatelessMcpToolProvider.java │ │ │ │ └── package-info.java │ │ │ └── spring/ │ │ │ ├── AbstractClientMcpHandlerRegistry.java │ │ │ ├── AnnotationProviderUtil.java │ │ │ ├── AsyncMcpAnnotationProviders.java │ │ │ ├── ClientMcpAsyncHandlersRegistry.java │ │ │ ├── ClientMcpSyncHandlersRegistry.java │ │ │ ├── SyncMcpAnnotationProviders.java │ │ │ ├── package-info.java │ │ │ └── scan/ │ │ │ ├── AbstractAnnotatedMethodBeanFactoryInitializationAotProcessor.java │ │ │ ├── AbstractAnnotatedMethodBeanPostProcessor.java │ │ │ ├── AbstractMcpAnnotatedBeans.java │ │ │ ├── AnnotatedMethodDiscovery.java │ │ │ └── package-info.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── mcp/ │ │ └── annotation/ │ │ ├── common/ │ │ │ ├── McpPredicatesTests.java │ │ │ └── MetaUtilsTest.java │ │ ├── context/ │ │ │ ├── DefaultLoggingSpecTests.java │ │ │ ├── DefaultMcpAsyncRequestContextTests.java │ │ │ ├── DefaultMcpSyncRequestContextTests.java │ │ │ ├── DefaultMetaProviderTest.java │ │ │ ├── DefaultProgressSpecTests.java │ │ │ └── DefaultSamplingSpecTests.java │ │ ├── method/ │ │ │ ├── changed/ │ │ │ │ ├── prompt/ │ │ │ │ │ ├── AsyncMcpPromptListChangedMethodCallbackTests.java │ │ │ │ │ └── SyncMcpPromptListChangedMethodCallbackTests.java │ │ │ │ ├── resource/ │ │ │ │ │ ├── AsyncMcpResourceListChangedMethodCallbackTests.java │ │ │ │ │ └── SyncMcpResourceListChangedMethodCallbackTests.java │ │ │ │ └── tool/ │ │ │ │ ├── AsyncMcpToolListChangedMethodCallbackTests.java │ │ │ │ └── SyncMcpToolListChangedMethodCallbackTests.java │ │ │ ├── complete/ │ │ │ │ ├── AsyncMcpCompleteMethodCallbackExample.java │ │ │ │ ├── AsyncMcpCompleteMethodCallbackTests.java │ │ │ │ ├── AsyncStatelessMcpCompleteMethodCallbackTests.java │ │ │ │ ├── SyncMcpCompleteMethodCallbackExample.java │ │ │ │ ├── SyncMcpCompleteMethodCallbackTests.java │ │ │ │ └── SyncStatelessMcpCompleteMethodCallbackTests.java │ │ │ ├── elicitation/ │ │ │ │ ├── AsyncMcpElicitationMethodCallbackExample.java │ │ │ │ ├── AsyncMcpElicitationMethodCallbackTests.java │ │ │ │ ├── ElicitationSpecificationTests.java │ │ │ │ ├── ElicitationTestHelper.java │ │ │ │ ├── SyncMcpElicitationMethodCallbackExample.java │ │ │ │ └── SyncMcpElicitationMethodCallbackTests.java │ │ │ ├── logging/ │ │ │ │ ├── AsyncMcpLoggingMethodCallbackExample.java │ │ │ │ ├── AsyncMcpLoggingMethodCallbackTests.java │ │ │ │ ├── SyncMcpLoggingMethodCallbackExample.java │ │ │ │ └── SyncMcpLoggingMethodCallbackTests.java │ │ │ ├── progress/ │ │ │ │ ├── AsyncMcpProgressMethodCallbackExample.java │ │ │ │ ├── AsyncMcpProgressMethodCallbackTests.java │ │ │ │ ├── SyncMcpProgressMethodCallbackExample.java │ │ │ │ └── SyncMcpProgressMethodCallbackTests.java │ │ │ ├── prompt/ │ │ │ │ ├── AsyncMcpPromptMethodCallbackExample.java │ │ │ │ ├── AsyncMcpPromptMethodCallbackTests.java │ │ │ │ ├── AsyncStatelessMcpPromptMethodCallbackTests.java │ │ │ │ ├── SyncMcpPromptMethodCallbackExample.java │ │ │ │ ├── SyncMcpPromptMethodCallbackTests.java │ │ │ │ └── SyncStatelessMcpPromptMethodCallbackTests.java │ │ │ ├── resource/ │ │ │ │ ├── AsyncMcpResourceMethodCallbackTests.java │ │ │ │ ├── AsyncStatelessMcpResourceMethodCallbackTests.java │ │ │ │ ├── DefaultMcpReadResourceResultConverterTests.java │ │ │ │ ├── McpResourceUriValidationTest.java │ │ │ │ ├── SyncMcpResourceMethodCallbackExample.java │ │ │ │ ├── SyncMcpResourceMethodCallbackTests.java │ │ │ │ └── SyncStatelessMcpResourceMethodCallbackTests.java │ │ │ ├── sampling/ │ │ │ │ ├── AsyncMcpSamplingMethodCallbackExample.java │ │ │ │ ├── AsyncMcpSamplingMethodCallbackTests.java │ │ │ │ ├── SamplingTestHelper.java │ │ │ │ ├── SyncMcpSamplingMethodCallbackExample.java │ │ │ │ └── SyncMcpSamplingMethodCallbackTests.java │ │ │ └── tool/ │ │ │ ├── AsyncCallToolRequestSupportTests.java │ │ │ ├── AsyncMcpToolMethodCallbackTests.java │ │ │ ├── AsyncStatelessMcpToolMethodCallbackTests.java │ │ │ ├── CallToolRequestSupportTests.java │ │ │ ├── SyncMcpToolMethodCallbackExceptionHandlingTests.java │ │ │ ├── SyncMcpToolMethodCallbackTests.java │ │ │ └── SyncStatelessMcpToolMethodCallbackTests.java │ │ ├── provider/ │ │ │ ├── changed/ │ │ │ │ ├── prompt/ │ │ │ │ │ ├── AsyncMcpPromptListChangedProviderTests.java │ │ │ │ │ └── SyncMcpPromptListChangedProviderTests.java │ │ │ │ ├── resource/ │ │ │ │ │ ├── AsyncMcpResourceListChangedProviderTests.java │ │ │ │ │ └── SyncMcpResourceListChangedProviderTests.java │ │ │ │ └── tool/ │ │ │ │ ├── AsyncMcpToolListChangedProviderTests.java │ │ │ │ └── SyncMcpToolListChangedProviderTests.java │ │ │ ├── complete/ │ │ │ │ ├── AsyncMcpCompletionProviderTests.java │ │ │ │ ├── AsyncStatelessMcpCompleteProviderTests.java │ │ │ │ ├── SyncMcpCompletionProviderTests.java │ │ │ │ └── SyncStatelessMcpCompleteProviderTests.java │ │ │ ├── elicitation/ │ │ │ │ ├── AsyncMcpElicitationProviderTests.java │ │ │ │ └── SyncMcpElicitationProviderTests.java │ │ │ ├── logging/ │ │ │ │ ├── AsyncMcpLoggingProviderTests.java │ │ │ │ └── SyncMcpLoggingProviderTests.java │ │ │ ├── progress/ │ │ │ │ ├── AsyncMcpProgressProviderTests.java │ │ │ │ └── SyncMcpProgressProviderTests.java │ │ │ ├── prompt/ │ │ │ │ ├── AsyncMcpPromptProviderTests.java │ │ │ │ ├── AsyncStatelessMcpPromptProviderTests.java │ │ │ │ ├── SyncMcpPromptProviderTests.java │ │ │ │ └── SyncStatelessMcpPromptProviderTests.java │ │ │ ├── resource/ │ │ │ │ ├── AsyncMcpResourceProviderTests.java │ │ │ │ ├── AsyncStatelessMcpResourceProviderTests.java │ │ │ │ ├── SyncMcpResourceProviderTests.java │ │ │ │ └── SyncStatelessMcpResourceProviderTests.java │ │ │ ├── sampling/ │ │ │ │ ├── AsyncMcpSamplingProviderTests.java │ │ │ │ └── SyncMcpSamplingProviderTests.java │ │ │ └── tool/ │ │ │ ├── AsyncMcpToolProviderTests.java │ │ │ ├── AsyncStatelessMcpToolProviderTests.java │ │ │ ├── SyncMcpToolProviderTests.java │ │ │ └── SyncStatelessMcpToolProviderTests.java │ │ └── spring/ │ │ ├── AnnotationProviderUtilTests.java │ │ ├── AsyncMcpAnnotationProvidersTests.java │ │ ├── ClientMcpAsyncHandlersRegistryTests.java │ │ ├── ClientMcpSyncHandlersRegistryTests.java │ │ ├── SyncMcpAnnotationProvidersTests.java │ │ └── scan/ │ │ ├── AbstractAnnotatedMethodBeanFactoryInitializationAotProcessorTests.java │ │ ├── AbstractAnnotatedMethodBeanPostProcessorTests.java │ │ ├── AbstractMcpAnnotatedBeansTests.java │ │ └── AnnotatedMethodDiscoveryTests.java │ └── transport/ │ ├── mcp-spring-webflux/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── mcp/ │ │ │ ├── client/ │ │ │ │ └── webflux/ │ │ │ │ └── transport/ │ │ │ │ ├── WebClientStreamableHttpTransport.java │ │ │ │ ├── WebFluxSseClientTransport.java │ │ │ │ └── package-info.java │ │ │ └── server/ │ │ │ └── webflux/ │ │ │ └── transport/ │ │ │ ├── WebFluxSseServerTransportProvider.java │ │ │ ├── WebFluxStatelessServerTransport.java │ │ │ ├── WebFluxStreamableServerTransportProvider.java │ │ │ └── package-info.java │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── mcp/ │ │ │ ├── WebFluxSseIT.java │ │ │ ├── WebFluxStatelessIT.java │ │ │ ├── WebFluxStreamableHttpVersionNegotiationIT.java │ │ │ ├── WebFluxStreamableIT.java │ │ │ ├── client/ │ │ │ │ ├── WebClientStreamableHttpAsyncClientIT.java │ │ │ │ ├── WebClientStreamableHttpSyncClientIT.java │ │ │ │ ├── WebFluxSseMcpAsyncClientIT.java │ │ │ │ ├── WebFluxSseMcpSyncClientIT.java │ │ │ │ ├── _WebClientStreamableHttpAsyncClientResiliencyTests.java_ │ │ │ │ └── webflux/ │ │ │ │ └── transport/ │ │ │ │ ├── WebClientStreamableHttpTransportErrorHandlingIT.java │ │ │ │ ├── WebClientStreamableHttpTransportIT.java │ │ │ │ └── WebFluxSseClientTransportIT.java │ │ │ ├── common/ │ │ │ │ ├── AsyncServerMcpTransportContextIT.java │ │ │ │ └── SyncServerMcpTransportContextIT.java │ │ │ ├── security/ │ │ │ │ └── WebFluxServerTransportSecurityIT.java │ │ │ ├── server/ │ │ │ │ └── webflux/ │ │ │ │ └── transport/ │ │ │ │ ├── WebFluxSseMcpAsyncServerIT.java │ │ │ │ ├── WebFluxSseMcpSyncServerIT.java │ │ │ │ ├── WebFluxStreamableMcpAsyncServerIT.java │ │ │ │ └── WebFluxStreamableMcpSyncServerIT.java │ │ │ └── utils/ │ │ │ ├── McpJsonMapperUtils.java │ │ │ └── McpTestRequestRecordingExchangeFilterFunction.java │ │ └── resources/ │ │ └── logback.xml │ └── mcp-spring-webmvc/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── mcp/ │ │ └── server/ │ │ └── webmvc/ │ │ └── transport/ │ │ ├── HeaderUtils.java │ │ ├── WebMvcSseServerTransportProvider.java │ │ ├── WebMvcStatelessServerTransport.java │ │ ├── WebMvcStreamableServerTransportProvider.java │ │ └── package-info.java │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── mcp/ │ │ ├── common/ │ │ │ └── McpTransportContextIT.java │ │ ├── security/ │ │ │ └── ServerTransportSecurityIT.java │ │ └── server/ │ │ ├── TomcatTestUtil.java │ │ ├── WebMcpStreamableAsyncServerTransportIT.java │ │ ├── WebMcpStreamableSyncServerTransportIT.java │ │ ├── WebMvcSseAsyncServerTransportIT.java │ │ ├── WebMvcSseCustomContextPathIT.java │ │ ├── WebMvcSseIT.java │ │ ├── WebMvcSseSyncServerTransportIT.java │ │ ├── WebMvcStatelessIT.java │ │ ├── WebMvcStreamableIT.java │ │ └── webmvc/ │ │ └── transport/ │ │ ├── HeaderUtilsTests.java │ │ └── WebMvcSseServerTransportProviderIT.java │ └── resources/ │ └── logback.xml ├── mcp-spring-migration-guide.md ├── memory/ │ └── repository/ │ ├── spring-ai-model-chat-memory-repository-cassandra/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── chat/ │ │ │ └── memory/ │ │ │ └── repository/ │ │ │ └── cassandra/ │ │ │ ├── CassandraChatMemoryRepository.java │ │ │ ├── CassandraChatMemoryRepositoryConfig.java │ │ │ ├── SchemaUtil.java │ │ │ └── package-info.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── chat/ │ │ └── memory/ │ │ └── repository/ │ │ └── cassandra/ │ │ ├── CassandraChatMemoryRepositoryIT.java │ │ └── CassandraImage.java │ ├── spring-ai-model-chat-memory-repository-cosmos-db/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── chat/ │ │ │ └── memory/ │ │ │ └── repository/ │ │ │ └── cosmosdb/ │ │ │ ├── CosmosDBChatMemoryRepository.java │ │ │ ├── CosmosDBChatMemoryRepositoryConfig.java │ │ │ └── package-info.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── chat/ │ │ └── memory/ │ │ └── repository/ │ │ └── cosmosdb/ │ │ └── CosmosDBChatMemoryRepositoryIT.java │ ├── spring-ai-model-chat-memory-repository-jdbc/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── chat/ │ │ │ │ └── memory/ │ │ │ │ └── repository/ │ │ │ │ └── jdbc/ │ │ │ │ ├── H2ChatMemoryRepositoryDialect.java │ │ │ │ ├── HsqldbChatMemoryRepositoryDialect.java │ │ │ │ ├── JdbcChatMemoryRepository.java │ │ │ │ ├── JdbcChatMemoryRepositoryDialect.java │ │ │ │ ├── MysqlChatMemoryRepositoryDialect.java │ │ │ │ ├── OracleChatMemoryRepositoryDialect.java │ │ │ │ ├── PostgresChatMemoryRepositoryDialect.java │ │ │ │ ├── SqlServerChatMemoryRepositoryDialect.java │ │ │ │ ├── SqliteChatMemoryRepositoryDialect.java │ │ │ │ ├── aot/ │ │ │ │ │ └── hint/ │ │ │ │ │ ├── JdbcChatMemoryRepositoryRuntimeHints.java │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ ├── META-INF/ │ │ │ │ └── spring/ │ │ │ │ └── aot.factories │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── chat/ │ │ │ └── memory/ │ │ │ └── repository/ │ │ │ └── jdbc/ │ │ │ ├── schema-h2.sql │ │ │ ├── schema-hsqldb.sql │ │ │ ├── schema-mariadb.sql │ │ │ ├── schema-mysql.sql │ │ │ ├── schema-oracle.sql │ │ │ ├── schema-postgresql.sql │ │ │ ├── schema-sqlite.sql │ │ │ └── schema-sqlserver.sql │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── chat/ │ │ │ └── memory/ │ │ │ └── repository/ │ │ │ └── jdbc/ │ │ │ ├── AbstractJdbcChatMemoryRepositoryIT.java │ │ │ ├── JdbcChatMemoryRepositoryBuilderTests.java │ │ │ ├── JdbcChatMemoryRepositoryH2IT.java │ │ │ ├── JdbcChatMemoryRepositoryMariaDbIT.java │ │ │ ├── JdbcChatMemoryRepositoryMysqlIT.java │ │ │ ├── JdbcChatMemoryRepositoryOracleIT.java │ │ │ ├── JdbcChatMemoryRepositoryPostgresqlIT.java │ │ │ ├── JdbcChatMemoryRepositorySqlServerIT.java │ │ │ ├── JdbcChatMemoryRepositorySqliteIT.java │ │ │ └── aot/ │ │ │ └── hint/ │ │ │ └── JdbcChatMemoryRepositoryRuntimeHintsTest.java │ │ └── resources/ │ │ └── container-license-acceptance.txt │ ├── spring-ai-model-chat-memory-repository-mongodb/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── chat/ │ │ │ └── memory/ │ │ │ └── repository/ │ │ │ └── mongo/ │ │ │ ├── Conversation.java │ │ │ ├── MongoChatMemoryRepository.java │ │ │ └── package-info.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── chat/ │ │ └── memory/ │ │ └── repository/ │ │ └── mongo/ │ │ └── MongoChatMemoryRepositoryIT.java │ ├── spring-ai-model-chat-memory-repository-neo4j/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── chat/ │ │ │ └── memory/ │ │ │ └── repository/ │ │ │ └── neo4j/ │ │ │ ├── AttributeGetter.java │ │ │ ├── MediaAttributes.java │ │ │ ├── MessageAttributes.java │ │ │ ├── Neo4jChatMemoryRepository.java │ │ │ ├── Neo4jChatMemoryRepositoryConfig.java │ │ │ ├── ToolCallAttributes.java │ │ │ ├── ToolResponseAttributes.java │ │ │ └── package-info.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── chat/ │ │ └── memory/ │ │ └── repository/ │ │ └── neo4j/ │ │ ├── Neo4JChatMemoryRepositoryConfigIT.java │ │ └── Neo4jChatMemoryRepositoryIT.java │ └── spring-ai-model-chat-memory-repository-redis/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── chat/ │ │ └── memory/ │ │ └── repository/ │ │ └── redis/ │ │ ├── AdvancedRedisChatMemoryRepository.java │ │ ├── RedisChatMemoryConfig.java │ │ ├── RedisChatMemoryRepository.java │ │ └── package-info.java │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── chat/ │ │ └── memory/ │ │ └── repository/ │ │ └── redis/ │ │ ├── RedisChatMemoryAdvancedQueryIT.java │ │ ├── RedisChatMemoryErrorHandlingIT.java │ │ ├── RedisChatMemoryIT.java │ │ ├── RedisChatMemoryMediaIT.java │ │ ├── RedisChatMemoryMessageTypesIT.java │ │ ├── RedisChatMemoryRepositoryIT.java │ │ └── RedisChatMemoryWithSchemaIT.java │ └── resources/ │ ├── application-metadata-schema.yml │ └── logback-test.xml ├── models/ │ ├── spring-ai-anthropic/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── anthropic/ │ │ │ ├── AbstractAnthropicOptions.java │ │ │ ├── AnthropicCacheOptions.java │ │ │ ├── AnthropicCacheStrategy.java │ │ │ ├── AnthropicCacheTtl.java │ │ │ ├── AnthropicChatModel.java │ │ │ ├── AnthropicChatOptions.java │ │ │ ├── AnthropicCitationDocument.java │ │ │ ├── AnthropicServiceTier.java │ │ │ ├── AnthropicSetup.java │ │ │ ├── AnthropicSkill.java │ │ │ ├── AnthropicSkillContainer.java │ │ │ ├── AnthropicSkillRecord.java │ │ │ ├── AnthropicSkillType.java │ │ │ ├── AnthropicSkillsResponseHelper.java │ │ │ ├── AnthropicWebSearchResult.java │ │ │ ├── AnthropicWebSearchTool.java │ │ │ ├── CacheBreakpointTracker.java │ │ │ ├── CacheEligibilityResolver.java │ │ │ ├── Citation.java │ │ │ └── package-info.java │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── anthropic/ │ │ │ ├── AnthropicCacheOptionsTests.java │ │ │ ├── AnthropicChatModelTests.java │ │ │ ├── AnthropicChatOptionsTests.java │ │ │ ├── AnthropicSkillsIT.java │ │ │ ├── AnthropicSkillsResponseHelperTests.java │ │ │ ├── AnthropicTestConfiguration.java │ │ │ ├── CacheEligibilityResolverTests.java │ │ │ └── chat/ │ │ │ ├── AnthropicChatClientIT.java │ │ │ ├── AnthropicChatModelIT.java │ │ │ ├── AnthropicChatModelObservationIT.java │ │ │ ├── AnthropicPromptCachingIT.java │ │ │ └── MockWeatherService.java │ │ └── resources/ │ │ └── prompts/ │ │ ├── conversation-history-cache-prompt.txt │ │ ├── extended-ttl-cache-prompt.txt │ │ ├── system-and-tools-cache-prompt.txt │ │ ├── system-message.st │ │ └── system-only-cache-prompt.txt │ ├── spring-ai-azure-openai/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── azure/ │ │ │ │ └── openai/ │ │ │ │ ├── AzureOpenAiAudioTranscriptionModel.java │ │ │ │ ├── AzureOpenAiAudioTranscriptionOptions.java │ │ │ │ ├── AzureOpenAiChatModel.java │ │ │ │ ├── AzureOpenAiChatOptions.java │ │ │ │ ├── AzureOpenAiEmbeddingModel.java │ │ │ │ ├── AzureOpenAiEmbeddingOptions.java │ │ │ │ ├── AzureOpenAiImageModel.java │ │ │ │ ├── AzureOpenAiImageOptions.java │ │ │ │ ├── AzureOpenAiResponseFormat.java │ │ │ │ ├── MergeUtils.java │ │ │ │ ├── aot/ │ │ │ │ │ └── AzureOpenAiRuntimeHints.java │ │ │ │ └── metadata/ │ │ │ │ ├── AzureOpenAiAudioTranscriptionResponseMetadata.java │ │ │ │ ├── AzureOpenAiImageGenerationMetadata.java │ │ │ │ └── AzureOpenAiImageResponseMetadata.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── aot.factories │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── azure/ │ │ │ └── openai/ │ │ │ ├── AzureChatCompletionsOptionsTests.java │ │ │ ├── AzureEmbeddingsOptionsTests.java │ │ │ ├── AzureOpenAiAudioTranscriptionModelIT.java │ │ │ ├── AzureOpenAiChatClientIT.java │ │ │ ├── AzureOpenAiChatModelIT.java │ │ │ ├── AzureOpenAiChatModelObservationIT.java │ │ │ ├── AzureOpenAiChatOptionsTests.java │ │ │ ├── AzureOpenAiEmbeddingModelIT.java │ │ │ ├── AzureOpenAiEmbeddingModelObservationIT.java │ │ │ ├── MockAiTestConfiguration.java │ │ │ ├── MockAzureOpenAiTestConfiguration.java │ │ │ ├── RequiresAzureCredentials.java │ │ │ ├── aot/ │ │ │ │ └── AzureOpenAiRuntimeHintsTests.java │ │ │ ├── function/ │ │ │ │ ├── AzureOpenAiChatModelFunctionCallIT.java │ │ │ │ └── MockWeatherService.java │ │ │ ├── image/ │ │ │ │ └── AzureOpenAiImageModelIT.java │ │ │ └── metadata/ │ │ │ └── AzureOpenAiChatModelMetadataTests.java │ │ └── resources/ │ │ ├── prompts/ │ │ │ └── system-message.st │ │ └── speech/ │ │ └── jfk.flac │ ├── spring-ai-bedrock/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── bedrock/ │ │ │ │ ├── MessageToPromptConverter.java │ │ │ │ ├── aot/ │ │ │ │ │ └── BedrockRuntimeHints.java │ │ │ │ ├── api/ │ │ │ │ │ └── AbstractBedrockApi.java │ │ │ │ ├── cohere/ │ │ │ │ │ ├── BedrockCohereEmbeddingModel.java │ │ │ │ │ ├── BedrockCohereEmbeddingOptions.java │ │ │ │ │ └── api/ │ │ │ │ │ └── CohereEmbeddingBedrockApi.java │ │ │ │ └── titan/ │ │ │ │ ├── BedrockTitanEmbeddingModel.java │ │ │ │ ├── BedrockTitanEmbeddingOptions.java │ │ │ │ └── api/ │ │ │ │ └── TitanEmbeddingBedrockApi.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── aot.factories │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── bedrock/ │ │ │ ├── RequiresAwsCredentials.java │ │ │ ├── aot/ │ │ │ │ └── BedrockRuntimeHintsTests.java │ │ │ ├── api/ │ │ │ │ └── AbstractBedrockApiTest.java │ │ │ ├── cohere/ │ │ │ │ ├── BedrockCohereEmbeddingModelIT.java │ │ │ │ └── api/ │ │ │ │ └── CohereEmbeddingBedrockApiIT.java │ │ │ └── titan/ │ │ │ ├── BedrockTitanEmbeddingModelIT.java │ │ │ └── api/ │ │ │ └── TitanEmbeddingBedrockApiIT.java │ │ └── resources/ │ │ └── prompts/ │ │ └── system-message.st │ ├── spring-ai-bedrock-converse/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── bedrock/ │ │ │ └── converse/ │ │ │ ├── BedrockChatOptions.java │ │ │ ├── BedrockProxyChatModel.java │ │ │ └── api/ │ │ │ ├── BedrockCacheOptions.java │ │ │ ├── BedrockCacheStrategy.java │ │ │ ├── BedrockMediaFormat.java │ │ │ ├── ConverseApiUtils.java │ │ │ ├── ConverseChatResponseStream.java │ │ │ ├── MediaFetcher.java │ │ │ ├── StreamingToolCallBuilder.java │ │ │ └── URLValidator.java │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── bedrock/ │ │ │ └── converse/ │ │ │ ├── BedrockChatOptionsTests.java │ │ │ ├── BedrockConverseTestConfiguration.java │ │ │ ├── BedrockConverseUsageAggregationTests.java │ │ │ ├── BedrockProxyChatModelIT.java │ │ │ ├── BedrockProxyChatModelObservationIT.java │ │ │ ├── BedrockProxyChatModelTest.java │ │ │ ├── MockWeatherService.java │ │ │ ├── RequiresAwsCredentials.java │ │ │ ├── api/ │ │ │ │ ├── BedrockMediaFormatTest.java │ │ │ │ ├── MediaFetcherTest.java │ │ │ │ └── URLValidatorTest.java │ │ │ ├── client/ │ │ │ │ ├── BedrockConverseChatClientIT.java │ │ │ │ ├── BedrockNovaChatClientIT.java │ │ │ │ └── BedrockNovaToolCallAdvisorIT.java │ │ │ └── experiments/ │ │ │ ├── BedrockConverseChatModelMain.java │ │ │ └── BedrockConverseChatModelMain3.java │ │ └── resources/ │ │ └── prompts/ │ │ └── system-message.st │ ├── spring-ai-deepseek/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── deepseek/ │ │ │ │ ├── DeepSeekAssistantMessage.java │ │ │ │ ├── DeepSeekChatModel.java │ │ │ │ ├── DeepSeekChatOptions.java │ │ │ │ ├── aot/ │ │ │ │ │ ├── DeepSeekRuntimeHints.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── api/ │ │ │ │ │ ├── DeepSeekApi.java │ │ │ │ │ ├── DeepSeekStreamFunctionCallingHelper.java │ │ │ │ │ ├── ResponseFormat.java │ │ │ │ │ ├── common/ │ │ │ │ │ │ ├── DeepSeekConstants.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── aot.factories │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── deepseek/ │ │ │ ├── DeepSeekAssistantMessageTests.java │ │ │ ├── DeepSeekChatCompletionRequestTests.java │ │ │ ├── DeepSeekChatOptionsTests.java │ │ │ ├── DeepSeekRetryTests.java │ │ │ ├── DeepSeekTestConfiguration.java │ │ │ ├── aot/ │ │ │ │ └── DeepSeekRuntimeHintsTests.java │ │ │ ├── api/ │ │ │ │ ├── DeepSeekApiIT.java │ │ │ │ ├── DeepSeekStreamFunctionCallingHelperTest.java │ │ │ │ └── MockWeatherService.java │ │ │ └── chat/ │ │ │ ├── ActorsFilms.java │ │ │ ├── DeepSeekChatModelFunctionCallingIT.java │ │ │ ├── DeepSeekChatModelIT.java │ │ │ └── DeepSeekChatModelObservationIT.java │ │ └── resources/ │ │ └── prompts/ │ │ └── system-message.st │ ├── spring-ai-elevenlabs/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── elevenlabs/ │ │ │ │ ├── ElevenLabsTextToSpeechModel.java │ │ │ │ ├── ElevenLabsTextToSpeechOptions.java │ │ │ │ ├── aot/ │ │ │ │ │ └── ElevenLabsRuntimeHints.java │ │ │ │ └── api/ │ │ │ │ ├── ElevenLabsApi.java │ │ │ │ └── ElevenLabsVoicesApi.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── aot.factories │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── elevenlabs/ │ │ │ ├── ElevenLabsTestConfiguration.java │ │ │ ├── ElevenLabsTextToSpeechModelIT.java │ │ │ ├── ElevenLabsTextToSpeechOptionsTests.java │ │ │ └── api/ │ │ │ ├── ElevenLabsApiIT.java │ │ │ └── ElevenLabsVoicesApiIT.java │ │ └── resources/ │ │ └── voices.json │ ├── spring-ai-google-genai/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── google/ │ │ │ │ └── genai/ │ │ │ │ ├── GoogleGenAiChatModel.java │ │ │ │ ├── GoogleGenAiChatOptions.java │ │ │ │ ├── MimeTypeDetector.java │ │ │ │ ├── aot/ │ │ │ │ │ └── GoogleGenAiRuntimeHints.java │ │ │ │ ├── cache/ │ │ │ │ │ ├── CachedContentRequest.java │ │ │ │ │ ├── CachedContentUpdateRequest.java │ │ │ │ │ ├── GoogleGenAiCachedContent.java │ │ │ │ │ └── GoogleGenAiCachedContentService.java │ │ │ │ ├── common/ │ │ │ │ │ ├── GoogleGenAiConstants.java │ │ │ │ │ ├── GoogleGenAiSafetySetting.java │ │ │ │ │ └── GoogleGenAiThinkingLevel.java │ │ │ │ ├── metadata/ │ │ │ │ │ ├── GoogleGenAiModalityTokenCount.java │ │ │ │ │ ├── GoogleGenAiTrafficType.java │ │ │ │ │ └── GoogleGenAiUsage.java │ │ │ │ └── schema/ │ │ │ │ ├── GoogleGenAiToolCallingManager.java │ │ │ │ └── JsonSchemaConverter.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── aot.factories │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── google/ │ │ │ └── genai/ │ │ │ ├── CreateGeminiRequestTests.java │ │ │ ├── GoogleGenAiChatModelCachedContentTests.java │ │ │ ├── GoogleGenAiChatModelExtendedUsageTests.java │ │ │ ├── GoogleGenAiChatModelIT.java │ │ │ ├── GoogleGenAiChatModelMLDevIT.java │ │ │ ├── GoogleGenAiChatModelObservationApiKeyIT.java │ │ │ ├── GoogleGenAiChatModelObservationIT.java │ │ │ ├── GoogleGenAiChatOptionsTest.java │ │ │ ├── GoogleGenAiRetryTests.java │ │ │ ├── GoogleGenAiThinkingLevelIT.java │ │ │ ├── GoogleGenAiThoughtSignatureLifecycleIT.java │ │ │ ├── MimeTypeDetectorTests.java │ │ │ ├── TestGoogleGenAiCachedContentService.java │ │ │ ├── TestGoogleGenAiGeminiChatModel.java │ │ │ ├── aot/ │ │ │ │ └── GoogleGenAiRuntimeHintsTests.java │ │ │ ├── cache/ │ │ │ │ └── GoogleGenAiCachedContentServiceTests.java │ │ │ ├── client/ │ │ │ │ └── GoogleGenAiToolCallAdvisorIT.java │ │ │ ├── metadata/ │ │ │ │ └── GoogleGenAiUsageTests.java │ │ │ ├── schema/ │ │ │ │ └── JsonSchemaConverterTests.java │ │ │ └── tool/ │ │ │ ├── GoogleGenAiChatModelToolCallingIT.java │ │ │ ├── GoogleGenAiPaymentTransactionIT.java │ │ │ ├── GoogleGenAiPaymentTransactionMethodIT.java │ │ │ ├── GoogleGenAiPaymentTransactionToolsIT.java │ │ │ └── MockWeatherService.java │ │ └── resources/ │ │ └── prompts/ │ │ └── system-message.st │ ├── spring-ai-google-genai-embedding/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── google/ │ │ │ └── genai/ │ │ │ ├── GoogleGenAiEmbeddingConnectionDetails.java │ │ │ └── text/ │ │ │ ├── GoogleGenAiTextEmbeddingModel.java │ │ │ ├── GoogleGenAiTextEmbeddingModelName.java │ │ │ └── GoogleGenAiTextEmbeddingOptions.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── google/ │ │ └── genai/ │ │ └── text/ │ │ ├── GoogleGenAiTextEmbeddingModelIT.java │ │ ├── GoogleGenAiTextEmbeddingModelObservationIT.java │ │ ├── GoogleGenAiTextEmbeddingRetryTests.java │ │ └── TestGoogleGenAiTextEmbeddingModel.java │ ├── spring-ai-minimax/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── minimax/ │ │ │ │ ├── MiniMaxChatModel.java │ │ │ │ ├── MiniMaxChatOptions.java │ │ │ │ ├── MiniMaxEmbeddingModel.java │ │ │ │ ├── MiniMaxEmbeddingOptions.java │ │ │ │ ├── aot/ │ │ │ │ │ └── MiniMaxRuntimeHints.java │ │ │ │ └── api/ │ │ │ │ ├── MiniMaxApi.java │ │ │ │ ├── MiniMaxApiConstants.java │ │ │ │ └── MiniMaxStreamFunctionCallingHelper.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── aot.factories │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── minimax/ │ │ │ ├── ChatCompletionRequestTests.java │ │ │ ├── MiniMaxChatOptionsTests.java │ │ │ ├── MiniMaxTestConfiguration.java │ │ │ ├── api/ │ │ │ │ ├── MiniMaxApiIT.java │ │ │ │ ├── MiniMaxApiToolFunctionCallIT.java │ │ │ │ ├── MiniMaxRetryTests.java │ │ │ │ └── MockWeatherService.java │ │ │ ├── chat/ │ │ │ │ ├── MiniMaxChatModelObservationIT.java │ │ │ │ └── MiniMaxChatOptionsTests.java │ │ │ └── embedding/ │ │ │ ├── EmbeddingIT.java │ │ │ └── MiniMaxEmbeddingModelObservationIT.java │ │ └── resources/ │ │ └── prompts/ │ │ └── system-message.st │ ├── spring-ai-mistral-ai/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── mistralai/ │ │ │ │ ├── MistralAiChatModel.java │ │ │ │ ├── MistralAiChatOptions.java │ │ │ │ ├── MistralAiEmbeddingModel.java │ │ │ │ ├── MistralAiEmbeddingOptions.java │ │ │ │ ├── aot/ │ │ │ │ │ ├── MistralAiRuntimeHints.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── api/ │ │ │ │ │ ├── MistralAiApi.java │ │ │ │ │ ├── MistralAiModerationApi.java │ │ │ │ │ ├── MistralAiStreamFunctionCallingHelper.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── moderation/ │ │ │ │ │ ├── MistralAiModerationModel.java │ │ │ │ │ ├── MistralAiModerationOptions.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── ocr/ │ │ │ │ │ ├── MistralAiOcrOptions.java │ │ │ │ │ ├── MistralOcrApi.java │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── aot.factories │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── mistralai/ │ │ │ ├── MistralAiChatClientIT.java │ │ │ ├── MistralAiChatCompletionRequestTests.java │ │ │ ├── MistralAiChatModelIT.java │ │ │ ├── MistralAiChatModelObservationIT.java │ │ │ ├── MistralAiChatOptionsTests.java │ │ │ ├── MistralAiEmbeddingIT.java │ │ │ ├── MistralAiEmbeddingModelObservationIT.java │ │ │ ├── MistralAiEmbeddingModelTests.java │ │ │ ├── MistralAiModerationModelIT.java │ │ │ ├── MistralAiRetryTests.java │ │ │ ├── MistralAiTestConfiguration.java │ │ │ ├── MockWeatherService.java │ │ │ ├── aot/ │ │ │ │ └── MistralAiRuntimeHintsTests.java │ │ │ ├── api/ │ │ │ │ ├── MistralAiApiIT.java │ │ │ │ └── tool/ │ │ │ │ ├── MistralAiApiToolFunctionCallIT.java │ │ │ │ ├── MockWeatherService.java │ │ │ │ └── PaymentStatusFunctionCallingIT.java │ │ │ └── ocr/ │ │ │ ├── MistralAiOcrOptionsTests.java │ │ │ └── MistralOcrApiIT.java │ │ └── resources/ │ │ └── prompts/ │ │ ├── acme/ │ │ │ └── system-qa.st │ │ ├── eval/ │ │ │ ├── qa-evaluator-accurate-answer.st │ │ │ ├── qa-evaluator-fact-based-answer.st │ │ │ ├── qa-evaluator-not-related-message.st │ │ │ └── user-evaluator-message.st │ │ └── system-message.st │ ├── spring-ai-ollama/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── ollama/ │ │ │ │ ├── OllamaChatModel.java │ │ │ │ ├── OllamaEmbeddingModel.java │ │ │ │ ├── aot/ │ │ │ │ │ ├── OllamaRuntimeHints.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── api/ │ │ │ │ │ ├── OllamaApi.java │ │ │ │ │ ├── OllamaApiHelper.java │ │ │ │ │ ├── OllamaChatOptions.java │ │ │ │ │ ├── OllamaEmbeddingOptions.java │ │ │ │ │ ├── OllamaModel.java │ │ │ │ │ ├── ThinkOption.java │ │ │ │ │ ├── common/ │ │ │ │ │ │ └── OllamaApiConstants.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── management/ │ │ │ │ │ ├── ModelManagementOptions.java │ │ │ │ │ ├── OllamaModelManager.java │ │ │ │ │ ├── PullModelStrategy.java │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── META-INF/ │ │ │ └── spring/ │ │ │ └── aot.factories │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── ollama/ │ │ │ ├── BaseOllamaIT.java │ │ │ ├── OllamaChatModelFunctionCallingIT.java │ │ │ ├── OllamaChatModelIT.java │ │ │ ├── OllamaChatModelMetadataIT.java │ │ │ ├── OllamaChatModelMultimodalIT.java │ │ │ ├── OllamaChatModelObservationIT.java │ │ │ ├── OllamaChatModelTests.java │ │ │ ├── OllamaChatRequestTests.java │ │ │ ├── OllamaEmbeddingModelIT.java │ │ │ ├── OllamaEmbeddingModelObservationIT.java │ │ │ ├── OllamaEmbeddingModelTests.java │ │ │ ├── OllamaEmbeddingOptionsTestsIT.java │ │ │ ├── OllamaEmbeddingRequestTests.java │ │ │ ├── OllamaImage.java │ │ │ ├── OllamaRetryTests.java │ │ │ ├── aot/ │ │ │ │ └── OllamaRuntimeHintsTests.java │ │ │ ├── api/ │ │ │ │ ├── OllamaApiHelperTests.java │ │ │ │ ├── OllamaApiIT.java │ │ │ │ ├── OllamaApiModelsIT.java │ │ │ │ ├── OllamaChatOptionsTests.java │ │ │ │ ├── OllamaDurationFieldsTests.java │ │ │ │ ├── ThinkOptionTests.java │ │ │ │ └── tool/ │ │ │ │ ├── MockWeatherService.java │ │ │ │ └── OllamaApiToolFunctionCallIT.java │ │ │ └── management/ │ │ │ └── OllamaModelManagerIT.java │ │ └── resources/ │ │ ├── country-json-schema.json │ │ └── something.adoc │ ├── spring-ai-openai/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── openai/ │ │ │ ├── AbstractOpenAiOptions.java │ │ │ ├── OpenAiAudioSpeechModel.java │ │ │ ├── OpenAiAudioSpeechOptions.java │ │ │ ├── OpenAiAudioTranscriptionModel.java │ │ │ ├── OpenAiAudioTranscriptionOptions.java │ │ │ ├── OpenAiChatModel.java │ │ │ ├── OpenAiChatOptions.java │ │ │ ├── OpenAiEmbeddingModel.java │ │ │ ├── OpenAiEmbeddingOptions.java │ │ │ ├── OpenAiImageModel.java │ │ │ ├── OpenAiImageOptions.java │ │ │ ├── OpenAiModerationModel.java │ │ │ ├── OpenAiModerationOptions.java │ │ │ ├── metadata/ │ │ │ │ ├── OpenAiAudioSpeechResponseMetadata.java │ │ │ │ ├── OpenAiImageGenerationMetadata.java │ │ │ │ ├── OpenAiImageResponseMetadata.java │ │ │ │ ├── OpenAiRateLimit.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ └── setup/ │ │ │ ├── AzureInternalOpenAiHelper.java │ │ │ ├── OpenAiSetup.java │ │ │ └── package-info.java │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── openai/ │ │ │ ├── OpenAiChatModelTests.java │ │ │ ├── OpenAiExtraBodyTests.java │ │ │ ├── OpenAiTestConfiguration.java │ │ │ ├── acme/ │ │ │ │ └── AcmeIT.java │ │ │ ├── audio/ │ │ │ │ ├── OpenAiAudioSpeechModelIT.java │ │ │ │ ├── OpenAiAudioSpeechModelTests.java │ │ │ │ ├── OpenAiAudioSpeechModelWithResponseMetadataTests.java │ │ │ │ └── transcription/ │ │ │ │ └── TranscriptionModelTests.java │ │ │ ├── chat/ │ │ │ │ ├── ActorsFilms.java │ │ │ │ ├── MockWeatherService.java │ │ │ │ ├── OpenAiChatModelAdditionalHttpHeadersIT.java │ │ │ │ ├── OpenAiChatModelFunctionCallingIT.java │ │ │ │ ├── OpenAiChatModelIT.java │ │ │ │ ├── OpenAiChatModelNoOpApiKeysIT.java │ │ │ │ ├── OpenAiChatModelObservationIT.java │ │ │ │ ├── OpenAiChatModelResponseFormatIT.java │ │ │ │ ├── OpenAiChatModelTypeReferenceBeanOutputConverterIT.java │ │ │ │ ├── OpenAiChatOptionsTests.java │ │ │ │ ├── OpenAiCompatibleChatModelIT.java │ │ │ │ ├── OpenAiExtraBodySerializationTests.java │ │ │ │ ├── OpenAiPaymentTransactionIT.java │ │ │ │ ├── client/ │ │ │ │ │ ├── OpenAiChatClientIT.java │ │ │ │ │ ├── OpenAiChatClientMemoryAdvisorReproIT.java │ │ │ │ │ ├── OpenAiChatClientMethodInvokingFunctionCallbackIT.java │ │ │ │ │ ├── OpenAiChatClientMultipleFunctionCallsIT.java │ │ │ │ │ ├── OpenAiToolCallAdvisorIT.java │ │ │ │ │ └── ReReadingAdvisor.java │ │ │ │ └── proxy/ │ │ │ │ ├── DeepSeekWithOpenAiChatModelIT.java │ │ │ │ ├── DockerModelRunnerWithOpenAiChatModelIT.java │ │ │ │ ├── GroqWithOpenAiChatModelIT.java │ │ │ │ ├── MistralWithOpenAiChatModelIT.java │ │ │ │ ├── NvidiaWithOpenAiChatModelIT.java │ │ │ │ ├── OllamaWithOpenAiChatModelIT.java │ │ │ │ └── PerplexityWithOpenAiChatModelIT.java │ │ │ ├── embedding/ │ │ │ │ ├── EmbeddingIT.java │ │ │ │ ├── OpenAiEmbeddingIT.java │ │ │ │ └── OpenAiEmbeddingModelObservationIT.java │ │ │ ├── image/ │ │ │ │ ├── OpenAiImageModelIT.java │ │ │ │ └── OpenAiImageModelObservationIT.java │ │ │ ├── moderation/ │ │ │ │ ├── OpenAiModerationModelIT.java │ │ │ │ ├── OpenAiModerationModelNoOpApiKeysIT.java │ │ │ │ └── OpenAiModerationModelTests.java │ │ │ ├── setup/ │ │ │ │ └── OpenAiSetupTests.java │ │ │ ├── testutils/ │ │ │ │ └── AbstractIT.java │ │ │ ├── transcription/ │ │ │ │ ├── OpenAiAudioTranscriptionModelIT.java │ │ │ │ └── OpenAiAudioTranscriptionModelTests.java │ │ │ ├── transformer/ │ │ │ │ └── MetadataTransformerIT.java │ │ │ └── vectorstore/ │ │ │ └── SimplePersistentVectorStoreIT.java │ │ └── resources/ │ │ ├── data/ │ │ │ └── acme/ │ │ │ └── bikes.json │ │ ├── prompts/ │ │ │ └── system-message.st │ │ ├── speech.flac │ │ └── text_source.txt │ ├── spring-ai-postgresml/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── postgresml/ │ │ │ ├── PostgresMlEmbeddingModel.java │ │ │ ├── PostgresMlEmbeddingOptions.java │ │ │ └── package-info.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── postgresml/ │ │ ├── PostgresMlEmbeddingModelIT.java │ │ └── PostgresMlEmbeddingOptionsTests.java │ ├── spring-ai-stability-ai/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── stabilityai/ │ │ │ ├── StabilityAiImageGenerationMetadata.java │ │ │ ├── StabilityAiImageModel.java │ │ │ ├── StyleEnum.java │ │ │ ├── api/ │ │ │ │ ├── StabilityAiApi.java │ │ │ │ ├── StabilityAiImageOptions.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ └── test/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── stabilityai/ │ │ ├── StabilityAiApiIT.java │ │ ├── StabilityAiImageModelIT.java │ │ ├── StabilityAiImageOptionsTests.java │ │ └── StabilityAiImageTestConfiguration.java │ ├── spring-ai-transformers/ │ │ ├── README.md │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ ├── java/ │ │ │ │ └── org/ │ │ │ │ └── springframework/ │ │ │ │ └── ai/ │ │ │ │ └── transformers/ │ │ │ │ ├── ResourceCacheService.java │ │ │ │ ├── TransformersEmbeddingModel.java │ │ │ │ └── package-info.java │ │ │ └── resources/ │ │ │ └── onnx/ │ │ │ └── all-MiniLM-L6-v2/ │ │ │ ├── model.onnx │ │ │ └── tokenizer.json │ │ └── test/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── transformers/ │ │ │ ├── ResourceCacheServiceTests.java │ │ │ ├── TransformersEmbeddingModelObservationTests.java │ │ │ ├── TransformersEmbeddingModelTests.java │ │ │ └── samples/ │ │ │ └── ONNXSample.java │ │ └── resources/ │ │ └── Test.py │ └── spring-ai-vertex-ai-embedding/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vertexai/ │ │ └── embedding/ │ │ ├── VertexAiEmbeddingConnectionDetails.java │ │ ├── VertexAiEmbeddingUtils.java │ │ ├── multimodal/ │ │ │ ├── VertexAiMultimodalEmbeddingModel.java │ │ │ ├── VertexAiMultimodalEmbeddingModelName.java │ │ │ └── VertexAiMultimodalEmbeddingOptions.java │ │ └── text/ │ │ ├── VertexAiTextEmbeddingModel.java │ │ ├── VertexAiTextEmbeddingModelName.java │ │ └── VertexAiTextEmbeddingOptions.java │ └── test/ │ └── java/ │ └── org/ │ └── springframework/ │ └── ai/ │ └── vertexai/ │ └── embedding/ │ ├── multimodal/ │ │ └── VertexAiMultimodalEmbeddingModelIT.java │ └── text/ │ ├── TestVertexAiTextEmbeddingModel.java │ ├── VertexAiTextEmbeddingModelIT.java │ ├── VertexAiTextEmbeddingModelObservationIT.java │ └── VertexAiTextEmbeddingRetryTests.java ├── mvnw ├── mvnw.cmd ├── pom.xml ├── settings.xml ├── spring-ai-bom/ │ └── pom.xml ├── spring-ai-client-chat/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── chat/ │ │ │ ├── client/ │ │ │ │ ├── AdvisorParams.java │ │ │ │ ├── ChatClient.java │ │ │ │ ├── ChatClientAttributes.java │ │ │ │ ├── ChatClientCustomizer.java │ │ │ │ ├── ChatClientMessageAggregator.java │ │ │ │ ├── ChatClientRequest.java │ │ │ │ ├── ChatClientResponse.java │ │ │ │ ├── DefaultChatClient.java │ │ │ │ ├── DefaultChatClientBuilder.java │ │ │ │ ├── DefaultChatClientUtils.java │ │ │ │ ├── ResponseEntity.java │ │ │ │ ├── advisor/ │ │ │ │ │ ├── AdvisorUtils.java │ │ │ │ │ ├── ChatModelCallAdvisor.java │ │ │ │ │ ├── ChatModelStreamAdvisor.java │ │ │ │ │ ├── DefaultAroundAdvisorChain.java │ │ │ │ │ ├── LastMaxTokenSizeContentPurger.java │ │ │ │ │ ├── MessageChatMemoryAdvisor.java │ │ │ │ │ ├── PromptChatMemoryAdvisor.java │ │ │ │ │ ├── SafeGuardAdvisor.java │ │ │ │ │ ├── SimpleLoggerAdvisor.java │ │ │ │ │ ├── StructuredOutputValidationAdvisor.java │ │ │ │ │ ├── TOOLCALLADVISOR_STREAMING_DESIGN.md │ │ │ │ │ ├── ToolCallAdvisor.java │ │ │ │ │ ├── api/ │ │ │ │ │ │ ├── Advisor.java │ │ │ │ │ │ ├── AdvisorChain.java │ │ │ │ │ │ ├── BaseAdvisor.java │ │ │ │ │ │ ├── BaseAdvisorChain.java │ │ │ │ │ │ ├── BaseChatMemoryAdvisor.java │ │ │ │ │ │ ├── CallAdvisor.java │ │ │ │ │ │ ├── CallAdvisorChain.java │ │ │ │ │ │ ├── StreamAdvisor.java │ │ │ │ │ │ ├── StreamAdvisorChain.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ ├── observation/ │ │ │ │ │ │ ├── AdvisorObservationContext.java │ │ │ │ │ │ ├── AdvisorObservationConvention.java │ │ │ │ │ │ ├── AdvisorObservationDocumentation.java │ │ │ │ │ │ ├── DefaultAdvisorObservationConvention.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── observation/ │ │ │ │ │ ├── ChatClientCompletionObservationHandler.java │ │ │ │ │ ├── ChatClientObservationContext.java │ │ │ │ │ ├── ChatClientObservationConvention.java │ │ │ │ │ ├── ChatClientObservationDocumentation.java │ │ │ │ │ ├── ChatClientPromptContentObservationHandler.java │ │ │ │ │ ├── DefaultChatClientObservationConvention.java │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ └── evaluation/ │ │ │ ├── FactCheckingEvaluator.java │ │ │ ├── RelevancyEvaluator.java │ │ │ └── package-info.java │ │ └── kotlin/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── chat/ │ │ └── client/ │ │ └── ChatClientExtensions.kt │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ ├── TestConfiguration.java │ │ ├── chat/ │ │ │ ├── client/ │ │ │ │ ├── ChatClientAdvisorTests.java │ │ │ │ ├── ChatClientNativeStructuredResponseTests.java │ │ │ │ ├── ChatClientRequestTests.java │ │ │ │ ├── ChatClientResponseEntityTests.java │ │ │ │ ├── ChatClientResponseTests.java │ │ │ │ ├── ChatClientTests.java │ │ │ │ ├── DefaultChatClientBuilderTests.java │ │ │ │ ├── DefaultChatClientTests.java │ │ │ │ ├── DefaultChatClientUtilsTests.java │ │ │ │ ├── advisor/ │ │ │ │ │ ├── AdvisorUtilsTests.java │ │ │ │ │ ├── AdvisorsTests.java │ │ │ │ │ ├── ChatModelCallAdvisorTests.java │ │ │ │ │ ├── ChatModelStreamAdvisorTests.java │ │ │ │ │ ├── DefaultAroundAdvisorChainTests.java │ │ │ │ │ ├── MessageChatMemoryAdvisorTests.java │ │ │ │ │ ├── PromptChatMemoryAdvisorTests.java │ │ │ │ │ ├── SimpleLoggerAdvisorTests.java │ │ │ │ │ ├── StructuredOutputValidationAdvisorTests.java │ │ │ │ │ ├── ToolCallAdvisorTests.java │ │ │ │ │ └── observation/ │ │ │ │ │ ├── AdvisorObservationContextTests.java │ │ │ │ │ └── DefaultAdvisorObservationConventionTests.java │ │ │ │ └── observation/ │ │ │ │ ├── ChatClientCompletionObservationHandlerTests.java │ │ │ │ ├── ChatClientObservationContextTests.java │ │ │ │ ├── ChatClientPromptContentObservationHandlerTests.java │ │ │ │ └── DefaultChatClientObservationConventionTests.java │ │ │ └── evaluation/ │ │ │ ├── FactCheckingEvaluatorTests.java │ │ │ └── RelevancyEvaluatorTests.java │ │ ├── metadata/ │ │ │ └── PromptMetadataTests.java │ │ └── prompt/ │ │ ├── PromptTemplateTest.java │ │ └── PromptTests.java │ ├── kotlin/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── chat/ │ │ └── client/ │ │ └── ChatClientExtensionsTests.kt │ └── resources/ │ ├── application-logging-test.properties │ ├── bikes.json │ ├── logback.xml │ ├── system-prompt.txt │ ├── text_source.txt │ └── user-prompt.txt ├── spring-ai-commons/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ ├── content/ │ │ │ ├── Content.java │ │ │ ├── Media.java │ │ │ ├── MediaContent.java │ │ │ └── package-info.java │ │ ├── document/ │ │ │ ├── ContentFormatter.java │ │ │ ├── DefaultContentFormatter.java │ │ │ ├── Document.java │ │ │ ├── DocumentMetadata.java │ │ │ ├── DocumentReader.java │ │ │ ├── DocumentTransformer.java │ │ │ ├── DocumentWriter.java │ │ │ ├── MetadataMode.java │ │ │ ├── id/ │ │ │ │ ├── IdGenerator.java │ │ │ │ ├── JdkSha256HexIdGenerator.java │ │ │ │ ├── RandomIdGenerator.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ ├── evaluation/ │ │ │ ├── EvaluationRequest.java │ │ │ ├── EvaluationResponse.java │ │ │ ├── Evaluator.java │ │ │ └── package-info.java │ │ ├── observation/ │ │ │ ├── AiOperationMetadata.java │ │ │ ├── ObservabilityHelper.java │ │ │ ├── TracingAwareLoggingObservationHandler.java │ │ │ ├── conventions/ │ │ │ │ ├── AiObservationAttributes.java │ │ │ │ ├── AiObservationMetricAttributes.java │ │ │ │ ├── AiObservationMetricNames.java │ │ │ │ ├── AiOperationType.java │ │ │ │ ├── AiProvider.java │ │ │ │ ├── AiTokenType.java │ │ │ │ ├── SpringAiKind.java │ │ │ │ ├── VectorStoreObservationAttributes.java │ │ │ │ ├── VectorStoreProvider.java │ │ │ │ ├── VectorStoreSimilarityMetric.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ ├── reader/ │ │ │ ├── EmptyJsonMetadataGenerator.java │ │ │ ├── ExtractedTextFormatter.java │ │ │ ├── JsonMetadataGenerator.java │ │ │ ├── JsonReader.java │ │ │ ├── TextReader.java │ │ │ └── package-info.java │ │ ├── template/ │ │ │ ├── NoOpTemplateRenderer.java │ │ │ ├── TemplateRenderer.java │ │ │ ├── ValidationMode.java │ │ │ └── package-info.java │ │ ├── tokenizer/ │ │ │ ├── JTokkitTokenCountEstimator.java │ │ │ ├── TokenCountEstimator.java │ │ │ └── package-info.java │ │ ├── transformer/ │ │ │ ├── ContentFormatTransformer.java │ │ │ ├── package-info.java │ │ │ └── splitter/ │ │ │ ├── TextSplitter.java │ │ │ ├── TokenTextSplitter.java │ │ │ └── package-info.java │ │ ├── util/ │ │ │ ├── JacksonUtils.java │ │ │ ├── LoggingMarkers.java │ │ │ ├── ParsingUtils.java │ │ │ ├── ResourceUtils.java │ │ │ └── package-info.java │ │ └── writer/ │ │ ├── FileDocumentWriter.java │ │ └── package-info.java │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ ├── TestConfiguration.java │ │ ├── document/ │ │ │ ├── ContentFormatterTests.java │ │ │ ├── DocumentBuilderTests.java │ │ │ ├── DocumentTests.java │ │ │ ├── TextBlockAssertion.java │ │ │ └── id/ │ │ │ ├── IdGeneratorProviderTest.java │ │ │ └── JdkSha256HexIdGeneratorTest.java │ │ ├── observation/ │ │ │ ├── AiOperationMetadataTests.java │ │ │ ├── ObservabilityHelperTests.java │ │ │ ├── TracingAwareLoggingObservationHandlerTests.java │ │ │ └── conventions/ │ │ │ ├── AiOperationTypeTests.java │ │ │ ├── AiProviderTests.java │ │ │ ├── SpringAiKindTests.java │ │ │ └── VectorStoreProviderTests.java │ │ ├── reader/ │ │ │ ├── JsonReaderTests.java │ │ │ └── TextReaderTests.java │ │ ├── template/ │ │ │ └── NoOpTemplateRendererTests.java │ │ ├── transformer/ │ │ │ └── splitter/ │ │ │ ├── TextSplitterTests.java │ │ │ └── TokenTextSplitterTest.java │ │ ├── util/ │ │ │ └── JacksonUtilsTests.java │ │ └── writer/ │ │ └── FileDocumentWriterTest.java │ ├── kotlin/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── utils/ │ │ └── JacksonUtilsKotlinTests.kt │ └── resources/ │ ├── bikes.json │ ├── events.json │ ├── person.json │ └── text_source.txt ├── spring-ai-docs/ │ ├── pom.xml │ └── src/ │ └── main/ │ ├── antora/ │ │ ├── antora-playbook.yml │ │ ├── antora.yml │ │ ├── modules/ │ │ │ └── ROOT/ │ │ │ ├── nav.adoc │ │ │ └── pages/ │ │ │ ├── api/ │ │ │ │ ├── advisors-recursive.adoc │ │ │ │ ├── advisors.adoc │ │ │ │ ├── aimetadata.adoc │ │ │ │ ├── audio/ │ │ │ │ │ ├── speech/ │ │ │ │ │ │ ├── elevenlabs-speech.adoc │ │ │ │ │ │ └── openai-speech.adoc │ │ │ │ │ ├── speech.adoc │ │ │ │ │ ├── transcriptions/ │ │ │ │ │ │ ├── azure-openai-transcriptions.adoc │ │ │ │ │ │ └── openai-transcriptions.adoc │ │ │ │ │ └── transcriptions.adoc │ │ │ │ ├── bedrock-chat.adoc │ │ │ │ ├── bedrock.adoc │ │ │ │ ├── chat/ │ │ │ │ │ ├── anthropic-chat.adoc │ │ │ │ │ ├── azure-openai-chat.adoc │ │ │ │ │ ├── bedrock-converse.adoc │ │ │ │ │ ├── comparison.adoc │ │ │ │ │ ├── deepseek-chat.adoc │ │ │ │ │ ├── dmr-chat.adoc │ │ │ │ │ ├── google-genai-chat.adoc │ │ │ │ │ ├── groq-chat.adoc │ │ │ │ │ ├── minimax-chat.adoc │ │ │ │ │ ├── mistralai-chat.adoc │ │ │ │ │ ├── moonshot-chat.adoc │ │ │ │ │ ├── nvidia-chat.adoc │ │ │ │ │ ├── ollama-chat.adoc │ │ │ │ │ ├── openai-chat.adoc │ │ │ │ │ ├── perplexity-chat.adoc │ │ │ │ │ ├── prompt-engineering-patterns.adoc │ │ │ │ │ └── qianfan-chat.adoc │ │ │ │ ├── chat-memory.adoc │ │ │ │ ├── chatclient.adoc │ │ │ │ ├── chatmodel.adoc │ │ │ │ ├── cloud-bindings.adoc │ │ │ │ ├── docker-compose.adoc │ │ │ │ ├── effective-agents.adoc │ │ │ │ ├── embeddings/ │ │ │ │ │ ├── azure-openai-embeddings.adoc │ │ │ │ │ ├── bedrock-cohere-embedding.adoc │ │ │ │ │ ├── bedrock-titan-embedding.adoc │ │ │ │ │ ├── google-genai-embeddings-text.adoc │ │ │ │ │ ├── minimax-embeddings.adoc │ │ │ │ │ ├── mistralai-embeddings.adoc │ │ │ │ │ ├── ollama-embeddings.adoc │ │ │ │ │ ├── onnx.adoc │ │ │ │ │ ├── openai-embeddings.adoc │ │ │ │ │ ├── postgresml-embeddings.adoc │ │ │ │ │ ├── qianfan-embeddings.adoc │ │ │ │ │ ├── vertexai-embeddings-multimodal.adoc │ │ │ │ │ └── vertexai-embeddings-text.adoc │ │ │ │ ├── embeddings.adoc │ │ │ │ ├── etl-pipeline.adoc │ │ │ │ ├── generic-model.adoc │ │ │ │ ├── image/ │ │ │ │ │ ├── azure-openai-image.adoc │ │ │ │ │ ├── openai-image.adoc │ │ │ │ │ ├── qianfan-image.adoc │ │ │ │ │ └── stabilityai-image.adoc │ │ │ │ ├── imageclient.adoc │ │ │ │ ├── index.adoc │ │ │ │ ├── mcp/ │ │ │ │ │ ├── mcp-annotations-client.adoc │ │ │ │ │ ├── mcp-annotations-examples.adoc │ │ │ │ │ ├── mcp-annotations-overview.adoc │ │ │ │ │ ├── mcp-annotations-server.adoc │ │ │ │ │ ├── mcp-annotations-special-params.adoc │ │ │ │ │ ├── mcp-client-boot-starter-docs.adoc │ │ │ │ │ ├── mcp-helpers.adoc │ │ │ │ │ ├── mcp-overview.adoc │ │ │ │ │ ├── mcp-security.adoc │ │ │ │ │ ├── mcp-server-boot-starter-docs.adoc │ │ │ │ │ ├── mcp-stateless-server-boot-starter-docs.adoc │ │ │ │ │ ├── mcp-stdio-sse-server-boot-starter-docs.adoc │ │ │ │ │ └── mcp-streamable-http-server-boot-starter-docs.adoc │ │ │ │ ├── moderation/ │ │ │ │ │ ├── mistral-ai-moderation.adoc │ │ │ │ │ └── openai-moderation.adoc │ │ │ │ ├── multimodality.adoc │ │ │ │ ├── prompt.adoc │ │ │ │ ├── retrieval-augmented-generation.adoc │ │ │ │ ├── speech.adoc │ │ │ │ ├── structured-output-converter.adoc │ │ │ │ ├── testcontainers.adoc │ │ │ │ ├── testing.adoc │ │ │ │ ├── tools-migration.adoc │ │ │ │ ├── tools.adoc │ │ │ │ ├── transcriptions.adoc │ │ │ │ ├── usage-handling.adoc │ │ │ │ ├── vectordbs/ │ │ │ │ │ ├── apache-cassandra.adoc │ │ │ │ │ ├── azure-cosmos-db.adoc │ │ │ │ │ ├── azure.adoc │ │ │ │ │ ├── bedrock-knowledge-base.adoc │ │ │ │ │ ├── chroma.adoc │ │ │ │ │ ├── coherence.adoc │ │ │ │ │ ├── couchbase.adoc │ │ │ │ │ ├── elasticsearch.adoc │ │ │ │ │ ├── gemfire.adoc │ │ │ │ │ ├── hana.adoc │ │ │ │ │ ├── hanadb-provision-a-trial-account.adoc │ │ │ │ │ ├── mariadb.adoc │ │ │ │ │ ├── milvus.adoc │ │ │ │ │ ├── mongodb.adoc │ │ │ │ │ ├── neo4j.adoc │ │ │ │ │ ├── opensearch.adoc │ │ │ │ │ ├── oracle.adoc │ │ │ │ │ ├── pgvector.adoc │ │ │ │ │ ├── pinecone.adoc │ │ │ │ │ ├── qdrant.adoc │ │ │ │ │ ├── redis.adoc │ │ │ │ │ ├── s3-vector-store.adoc │ │ │ │ │ ├── typesense.adoc │ │ │ │ │ ├── understand-vectordbs.adoc │ │ │ │ │ └── weaviate.adoc │ │ │ │ └── vectordbs.adoc │ │ │ ├── concepts.adoc │ │ │ ├── contribution-guidelines.adoc │ │ │ ├── getting-started.adoc │ │ │ ├── glossary.adoc │ │ │ ├── guides/ │ │ │ │ ├── dynamic-tool-search.adoc │ │ │ │ ├── getting-started-mcp.adoc │ │ │ │ └── llm-as-judge.adoc │ │ │ ├── index.adoc │ │ │ ├── observability/ │ │ │ │ └── index.adoc │ │ │ ├── providers/ │ │ │ │ └── huggingface/ │ │ │ │ └── index.adoc │ │ │ └── upgrade-notes.adoc │ │ └── resources/ │ │ └── antora-resources/ │ │ └── antora.yml │ ├── asciidoc/ │ │ └── mcp.md │ └── javadoc/ │ └── overview.html ├── spring-ai-integration-tests/ │ ├── pom.xml │ └── src/ │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── integration/ │ │ └── tests/ │ │ ├── TestApplication.java │ │ ├── TestcontainersConfiguration.java │ │ ├── client/ │ │ │ └── advisor/ │ │ │ ├── QuestionAnswerAdvisorIT.java │ │ │ ├── QuestionAnswerAdvisorStreamIT.java │ │ │ └── RetrievalAugmentationAdvisorIT.java │ │ ├── rag/ │ │ │ ├── generation/ │ │ │ │ └── augmentation/ │ │ │ │ └── ContextualQueryAugmenterIT.java │ │ │ ├── preretrieval/ │ │ │ │ └── query/ │ │ │ │ ├── expansion/ │ │ │ │ │ └── MultiQueryExpanderIT.java │ │ │ │ └── transformation/ │ │ │ │ ├── CompressionQueryTransformerIT.java │ │ │ │ ├── RewriteQueryTransformerIT.java │ │ │ │ └── TranslationQueryTransformerIT.java │ │ │ └── retrieval/ │ │ │ └── search/ │ │ │ └── VectorStoreDocumentRetrieverIT.java │ │ ├── tool/ │ │ │ ├── FunctionToolCallbackTests.java │ │ │ ├── MethodToolCallbackTests.java │ │ │ ├── ToolCallingManagerTests.java │ │ │ └── domain/ │ │ │ ├── Author.java │ │ │ ├── Book.java │ │ │ └── BookService.java │ │ └── vectorstore/ │ │ └── SimpleVectorStoreIT.java │ └── resources/ │ ├── application.yml │ └── documents/ │ └── knowledge-base.md ├── spring-ai-model/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ ├── aot/ │ │ │ │ ├── AiRuntimeHints.java │ │ │ │ ├── KnuddelsRuntimeHints.java │ │ │ │ ├── SpringAiCoreRuntimeHints.java │ │ │ │ ├── ToolBeanRegistrationAotProcessor.java │ │ │ │ ├── ToolRuntimeHints.java │ │ │ │ └── package-info.java │ │ │ ├── audio/ │ │ │ │ ├── transcription/ │ │ │ │ │ ├── AudioTranscription.java │ │ │ │ │ ├── AudioTranscriptionMetadata.java │ │ │ │ │ ├── AudioTranscriptionOptions.java │ │ │ │ │ ├── AudioTranscriptionPrompt.java │ │ │ │ │ ├── AudioTranscriptionResponse.java │ │ │ │ │ ├── AudioTranscriptionResponseMetadata.java │ │ │ │ │ ├── TranscriptionModel.java │ │ │ │ │ └── package-info.java │ │ │ │ └── tts/ │ │ │ │ ├── DefaultTextToSpeechOptions.java │ │ │ │ ├── Speech.java │ │ │ │ ├── StreamingTextToSpeechModel.java │ │ │ │ ├── TextToSpeechMessage.java │ │ │ │ ├── TextToSpeechModel.java │ │ │ │ ├── TextToSpeechOptions.java │ │ │ │ ├── TextToSpeechPrompt.java │ │ │ │ ├── TextToSpeechResponse.java │ │ │ │ ├── TextToSpeechResponseMetadata.java │ │ │ │ └── package-info.java │ │ │ ├── chat/ │ │ │ │ ├── memory/ │ │ │ │ │ ├── ChatMemory.java │ │ │ │ │ ├── ChatMemoryRepository.java │ │ │ │ │ ├── InMemoryChatMemoryRepository.java │ │ │ │ │ ├── MessageWindowChatMemory.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── messages/ │ │ │ │ │ ├── AbstractMessage.java │ │ │ │ │ ├── AssistantMessage.java │ │ │ │ │ ├── Message.java │ │ │ │ │ ├── MessageType.java │ │ │ │ │ ├── MessageUtils.java │ │ │ │ │ ├── SystemMessage.java │ │ │ │ │ ├── ToolResponseMessage.java │ │ │ │ │ ├── UserMessage.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── metadata/ │ │ │ │ │ ├── ChatGenerationMetadata.java │ │ │ │ │ ├── ChatResponseMetadata.java │ │ │ │ │ ├── DefaultChatGenerationMetadata.java │ │ │ │ │ ├── DefaultChatGenerationMetadataBuilder.java │ │ │ │ │ ├── DefaultUsage.java │ │ │ │ │ ├── EmptyRateLimit.java │ │ │ │ │ ├── EmptyUsage.java │ │ │ │ │ ├── PromptMetadata.java │ │ │ │ │ ├── RateLimit.java │ │ │ │ │ ├── Usage.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── model/ │ │ │ │ │ ├── ChatModel.java │ │ │ │ │ ├── ChatResponse.java │ │ │ │ │ ├── Generation.java │ │ │ │ │ ├── MessageAggregator.java │ │ │ │ │ ├── StreamingChatModel.java │ │ │ │ │ ├── ToolContext.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── observation/ │ │ │ │ │ ├── ChatModelCompletionObservationHandler.java │ │ │ │ │ ├── ChatModelMeterObservationHandler.java │ │ │ │ │ ├── ChatModelObservationContext.java │ │ │ │ │ ├── ChatModelObservationConvention.java │ │ │ │ │ ├── ChatModelObservationDocumentation.java │ │ │ │ │ ├── ChatModelPromptContentObservationHandler.java │ │ │ │ │ ├── DefaultChatModelObservationConvention.java │ │ │ │ │ └── package-info.java │ │ │ │ └── prompt/ │ │ │ │ ├── AssistantPromptTemplate.java │ │ │ │ ├── ChatOptions.java │ │ │ │ ├── ChatPromptTemplate.java │ │ │ │ ├── DefaultChatOptions.java │ │ │ │ ├── DefaultChatOptionsBuilder.java │ │ │ │ ├── Prompt.java │ │ │ │ ├── PromptTemplate.java │ │ │ │ ├── PromptTemplateActions.java │ │ │ │ ├── PromptTemplateChatActions.java │ │ │ │ ├── PromptTemplateMessageActions.java │ │ │ │ ├── PromptTemplateStringActions.java │ │ │ │ ├── SystemPromptTemplate.java │ │ │ │ └── package-info.java │ │ │ ├── converter/ │ │ │ │ ├── AbstractConversionServiceOutputConverter.java │ │ │ │ ├── AbstractMessageOutputConverter.java │ │ │ │ ├── BeanOutputConverter.java │ │ │ │ ├── CompositeResponseTextCleaner.java │ │ │ │ ├── FormatProvider.java │ │ │ │ ├── ListOutputConverter.java │ │ │ │ ├── MapOutputConverter.java │ │ │ │ ├── MarkdownCodeBlockCleaner.java │ │ │ │ ├── ResponseTextCleaner.java │ │ │ │ ├── StructuredOutputConverter.java │ │ │ │ ├── ThinkingTagCleaner.java │ │ │ │ ├── WhitespaceCleaner.java │ │ │ │ └── package-info.java │ │ │ ├── embedding/ │ │ │ │ ├── AbstractEmbeddingModel.java │ │ │ │ ├── BatchingStrategy.java │ │ │ │ ├── DefaultEmbeddingOptions.java │ │ │ │ ├── DefaultEmbeddingOptionsBuilder.java │ │ │ │ ├── DocumentEmbeddingModel.java │ │ │ │ ├── DocumentEmbeddingRequest.java │ │ │ │ ├── Embedding.java │ │ │ │ ├── EmbeddingModel.java │ │ │ │ ├── EmbeddingOptions.java │ │ │ │ ├── EmbeddingRequest.java │ │ │ │ ├── EmbeddingResponse.java │ │ │ │ ├── EmbeddingResponseMetadata.java │ │ │ │ ├── EmbeddingResultMetadata.java │ │ │ │ ├── TokenCountBatchingStrategy.java │ │ │ │ ├── observation/ │ │ │ │ │ ├── DefaultEmbeddingModelObservationConvention.java │ │ │ │ │ ├── EmbeddingModelMeterObservationHandler.java │ │ │ │ │ ├── EmbeddingModelObservationContext.java │ │ │ │ │ ├── EmbeddingModelObservationConvention.java │ │ │ │ │ ├── EmbeddingModelObservationDocumentation.java │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ ├── image/ │ │ │ │ ├── Image.java │ │ │ │ ├── ImageGeneration.java │ │ │ │ ├── ImageGenerationMetadata.java │ │ │ │ ├── ImageMessage.java │ │ │ │ ├── ImageModel.java │ │ │ │ ├── ImageOptions.java │ │ │ │ ├── ImageOptionsBuilder.java │ │ │ │ ├── ImagePrompt.java │ │ │ │ ├── ImageResponse.java │ │ │ │ ├── ImageResponseMetadata.java │ │ │ │ ├── observation/ │ │ │ │ │ ├── DefaultImageModelObservationConvention.java │ │ │ │ │ ├── ImageModelObservationContext.java │ │ │ │ │ ├── ImageModelObservationConvention.java │ │ │ │ │ ├── ImageModelObservationDocumentation.java │ │ │ │ │ ├── ImageModelPromptContentObservationHandler.java │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ ├── model/ │ │ │ │ ├── AbstractResponseMetadata.java │ │ │ │ ├── ApiKey.java │ │ │ │ ├── ChatModelDescription.java │ │ │ │ ├── EmbeddingModelDescription.java │ │ │ │ ├── EmbeddingUtils.java │ │ │ │ ├── KotlinModule.java │ │ │ │ ├── Model.java │ │ │ │ ├── ModelDescription.java │ │ │ │ ├── ModelOptions.java │ │ │ │ ├── ModelOptionsUtils.java │ │ │ │ ├── ModelRequest.java │ │ │ │ ├── ModelResponse.java │ │ │ │ ├── ModelResult.java │ │ │ │ ├── MutableResponseMetadata.java │ │ │ │ ├── NoopApiKey.java │ │ │ │ ├── ResponseMetadata.java │ │ │ │ ├── ResultMetadata.java │ │ │ │ ├── SimpleApiKey.java │ │ │ │ ├── SpringAIModelProperties.java │ │ │ │ ├── SpringAIModels.java │ │ │ │ ├── StreamingModel.java │ │ │ │ ├── observation/ │ │ │ │ │ ├── ErrorLoggingObservationHandler.java │ │ │ │ │ ├── ModelObservationContext.java │ │ │ │ │ ├── ModelUsageMetricsGenerator.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── package-info.java │ │ │ │ ├── tool/ │ │ │ │ │ ├── DefaultToolCallingChatOptions.java │ │ │ │ │ ├── DefaultToolCallingManager.java │ │ │ │ │ ├── DefaultToolExecutionEligibilityPredicate.java │ │ │ │ │ ├── DefaultToolExecutionResult.java │ │ │ │ │ ├── StructuredOutputChatOptions.java │ │ │ │ │ ├── ToolCallingChatOptions.java │ │ │ │ │ ├── ToolCallingManager.java │ │ │ │ │ ├── ToolExecutionEligibilityChecker.java │ │ │ │ │ ├── ToolExecutionEligibilityPredicate.java │ │ │ │ │ ├── ToolExecutionResult.java │ │ │ │ │ ├── internal/ │ │ │ │ │ │ ├── ToolCallReactiveContextHolder.java │ │ │ │ │ │ └── package-info.java │ │ │ │ │ └── package-info.java │ │ │ │ └── transformer/ │ │ │ │ ├── KeywordMetadataEnricher.java │ │ │ │ ├── SummaryMetadataEnricher.java │ │ │ │ └── package-info.java │ │ │ ├── moderation/ │ │ │ │ ├── Categories.java │ │ │ │ ├── CategoryScores.java │ │ │ │ ├── Generation.java │ │ │ │ ├── Moderation.java │ │ │ │ ├── ModerationGenerationMetadata.java │ │ │ │ ├── ModerationMessage.java │ │ │ │ ├── ModerationModel.java │ │ │ │ ├── ModerationOptions.java │ │ │ │ ├── ModerationOptionsBuilder.java │ │ │ │ ├── ModerationPrompt.java │ │ │ │ ├── ModerationResponse.java │ │ │ │ ├── ModerationResponseMetadata.java │ │ │ │ ├── ModerationResult.java │ │ │ │ └── package-info.java │ │ │ ├── support/ │ │ │ │ ├── ToolCallbacks.java │ │ │ │ ├── UsageCalculator.java │ │ │ │ └── package-info.java │ │ │ ├── tool/ │ │ │ │ ├── StaticToolCallbackProvider.java │ │ │ │ ├── ToolCallback.java │ │ │ │ ├── ToolCallbackProvider.java │ │ │ │ ├── annotation/ │ │ │ │ │ ├── Tool.java │ │ │ │ │ ├── ToolParam.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── augment/ │ │ │ │ │ ├── AugmentedArgumentEvent.java │ │ │ │ │ ├── AugmentedToolCallback.java │ │ │ │ │ ├── AugmentedToolCallbackProvider.java │ │ │ │ │ ├── ToolInputSchemaAugmenter.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── definition/ │ │ │ │ │ ├── DefaultToolDefinition.java │ │ │ │ │ ├── ToolDefinition.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── execution/ │ │ │ │ │ ├── DefaultToolCallResultConverter.java │ │ │ │ │ ├── DefaultToolExecutionExceptionProcessor.java │ │ │ │ │ ├── ToolCallResultConverter.java │ │ │ │ │ ├── ToolExecutionException.java │ │ │ │ │ ├── ToolExecutionExceptionProcessor.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── function/ │ │ │ │ │ ├── FunctionToolCallback.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── metadata/ │ │ │ │ │ ├── DefaultToolMetadata.java │ │ │ │ │ ├── ToolMetadata.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── method/ │ │ │ │ │ ├── MethodToolCallback.java │ │ │ │ │ ├── MethodToolCallbackProvider.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── observation/ │ │ │ │ │ ├── DefaultToolCallingObservationConvention.java │ │ │ │ │ ├── ToolCallingContentObservationFilter.java │ │ │ │ │ ├── ToolCallingObservationContext.java │ │ │ │ │ ├── ToolCallingObservationConvention.java │ │ │ │ │ ├── ToolCallingObservationDocumentation.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── package-info.java │ │ │ │ ├── resolution/ │ │ │ │ │ ├── DelegatingToolCallbackResolver.java │ │ │ │ │ ├── SpringBeanToolCallbackResolver.java │ │ │ │ │ ├── StaticToolCallbackResolver.java │ │ │ │ │ ├── ToolCallbackResolver.java │ │ │ │ │ ├── TypeResolverHelper.java │ │ │ │ │ └── package-info.java │ │ │ │ └── support/ │ │ │ │ ├── ToolDefinitions.java │ │ │ │ ├── ToolUtils.java │ │ │ │ └── package-info.java │ │ │ └── util/ │ │ │ └── json/ │ │ │ ├── JsonParser.java │ │ │ ├── package-info.java │ │ │ └── schema/ │ │ │ ├── JsonSchemaGenerator.java │ │ │ ├── JsonSchemaUtils.java │ │ │ ├── SchemaType.java │ │ │ ├── SpringAiSchemaModule.java │ │ │ └── package-info.java │ │ └── resources/ │ │ ├── META-INF/ │ │ │ └── spring/ │ │ │ └── aot.factories │ │ └── embedding/ │ │ └── embedding-model-dimensions.properties │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ ├── aot/ │ │ │ ├── AiRuntimeHintsTests.java │ │ │ ├── KnuddelsRuntimeHintsTest.java │ │ │ ├── SpringAiCoreRuntimeHintsTest.java │ │ │ ├── SpringAiCoreRuntimeHintsTests.java │ │ │ ├── ToolBeanRegistrationAotProcessorTests.java │ │ │ └── ToolRuntimeHintsTests.java │ │ ├── audio/ │ │ │ └── tts/ │ │ │ ├── DefaultTextToSpeechOptionsTests.java │ │ │ └── TextToSpeechModelTests.java │ │ ├── chat/ │ │ │ ├── ChatModelTests.java │ │ │ ├── memory/ │ │ │ │ ├── InMemoryChatMemoryRepositoryTests.java │ │ │ │ └── MessageWindowChatMemoryTests.java │ │ │ ├── messages/ │ │ │ │ ├── AssistantMessageTests.java │ │ │ │ ├── MessageUtilsTests.java │ │ │ │ ├── SystemMessageTests.java │ │ │ │ └── UserMessageTests.java │ │ │ ├── metadata/ │ │ │ │ └── DefaultUsageTests.java │ │ │ ├── model/ │ │ │ │ ├── ChatResponseTests.java │ │ │ │ └── GenerationTests.java │ │ │ ├── observation/ │ │ │ │ ├── ChatModelCompletionObservationHandlerTests.java │ │ │ │ ├── ChatModelMeterObservationHandlerTests.java │ │ │ │ ├── ChatModelObservationContextTests.java │ │ │ │ ├── ChatModelPromptContentObservationHandlerTests.java │ │ │ │ └── DefaultChatModelObservationConventionTests.java │ │ │ └── prompt/ │ │ │ ├── ChatOptionsBuilderTests.java │ │ │ ├── PromptTemplateBuilderTests.java │ │ │ ├── PromptTemplateTests.java │ │ │ ├── PromptTests.java │ │ │ └── SystemPromptTemplateTests.java │ │ ├── converter/ │ │ │ ├── BeanOutputConverterTest.java │ │ │ ├── CompositeResponseTextCleanerTest.java │ │ │ ├── ListOutputConverterTest.java │ │ │ └── ThinkingTagCleanerTest.java │ │ ├── embedding/ │ │ │ ├── AbstractEmbeddingModelTests.java │ │ │ ├── TokenCountBatchingStrategyTests.java │ │ │ └── observation/ │ │ │ ├── DefaultEmbeddingModelObservationConventionTests.java │ │ │ ├── EmbeddingModelMeterObservationHandlerTests.java │ │ │ └── EmbeddingModelObservationContextTests.java │ │ ├── image/ │ │ │ └── observation/ │ │ │ ├── DefaultImageModelObservationConventionTests.java │ │ │ ├── ImageModelObservationContextTests.java │ │ │ └── ImageModelPromptContentObservationHandlerTests.java │ │ ├── metadata/ │ │ │ └── UsageTests.java │ │ ├── model/ │ │ │ ├── MediaTests.java │ │ │ ├── ModelOptionsUtilsTests.java │ │ │ ├── observation/ │ │ │ │ ├── ModelObservationContextTests.java │ │ │ │ └── ModelUsageMetricsGeneratorTests.java │ │ │ ├── tool/ │ │ │ │ ├── DefaultToolCallingChatOptionsTests.java │ │ │ │ ├── DefaultToolCallingManagerIT.java │ │ │ │ ├── DefaultToolCallingManagerTest.java │ │ │ │ ├── DefaultToolCallingManagerTests.java │ │ │ │ ├── DefaultToolExecutionEligibilityPredicateTests.java │ │ │ │ ├── DefaultToolExecutionResultTests.java │ │ │ │ ├── ToolCallingChatOptionsTests.java │ │ │ │ ├── ToolExecutionEligibilityPredicateTests.java │ │ │ │ └── ToolExecutionResultTests.java │ │ │ └── transformer/ │ │ │ └── KeywordMetadataEnricherTest.java │ │ ├── tool/ │ │ │ ├── augment/ │ │ │ │ ├── AugmentedToolCallbackProviderTest.java │ │ │ │ ├── AugmentedToolCallbackTest.java │ │ │ │ └── ToolInputSchemaAugmenterTest.java │ │ │ ├── execution/ │ │ │ │ ├── DefaultToolCallResultConverterTests.java │ │ │ │ └── DefaultToolExecutionExceptionProcessorTests.java │ │ │ ├── function/ │ │ │ │ └── FunctionToolCallbackTest.java │ │ │ ├── method/ │ │ │ │ ├── MethodToolCallbackExceptionHandlingTest.java │ │ │ │ ├── MethodToolCallbackGenericTypesTest.java │ │ │ │ └── MethodToolCallbackProviderTests.java │ │ │ ├── observation/ │ │ │ │ ├── DefaultToolCallingObservationConventionTests.java │ │ │ │ ├── ToolCallingContentObservationFilterTests.java │ │ │ │ └── ToolCallingObservationContextTests.java │ │ │ └── support/ │ │ │ └── ToolUtilsTests.java │ │ └── util/ │ │ ├── TextBlockAssertion.java │ │ └── json/ │ │ ├── JsonParserTests.java │ │ ├── JsonSchemaGeneratorTests.java │ │ └── schema/ │ │ └── JsonSchemaUtilsTests.java │ ├── kotlin/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ ├── converter/ │ │ │ └── BeanOutputConverterTests.kt │ │ ├── model/ │ │ │ └── ModelOptionsUtilsTests.kt │ │ └── tool/ │ │ └── resolution/ │ │ ├── SpringBeanToolCallbackResolverKotlinTests.kt │ │ ├── StandaloneWeatherKotlinFunction.kt │ │ ├── TypeResolverHelperKotlinIT.kt │ │ └── kotlinconfig/ │ │ └── TypeResolverHelperKotlinConfiguration.kt │ └── resources/ │ ├── logback.xml │ ├── prompt-system.txt │ ├── prompt-user.txt │ └── text_source.txt ├── spring-ai-rag/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── rag/ │ │ ├── Query.java │ │ ├── advisor/ │ │ │ ├── RetrievalAugmentationAdvisor.java │ │ │ └── package-info.java │ │ ├── generation/ │ │ │ ├── augmentation/ │ │ │ │ ├── ContextualQueryAugmenter.java │ │ │ │ ├── QueryAugmenter.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ ├── package-info.java │ │ ├── postretrieval/ │ │ │ ├── document/ │ │ │ │ ├── DocumentPostProcessor.java │ │ │ │ └── package-info.java │ │ │ └── package-info.java │ │ ├── preretrieval/ │ │ │ ├── package-info.java │ │ │ └── query/ │ │ │ ├── expansion/ │ │ │ │ ├── MultiQueryExpander.java │ │ │ │ ├── QueryExpander.java │ │ │ │ └── package-info.java │ │ │ └── transformation/ │ │ │ ├── CompressionQueryTransformer.java │ │ │ ├── QueryTransformer.java │ │ │ ├── RewriteQueryTransformer.java │ │ │ ├── TranslationQueryTransformer.java │ │ │ └── package-info.java │ │ ├── retrieval/ │ │ │ ├── join/ │ │ │ │ ├── ConcatenationDocumentJoiner.java │ │ │ │ ├── DocumentJoiner.java │ │ │ │ └── package-info.java │ │ │ └── search/ │ │ │ ├── DocumentRetriever.java │ │ │ ├── VectorStoreDocumentRetriever.java │ │ │ └── package-info.java │ │ └── util/ │ │ ├── PromptAssert.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── org/ │ └── springframework/ │ └── ai/ │ ├── chat/ │ │ └── client/ │ │ └── advisor/ │ │ └── RetrievalAugmentationAdvisorTests.java │ └── rag/ │ ├── QueryTests.java │ ├── generation/ │ │ └── augmentation/ │ │ └── ContextualQueryAugmenterTests.java │ ├── preretrieval/ │ │ └── query/ │ │ ├── expansion/ │ │ │ └── MultiQueryExpanderTests.java │ │ └── transformation/ │ │ ├── CompressionQueryTransformerTests.java │ │ ├── RewriteQueryTransformerTests.java │ │ └── TranslationQueryTransformerTests.java │ ├── retrieval/ │ │ ├── join/ │ │ │ └── ConcatenationDocumentJoinerTests.java │ │ └── search/ │ │ └── VectorStoreDocumentRetrieverTests.java │ └── util/ │ └── PromptAssertTests.java ├── spring-ai-retry/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── retry/ │ │ ├── NonTransientAiException.java │ │ ├── RetryUtils.java │ │ ├── TransientAiException.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── org/ │ └── springframework/ │ └── ai/ │ └── retry/ │ └── RetryUtilsTests.java ├── spring-ai-spring-boot-docker-compose/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── docker/ │ │ │ └── compose/ │ │ │ └── service/ │ │ │ └── connection/ │ │ │ ├── chroma/ │ │ │ │ ├── ChromaDockerComposeConnectionDetailsFactory.java │ │ │ │ └── ChromaEnvironment.java │ │ │ ├── docker/ │ │ │ │ └── DockerMcpGatewayDockerComposeConnectionDetailsFactory.java │ │ │ ├── milvus/ │ │ │ │ └── MilvusDockerComposeConnectionDetailsFactory.java │ │ │ ├── ollama/ │ │ │ │ └── OllamaDockerComposeConnectionDetailsFactory.java │ │ │ ├── opensearch/ │ │ │ │ ├── AwsOpenSearchDockerComposeConnectionDetailsFactory.java │ │ │ │ ├── AwsOpenSearchEnvironment.java │ │ │ │ ├── OpenSearchDockerComposeConnectionDetailsFactory.java │ │ │ │ └── OpenSearchEnvironment.java │ │ │ ├── qdrant/ │ │ │ │ ├── QdrantDockerComposeConnectionDetailsFactory.java │ │ │ │ └── QdrantEnvironment.java │ │ │ ├── typesense/ │ │ │ │ ├── TypesenseDockerComposeConnectionDetailsFactory.java │ │ │ │ └── TypesenseEnvironment.java │ │ │ └── weaviate/ │ │ │ └── WeaviateDockerComposeConnectionDetailsFactory.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── spring.factories │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── springframework/ │ │ ├── ai/ │ │ │ └── docker/ │ │ │ └── compose/ │ │ │ └── service/ │ │ │ └── connection/ │ │ │ ├── chroma/ │ │ │ │ ├── ChromaDockerComposeConnectionDetailsFactoryIT.java │ │ │ │ ├── ChromaEnvironmentTests.java │ │ │ │ └── ChromaWithTokenDockerComposeConnectionDetailsFactoryIT.java │ │ │ ├── docker/ │ │ │ │ └── DockerMcpGatewayDockerComposeConnectionDetailsFactoryIT.java │ │ │ ├── milvus/ │ │ │ │ └── MilvusDockerComposeConnectionDetailsFactoryIT.java │ │ │ ├── ollama/ │ │ │ │ └── OllamaDockerComposeConnectionDetailsFactoryIT.java │ │ │ ├── opensearch/ │ │ │ │ ├── AwsOpenSearchDockerComposeConnectionDetailsFactoryIT.java │ │ │ │ ├── OpenSearchDockerComposeConnectionDetailsFactoryIT.java │ │ │ │ └── OpenSearchEnvironmentTests.java │ │ │ ├── qdrant/ │ │ │ │ └── QdrantDockerComposeConnectionDetailsFactoryIT.java │ │ │ ├── typesense/ │ │ │ │ ├── TypesenseDockerComposeConnectionDetailsFactoryIT.java │ │ │ │ └── TypesenseEnvironmentTests.java │ │ │ └── weaviate/ │ │ │ └── WeaviateDockerComposeConnectionDetailsFactoryIT.java │ │ └── boot/ │ │ ├── docker/ │ │ │ └── compose/ │ │ │ └── service/ │ │ │ └── connection/ │ │ │ └── test/ │ │ │ └── AbstractDockerComposeIT.java │ │ └── testsupport/ │ │ ├── DisabledIfProcessUnavailable.java │ │ ├── DisabledIfProcessUnavailableCondition.java │ │ └── DisabledIfProcessUnavailables.java │ └── resources/ │ └── org/ │ └── springframework/ │ └── ai/ │ └── docker/ │ └── compose/ │ └── service/ │ └── connection/ │ ├── chroma/ │ │ ├── chroma-compose.yaml │ │ └── chroma-with-token-compose.yaml │ ├── docker/ │ │ └── docker-agents-gateway-compose.yaml │ ├── milvus/ │ │ └── milvus-compose.yaml │ ├── mongo/ │ │ └── mongo-compose.yaml │ ├── ollama/ │ │ └── ollama-compose.yaml │ ├── opensearch/ │ │ ├── localstack-compose.yaml │ │ └── opensearch-compose.yaml │ ├── qdrant/ │ │ └── qdrant-compose.yaml │ ├── typesense/ │ │ └── typesense-compose.yaml │ └── weaviate/ │ └── weaviate-compose.yaml ├── spring-ai-spring-boot-starters/ │ ├── spring-ai-starter-mcp-client/ │ │ └── pom.xml │ ├── spring-ai-starter-mcp-client-webflux/ │ │ └── pom.xml │ ├── spring-ai-starter-mcp-server/ │ │ └── pom.xml │ ├── spring-ai-starter-mcp-server-webflux/ │ │ └── pom.xml │ ├── spring-ai-starter-mcp-server-webmvc/ │ │ └── pom.xml │ ├── spring-ai-starter-model-anthropic/ │ │ └── pom.xml │ ├── spring-ai-starter-model-azure-openai/ │ │ └── pom.xml │ ├── spring-ai-starter-model-bedrock/ │ │ └── pom.xml │ ├── spring-ai-starter-model-bedrock-converse/ │ │ └── pom.xml │ ├── spring-ai-starter-model-chat-memory/ │ │ └── pom.xml │ ├── spring-ai-starter-model-chat-memory-repository-cassandra/ │ │ └── pom.xml │ ├── spring-ai-starter-model-chat-memory-repository-cosmos-db/ │ │ └── pom.xml │ ├── spring-ai-starter-model-chat-memory-repository-jdbc/ │ │ └── pom.xml │ ├── spring-ai-starter-model-chat-memory-repository-mongodb/ │ │ └── pom.xml │ ├── spring-ai-starter-model-chat-memory-repository-neo4j/ │ │ └── pom.xml │ ├── spring-ai-starter-model-chat-memory-repository-redis/ │ │ └── pom.xml │ ├── spring-ai-starter-model-deepseek/ │ │ └── pom.xml │ ├── spring-ai-starter-model-elevenlabs/ │ │ └── pom.xml │ ├── spring-ai-starter-model-google-genai/ │ │ └── pom.xml │ ├── spring-ai-starter-model-google-genai-embedding/ │ │ └── pom.xml │ ├── spring-ai-starter-model-minimax/ │ │ └── pom.xml │ ├── spring-ai-starter-model-mistral-ai/ │ │ └── pom.xml │ ├── spring-ai-starter-model-ollama/ │ │ └── pom.xml │ ├── spring-ai-starter-model-openai/ │ │ └── pom.xml │ ├── spring-ai-starter-model-postgresml-embedding/ │ │ └── pom.xml │ ├── spring-ai-starter-model-stability-ai/ │ │ └── pom.xml │ ├── spring-ai-starter-model-transformers/ │ │ └── pom.xml │ ├── spring-ai-starter-model-vertex-ai-embedding/ │ │ └── pom.xml │ ├── spring-ai-starter-vector-store-aws-opensearch/ │ │ └── pom.xml │ ├── spring-ai-starter-vector-store-azure/ │ │ └── pom.xml │ ├── spring-ai-starter-vector-store-azure-cosmos-db/ │ │ └── pom.xml │ ├── spring-ai-starter-vector-store-bedrock-knowledgebase/ │ │ └── pom.xml │ ├── spring-ai-starter-vector-store-cassandra/ │ │ └── pom.xml │ ├── spring-ai-starter-vector-store-chroma/ │ │ └── pom.xml │ ├── spring-ai-starter-vector-store-couchbase/ │ │ └── pom.xml │ ├── spring-ai-starter-vector-store-elasticsearch/ │ │ └── pom.xml │ ├── spring-ai-starter-vector-store-gemfire/ │ │ └── pom.xml │ ├── spring-ai-starter-vector-store-mariadb/ │ │ └── pom.xml │ ├── spring-ai-starter-vector-store-milvus/ │ │ └── pom.xml │ ├── spring-ai-starter-vector-store-mongodb-atlas/ │ │ └── pom.xml │ ├── spring-ai-starter-vector-store-neo4j/ │ │ └── pom.xml │ ├── spring-ai-starter-vector-store-opensearch/ │ │ └── pom.xml │ ├── spring-ai-starter-vector-store-oracle/ │ │ └── pom.xml │ ├── spring-ai-starter-vector-store-pgvector/ │ │ └── pom.xml │ ├── spring-ai-starter-vector-store-pinecone/ │ │ └── pom.xml │ ├── spring-ai-starter-vector-store-qdrant/ │ │ └── pom.xml │ ├── spring-ai-starter-vector-store-redis/ │ │ └── pom.xml │ ├── spring-ai-starter-vector-store-s3/ │ │ └── pom.xml │ ├── spring-ai-starter-vector-store-typesense/ │ │ └── pom.xml │ └── spring-ai-starter-vector-store-weaviate/ │ └── pom.xml ├── spring-ai-spring-boot-testcontainers/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── testcontainers/ │ │ │ └── service/ │ │ │ └── connection/ │ │ │ ├── chroma/ │ │ │ │ └── ChromaContainerConnectionDetailsFactory.java │ │ │ ├── docker/ │ │ │ │ └── DockerMcpGatewayContainerConnectionDetailsFactory.java │ │ │ ├── milvus/ │ │ │ │ └── MilvusContainerConnectionDetailsFactory.java │ │ │ ├── ollama/ │ │ │ │ └── OllamaContainerConnectionDetailsFactory.java │ │ │ ├── opensearch/ │ │ │ │ ├── AwsOpenSearchContainerConnectionDetailsFactory.java │ │ │ │ └── OpenSearchContainerConnectionDetailsFactory.java │ │ │ ├── qdrant/ │ │ │ │ └── QdrantContainerConnectionDetailsFactory.java │ │ │ ├── typesense/ │ │ │ │ └── TypesenseContainerConnectionDetailsFactory.java │ │ │ └── weaviate/ │ │ │ └── WeaviateContainerConnectionDetailsFactory.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── spring.factories │ └── test/ │ └── java/ │ └── org/ │ └── springframework/ │ └── ai/ │ └── testcontainers/ │ └── service/ │ └── connection/ │ ├── chroma/ │ │ ├── ChromaContainerConnectionDetailsFactoryIT.java │ │ ├── ChromaImage.java │ │ ├── ChromaWithToken2ContainerConnectionDetailsFactoryIT.java │ │ └── ChromaWithTokenContainerConnectionDetailsFactoryIT.java │ ├── docker/ │ │ └── DockerMcpGatewayContainerConnectionDetailsFactoryIT.java │ ├── milvus/ │ │ ├── MilvusContainerConnectionDetailsFactoryIT.java │ │ └── MilvusImage.java │ ├── ollama/ │ │ ├── OllamaContainerConnectionDetailsFactoryIT.java │ │ └── OllamaImage.java │ ├── opensearch/ │ │ ├── AwsOpenSearchContainerConnectionDetailsFactoryIT.java │ │ ├── OpenSearchContainerConnectionDetailsFactoryIT.java │ │ └── OpenSearchImage.java │ ├── qdrant/ │ │ ├── QdrantContainerConnectionDetailsFactoryIT.java │ │ ├── QdrantContainerWithApiKeyConnectionDetailsFactoryIT.java │ │ └── QdrantImage.java │ ├── typesense/ │ │ ├── TypesenseContainerConnectionDetailsFactoryIT.java │ │ └── TypesenseImage.java │ └── weaviate/ │ ├── WeaviateContainerConnectionDetailsFactoryIT.java │ └── WeaviateImage.java ├── spring-ai-spring-cloud-bindings/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── bindings/ │ │ │ ├── BindingsValidator.java │ │ │ ├── ChromaBindingsPropertiesProcessor.java │ │ │ ├── MistralAiBindingsPropertiesProcessor.java │ │ │ ├── OllamaBindingsPropertiesProcessor.java │ │ │ ├── OpenAiBindingsPropertiesProcessor.java │ │ │ ├── TanzuBindingsPropertiesProcessor.java │ │ │ ├── WeaviateBindingsPropertiesProcessor.java │ │ │ └── package-info.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── spring.factories │ └── test/ │ └── java/ │ └── org/ │ └── springframework/ │ └── ai/ │ └── bindings/ │ ├── ChromaBindingsPropertiesProcessorTests.java │ ├── MistralAiBindingsPropertiesProcessorTests.java │ ├── OllamaBindingsPropertiesProcessorTests.java │ ├── OpenAiBindingsPropertiesProcessorTests.java │ ├── TanzuBindingsPropertiesProcessorTests.java │ └── WeaviateBindingsPropertiesProcessorTests.java ├── spring-ai-template-st/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── template/ │ │ └── st/ │ │ ├── Slf4jStErrorListener.java │ │ ├── StTemplateRenderer.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── org/ │ └── springframework/ │ └── ai/ │ └── template/ │ └── st/ │ ├── StTemplateRendererEdgeTests.java │ └── StTemplateRendererTests.java ├── spring-ai-test/ │ ├── README.md │ ├── pom.xml │ └── src/ │ └── main/ │ ├── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ ├── test/ │ │ │ ├── CurlyBracketEscaper.java │ │ │ ├── chat/ │ │ │ │ └── client/ │ │ │ │ └── advisor/ │ │ │ │ ├── AbstractToolCallAdvisorIT.java │ │ │ │ ├── MockWeatherService.java │ │ │ │ └── package-info.java │ │ │ ├── options/ │ │ │ │ └── AbstractChatOptionsTests.java │ │ │ ├── package-info.java │ │ │ └── vectorstore/ │ │ │ ├── BaseVectorStoreTests.java │ │ │ ├── ObservationTestUtil.java │ │ │ └── package-info.java │ │ └── utils/ │ │ ├── AudioPlayer.java │ │ └── package-info.java │ └── resources/ │ ├── prompts/ │ │ └── spring/ │ │ └── test/ │ │ └── evaluation/ │ │ ├── qa-evaluator-accurate-answer.st │ │ ├── qa-evaluator-fact-based-answer.st │ │ ├── qa-evaluator-not-related-message.st │ │ └── user-evaluator-message.st │ └── test/ │ └── data/ │ ├── great.depression.txt │ ├── spring.ai.txt │ └── time.shelter.txt ├── spring-ai-vector-store/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── antlr4/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── vectorstore/ │ │ │ └── filter/ │ │ │ └── antlr4/ │ │ │ └── Filters.g4 │ │ ├── java/ │ │ │ ├── Filters.tokens │ │ │ ├── FiltersLexer.tokens │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── vectorstore/ │ │ │ ├── AbstractVectorStoreBuilder.java │ │ │ ├── SearchRequest.java │ │ │ ├── SimpleVectorStore.java │ │ │ ├── SimpleVectorStoreContent.java │ │ │ ├── SimpleVectorStoreFilterExpressionEvaluator.java │ │ │ ├── SpringAIVectorStoreTypes.java │ │ │ ├── VectorStore.java │ │ │ ├── VectorStoreRetriever.java │ │ │ ├── filter/ │ │ │ │ ├── Filter.java │ │ │ │ ├── FilterExpressionBuilder.java │ │ │ │ ├── FilterExpressionConverter.java │ │ │ │ ├── FilterExpressionTextParser.java │ │ │ │ ├── FilterHelper.java │ │ │ │ ├── antlr4/ │ │ │ │ │ ├── Filters.interp │ │ │ │ │ ├── FiltersBaseListener.java │ │ │ │ │ ├── FiltersBaseVisitor.java │ │ │ │ │ ├── FiltersLexer.interp │ │ │ │ │ ├── FiltersLexer.java │ │ │ │ │ ├── FiltersListener.java │ │ │ │ │ ├── FiltersParser.java │ │ │ │ │ ├── FiltersVisitor.java │ │ │ │ │ └── package-info.java │ │ │ │ ├── converter/ │ │ │ │ │ ├── AbstractFilterExpressionConverter.java │ │ │ │ │ ├── PineconeFilterExpressionConverter.java │ │ │ │ │ ├── PrintFilterExpressionConverter.java │ │ │ │ │ └── package-info.java │ │ │ │ └── package-info.java │ │ │ ├── observation/ │ │ │ │ ├── AbstractObservationVectorStore.java │ │ │ │ ├── DefaultVectorStoreObservationConvention.java │ │ │ │ ├── VectorStoreObservationContext.java │ │ │ │ ├── VectorStoreObservationConvention.java │ │ │ │ ├── VectorStoreObservationDocumentation.java │ │ │ │ ├── VectorStoreQueryResponseObservationHandler.java │ │ │ │ └── package-info.java │ │ │ ├── package-info.java │ │ │ └── properties/ │ │ │ ├── CommonVectorStoreProperties.java │ │ │ └── package-info.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── additional-spring-configuration-metadata.json │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ ├── SimpleVectorStoreFilterExpressionEvaluatorTests.java │ │ ├── SimpleVectorStoreSimilarityTests.java │ │ ├── SimpleVectorStoreTests.java │ │ ├── SimpleVectorStoreWithFilterTests.java │ │ ├── filter/ │ │ │ ├── FilterExpressionBuilderTests.java │ │ │ ├── FilterExpressionTextParserTests.java │ │ │ ├── FilterHelperTests.java │ │ │ ├── SearchRequestTests.java │ │ │ └── converter/ │ │ │ └── PineconeFilterExpressionConverterTests.java │ │ └── observation/ │ │ ├── DefaultVectorStoreObservationConventionTests.java │ │ ├── VectorStoreObservationContextTests.java │ │ └── VectorStoreQueryResponseObservationHandlerTests.java │ └── resources/ │ └── logback.xml ├── src/ │ ├── checkstyle/ │ │ ├── checkstyle-header.txt │ │ ├── checkstyle-suppressions.xml │ │ ├── checkstyle.xml │ │ └── eclipse-google-style.xml │ ├── ecosystem-ci/ │ │ ├── README.md │ │ └── ci-alert-config.json │ ├── prompts/ │ │ ├── update-to-m7.txt │ │ └── update-to-snapshot.txt │ └── rewrite/ │ └── migrate-to-2-0-0-M3.yaml └── vector-stores/ ├── spring-ai-azure-cosmos-db-store/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── cosmosdb/ │ │ ├── CosmosDBFilterExpressionConverter.java │ │ ├── CosmosDBVectorStore.java │ │ └── package-info.java │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── cosmosdb/ │ │ ├── CosmosDBVectorStoreIT.java │ │ ├── CosmosDBVectorStoreWithMetadataPartitionKeyIT.java │ │ └── CosmosDbImage.java │ └── resources/ │ └── application.properties ├── spring-ai-azure-store/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── azure/ │ │ ├── AzureAiSearchFilterExpressionConverter.java │ │ ├── AzureVectorStore.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── org/ │ └── springframework/ │ └── ai/ │ └── vectorstore/ │ └── azure/ │ ├── AzureAiSearchFilterExpressionConverterTests.java │ ├── AzureVectorStoreIT.java │ ├── AzureVectorStoreMetadataTests.java │ └── AzureVectorStoreObservationIT.java ├── spring-ai-bedrock-knowledgebase-store/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── bedrockknowledgebase/ │ │ ├── BedrockKnowledgeBaseFilterExpressionConverter.java │ │ ├── BedrockKnowledgeBaseVectorStore.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── org/ │ └── springframework/ │ └── ai/ │ └── vectorstore/ │ └── bedrockknowledgebase/ │ ├── BedrockKnowledgeBaseFilterExpressionConverterTest.java │ ├── BedrockKnowledgeBaseVectorStoreIT.java │ └── BedrockKnowledgeBaseVectorStoreTest.java ├── spring-ai-cassandra-store/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── vectorstore/ │ │ │ └── cassandra/ │ │ │ ├── CassandraFilterExpressionConverter.java │ │ │ ├── CassandraVectorStore.java │ │ │ ├── SchemaUtil.java │ │ │ └── package-info.java │ │ └── resources/ │ │ └── application.conf │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── cassandra/ │ │ ├── CassandraFilterExpressionConverterTests.java │ │ ├── CassandraImage.java │ │ ├── CassandraRichSchemaVectorStoreIT.java │ │ ├── CassandraVectorStoreIT.java │ │ ├── CassandraVectorStoreObservationIT.java │ │ └── WikiVectorStoreExample.java │ └── resources/ │ ├── application.conf │ ├── test_wiki_full_schema.cql │ ├── test_wiki_partial_0_schema.cql │ ├── test_wiki_partial_1_schema.cql │ ├── test_wiki_partial_2_schema.cql │ ├── test_wiki_partial_3_schema.cql │ └── test_wiki_partial_4_schema.cql ├── spring-ai-chroma-store/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── chroma/ │ │ └── vectorstore/ │ │ ├── ChromaApi.java │ │ ├── ChromaFilterExpressionConverter.java │ │ ├── ChromaVectorStore.java │ │ ├── common/ │ │ │ ├── ChromaApiConstants.java │ │ │ └── package-info.java │ │ └── package-info.java │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── chroma/ │ │ ├── ChromaImage.java │ │ └── vectorstore/ │ │ ├── BasicAuthChromaWhereIT.java │ │ ├── ChromaApiIT.java │ │ ├── ChromaApiTest.java │ │ ├── ChromaVectorStoreIT.java │ │ ├── ChromaVectorStoreObservationIT.java │ │ └── TokenSecuredChromaWhereIT.java │ └── resources/ │ └── server.htpasswd ├── spring-ai-coherence-store/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── coherence/ │ │ ├── CoherenceFilterExpressionConverter.java │ │ ├── CoherenceVectorStore.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── org/ │ └── springframework/ │ └── ai/ │ └── vectorstore/ │ └── coherence/ │ ├── CoherenceFilterExpressionConverterTests.java │ └── CoherenceVectorStoreIT.java ├── spring-ai-couchbase-store/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── couchbase/ │ │ ├── CouchbaseAiSearchFilterExpressionConverter.java │ │ ├── CouchbaseIndexOptimization.java │ │ ├── CouchbaseSearchVectorStore.java │ │ ├── CouchbaseSimilarityFunction.java │ │ └── package-info.java │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── couchbase/ │ │ ├── CouchbaseContainerMetadata.java │ │ └── CouchbaseSearchVectorStoreIT.java │ └── resources/ │ └── application.properties ├── spring-ai-elasticsearch-store/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── elasticsearch/ │ │ ├── ElasticsearchAiSearchFilterExpressionConverter.java │ │ ├── ElasticsearchVectorStore.java │ │ ├── ElasticsearchVectorStoreOptions.java │ │ ├── SimilarityFunction.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── org/ │ └── springframework/ │ └── ai/ │ └── vectorstore/ │ └── elasticsearch/ │ ├── ElasticsearchAiSearchFilterExpressionConverterTest.java │ ├── ElasticsearchImage.java │ ├── ElasticsearchVectorStoreIT.java │ └── ElasticsearchVectorStoreObservationIT.java ├── spring-ai-gemfire-store/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── gemfire/ │ │ ├── BearerTokenAuthenticationFilterFunction.java │ │ ├── GemFireAiSearchFilterExpressionConverter.java │ │ ├── GemFireVectorStore.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── org/ │ ├── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── gemfire/ │ │ ├── GemFireAiSearchFilterExpressionConverterTest.java │ │ ├── GemFireImage.java │ │ ├── GemFireVectorStoreAuthenticationBaseIT.java │ │ ├── GemFireVectorStoreIT.java │ │ ├── GemFireVectorStoreObservationIT.java │ │ ├── GemFireWithBasicAuthenticationVectorStoreIT.java │ │ └── GemFireWithTokenAuthenticationVectorStoreIT.java │ └── testcontainers/ │ └── containers/ │ └── FailureDetectingExternalResource.java ├── spring-ai-hanadb-store/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── hanadb/ │ │ ├── HanaCloudVectorStore.java │ │ ├── HanaVectorEntity.java │ │ ├── HanaVectorRepository.java │ │ └── package-info.java │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── hanadb/ │ │ ├── CricketWorldCup.java │ │ ├── CricketWorldCupHanaController.java │ │ ├── CricketWorldCupRepository.java │ │ ├── HanaCloudVectorStoreIT.java │ │ └── HanaVectorStoreObservationIT.java │ └── resources/ │ └── application.properties ├── spring-ai-infinispan-store/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── infinispan/ │ │ ├── InfinispanFilterExpressionConverter.java │ │ ├── InfinispanVectorStore.java │ │ ├── SpringAiInfinispanItem.java │ │ ├── SpringAiItemMarshaller.java │ │ ├── SpringAiMetadata.java │ │ ├── SpringAiMetadataMarshaller.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── org/ │ └── springframework/ │ └── ai/ │ └── vectorstore/ │ └── infinispan/ │ ├── InfinispanFilterExpressionConverterTest.java │ ├── InfinispanVectorStoreIT.java │ └── InfinispanVectorStoreObservationIT.java ├── spring-ai-mariadb-store/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── mariadb/ │ │ ├── MariaDBFilterExpressionConverter.java │ │ ├── MariaDBSchemaValidator.java │ │ ├── MariaDBVectorStore.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── org/ │ └── springframework/ │ └── ai/ │ └── vectorstore/ │ └── mariadb/ │ ├── MariaDBEmbeddingDimensionsTests.java │ ├── MariaDBFilterExpressionConverterTests.java │ ├── MariaDBImage.java │ ├── MariaDBStoreCustomNamesIT.java │ ├── MariaDBStoreIT.java │ ├── MariaDBStoreObservationIT.java │ ├── MariaDBStoreTests.java │ └── MariaDBVectorStoreBuilderTests.java ├── spring-ai-milvus-store/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── milvus/ │ │ ├── MilvusFilterExpressionConverter.java │ │ ├── MilvusSearchRequest.java │ │ ├── MilvusVectorStore.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── org/ │ └── springframework/ │ └── ai/ │ └── vectorstore/ │ └── milvus/ │ ├── MilvusEmbeddingDimensionsTests.java │ ├── MilvusFilterExpressionConverterTests.java │ ├── MilvusImage.java │ ├── MilvusSearchRequestTest.java │ ├── MilvusVectorStoreCustomFieldNamesIT.java │ ├── MilvusVectorStoreIT.java │ ├── MilvusVectorStoreObservationIT.java │ └── MilvusVectorStoreTest.java ├── spring-ai-mongodb-atlas-store/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── mongodb/ │ │ └── atlas/ │ │ ├── MongoDBAtlasFilterExpressionConverter.java │ │ ├── MongoDBAtlasVectorStore.java │ │ ├── VectorSearchAggregation.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── org/ │ └── springframework/ │ └── ai/ │ └── vectorstore/ │ └── mongodb/ │ └── atlas/ │ ├── MongoDBAtlasFilterConverterTest.java │ ├── MongoDBAtlasVectorStoreIT.java │ ├── MongoDbImage.java │ ├── MongoDbVectorStoreObservationIT.java │ └── VectorSearchAggregationTest.java ├── spring-ai-neo4j-store/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── neo4j/ │ │ ├── Neo4jVectorStore.java │ │ ├── filter/ │ │ │ ├── Neo4jVectorFilterExpressionConverter.java │ │ │ └── package-info.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── org/ │ └── springframework/ │ └── ai/ │ └── vectorstore/ │ └── neo4j/ │ ├── Neo4jImage.java │ ├── Neo4jVectorStoreBuilderTests.java │ ├── Neo4jVectorStoreIT.java │ ├── Neo4jVectorStoreObservationIT.java │ └── filter/ │ └── Neo4jVectorFilterExpressionConverterTests.java ├── spring-ai-opensearch-store/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── opensearch/ │ │ ├── OpenSearchAiSearchFilterExpressionConverter.java │ │ ├── OpenSearchVectorStore.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── org/ │ └── springframework/ │ └── ai/ │ └── vectorstore/ │ └── opensearch/ │ ├── OpenSearchAiSearchFilterExpressionConverterTest.java │ ├── OpenSearchImage.java │ ├── OpenSearchVectorStoreIT.java │ ├── OpenSearchVectorStoreObservationIT.java │ ├── OpenSearchVectorStoreTest.java │ └── OpenSearchVectorStoreWithOllamaIT.java ├── spring-ai-oracle-store/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── oracle/ │ │ ├── OracleVectorStore.java │ │ ├── SqlJsonPathFilterExpressionConverter.java │ │ └── package-info.java │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── oracle/ │ │ ├── OracleImage.java │ │ ├── OracleVectorStoreIT.java │ │ ├── OracleVectorStoreObservationIT.java │ │ └── SqlJsonPathFilterExpressionConverterTests.java │ └── resources/ │ └── initialize.sql ├── spring-ai-pgvector-store/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── pgvector/ │ │ ├── PgVectorFilterExpressionConverter.java │ │ ├── PgVectorSchemaValidator.java │ │ ├── PgVectorStore.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── org/ │ └── springframework/ │ └── ai/ │ └── vectorstore/ │ └── pgvector/ │ ├── PgVectorEmbeddingDimensionsTests.java │ ├── PgVectorFilterExpressionConverterTests.java │ ├── PgVectorImage.java │ ├── PgVectorStoreAutoTruncationIT.java │ ├── PgVectorStoreCustomNamesIT.java │ ├── PgVectorStoreIT.java │ ├── PgVectorStoreObservationIT.java │ ├── PgVectorStoreTests.java │ ├── PgVectorStoreVectorStoreChatMemoryAdvisorIT.java │ └── PgVectorStoreWithChatMemoryAdvisorIT.java ├── spring-ai-pinecone-store/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ ├── java/ │ │ │ └── org/ │ │ │ └── springframework/ │ │ │ └── ai/ │ │ │ └── vectorstore/ │ │ │ └── pinecone/ │ │ │ ├── PineconeVectorStore.java │ │ │ ├── PineconeVectorStoreHints.java │ │ │ └── package-info.java │ │ └── resources/ │ │ └── META-INF/ │ │ └── spring/ │ │ └── aot.factories │ └── test/ │ └── java/ │ └── org/ │ └── springframework/ │ └── ai/ │ └── vectorstore/ │ └── pinecone/ │ ├── PineconeVectorStoreIT.java │ └── PineconeVectorStoreObservationIT.java ├── spring-ai-qdrant-store/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── qdrant/ │ │ ├── QdrantFilterExpressionConverter.java │ │ ├── QdrantObjectFactory.java │ │ ├── QdrantValueFactory.java │ │ ├── QdrantVectorStore.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── org/ │ └── springframework/ │ └── ai/ │ └── vectorstore/ │ └── qdrant/ │ ├── QdrantImage.java │ ├── QdrantObjectFactoryTests.java │ ├── QdrantVectorStoreBuilderTests.java │ ├── QdrantVectorStoreIT.java │ └── QdrantVectorStoreObservationIT.java ├── spring-ai-redis-semantic-cache/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ ├── chat/ │ │ │ └── cache/ │ │ │ └── semantic/ │ │ │ ├── SemanticCache.java │ │ │ ├── SemanticCacheAdvisor.java │ │ │ └── package-info.java │ │ └── vectorstore/ │ │ └── redis/ │ │ └── cache/ │ │ └── semantic/ │ │ ├── DefaultSemanticCache.java │ │ ├── RedisVectorStoreHelper.java │ │ └── package-info.java │ └── test/ │ ├── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── chat/ │ │ └── cache/ │ │ └── semantic/ │ │ ├── SemanticCacheAdvisorIT.java │ │ └── SemanticCacheAdvisorTests.java │ └── resources/ │ └── logback-test.xml ├── spring-ai-redis-store/ │ ├── README.md │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── redis/ │ │ ├── RedisFilterExpressionConverter.java │ │ ├── RedisVectorStore.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── org/ │ └── springframework/ │ └── ai/ │ └── vectorstore/ │ └── redis/ │ ├── RedisFilterExpressionConverterTests.java │ ├── RedisVectorStoreDistanceMetricIT.java │ ├── RedisVectorStoreIT.java │ └── RedisVectorStoreObservationIT.java ├── spring-ai-s3-vector-store/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── s3/ │ │ ├── DocumentUtils.java │ │ ├── S3VectorFilterExpressionConverter.java │ │ ├── S3VectorFilterSearchExpressionConverter.java │ │ ├── S3VectorStore.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── S3FilterExpressionConverterTests.java ├── spring-ai-typesense-store/ │ ├── pom.xml │ └── src/ │ ├── main/ │ │ └── java/ │ │ └── org/ │ │ └── springframework/ │ │ └── ai/ │ │ └── vectorstore/ │ │ └── typesense/ │ │ ├── TypesenseFilterExpressionConverter.java │ │ ├── TypesenseVectorStore.java │ │ └── package-info.java │ └── test/ │ └── java/ │ └── org/ │ └── springframework/ │ └── ai/ │ └── vectorstore/ │ └── typesense/ │ ├── TypesenseImage.java │ ├── TypesenseVectorStoreBuilderTests.java │ ├── TypesenseVectorStoreIT.java │ └── TypesenseVectorStoreObservationIT.java └── spring-ai-weaviate-store/ ├── README.md ├── pom.xml └── src/ ├── main/ │ └── java/ │ └── org/ │ └── springframework/ │ └── ai/ │ └── vectorstore/ │ └── weaviate/ │ ├── WeaviateFilterExpressionConverter.java │ ├── WeaviateVectorStore.java │ ├── WeaviateVectorStoreOptions.java │ └── package-info.java └── test/ ├── java/ │ └── org/ │ └── springframework/ │ └── ai/ │ └── vectorstore/ │ └── weaviate/ │ ├── WeaviateFilterExpressionConverterTests.java │ ├── WeaviateImage.java │ ├── WeaviateVectorStoreBuilderTests.java │ ├── WeaviateVectorStoreIT.java │ ├── WeaviateVectorStoreObservationIT.java │ └── WeaviateVectorStoreOptionsTests.java └── resources/ └── docker-compose.yml