|
16 | 16 |
|
17 | 17 | package org.springframework.ai.model.tool.autoconfigure;
|
18 | 18 |
|
19 |
| -import java.util.ArrayList; |
20 |
| -import java.util.List; |
21 |
| - |
22 | 19 | import io.micrometer.observation.ObservationRegistry;
|
23 |
| - |
| 20 | +import org.slf4j.Logger; |
| 21 | +import org.slf4j.LoggerFactory; |
24 | 22 | import org.springframework.ai.chat.model.ChatModel;
|
25 | 23 | import org.springframework.ai.model.tool.ToolCallingManager;
|
26 | 24 | import org.springframework.ai.tool.ToolCallback;
|
27 | 25 | import org.springframework.ai.tool.ToolCallbackProvider;
|
28 | 26 | import org.springframework.ai.tool.execution.DefaultToolExecutionExceptionProcessor;
|
29 | 27 | import org.springframework.ai.tool.execution.ToolExecutionExceptionProcessor;
|
| 28 | +import org.springframework.ai.tool.observation.ToolCallingContentObservationFilter; |
| 29 | +import org.springframework.ai.tool.observation.ToolCallingObservationConvention; |
30 | 30 | import org.springframework.ai.tool.resolution.DelegatingToolCallbackResolver;
|
31 | 31 | import org.springframework.ai.tool.resolution.SpringBeanToolCallbackResolver;
|
32 | 32 | import org.springframework.ai.tool.resolution.StaticToolCallbackResolver;
|
|
35 | 35 | import org.springframework.boot.autoconfigure.AutoConfiguration;
|
36 | 36 | import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
37 | 37 | import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
| 38 | +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
| 39 | +import org.springframework.boot.context.properties.EnableConfigurationProperties; |
38 | 40 | import org.springframework.context.annotation.Bean;
|
39 | 41 | import org.springframework.context.support.GenericApplicationContext;
|
40 | 42 |
|
| 43 | +import java.util.ArrayList; |
| 44 | +import java.util.List; |
| 45 | + |
41 | 46 | /**
|
42 | 47 | * Auto-configuration for common tool calling features of {@link ChatModel}.
|
43 | 48 | *
|
|
47 | 52 | */
|
48 | 53 | @AutoConfiguration
|
49 | 54 | @ConditionalOnClass(ChatModel.class)
|
| 55 | +@EnableConfigurationProperties(ToolCallingProperties.class) |
50 | 56 | public class ToolCallingAutoConfiguration {
|
51 | 57 |
|
| 58 | + private static final Logger logger = LoggerFactory.getLogger(ToolCallingAutoConfiguration.class); |
| 59 | + |
52 | 60 | @Bean
|
53 | 61 | @ConditionalOnMissingBean
|
54 | 62 | ToolCallbackResolver toolCallbackResolver(GenericApplicationContext applicationContext,
|
@@ -76,12 +84,27 @@ ToolExecutionExceptionProcessor toolExecutionExceptionProcessor() {
|
76 | 84 | @ConditionalOnMissingBean
|
77 | 85 | ToolCallingManager toolCallingManager(ToolCallbackResolver toolCallbackResolver,
|
78 | 86 | ToolExecutionExceptionProcessor toolExecutionExceptionProcessor,
|
79 |
| - ObjectProvider<ObservationRegistry> observationRegistry) { |
80 |
| - return ToolCallingManager.builder() |
| 87 | + ObjectProvider<ObservationRegistry> observationRegistry, |
| 88 | + ObjectProvider<ToolCallingObservationConvention> observationConvention) { |
| 89 | + var toolCallingManager = ToolCallingManager.builder() |
81 | 90 | .observationRegistry(observationRegistry.getIfUnique(() -> ObservationRegistry.NOOP))
|
82 | 91 | .toolCallbackResolver(toolCallbackResolver)
|
83 | 92 | .toolExecutionExceptionProcessor(toolExecutionExceptionProcessor)
|
84 | 93 | .build();
|
| 94 | + |
| 95 | + observationConvention.ifAvailable(toolCallingManager::setObservationConvention); |
| 96 | + |
| 97 | + return toolCallingManager; |
| 98 | + } |
| 99 | + |
| 100 | + @Bean |
| 101 | + @ConditionalOnMissingBean |
| 102 | + @ConditionalOnProperty(prefix = ToolCallingProperties.CONFIG_PREFIX + ".observations", name = "include-content", |
| 103 | + havingValue = "true") |
| 104 | + ToolCallingContentObservationFilter toolCallingContentObservationFilter() { |
| 105 | + logger.warn( |
| 106 | + "You have enabled the inclusion of the tool call arguments and result in the observations, with the risk of exposing sensitive or private information. Please, be careful!"); |
| 107 | + return new ToolCallingContentObservationFilter(); |
85 | 108 | }
|
86 | 109 |
|
87 | 110 | }
|
0 commit comments