From 8701cccfabfd72abee4a9da31e5bf5f74c07a7c9 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Mon, 4 Mar 2024 13:58:49 +0100 Subject: [PATCH] Improve VertexAiGeminiAutoConfiguration to allow function calling portability VertexAiGeminiAutoConfiguration creates its own FunctionCallbackContext instance with schema type set to SchemaType.OPEN_API_SCHEMA. This ensures that one other (non OPEN_API_SCHEMA) FucntionCallbackContext Bean overrds it. --- .../gemini/VertexAiGeminiAutoConfiguration.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/vertexai/gemini/VertexAiGeminiAutoConfiguration.java b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/vertexai/gemini/VertexAiGeminiAutoConfiguration.java index fe4269de5..37eccc2e6 100644 --- a/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/vertexai/gemini/VertexAiGeminiAutoConfiguration.java +++ b/spring-ai-spring-boot-autoconfigure/src/main/java/org/springframework/ai/autoconfigure/vertexai/gemini/VertexAiGeminiAutoConfiguration.java @@ -64,7 +64,9 @@ public class VertexAiGeminiAutoConfiguration { @Bean @ConditionalOnMissingBean public VertexAiGeminiChatClient vertexAiGeminiChat(VertexAI vertexAi, VertexAiGeminiChatProperties chatProperties, - List toolFunctionCallbacks, FunctionCallbackContext functionCallbackContext) { + List toolFunctionCallbacks, ApplicationContext context) { + + FunctionCallbackContext functionCallbackContext = springAiFunctionManager(context); if (!CollectionUtils.isEmpty(toolFunctionCallbacks)) { chatProperties.getOptions().getFunctionCallbacks().addAll(toolFunctionCallbacks); @@ -73,9 +75,11 @@ public class VertexAiGeminiAutoConfiguration { return new VertexAiGeminiChatClient(vertexAi, chatProperties.getOptions(), functionCallbackContext); } - @Bean - @ConditionalOnMissingBean - public FunctionCallbackContext springAiFunctionManager(ApplicationContext context) { + /** + * Because of the OPEN_API_SCHEMA type, the FunctionCallbackContext instance must + * different from the other JSON schema types. + */ + private FunctionCallbackContext springAiFunctionManager(ApplicationContext context) { FunctionCallbackContext manager = new FunctionCallbackContext(); manager.setSchemaType(SchemaType.OPEN_API_SCHEMA); manager.setApplicationContext(context);