Commit Graph

2246 Commits

Author SHA1 Message Date
Andrei Shakirin
0bbccf8ca0 fix: #2146 getting default AWS region using DefaultAwsRegionProviderChain
Signed-off-by: Andrei Shakirin <andrei.shakirin@gmail.com>
2025-05-17 09:11:36 +02:00
Jonatan Ivanov
cd3fc2f816 Change log level from DEBUG to INFO for ObservationHandlers
The features are disabled by default and users need to explicitly
enable them. Probably it makes more sense to log on INFO level so that
users don't need to change the log level if they use the default
behavior of Spring Boot.

See gh-3003
See gh-3127
2025-05-17 08:02:45 +02:00
Christian Tzolov
5d6bbd9368 refactor: update dependencies to use spring-ai-model and spring-ai-commons
Replace spring-ai-client-chat dependency with spring-ai-model in model implementations
and memory repositories, and with spring-ai-commons in document readers. This change
improves the dependency structure by having components depend on the appropriate
abstraction level.

Additional changes:
- Add slf4j-api dependency to pdf-reader and spring-ai-retry
- Move spring-ai-client-chat to test scope in spring-ai-ollama
- Fix XML formatting in some pom.xml files

Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
2025-05-16 19:58:11 +02:00
Jhzlo
8a5f68d655 refactor: remove redundant samples() method
samples() duplicates N(), both setting the same field.
Keeping only N() simplifies the builder API and aligns with ImageOptions.

Signed-off-by: Jhzlo <kjh0010703@naver.com>
2025-05-16 12:57:47 -04:00
Jhzlo
2721c9e676 refactor: simplify stylePreset merge logic in StabilityAiImageOptions builder
Replaces redundant or conflicting stylePreset assignments with a single mergeOption call using runtime style and default stylePreset.

Signed-off-by: Jhzlo <kjh0010703@naver.com>
2025-05-16 12:50:20 -04:00
Mark Pollack
0147d3bd55 Fix typos
Signed-off-by: Ji To Kim <jitokim@users.noreply.github.com>
Signed-off-by: Mark Pollack <mark.pollack@broadcom.com>
2025-05-16 12:45:08 -04:00
Yanming Zhou
bb3556e8d1 Fix that spring.ai.mcp.server.base-url is ignored
Signed-off-by: Yanming Zhou <zhouyanming@gmail.com>
2025-05-16 17:30:32 +02:00
Christian Tzolov
d1ead23aa0 minor test name spelling fix
Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
2025-05-16 16:55:15 +02:00
Christian Tzolov
4bde57790d fix checkstyle
Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
2025-05-16 10:08:23 -04:00
Christian Tzolov
327cf40e97 feat(mcp): Add granular control over MCP server capabilities
- Add capability configuration to enable/disable tools, resources, prompts, and completions individually
- Refactor server configuration to conditionally register capabilities based on configuration
- Add support for server instructions configuration
- Update documentation with new capability options and completion management
- Add tests for new capabilities and configurations

Resolves #3207

Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
2025-05-16 10:08:23 -04:00
Mark Pollack
9392485bd5 Fix VectorStoreChatMemoryAdvisor streaming bug
- Override adviseStream method in VectorStoreChatMemoryAdvisor to properly handle streaming responses
- Add tests to verify the fix works with both normal and problematic streaming scenarios

Fixes #3152

Signed-off-by: Mark Pollack <mark.pollack@broadcom.com>
2025-05-16 09:26:27 -04:00
Ilayaperumal Gopinathan
20ccd1f0ac Disable checkstlye check by default
Signed-off-by: Ilayaperumal Gopinathan <ilayaperumal.gopinathan@broadcom.com>
2025-05-16 14:10:59 +01:00
Mark Pollack
2f5d53fde0 Fix VectorStoreChatMemoryAdvisor streaming bug
- Override adviseStream method in VectorStoreChatMemoryAdvisor to properly handle streaming responses
- Add tests to verify the fix works with both normal and problematic streaming scenarios

Fixes #3152

Signed-off-by: Mark Pollack <mark.pollack@broadcom.com>
2025-05-16 14:08:20 +01:00
Soby Chacko
fa8f24633b GH-3160: Handle element types correctly in CassandraFilterExpressionConverter.doValue
Fixes: 3160

https://github.com/spring-projects/spring-ai/issues/3160

When using a filter expression with IN operator on a collection field in
CassandraVectorStore.similaritySearch, a ClassCastException was thrown because
the code attempted to format individual collection elements using the collection's
codec instead of the element type's codec.

This fix modifies doValue to detect when we are formatting elements inside a
collection type and use the appropriate element type codec. While Cassandra
does not support using the IN operator directly on collection columns, this fix
ensures we generate syntactically correct CQL rather than throwing a Java
exception.

The change specifically addresses ListType collections by using the element type
codec for individual elements within the list.

Signed-off-by: Soby Chacko <soby.chacko@broadcom.com>
2025-05-16 13:40:44 +01:00
Ilayaperumal Gopinathan
30add8089a Fix CassandraRichSchemaVectorStoreIT#ensureSchemaNoCreation
- Check index not existing exception

Signed-off-by: Ilayaperumal Gopinathan <ilayaperumal.gopinathan@broadcom.com>
2025-05-16 13:35:57 +01:00
Soby Chacko
9eeee6178c GH-3181: fix: Validate index name exists in CassandraVectorStore
Fixes: #3181

https://github.com/spring-projects/spring-ai/issues/3181

When using CassandraVectorStore with an invalid index name and
initializeSchema=false, the application would throw a generic
NoSuchElementException from Optional.get() with message "No value present"
when trying to access the index metadata.

Changes:
- Added explicit validation of index existence in checkSchemaValid() method
- Improved error handling in getIndexSimilarity() method to provide a clear
  error message when an index doesn't exist
- Added integration test to verify proper error handling with invalid index names

Signed-off-by: Soby Chacko <soby.chacko@broadcom.com>
2025-05-16 12:45:30 +01:00
Yanming Zhou
eba7bde870 Polish dependencies (#3198)
Signed-off-by: Yanming Zhou <zhouyanming@gmail.com>
2025-05-16 12:23:26 +01:00
Mark Pollack
c0b9240c8d Fix VectorStoreDocumentRetriever to handle Filter.Expression objects directly
- Updated computeRequestFilterExpression to check if the context value is already
  a Filter.Expression object before attempting to parse it as a string
- Added docs for FILTER_EXPRESSION key that it accepts both String and Filter.Expression
- Added test

Fixes #3179
2025-05-16 11:34:47 +01:00
Soby Chacko
368be3a04f Fixing miscellaneous checkstyle errors
Enabling checkstyle by default in the project build

Signed-off-by: Soby Chacko <soby.chacko@broadcom.com>
2025-05-16 11:08:33 +01:00
Ilayaperumal Gopinathan
31feb4319b Remove duplicate dependency from spring-ai-model-chat-memory-repository-jdbc POM
Signed-off-by: Ilayaperumal Gopinathan <ilayaperumal.gopinathan@broadcom.com>
2025-05-16 11:00:09 +01:00
Christian Tzolov
b219c21723 docs: reorganize documentation structure
- Restructure navigation with clearer hierarchy using "Reference" and "Guides" sections
- Remove deprecated model-specific function calling documentation
- Update all model references to point to centralized Tool Calling documentation
- Rename "Docker Compose" to "Development-time Services" for clarity
- Move "Testing" under Reference section
- Add link to "Awesome Spring AI" community resources

Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
2025-05-15 18:06:37 -04:00
Jonatan Ivanov
6df84845a2 Do not trigger GHA workflows on forks
GHA workflows are automatically executed on forks where they fail.
This change prevents this (only for those workflows that are
automatically triggered, e.g.: on push or schedule).
2025-05-15 17:45:59 -04:00
Mark Pollack
008a760fa7 Add dataSource() method to JdbcChatMemoryRepository.Builder and improve dialect detection
- Added a dataSource(DataSource) method to the builder
- Now, if no dialect is specified, the implementation will attempt to detect it from the effective DataSource (either set directly or obtained from the JdbcTemplate).
- Updated builder logic to default to the DataSource from the JdbcTemplate if dataSource() is not called, ensuring dialect detection works out-of-the-box.
- The builder now prefers a directly provided DataSource, but remains backwards compatible with JdbcTemplate-based configuration.
- Added tests

Fixes #3148

Signed-off-by: Mark Pollack <mark.pollack@broadcom.com>
2025-05-15 16:44:56 -04:00
Sun Yuhan
31da8f3dbb fix: Fixed the incorrect SQL in getSelectMessagesSql of MysqlChatMemoryRepositoryDialect
- Added tests

Signed-off-by: Sun Yuhan <1085481446@qq.com>
2025-05-15 16:14:53 -04:00
Sun Yuhan
0e1bb52ab7 fix: Added transaction support for saveAll in JdbcChatMemoryRepository
- Add optional PlatformTransactionManager
- Add tests

Signed-off-by: Sun Yuhan <1085481446@qq.com>
2025-05-15 14:23:00 -04:00
Ilayaperumal Gopinathan
1a395e6847 Add Chat memory (in-memory chat memory repository) starter (#3185)
- Add Spring Boot starter for Chat memory with in-memory chat memory repository

Signed-off-by: Ilayaperumal Gopinathan <ilayaperumal.gopinathan@broadcom.com>
2025-05-15 11:27:31 -04:00
Ilayaperumal Gopinathan
48fb663c31 Fix qdrant vector store value factory (#3173)
- Fix the QdrantValueFactory to handle "java.util.List" type
 - Update the integration test to use List type values

Resolves #3164

Signed-off-by: Ilayaperumal Gopinathan <ilayaperumal.gopinathan@broadcom.com>
2025-05-15 11:26:23 -04:00
Jast
add7ca8489 fix doc (#3171)
Signed-off-by: Jast <745925668@qq.com>
2025-05-15 13:37:10 +01:00
Jonatan Ivanov
3fb66928f5 Add missing observability tests
Some tests were missing from gh-3003, this change adds them

See gh-3003
2025-05-15 10:09:31 +02:00
Yanming Zhou
0bcb2e138b Fix outdated configuration key include-completion and include-query-response
Fixes GH-3151

Follow-up of commit ca843e85887aa1da6300c77550c379c103500897,`includeCompletion` is renamed to `logCompletion`.

Signed-off-by: Yanming Zhou <zhouyanming@gmail.com>
2025-05-15 09:30:45 +02:00
ChoHadam
d5d907b266 Fix: Initialize TokenTextSplitter Builder fields with default values
Signed-off-by: ChoHadam <hadamcho97@gmail.com>
2025-05-14 17:38:16 +01:00
Jhzlo
e14e788a47 fix: add @JsonProperty for response_format
Ensures the response_format field is correctly serialized for Stability AI API.

Signed-off-by: Jhzlo <kjh0010703@naver.com>
2025-05-14 12:31:23 -04:00
Ricken BAZOLO
1beff75453 add mistral ai moderation doc (#3161) 2025-05-14 16:50:34 +01:00
LingXiao Qi
55ac78046d fix: OpenAiApi comment (#3165)
Signed-off-by: lingxiao <lotus0721@outlook.com>
2025-05-14 14:21:16 +01:00
Ricken BAZOLO
4d79ff5c56 openai-moderation.doc fix typo (#3162)
Signed-off-by: Ricken Bazolo <ricken.bazolo@gmail.com>
2025-05-14 14:17:05 +01:00
Mark Pollack
1ede66492f update upgrade-notes (#3142) 2025-05-13 19:32:50 +01:00
Ilayaperumal Gopinathan
f2940cffce Next development version 2025-05-13 19:06:16 +01:00
Ilayaperumal Gopinathan
30a9638de8 Release version 1.0.0-RC1 2025-05-13 19:05:52 +01:00
Linar Abzaltdinov
77be609c4a updated docs for new OpenSearch vector-store properties (#3140)
Signed-off-by: Linar Abzaltdinov <abzaltdinov@gmail.com>
2025-05-13 17:37:53 +01:00
Mark Pollack
cfeba7cf5d update upgrade-notes.adoc 2025-05-13 12:13:21 -04:00
Thomas Vitale
9ff6d3b364 Update memory docs and ensure consistent naming
Signed-off-by: Thomas Vitale <ThomasVitale@users.noreply.github.com>
2025-05-13 11:33:44 -04:00
Mark Pollack
f5f02129b5 Fix MessageChatMemoryAdvisor in streaming case.
- The fix overrides the adviseStream method to use ChatClientMessageAggregator to properly aggregate streaming chunks before storing them in memory, similar to how PromptChatMemoryAdvisor handles streaming responses
- Added test

Signed-off-by: Mark Pollack <mark.pollack@broadcom.com>
2025-05-13 11:31:34 -04:00
Claudio Silva Junior
348adee17f added custom path in doc (#3123)
* added custom path in doc

Signed-off-by: “claudio-code” <suporte2424@outlook.com>

* added custom path in doc

Signed-off-by: “claudio-code” <suporte2424@outlook.com>

---------

Signed-off-by: “claudio-code” <suporte2424@outlook.com>
2025-05-13 14:56:54 +01:00
Thomas Vitale
8939148fbc Fixes for memory advisors after recent refactoring
* The defaultConversationId was configurable, but not used. It’s now being used correctly when a custom defaultConversationId is defined.
* The memory advisors were missing the required configuration of a Schedule due to a default value missing. Now as default Scheduler is used, automatically protecting from blocking. It can be customised via “scheduler()”, replacing the old “protectFromBlocking()” method.
* The new defaultTopK options in VectorStoreChatMemoryAdvisor were documented, but not implemented. That is fixed now.
* The memory advisors were not null-safe. Now they are.
* Improved tests to check the null-safe behaviour.
* Updated the documentation accordingly.

Fixes gh-3133

Signed-off-by: Thomas Vitale <ThomasVitale@users.noreply.github.com>
2025-05-13 09:53:24 -04:00
Soby Chacko
f346092648 HttpHost regression issues in OpenSearchVectorStoreAutoConfiguration
Changes introduced for https://github.com/spring-projects/spring-ai/issues/2954
introduced a regression in the way OpenSearch works with test containers.

Restore the retrieval of HttpHost from OpenSearchConnectionDetails insted of getting
them directly from properties.

Signed-off-by: Soby Chacko <soby.chacko@broadcom.com>
2025-05-13 09:45:27 -04:00
Christian Tzolov
54e5c07428 refactor: Move MessageAggregator to spring-ai-model module
Improve separation of concerns by keeping model-related functionality in the model module
while maintaining client-specific functionality in the client module.

- Move MessageAggregator class from spring-ai-client-chat to spring-ai-model module
- Create new ChatClientMessageAggregator in spring-ai-client-chat module to handle client-specific aggregation
- Extract client-specific aggregation logic from MessageAggregator to ChatClientMessageAggregator
- Update references in advisor classes to use the new ChatClientMessageAggregator

Signed-off-by: Christian Tzolov <christian.tzolov@broadcom.com>
2025-05-13 11:31:08 +01:00
Mark Pollack
a03e7cba2f This commit enhances the documentation for working with multiple chat models in Spring AI by:
- Add introduction explaining common scenarios where multiple chat models are useful.
- Restructuring the content into clear subsections:
   - Multiple ChatClients with a Single Model Type
   - ChatClients for Different Model Types
   - Multiple OpenAI-Compatible API Endpoints

Signed-off-by: Mark Pollack <mark.pollack@broadcom.com>
2025-05-13 12:31:03 +02:00
mck
87b680af7c Optimise CassandraChatMemoryRepository for MessageWindowChatMemory usage pattern
Time-series each chat window in Cassandra, keeping past (and deleted) windows still in the db.
Add ability to store different MessageTypes.

Signed-off-by: mck <mck@apache.org>
2025-05-13 10:13:44 +01:00
Ilayaperumal Gopinathan
c646dfe9a8 Fix BedrockTitanEmbeddingModelIT
- Create ObservationRegistry bean for the tests

Signed-off-by: Ilayaperumal Gopinathan <ilayaperumal.gopinathan@broadcom.com>
2025-05-13 07:33:59 +01:00
Mark Pollack
59b36d14da Remove deepseek options form openaiapi
- These options are exclusive to deepseek and can be added to the deepseek model
2025-05-12 23:22:12 -04:00