Commit Graph

1392 Commits

Author SHA1 Message Date
Josh Long
d16a16358c kotlin ftw 2024-11-15 10:27:02 -08:00
Josh Long
f50b43e256 extension function for Chatclient.CalLResponseSpec.entity(Class<?>) and Kotlin 2024-11-12 12:02:50 -08:00
Mark Pollack
6acd202c12 Comment out second tc/docker-compose job in CI 2024-11-12 07:09:10 -05:00
Mark Pollack
fce52cd9b2 Disable Ollama tests in CI 2024-11-11 16:34:18 -05:00
Mark Pollack
a98af02f62 Minimize time to run main CI build action
- Add maven properties for all vector stores such as
skip.vectorstore.azure-cosmos-db to control IT test execution
- Chroma and PGVector IT tests are enabled by default
- Docker Compose and Testcontainers module ITs are skipped by default
- Add parallel job to run docker-compose and testcontainers ITs
2024-11-11 16:19:08 -05:00
Soby Chacko
4de95b7708 Checkstyle fix 2024-11-11 10:50:31 -05:00
dafriz
5e86583679 Bump org.apache.tika to 3.0.0 2024-11-11 11:32:39 +00:00
Christian Tzolov
5f6b892eda Add function calling support to invoke methods with dynamic arguments and return values
This change enables more flexible integration between Spring AI and LLM function
calling capabilities while maintaining type safety and ease of use.

- Add new MethodFunctionCallback class to support method invocation via reflection
 - Supports both static and non-static method calls
 - Handles multiple parameter types including primitives, objects, collections
 - Supports empty parameters and empty response
 - Auto-generates JSON schema from method parameters
 - Special handling for ToolContext parameters
 - Builder pattern for easy configuration

- Add comprehensive unit tests for MethodFunctionCallback
- Add integration tests for MethodFunctionCallback with both Anthropic and OpenAI clients
- Add jackson-module-jsonSchema dependency
- Modify FunctionCallback to check for empty tool context

Testing coverage includes:
- Static method invocation scenarios
- Non-static method calls with various parameter types
- Void return type methods
- Complex parameter types (enums, records, lists)
- Tool context handling
- Error cases and validation

Add MethodFunctionCallback reference docs
2024-11-10 22:58:40 -05:00
Christian Tzolov
c24ef4e79a docs: enhance Bedrock Converse API documentation
- Add migration note recommending transition from InvokeModel to Converse API
- Update model configuration to remove default model ID
- Add AWS session token configuration for temporary credentials
- Improve documentation links and descriptions
2024-11-10 15:42:03 +01:00
Soby Chacko
5e1f681da2 Fix Ollama Kotlin function callback integration tests
- Add default values to KotlinRequest data class to fix Jackson deserialization
- Replace hardcoded model name with OllamaModel.LLAMA3_2 for consistency
- Extract common test setup into companion objects for Ollama tests
- Replace var with val using when expression in weather service
- Clean up imports and remove unused annotations
- Standardize property access using Kotlin conventions
2024-11-08 21:24:28 -05:00
Mark Pollack
634ac2019b Change env var OLLAMA_SKIP_CONTAINER to OLLAMA_WITH_REUSE in BaseOllamaIT 2024-11-08 15:58:44 -05:00
Mark Pollack
11d8591d84 Remove old @DisabledIf on KotlinIT Ollama tests 2024-11-08 15:54:19 -05:00
Mark Pollack
538e2860d1 Disable running Ollama IT tests 2024-11-08 14:54:42 -05:00
Mark Pollack
21fc653464 Improve Ollama test container management
This change simplifies how we manage Ollama containers in tests by moving
from manual toggles to environment variables for better control. Instead of
scattered container configuration, we now have:

- OLLAMA_WITH_REUSE: Toggle reuse of existing containers between tests
- OLLAMA_TESTS_ENABLED: Control test execution globally

The motivation is to make tests more reliable and easier to maintain.
Previously, developers had to modify code to run tests locally vs CI. Now
they can control this via environment variables.

We also introduce thread-safe API access and consistent default settings
across all test classes, removing duplicated configuration and potential
resource leaks.

This makes the test infrastructure more maintainable and provides clearer
separation between local development and CI environments.

Checkstyle fixes.

Make buildOllamaApiWithModel in BaseOllamaIT public and the related test changes.
2024-11-08 12:59:50 -05:00
Sébastien Deleuze
c3c95a82c1 Add Kotlin support and documentation
- Add support for proper Kotlin functions handling by adapting
  `kotlin.jvm.functions.Function1` to `java.util.function.Function` and
  `kotlin.jvm.functions.Function2` to `java.util.function.BiFunction`.
- Removes the dependency on Spring Cloud Function and
  `net.jodah:typetools` which are replaced by leveraging
  Spring Framework `ResolvableType` capabilities.
- Add a Kotlin extension function for
  `FunctionCallbackWrapper.Builder.withInputType` allowing to
  specify `withInputType<T>()` instead of `withInputType(T::class.java)`.
- Add Kotlin documentation.
2024-11-08 18:32:47 +01:00
d050150
78a2a2788b GH-1689 Handle StringIndexOutOfBoundsException in PagePdfDocumentReader
- Add test coverage to TextLine
    - Use char[] instead of String for TextLine
    - Optimise index handling when reading text lines

Resolves #1689
2024-11-08 17:28:32 +00:00
Soby Chacko
865d429451 Checkstyle changes 2024-11-08 15:18:35 +00:00
Ilayaperumal Gopinathan
c1fc687730 Update OpenAiChatModelResponseFormatIT with JSON order usecase
- Verify that the BeanOutputConverter converts with the right order as specified in the JSON schema

Update the BeanOutputConverterTest's test case to tweak the order for validation
2024-11-08 13:50:53 +00:00
Soby Chacko
79266be970 GH-1335: Add JSON schema property order support
Fixes: #1335

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

Add support for maintaining JSON property order in generated schemas using
@JsonPropertyOrder. Users can now control the order of properties in their
JSON schemas by annotating their classes/records with @JsonPropertyOrder.

- Add JacksonOption.RESPECT_JSONPROPERTY_ORDER to BeanOutputConverter
- Add test to verify schema property ordering
- Update documentation with property ordering example
2024-11-08 13:41:48 +00:00
Christian Tzolov
9fa89a2fd6 fix: Improve error resilience of the Bedrock stream handling
The changes include:

- Refactor the emitting of next, error, and complete events in the Bedrock stream handling to use a default EmitFailureHandler that retries for 10 seconds before failing.
  This helps improve the error resilience of the stream processing.
- Disable a couple of integration tests related to the COHERE_COMMAND_V14 model, as that model version is no longer supported.
- Adjust some configuration options in the Jurassic2 chat model integration test.

Also resolves #1679
2024-11-08 13:40:57 +00:00
Christian Tzolov
7895875ca2 Update README.md
Add a community driven spring-ai-examples entry to the README' code examples list.
2024-11-08 11:07:53 +01:00
Ilayaperumal Gopinathan
35f46e957f Fix javadoc at ResponseFormat class' HTML elements 2024-11-07 20:06:53 +00:00
Mark Pollack
8d9e153899 Disable CoherenceVectorStoreIT as it is resource heavy in CI env 2024-11-07 13:24:20 -05:00
liugddx
f924502791 Support single object tool_calls in OpenAI vendor APIs
XFY Spark and possibly other vendors implement the OpenAI interface but return
tool_calls as a single object rather than an array. Add @JsonFormat annotation
to handle both array and single object responses in ChatCompletionMessage,
making Spring AI more broadly compatible with OpenAI API implementations.

Only ChatCompletionMessage.java required modification to support this alternate
format while maintaining backward compatibility with the standard OpenAI API
response structure.

Co-authored-by: jito <pigberger70@gmail.com>
2024-11-07 13:13:49 -05:00
CodingLuizy
7780411d0a remove duplicated config building with ApiKey 2024-11-08 02:49:35 +09:00
Ilayaperumal Gopinathan
fa3eea4933 Disable OpenSearchVectorStoreIT$searchDocumentsInTwoIndicesTest
Refer: https://github.com/spring-projects/spring-ai/issues/1645
2024-11-07 16:10:46 +00:00
Ilayaperumal Gopinathan
bf66415e30 Add spring-ai-coherence store boot starter to Spring AI BOM 2024-11-07 12:07:43 +00:00
Eddú Meléndez
cafcecbdcc Add spring-ai-coherence-store to bom 2024-11-06 19:53:55 -06:00
jitokim
698210042e Fix typo in Generation class 2024-11-06 18:06:59 -05:00
jitokim
c4e7efb499 Fix typos in classes under the embedding package
Signed-off-by: jitokim <pigberger70@gmail.com>
2024-11-06 18:06:59 -05:00
Soby Chacko
0b55fa3a04 GH-1678: Re-enable tests in OpenSearchVectorStoreIT
Fixes: #1678
2024-11-06 18:01:41 -05:00
1993heqiang
0825d52224 Add validation and rename parameter in TokenCountBatchingStrategy
This commit rename the thresholdFactor parameter to reservePercentage to better
reflect its purpose in the TokenCountBatchingStrategy class. It also adds
validation for input parameters including maxInputTokenCount > 0 and
reservePercentage between 0 and 1 for safer initialization.

The change ensures proper parameter validation on TokenCountBatchingStrategy
creation to prevent potential runtime errors from invalid inputs.
2024-11-06 17:54:31 -05:00
Christian Tzolov
83f7164bff Extract ResponseFormat to standalone class
- Extracts ResponseFormat from being a nested record in OpenAiApi to
   a dedicated class with builder pattern support.
 - Resolve the issue with constructor bindings for the Boog property
   binding.
 - Re-enables previously disabled response format integration tests.

 - Add checkstyle changes
 - Add schema field in ResponseFormat and set jsonSchema via the setter for schema,
   this way schema set via a Boot property also sets the correct JsonSchema
 - Add default constructors in ResponseFormat and JsonSchema

 Resolves #1681
2024-11-06 17:50:23 -05:00
Anders Swanson
fb65ed01bd Add OCI GenAI Cohere Chat integration
Adds Oracle Cloud Infrastructure (OCI) Generative AI's Cohere chat model support
to expand Spring AI's cloud provider capabilities. This allows developers to use
OCI's managed Cohere models through both dedicated and on-demand serving modes.

The integration provides auto-configuration for simple setup while allowing full
customization of model parameters through OCICohereChatOptions. Teams can now
use OCI's Cohere models alongside other providers in Spring AI applications.

This change complements the existing OCI embedding support, offering a complete
set of GenAI capabilities for Oracle Cloud users.

Signed-off-by: Anders Swanson <anders.swanson@oracle.com>
2024-11-06 17:43:48 -05:00
jitokim
1cdec7b6c3 Fix Cypher syntax for vector property in Neo4jVectorStore
- Fix parameter access syntax in setNodeVectorProperty DDL statement
- Define DEFAULT_TRANSACTION_SIZE for the hardcoded batch size in
the delete query

Fixes #1623

Signed-off-by: jitokim <pigberger70@gmail.com>
2024-11-06 16:39:21 -05:00
Aleks Seovic
f6a648e85c Add Oracle Coherence vector store implementation
Integrates Oracle Coherence 24.09+ as a vector store backend for Spring AI. The
implementation provides:

- Support for vector similarity search with configurable distance metrics (Cosine,
  Inner Product, L2)
- Multiple indexing options including HNSW and Binary Quantization indexes
- Filter expression evaluation for metadata-based filtering
- Vector normalization capabilities
- Comprehensive test coverage including integration tests

The implementation includes:
- CoherenceVectorStore main implementation
- CoherenceFilterExpressionConverter for Spring AI to Coherence filter conversion
- Auto-configuration support via spring-boot-starter
- Documentation and usage examples

Requires Oracle Coherence 24.09 or later.
2024-11-06 16:07:20 -05:00
zhaojy
99d9864972 Fix RetryAutoConfiguration class condition
Changes the @ConditionalOnClass condition from RetryTemplate to RetryUtils to
ensure proper conditional loading of retry functionality. This prevents the
auto-configuration from being enabled when spring-retry is present but
spring-ai-retry is not, which was causing issues with modules like
spring-ai-azure-openai that don't include spring-ai-retry.
2024-11-06 15:40:52 -05:00
Oleksandr Klymenko
6a3c548883 Refactor to modern switch expressions in vector stores
Replace traditional switch statements with Java 14 switch expressions across
vector store filter converters and related components. This change improves
code quality in our filter expression handling for Azure, Milvus, Redis,
Typesense and Weaviate implementations.

The switch expressions eliminate fall-through behavior, enforce exhaustive
pattern matching at compile time, and provide a more direct way to return
values. This makes the filter conversion logic more robust and maintainable.
2024-11-06 15:24:03 -05:00
leevh0908
5235696160 Change NIN filter to use "not in" operator in Milvus
- Milvus requires "not in" operator syntax instead of "nin" for filtering.
- See https://milvus.io/docs/boolean.md
- Updated test and added additional test coverage
2024-11-06 15:20:02 -05:00
VictorZalevski
cd886437eb Improve usage field to include new properties
OpenAI's API returns additional token usage metrics that provide deeper
insight into API consumption. This adds support for:

- acceptedPredictionTokens: Tokens from accepted model predictions
- audioTokens: Tokens used for audio processing
- rejectedPredictionTokens: Tokens from rejected model predictions

These fields help track resource utilization and costs more accurately
by breaking down token usage by type. Added @JsonIgnoreProperties to
maintain compatibility with future OpenAI API additions.

Fixes warning logging in RetryUtils.SHORT_RETRY_TEMPLATE to reduce noise
in test output.
2024-11-06 14:53:17 -05:00
Mark Pollack
2a6f55a8c5 Use shorter retry intervals in tests
The DEFAULT_RETRY_TEMPLATE uses exponential backoff starting at 2s with max 3min
delay between retries, making tests run unnecessarily long. This change
introduces SHORT_RETRY_TEMPLATE with fixed 100ms backoff to speed up test
execution while preserving the same retry behavior and error handling.
2024-11-06 13:29:37 -05:00
Mark Pollack
0b4f90e8c0 wip 2024-11-06 13:15:16 -05:00
1993heqiang
4ad76506bf Fix etl-pipeline.adoc and prompt.adoc issues. 2024-11-06 13:03:39 -05:00
Mark Pollack
f111aaea04 Revert "Add support for Kotlin functions"
This reverts commit 9cf66333b5.
2024-11-06 12:58:52 -05:00
Christian Tzolov
3fbc310ff4 Allow null or empty userText if request contains Tool Response message
- Add a new test case for testing function call with advisor in BedrockConverseChatClientIT
- Add a new test case for testing tool proxy function call in OpenAiChatClientProxyFunctionCallsIT
- Remove unused model property from BedrockConverseProxyChatProperties
2024-11-06 18:20:29 +01:00
Ilayaperumal Gopinathan
cbdb578388 Fix javadoc for HTML elements 2024-11-06 11:09:24 +00:00
John Blum
c93c6fd5b9 Fix grammar and minor typos in documentation as well as Javadoc.
Closes #1652
2024-11-06 07:16:43 +00:00
Sébastien Deleuze
9cf66333b5 Add support for Kotlin functions
Add support for proper Kotlin functions handling
by adapting kotlin.jvm.functions.Function1 to
java.util.function.Function and kotlin.jvm.functions.Function2 to
java.util.function.BiFunction.

It also removes the dependency on Spring Cloud Function and
net.jodah:typetools which are replaced by leveraging
Spring Framework ResolvableType capabilities.

Added withInputType Kotlin extension

- Add a Kotlin extension function for
FunctionCallbackWrapper.Builder.withInputType allowing
to specify withInputType<T>() instead of
withInputType(T::class.java).

- Add Kotlin documentation
2024-11-05 17:26:04 -05:00
Ilayaperumal Gopinathan
298b71c35d Fix Document Upload workflow
- Generate Javadoc before aggregate
2024-11-05 17:41:07 +00:00
Ilayaperumal Gopinathan
f36af38fe8 Fix documentation upload workflow
- The JavaDoc API directory path shouldn't need an explicit 'api' in its path
2024-11-05 15:56:58 +00:00