175 instantiations of FunctionCallContent
Microsoft.Extensions.AI (1)
ChatCompletion\FunctionInvocationContext.cs (1)
54get => _callContent ??= new(string.Empty, _nopFunction.Name, EmptyReadOnlyDictionary<string, object?>.Instance);
Microsoft.Extensions.AI.Abstractions (1)
Contents\FunctionCallContent.cs (1)
97return new FunctionCallContent(callId, name, arguments)
Microsoft.Extensions.AI.Abstractions.Tests (14)
ChatCompletion\ChatMessageTests.cs (2)
149new FunctionCallContent("callId1", "fc1"), 272new FunctionCallContent("function-id", "plugin-name-function-name", new Dictionary<string, object?> { ["parameter"] = "argument" }),
ChatCompletion\ChatResponseUpdateTests.cs (2)
94new FunctionCallContent("callId1", "fc1"), 123new FunctionCallContent("callId1", "fc1"),
Contents\FunctionApprovalRequestContentTests.cs (3)
14FunctionCallContent functionCall = new("FCC1", "TestFunction"); 29FunctionCallContent functionCall = new("FCC1", "TestFunction"); 43FunctionCallContent functionCall = new("FCC1", "TestFunction");
Contents\FunctionApprovalResponseContentTests.cs (2)
14FunctionCallContent functionCall = new("FCC1", "TestFunction"); 29FunctionCallContent functionCall = new("FCC1", "TestFunction");
Contents\FunctionCallContentTests.cs (4)
21FunctionCallContent c = new("callId1", "name"); 38FunctionCallContent c = new("id", "name", args); 51FunctionCallContent c = new("callId1", "name"); 81var sut = new FunctionCallContent("callId1", "functionName", new Dictionary<string, object?> { ["key"] = "value" }) { Exception = ex };
SpeechToText\SpeechToTextResponseUpdateTests.cs (1)
65new FunctionCallContent("callId1", "fc1"),
Microsoft.Extensions.AI.AzureAIInference.Tests (1)
AzureAIInferenceChatClientTests.cs (1)
990new(ChatRole.Assistant, [new FunctionCallContent("abcd123", "GetMood")]),
Microsoft.Extensions.AI.Integration.Tests (1)
PromptBasedFunctionCallingChatClient.cs (1)
118message.Contents.Add(new FunctionCallContent(id, toolCallParsed.Name!, toolCallParsed.Arguments is { } args ? new ReadOnlyDictionary<string, object?>(args) : null));
Microsoft.Extensions.AI.OpenAI.Tests (12)
OpenAIChatClientTests.cs (2)
1436new FunctionCallContent("12345", "SayHello"), 1437new FunctionCallContent("12346", "SayHi"),
OpenAIConversionTests.cs (10)
95new FunctionCallContent("callid123", "SomeFunction", new Dictionary<string, object?> 161new FunctionCallContent("callid123", "SomeFunction", new Dictionary<string, object?> 364new FunctionCallContent("call123", "TestFunction", new Dictionary<string, object?> { ["param"] = "value" }) 469new FunctionCallContent("process_data", "ProcessComplexData", complexArgs) 652var functionCallContent = new FunctionCallContent("call-123", "GetWeather", new Dictionary<string, object?> 690var functionCall1 = new FunctionCallContent("call-1", "Function1", new Dictionary<string, object?> { ["param1"] = "value1" }); 691var functionCall2 = new FunctionCallContent("call-2", "Function2", new Dictionary<string, object?> { ["param2"] = "value2" }); 724new FunctionCallContent("call-123", "GetWeather", new Dictionary<string, object?> { ["location"] = "Seattle" }), 966new FunctionCallContent("call-123", "TestFunction", new Dictionary<string, object?> { ["param"] = "value" }) 1001new FunctionCallContent("call-456", "GetWeather", new Dictionary<string, object?> { ["location"] = "Seattle" })
Microsoft.Extensions.AI.Tests (145)
ChatCompletion\ChatClientStructuredOutputExtensionsTests.cs (1)
201new FunctionCallContent("callid123", "get_data"),
ChatCompletion\DistributedCachingChatClientTest.cs (4)
51Contents = [new FunctionCallContent("someCallId", "functionName", new Dictionary<string, object?> 254new FunctionCallContent("someCallId", "someFn", new Dictionary<string, object?> { ["arg1"] = "value1" }), 265Contents = [new FunctionCallContent("someCallId", "someFn", new Dictionary<string, object?> { ["arg1"] = "value1" })], 315new() { Role = ChatRole.Assistant, Contents = [new FunctionCallContent("callId1", "separator")] },
ChatCompletion\FunctionInvocationContextTests.cs (1)
55FunctionCallContent callContent = new(string.Empty, string.Empty, new Dictionary<string, object?>());
ChatCompletion\FunctionInvokingChatClientApprovalsTests.cs (84)
41new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1"), new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })]), 48new FunctionApprovalRequestContent("callId1", new FunctionCallContent("callId1", "Func1")), 49new FunctionApprovalRequestContent("callId2", new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })) 77new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1"), new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })]), 84new FunctionApprovalRequestContent("callId1", new FunctionCallContent("callId1", "Func1")), 85new FunctionApprovalRequestContent("callId2", new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })) 121new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1"), new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })]), 128new FunctionApprovalRequestContent("callId1", new FunctionCallContent("callId1", "Func1")), 129new FunctionApprovalRequestContent("callId2", new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })) 155new FunctionApprovalRequestContent("callId1", new FunctionCallContent("callId1", "Func1")), 156new FunctionApprovalRequestContent("callId2", new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })) 160new FunctionApprovalResponseContent("callId1", true, new FunctionCallContent("callId1", "Func1")), 161new FunctionApprovalResponseContent("callId2", true, new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })) 168new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1"), new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })]), 179new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1"), new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })]), 206new FunctionApprovalRequestContent("callId1", new FunctionCallContent("callId1", "Func1")), 210new FunctionApprovalRequestContent("callId2", new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })) 214new FunctionApprovalResponseContent("callId1", true, new FunctionCallContent("callId1", "Func1")), 218new FunctionApprovalResponseContent("callId2", true, new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })) 225new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1")]) { MessageId = "resp1" }, 226new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })]) { MessageId = "resp2" }, 237new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1")]) { MessageId = "resp1" }, 238new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })]) { MessageId = "resp2" }, 265new FunctionApprovalRequestContent("callId1", new FunctionCallContent("callId1", "Func1")), 266new FunctionApprovalRequestContent("callId2", new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })) 270new FunctionApprovalResponseContent("callId1", false, new FunctionCallContent("callId1", "Func1")), 271new FunctionApprovalResponseContent("callId2", false, new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })) 278new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1"), new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })]), 293new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1"), new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })]), 324new FunctionApprovalRequestContent("callId1", new FunctionCallContent("callId1", "Func1")), 325new FunctionApprovalRequestContent("callId2", new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })) 329new FunctionApprovalResponseContent("callId1", false, new FunctionCallContent("callId1", "Func1")), 330new FunctionApprovalResponseContent("callId2", true, new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })) 337new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1"), new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })]), 349new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1"), new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })]), 357new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1"), new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })]), 388new FunctionApprovalRequestContent("callId1", new FunctionCallContent("callId1", "Func1")), 389new FunctionApprovalRequestContent("callId2", new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })) 393new FunctionApprovalResponseContent("callId1", true, new FunctionCallContent("callId1", "Func1")), 394new FunctionApprovalResponseContent("callId2", true, new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })) 401new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1"), new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })]), 407new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 3 } })]), 412new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1"), new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })]), 416new FunctionApprovalRequestContent("callId2", new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 3 } })) 442new FunctionApprovalRequestContent("callId1", new FunctionCallContent("callId1", "Func1")), 443new FunctionApprovalRequestContent("callId2", new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })) 447new FunctionApprovalResponseContent("callId1", true, new FunctionCallContent("callId1", "Func1")), 448new FunctionApprovalResponseContent("callId2", true, new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })) 450new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1"), new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })]), 454new FunctionApprovalRequestContent("callId3", new FunctionCallContent("callId3", "Func1")), 458new FunctionApprovalResponseContent("callId3", true, new FunctionCallContent("callId3", "Func1")), 465new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1"), new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })]), 467new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId3", "Func1")]), 478new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId3", "Func1")]), 505new FunctionApprovalRequestContent("callId1", new FunctionCallContent("callId1", "Func1")), 535new FunctionApprovalResponseContent("callId1", true, new FunctionCallContent("callId1", "Func1")), 536new FunctionApprovalResponseContent("callId2", true, new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })) 543new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1"), new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })]), 554new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1"), new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })]), 581new FunctionApprovalResponseContent("callId1", true, new FunctionCallContent("callId1", "Func1")), 582new FunctionApprovalResponseContent("callId2", true, new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })) 598new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1"), new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })]), 643yield return new ChatResponseUpdate(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1")]) { MessageId = messageId }; 649new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } }) 720yield return new ChatResponseUpdate(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1")]) { MessageId = messageId }; 725new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } }) 729yield return new ChatResponseUpdate(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func3")]) { MessageId = messageId };
ChatCompletion\FunctionInvokingChatClientTests.cs (50)
93new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1")]), 95new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })]), 97new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId3", "VoidReturn", arguments: new Dictionary<string, object?> { { "i", 43 } })]), 127new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1")]), 129new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })]), 131new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId3", "VoidReturn", arguments: new Dictionary<string, object?> { { "i", 43 } })]), 160new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1")]), 162new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })]), 164new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId3", "VoidReturn", arguments: new Dictionary<string, object?> { { "i", 43 } })]), 193new FunctionCallContent("callId1", "Func1"), 194new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 34 } }), 195new FunctionCallContent("callId3", "Func2", arguments: new Dictionary<string, object?> { { "i", 56 } }), 205new FunctionCallContent("callId4", "Func2", arguments: new Dictionary<string, object?> { { "i", 78 } }), 206new FunctionCallContent("callId5", "Func1") 253new FunctionCallContent("callId1", "Func", arguments: new Dictionary<string, object?> { { "arg", "hello" } }), 254new FunctionCallContent("callId2", "Func", arguments: new Dictionary<string, object?> { { "arg", "world" } }), 297new FunctionCallContent("callId1", "Func", arguments: new Dictionary<string, object?> { { "arg", "hello" } }), 298new FunctionCallContent("callId2", "Func", arguments: new Dictionary<string, object?> { { "arg", "world" } }), 329new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1")]), 331new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })]), 333new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId3", "VoidReturn", arguments: new Dictionary<string, object?> { { "i", 43 } })]), 378new ChatMessage(ChatRole.Assistant, [new FunctionCallContent($"callId0", "VoidReturn")]), 386plan.Add(new ChatMessage(ChatRole.Assistant, [new FunctionCallContent($"callId{(i + 1)}", "VoidReturn")])); 528assistantMessage.Contents.Add(new FunctionCallContent(callId, "Func", 552new ChatMessage(ChatRole.Assistant, [new TextContent("extra"), new FunctionCallContent("callId1", "Func1"), new TextContent("stuff")]), 554new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId2", "Func2", arguments: new Dictionary<string, object?> { { "i", 42 } })]), 556new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId3", "VoidReturn", arguments: new Dictionary<string, object?> { { "i", 43 } }), new TextContent("more")]), 589new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1")]), 611new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1", new Dictionary<string, object?> { ["arg1"] = "value1" })]), 667new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1", new Dictionary<string, object?> { ["arg1"] = "value1" })]), 742new() { Contents = [new FunctionCallContent("callId1", "Func1", new Dictionary<string, object?> { ["text"] = "Input 1" })] }, 743new() { Contents = [new FunctionCallContent("callId2", "Func1", new Dictionary<string, object?> { ["text"] = "Input 2" })] } 795new(ChatRole.Assistant, [new FunctionCallContent($"callId{chatContents.Count()}", "Func1")]) : 844new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1", new Dictionary<string, object?> { ["i"] = 41 })]), 846new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId2", "Func1", new Dictionary<string, object?> { ["i"] = 42 })]), 854new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId3", "Func1", new Dictionary<string, object?> { ["i"] = 43 })]), 914new FunctionCallContent("callId1", "Search"), 915new FunctionCallContent("callId2", "Search", new Dictionary<string, object?> { { "result", "birds" } }), 916new FunctionCallContent("callId3", "Search"), 962return new ChatResponse(new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId-abc", "Func1")])) 1000new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("callId1", "Func1", new Dictionary<string, object?> { ["arg1"] = "value1" })]), 1030new FunctionCallContent("callId1", "Func1", new Dictionary<string, object?> { ["arg"] = "value1" }), 1031new FunctionCallContent("callId2", "Func1", new Dictionary<string, object?> { ["arg"] = "value2" }), 1083new FunctionCallContent("callId1", "UnknownFunc", new Dictionary<string, object?> { ["i"] = 1 }), 1084new FunctionCallContent("callId2", "KnownFunc", new Dictionary<string, object?> { ["i"] = 2 }) 1102new FunctionCallContent("callId1", "UnknownFunc", new Dictionary<string, object?> { ["i"] = 1 }), 1103new FunctionCallContent("callId2", "KnownFunc", new Dictionary<string, object?> { ["i"] = 2 }) 1130new(ChatRole.Assistant, [new FunctionCallContent("callId1", "DefOnly")]), 1160new FunctionCallContent("callId1", "Known"), 1161new FunctionCallContent("callId2", "DefOnly")
ChatCompletion\OpenTelemetryChatClientTests.cs (1)
109new(ChatRole.Assistant, [new FunctionCallContent("12345", "GetPersonName")]),
ChatReduction\MessageCountingChatReducerTests.cs (3)
128new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("call1", "get_weather", new Dictionary<string, object?> { ["location"] = "Seattle" })]), 223new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("call1", "func", null)]), 225new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("call2", "func", null)]),
ChatReduction\SummarizingChatReducerTests.cs (1)
95new ChatMessage(ChatRole.Assistant, [new FunctionCallContent("call1", "get_weather", new Dictionary<string, object?> { ["location"] = "Seattle" })]),
158 references to FunctionCallContent
Microsoft.Extensions.AI (42)
ChatCompletion\FunctionInvocationContext.cs (2)
27private FunctionCallContent? _callContent; 52public FunctionCallContent CallContent
ChatCompletion\FunctionInvokingChatClient.cs (37)
36/// When this client receives a <see cref="FunctionCallContent"/> in a chat response from its inner 44/// <see cref="FunctionInvokingChatClient"/> will not attempt to invoke it, and instead allow that <see cref="FunctionCallContent"/> 50/// attempt to invoke it directly. Instead, it will replace that <see cref="FunctionCallContent"/> with a <see cref="FunctionApprovalRequestContent"/> 51/// that wraps the <see cref="FunctionCallContent"/> and indicates that the function requires approval before it can be invoked. The caller is then 56/// Due to the nature of interactions with an underlying <see cref="IChatClient"/>, if any <see cref="FunctionCallContent"/> is received 57/// for a function that requires approval, all received <see cref="FunctionCallContent"/> in that same response will also require approval, 297List<FunctionCallContent>? functionCallContents = null; // function call contents that need responding to in the current turn 435List<FunctionCallContent>? functionCallContents = null; // function call contents that need responding to in the current turn 759/// <summary>Copies any <see cref="FunctionCallContent"/> from <paramref name="messages"/> to <paramref name="functionCalls"/>.</summary> 761IList<ChatMessage> messages, [NotNullWhen(true)] ref List<FunctionCallContent>? functionCalls) 773/// <summary>Copies any <see cref="FunctionCallContent"/> from <paramref name="content"/> to <paramref name="functionCalls"/>.</summary> 775IList<AIContent> content, [NotNullWhen(true)] ref List<FunctionCallContent>? functionCalls) 781if (content[i] is FunctionCallContent functionCall) 820private bool ShouldTerminateLoopBasedOnHandleableFunctions(List<FunctionCallContent>? functionCalls, Dictionary<string, AITool>? toolMap) 838foreach (var fcc in functionCalls) 878Dictionary<string, AITool>? toolMap, List<FunctionCallContent> functionCallContents, int iteration, int consecutiveErrorCount, 1006Dictionary<string, AITool>? toolMap, List<FunctionCallContent> callContents, 1009var callContent = callContents[functionCallIndex]; 1201/// 2. Recreate <see cref="FunctionCallContent"/> for any <see cref="FunctionApprovalResponseContent"/> that haven't been executed yet. 1379/// Extracts the <see cref="FunctionCallContent"/> from the provided <see cref="FunctionApprovalResponseContent"/> to recreate the original function call messages. 1380/// The output messages tries to mimic the original messages that contained the <see cref="FunctionCallContent"/>, e.g. if the <see cref="FunctionCallContent"/> 1381/// had been split into separate messages, this method will recreate similarly split messages, each with their own <see cref="FunctionCallContent"/>. 1440/// Takes the <see cref="FunctionCallContent"/> from the <paramref name="resultWithRequestMessage"/> and wraps it in a <see cref="ChatMessage"/> 1441/// using the same message id that the <see cref="FunctionCallContent"/> was originally returned with from the downstream <see cref="IChatClient"/>. 1457List<FunctionCallContent>? functionCallContents, 1473var fcc = functionCallContents![lastApprovalCheckedFCCIndex]; 1489/// Replaces all <see cref="FunctionCallContent"/> with <see cref="FunctionApprovalRequestContent"/> and ouputs a new list if any of them were replaced. 1491/// <returns>true if any <see cref="FunctionCallContent"/> was replaced, false otherwise.</returns> 1500if (content[i] is FunctionCallContent fcc) 1512/// Replaces all <see cref="FunctionCallContent"/> from <paramref name="messages"/> with <see cref="FunctionApprovalRequestContent"/> 1531if (content[j] is FunctionCallContent functionCall) 1566var functionCall = (FunctionCallContent)message.Contents[contentIndex]; 1585/// Execute the provided <see cref="FunctionApprovalResponseContent"/> and return the resulting <see cref="FunctionCallContent"/> 1640internal FunctionInvocationResult(bool terminate, FunctionInvocationStatus status, FunctionCallContent callContent, object? result, Exception? exception) 1653public FunctionCallContent CallContent { get; }
ChatCompletion\OpenTelemetryChatClient.cs (1)
247case FunctionCallContent fcc:
ChatReduction\MessageCountingChatReducer.cs (1)
56else if (!message.Contents.Any(m => m is FunctionCallContent or FunctionResultContent))
ChatReduction\SummarizingChatReducer.cs (1)
108else if (!message.Contents.Any(m => m is FunctionCallContent or FunctionResultContent))
Microsoft.Extensions.AI.Abstractions (11)
Contents\AIContent.cs (1)
13[JsonDerivedType(typeof(FunctionCallContent), typeDiscriminator: "functionCall")]
Contents\FunctionApprovalRequestContent.cs (2)
24public FunctionApprovalRequestContent(string id, FunctionCallContent functionCall) 33public FunctionCallContent FunctionCall { get; }
Contents\FunctionApprovalResponseContent.cs (2)
25public FunctionApprovalResponseContent(string id, bool approved, FunctionCallContent functionCall) 40public FunctionCallContent FunctionCall { get; }
Contents\FunctionCallContent.cs (4)
20/// Initializes a new instance of the <see cref="FunctionCallContent"/> class. 60/// Creates a new instance of <see cref="FunctionCallContent"/> parsing arguments using a specified encoding and parser. 67/// <returns>A new instance of <see cref="FunctionCallContent"/> containing the parse result.</returns> 72public static FunctionCallContent CreateFromParsedArguments<TEncoding>(
Contents\FunctionResultContent.cs (2)
38/// If this is the result for a <see cref="FunctionCallContent"/>, this property should contain the same 39/// <see cref="FunctionCallContent.CallId"/> value.
Microsoft.Extensions.AI.Abstractions.Tests (26)
AssertExtensions.cs (3)
38if (expectedItem is FunctionCallContent expectedFunctionCall) 40var chatFunctionCall = (FunctionCallContent)chatItem;
ChatCompletion\ChatMessageTests.cs (2)
327var functionCallContent = deserializedMessage.Contents[4] as FunctionCallContent;
ChatCompletion\ChatResponseUpdateTests.cs (2)
148Assert.IsType<FunctionCallContent>(result.Contents[2]); 149Assert.Equal("fc1", ((FunctionCallContent)result.Contents[2]).Name);
Contents\FunctionApprovalRequestContentTests.cs (3)
14FunctionCallContent functionCall = new("FCC1", "TestFunction"); 29FunctionCallContent functionCall = new("FCC1", "TestFunction"); 43FunctionCallContent functionCall = new("FCC1", "TestFunction");
Contents\FunctionApprovalResponseContentTests.cs (2)
14FunctionCallContent functionCall = new("FCC1", "TestFunction"); 29FunctionCallContent functionCall = new("FCC1", "TestFunction");
Contents\FunctionCallContentTests.cs (14)
21FunctionCallContent c = new("callId1", "name"); 38FunctionCallContent c = new("id", "name", args); 51FunctionCallContent c = new("callId1", "name"); 81var sut = new FunctionCallContent("callId1", "functionName", new Dictionary<string, object?> { ["key"] = "value" }) { Exception = ex }; 85var deserializedSut = JsonSerializer.Deserialize<FunctionCallContent>(json, TestJsonSerializerContext.Default.Options); 261var content = FunctionCallContent.CreateFromParsedArguments( 306var content = FunctionCallContent.CreateFromParsedArguments(exc, "callId", "functionName", ThrowingParser); 320Assert.Throws<ArgumentNullException>("encodedArguments", () => FunctionCallContent.CreateFromParsedArguments((string)null!, "callId", "functionName", _ => null)); 321Assert.Throws<ArgumentNullException>("callId", () => FunctionCallContent.CreateFromParsedArguments("{}", null!, "functionName", _ => null)); 322Assert.Throws<ArgumentNullException>("name", () => FunctionCallContent.CreateFromParsedArguments("{}", "callId", null!, _ => null)); 323Assert.Throws<ArgumentNullException>("argumentParser", () => FunctionCallContent.CreateFromParsedArguments("{}", "callId", "functionName", null!));
Microsoft.Extensions.AI.AzureAIInference (5)
AzureAIInferenceChatClient.cs (5)
109FunctionCallContent callContent = ParseCallContentFromJsonString(ftc.Arguments, toolCall.Id, ftc.Name); 243FunctionCallContent callContent = ParseCallContentFromJsonString( 494if (content is FunctionCallContent { CallId: not null } callRequest) 558private static FunctionCallContent ParseCallContentFromJsonString(string json, string callId, string name) => 559FunctionCallContent.CreateFromParsedArguments(json, callId, name,
Microsoft.Extensions.AI.AzureAIInference.Tests (7)
AzureAIInferenceChatClientTests.cs (4)
1267FunctionCallContent fcc = Assert.IsType<FunctionCallContent>(response.Messages.Single().Contents[0]); 1358FunctionCallContent fcc = Assert.IsType<FunctionCallContent>(Assert.Single(updates[updates.Count - 1].Contents));
test\Libraries\Microsoft.Extensions.AI.Abstractions.Tests\AssertExtensions.cs (3)
38if (expectedItem is FunctionCallContent expectedFunctionCall) 40var chatFunctionCall = (FunctionCallContent)chatItem;
Microsoft.Extensions.AI.Evaluation.Quality (13)
ChatResponseExtensions.cs (3)
31if (content is FunctionCallContent or FunctionResultContent) 34content is FunctionCallContent ? typeof(FunctionCallContent) : typeof(FunctionResultContent);
IntentResolutionEvaluator.cs (2)
120IEnumerable<FunctionCallContent> toolCalls = 121modelResponse.Messages.SelectMany(m => m.Contents).OfType<FunctionCallContent>();
TaskAdherenceEvaluator.cs (2)
119IEnumerable<FunctionCallContent> toolCalls = 120modelResponse.Messages.SelectMany(m => m.Contents).OfType<FunctionCallContent>();
ToolCallAccuracyEvaluator.cs (4)
21/// (i.e., <see cref="FunctionCallContent"/>s) present in the supplied response to assess the relevance of these tool 99IEnumerable<FunctionCallContent> toolCalls = 100modelResponse.Messages.SelectMany(m => m.Contents).OfType<FunctionCallContent>(); 105EvaluationDiagnostic.Error($"The {nameof(modelResponse)} supplied for evaluation did not contain any tool calls (i.e., {nameof(FunctionCallContent)}s)."));
ToolCallAccuracyEvaluatorContext.cs (2)
17/// (i.e., <see cref="FunctionCallContent"/>s) present in the supplied response to assess the relevance of these tool 81/// (i.e., <see cref="FunctionCallContent"/>s) present in the supplied response to assess the relevance of these
Microsoft.Extensions.AI.Integration.Tests (1)
PromptBasedFunctionCallingChatClient.cs (1)
74else if (message.Contents[itemIndex] is FunctionCallContent fcc)
Microsoft.Extensions.AI.OpenAI (17)
MicrosoftExtensionsAIChatExtensions.cs (3)
61.OfType<FunctionCallContent>().Select(c => ChatToolCall.CreateFunctionToolCall(c.CallId, c.Name, 141var toolCallUpdates = update.Contents.OfType<FunctionCallContent>().Select((fcc, index) => 181var fcc = OpenAIClientExtensions.ParseCallContent(toolCall.FunctionArguments, toolCall.Id, toolCall.FunctionName);
OpenAIAssistantsChatClient.cs (1)
198var fcc = OpenAIClientExtensions.ParseCallContent(
OpenAIChatClient.cs (3)
172case FunctionCallContent fc: 403var callContent = OpenAIClientExtensions.ParseCallContent( 469var callContent = OpenAIClientExtensions.ParseCallContent(toolCall.FunctionArguments, toolCall.Id, toolCall.FunctionName);
OpenAIClientExtensions.cs (8)
196/// <summary>Creates a new instance of <see cref="FunctionCallContent"/> parsing arguments using a specified encoding and parser.</summary> 200/// <returns>A new instance of <see cref="FunctionCallContent"/> containing the parse result.</returns> 203internal static FunctionCallContent ParseCallContent(string json, string callId, string name) => 204FunctionCallContent.CreateFromParsedArguments(json, callId, name, 207/// <summary>Creates a new instance of <see cref="FunctionCallContent"/> parsing arguments using a specified encoding and parser.</summary> 211/// <returns>A new instance of <see cref="FunctionCallContent"/> containing the parse result.</returns> 214internal static FunctionCallContent ParseCallContent(BinaryData utf8json, string callId, string name) => 215FunctionCallContent.CreateFromParsedArguments(utf8json, callId, name,
OpenAIResponsesChatClient.cs (2)
157var fcc = OpenAIClientExtensions.ParseCallContent(functionCall.FunctionArguments, functionCall.CallId, functionCall.FunctionName); 633case FunctionCallContent callContent:
Microsoft.Extensions.AI.OpenAI.Tests (14)
OpenAIChatClientTests.cs (4)
1133FunctionCallContent fcc = Assert.IsType<FunctionCallContent>(response.Messages.Single().Contents[0]); 1312FunctionCallContent fcc = Assert.IsType<FunctionCallContent>(Assert.Single(updates[updates.Count - 1].Contents));
OpenAIConversionTests.cs (7)
234Assert.Equal("functionName", Assert.IsType<FunctionCallContent>(message.Contents[2], exactMatch: false).Name); 265Assert.Equal("functionName", Assert.IsType<FunctionCallContent>(message.Contents[2], exactMatch: false).Name); 377var functionCall = message.Contents.OfType<FunctionCallContent>().FirstOrDefault(); 652var functionCallContent = new FunctionCallContent("call-123", "GetWeather", new Dictionary<string, object?> 690var functionCall1 = new FunctionCallContent("call-1", "Function1", new Dictionary<string, object?> { ["param1"] = "value1" }); 691var functionCall2 = new FunctionCallContent("call-2", "Function2", new Dictionary<string, object?> { ["param2"] = "value2" });
test\Libraries\Microsoft.Extensions.AI.Abstractions.Tests\AssertExtensions.cs (3)
38if (expectedItem is FunctionCallContent expectedFunctionCall) 40var chatFunctionCall = (FunctionCallContent)chatItem;
Microsoft.Extensions.AI.Tests (22)
ChatCompletion\DistributedCachingChatClientTest.cs (8)
347c => Assert.IsType<FunctionCallContent>(c), 355c => Assert.IsType<FunctionCallContent>(Assert.Single(c.Contents)), 818if (expectedItem is FunctionCallContent expectedFcc) 820var actualFcc = (FunctionCallContent)actualItem; 852if (expectedItemItem is FunctionCallContent expectedFcc) 854var actualFcc = (FunctionCallContent)actualItemItem;
ChatCompletion\FunctionInvocationContextTests.cs (1)
55FunctionCallContent callContent = new(string.Empty, string.Empty, new Dictionary<string, object?>());
ChatCompletion\FunctionInvokingChatClientApprovalsTests.cs (2)
664var functionCall = update.Contents.OfType<FunctionCallContent>().First();
ChatCompletion\FunctionInvokingChatClientTests.cs (5)
569Assert.Contains(content, c => c is FunctionCallContent or FunctionResultContent); 767c => Assert.Equal("Input 1", Assert.IsType<FunctionCallContent>(c).Arguments!["text"]), 768c => Assert.Equal("Input 2", Assert.IsType<FunctionCallContent>(c).Arguments!["text"])), 808Assert.IsType<FunctionCallContent>(Assert.Single(response.Messages[0].Contents)); 810Assert.IsType<FunctionCallContent>(Assert.Single(response.Messages[2].Contents));
ChatReduction\MessageCountingChatReducerTests.cs (2)
143Assert.DoesNotContain(m.Contents, c => c is FunctionCallContent); 150Assert.DoesNotContain(m.Contents, c => c is FunctionCallContent);
ChatReduction\SummarizingChatReducerTests.cs (1)
106Assert.DoesNotContain(resultList, m => m.Contents.Any(c => c is FunctionCallContent));
test\Libraries\Microsoft.Extensions.AI.Abstractions.Tests\AssertExtensions.cs (3)
38if (expectedItem is FunctionCallContent expectedFunctionCall) 40var chatFunctionCall = (FunctionCallContent)chatItem;