Commit Graph

1453 Commits

Author SHA1 Message Date
dafriz
439934b0f6 Set redis query limit to match requested topK used in KNN search 2024-10-03 16:34:22 -04:00
dafriz
250d2afbb6 Add Meta Llama 3.1, 3.2 instruct model enums
This commit adds support for new Meta Llama 3.1 and 3.2 instruct models
to the LlamaChatBedrockApi enum. It includes model IDs for:

Llama 3.1: 8B, 70B, 405B
Llama 3.2: 1B, 3B, 11B, 90B

These additions allow users to specify the latest Llama models when
using the Bedrock API. The commit also updates the class Javadoc with
a link to AWS documentation for model IDs and bumps the @since version
to 1.0.0.
2024-10-03 16:24:56 -04:00
Soby Chacko
ef3d43ca9c Use OpenAIAsyncClient for streaming in AzureOpenAiChatModel
- Switch to OpenAIAsyncClient for streaming operations
- Modify AzureOpenAiChatModel constructor to accept OpenAIClientBuilder
- Update getChatCompletionsStream to use non-blocking async client
- Refactor related classes and tests to support OpenAIClientBuilder
- Revise AzureOpenAiAutoConfiguration to provide OpenAIClientBuilder
- Add AzureOpenAiChatClientTest to verify streaming functionality
- Adjust existing tests for compatibility with OpenAIClientBuilder

Resolves https://github.com/spring-projects/spring-ai/issues/981

This change improves support for asynchronous streaming operations
in the AzureOpenAiChatModel, addressing potential issues in reactive environments.
2024-10-03 15:55:38 -04:00
Eddú Meléndez
e1d9bfc616 Add MongoDB Atlas support for TestContainers and Docker Compose
Implement service connection support for MongoDB Atlas using both
TestContainers and Docker Compose. This change enables easier
integration testing and local development with MongoDB Atlas.

- Leverage TestContainers 1.20.2 which introduces MongoDBAtlasLocalContainer
- Add TestContainers support using MongoDBAtlasLocalContainer
- Implement Docker Compose configuration for MongoDB Atlas
- Create connection details factories for both TestContainers and Docker Compose
- Update dependency management for MongoDB Atlas integration
- Add integration tests for both TestContainers and Docker Compose setups
- Update documentation to include MongoDB Atlas support
2024-10-03 12:58:53 -04:00
Eddú Meléndez
e58341a447 Use MongoDBAtlasLocalContainer from Testcontainers 1.20.2
Testcontainers 1.20.2 offers `MongoDBAtlasLocalContainer`. Previous
image used during tests was pulling images in every execution. The
new image is cached locally and can be executed offline.
2024-10-03 12:23:29 -04:00
Mark Pollack
bb88e2f2de Add retry support to VertexAI embedding and chat models
Resolves https://github.com/spring-projects/spring-ai/issues/832

Introduces retry functionality to VertexAI embedding and
chat models, enhancing their resilience against transient failures.

It also corrects a typo in the VertexAiEmbeddingConnectionDetails
class name.

Key changes:

* Add RetryTemplate to VertexAiTextEmbeddingModel and VertexAiGeminiChatModel
* Introduce spring-ai-retry dependency
* Refactor code to support retry logic
* Update auto-configuration classes to incorporate retry functionality
* Fix typo in VertexAiEmbeddingConnectionDetails class name

remove extraneous commented out code

Add missing copyright headers, author etc.
2024-10-02 14:38:06 -04:00
Christian Tzolov
6fc76b7f9b Refactor advisor architecture in Spring AI
This commit introduces a major overhaul of the advisor system in Spring AI,
improving modularity, type safety, and consistency

Core Changes:
- Replace RequestAdvisor and ResponseAdvisor with CallAroundAdvisor and StreamAroundAdvisor
- Introduce AdvisedRequest and AdvisedResponse classes for better encapsulation
- Deprecate RequestResponseAdvisor in favor of new advisor types
- Remove AdvisorObservableHelper class

Advisor Implementation Updates:
- Update AbstractChatMemoryAdvisor, MessageChatMemoryAdvisor, PromptChatMemoryAdvisor,
QuestionAnswerAdvisor, SafeGuardAroundAdvisor, SimpleLoggerAdvisor, and
VectorStoreChatMemoryAdvisor to implement new advisor interfaces
- Remove CacheAroundAdvisor (functionality likely moved elsewhere)
- Make CallAroundAdvisor and StreamAroundAdvisor extend Ordered interface

Client and Chain Management:
- Modify DefaultChatClient to use new advisor chain approach
- Refactor DefaultAroundAdvisorChain for better ordering and observation
- Implement builder pattern for advisor chain construction in DefaultChatClient
- Separate call and stream advisors in DefaultAroundAdvisorChain

Observation and Context Handling:
- Update observation conventions and context handling in advisors
- Add order field to AdvisorObservationContext
- Modify DefaultAdvisorObservationConvention to include order in high cardinality key values

Testing and Integration:
- Refactor ChatClientAdvisorTests and add new AdvisorsTests
- Update integration tests to reflect new advisor structure
- Enhance AdvisorsTests to verify correct advisor execution order

New Features:
- Generalize the Protect From Blocking functionality across all advisors
- Add (experimental) Re2 advisor to enhance reasoning capabilities of LLMs
- Add disabled Re2 test in OpenAiChatClientIT

Documentation:
- Add Advisors documentation
- Enhance advisors documentation with order explanation and Re2 example

Advisor Ordering:
- Introduce Advisor constants for precedence ordering
- Update AbstractChatMemoryAdvisor to use new precedence constant
- Improve advisor ordering and management in DefaultAroundAdvisorChain.Builder
- Remove redundant reordering logic from DefaultAroundAdvisorChain

These changes aim to provide a more flexible and powerful advisor system,
allowing for easier implementation of complex AI-driven interactions

Co-authored-by: Dariusz Jędrzejczyk <dariusz.jedrzejczyk@broadcom.com>
2024-10-01 15:08:21 -04:00
Eddú Meléndez Gonzales
c81972ec45 Fix chroma property in IT (#1445) 2024-10-01 11:28:59 -04:00
Christian Tzolov
140bcabaf8 Docs: Deprecate maxTokens in favor of maxCompletionTokens for OpenAI chat options
- Add new option 'maxCompletionTokens' to spring.ai.openai.chat.options
 - Mark 'maxTokens' as deprecated
 - Update documentation to reflect these changes in OpenAI chat configuration

 Related to #1411 and #1412
2024-10-01 11:16:03 +02:00
dafriz
f56ce20cad Add support for max_completion_tokens in OpenAI chat options request
An upper bound for the number of tokens that can be generated for a completion,
  including visible output tokens and reasoning tokens.
  Replaces max_tokens field which is now deprecated.
2024-10-01 11:05:51 +02:00
Christian Tzolov
110a520a40 Add Llama 3.2 models to OllamaModel enum
- Include LLAMA3_2 (3B) and LLAMA3_2_1B (1B) variants
2024-09-29 15:53:27 +02:00
Soby Chacko
4c8a6ee8b0 Document BatchingStrategy and enhance TokenCountBatching
This commit adds comprehensive documentation for the BatchingStrategy
in vector stores and enhances the TokenCountBatchingStrategy class.

Key changes:
- Explain batching necessity due to embedding model thresholds
- Describe BatchingStrategy interface and its purpose
- Detail TokenCountBatchingStrategy default implementation
- Provide guidance on using and customizing batching strategies
- Note pre-configured vector stores with default strategy
- Add new constructor for custom TokenCountEstimator in
  TokenCountBatchingStrategy
- Implement null checks with Spring's Assert utility
- Update docs with new customization options and code examples
2024-09-28 17:34:21 -04:00
Soby Chacko
e29d38d987 Remove unnecessary null checks in AzureOpenAiChatOptions.Builder
This is related to https://github.com/spring-projects/spring-ai/issues/889

This commit addresses a bug where certain fields were being made
indirectly mandatory due to Assert.notNull checks in the Builder's
with* methods. Specifically:

- Removed Assert.notNull checks from withResponseFormat, withSeed,
  withLogprobs, withTopLogprobs, and withEnhancements methods.

These checks were causing exceptions in AzureOpenAiChatModel.getDefaultOptions
when not all fields were set, leading to failures in methods like
ChatClient.create, even when using the AzureOpenAiChatModel constructor
with OpenAIClient.

The removal of these checks aligns with the @JsonInclude(Include.NON_NULL)
annotation on AzureOpenAiChatOptions, which already ignores null options.
This change maintains the intended flexibility while preventing unintended
mandatory requirements.
2024-09-27 13:22:44 -04:00
Anders Swanson
ccf190c77c Add OCI GenAI embedding model support
This commit introduces support for Oracle Cloud Infrastructure (OCI)
GenAI embedding models in Spring AI. It includes:

* New OCIEmbeddingModel class for interacting with OCI GenAI API
* Auto-configuration for easy setup and integration
* Properties for configuring OCI connection and embedding options
* Documentation updates explaining usage and configuration
* Integration tests to verify functionality

Signed-off-by: Anders Swanson <anders.swanson@oracle.com>
2024-09-26 17:04:05 -04:00
cboy
5da44c4b45 Fix code example in ollama-embeddings documentation
Correct the OllamaEmbeddingModel initialization and options syntax in
the ollama-embeddings.adoc file. Remove unnecessary .toMap() call and
fix typo in withTruncate method name.
2024-09-25 14:56:54 -04:00
Christian Tzolov
a55316c44d Remove name assertion from ToolResponseMessage validation
- Removed the assertion checking for a non-null 'name' in ToolResponseMessage
 - This change affects multiple AI model implementations:
   AzureOpenAiChatModel, MiniMaxChatModel, MistralAiChatModel,
   MoonshotChatModel, OpenAiChatModel, and ZhiPuAiChatModel

 Resolves #1410
2024-09-25 18:49:36 +02:00
ashni
c5f07e5402 Enhance MongoDB docs with additional tutorials
Update mongodb.adoc to include links to both beginner and intermediate
content for Spring AI and MongoDB integration. Add a new section
"Tutorials and Code Examples" with:

- Link to the Getting Started guide for basic integration
- Link to a detailed RAG tutorial for more advanced usage

This change provides users with a clear path from initial setup to
more complex implementations using the MongoDB Atlas Vector Store.
2024-09-24 17:34:58 -04:00
Eddú Meléndez
ee00c620c6 Prepend 'http://' to host in ChromaConnectionDetails
Modify getHost method to return a properly formatted URL string. This
ensures that the Chroma client can correctly connect to the service
when using Docker Compose.

Fixes #1395
2024-09-24 17:28:31 -04:00
Fu Cheng
c205c7d5ca Fix interleaved output in JsonReader's parseJsonNode method
Replace parallelStream with stream to prevent thread-unsafe appends to
the shared StringBuilder. This fixes the issue of intermingled key-value
pairs in the generated Document content. Also, replace StringBuffer
with StringBuilder for better performance in single-threaded context.

The change ensures correct ordering of extracted JSON keys and their
values in the resulting Document, improving the reliability and
readability of the parsed output.
2024-09-24 17:24:51 -04:00
dafriz
1673907db0 Add support for reasoning tokens in OpenAI usage data
This change introduces a new field for tracking reasoning tokens in the
OpenAI API response. It extends the Usage record to include
CompletionTokenDetails, allowing for more granular token usage
reporting. The OpenAiUsage class is updated to expose this new data,
and corresponding unit tests are added to verify the behavior.

This enhancement provides more detailed insights into token usage,
particularly for advanced AI models that separate reasoning from other
generation processes.
2024-09-24 17:18:20 -04:00
Ricken Bazolo
835450761e handle http client error exception on getCollection method 2024-09-24 17:04:43 -04:00
Fu Cheng
2ecffc10c7 Refactor data filtering in RelevancyEvaluator
Replace Objects::nonNull and instanceof checks with StringUtils::hasText
for more efficient and cleaner content filtering. This change simplifies
the stream operation in the getContent method, improving readability
and potentially performance.
2024-09-24 17:02:37 -04:00
Soby Chacko
202148d45b Prevent timeouts with configurable batching for PgVectorStore inserts
Resolves https://github.com/spring-projects/spring-ai/issues/1199

- Implement configurable maxDocumentBatchSize to prevent insert timeouts
  when adding large numbers of documents
- Update PgVectorStore to process document inserts in controlled batches
- Add maxDocumentBatchSize property to PgVectorStoreProperties
- Update PgVectorStoreAutoConfiguration to use the new batching property
- Add tests to verify batching behavior and performance

This change addresses the issue of PgVectorStore inserts timing out due to
large document volumes. By introducing configurable batching, users can now
control the insert process to avoid timeouts while maintaining performance
and reducing memory overhead for large-scale document additions.
2024-09-24 16:56:16 -04:00
Soby Chacko
42dcb45f32 Align AzureOpenAiChatOptions with Azure ChatCompletionsOptions
Add missing options from Azure ChatCompletionsOptions to Spring AI
AzureOpenAiChatOptions. The following fields have been added:

- seed
- logprobs
- topLogprobs
- enhancements

This change ensures better alignment between the two option sets,
improving compatibility and feature parity.

Resolves https://github.com/spring-projects/spring-ai/issues/889
2024-09-24 16:35:37 -04:00
Soby Chacko
35e6113233 Adding integration test for Azure custom headers 2024-09-24 16:16:08 -04:00
“claudio-code”
b468354dd3 Improve AnthropicChatModel handling of empty generations
- Add handling for cases where ChatCompletion has a stop reason but empty generations.
   Creates a Generation with empty content and metadata when this occurs.
 - Update AnthropicChatModelObservationIT to expect "end_turn" finish reason.
 - Update javadoc.
2024-09-24 10:42:22 +02:00
Christian Tzolov
e63dc6a457 Enhance ChatClientRequestSpec with sealed Prompt input
- When ChatClientRequestSpec#prompt(Prompt) is used, unseal the prompt instance.
   Convert the last message instance (if user message) into spec#user and spec#media
   and add the remaining messages (excluding the last) to the spec#messages.
   Add the prompt#options to the spec#options.
 - Improve DefaultChatClient to handle UserMessage media and content separately.
 - Update AbstractToolCallSupport to use new hasToolCalls() method.
 - Add hasToolCalls() method to AssistantMessage.
 - Enhance ChatClientTest with additional test cases for media handling.
 - Disable Groq and Nvidia integration tests due to rate limiting and credit requirements.
2024-09-24 10:19:08 +02:00
Christian Tzolov
9822eabb7f Fix Ollama ITs 2024-09-23 23:49:07 +02:00
Christian Tzolov
c98caf26d2 Minor test fixtures fixes 2024-09-23 23:03:56 +02:00
Christian Tzolov
501774925c Add proxy tool calls option to chat models
This commit introduces a new proxyToolCalls option for various chat
 models in the Spring AI project. When enabled, it allows the client to
 handle function calls externally instead of being processed internally
 by Spring AI.

 The change affects multiple chat model implementations, including:
  AnthropicChatModel
  AzureOpenAiChatModel
  MiniMaxChatModel
  MistralAiChatModel
  MoonshotChatModel
  OllamaChatModel
  OpenAiChatModel
  VertexAiGeminiChatModel
  ZhiPuAiChatModel

 The proxyToolCalls option is added to the respective chat options
 classes and integrated into the AbstractToolCallSupport class for
 consistent handling across different implementations.

 The proxyToolCalls option can be set either programmatically via
 the <ModelName>ChatOptions.builder().withProxyToolCalls() method
 or the spring.ai.<model-name>.chat.options.proxy-tool-calls
 application property.

 Documentation for the new option is also updated in the relevant
 Antora pages.

 Added ITs for proxy tool calls

 Remove ChatClientPromptRequestSpec and all ChatClient.prompt() overloads can how take advantage of the full fluent API.  Docs updated

 Resolves #1367
2024-09-23 16:22:58 -04:00
Thomas Vitale
acb31e7b75 Add prompt(String) method to ChatClient
This commit introduces a new overloaded method prompt(String content)
to the ChatClient API. It provides a convenient way to create prompts
using only a string of user content, simplifying the process for basic
chat interactions.

Fixes gh-1286

Signed-off-by: Thomas Vitale <ThomasVitale@users.noreply.github.com>
2024-09-23 10:40:10 -04:00
Soby Chacko
c67442d605 Add custom header support for Azure OpenAI
- Adds configuration properties to allow custom header specification
- Implements mechanism to apply custom headers to Azure OpenAI requests
- Enhances flexibility for users to customize API interactions

These changes allow users to add necessary headers for authentication,
tracking, or other purposes when interacting with Azure OpenAI services.

Resolves https://github.com/spring-projects/spring-ai/issues/1284
2024-09-19 18:29:04 -04:00
Soby Chacko
e644bf77da Add Azure Search user-agent, test OpenAI client header
* Adding test to verify the user-agent header in the Azure OpenAi chat client
* Adding the user-agent header to the search client in Azure vector store
2024-09-19 18:14:02 -04:00
PabloSanchi
035036c7f2 Add support for watsonx.ai embedding model
This commit introduces support for the Watsonx.ai embedding model.
It includes:

- Watsonx embedding options class with tests
- Watsonx embedding model implementation
- Auto-configuration and properties for the embedding model
- Tests for the Watsonx embedding model
- Documentation for using the Watsonx embedding model

Also removed use of deprecated APIs in WatsonAIChatModel
2024-09-19 11:45:04 -04:00
Eray Ocak
49b5ff5cc4 Update apache-cassandra.adoc to fix typo in initialize-schema property 2024-09-19 10:44:13 -04:00
Mark Pollack
db9cc62def Change enums of chatgpt o1 modesl to correct values 2024-09-19 10:42:26 -04:00
Craig Walls
62feb38b6c Add simplified constructor to EvaluationRequest
- Add new constructor EvaluationRequest(String userText, String responseContent)
- New constructor uses Collections.emptyList() for dataList
2024-09-19 10:21:15 -04:00
Mark Pollack
9910ccc41e fix docs to remove use of 'f' for temperature chat option 2024-09-18 08:50:59 -04:00
Christian Tzolov
8bddd5f531 Update DJL to 0.30.0 2024-09-18 10:39:23 +02:00
Peter Dolukhanov
4f6274e0a8 Change references from PaLm2 to Gemini in Gemini docs 2024-09-17 18:58:50 -04:00
Ignasi
8d31a57698 Add metadataFieldsToFilter property for MongoDB store
Introduce a new property for the MongoDB vector store:
spring.ai.vectorstore.mongodb.metadata-fields-to-filter

This property accepts comma-separated values specifying which metadata
fields can be used for filtering when querying the vector store. It
ensures that metadata indexes are created if they don't already exist.

This addition enhances query performance and flexibility by allowing
users to define filterable fields in advance.

Co-authored-by: Eddú Meléndez <eddu.melendez@gmail.com>
2024-09-17 18:53:07 -04:00
Johnny Lim
8b019c5fee Polish Javadoc for OpenAiApi.ChatModel 2024-09-17 18:32:05 -04:00
Thomas Vitale
0ddf331fd4 Improve docs for OpenAI, Mistral AI and Ollama chat models and clients
* Improve docs for OpenAI, Mistral AI, and Ollama chat models and function calling
* Improve docs for the Chat Client

Signed-off-by: Thomas Vitale <ThomasVitale@users.noreply.github.com>
2024-09-17 17:51:02 -04:00
David
d2b5cffb94 Fix typos in assert notNull (#1363) 2024-09-17 17:11:55 -04:00
Mark Pollack
8bfb25da86 Fix streaming function call for MiniMax chat model
Sometimes, the MiniMax stream mode function calls might get split,
resulting in an empty tool call ID. This indicates that the previous
call is not finished, which is an unusual API design.

The issue occurs when tool calls return in a format like:
[{"id":"1","function":{"name":"a"}},{"id":"","function":{"arguments":"[1]"}}]

These need to be merged into:
[{"id":"1","name":"a","arguments":"[1]"}]

This commit addresses the merging process to handle split function calls.

authored-by: mxsl-gr <mxsl-gr@users.noreply.github.com>
2024-09-17 14:56:23 -04:00
dafriz
f226b1a570 Fix typos in assert notNull in Bedrock model 2024-09-16 23:55:45 -04:00
PARK-afk
7fda93f7a4 docs: ChatModelDesciption (#1357)
Co-authored-by: 박준서 <junsepar@student.42seoul.kr>
2024-09-16 23:48:13 -04:00
박준서
40eaa9974e OpenAI: Add gpt-o1/o1-mini to chat model enum 2024-09-16 23:45:34 -04:00
GR
326bd21a09 Minimax doc fixes
- Add web search docs
- Fix minimax chat docs links
2024-09-16 23:38:08 -04:00
Soby Chacko
66455b9ec5 Add batching strategy to more vector stores
Apply batching when adding Documents to the following vector stores:

- Azure vector store
- Cassandra
- MongoDB Atlas
- OpenSearch
- Oracle
- Pinecone

 This improves efficiency by processing multiple Documents at once instead of individually, reducing the overhead for each operation.

Related to #1261
2024-09-16 23:23:51 -04:00