Skip to content

Commit f0702c3

Browse files
ilayaperumalgmarkpollack
authored andcommitted
Remove deprecated FunctionCallback references
- Remove the deprecated FunctionCallback related classes, references - Replace them with the corresponding ToolCallback usage Signed-off-by: Ilayaperumal Gopinathan <[email protected]>
1 parent 22c778f commit f0702c3

File tree

55 files changed

+102
-3216
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+102
-3216
lines changed

auto-configurations/models/spring-ai-autoconfigure-model-bedrock-ai/src/main/java/org/springframework/ai/model/bedrock/converse/autoconfigure/BedrockConverseProxyChatProperties.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public ToolCallingChatOptions getOptions() {
4444
}
4545

4646
public void setOptions(ToolCallingChatOptions options) {
47-
Assert.notNull(options, "FunctionCallingOptions must not be null");
47+
Assert.notNull(options, "ToolCallingChatOptions must not be null");
4848
this.options = options;
4949
}
5050

auto-configurations/models/spring-ai-autoconfigure-model-minimax/src/test/java/org/springframework/ai/model/minimax/autoconfigure/FunctionCallbackInPromptIT.java

-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import org.springframework.ai.chat.prompt.Prompt;
3333
import org.springframework.ai.minimax.MiniMaxChatModel;
3434
import org.springframework.ai.minimax.MiniMaxChatOptions;
35-
import org.springframework.ai.model.function.FunctionCallback;
3635
import org.springframework.ai.retry.autoconfigure.SpringAiRetryAutoConfiguration;
3736
import org.springframework.ai.tool.function.FunctionToolCallback;
3837
import org.springframework.boot.autoconfigure.AutoConfigurations;

auto-configurations/models/spring-ai-autoconfigure-model-minimax/src/test/java/org/springframework/ai/model/minimax/autoconfigure/FunctionCallbackWithPlainFunctionBeanIT.java

-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
import org.springframework.ai.chat.prompt.Prompt;
3434
import org.springframework.ai.minimax.MiniMaxChatModel;
3535
import org.springframework.ai.minimax.MiniMaxChatOptions;
36-
import org.springframework.ai.model.function.FunctionCallingOptions;
3736
import org.springframework.ai.model.tool.ToolCallingChatOptions;
3837
import org.springframework.ai.retry.autoconfigure.SpringAiRetryAutoConfiguration;
3938
import org.springframework.boot.autoconfigure.AutoConfigurations;

auto-configurations/models/spring-ai-autoconfigure-model-minimax/src/test/java/org/springframework/ai/model/minimax/autoconfigure/MiniMaxFunctionCallbackIT.java

-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import org.springframework.ai.chat.prompt.Prompt;
3333
import org.springframework.ai.minimax.MiniMaxChatModel;
3434
import org.springframework.ai.minimax.MiniMaxChatOptions;
35-
import org.springframework.ai.model.function.FunctionCallback;
3635
import org.springframework.ai.model.tool.autoconfigure.ToolCallingAutoConfiguration;
3736
import org.springframework.ai.retry.autoconfigure.SpringAiRetryAutoConfiguration;
3837
import org.springframework.ai.tool.function.FunctionToolCallback;

auto-configurations/models/spring-ai-autoconfigure-model-ollama/src/test/kotlin/org/springframework/ai/model/ollama/autoconfigure/tool/FunctionCallbackContextKotlinIT.kt

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ class FunctionCallbackResolverKotlinIT : BaseOllamaIT() {
5959
.withUserConfiguration(Config::class.java)
6060

6161
@Test
62-
fun functionCallTest() {
62+
fun toolCallTest() {
6363
this.contextRunner.run {context ->
6464

6565
val chatModel = context.getBean(OllamaChatModel::class.java)
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ import org.springframework.context.annotation.Configuration
3333
import org.springframework.context.annotation.Description
3434

3535

36-
class FunctionCallbackKotlinIT : BaseOllamaIT() {
36+
class ToolCallbackKotlinIT : BaseOllamaIT() {
3737

3838
companion object {
3939

@@ -46,7 +46,7 @@ class FunctionCallbackKotlinIT : BaseOllamaIT() {
4646
}
4747
}
4848

49-
private val logger = LoggerFactory.getLogger(FunctionCallbackKotlinIT::class.java)
49+
private val logger = LoggerFactory.getLogger(ToolCallbackKotlinIT::class.java)
5050

5151
private val contextRunner = ApplicationContextRunner()
5252
.withPropertyValues(
@@ -59,7 +59,7 @@ class FunctionCallbackKotlinIT : BaseOllamaIT() {
5959
.withUserConfiguration(Config::class.java)
6060

6161
@Test
62-
fun functionCallTest() {
62+
fun toolCallTest() {
6363
this.contextRunner.run {context ->
6464

6565
val chatModel = context.getBean(OllamaChatModel::class.java)

auto-configurations/models/spring-ai-autoconfigure-model-vertex-ai/src/main/java/org/springframework/ai/model/vertexai/autoconfigure/gemini/VertexAiGeminiChatAutoConfiguration.java

-12
Original file line numberDiff line numberDiff line change
@@ -113,16 +113,4 @@ public VertexAiGeminiChatModel vertexAiGeminiChat(VertexAI vertexAi, VertexAiGem
113113
return chatModel;
114114
}
115115

116-
/**
117-
* Because of the OPEN_API_SCHEMA type, the FunctionCallbackResolver instance must
118-
* different from the other JSON schema types.
119-
*/
120-
// private FunctionCallbackResolver springAiFunctionManager(ApplicationContext
121-
// context) {
122-
// DefaultFunctionCallbackResolver manager = new DefaultFunctionCallbackResolver();
123-
// manager.setSchemaType(SchemaType.OPEN_API_SCHEMA);
124-
// manager.setApplicationContext(context);
125-
// return manager;
126-
// }
127-
128116
}

auto-configurations/models/spring-ai-autoconfigure-model-vertex-ai/src/test/java/org/springframework/ai/model/vertexai/autoconfigure/gemini/tool/FunctionCallWithFunctionBeanIT.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import org.springframework.ai.chat.messages.UserMessage;
2828
import org.springframework.ai.chat.model.ChatResponse;
2929
import org.springframework.ai.chat.prompt.Prompt;
30-
import org.springframework.ai.model.function.FunctionCallingOptions;
30+
import org.springframework.ai.model.tool.ToolCallingChatOptions;
3131
import org.springframework.ai.model.vertexai.autoconfigure.gemini.VertexAiGeminiChatAutoConfiguration;
3232
import org.springframework.ai.vertexai.gemini.VertexAiGeminiChatModel;
3333
import org.springframework.ai.vertexai.gemini.VertexAiGeminiChatOptions;
@@ -109,7 +109,7 @@ void functionCallWithPortableFunctionCallingOptions() {
109109
""");
110110

111111
ChatResponse response = chatModel.call(new Prompt(List.of(userMessage),
112-
FunctionCallingOptions.builder().function("weatherFunction").build()));
112+
ToolCallingChatOptions.builder().toolNames("weatherFunction").build()));
113113

114114
logger.info("Response: {}", response);
115115

auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/test/java/org/springframework/ai/model/zhipuai/autoconfigure/tool/FunctionCallbackInPromptIT.java

-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import org.springframework.ai.chat.model.ChatResponse;
3131
import org.springframework.ai.chat.model.Generation;
3232
import org.springframework.ai.chat.prompt.Prompt;
33-
import org.springframework.ai.model.function.FunctionCallback;
3433
import org.springframework.ai.model.zhipuai.autoconfigure.ZhiPuAiChatAutoConfiguration;
3534
import org.springframework.ai.retry.autoconfigure.SpringAiRetryAutoConfiguration;
3635
import org.springframework.ai.tool.function.FunctionToolCallback;

auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/test/java/org/springframework/ai/model/zhipuai/autoconfigure/tool/FunctionCallbackWithPlainFunctionBeanIT.java

-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import org.springframework.ai.chat.model.ChatResponse;
3232
import org.springframework.ai.chat.model.Generation;
3333
import org.springframework.ai.chat.prompt.Prompt;
34-
import org.springframework.ai.model.function.FunctionCallingOptions;
3534
import org.springframework.ai.model.tool.ToolCallingChatOptions;
3635
import org.springframework.ai.model.zhipuai.autoconfigure.ZhiPuAiChatAutoConfiguration;
3736
import org.springframework.ai.retry.autoconfigure.SpringAiRetryAutoConfiguration;

auto-configurations/models/spring-ai-autoconfigure-model-zhipuai/src/test/java/org/springframework/ai/model/zhipuai/autoconfigure/tool/ZhipuAiFunctionCallbackIT.java

-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import org.springframework.ai.chat.model.ChatResponse;
3131
import org.springframework.ai.chat.model.Generation;
3232
import org.springframework.ai.chat.prompt.Prompt;
33-
import org.springframework.ai.model.function.FunctionCallback;
3433
import org.springframework.ai.model.zhipuai.autoconfigure.ZhiPuAiChatAutoConfiguration;
3534
import org.springframework.ai.retry.autoconfigure.SpringAiRetryAutoConfiguration;
3635
import org.springframework.ai.tool.ToolCallback;

auto-configurations/models/tool/spring-ai-autoconfigure-model-tool/src/test/java/org/springframework/ai/model/tool/autoconfigure/ToolCallingAutoConfigurationTests.java

+8-6
Original file line numberDiff line numberDiff line change
@@ -75,24 +75,26 @@ void resolveMultipleFunctionAndToolCallbacks() {
7575
assertThat(toolCallbackResolver).isInstanceOf(DelegatingToolCallbackResolver.class);
7676

7777
assertThat(toolCallbackResolver.resolve("getForecast")).isNotNull();
78-
assertThat(toolCallbackResolver.resolve("getForecast").getName()).isEqualTo("getForecast");
78+
assertThat(toolCallbackResolver.resolve("getForecast").getToolDefinition().name())
79+
.isEqualTo("getForecast");
7980

8081
assertThat(toolCallbackResolver.resolve("getAlert")).isNotNull();
81-
assertThat(toolCallbackResolver.resolve("getAlert").getName()).isEqualTo("getAlert");
82+
assertThat(toolCallbackResolver.resolve("getAlert").getToolDefinition().name()).isEqualTo("getAlert");
8283

8384
assertThat(toolCallbackResolver.resolve("weatherFunction1")).isNotNull();
84-
assertThat(toolCallbackResolver.resolve("weatherFunction1").getName()).isEqualTo("weatherFunction1");
85+
assertThat(toolCallbackResolver.resolve("weatherFunction1").getToolDefinition().name())
86+
.isEqualTo("weatherFunction1");
8587

8688
assertThat(toolCallbackResolver.resolve("getCurrentWeather3")).isNotNull();
87-
assertThat(toolCallbackResolver.resolve("getCurrentWeather3").getName())
89+
assertThat(toolCallbackResolver.resolve("getCurrentWeather3").getToolDefinition().name())
8890
.isEqualTo("getCurrentWeather3");
8991

9092
assertThat(toolCallbackResolver.resolve("getCurrentWeather4")).isNotNull();
91-
assertThat(toolCallbackResolver.resolve("getCurrentWeather4").getName())
93+
assertThat(toolCallbackResolver.resolve("getCurrentWeather4").getToolDefinition().name())
9294
.isEqualTo("getCurrentWeather4");
9395

9496
assertThat(toolCallbackResolver.resolve("getCurrentWeather5")).isNotNull();
95-
assertThat(toolCallbackResolver.resolve("getCurrentWeather5").getName())
97+
assertThat(toolCallbackResolver.resolve("getCurrentWeather5").getToolDefinition().name())
9698
.isEqualTo("getCurrentWeather5");
9799
});
98100
}

models/spring-ai-vertex-ai-gemini/src/test/java/org/springframework/ai/vertexai/gemini/tool/VertexAiGeminiPaymentTransactionMethodIT.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -223,10 +223,10 @@ ToolCallingManager toolCallingManager(GenericApplicationContext applicationConte
223223
List<ToolCallbackProvider> tcps, List<ToolCallback> toolCallbacks,
224224
ObjectProvider<ObservationRegistry> observationRegistry) {
225225

226-
List<ToolCallback> allFunctionCallbacks = new ArrayList(toolCallbacks);
227-
tcps.stream().map(pr -> List.of(pr.getToolCallbacks())).forEach(allFunctionCallbacks::addAll);
226+
List<ToolCallback> allToolCallbacks = new ArrayList(toolCallbacks);
227+
tcps.stream().map(pr -> List.of(pr.getToolCallbacks())).forEach(allToolCallbacks::addAll);
228228

229-
var staticToolCallbackResolver = new StaticToolCallbackResolver(allFunctionCallbacks);
229+
var staticToolCallbackResolver = new StaticToolCallbackResolver(allToolCallbacks);
230230

231231
var springBeanToolCallbackResolver = SpringBeanToolCallbackResolver.builder()
232232
.applicationContext(applicationContext)

models/spring-ai-zhipuai/src/test/java/org/springframework/ai/zhipuai/ChatCompletionRequestTests.java

-2
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@
2020

2121
import org.junit.jupiter.api.Test;
2222

23-
import org.springframework.ai.chat.prompt.ChatOptions;
2423
import org.springframework.ai.chat.prompt.Prompt;
25-
import org.springframework.ai.model.function.FunctionCallback;
2624
import org.springframework.ai.tool.function.FunctionToolCallback;
2725
import org.springframework.ai.zhipuai.api.MockWeatherService;
2826
import org.springframework.ai.zhipuai.api.ZhiPuAiApi;

models/spring-ai-zhipuai/src/test/java/org/springframework/ai/zhipuai/chat/ZhiPuAiChatModelIT.java

-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@
4848
import org.springframework.ai.converter.BeanOutputConverter;
4949
import org.springframework.ai.converter.ListOutputConverter;
5050
import org.springframework.ai.converter.MapOutputConverter;
51-
import org.springframework.ai.model.function.FunctionCallback;
5251
import org.springframework.ai.tool.function.FunctionToolCallback;
5352
import org.springframework.ai.zhipuai.ZhiPuAiChatOptions;
5453
import org.springframework.ai.zhipuai.ZhiPuAiTestConfiguration;

spring-ai-client-chat/src/test/java/org/springframework/ai/chat/client/ChatClientTest.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@ void mutateDefaults() {
248248
var fco = (ToolCallingChatOptions) prompt.getOptions();
249249

250250
assertThat(fco.getToolNames()).containsExactlyInAnyOrder("fun1", "fun2");
251-
assertThat(fco.getToolCallbacks().iterator().next().getName()).isEqualTo("fun3");
251+
assertThat(fco.getToolCallbacks().iterator().next().getToolDefinition().name()).isEqualTo("fun3");
252252

253253
// Streaming
254254
content = join(chatClient.prompt().stream().content());
@@ -270,7 +270,7 @@ void mutateDefaults() {
270270
fco = (ToolCallingChatOptions) prompt.getOptions();
271271

272272
assertThat(fco.getToolNames()).containsExactlyInAnyOrder("fun1", "fun2");
273-
assertThat(fco.getToolCallbacks().iterator().next().getName()).isEqualTo("fun3");
273+
assertThat(fco.getToolCallbacks().iterator().next().getToolDefinition().name()).isEqualTo("fun3");
274274

275275
// mutate builder
276276
// @formatter:off
@@ -300,7 +300,7 @@ void mutateDefaults() {
300300
fco = (ToolCallingChatOptions) prompt.getOptions();
301301

302302
assertThat(fco.getToolNames()).containsExactlyInAnyOrder("fun1", "fun2", "fun4");
303-
assertThat(fco.getToolCallbacks().iterator().next().getName()).isEqualTo("fun3");
303+
assertThat(fco.getToolCallbacks().iterator().next().getToolDefinition().name()).isEqualTo("fun3");
304304

305305
// Streaming
306306
content = join(chatClient.prompt().stream().content());
@@ -322,7 +322,7 @@ void mutateDefaults() {
322322
fco = (ToolCallingChatOptions) prompt.getOptions();
323323

324324
assertThat(fco.getToolNames()).containsExactlyInAnyOrder("fun1", "fun2", "fun4");
325-
assertThat(fco.getToolCallbacks().iterator().next().getName()).isEqualTo("fun3");
325+
assertThat(fco.getToolCallbacks().iterator().next().getToolDefinition().name()).isEqualTo("fun3");
326326

327327
}
328328

@@ -385,7 +385,7 @@ void mutatePrompt() {
385385
var tco = (ToolCallingChatOptions) prompt.getOptions();
386386

387387
assertThat(tco.getToolNames()).containsExactlyInAnyOrder("fun1", "fun2", "fun5");
388-
assertThat(tco.getToolCallbacks().iterator().next().getName()).isEqualTo("fun3");
388+
assertThat(tco.getToolCallbacks().iterator().next().getToolDefinition().name()).isEqualTo("fun3");
389389

390390
// Streaming
391391
// @formatter:off
@@ -416,7 +416,7 @@ void mutatePrompt() {
416416
var tcoptions = (ToolCallingChatOptions) prompt.getOptions();
417417

418418
assertThat(tcoptions.getToolNames()).containsExactlyInAnyOrder("fun1", "fun2", "fun5");
419-
assertThat(tcoptions.getToolCallbacks().iterator().next().getName()).isEqualTo("fun3");
419+
assertThat(tcoptions.getToolCallbacks().iterator().next().getToolDefinition().name()).isEqualTo("fun3");
420420
}
421421

422422
@Test

spring-ai-client-chat/src/test/java/org/springframework/ai/chat/client/DefaultChatClientTests.java

+8-7
Original file line numberDiff line numberDiff line change
@@ -1491,8 +1491,6 @@ void whenToolCallbacksThenReturn() {
14911491
assertThat(defaultSpec.getToolCallbacks()).contains(toolCallback);
14921492
}
14931493

1494-
// FunctionCallback.builder().description("description").function(null,input->"hello").inputType(String.class).build()
1495-
14961494
@Test
14971495
void whenFunctionNameIsNullThenThrow() {
14981496
ChatClient chatClient = new DefaultChatClientBuilder(mock(ChatModel.class)).build();
@@ -1544,7 +1542,8 @@ void whenFunctionThenReturn() {
15441542
.description("description")
15451543
.build());
15461544
DefaultChatClient.DefaultChatClientRequestSpec defaultSpec = (DefaultChatClient.DefaultChatClientRequestSpec) spec;
1547-
assertThat(defaultSpec.getToolCallbacks()).anyMatch(callback -> callback.getName().equals("name"));
1545+
assertThat(defaultSpec.getToolCallbacks())
1546+
.anyMatch(callback -> callback.getToolDefinition().name().equals("name"));
15481547
}
15491548

15501549
@Test
@@ -1556,7 +1555,8 @@ void whenFunctionAndInputTypeThenReturn() {
15561555
.description("description")
15571556
.build());
15581557
DefaultChatClient.DefaultChatClientRequestSpec defaultSpec = (DefaultChatClient.DefaultChatClientRequestSpec) spec;
1559-
assertThat(defaultSpec.getToolCallbacks()).anyMatch(callback -> callback.getName().equals("name"));
1558+
assertThat(defaultSpec.getToolCallbacks())
1559+
.anyMatch(callback -> callback.getToolDefinition().name().equals("name"));
15601560
}
15611561

15621562
@Test
@@ -1610,7 +1610,8 @@ void whenBiFunctionThenReturn() {
16101610
.inputType(String.class)
16111611
.build());
16121612
DefaultChatClient.DefaultChatClientRequestSpec defaultSpec = (DefaultChatClient.DefaultChatClientRequestSpec) spec;
1613-
assertThat(defaultSpec.getToolCallbacks()).anyMatch(callback -> callback.getName().equals("name"));
1613+
assertThat(defaultSpec.getToolCallbacks())
1614+
.anyMatch(callback -> callback.getToolDefinition().name().equals("name"));
16141615
}
16151616

16161617
@Test
@@ -1632,7 +1633,7 @@ void whenFunctionBeanNamesThenReturn() {
16321633
}
16331634

16341635
@Test
1635-
void whenFunctionCallbacksElementIsNullThenThrow() {
1636+
void whenFunctionToolCallbacksElementIsNullThenThrow() {
16361637
ChatClient chatClient = new DefaultChatClientBuilder(mock(ChatModel.class)).build();
16371638
ChatClient.ChatClientRequestSpec spec = chatClient.prompt();
16381639
assertThatThrownBy(() -> spec.tools(mock(FunctionToolCallback.class), null))
@@ -1641,7 +1642,7 @@ void whenFunctionCallbacksElementIsNullThenThrow() {
16411642
}
16421643

16431644
@Test
1644-
void whenFunctionCallbacksThenReturn() {
1645+
void whenFunctionToolCallbacksThenReturn() {
16451646
ChatClient chatClient = new DefaultChatClientBuilder(mock(ChatModel.class)).build();
16461647
ChatClient.ChatClientRequestSpec spec = chatClient.prompt();
16471648
FunctionToolCallback functionToolCallback = mock(FunctionToolCallback.class);

spring-ai-client-chat/src/test/java/org/springframework/ai/chat/client/advisor/api/AdvisedRequestTests.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ void whenFunctionNamesIsNullThenThrows() {
9393
}
9494

9595
@Test
96-
void whenFunctionCallbacksIsNullThenThrows() {
96+
void whenToolCallbacksIsNullThenThrows() {
9797
assertThatThrownBy(() -> new AdvisedRequest(mock(ChatModel.class), "user", null, null, List.of(), List.of(),
9898
null, List.of(), Map.of(), Map.of(), List.of(), Map.of(), Map.of(), Map.of()))
9999
.isInstanceOf(IllegalArgumentException.class)

spring-ai-docs/src/main/antora/modules/ROOT/nav.adoc

-2
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
**** xref:api/chat/functions/openai-chat-functions.adoc[OpenAI Function Calling (Deprecated)]
3434
*** xref:api/chat/qianfan-chat.adoc[QianFan]
3535
*** xref:api/chat/zhipuai-chat.adoc[ZhiPu AI]
36-
// **** xref:api/chat/functions/zhipuai-chat-functions.adoc[Function Calling]
3736
*** xref:api/chat/watsonx-ai-chat.adoc[watsonx.AI]
3837
** xref:api/embeddings.adoc[Embedding Models]
3938
*** xref:api/bedrock.adoc[Amazon Bedrock]
@@ -107,7 +106,6 @@
107106
** xref:api/prompt.adoc[]
108107
** xref:api/chat/prompt-engineering-patterns.adoc[]
109108
* xref:api/testing.adoc[AI Model Evaluation]
110-
* xref:api/functions.adoc[Function Calling (Deprecated)]
111109
112110
113111
* Service Connections

spring-ai-docs/src/main/antora/modules/ROOT/pages/api/chat/functions/anthropic-chat-functions.adoc

+4-4
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ Your function can in turn invoke other 3rd party services to provide the results
2020
Spring AI makes this as easy as defining a `@Bean` definition that returns a `java.util.Function` and supplying the bean name as an option when invoking the `ChatModel`.
2121

2222
Under the hood, Spring wraps your POJO (the function) with the appropriate adapter code that enables interaction with the AI Model, saving you from writing tedious boilerplate code.
23-
The basis of the underlying infrastructure is the link:https://github.com/spring-projects/spring-ai/blob/main/spring-ai-model/src/main/java/org/springframework/ai/model/function/FunctionCallback.java[FunctionCallback.java] interface and the companion Builder utility class to simplify the implementation and registration of Java callback functions.
23+
The basis of the underlying infrastructure is the link:https://github.com/spring-projects/spring-ai/blob/main/spring-ai-model/src/main/java/org/springframework/ai/tool/ToolCallback.java[ToolCallback.java] interface and the companion Builder utility class to simplify the implementation and registration of Java callback functions.
2424

2525
== How it works
2626

@@ -72,7 +72,7 @@ We start with describing the most POJO friendly options.
7272

7373
In this approach you define `@Beans` in your application context as you would any other Spring managed object.
7474

75-
Internally, Spring AI `ChatModel` will create an instance of a `FunctionCallback` that adds the logic for it being invoked via the AI model.
75+
Internally, Spring AI `ChatModel` will create an instance of a `ToolCallback` that adds the logic for it being invoked via the AI model.
7676
The name of the `@Bean` is passed as a `ChatOption`.
7777

7878

@@ -117,9 +117,9 @@ It is a best practice to annotate the request object with information such that
117117
The link:https://github.com/spring-projects/spring-ai/blob/main/auto-configurations/models/spring-ai-autoconfigure-model-anthropic/src/test/java/org/springframework/ai/model/anthropic/autoconfigure/tool/FunctionCallWithFunctionBeanIT.java[FunctionCallWithFunctionBeanIT.java] demonstrates this approach.
118118

119119

120-
==== FunctionCallback
120+
==== ToolCallback
121121

122-
Another way to register a function is to create a `FunctionCallback` instance like this:
122+
Another way to register a function is to create a `ToolCallback` instance like this:
123123

124124
[source,java]
125125
----

0 commit comments

Comments
 (0)