├── .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-inspection.yml
│ ├── continuous-integration.yml
│ ├── deploy-docs.yml
│ ├── documentation-upload.yml
│ ├── new-maven-central-release.yml
│ ├── pr-check.yml
│ └── release-notes-generation.yml
├── .gitignore
├── .mvn
├── extensions.xml
└── wrapper
│ ├── maven-wrapper.jar
│ └── maven-wrapper.properties
├── 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
│ │ └── 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
│ │ ├── pom.xml
│ │ └── src
│ │ │ ├── main
│ │ │ ├── java
│ │ │ │ └── org
│ │ │ │ │ └── springframework
│ │ │ │ │ └── ai
│ │ │ │ │ └── mcp
│ │ │ │ │ └── client
│ │ │ │ │ └── autoconfigure
│ │ │ │ │ ├── McpClientAutoConfiguration.java
│ │ │ │ │ ├── McpToolCallbackAutoConfiguration.java
│ │ │ │ │ ├── NamedClientMcpTransport.java
│ │ │ │ │ ├── SseHttpClientTransportAutoConfiguration.java
│ │ │ │ │ ├── SseWebFluxTransportAutoConfiguration.java
│ │ │ │ │ ├── StdioTransportAutoConfiguration.java
│ │ │ │ │ ├── aot
│ │ │ │ │ └── McpClientAutoConfigurationRuntimeHints.java
│ │ │ │ │ ├── configurer
│ │ │ │ │ ├── McpAsyncClientConfigurer.java
│ │ │ │ │ └── McpSyncClientConfigurer.java
│ │ │ │ │ └── properties
│ │ │ │ │ ├── McpClientCommonProperties.java
│ │ │ │ │ ├── McpSseClientProperties.java
│ │ │ │ │ └── McpStdioClientProperties.java
│ │ │ └── resources
│ │ │ │ └── META-INF
│ │ │ │ └── spring
│ │ │ │ ├── aot.factories
│ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ │ └── test
│ │ │ ├── java
│ │ │ └── org
│ │ │ │ └── springframework
│ │ │ │ └── ai
│ │ │ │ └── mcp
│ │ │ │ └── client
│ │ │ │ └── autoconfigure
│ │ │ │ ├── McpClientAutoConfigurationIT.java
│ │ │ │ ├── McpClientAutoConfigurationRuntimeHintsTests.java
│ │ │ │ ├── McpToolCallbackAutoConfigurationConditionTests.java
│ │ │ │ ├── McpToolCallbackAutoConfigurationTests.java
│ │ │ │ ├── SseHttpClientTransportAutoConfigurationTests.java
│ │ │ │ ├── SseWebFluxTransportAutoConfigurationTests.java
│ │ │ │ └── properties
│ │ │ │ ├── McpClientCommonPropertiesTests.java
│ │ │ │ └── McpSseClientPropertiesTests.java
│ │ │ └── resources
│ │ │ ├── application-test.properties
│ │ │ ├── nested
│ │ │ └── nested-config.json
│ │ │ └── test-config.json
│ └── spring-ai-autoconfigure-mcp-server
│ │ ├── pom.xml
│ │ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ │ └── springframework
│ │ │ │ └── ai
│ │ │ │ └── mcp
│ │ │ │ └── server
│ │ │ │ └── autoconfigure
│ │ │ │ ├── McpServerAutoConfiguration.java
│ │ │ │ ├── McpServerProperties.java
│ │ │ │ ├── McpServerStdioDisabledCondition.java
│ │ │ │ ├── McpWebFluxServerAutoConfiguration.java
│ │ │ │ └── McpWebMvcServerAutoConfiguration.java
│ │ └── resources
│ │ │ └── META-INF
│ │ │ └── spring
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── test
│ │ └── java
│ │ └── org
│ │ └── springframework
│ │ └── ai
│ │ └── mcp
│ │ └── server
│ │ └── autoconfigure
│ │ ├── McpServerAutoConfigurationIT.java
│ │ ├── McpWebFluxServerAutoConfigurationIT.java
│ │ ├── McpWebFluxServerAutoConfigurationTests.java
│ │ └── McpWebMvcServerAutoConfigurationIT.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
│ │ │ │ └── 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
│ │ │ │ │ │ └── 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-jdbc
│ │ │ │ │ ├── pom.xml
│ │ │ │ │ └── src
│ │ │ │ │ │ ├── main
│ │ │ │ │ │ ├── java
│ │ │ │ │ │ │ └── org
│ │ │ │ │ │ │ │ └── springframework
│ │ │ │ │ │ │ │ └── ai
│ │ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ │ └── chat
│ │ │ │ │ │ │ │ └── memory
│ │ │ │ │ │ │ │ └── repository
│ │ │ │ │ │ │ │ └── jdbc
│ │ │ │ │ │ │ │ └── autoconfigure
│ │ │ │ │ │ │ │ ├── JdbcChatMemoryRepositoryAutoConfiguration.java
│ │ │ │ │ │ │ │ ├── JdbcChatMemoryRepositoryProperties.java
│ │ │ │ │ │ │ │ └── JdbcChatMemoryRepositorySchemaInitializer.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-neo4j
│ │ │ │ │ ├── pom.xml
│ │ │ │ │ └── src
│ │ │ │ │ ├── main
│ │ │ │ │ ├── java
│ │ │ │ │ │ └── org
│ │ │ │ │ │ │ └── springframework
│ │ │ │ │ │ │ └── ai
│ │ │ │ │ │ │ └── model
│ │ │ │ │ │ │ └── chat
│ │ │ │ │ │ │ └── memory
│ │ │ │ │ │ │ └── repository
│ │ │ │ │ │ │ └── neo4j
│ │ │ │ │ │ │ └── autoconfigure
│ │ │ │ │ │ │ ├── Neo4jChatMemoryRepositoryAutoConfiguration.java
│ │ │ │ │ │ │ └── Neo4jChatMemoryRepositoryProperties.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
│ │ │ │ └── resources
│ │ │ │ │ └── META-INF
│ │ │ │ │ └── spring
│ │ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ │ │ └── test
│ │ │ │ └── java
│ │ │ │ └── org
│ │ │ │ └── springframework
│ │ │ │ └── ai
│ │ │ │ └── model
│ │ │ │ └── chat
│ │ │ │ └── memory
│ │ │ │ └── autoconfigure
│ │ │ │ └── ChatMemoryAutoConfigurationTests.java
│ │ └── 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
│ │ │ └── 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
│ │ │ └── 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
│ │ │ │ │ ├── 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
│ │ │ └── resources
│ │ │ └── spring_framework.png
│ ├── 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
│ │ │ ├── DeepSeekAutoConfigurationIT.java
│ │ │ ├── DeepSeekPropertiesTests.java
│ │ │ └── tool
│ │ │ ├── DeepSeekFunctionCallbackIT.java
│ │ │ ├── FunctionCallbackInPromptIT.java
│ │ │ ├── FunctionCallbackWithPlainFunctionBeanIT.java
│ │ │ └── MockWeatherService.java
│ ├── spring-ai-autoconfigure-model-huggingface
│ │ ├── pom.xml
│ │ └── src
│ │ │ ├── main
│ │ │ ├── java
│ │ │ │ └── org
│ │ │ │ │ └── springframework
│ │ │ │ │ └── ai
│ │ │ │ │ └── model
│ │ │ │ │ └── huggingface
│ │ │ │ │ └── autoconfigure
│ │ │ │ │ ├── HuggingfaceChatAutoConfiguration.java
│ │ │ │ │ └── HuggingfaceChatProperties.java
│ │ │ └── resources
│ │ │ │ └── META-INF
│ │ │ │ └── spring
│ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ │ └── test
│ │ │ └── java
│ │ │ └── org
│ │ │ └── springframework
│ │ │ └── ai
│ │ │ └── model
│ │ │ └── huggingface
│ │ │ └── autoconfigure
│ │ │ ├── HuggingfaceChatAutoConfigurationIT.java
│ │ │ └── HuggingfaceModelConfigurationTests.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
│ │ │ │ │ └── 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
│ │ │ ├── MistralAiPropertiesTests.java
│ │ │ ├── MistralModelConfigurationTests.java
│ │ │ └── tool
│ │ │ ├── PaymentStatusBeanIT.java
│ │ │ ├── PaymentStatusBeanOpenAiIT.java
│ │ │ ├── PaymentStatusPromptIT.java
│ │ │ └── WeatherServicePromptIT.java
│ ├── spring-ai-autoconfigure-model-oci-genai
│ │ ├── pom.xml
│ │ └── src
│ │ │ ├── main
│ │ │ ├── java
│ │ │ │ └── org
│ │ │ │ │ └── springframework
│ │ │ │ │ └── ai
│ │ │ │ │ └── model
│ │ │ │ │ └── oci
│ │ │ │ │ └── genai
│ │ │ │ │ └── autoconfigure
│ │ │ │ │ ├── OCICohereChatModelProperties.java
│ │ │ │ │ ├── OCIConnectionProperties.java
│ │ │ │ │ ├── OCIEmbeddingModelProperties.java
│ │ │ │ │ ├── OCIGenAiChatAutoConfiguration.java
│ │ │ │ │ ├── OCIGenAiEmbeddingAutoConfiguration.java
│ │ │ │ │ ├── OCIGenAiInferenceClientAutoConfiguration.java
│ │ │ │ │ └── ServingMode.java
│ │ │ └── resources
│ │ │ │ └── META-INF
│ │ │ │ └── spring
│ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ │ └── test
│ │ │ └── java
│ │ │ └── org
│ │ │ └── springframework
│ │ │ └── ai
│ │ │ └── model
│ │ │ └── oci
│ │ │ └── genai
│ │ │ └── autoconfigure
│ │ │ ├── OCIGenAIAutoConfigurationTest.java
│ │ │ └── OCIGenAiAutoConfigurationIT.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
│ │ │ │ │ ├── OpenAIAutoConfigurationUtil.java
│ │ │ │ │ ├── OpenAiAudioSpeechAutoConfiguration.java
│ │ │ │ │ ├── OpenAiAudioSpeechProperties.java
│ │ │ │ │ ├── OpenAiAudioTranscriptionAutoConfiguration.java
│ │ │ │ │ ├── OpenAiAudioTranscriptionProperties.java
│ │ │ │ │ ├── OpenAiChatAutoConfiguration.java
│ │ │ │ │ ├── OpenAiChatProperties.java
│ │ │ │ │ ├── OpenAiConnectionProperties.java
│ │ │ │ │ ├── OpenAiEmbeddingAutoConfiguration.java
│ │ │ │ │ ├── OpenAiEmbeddingProperties.java
│ │ │ │ │ ├── OpenAiImageAutoConfiguration.java
│ │ │ │ │ ├── OpenAiImageProperties.java
│ │ │ │ │ ├── OpenAiModerationAutoConfiguration.java
│ │ │ │ │ ├── OpenAiModerationProperties.java
│ │ │ │ │ └── OpenAiParentProperties.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
│ │ │ │ ├── OpenAiAutoConfigurationIT.java
│ │ │ │ ├── OpenAiModelConfigurationTests.java
│ │ │ │ ├── OpenAiPropertiesTests.java
│ │ │ │ ├── OpenAiResponseFormatPropertiesTests.java
│ │ │ │ └── tool
│ │ │ │ ├── FunctionCallbackInPrompt2IT.java
│ │ │ │ ├── FunctionCallbackInPromptIT.java
│ │ │ │ ├── FunctionCallbackWithPlainFunctionBeanIT.java
│ │ │ │ ├── MockWeatherService.java
│ │ │ │ ├── OpenAiFunctionCallback2IT.java
│ │ │ │ └── OpenAiFunctionCallbackIT.java
│ │ │ └── resources
│ │ │ └── speech
│ │ │ └── jfk.flac
│ ├── spring-ai-autoconfigure-model-postgresml-embedding
│ │ ├── pom.xml
│ │ └── src
│ │ │ ├── main
│ │ │ ├── java
│ │ │ │ └── org
│ │ │ │ │ └── springframework
│ │ │ │ │ └── ai
│ │ │ │ │ └── model
│ │ │ │ │ └── postgresml
│ │ │ │ │ └── autoconfigure
│ │ │ │ │ ├── PostgresMlEmbeddingAutoConfiguration.java
│ │ │ │ │ └── PostgresMlEmbeddingProperties.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
│ │ │ │ │ └── gemini
│ │ │ │ │ ├── VertexAiGeminiChatAutoConfiguration.java
│ │ │ │ │ ├── VertexAiGeminiChatProperties.java
│ │ │ │ │ └── VertexAiGeminiConnectionProperties.java
│ │ │ └── resources
│ │ │ │ └── META-INF
│ │ │ │ └── spring
│ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ │ └── test
│ │ │ └── java
│ │ │ └── org
│ │ │ └── springframework
│ │ │ └── ai
│ │ │ └── model
│ │ │ └── vertexai
│ │ │ └── autoconfigure
│ │ │ ├── embedding
│ │ │ └── VertexAiTextEmbeddingModelAutoConfigurationIT.java
│ │ │ └── gemini
│ │ │ ├── VertexAiGeminiChatAutoConfigurationIT.java
│ │ │ ├── VertexAiModelConfigurationTests.java
│ │ │ └── tool
│ │ │ ├── FunctionCallWithFunctionBeanIT.java
│ │ │ ├── FunctionCallWithFunctionWrapperIT.java
│ │ │ ├── FunctionCallWithPromptFunctionIT.java
│ │ │ └── MockWeatherService.java
│ ├── spring-ai-autoconfigure-model-zhipuai
│ │ ├── pom.xml
│ │ └── src
│ │ │ ├── main
│ │ │ ├── java
│ │ │ │ └── org
│ │ │ │ │ └── springframework
│ │ │ │ │ └── ai
│ │ │ │ │ └── model
│ │ │ │ │ └── zhipuai
│ │ │ │ │ └── autoconfigure
│ │ │ │ │ ├── ZhiPuAiChatAutoConfiguration.java
│ │ │ │ │ ├── ZhiPuAiChatProperties.java
│ │ │ │ │ ├── ZhiPuAiConnectionProperties.java
│ │ │ │ │ ├── ZhiPuAiEmbeddingAutoConfiguration.java
│ │ │ │ │ ├── ZhiPuAiEmbeddingProperties.java
│ │ │ │ │ ├── ZhiPuAiImageAutoConfiguration.java
│ │ │ │ │ ├── ZhiPuAiImageProperties.java
│ │ │ │ │ └── ZhiPuAiParentProperties.java
│ │ │ └── resources
│ │ │ │ └── META-INF
│ │ │ │ └── spring
│ │ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ │ └── test
│ │ │ └── java
│ │ │ └── org
│ │ │ └── springframework
│ │ │ └── ai
│ │ │ └── model
│ │ │ └── zhipuai
│ │ │ └── autoconfigure
│ │ │ ├── ZhiPuAiAutoConfigurationIT.java
│ │ │ ├── ZhiPuAiPropertiesTests.java
│ │ │ └── tool
│ │ │ ├── FunctionCallbackInPromptIT.java
│ │ │ ├── FunctionCallbackWithPlainFunctionBeanIT.java
│ │ │ ├── MockWeatherService.java
│ │ │ └── ZhipuAiFunctionCallbackIT.java
│ └── tool
│ │ └── spring-ai-autoconfigure-model-tool
│ │ ├── pom.xml
│ │ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ │ └── springframework
│ │ │ │ └── ai
│ │ │ │ └── model
│ │ │ │ └── tool
│ │ │ │ └── autoconfigure
│ │ │ │ ├── ToolCallingAutoConfiguration.java
│ │ │ │ └── ToolCallingProperties.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-cosmos-db
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ │ └── springframework
│ │ │ │ └── ai
│ │ │ │ └── vectorstore
│ │ │ │ └── cosmosdb
│ │ │ │ └── autoconfigure
│ │ │ │ ├── CosmosDBVectorStoreAutoConfiguration.java
│ │ │ │ └── CosmosDBVectorStoreProperties.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-azure
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ │ └── springframework
│ │ │ │ └── ai
│ │ │ │ └── vectorstore
│ │ │ │ └── azure
│ │ │ │ └── autoconfigure
│ │ │ │ ├── AzureVectorStoreAutoConfiguration.java
│ │ │ │ └── AzureVectorStoreProperties.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-cassandra
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ │ └── springframework
│ │ │ │ └── ai
│ │ │ │ └── vectorstore
│ │ │ │ └── cassandra
│ │ │ │ └── autoconfigure
│ │ │ │ ├── CassandraVectorStoreAutoConfiguration.java
│ │ │ │ └── CassandraVectorStoreProperties.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
│ │ └── 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
│ │ └── 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
│ │ └── 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
│ │ └── resources
│ │ │ └── META-INF
│ │ │ └── spring
│ │ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ │ └── test
│ │ └── java
│ │ └── org
│ │ └── springframework
│ │ └── ai
│ │ └── vectorstore
│ │ └── gemfire
│ │ └── autoconfigure
│ │ ├── GemFireVectorStoreAutoConfigurationIT.java
│ │ └── GemFireVectorStorePropertiesTests.java
│ ├── spring-ai-autoconfigure-vector-store-mariadb
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ │ └── springframework
│ │ │ │ └── ai
│ │ │ │ └── vectorstore
│ │ │ │ └── mariadb
│ │ │ │ └── autoconfigure
│ │ │ │ ├── MariaDbStoreAutoConfiguration.java
│ │ │ │ └── MariaDbStoreProperties.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
│ │ └── 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
│ │ └── 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
│ │ └── 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
│ │ └── 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
│ │ └── 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
│ │ └── 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
│ │ └── 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
│ │ └── 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
│ │ └── 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
│ │ └── 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-typesense
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ │ └── springframework
│ │ │ │ └── ai
│ │ │ │ └── vectorstore
│ │ │ │ └── typesense
│ │ │ │ └── autoconfigure
│ │ │ │ ├── TypesenseConnectionDetails.java
│ │ │ │ ├── TypesenseServiceClientProperties.java
│ │ │ │ ├── TypesenseVectorStoreAutoConfiguration.java
│ │ │ │ └── TypesenseVectorStoreProperties.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
│ └── resources
│ │ └── META-INF
│ │ └── spring
│ │ └── org.springframework.boot.autoconfigure.AutoConfiguration.imports
│ └── test
│ └── java
│ └── org
│ └── springframework
│ └── ai
│ └── vectorstore
│ └── weaviate
│ └── autoconfigure
│ └── WeaviateVectorStoreAutoConfigurationIT.java
├── document-readers
├── jsoup-reader
│ ├── README.md
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ └── java
│ │ │ └── org
│ │ │ └── springframework
│ │ │ └── ai
│ │ │ └── reader
│ │ │ └── jsoup
│ │ │ ├── JsoupDocumentReader.java
│ │ │ └── config
│ │ │ └── JsoupDocumentReaderConfig.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
│ │ └── test
│ │ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── ai
│ │ │ └── reader
│ │ │ └── markdown
│ │ │ └── MarkdownDocumentReaderTest.java
│ │ └── resources
│ │ ├── blockquote.md
│ │ ├── code.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
│ │ │ │ ├── config
│ │ │ │ ├── ParagraphManager.java
│ │ │ │ └── PdfDocumentReaderConfig.java
│ │ │ │ └── layout
│ │ │ │ ├── Character.java
│ │ │ │ ├── CharacterFactory.java
│ │ │ │ ├── ForkPDFLayoutTextStripper.java
│ │ │ │ ├── PDFLayoutTextStripperByArea.java
│ │ │ │ └── TextLine.java
│ │ └── resources
│ │ │ └── META-INF
│ │ │ └── spring
│ │ │ └── aot.factories
│ │ └── test
│ │ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── ai
│ │ │ └── reader
│ │ │ └── pdf
│ │ │ ├── PagePdfDocumentReaderTests.java
│ │ │ ├── ParagraphPdfDocumentReaderTests.java
│ │ │ ├── aot
│ │ │ └── PdfReaderRuntimeHintsTests.java
│ │ │ └── layout
│ │ │ └── TextLineTest.java
│ │ └── resources
│ │ ├── sample1.pdf
│ │ └── sample2.pdf
└── tika-reader
│ ├── pom.xml
│ └── src
│ ├── main
│ └── java
│ │ └── org
│ │ └── springframework
│ │ └── ai
│ │ └── reader
│ │ └── tika
│ │ └── TikaDocumentReader.java
│ └── test
│ ├── java
│ └── org
│ │ └── springframework
│ │ └── ai
│ │ └── reader
│ │ └── tika
│ │ └── TikaDocumentReaderTests.java
│ └── resources
│ ├── sample.ppt
│ ├── sample.pptx
│ ├── sample2.pdf
│ ├── word-sample.doc
│ └── word-sample.docx
├── mcp
└── common
│ ├── pom.xml
│ └── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── ai
│ │ │ └── mcp
│ │ │ ├── AsyncMcpToolCallback.java
│ │ │ ├── AsyncMcpToolCallbackProvider.java
│ │ │ ├── McpToolUtils.java
│ │ │ ├── SyncMcpToolCallback.java
│ │ │ ├── SyncMcpToolCallbackProvider.java
│ │ │ ├── aot
│ │ │ └── McpHints.java
│ │ │ ├── customizer
│ │ │ ├── McpAsyncClientCustomizer.java
│ │ │ └── McpSyncClientCustomizer.java
│ │ │ └── package-info.java
│ └── resources
│ │ └── META-INF
│ │ └── spring
│ │ └── aot.factories
│ └── test
│ └── java
│ └── org
│ └── springframework
│ └── ai
│ └── mcp
│ ├── SyncMcpToolCallbackProviderTests.java
│ ├── SyncMcpToolCallbackTests.java
│ └── ToolUtilsTests.java
├── 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
│ │ └── test
│ │ └── java
│ │ └── org
│ │ └── springframework
│ │ └── ai
│ │ └── chat
│ │ └── memory
│ │ └── repository
│ │ └── cassandra
│ │ ├── CassandraChatMemoryRepositoryIT.java
│ │ └── CassandraImage.java
│ ├── spring-ai-model-chat-memory-repository-jdbc
│ ├── README.md
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ │ └── springframework
│ │ │ │ └── ai
│ │ │ │ └── chat
│ │ │ │ └── memory
│ │ │ │ └── repository
│ │ │ │ └── jdbc
│ │ │ │ ├── HsqldbChatMemoryRepositoryDialect.java
│ │ │ │ ├── JdbcChatMemoryRepository.java
│ │ │ │ ├── JdbcChatMemoryRepositoryDialect.java
│ │ │ │ ├── MysqlChatMemoryRepositoryDialect.java
│ │ │ │ ├── PostgresChatMemoryRepositoryDialect.java
│ │ │ │ ├── SqlServerChatMemoryRepositoryDialect.java
│ │ │ │ ├── aot
│ │ │ │ └── hint
│ │ │ │ │ └── JdbcChatMemoryRepositoryRuntimeHints.java
│ │ │ │ └── package-info.java
│ │ └── resources
│ │ │ ├── META-INF
│ │ │ └── spring
│ │ │ │ └── aot.factories
│ │ │ └── org
│ │ │ └── springframework
│ │ │ └── ai
│ │ │ └── chat
│ │ │ └── memory
│ │ │ └── repository
│ │ │ └── jdbc
│ │ │ ├── schema-hsqldb.sql
│ │ │ ├── schema-mariadb.sql
│ │ │ ├── schema-mysql.sql
│ │ │ ├── schema-postgresql.sql
│ │ │ └── schema-sqlserver.sql
│ │ └── test
│ │ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── ai
│ │ │ └── chat
│ │ │ └── memory
│ │ │ └── repository
│ │ │ └── jdbc
│ │ │ ├── AbstractJdbcChatMemoryRepositoryIT.java
│ │ │ ├── JdbcChatMemoryRepositoryBuilderTests.java
│ │ │ ├── JdbcChatMemoryRepositoryMariaDbIT.java
│ │ │ ├── JdbcChatMemoryRepositoryMysqlIT.java
│ │ │ ├── JdbcChatMemoryRepositoryPostgresqlIT.java
│ │ │ ├── JdbcChatMemoryRepositorySqlServerIT.java
│ │ │ └── aot
│ │ │ └── hint
│ │ │ └── JdbcChatMemoryRepositoryRuntimeHintsTest.java
│ │ └── resources
│ │ └── container-license-acceptance.txt
│ └── spring-ai-model-chat-memory-repository-neo4j
│ ├── pom.xml
│ └── src
│ ├── main
│ └── java
│ │ └── org
│ │ └── springframework
│ │ └── ai
│ │ └── chat
│ │ └── memory
│ │ └── repository
│ │ └── neo4j
│ │ ├── MediaAttributes.java
│ │ ├── MessageAttributes.java
│ │ ├── Neo4jChatMemoryRepository.java
│ │ ├── Neo4jChatMemoryRepositoryConfig.java
│ │ ├── ToolCallAttributes.java
│ │ └── ToolResponseAttributes.java
│ └── test
│ └── java
│ └── org
│ └── springframework
│ └── ai
│ └── chat
│ └── memory
│ └── repository
│ └── neo4j
│ ├── Neo4JChatMemoryRepositoryConfigIT.java
│ └── Neo4jChatMemoryRepositoryIT.java
├── models
├── spring-ai-anthropic
│ ├── README.md
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ │ └── springframework
│ │ │ │ └── ai
│ │ │ │ └── anthropic
│ │ │ │ ├── AnthropicChatModel.java
│ │ │ │ ├── AnthropicChatOptions.java
│ │ │ │ ├── aot
│ │ │ │ └── AnthropicRuntimeHints.java
│ │ │ │ ├── api
│ │ │ │ ├── AnthropicApi.java
│ │ │ │ └── StreamHelper.java
│ │ │ │ └── metadata
│ │ │ │ └── AnthropicRateLimit.java
│ │ └── resources
│ │ │ └── META-INF
│ │ │ └── spring
│ │ │ └── aot.factories
│ │ └── test
│ │ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── ai
│ │ │ └── anthropic
│ │ │ ├── AnthropicChatModelAdditionalHttpHeadersIT.java
│ │ │ ├── AnthropicChatModelIT.java
│ │ │ ├── AnthropicChatModelObservationIT.java
│ │ │ ├── AnthropicChatOptionsTests.java
│ │ │ ├── AnthropicTestConfiguration.java
│ │ │ ├── ChatCompletionRequestTests.java
│ │ │ ├── EventParsingTests.java
│ │ │ ├── aot
│ │ │ └── AnthropicRuntimeHintsTests.java
│ │ │ ├── api
│ │ │ ├── AnthropicApiBuilderTests.java
│ │ │ ├── AnthropicApiIT.java
│ │ │ └── tool
│ │ │ │ ├── AnthropicApiLegacyToolIT.java
│ │ │ │ ├── AnthropicApiToolIT.java
│ │ │ │ ├── MockWeatherService.java
│ │ │ │ └── XmlHelper.java
│ │ │ └── client
│ │ │ ├── AnthropicChatClientIT.java
│ │ │ ├── AnthropicChatClientMethodInvokingFunctionCallbackIT.java
│ │ │ └── ChatClientToolsWithGenericArgumentTypesIT.java
│ │ └── resources
│ │ ├── application-logging-test.properties
│ │ ├── prompts
│ │ └── system-message.st
│ │ ├── sample_events.json
│ │ ├── spring-ai-reference-overview.pdf
│ │ └── test.png
├── 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
│ │ ├── multimodality
│ │ └── multimodal.test.png
│ │ ├── prompts
│ │ └── system-message.st
│ │ └── speech
│ │ └── jfk.flac
├── spring-ai-bedrock-converse
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ └── java
│ │ │ └── org
│ │ │ └── springframework
│ │ │ └── ai
│ │ │ └── bedrock
│ │ │ └── converse
│ │ │ ├── BedrockProxyChatModel.java
│ │ │ └── api
│ │ │ ├── BedrockMediaFormat.java
│ │ │ ├── ConverseApiUtils.java
│ │ │ └── URLValidator.java
│ │ └── test
│ │ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── ai
│ │ │ └── bedrock
│ │ │ └── converse
│ │ │ ├── BedrockConverseChatClientIT.java
│ │ │ ├── BedrockConverseTestConfiguration.java
│ │ │ ├── BedrockConverseUsageAggregationTests.java
│ │ │ ├── BedrockProxyChatModelIT.java
│ │ │ ├── BedrockProxyChatModelObservationIT.java
│ │ │ ├── BedrockProxyChatModelTest.java
│ │ │ ├── MockWeatherService.java
│ │ │ ├── RequiresAwsCredentials.java
│ │ │ ├── api
│ │ │ └── BedrockMediaFormatTest.java
│ │ │ ├── client
│ │ │ └── BedrockNovaChatClientIT.java
│ │ │ └── experiments
│ │ │ ├── BedrockConverseChatModelMain.java
│ │ │ └── BedrockConverseChatModelMain3.java
│ │ └── resources
│ │ ├── prompts
│ │ └── system-message.st
│ │ ├── spring-ai-reference-overview.pdf
│ │ ├── test.png
│ │ └── test.video.mp4
├── 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_framework.png
│ │ └── test.png
├── spring-ai-deepseek
│ ├── README.md
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ │ └── springframework
│ │ │ │ └── ai
│ │ │ │ └── deepseek
│ │ │ │ ├── DeepSeekAssistantMessage.java
│ │ │ │ ├── DeepSeekChatModel.java
│ │ │ │ ├── DeepSeekChatOptions.java
│ │ │ │ ├── aot
│ │ │ │ └── DeepSeekRuntimeHints.java
│ │ │ │ └── api
│ │ │ │ ├── DeepSeekApi.java
│ │ │ │ ├── DeepSeekStreamFunctionCallingHelper.java
│ │ │ │ ├── ResponseFormat.java
│ │ │ │ └── common
│ │ │ │ └── DeepSeekConstants.java
│ │ └── resources
│ │ │ └── META-INF
│ │ │ └── spring
│ │ │ └── aot.factories
│ │ └── test
│ │ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── ai
│ │ │ └── deepseek
│ │ │ ├── DeepSeekChatCompletionRequestTests.java
│ │ │ ├── DeepSeekRetryTests.java
│ │ │ ├── DeepSeekTestConfiguration.java
│ │ │ ├── aot
│ │ │ └── DeepSeekRuntimeHintsTests.java
│ │ │ ├── api
│ │ │ ├── DeepSeekApiIT.java
│ │ │ └── MockWeatherService.java
│ │ │ └── chat
│ │ │ ├── ActorsFilms.java
│ │ │ ├── DeepSeekChatModelFunctionCallingIT.java
│ │ │ ├── DeepSeekChatModelIT.java
│ │ │ └── DeepSeekChatModelObservationIT.java
│ │ └── resources
│ │ └── prompts
│ │ └── system-message.st
├── spring-ai-huggingface
│ ├── README.md
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ │ └── springframework
│ │ │ │ └── ai
│ │ │ │ └── huggingface
│ │ │ │ └── HuggingfaceChatModel.java
│ │ └── resources
│ │ │ ├── handlebars
│ │ │ └── Java
│ │ │ │ └── libraries
│ │ │ │ └── resttemplate
│ │ │ │ └── auth
│ │ │ │ └── HttpBasicAuth.mustache
│ │ │ └── openapi.json
│ │ └── test
│ │ └── java
│ │ └── org
│ │ └── springframework
│ │ └── ai
│ │ └── huggingface
│ │ ├── HuggingfaceTestConfiguration.java
│ │ └── client
│ │ └── ClientIT.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
│ │ │ ├── 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
│ │ │ │ ├── api
│ │ │ │ ├── MistralAiApi.java
│ │ │ │ ├── MistralAiModerationApi.java
│ │ │ │ └── MistralAiStreamFunctionCallingHelper.java
│ │ │ │ └── moderation
│ │ │ │ ├── MistralAiModerationModel.java
│ │ │ │ └── MistralAiModerationOptions.java
│ │ └── resources
│ │ │ └── META-INF
│ │ │ └── spring
│ │ │ └── aot.factories
│ │ └── test
│ │ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── ai
│ │ │ └── mistralai
│ │ │ ├── MistralAiChatClientIT.java
│ │ │ ├── MistralAiChatCompletionRequestTest.java
│ │ │ ├── MistralAiChatModelIT.java
│ │ │ ├── MistralAiChatModelObservationIT.java
│ │ │ ├── MistralAiEmbeddingIT.java
│ │ │ ├── MistralAiEmbeddingModelObservationIT.java
│ │ │ ├── MistralAiModerationModelIT.java
│ │ │ ├── MistralAiRetryTests.java
│ │ │ ├── MistralAiTestConfiguration.java
│ │ │ ├── MockWeatherService.java
│ │ │ ├── aot
│ │ │ └── MistralAiRuntimeHintsTests.java
│ │ │ └── api
│ │ │ ├── MistralAiApiIT.java
│ │ │ └── tool
│ │ │ ├── MistralAiApiToolFunctionCallIT.java
│ │ │ ├── MockWeatherService.java
│ │ │ └── PaymentStatusFunctionCallingIT.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
│ │ └── test.png
├── spring-ai-oci-genai
│ ├── README.md
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ └── java
│ │ │ └── org
│ │ │ └── springframework
│ │ │ └── ai
│ │ │ └── oci
│ │ │ ├── OCIEmbeddingModel.java
│ │ │ ├── OCIEmbeddingOptions.java
│ │ │ ├── ServingModeHelper.java
│ │ │ └── cohere
│ │ │ ├── OCICohereChatModel.java
│ │ │ └── OCICohereChatOptions.java
│ │ └── test
│ │ └── java
│ │ └── org
│ │ └── springframework
│ │ └── ai
│ │ └── oci
│ │ ├── BaseEmbeddingModelTest.java
│ │ ├── BaseOCIGenAITest.java
│ │ ├── OCIEmbeddingModelIT.java
│ │ └── cohere
│ │ ├── OCICohereChatModelIT.java
│ │ └── OCICohereChatOptionsTests.java
├── spring-ai-ollama
│ ├── README.md
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ │ └── springframework
│ │ │ │ └── ai
│ │ │ │ └── ollama
│ │ │ │ ├── OllamaChatModel.java
│ │ │ │ ├── OllamaEmbeddingModel.java
│ │ │ │ ├── aot
│ │ │ │ └── OllamaRuntimeHints.java
│ │ │ │ ├── api
│ │ │ │ ├── OllamaApi.java
│ │ │ │ ├── OllamaApiHelper.java
│ │ │ │ ├── OllamaModel.java
│ │ │ │ ├── OllamaOptions.java
│ │ │ │ └── common
│ │ │ │ │ └── OllamaApiConstants.java
│ │ │ │ └── management
│ │ │ │ ├── ModelManagementOptions.java
│ │ │ │ ├── OllamaModelManager.java
│ │ │ │ ├── PullModelStrategy.java
│ │ │ │ └── package-info.java
│ │ └── resources
│ │ │ └── META-INF
│ │ │ └── spring
│ │ │ └── aot.factories
│ │ └── test
│ │ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── ai
│ │ │ └── ollama
│ │ │ ├── BaseOllamaIT.java
│ │ │ ├── OllamaChatModelFunctionCallingIT.java
│ │ │ ├── OllamaChatModelIT.java
│ │ │ ├── OllamaChatModelMultimodalIT.java
│ │ │ ├── OllamaChatModelObservationIT.java
│ │ │ ├── OllamaChatModelTests.java
│ │ │ ├── OllamaChatRequestTests.java
│ │ │ ├── OllamaEmbeddingModelIT.java
│ │ │ ├── OllamaEmbeddingModelObservationIT.java
│ │ │ ├── OllamaEmbeddingModelTests.java
│ │ │ ├── OllamaEmbeddingRequestTests.java
│ │ │ ├── OllamaImage.java
│ │ │ ├── aot
│ │ │ └── OllamaRuntimeHintsTests.java
│ │ │ ├── api
│ │ │ ├── OllamaApiIT.java
│ │ │ ├── OllamaApiModelsIT.java
│ │ │ ├── OllamaDurationFieldsTests.java
│ │ │ ├── OllamaModelOptionsTests.java
│ │ │ └── tool
│ │ │ │ ├── MockWeatherService.java
│ │ │ │ └── OllamaApiToolFunctionCallIT.java
│ │ │ └── management
│ │ │ └── OllamaModelManagerIT.java
│ │ └── resources
│ │ ├── doc
│ │ └── Ollama Chat API.jpg
│ │ ├── norway.webp
│ │ └── test.png
├── spring-ai-openai
│ ├── README.md
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ │ └── springframework
│ │ │ │ └── ai
│ │ │ │ └── openai
│ │ │ │ ├── ImageResponseMetadata.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
│ │ │ │ ├── aot
│ │ │ │ └── OpenAiRuntimeHints.java
│ │ │ │ ├── api
│ │ │ │ ├── OpenAiApi.java
│ │ │ │ ├── OpenAiAudioApi.java
│ │ │ │ ├── OpenAiImageApi.java
│ │ │ │ ├── OpenAiModerationApi.java
│ │ │ │ ├── OpenAiStreamFunctionCallingHelper.java
│ │ │ │ ├── ResponseFormat.java
│ │ │ │ └── common
│ │ │ │ │ ├── OpenAiApiClientErrorException.java
│ │ │ │ │ └── OpenAiApiConstants.java
│ │ │ │ ├── audio
│ │ │ │ └── speech
│ │ │ │ │ ├── Speech.java
│ │ │ │ │ ├── SpeechMessage.java
│ │ │ │ │ ├── SpeechModel.java
│ │ │ │ │ ├── SpeechPrompt.java
│ │ │ │ │ ├── SpeechResponse.java
│ │ │ │ │ └── StreamingSpeechModel.java
│ │ │ │ └── metadata
│ │ │ │ ├── OpenAiImageGenerationMetadata.java
│ │ │ │ ├── OpenAiModerationGenerationMetadata.java
│ │ │ │ ├── OpenAiRateLimit.java
│ │ │ │ ├── audio
│ │ │ │ ├── OpenAiAudioSpeechMetadata.java
│ │ │ │ ├── OpenAiAudioSpeechResponseMetadata.java
│ │ │ │ └── OpenAiAudioTranscriptionResponseMetadata.java
│ │ │ │ └── support
│ │ │ │ ├── OpenAiApiResponseHeaders.java
│ │ │ │ └── OpenAiResponseHeaderExtractor.java
│ │ └── resources
│ │ │ └── META-INF
│ │ │ └── spring
│ │ │ └── aot.factories
│ │ └── test
│ │ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── ai
│ │ │ └── openai
│ │ │ ├── ChatCompletionRequestTests.java
│ │ │ ├── OpenAiChatOptionsTests.java
│ │ │ ├── OpenAiImageOptionsTests.java
│ │ │ ├── OpenAiTestConfiguration.java
│ │ │ ├── TranscriptionRequestTests.java
│ │ │ ├── acme
│ │ │ └── AcmeIT.java
│ │ │ ├── aot
│ │ │ └── OpenAiRuntimeHintsTests.java
│ │ │ ├── api
│ │ │ ├── OpenAiApiBuilderTests.java
│ │ │ ├── OpenAiApiIT.java
│ │ │ ├── OpenAiChatModelMutateTests.java
│ │ │ ├── OpenAiStreamFunctionCallingHelperTest.java
│ │ │ └── tool
│ │ │ │ ├── MockWeatherService.java
│ │ │ │ └── OpenAiApiToolFunctionCallIT.java
│ │ │ ├── audio
│ │ │ ├── api
│ │ │ │ ├── OpenAiAudioApiBuilderTests.java
│ │ │ │ ├── OpenAiAudioApiIT.java
│ │ │ │ └── OpenAiAudioModelNoOpApiKeysIT.java
│ │ │ ├── speech
│ │ │ │ ├── OpenAiSpeechModelIT.java
│ │ │ │ └── OpenAiSpeechModelWithSpeechResponseMetadataTests.java
│ │ │ └── transcription
│ │ │ │ ├── OpenAiTranscriptionModelIT.java
│ │ │ │ ├── OpenAiTranscriptionModelWithTranscriptionResponseMetadataTests.java
│ │ │ │ └── TranscriptionModelTests.java
│ │ │ ├── chat
│ │ │ ├── ActorsFilms.java
│ │ │ ├── MessageTypeContentTests.java
│ │ │ ├── OpenAiChatModelAdditionalHttpHeadersIT.java
│ │ │ ├── OpenAiChatModelFunctionCallingIT.java
│ │ │ ├── OpenAiChatModelIT.java
│ │ │ ├── OpenAiChatModelNoOpApiKeysIT.java
│ │ │ ├── OpenAiChatModelObservationIT.java
│ │ │ ├── OpenAiChatModelResponseFormatIT.java
│ │ │ ├── OpenAiChatModelTypeReferenceBeanOutputConverterIT.java
│ │ │ ├── OpenAiChatModelWithChatResponseMetadataTests.java
│ │ │ ├── OpenAiCompatibleChatModelIT.java
│ │ │ ├── OpenAiPaymentTransactionIT.java
│ │ │ ├── OpenAiRetryTests.java
│ │ │ ├── client
│ │ │ │ ├── ChatClientToolsWithGenericArgumentTypesIT.java
│ │ │ │ ├── OpenAiChatClientIT.java
│ │ │ │ ├── OpenAiChatClientMemoryAdvisorReproIT.java
│ │ │ │ ├── OpenAiChatClientMethodInvokingFunctionCallbackIT.java
│ │ │ │ ├── OpenAiChatClientMultipleFunctionCallsIT.java
│ │ │ │ ├── ReReadingAdvisor.java
│ │ │ │ └── advisor
│ │ │ │ │ ├── AbstractChatMemoryAdvisorIT.java
│ │ │ │ │ ├── MessageChatMemoryAdvisorIT.java
│ │ │ │ │ └── PromptChatMemoryAdvisorIT.java
│ │ │ └── proxy
│ │ │ │ ├── DeepSeekWithOpenAiChatModelIT.java
│ │ │ │ ├── DockerModelRunnerWithOpenAiChatModelIT.java
│ │ │ │ ├── GroqWithOpenAiChatModelIT.java
│ │ │ │ ├── MistralWithOpenAiChatModelIT.java
│ │ │ │ ├── MultiOpenAiClientIT.java
│ │ │ │ ├── NvidiaWithOpenAiChatModelIT.java
│ │ │ │ ├── OllamaWithOpenAiChatModelIT.java
│ │ │ │ ├── PerplexityWithOpenAiChatModelIT.java
│ │ │ │ └── VertexAIGeminiWithOpenAiChatModelIT.java
│ │ │ ├── embedding
│ │ │ ├── EmbeddingIT.java
│ │ │ └── OpenAiEmbeddingModelObservationIT.java
│ │ │ ├── image
│ │ │ ├── OpenAiImageModelIT.java
│ │ │ ├── OpenAiImageModelNoOpApiKeysIT.java
│ │ │ ├── OpenAiImageModelObservationIT.java
│ │ │ ├── OpenAiImageModelWithImageResponseMetadataTests.java
│ │ │ └── api
│ │ │ │ └── OpenAiImageApiBuilderTests.java
│ │ │ ├── metadata
│ │ │ ├── OpenAiUsageTests.java
│ │ │ └── support
│ │ │ │ └── OpenAiResponseHeaderExtractorTests.java
│ │ │ ├── moderation
│ │ │ ├── OpenAiModerationModelIT.java
│ │ │ ├── OpenAiModerationModelNoOpApiKeysIT.java
│ │ │ ├── OpenAiModerationModelTests.java
│ │ │ └── api
│ │ │ │ └── OpenAiModerationApiBuilderTests.java
│ │ │ ├── testutils
│ │ │ └── AbstractIT.java
│ │ │ ├── transformer
│ │ │ └── MetadataTransformerIT.java
│ │ │ └── vectorstore
│ │ │ └── SimplePersistentVectorStoreIT.java
│ │ └── resources
│ │ ├── application-logging-test.properties
│ │ ├── data
│ │ └── acme
│ │ │ └── bikes.json
│ │ ├── 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
│ │ ├── speech
│ │ ├── jfk.flac
│ │ └── speech1.mp3
│ │ ├── test.png
│ │ └── text_source.txt
├── spring-ai-postgresml
│ ├── README.md
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ └── java
│ │ │ └── org
│ │ │ └── springframework
│ │ │ └── ai
│ │ │ └── postgresml
│ │ │ ├── PostgresMlEmbeddingModel.java
│ │ │ └── PostgresMlEmbeddingOptions.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
│ │ └── 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
│ │ └── resources
│ │ │ └── onnx
│ │ │ └── all-MiniLM-L6-v2
│ │ │ ├── model.onnx
│ │ │ ├── model.png
│ │ │ └── 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
│ │ └── resources
│ │ ├── test.image.png
│ │ └── test.video.mp4
├── spring-ai-vertex-ai-gemini
│ ├── README.md
│ ├── pom.xml
│ └── src
│ │ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ │ └── springframework
│ │ │ │ └── ai
│ │ │ │ └── vertexai
│ │ │ │ └── gemini
│ │ │ │ ├── MimeTypeDetector.java
│ │ │ │ ├── VertexAiGeminiChatModel.java
│ │ │ │ ├── VertexAiGeminiChatOptions.java
│ │ │ │ ├── aot
│ │ │ │ └── VertexAiGeminiRuntimeHints.java
│ │ │ │ ├── common
│ │ │ │ ├── VertexAiGeminiConstants.java
│ │ │ │ └── VertexAiGeminiSafetySetting.java
│ │ │ │ └── schema
│ │ │ │ ├── JsonSchemaConverter.java
│ │ │ │ └── VertexToolCallingManager.java
│ │ └── resources
│ │ │ └── META-INF
│ │ │ └── spring
│ │ │ └── aot.factories
│ │ └── test
│ │ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── ai
│ │ │ └── vertexai
│ │ │ └── gemini
│ │ │ ├── CreateGeminiRequestTests.java
│ │ │ ├── TestVertexAiGeminiChatModel.java
│ │ │ ├── VertexAiChatModelObservationIT.java
│ │ │ ├── VertexAiGeminiChatModelIT.java
│ │ │ ├── VertexAiGeminiRetryTests.java
│ │ │ ├── aot
│ │ │ └── VertexAiGeminiRuntimeHintsTests.java
│ │ │ ├── schema
│ │ │ └── JsonSchemaConverterTests.java
│ │ │ └── tool
│ │ │ ├── MockWeatherService.java
│ │ │ ├── VertexAiGeminiChatModelToolCallingIT.java
│ │ │ ├── VertexAiGeminiPaymentTransactionIT.java
│ │ │ ├── VertexAiGeminiPaymentTransactionMethodIT.java
│ │ │ └── VertexAiGeminiPaymentTransactionToolsIT.java
│ │ └── resources
│ │ ├── prompts
│ │ └── system-message.st
│ │ ├── spring-ai-reference-overview.pdf
│ │ └── vertex.test.png
└── spring-ai-zhipuai
│ ├── README.md
│ ├── pom.xml
│ └── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── ai
│ │ │ └── zhipuai
│ │ │ ├── ZhiPuAiChatModel.java
│ │ │ ├── ZhiPuAiChatOptions.java
│ │ │ ├── ZhiPuAiEmbeddingModel.java
│ │ │ ├── ZhiPuAiEmbeddingOptions.java
│ │ │ ├── ZhiPuAiImageModel.java
│ │ │ ├── ZhiPuAiImageOptions.java
│ │ │ ├── aot
│ │ │ └── ZhiPuAiRuntimeHints.java
│ │ │ └── api
│ │ │ ├── ZhiPuAiApi.java
│ │ │ ├── ZhiPuAiImageApi.java
│ │ │ ├── ZhiPuAiStreamFunctionCallingHelper.java
│ │ │ └── ZhiPuApiConstants.java
│ └── resources
│ │ └── META-INF
│ │ └── spring
│ │ └── aot.factories
│ └── test
│ ├── java
│ └── org
│ │ └── springframework
│ │ └── ai
│ │ └── zhipuai
│ │ ├── ChatCompletionRequestTests.java
│ │ ├── ZhiPuAiTestConfiguration.java
│ │ ├── api
│ │ ├── MockWeatherService.java
│ │ ├── ZhiPuAiApiIT.java
│ │ ├── ZhiPuAiApiToolFunctionCallIT.java
│ │ └── ZhiPuAiRetryTests.java
│ │ ├── chat
│ │ ├── ActorsFilms.java
│ │ ├── ZhiPuAiChatModelIT.java
│ │ └── ZhiPuAiChatModelObservationIT.java
│ │ ├── embedding
│ │ ├── EmbeddingIT.java
│ │ └── ZhiPuAiEmbeddingModelObservationIT.java
│ │ └── image
│ │ └── ZhiPuAiImageModelIT.java
│ └── resources
│ ├── prompts
│ └── system-message.st
│ └── test.png
├── 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
│ │ │ ├── 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
│ │ │ │ ├── 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
│ │ │ │ ├── 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
│ │ │ ├── ChatClientRequestTests.java
│ │ │ ├── ChatClientResponseEntityTests.java
│ │ │ ├── ChatClientResponseTests.java
│ │ │ ├── ChatClientTest.java
│ │ │ ├── DefaultChatClientBuilderTests.java
│ │ │ ├── DefaultChatClientTests.java
│ │ │ ├── DefaultChatClientUtilsTests.java
│ │ │ ├── advisor
│ │ │ │ ├── AdvisorUtilsTests.java
│ │ │ │ ├── AdvisorsTests.java
│ │ │ │ ├── ChatModelCallAdvisorTests.java
│ │ │ │ ├── ChatModelStreamAdvisorTests.java
│ │ │ │ ├── DefaultAroundAdvisorChainTests.java
│ │ │ │ ├── MessageChatMemoryAdvisorTests.java
│ │ │ │ ├── PromptChatMemoryAdvisorTests.java
│ │ │ │ ├── SimpleLoggerAdvisorTests.java
│ │ │ │ └── observation
│ │ │ │ │ ├── AdvisorObservationContextTests.java
│ │ │ │ │ └── DefaultAdvisorObservationConventionTests.java
│ │ │ └── observation
│ │ │ │ ├── ChatClientObservationContextTests.java
│ │ │ │ ├── ChatClientPromptContentObservationHandlerTests.java
│ │ │ │ └── DefaultChatClientObservationConventionTests.java
│ │ └── evaluation
│ │ │ └── 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
│ ├── tabby-cat.png
│ ├── 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
│ │ ├── embedding
│ │ ├── BatchingStrategy.java
│ │ └── TokenCountBatchingStrategy.java
│ │ ├── evaluation
│ │ ├── EvaluationRequest.java
│ │ ├── EvaluationResponse.java
│ │ └── Evaluator.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
│ │ ├── template
│ │ ├── NoOpTemplateRenderer.java
│ │ ├── TemplateRenderer.java
│ │ └── ValidationMode.java
│ │ ├── tokenizer
│ │ ├── JTokkitTokenCountEstimator.java
│ │ └── TokenCountEstimator.java
│ │ ├── transformer
│ │ ├── ContentFormatTransformer.java
│ │ └── splitter
│ │ │ ├── TextSplitter.java
│ │ │ └── TokenTextSplitter.java
│ │ ├── util
│ │ ├── JacksonUtils.java
│ │ ├── LoggingMarkers.java
│ │ ├── ParsingUtils.java
│ │ └── ResourceUtils.java
│ │ └── writer
│ │ └── FileDocumentWriter.java
│ └── test
│ ├── java
│ └── org
│ │ └── springframework
│ │ └── ai
│ │ ├── TestConfiguration.java
│ │ ├── document
│ │ ├── ContentFormatterTests.java
│ │ ├── DocumentBuilderTests.java
│ │ ├── DocumentTests.java
│ │ ├── TextBlockAssertion.java
│ │ └── id
│ │ │ ├── IdGeneratorProviderTest.java
│ │ │ └── JdkSha256HexIdGeneratorTest.java
│ │ ├── embedding
│ │ └── TokenCountBatchingStrategyTests.java
│ │ ├── observation
│ │ ├── AiOperationMetadataTests.java
│ │ ├── ObservabilityHelperTests.java
│ │ └── TracingAwareLoggingObservationHandlerTests.java
│ │ ├── reader
│ │ ├── JsonReaderTests.java
│ │ └── TextReaderTests.java
│ │ ├── template
│ │ └── NoOpTemplateRendererTests.java
│ │ └── transformer
│ │ └── splitter
│ │ ├── TextSplitterTests.java
│ │ └── TokenTextSplitterTest.java
│ ├── kotlin
│ └── org
│ │ └── springframework
│ │ └── ai
│ │ └── utils
│ │ └── JacksonUtilsKotlinTests.kt
│ └── resources
│ ├── bikes.json
│ ├── events.json
│ ├── person.json
│ └── text_source.txt
├── spring-ai-docs
├── pom.xml
└── src
│ ├── assembly
│ └── javadocs.xml
│ └── main
│ ├── antora
│ ├── antora-playbook.yml
│ ├── antora.yml
│ ├── modules
│ │ └── ROOT
│ │ │ ├── images
│ │ │ ├── advisors-api-classes.jpg
│ │ │ ├── advisors-flow.jpg
│ │ │ ├── advisors-non-stream-vs-stream.jpg
│ │ │ ├── anthropic-claude3-class-diagram.jpg
│ │ │ ├── anthropic-claude3-events-model.jpg
│ │ │ ├── bedrock
│ │ │ │ ├── bedrock-anthropic-chat-api.png
│ │ │ │ ├── bedrock-cohere-chat-low-level-api.jpg
│ │ │ │ ├── bedrock-cohere-embedding-low-level-api.jpg
│ │ │ │ ├── bedrock-llama-chat-api.jpg
│ │ │ │ ├── bedrock-titan-chat-low-level-api.jpg
│ │ │ │ └── bedrock-titan-embedding-low-level-api.jpg
│ │ │ ├── chat-options-flow.jpg
│ │ │ ├── deepseek_r1_multiround_example.png
│ │ │ ├── embeddings-api.jpg
│ │ │ ├── etl-class-diagram.jpg
│ │ │ ├── etl-pipeline.jpg
│ │ │ ├── function-calling-basic-flow.jpg
│ │ │ ├── function-calling-tool-context.jpg
│ │ │ ├── hanadb
│ │ │ │ ├── 0.png
│ │ │ │ ├── 1.png
│ │ │ │ ├── 10.png
│ │ │ │ ├── 11.png
│ │ │ │ ├── 13.png
│ │ │ │ ├── 14.png
│ │ │ │ ├── 15.png
│ │ │ │ ├── 16.png
│ │ │ │ ├── 17.png
│ │ │ │ ├── 18.png
│ │ │ │ ├── 19.png
│ │ │ │ ├── 2.png
│ │ │ │ ├── 20.1.png
│ │ │ │ ├── 20.2.png
│ │ │ │ ├── 21.png
│ │ │ │ ├── 22.png
│ │ │ │ ├── 23.png
│ │ │ │ ├── 24.png
│ │ │ │ ├── 25.png
│ │ │ │ ├── 26.png
│ │ │ │ ├── 27.png
│ │ │ │ ├── 28.png
│ │ │ │ ├── 29.png
│ │ │ │ ├── 3.png
│ │ │ │ ├── 30.png
│ │ │ │ ├── 31.png
│ │ │ │ ├── 32.png
│ │ │ │ ├── 33.png
│ │ │ │ ├── 34.1.png
│ │ │ │ ├── 34.2.png
│ │ │ │ ├── 35.png
│ │ │ │ ├── 36.png
│ │ │ │ ├── 37.png
│ │ │ │ ├── 38.png
│ │ │ │ ├── 39.png
│ │ │ │ ├── 4.png
│ │ │ │ ├── 40.png
│ │ │ │ ├── 5.png
│ │ │ │ ├── 6.png
│ │ │ │ ├── 7.png
│ │ │ │ ├── 8.png
│ │ │ │ ├── 9.png
│ │ │ │ └── wikipedia.png
│ │ │ ├── lawofcosines.png
│ │ │ ├── mcp
│ │ │ │ ├── java-mcp-client-architecture.jpg
│ │ │ │ ├── java-mcp-server-architecture.jpg
│ │ │ │ ├── java-mcp-uml-classdiagram.svg
│ │ │ │ └── mcp-stack.svg
│ │ │ ├── mistral-ai-function-calling-flow.jpg
│ │ │ ├── model-hierarchy.jpg
│ │ │ ├── multimodal.test.png
│ │ │ ├── no.svg
│ │ │ ├── ollama-chat-completion-api.jpg
│ │ │ ├── ollama-chatmodel-function-call.jpg
│ │ │ ├── ollama-function-calling-flow.jpg
│ │ │ ├── openai-chat-api.jpg
│ │ │ ├── openai-chatclient-function-call.jpg
│ │ │ ├── openai-function-calling-flow.jpg
│ │ │ ├── orbis-sensualium-pictus2.jpg
│ │ │ ├── pythagorean-triangle.png
│ │ │ ├── spring-ai-chat-api.jpg
│ │ │ ├── spring-ai-chat-completions-clients.jpg
│ │ │ ├── spring-ai-concepts-model-types.jpg
│ │ │ ├── spring-ai-concepts-tokens.png
│ │ │ ├── spring-ai-deepseek-integration.jpg
│ │ │ ├── spring-ai-dependencies.png
│ │ │ ├── spring-ai-document1-api.jpg
│ │ │ ├── spring-ai-embeddings.jpg
│ │ │ ├── spring-ai-generic-model-api.jpg
│ │ │ ├── spring-ai-groq-functions-2.jpg
│ │ │ ├── spring-ai-groq-integration.jpg
│ │ │ ├── spring-ai-integration-diagram-3.svg
│ │ │ ├── spring-ai-mcp-architecture.jpg
│ │ │ ├── spring-ai-message-api.jpg
│ │ │ ├── spring-ai-nvidia-function-calling.jpg
│ │ │ ├── spring-ai-nvidia-llm-api-1.jpg
│ │ │ ├── spring-ai-nvidia-registration.jpg
│ │ │ ├── spring-ai-ollama-over-openai.jpg
│ │ │ ├── spring-ai-perplexity-integration.jpg
│ │ │ ├── spring-ai-prompt-stuffing.jpg
│ │ │ ├── spring-ai-rag.jpg
│ │ │ ├── spring_ai_logo_with_text.svg
│ │ │ ├── structured-output-api.jpg
│ │ │ ├── structured-output-architecture.jpg
│ │ │ ├── structured-output-hierarchy4.jpg
│ │ │ ├── test.pdf.png
│ │ │ ├── test.video.jpeg
│ │ │ ├── tools
│ │ │ │ ├── framework-manager.jpg
│ │ │ │ ├── framework-manager.png
│ │ │ │ ├── return-direct.jpg
│ │ │ │ ├── return-direct.png
│ │ │ │ ├── tool-calling-01.jpg
│ │ │ │ ├── tool-context.jpg
│ │ │ │ └── tool-context.png
│ │ │ ├── vector_2d_coordinates.png
│ │ │ ├── vector_similarity.png
│ │ │ ├── vertex-ai-chat-low-level-api.jpg
│ │ │ ├── vertex-ai-gemini-native-api.jpg
│ │ │ └── yes.svg
│ │ │ ├── nav.adoc
│ │ │ └── pages
│ │ │ ├── api
│ │ │ ├── advisors.adoc
│ │ │ ├── aimetadata.adoc
│ │ │ ├── audio
│ │ │ │ ├── speech.adoc
│ │ │ │ ├── speech
│ │ │ │ │ └── openai-speech.adoc
│ │ │ │ ├── transcriptions.adoc
│ │ │ │ └── transcriptions
│ │ │ │ │ ├── azure-openai-transcriptions.adoc
│ │ │ │ │ └── openai-transcriptions.adoc
│ │ │ ├── bedrock-chat.adoc
│ │ │ ├── bedrock.adoc
│ │ │ ├── chat-memory.adoc
│ │ │ ├── chat
│ │ │ │ ├── anthropic-chat.adoc
│ │ │ │ ├── azure-openai-chat.adoc
│ │ │ │ ├── bedrock-converse.adoc
│ │ │ │ ├── comparison.adoc
│ │ │ │ ├── deepseek-chat.adoc
│ │ │ │ ├── dmr-chat.adoc
│ │ │ │ ├── google-vertexai.adoc
│ │ │ │ ├── groq-chat.adoc
│ │ │ │ ├── huggingface.adoc
│ │ │ │ ├── minimax-chat.adoc
│ │ │ │ ├── mistralai-chat.adoc
│ │ │ │ ├── moonshot-chat.adoc
│ │ │ │ ├── nvidia-chat.adoc
│ │ │ │ ├── oci-genai
│ │ │ │ │ └── cohere-chat.adoc
│ │ │ │ ├── ollama-chat.adoc
│ │ │ │ ├── openai-chat.adoc
│ │ │ │ ├── perplexity-chat.adoc
│ │ │ │ ├── prompt-engineering-patterns.adoc
│ │ │ │ ├── qianfan-chat.adoc
│ │ │ │ ├── vertexai-gemini-chat.adoc
│ │ │ │ └── zhipuai-chat.adoc
│ │ │ ├── chatclient.adoc
│ │ │ ├── chatmodel.adoc
│ │ │ ├── cloud-bindings.adoc
│ │ │ ├── docker-compose.adoc
│ │ │ ├── effective-agents.adoc
│ │ │ ├── embeddings.adoc
│ │ │ ├── embeddings
│ │ │ │ ├── azure-openai-embeddings.adoc
│ │ │ │ ├── bedrock-cohere-embedding.adoc
│ │ │ │ ├── bedrock-titan-embedding.adoc
│ │ │ │ ├── minimax-embeddings.adoc
│ │ │ │ ├── mistralai-embeddings.adoc
│ │ │ │ ├── oci-genai-embeddings.adoc
│ │ │ │ ├── ollama-embeddings.adoc
│ │ │ │ ├── onnx.adoc
│ │ │ │ ├── openai-embeddings.adoc
│ │ │ │ ├── postgresml-embeddings.adoc
│ │ │ │ ├── qianfan-embeddings.adoc
│ │ │ │ ├── vertexai-embeddings-multimodal.adoc
│ │ │ │ ├── vertexai-embeddings-text.adoc
│ │ │ │ └── zhipuai-embeddings.adoc
│ │ │ ├── etl-pipeline.adoc
│ │ │ ├── generic-model.adoc
│ │ │ ├── image
│ │ │ │ ├── azure-openai-image.adoc
│ │ │ │ ├── openai-image.adoc
│ │ │ │ ├── qianfan-image.adoc
│ │ │ │ ├── stabilityai-image.adoc
│ │ │ │ └── zhipuai-image.adoc
│ │ │ ├── imageclient.adoc
│ │ │ ├── index.adoc
│ │ │ ├── mcp
│ │ │ │ ├── mcp-client-boot-starter-docs.adoc
│ │ │ │ ├── mcp-helpers.adoc
│ │ │ │ ├── mcp-overview.adoc
│ │ │ │ └── mcp-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.adoc
│ │ │ └── vectordbs
│ │ │ │ ├── apache-cassandra.adoc
│ │ │ │ ├── azure-cosmos-db.adoc
│ │ │ │ ├── azure.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
│ │ │ │ ├── typesense.adoc
│ │ │ │ ├── understand-vectordbs.adoc
│ │ │ │ └── weaviate.adoc
│ │ │ ├── concepts.adoc
│ │ │ ├── contribution-guidelines.adoc
│ │ │ ├── getting-started.adoc
│ │ │ ├── glossary.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
│ │ │ ├── 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
│ │ │ ├── model
│ │ │ │ ├── ChatModel.java
│ │ │ │ ├── ChatResponse.java
│ │ │ │ ├── Generation.java
│ │ │ │ ├── MessageAggregator.java
│ │ │ │ ├── StreamingChatModel.java
│ │ │ │ └── ToolContext.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
│ │ │ │ ├── FunctionPromptTemplate.java
│ │ │ │ ├── Prompt.java
│ │ │ │ ├── PromptTemplate.java
│ │ │ │ ├── PromptTemplateActions.java
│ │ │ │ ├── PromptTemplateChatActions.java
│ │ │ │ ├── PromptTemplateMessageActions.java
│ │ │ │ ├── PromptTemplateStringActions.java
│ │ │ │ └── SystemPromptTemplate.java
│ │ │ ├── converter
│ │ │ ├── AbstractConversionServiceOutputConverter.java
│ │ │ ├── AbstractMessageOutputConverter.java
│ │ │ ├── BeanOutputConverter.java
│ │ │ ├── FormatProvider.java
│ │ │ ├── ListOutputConverter.java
│ │ │ ├── MapOutputConverter.java
│ │ │ ├── README.md
│ │ │ └── StructuredOutputConverter.java
│ │ │ ├── embedding
│ │ │ ├── AbstractEmbeddingModel.java
│ │ │ ├── DocumentEmbeddingModel.java
│ │ │ ├── DocumentEmbeddingRequest.java
│ │ │ ├── Embedding.java
│ │ │ ├── EmbeddingModel.java
│ │ │ ├── EmbeddingOptions.java
│ │ │ ├── EmbeddingOptionsBuilder.java
│ │ │ ├── EmbeddingRequest.java
│ │ │ ├── EmbeddingResponse.java
│ │ │ ├── EmbeddingResponseMetadata.java
│ │ │ ├── EmbeddingResultMetadata.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
│ │ │ ├── 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
│ │ │ │ ├── ToolCallingChatOptions.java
│ │ │ │ ├── ToolCallingManager.java
│ │ │ │ ├── ToolExecutionEligibilityChecker.java
│ │ │ │ ├── ToolExecutionEligibilityPredicate.java
│ │ │ │ ├── ToolExecutionResult.java
│ │ │ │ └── package-info.java
│ │ │ └── transformer
│ │ │ │ ├── KeywordMetadataEnricher.java
│ │ │ │ └── SummaryMetadataEnricher.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
│ │ │ ├── support
│ │ │ ├── ToolCallbacks.java
│ │ │ └── UsageCalculator.java
│ │ │ ├── tool
│ │ │ ├── StaticToolCallbackProvider.java
│ │ │ ├── ToolCallback.java
│ │ │ ├── ToolCallbackProvider.java
│ │ │ ├── annotation
│ │ │ │ ├── Tool.java
│ │ │ │ ├── ToolParam.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
│ │ │ ├── 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
│ │ ├── ToolBeanRegistrationAotProcessorTests.java
│ │ └── ToolRuntimeHintsTests.java
│ │ ├── chat
│ │ ├── ChatModelTests.java
│ │ ├── memory
│ │ │ ├── InMemoryChatMemoryRepositoryTests.java
│ │ │ └── MessageWindowChatMemoryTests.java
│ │ ├── messages
│ │ │ ├── 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
│ │ ├── converter
│ │ ├── BeanOutputConverterTest.java
│ │ └── ListOutputConverterTest.java
│ │ ├── embedding
│ │ ├── AbstractEmbeddingModelTests.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
│ │ │ ├── DefaultToolCallingManagerTests.java
│ │ │ ├── DefaultToolExecutionEligibilityPredicateTests.java
│ │ │ ├── DefaultToolExecutionResultTests.java
│ │ │ ├── ToolCallingChatOptionsTests.java
│ │ │ ├── ToolExecutionEligibilityPredicateTests.java
│ │ │ └── ToolExecutionResultTests.java
│ │ ├── tool
│ │ ├── execution
│ │ │ └── DefaultToolCallResultConverterTests.java
│ │ ├── method
│ │ │ ├── MethodToolCallbackGenericTypesTest.java
│ │ │ └── MethodToolCallbackProviderTests.java
│ │ └── observation
│ │ │ ├── DefaultToolCallingObservationConventionTests.java
│ │ │ ├── ToolCallingContentObservationFilterTests.java
│ │ │ └── ToolCallingObservationContextTests.java
│ │ └── util
│ │ ├── TextBlockAssertion.java
│ │ └── json
│ │ ├── JsonParserTests.java
│ │ └── JsonSchemaGeneratorTests.java
│ ├── kotlin
│ └── org
│ │ └── springframework
│ │ └── ai
│ │ ├── model
│ │ └── ModelOptionsUtilsTests.kt
│ │ └── tool
│ │ └── resolution
│ │ ├── SpringBeanToolCallbackResolverKotlinTests.kt
│ │ ├── StandaloneWeatherKotlinFunction.kt
│ │ ├── TypeResolverHelperKotlinIT.kt
│ │ └── kotlinconfig
│ │ └── TypeResolverHelperKotlinConfiguration.kt
│ └── resources
│ ├── logback.xml
│ ├── prompt-system.txt
│ └── prompt-user.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
│ └── 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
├── spring-ai-spring-boot-docker-compose
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── ai
│ │ │ └── docker
│ │ │ └── compose
│ │ │ └── service
│ │ │ └── connection
│ │ │ ├── chroma
│ │ │ ├── ChromaDockerComposeConnectionDetailsFactory.java
│ │ │ └── ChromaEnvironment.java
│ │ │ ├── mongo
│ │ │ └── MongoDbAtlasLocalDockerComposeConnectionDetailsFactory.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
│ │ │ ├── mongo
│ │ │ └── MongoDbAtlasLocalDockerComposeConnectionDetailsFactoryIT.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
│ ├── 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-webflux
│ └── pom.xml
├── spring-ai-starter-mcp-client
│ └── pom.xml
├── spring-ai-starter-mcp-server-webflux
│ └── pom.xml
├── spring-ai-starter-mcp-server-webmvc
│ └── pom.xml
├── spring-ai-starter-mcp-server
│ └── pom.xml
├── spring-ai-starter-model-anthropic
│ └── pom.xml
├── spring-ai-starter-model-azure-openai
│ └── pom.xml
├── spring-ai-starter-model-bedrock-converse
│ └── pom.xml
├── spring-ai-starter-model-bedrock
│ └── pom.xml
├── spring-ai-starter-model-chat-memory-repository-cassandra
│ └── pom.xml
├── spring-ai-starter-model-chat-memory-repository-jdbc
│ └── pom.xml
├── spring-ai-starter-model-chat-memory-repository-neo4j
│ └── pom.xml
├── spring-ai-starter-model-chat-memory
│ └── pom.xml
├── spring-ai-starter-model-deepseek
│ └── pom.xml
├── spring-ai-starter-model-huggingface
│ └── pom.xml
├── spring-ai-starter-model-minimax
│ └── pom.xml
├── spring-ai-starter-model-mistral-ai
│ └── pom.xml
├── spring-ai-starter-model-oci-genai
│ └── 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-model-vertex-ai-gemini
│ └── pom.xml
├── spring-ai-starter-model-zhipuai
│ └── pom.xml
├── spring-ai-starter-vector-store-aws-opensearch
│ └── pom.xml
├── spring-ai-starter-vector-store-azure-cosmos-db
│ └── pom.xml
├── spring-ai-starter-vector-store-azure
│ └── 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-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
│ │ │ ├── milvus
│ │ │ └── MilvusContainerConnectionDetailsFactory.java
│ │ │ ├── mongo
│ │ │ └── MongoDbAtlasLocalContainerConnectionDetailsFactory.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
│ ├── milvus
│ ├── MilvusContainerConnectionDetailsFactoryIT.java
│ └── MilvusImage.java
│ ├── mongo
│ ├── MongoDbAtlasLocalContainerConnectionDetailsFactoryIT.java
│ └── MongoDbImage.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
│ └── 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
│ │ ├── 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
│ │ ├── evaluation
│ │ └── BasicEvaluationTest.java
│ │ ├── test
│ │ ├── CurlyBracketEscaper.java
│ │ └── vectorstore
│ │ │ ├── BaseVectorStoreTests.java
│ │ │ └── ObservationTestUtil.java
│ │ └── utils
│ │ └── AudioPlayer.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
│ ├── java
│ │ └── org
│ │ │ └── springframework
│ │ │ └── ai
│ │ │ └── vectorstore
│ │ │ ├── AbstractVectorStoreBuilder.java
│ │ │ ├── SearchRequest.java
│ │ │ ├── SimpleVectorStore.java
│ │ │ ├── SimpleVectorStoreContent.java
│ │ │ ├── SpringAIVectorStoreTypes.java
│ │ │ ├── VectorStore.java
│ │ │ ├── aot
│ │ │ └── VectorStoreRuntimeHints.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
│ │ │ └── converter
│ │ │ │ ├── AbstractFilterExpressionConverter.java
│ │ │ │ ├── PineconeFilterExpressionConverter.java
│ │ │ │ ├── PrintFilterExpressionConverter.java
│ │ │ │ └── SimpleVectorStoreFilterExpressionConverter.java
│ │ │ ├── observation
│ │ │ ├── AbstractObservationVectorStore.java
│ │ │ ├── DefaultVectorStoreObservationConvention.java
│ │ │ ├── VectorStoreObservationContext.java
│ │ │ ├── VectorStoreObservationConvention.java
│ │ │ ├── VectorStoreObservationDocumentation.java
│ │ │ ├── VectorStoreQueryResponseObservationHandler.java
│ │ │ └── package-info.java
│ │ │ ├── package-info.java
│ │ │ └── properties
│ │ │ └── CommonVectorStoreProperties.java
│ └── resources
│ │ ├── META-INF
│ │ └── additional-spring-configuration-metadata.json
│ │ └── antlr4
│ │ └── org
│ │ └── springframework
│ │ └── ai
│ │ └── vectorstore
│ │ └── filter
│ │ └── antlr4
│ │ └── Filters.g4
│ └── test
│ ├── java
│ └── org
│ │ └── springframework
│ │ └── ai
│ │ └── vectorstore
│ │ ├── SimpleVectorStoreSimilarityTests.java
│ │ ├── SimpleVectorStoreTests.java
│ │ ├── SimpleVectorStoreWithFilterTests.java
│ │ ├── aot
│ │ └── VectorStoreRuntimeHintsTests.java
│ │ ├── filter
│ │ ├── FilterExpressionBuilderTests.java
│ │ ├── FilterExpressionTextParserTests.java
│ │ ├── FilterHelperTests.java
│ │ ├── SearchRequestTests.java
│ │ └── converter
│ │ │ ├── PineconeFilterExpressionConverterTests.java
│ │ │ └── SimpleVectorStoreFilterExpressionConverterTests.java
│ │ └── observation
│ │ ├── DefaultVectorStoreObservationConventionTests.java
│ │ ├── VectorStoreObservationContextTests.java
│ │ └── VectorStoreQueryResponseObservationHandlerTests.java
│ └── resources
│ └── logback.xml
├── src
├── checkstyle
│ ├── checkstyle-header.txt
│ ├── checkstyle-suppressions.xml
│ └── checkstyle.xml
└── prompts
│ ├── update-to-m7.txt
│ └── update-to-snapshot.txt
└── 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
│ └── AzureVectorStoreObservationIT.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
│ └── test
│ ├── java
│ └── org
│ │ └── springframework
│ │ └── ai
│ │ └── chroma
│ │ ├── ChromaImage.java
│ │ └── vectorstore
│ │ ├── BasicAuthChromaWhereIT.java
│ │ ├── ChromaApiIT.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
│ │ ├── CouchbaseAiSearchFilterExpressionConverter.java
│ │ ├── CouchbaseIndexOptimization.java
│ │ ├── CouchbaseSearchVectorStore.java
│ │ └── CouchbaseSimilarityFunction.java
│ └── test
│ ├── java
│ └── org
│ │ └── springframework
│ │ └── ai
│ │ └── vectorstore
│ │ ├── CouchbaseSearchVectorStoreIT.java
│ │ └── testcontainer
│ │ └── CouchbaseContainerMetadata.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
│ │ ├── GemFireVectorStore.java
│ │ └── package-info.java
│ └── test
│ └── java
│ └── org
│ └── springframework
│ └── ai
│ └── vectorstore
│ └── gemfire
│ ├── GemFireImage.java
│ ├── GemFireVectorStoreIT.java
│ └── GemFireVectorStoreObservationIT.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
│ ├── Cricket_World_Cup.pdf
│ └── application.properties
├── 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
│ └── test
│ └── java
│ └── org
│ └── springframework
│ └── ai
│ └── vectorstore
│ └── neo4j
│ ├── Neo4jImage.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
│ └── 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
│ ├── QdrantVectorStoreBuilderTests.java
│ ├── QdrantVectorStoreIT.java
│ └── QdrantVectorStoreObservationIT.java
├── 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
│ ├── RedisVectorStoreIT.java
│ └── RedisVectorStoreObservationIT.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
│ └── package-info.java
└── test
├── java
└── org
│ └── springframework
│ └── ai
│ └── vectorstore
│ └── weaviate
│ ├── WeaviateFilterExpressionConverterTests.java
│ ├── WeaviateImage.java
│ ├── WeaviateVectorStoreBuilderTests.java
│ ├── WeaviateVectorStoreIT.java
│ └── WeaviateVectorStoreObservationIT.java
└── resources
└── docker-compose.yml
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*.{adoc,bat,groovy,html,java,js,jsp,kt,kts,md,properties,py,rb,sh,sql,svg,txt,xml,xsd}]
4 | charset = utf-8
5 |
6 | [*.{groovy,java,kt,kts,xml,xsd}]
7 | indent_style = tab
8 | indent_size = 4
9 | continuation_indent_size = 8
10 | end_of_line = lf
11 |
12 | insert_final_newline = true
13 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | *.onnx filter=lfs diff=lfs merge=lfs -text
2 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 | contact_links:
3 | - name: Questions and Community Support
4 | url: https://stackoverflow.com/questions/tagged/spring-ai
5 | about: Please ask and answer questions on StackOverflow with the spring-ai tag
6 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: 'status: waiting-for-triage, type: feature'
6 | assignees: ''
7 |
8 | ---
9 |
10 | Please do a quick search on GitHub issues first, the feature you are about to request might have already been requested.
11 |
12 | **Expected Behavior**
13 |
14 |
15 |
16 | **Current Behavior**
17 |
18 |
19 |
20 | **Context**
21 |
22 |
28 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/miscellaneous.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Miscellaneous
3 | about: Suggest an improvement for this project
4 | title: ''
5 | labels: 'status: waiting-for-triage'
6 | assignees: ''
7 |
8 | ---
9 |
10 | For anything other than bug reports and feature requests (performance, refactoring, etc),
11 | just go ahead and file the issue. Please provide as many details as possible.
12 |
13 | If you have a question or a support request, please open a new discussion on [GitHub Discussions](https://github.com/spring-projects/spring-ai/discussions)
14 | or ask a question on [StackOverflow](https://stackoverflow.com/questions/tagged/spring-ai).
15 |
16 | Please do **not** create issues on the [Issue Tracker](https://github.com/spring-projects/spring-ai/issues) for questions or support requests.
17 | We would like to keep the issue tracker **exclusively** for bug reports and feature requests.
18 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | Thank you for taking time to contribute this pull request!
2 | You might have already read the [contributor guide][1], but as a reminder, please make sure to:
3 |
4 | * Sign the [contributor license agreement](https://cla.pivotal.io/sign/spring)
5 | * Rebase your changes on the latest `main` branch and squash your commits
6 | * Add/Update unit tests as needed
7 | * Run a build and make sure all tests pass prior to submission
8 |
--------------------------------------------------------------------------------
/.github/dco.yml:
--------------------------------------------------------------------------------
1 | require:
2 | members: false
--------------------------------------------------------------------------------
/.github/release-files-spec.json:
--------------------------------------------------------------------------------
1 | {
2 | "files": [
3 | {
4 | "aql": {
5 | "items.find": {
6 | "$and": [
7 | {
8 | "@build.name": "${buildname}",
9 | "@build.number": "${buildnumber}",
10 | "path": {"$match": "org*"}
11 | },
12 | {
13 | "$or": [
14 | {
15 | "name": {"$match": "*.pom"}
16 | },
17 | {
18 | "name": {"$match": "*.jar"}
19 | }
20 | ]
21 | }
22 | ]
23 | }
24 | },
25 | "target": "nexus/"
26 | }
27 | ]
28 | }
--------------------------------------------------------------------------------
/.github/workflows/auto-cherry-pick.yml:
--------------------------------------------------------------------------------
1 | name: Auto Cherry-Pick
2 |
3 | on:
4 | push:
5 | branches:
6 | - main
7 | - '*.x'
8 |
9 | jobs:
10 | cherry-pick-commit:
11 | uses: spring-io/spring-github-workflows/.github/workflows/spring-cherry-pick.yml@v5
12 | secrets:
13 | GH_ACTIONS_REPO_TOKEN: ${{ secrets.GH_ACTIONS_REPO_TOKEN }}
14 |
--------------------------------------------------------------------------------
/.github/workflows/backport-issue.yml:
--------------------------------------------------------------------------------
1 | name: Backport Issue
2 |
3 | on:
4 | push:
5 | branches:
6 | - '*.x'
7 |
8 | jobs:
9 | backport-issue:
10 | uses: spring-io/spring-github-workflows/.github/workflows/spring-backport-issue.yml@v5
11 | secrets:
12 | GH_ACTIONS_REPO_TOKEN: ${{ secrets.GH_ACTIONS_REPO_TOKEN }}
13 |
--------------------------------------------------------------------------------
/.github/workflows/deploy-docs.yml:
--------------------------------------------------------------------------------
1 | name: Deploy Docs
2 | on:
3 | workflow_dispatch:
4 | push:
5 | branches: [main, '[0-9].[0-9].x' ]
6 | tags: ['v[0-9].[0-9].[0-9]', 'v[0-9].[0-9].[0-9]-*']
7 | permissions:
8 | actions: write
9 | jobs:
10 | build:
11 | runs-on: ubuntu-latest
12 | if: ${{ github.repository_owner == 'spring-projects' }}
13 | steps:
14 | - name: Checkout
15 | uses: actions/checkout@v4
16 | with:
17 | ref: docs-build
18 | fetch-depth: 1
19 | - name: Dispatch (partial build)
20 | if: github.ref_type == 'branch'
21 | env:
22 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
23 | run: gh workflow run deploy-docs.yml -r $(git rev-parse --abbrev-ref HEAD) -f build-refname=${{ github.ref_name }}
24 | - name: Dispatch (full build)
25 | if: github.ref_type == 'tag'
26 | env:
27 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
28 | run: gh workflow run deploy-docs.yml -r $(git rev-parse --abbrev-ref HEAD)
29 |
--------------------------------------------------------------------------------
/.github/workflows/pr-check.yml:
--------------------------------------------------------------------------------
1 | name: PR Check
2 |
3 | on:
4 | pull_request:
5 | branches:
6 | - main
7 |
8 | jobs:
9 | build:
10 | name: Build branch
11 | runs-on: ubuntu-latest
12 | if: ${{ github.repository_owner == 'spring-projects' }}
13 | steps:
14 | - name: Checkout source code
15 | uses: actions/checkout@v4
16 |
17 | - name: Set up JDK 17
18 | uses: actions/setup-java@v4
19 | with:
20 | java-version: '17'
21 | distribution: 'temurin'
22 | cache: 'maven'
23 |
24 | - name: Run tests
25 | run: |
26 | ./mvnw test
27 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | target
2 | .classpath
3 | .project
4 | .settings
5 | bin
6 | build.log
7 | integration-repo
8 | ivy-cache
9 | spring-build
10 | derby-home
11 | derbydb
12 | derby.log
13 | com.springsource.sts.config.flow.prefs
14 | s3.properties
15 | .idea
16 | *.iml
17 | *.ipr
18 | *.iws
19 | .*.swp
20 | .DS_Store
21 | .springBeans
22 | build
23 | .gradle
24 | out
25 | *~
26 |
27 | /.gradletasknamecache
28 | **/*.flattened-pom.xml
29 |
30 | vscode
31 | settings.json
32 |
33 | node
34 | node_modules
35 | package-lock.json
36 | package.json
37 | .vscode
38 | .antlr
39 |
40 | shell.log
41 |
42 | .profiler
43 | /spring-ai-spring-boot-autoconfigure/nbproject/
44 | /vector-stores/spring-ai-cassandra-store/nbproject/
45 |
46 | **/.claude/settings.local.json
47 | .devcontainer
48 |
49 | qodana.yaml
--------------------------------------------------------------------------------
/.mvn/extensions.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
Section 1 content
9 |Section 2 content
12 |Some paragraph text.
13 | Spring 14 | 15 | -------------------------------------------------------------------------------- /document-readers/markdown-reader/src/test/resources/blockquote.md: -------------------------------------------------------------------------------- 1 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur diam eros, laoreet sit amet cursus vitae, varius sed 2 | nisi. Cras sit amet quam quis velit commodo porta consectetur id nisi. Phasellus tincidunt pulvinar augue. 3 | 4 | > Proin vel laoreet leo, sed luctus augue. Sed et ligula commodo, commodo lacus at, consequat turpis. Maecenas eget 5 | > sapien odio. Maecenas urna lectus, pellentesque in accumsan aliquam, congue eu libero. Ut rhoncus nec justo a 6 | > porttitor. Pellentesque auctor pharetra eros, viverra sodales lorem aliquet id. Curabitur semper nisi vel sem interdum 7 | > suscipit. 8 | 9 | -------------------------------------------------------------------------------- /document-readers/markdown-reader/src/test/resources/code.md: -------------------------------------------------------------------------------- 1 | This is a Java sample application: 2 | 3 | ```java 4 | package com.example.demo; 5 | 6 | import org.springframework.boot.SpringApplication; 7 | import org.springframework.boot.autoconfigure.SpringBootApplication; 8 | 9 | @SpringBootApplication 10 | public class DemoApplication { 11 | public static void main(String[] args) { 12 | SpringApplication.run(DemoApplication.class, args); 13 | } 14 | } 15 | ``` 16 | 17 | Markdown also provides the possibility to `use inline code formatting throughout` the entire sentence. 18 | 19 | --- 20 | 21 | Another possibility is to set block code without specific highlighting: 22 | 23 | ``` 24 | ./mvnw spring-javaformat:apply 25 | ``` 26 | -------------------------------------------------------------------------------- /document-readers/markdown-reader/src/test/resources/lists.md: -------------------------------------------------------------------------------- 1 | ## Ordered list 2 | 3 | 1. Lorem ipsum dolor sit *amet*, consectetur adipiscing elit. **Curabitur** diam eros, laoreet sit _amet_ cursus vitae, 4 | varius sed nisi. 5 | 2. Cras sit amet quam quis velit commodo porta consectetur id nisi. Phasellus tincidunt pulvinar augue. 6 | 3. Proin vel laoreet leo, sed luctus augue. Sed et ligula commodo, commodo lacus at, consequat turpis. Maecenas eget 7 | sapien odio. 8 | 1. Pellentesque auctor pharetra eros, viverra sodales lorem aliquet id. Curabitur semper nisi vel sem interdum 9 | suscipit. 10 | 2. Maecenas urna lectus, pellentesque in accumsan aliquam, congue eu libero. Ut rhoncus nec justo a porttitor. 11 | 12 | ## Unordered list 13 | 14 | * Aenean eu leo eu nibh tristique posuere quis quis massa. 15 | * Aenean imperdiet libero dui, nec malesuada dui maximus vel. Vestibulum sed dui condimentum, cursus libero in, dapibus 16 | tortor. 17 | * Etiam facilisis enim in egestas dictum. 18 | -------------------------------------------------------------------------------- /document-readers/markdown-reader/src/test/resources/only-headers.md: -------------------------------------------------------------------------------- 1 | # Header 1a 2 | 3 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur diam eros, laoreet sit amet cursus vitae, varius sed 4 | nisi. Cras sit amet quam quis velit commodo porta consectetur id nisi. Phasellus tincidunt pulvinar augue. 5 | 6 | # Header 1b 7 | 8 | Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Etiam lobortis risus libero, sed 9 | sollicitudin risus cursus in. Morbi enim metus, ornare vel lacinia eget, venenatis vel nibh. 10 | 11 | ## Header 2b 12 | 13 | Proin vel laoreet leo, sed luctus augue. Sed et ligula commodo, commodo lacus at, consequat turpis. Maecenas eget sapien 14 | odio. Maecenas urna lectus, pellentesque in accumsan aliquam, congue eu libero. 15 | 16 | # Header 1c 17 | 18 | ## Header 2c 19 | 20 | Ut rhoncus nec justo a porttitor. Pellentesque auctor pharetra eros, viverra sodales lorem aliquet id. Curabitur semper nisi vel sem interdum suscipit. 21 | -------------------------------------------------------------------------------- /document-readers/markdown-reader/src/test/resources/simple.md: -------------------------------------------------------------------------------- 1 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec tincidunt velit non bibendum gravida. Cras accumsan 2 | tincidunt ornare. Donec hendrerit consequat tellus blandit accumsan. Aenean aliquam metus at arcu elementum dignissim. 3 | 4 | Nullam nisi dui, egestas nec sem nec, interdum lobortis enim. Pellentesque odio orci, faucibus eu luctus nec, venenatis et magna. Vestibulum nec eros non felis fermentum posuere eget ac risus. 5 | 6 | Aenean eu leo eu nibh tristique posuere quis quis massa.\ 7 | Nullam lacinia luctus sem ut vehicula. 8 | 9 | -------------------------------------------------------------------------------- /document-readers/markdown-reader/src/test/resources/with-formatting.md: -------------------------------------------------------------------------------- 1 | # This is a fancy header name 2 | 3 | Lorem ipsum dolor sit amet, **consectetur adipiscing elit**. Donec tincidunt velit non bibendum gravida. Cras accumsan 4 | tincidunt ornare. Donec hendrerit consequat tellus *blandit* accumsan. Aenean aliquam metus at ***arcu elementum*** 5 | dignissim. 6 | 7 | ### Header 3 8 | 9 | Aenean eu leo eu nibh tristique _posuere quis quis massa_. 10 | -------------------------------------------------------------------------------- /document-readers/pdf-reader/src/main/resources/META-INF/spring/aot.factories: -------------------------------------------------------------------------------- 1 | org.springframework.aot.hint.RuntimeHintsRegistrar=\ 2 | org.springframework.ai.reader.pdf.aot.PdfReaderRuntimeHints -------------------------------------------------------------------------------- /document-readers/pdf-reader/src/test/resources/sample1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/document-readers/pdf-reader/src/test/resources/sample1.pdf -------------------------------------------------------------------------------- /document-readers/pdf-reader/src/test/resources/sample2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/document-readers/pdf-reader/src/test/resources/sample2.pdf -------------------------------------------------------------------------------- /document-readers/tika-reader/src/test/resources/sample.ppt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/document-readers/tika-reader/src/test/resources/sample.ppt -------------------------------------------------------------------------------- /document-readers/tika-reader/src/test/resources/sample.pptx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/document-readers/tika-reader/src/test/resources/sample.pptx -------------------------------------------------------------------------------- /document-readers/tika-reader/src/test/resources/sample2.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/document-readers/tika-reader/src/test/resources/sample2.pdf -------------------------------------------------------------------------------- /document-readers/tika-reader/src/test/resources/word-sample.doc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/document-readers/tika-reader/src/test/resources/word-sample.doc -------------------------------------------------------------------------------- /document-readers/tika-reader/src/test/resources/word-sample.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/document-readers/tika-reader/src/test/resources/word-sample.docx -------------------------------------------------------------------------------- /mcp/common/src/main/resources/META-INF/spring/aot.factories: -------------------------------------------------------------------------------- 1 | org.springframework.aot.hint.RuntimeHintsRegistrar=\ 2 | org.springframework.ai.mcp.aot.McpHints -------------------------------------------------------------------------------- /memory/repository/spring-ai-model-chat-memory-repository-jdbc/README.md: -------------------------------------------------------------------------------- 1 | [Chat Memory Documentation](https://docs.spring.io/spring-ai/reference/api/chatmemory.html) 2 | -------------------------------------------------------------------------------- /memory/repository/spring-ai-model-chat-memory-repository-jdbc/src/main/java/org/springframework/ai/chat/memory/repository/jdbc/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023-2025 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | @NonNullApi 18 | @NonNullFields 19 | package org.springframework.ai.chat.memory.repository.jdbc; 20 | 21 | import org.springframework.lang.NonNullApi; 22 | import org.springframework.lang.NonNullFields; 23 | -------------------------------------------------------------------------------- /memory/repository/spring-ai-model-chat-memory-repository-jdbc/src/main/resources/META-INF/spring/aot.factories: -------------------------------------------------------------------------------- 1 | org.springframework.aot.hint.RuntimeHintsRegistrar=\ 2 | org.springframework.ai.chat.memory.repository.jdbc.aot.hint.JdbcChatMemoryRepositoryRuntimeHints 3 | -------------------------------------------------------------------------------- /memory/repository/spring-ai-model-chat-memory-repository-jdbc/src/main/resources/org/springframework/ai/chat/memory/repository/jdbc/schema-hsqldb.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE SPRING_AI_CHAT_MEMORY ( 2 | conversation_id VARCHAR(36) NOT NULL, 3 | content LONGVARCHAR NOT NULL, 4 | type VARCHAR(10) NOT NULL, 5 | timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL 6 | ); 7 | 8 | CREATE INDEX SPRING_AI_CHAT_MEMORY_CONVERSATION_ID_TIMESTAMP_IDX ON SPRING_AI_CHAT_MEMORY(conversation_id, timestamp DESC); 9 | 10 | ALTER TABLE SPRING_AI_CHAT_MEMORY ADD CONSTRAINT TYPE_CHECK CHECK (type IN ('USER', 'ASSISTANT', 'SYSTEM', 'TOOL')); 11 | -------------------------------------------------------------------------------- /memory/repository/spring-ai-model-chat-memory-repository-jdbc/src/main/resources/org/springframework/ai/chat/memory/repository/jdbc/schema-mariadb.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE IF NOT EXISTS SPRING_AI_CHAT_MEMORY ( 2 | conversation_id VARCHAR(36) NOT NULL, 3 | content TEXT NOT NULL, 4 | type VARCHAR(10) NOT NULL, 5 | `timestamp` TIMESTAMP NOT NULL, 6 | CONSTRAINT TYPE_CHECK CHECK (type IN ('USER', 'ASSISTANT', 'SYSTEM', 'TOOL')) 7 | ); 8 | 9 | CREATE INDEX IF NOT EXISTS SPRING_AI_CHAT_MEMORY_CONVERSATION_ID_TIMESTAMP_IDX 10 | ON SPRING_AI_CHAT_MEMORY(conversation_id, `timestamp`); -------------------------------------------------------------------------------- /memory/repository/spring-ai-model-chat-memory-repository-jdbc/src/main/resources/org/springframework/ai/chat/memory/repository/jdbc/schema-mysql.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE IF NOT EXISTS SPRING_AI_CHAT_MEMORY ( 2 | `conversation_id` VARCHAR(36) NOT NULL, 3 | `content` TEXT NOT NULL, 4 | `type` ENUM('USER', 'ASSISTANT', 'SYSTEM', 'TOOL') NOT NULL, 5 | `timestamp` TIMESTAMP NOT NULL, 6 | 7 | INDEX `SPRING_AI_CHAT_MEMORY_CONVERSATION_ID_TIMESTAMP_IDX` (`conversation_id`, `timestamp`) 8 | ); 9 | -------------------------------------------------------------------------------- /memory/repository/spring-ai-model-chat-memory-repository-jdbc/src/main/resources/org/springframework/ai/chat/memory/repository/jdbc/schema-postgresql.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE IF NOT EXISTS SPRING_AI_CHAT_MEMORY ( 2 | conversation_id VARCHAR(36) NOT NULL, 3 | content TEXT NOT NULL, 4 | type VARCHAR(10) NOT NULL CHECK (type IN ('USER', 'ASSISTANT', 'SYSTEM', 'TOOL')), 5 | "timestamp" TIMESTAMP NOT NULL 6 | ); 7 | 8 | CREATE INDEX IF NOT EXISTS SPRING_AI_CHAT_MEMORY_CONVERSATION_ID_TIMESTAMP_IDX 9 | ON SPRING_AI_CHAT_MEMORY(conversation_id, "timestamp"); -------------------------------------------------------------------------------- /memory/repository/spring-ai-model-chat-memory-repository-jdbc/src/main/resources/org/springframework/ai/chat/memory/repository/jdbc/schema-sqlserver.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE SPRING_AI_CHAT_MEMORY ( 2 | conversation_id VARCHAR(36) NOT NULL, 3 | content NVARCHAR(MAX) NOT NULL, 4 | type VARCHAR(10) NOT NULL, 5 | [timestamp] DATETIME2 NOT NULL DEFAULT SYSDATETIME(), 6 | CONSTRAINT TYPE_CHECK CHECK (type IN ('USER', 'ASSISTANT', 'SYSTEM', 'TOOL')) 7 | ); 8 | 9 | CREATE INDEX SPRING_AI_CHAT_MEMORY_CONVERSATION_ID_TIMESTAMP_IDX ON SPRING_AI_CHAT_MEMORY(conversation_id, [timestamp] DESC); 10 | -------------------------------------------------------------------------------- /memory/repository/spring-ai-model-chat-memory-repository-jdbc/src/test/resources/container-license-acceptance.txt: -------------------------------------------------------------------------------- 1 | mcr.microsoft.com/mssql/server:2022-latest -------------------------------------------------------------------------------- /models/spring-ai-anthropic/README.md: -------------------------------------------------------------------------------- 1 | [Anthropic 3 Chat Documentation](https://docs.spring.io/spring-ai/reference/api/chat/anthropic-chat.html) 2 | 3 | -------------------------------------------------------------------------------- /models/spring-ai-anthropic/src/main/resources/META-INF/spring/aot.factories: -------------------------------------------------------------------------------- 1 | org.springframework.aot.hint.RuntimeHintsRegistrar=\ 2 | org.springframework.ai.anthropic.aot.AnthropicRuntimeHints -------------------------------------------------------------------------------- /models/spring-ai-anthropic/src/test/resources/application-logging-test.properties: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2023-2024 the original author or authors. 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # https://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | # 16 | 17 | logging.level.org.springframework.ai.chat.client.advisor=DEBUG 18 | -------------------------------------------------------------------------------- /models/spring-ai-anthropic/src/test/resources/prompts/system-message.st: -------------------------------------------------------------------------------- 1 | You are a helpful AI assistant. Your name is {name}. 2 | You are an AI assistant that helps people find information. 3 | Your name is {name} 4 | You should reply to the user's request with your name and also in the style of a {voice}. -------------------------------------------------------------------------------- /models/spring-ai-anthropic/src/test/resources/spring-ai-reference-overview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/models/spring-ai-anthropic/src/test/resources/spring-ai-reference-overview.pdf -------------------------------------------------------------------------------- /models/spring-ai-anthropic/src/test/resources/test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/models/spring-ai-anthropic/src/test/resources/test.png -------------------------------------------------------------------------------- /models/spring-ai-azure-openai/README.md: -------------------------------------------------------------------------------- 1 | [Azure OpenAI Chat Documentation](https://docs.spring.io/spring-ai/reference/api/chat/azure-openai-chat.html) 2 | 3 | [Azure OpenAI Embedding Documentation](https://docs.spring.io/spring-ai/reference/api/embeddings/azure-openai-embeddings.html) 4 | -------------------------------------------------------------------------------- /models/spring-ai-azure-openai/src/main/resources/META-INF/spring/aot.factories: -------------------------------------------------------------------------------- 1 | org.springframework.aot.hint.RuntimeHintsRegistrar=\ 2 | org.springframework.ai.azure.openai.aot.AzureOpenAiRuntimeHints -------------------------------------------------------------------------------- /models/spring-ai-azure-openai/src/test/resources/multimodality/multimodal.test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/models/spring-ai-azure-openai/src/test/resources/multimodality/multimodal.test.png -------------------------------------------------------------------------------- /models/spring-ai-azure-openai/src/test/resources/prompts/system-message.st: -------------------------------------------------------------------------------- 1 | You are a helpful AI assistant. Your name is {name}. 2 | You are an AI assistant that helps people find information. 3 | Your name is {name} 4 | You should reply to the user's request with your name and also in the style of a {voice}. -------------------------------------------------------------------------------- /models/spring-ai-azure-openai/src/test/resources/speech/jfk.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/models/spring-ai-azure-openai/src/test/resources/speech/jfk.flac -------------------------------------------------------------------------------- /models/spring-ai-bedrock-converse/src/test/resources/prompts/system-message.st: -------------------------------------------------------------------------------- 1 | You are a helpful AI assistant. Your name is {name}. 2 | You are an AI assistant that helps people find information. 3 | Your name is {name} 4 | You should reply to the user's request with your name and also in the style of a {voice}. -------------------------------------------------------------------------------- /models/spring-ai-bedrock-converse/src/test/resources/spring-ai-reference-overview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/models/spring-ai-bedrock-converse/src/test/resources/spring-ai-reference-overview.pdf -------------------------------------------------------------------------------- /models/spring-ai-bedrock-converse/src/test/resources/test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/models/spring-ai-bedrock-converse/src/test/resources/test.png -------------------------------------------------------------------------------- /models/spring-ai-bedrock-converse/src/test/resources/test.video.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/models/spring-ai-bedrock-converse/src/test/resources/test.video.mp4 -------------------------------------------------------------------------------- /models/spring-ai-bedrock/src/main/resources/META-INF/spring/aot.factories: -------------------------------------------------------------------------------- 1 | org.springframework.aot.hint.RuntimeHintsRegistrar=\ 2 | org.springframework.ai.bedrock.aot.BedrockRuntimeHints -------------------------------------------------------------------------------- /models/spring-ai-bedrock/src/test/resources/prompts/system-message.st: -------------------------------------------------------------------------------- 1 | You are a helpful AI assistant. Your name is {name}. 2 | You are an AI assistant that helps people find information. 3 | Your name is {name} 4 | You should reply to the user's request with your name and also in the style of a {voice}. -------------------------------------------------------------------------------- /models/spring-ai-bedrock/src/test/resources/spring_framework.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/models/spring-ai-bedrock/src/test/resources/spring_framework.png -------------------------------------------------------------------------------- /models/spring-ai-bedrock/src/test/resources/test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/models/spring-ai-bedrock/src/test/resources/test.png -------------------------------------------------------------------------------- /models/spring-ai-deepseek/README.md: -------------------------------------------------------------------------------- 1 | [DeepSeek Chat Documentation](https://docs.spring.io/spring-ai/reference/api/chat/deepseek-chat.html) -------------------------------------------------------------------------------- /models/spring-ai-deepseek/src/main/resources/META-INF/spring/aot.factories: -------------------------------------------------------------------------------- 1 | org.springframework.aot.hint.RuntimeHintsRegistrar=\ 2 | org.springframework.ai.deepseek.aot.DeepSeekRuntimeHints -------------------------------------------------------------------------------- /models/spring-ai-deepseek/src/test/resources/prompts/system-message.st: -------------------------------------------------------------------------------- 1 | "You are a helpful AI assistant. Your name is {name}. 2 | You are an AI assistant that helps people find information. 3 | Your name is {name} 4 | You should reply to the user's request with your name and also in the style of a {voice}. -------------------------------------------------------------------------------- /models/spring-ai-huggingface/README.md: -------------------------------------------------------------------------------- 1 | [Hugging Face Chat Documentation](https://docs.spring.io/spring-ai/reference/api/chat/huggingface.html) 2 | 3 | -------------------------------------------------------------------------------- /models/spring-ai-minimax/README.md: -------------------------------------------------------------------------------- 1 | [MiniMax Chat Documentation](https://docs.spring.io/spring-ai/reference/api/chat/minimax-chat.html) 2 | 3 | [MiniMax Embedding Documentation](https://docs.spring.io/spring-ai/reference/api/embeddings/minimax-embeddings.html) -------------------------------------------------------------------------------- /models/spring-ai-minimax/src/main/resources/META-INF/spring/aot.factories: -------------------------------------------------------------------------------- 1 | org.springframework.aot.hint.RuntimeHintsRegistrar=\ 2 | org.springframework.ai.minimax.aot.MiniMaxRuntimeHints -------------------------------------------------------------------------------- /models/spring-ai-minimax/src/test/resources/prompts/system-message.st: -------------------------------------------------------------------------------- 1 | You are an AI assistant that helps people find information. 2 | Your name is {name}. 3 | You should reply to the user's request with your name and also in the style of a {voice}. -------------------------------------------------------------------------------- /models/spring-ai-mistral-ai/README.md: -------------------------------------------------------------------------------- 1 | [Mistral AI Chat Documentation](https://docs.spring.io/spring-ai/reference/api/chat/mistralai-chat.html) 2 | 3 | [Mistral AI Embedding Documentation](https://docs.spring.io/spring-ai/reference/api/embeddings/mistralai-embeddings.html) -------------------------------------------------------------------------------- /models/spring-ai-mistral-ai/src/main/resources/META-INF/spring/aot.factories: -------------------------------------------------------------------------------- 1 | org.springframework.aot.hint.RuntimeHintsRegistrar=\ 2 | org.springframework.ai.mistralai.aot.MistralAiRuntimeHints -------------------------------------------------------------------------------- /models/spring-ai-mistral-ai/src/test/resources/prompts/acme/system-qa.st: -------------------------------------------------------------------------------- 1 | You're assisting with questions about products in a bicycle catalog. 2 | Use the information from the DOCUMENTS section to provide accurate answers. 3 | The answer involves referring to the price or the dimension of the bicycle, include the bicycle name in the response. 4 | If unsure, simply state that you don't know. 5 | 6 | DOCUMENTS: 7 | {documents} -------------------------------------------------------------------------------- /models/spring-ai-mistral-ai/src/test/resources/prompts/eval/qa-evaluator-accurate-answer.st: -------------------------------------------------------------------------------- 1 | You are an AI assistant who helps users to evaluate if the answers to questions are accurate. 2 | You will be provided with a QUESTION and an ANSWER. 3 | Your goal is to evaluate the QUESTION and ANSWER and reply with a YES or NO answer. -------------------------------------------------------------------------------- /models/spring-ai-mistral-ai/src/test/resources/prompts/eval/qa-evaluator-fact-based-answer.st: -------------------------------------------------------------------------------- 1 | You are an AI evaluator. Your task is to verify if the provided ANSWER is a direct and accurate response to the given QUESTION. If the ANSWER is correct and directly answers the QUESTION, reply with "YES". If the ANSWER is not a direct response or is inaccurate, reply with "NO". 2 | 3 | For example: 4 | 5 | If the QUESTION is "What is the capital of France?" and the ANSWER is "Paris.", you should respond with "YES". 6 | If the QUESTION is "What is the capital of France?" and the ANSWER is "France is in Europe.", respond with "NO". 7 | Now, evaluate the following: 8 | -------------------------------------------------------------------------------- /models/spring-ai-mistral-ai/src/test/resources/prompts/eval/qa-evaluator-not-related-message.st: -------------------------------------------------------------------------------- 1 | You are an AI assistant who helps users to evaluate if the answers to questions are accurate. 2 | You will be provided with a QUESTION and an ANSWER. 3 | A previous evaluation has determined that QUESTION and ANSWER are not related. 4 | Give an explanation as to why they are not related. -------------------------------------------------------------------------------- /models/spring-ai-mistral-ai/src/test/resources/prompts/eval/user-evaluator-message.st: -------------------------------------------------------------------------------- 1 | The question and answer to evaluate are: 2 | 3 | QUESTION: ```{question}``` 4 | 5 | ANSWER: ```{answer}``` 6 | 7 | -------------------------------------------------------------------------------- /models/spring-ai-mistral-ai/src/test/resources/prompts/system-message.st: -------------------------------------------------------------------------------- 1 | You are an AI assistant that helps people find information. 2 | Your name is {name}. 3 | You should reply to the user's request with your name and also in the style of a {voice}. -------------------------------------------------------------------------------- /models/spring-ai-mistral-ai/src/test/resources/test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/models/spring-ai-mistral-ai/src/test/resources/test.png -------------------------------------------------------------------------------- /models/spring-ai-oci-genai/README.md: -------------------------------------------------------------------------------- 1 | [Oracle Cloud Infrastructure GenAI Documentation](https://docs.oracle.com/en-us/iaas/Content/generative-ai/overview.htm) 2 | -------------------------------------------------------------------------------- /models/spring-ai-ollama/README.md: -------------------------------------------------------------------------------- 1 | [Ollama Chat Documentation](https://docs.spring.io/spring-ai/reference/api/chat/ollama-chat.html) 2 | 3 | [Ollama Embedding Documentation](https://docs.spring.io/spring-ai/reference/api/embeddings/ollama-embeddings.html) 4 | -------------------------------------------------------------------------------- /models/spring-ai-ollama/src/main/java/org/springframework/ai/ollama/management/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023-2024 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /** 18 | * Management support for Ollama. 19 | */ 20 | @NonNullApi 21 | @NonNullFields 22 | package org.springframework.ai.ollama.management; 23 | 24 | import org.springframework.lang.NonNullApi; 25 | import org.springframework.lang.NonNullFields; 26 | -------------------------------------------------------------------------------- /models/spring-ai-ollama/src/main/resources/META-INF/spring/aot.factories: -------------------------------------------------------------------------------- 1 | org.springframework.aot.hint.RuntimeHintsRegistrar=\ 2 | org.springframework.ai.ollama.aot.OllamaRuntimeHints -------------------------------------------------------------------------------- /models/spring-ai-ollama/src/test/resources/doc/Ollama Chat API.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/models/spring-ai-ollama/src/test/resources/doc/Ollama Chat API.jpg -------------------------------------------------------------------------------- /models/spring-ai-ollama/src/test/resources/norway.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/models/spring-ai-ollama/src/test/resources/norway.webp -------------------------------------------------------------------------------- /models/spring-ai-ollama/src/test/resources/test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/models/spring-ai-ollama/src/test/resources/test.png -------------------------------------------------------------------------------- /models/spring-ai-openai/README.md: -------------------------------------------------------------------------------- 1 | [OpenAI Chat Documentation](https://docs.spring.io/spring-ai/reference/api/chat/openai-chat.html) 2 | 3 | [OpenAI Embedding Documentation](https://docs.spring.io/spring-ai/reference/api/embeddings/openai-embeddings.html) 4 | 5 | [OpenAI Image Generation](https://docs.spring.io/spring-ai/reference/api/image/openai-image.html) 6 | 7 | [OpenAI Transcription Generation](https://docs.spring.io/spring-ai/reference/api/audio/transcriptions/openai-transcriptions.html) 8 | 9 | [OpenAI Text-to-Speech (TTS)](https://docs.spring.io/spring-ai/reference/api/audio/speech/openai-speech.html) -------------------------------------------------------------------------------- /models/spring-ai-openai/src/main/java/org/springframework/ai/openai/ImageResponseMetadata.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023-2024 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.springframework.ai.openai; 18 | 19 | public interface ImageResponseMetadata { 20 | 21 | } 22 | -------------------------------------------------------------------------------- /models/spring-ai-openai/src/main/resources/META-INF/spring/aot.factories: -------------------------------------------------------------------------------- 1 | org.springframework.aot.hint.RuntimeHintsRegistrar=\ 2 | org.springframework.ai.openai.aot.OpenAiRuntimeHints -------------------------------------------------------------------------------- /models/spring-ai-openai/src/test/resources/application-logging-test.properties: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2023-2024 the original author or authors. 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # https://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | # 16 | 17 | logging.level.org.springframework.ai.chat.client.advisor=DEBUG 18 | -------------------------------------------------------------------------------- /models/spring-ai-openai/src/test/resources/prompts/acme/system-qa.st: -------------------------------------------------------------------------------- 1 | You're assisting with questions about products in a bicycle catalog. 2 | Use the information from the DOCUMENTS section to provide accurate answers. 3 | The answer involves referring to the price or the dimension of the bicycle, include the bicycle name in the response. 4 | If unsure, simply state that you don't know. 5 | 6 | DOCUMENTS: 7 | {documents} -------------------------------------------------------------------------------- /models/spring-ai-openai/src/test/resources/prompts/eval/qa-evaluator-accurate-answer.st: -------------------------------------------------------------------------------- 1 | You are an AI assistant who helps users to evaluate if the answers to questions are accurate. 2 | You will be provided with a QUESTION and an ANSWER. 3 | Your goal is to evaluate the QUESTION and ANSWER and reply with a YES or NO answer. -------------------------------------------------------------------------------- /models/spring-ai-openai/src/test/resources/prompts/eval/qa-evaluator-fact-based-answer.st: -------------------------------------------------------------------------------- 1 | You are an AI evaluator. Your task is to verify if the provided ANSWER is a direct and accurate response to the given QUESTION. If the ANSWER is correct and directly answers the QUESTION, reply with "YES". If the ANSWER is not a direct response or is inaccurate, reply with "NO". 2 | 3 | For example: 4 | 5 | If the QUESTION is "What is the capital of France?" and the ANSWER is "Paris.", you should respond with "YES". 6 | If the QUESTION is "What is the capital of France?" and the ANSWER is "France is in Europe.", respond with "NO". 7 | Now, evaluate the following: 8 | -------------------------------------------------------------------------------- /models/spring-ai-openai/src/test/resources/prompts/eval/qa-evaluator-not-related-message.st: -------------------------------------------------------------------------------- 1 | You are an AI assistant who helps users to evaluate if the answers to questions are accurate. 2 | You will be provided with a QUESTION and an ANSWER. 3 | A previous evaluation has determined that QUESTION and ANSWER are not related. 4 | Give an explanation as to why they are not related. -------------------------------------------------------------------------------- /models/spring-ai-openai/src/test/resources/prompts/eval/user-evaluator-message.st: -------------------------------------------------------------------------------- 1 | The question and answer to evaluate are: 2 | 3 | QUESTION: ```{question}``` 4 | 5 | ANSWER: ```{answer}``` 6 | 7 | -------------------------------------------------------------------------------- /models/spring-ai-openai/src/test/resources/prompts/system-message.st: -------------------------------------------------------------------------------- 1 | You are a helpful AI assistant. Your name is {name}. 2 | You are an AI assistant that helps people find information. 3 | Your name is {name} 4 | You should reply to the user's request with your name and also in the style of a {voice}. -------------------------------------------------------------------------------- /models/spring-ai-openai/src/test/resources/speech/jfk.flac: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/models/spring-ai-openai/src/test/resources/speech/jfk.flac -------------------------------------------------------------------------------- /models/spring-ai-openai/src/test/resources/speech/speech1.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/models/spring-ai-openai/src/test/resources/speech/speech1.mp3 -------------------------------------------------------------------------------- /models/spring-ai-openai/src/test/resources/test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/models/spring-ai-openai/src/test/resources/test.png -------------------------------------------------------------------------------- /models/spring-ai-postgresml/README.md: -------------------------------------------------------------------------------- 1 | [PostgresML Embedding Documentation](https://docs.spring.io/spring-ai/reference/api/embeddings/postgresml-embeddings.html) 2 | -------------------------------------------------------------------------------- /models/spring-ai-stability-ai/README.md: -------------------------------------------------------------------------------- 1 | [Stability AI Image Generation](https://docs.spring.io/spring-ai/reference/api/image/stabilityai-image.html) 2 | -------------------------------------------------------------------------------- /models/spring-ai-transformers/README.md: -------------------------------------------------------------------------------- 1 | [Transformers Embedding Documentation](https://docs.spring.io/spring-ai/reference/api/embeddings/onnx.html) 2 | -------------------------------------------------------------------------------- /models/spring-ai-transformers/src/main/resources/onnx/all-MiniLM-L6-v2/model.onnx: -------------------------------------------------------------------------------- 1 | version https://git-lfs.github.com/spec/v1 2 | oid sha256:e3dde332c13808c718680e7bf74a574e7e5d06f55bd6e1527e51509dcb8206f3 3 | size 90387630 4 | -------------------------------------------------------------------------------- /models/spring-ai-transformers/src/main/resources/onnx/all-MiniLM-L6-v2/model.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/models/spring-ai-transformers/src/main/resources/onnx/all-MiniLM-L6-v2/model.png -------------------------------------------------------------------------------- /models/spring-ai-vertex-ai-embedding/src/test/resources/test.image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/models/spring-ai-vertex-ai-embedding/src/test/resources/test.image.png -------------------------------------------------------------------------------- /models/spring-ai-vertex-ai-embedding/src/test/resources/test.video.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/models/spring-ai-vertex-ai-embedding/src/test/resources/test.video.mp4 -------------------------------------------------------------------------------- /models/spring-ai-vertex-ai-gemini/README.md: -------------------------------------------------------------------------------- 1 | [VertexAI Gemini Chat](https://docs.spring.io/spring-ai/reference/api/chat/vertexai-gemini-chat.html) 2 | -------------------------------------------------------------------------------- /models/spring-ai-vertex-ai-gemini/src/main/resources/META-INF/spring/aot.factories: -------------------------------------------------------------------------------- 1 | org.springframework.aot.hint.RuntimeHintsRegistrar=\ 2 | org.springframework.ai.vertexai.gemini.aot.VertexAiGeminiRuntimeHints -------------------------------------------------------------------------------- /models/spring-ai-vertex-ai-gemini/src/test/resources/prompts/system-message.st: -------------------------------------------------------------------------------- 1 | You are a helpful AI assistant. Your name is {name}. 2 | You are an AI assistant that helps people find information. 3 | Your name is {name} 4 | You should reply to the user's request with your name and also in the style of a {voice}. -------------------------------------------------------------------------------- /models/spring-ai-vertex-ai-gemini/src/test/resources/spring-ai-reference-overview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/models/spring-ai-vertex-ai-gemini/src/test/resources/spring-ai-reference-overview.pdf -------------------------------------------------------------------------------- /models/spring-ai-vertex-ai-gemini/src/test/resources/vertex.test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/models/spring-ai-vertex-ai-gemini/src/test/resources/vertex.test.png -------------------------------------------------------------------------------- /models/spring-ai-zhipuai/README.md: -------------------------------------------------------------------------------- 1 | [ZhiPu AI Chat Documentation](https://docs.spring.io/spring-ai/reference/api/chat/zhipuai-chat.html) 2 | 3 | [ZhiPu AI Embedding Documentation](https://docs.spring.io/spring-ai/reference/api/embeddings/zhipuai-embeddings.html) 4 | 5 | [ZhiPu AI Image Documentation](https://docs.spring.io/spring-ai/reference/api/image/zhipuai-image.html) -------------------------------------------------------------------------------- /models/spring-ai-zhipuai/src/main/resources/META-INF/spring/aot.factories: -------------------------------------------------------------------------------- 1 | org.springframework.aot.hint.RuntimeHintsRegistrar=\ 2 | org.springframework.ai.zhipuai.aot.ZhiPuAiRuntimeHints -------------------------------------------------------------------------------- /models/spring-ai-zhipuai/src/test/resources/prompts/system-message.st: -------------------------------------------------------------------------------- 1 | You are an AI assistant that helps people find information. 2 | Your name is {name}. 3 | You should reply to the user's request with your name and also in the style of a {voice}. -------------------------------------------------------------------------------- /models/spring-ai-zhipuai/src/test/resources/test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/models/spring-ai-zhipuai/src/test/resources/test.png -------------------------------------------------------------------------------- /spring-ai-client-chat/src/main/java/org/springframework/ai/chat/client/advisor/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023-2024 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /** 18 | * Provides classes for advising chat clients. 19 | */ 20 | @NonNullApi 21 | @NonNullFields 22 | package org.springframework.ai.chat.client.advisor; 23 | 24 | import org.springframework.lang.NonNullApi; 25 | import org.springframework.lang.NonNullFields; 26 | -------------------------------------------------------------------------------- /spring-ai-client-chat/src/main/java/org/springframework/ai/chat/client/package-info.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023-2024 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /** 18 | * Chat client. 19 | */ 20 | @NonNullApi 21 | @NonNullFields 22 | package org.springframework.ai.chat.client; 23 | 24 | import org.springframework.lang.NonNullApi; 25 | import org.springframework.lang.NonNullFields; 26 | -------------------------------------------------------------------------------- /spring-ai-client-chat/src/test/java/org/springframework/ai/TestConfiguration.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023-2024 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.springframework.ai; 18 | 19 | import org.springframework.boot.SpringBootConfiguration; 20 | 21 | @SpringBootConfiguration 22 | public class TestConfiguration { 23 | 24 | } 25 | -------------------------------------------------------------------------------- /spring-ai-client-chat/src/test/resources/application-logging-test.properties: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright 2023-2024 the original author or authors. 3 | # 4 | # Licensed under the Apache License, Version 2.0 (the "License"); 5 | # you may not use this file except in compliance with the License. 6 | # You may obtain a copy of the License at 7 | # 8 | # https://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | # 16 | logging.level.org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor=DEBUG 17 | logging.level.ch.qos.logback=ERROR 18 | -------------------------------------------------------------------------------- /spring-ai-client-chat/src/test/resources/system-prompt.txt: -------------------------------------------------------------------------------- 1 | instructions -------------------------------------------------------------------------------- /spring-ai-client-chat/src/test/resources/tabby-cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/spring-projects/spring-ai/694bb50be5825bb2d91f3ce0291020d9aadcb780/spring-ai-client-chat/src/test/resources/tabby-cat.png -------------------------------------------------------------------------------- /spring-ai-client-chat/src/test/resources/user-prompt.txt: -------------------------------------------------------------------------------- 1 | my question -------------------------------------------------------------------------------- /spring-ai-commons/src/main/java/org/springframework/ai/content/MediaContent.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2023-2024 the original author or authors. 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * https://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package org.springframework.ai.content; 18 | 19 | import java.util.List; 20 | 21 | public interface MediaContent extends Content { 22 | 23 | /** 24 | * Get the media associated with the content. 25 | */ 26 | List