215 writes to Tools
Microsoft.AspNetCore.Components.AI (1)
Engine\UIAgent.cs (1)
345chatOptions.Tools = tools;
Microsoft.Extensions.AI (2)
ChatCompletion\FunctionInvokingChatClient.cs (1)
1078options.Tools = remainingTools;
ChatCompletion\ImageGeneratingChatClient.cs (1)
276newOptions.Tools = newTools;
Microsoft.Extensions.AI.Abstractions (1)
ChatCompletion\ChatOptions.cs (1)
53Tools = [.. other.Tools];
Microsoft.Extensions.AI.Abstractions.Tests (2)
ChatCompletion\ChatOptionsTests.cs (2)
100options.Tools = tools; 187options.Tools =
Microsoft.Extensions.AI.Evaluation.Integration.Tests (1)
AgentQualityEvaluatorTests.cs (1)
42Tools = [AIFunctionFactory.Create(GetOrders), AIFunctionFactory.Create(GetOrderStatus)]
Microsoft.Extensions.AI.Integration.Tests (25)
ChatClientIntegrationTests.cs (17)
236Tools = [AIFunctionFactory.Create(() => secretNumber, "GetSecretNumber")] 252Tools = [AIFunctionFactory.Create((int a, int b) => a * b, "SecretComputation")] 267Tools = [AIFunctionFactory.Create((int a, int b) => a * b, "SecretComputation")] 304Tools = [func] 336Tools = [func] 368Tools = [func] 446Tools = 575Tools = [AIFunctionFactory.Create((string personName) => 607Tools = [tool], 628Tools = [getSecretNumberTool, shieldsUpTool], 726.ConfigureOptions(options => options.Tools = [getTemperature]) 765.ConfigureOptions(options => options.Tools = [getTemperature]) 807.ConfigureOptions(options => options.Tools = [getTemperature]) 888new ChatOptions { Tools = [AIFunctionFactory.Create(() => secretNumber, "GetSecretNumber")] }); 914new ChatOptions { Tools = [AIFunctionFactory.Create(() => secretNumber, "GetSecretNumber")] })) 1068Tools = [AIFunctionFactory.Create((int personId) => 1247var response = await chatClient.GetResponseAsync(messages, new() { Tools = [getWeather] });
ImageGeneratingChatClientIntegrationTests.cs (7)
123Tools = [new HostedImageGenerationTool()] 161Tools = [new HostedImageGenerationTool()] 190Tools = [new HostedImageGenerationTool()] 240Tools = [new HostedImageGenerationTool()] 285Tools = [new HostedImageGenerationTool()] 336Tools = [new HostedImageGenerationTool { Options = imageGenerationOptions }] 385new ChatOptions { Tools = [new HostedImageGenerationTool()] },
PromptBasedFunctionCallingChatClient.cs (1)
52options.Tools = null;
Microsoft.Extensions.AI.OllamaSharp.Integration.Tests (2)
OllamaSharpChatClientIntegrationTests.cs (2)
47Tools = [AIFunctionFactory.Create(() => secretNumber, "GetSecretNumber")], 81Tools = [stockPriceTool, irrelevantTool],
Microsoft.Extensions.AI.OpenAI.Tests (72)
OpenAIChatClientTests.cs (9)
366Tools = [AIFunctionFactory.Create(() => 42, "GetPersonAge", "Gets the age of the specified person.")], 445Tools = [tool], 522Tools = [tool], 603Tools = [tool], 677Tools = [tool], 763Tools = [AIFunctionFactory.Create((string name) => 42, "GetPersonAge")], 1175Tools = [AIFunctionFactory.Create(([Description("The person whose age is being requested")] string personName) => 42, "GetPersonAge", "Gets the age of the specified person.")], 1260Tools = [new HostedWebSearchTool()], 1360Tools = [AIFunctionFactory.Create(([Description("The person whose age is being requested")] string personName) => 42, "GetPersonAge", "Gets the age of the specified person.")],
OpenAIConversionTests.cs (2)
2241Tools = new List<AITool> { ResponseTool.CreateWebSearchTool() }, 2249Tools = [rawSearchTool.AsAITool()],
OpenAIHostedFileClientIntegrationTests.cs (4)
279new ChatOptions { Tools = [new HostedCodeInterpreterTool()] }); 349new ChatOptions { Tools = [new HostedCodeInterpreterTool()] }); 398new ChatOptions { Tools = [new HostedCodeInterpreterTool()] }); 429Tools = [new HostedCodeInterpreterTool()],
OpenAIResponseClientIntegrationTests.cs (21)
40Tools = [new HostedCodeInterpreterTool()], 86Tools = [new HostedWebSearchTool()], 147Tools = 193Tools = [new HostedMcpServerTool("deepwiki", new Uri("https://mcp.deepwiki.com/mcp")) { ApprovalMode = HostedMcpServerToolApprovalMode.NeverRequire }], 215Tools = [new HostedMcpServerTool("deepwiki", new Uri("https://mcp.deepwiki.com/mcp")) 255Tools = [new HostedMcpServerTool("deepwiki", new Uri("https://mcp.deepwiki.com/mcp")) 324Tools = 391Tools = [AIFunctionFactory.Create(() => { callCount++; return "5:43"; }, new AIFunctionFactoryOptions { Name = "GetCurrentTime" })] 485Tools = [AIFunctionFactory.Create(() => { callCount++; return "5:43"; }, new AIFunctionFactoryOptions { Name = "GetCurrentTime" })] 519Tools = [new HostedMcpServerTool("calendar", "connector_googlecalendar") 567Tools = [AIFunctionFactory.Create((int a, int b) => new TextContent($"The sum is {a + b}"), "AddNumbers", "Adds two numbers together")] 587Tools = [AIFunctionFactory.Create((string city) => new List<AIContent> 615Tools = [AIFunctionFactory.Create(() => new DataContent(ImageDataUri.GetImageDataUri(), "image/png"), "GetDotnetLogo", "Returns the .NET logo image")] 640Tools = [AIFunctionFactory.Create(() => new DataContent(ImageDataUri.GetPdfDataUri(), "application/pdf") { Name = "document.pdf" }, "GetDocument", "Returns a PDF document")] 663Tools = [AIFunctionFactory.Create(() => new List<AIContent> 866Tools = 901Tools = [new HostedToolSearchTool()], 921Tools = 948Tools = 970Tools = 1013Tools =
OpenAIResponseClientTests.cs (36)
995Tools = [ResponseTool.CreateComputerTool(ComputerToolEnvironment.Browser, 1024, 768).AsAITool()], 1090Tools = [ResponseTool.CreateComputerTool(ComputerToolEnvironment.Browser, 1024, 768).AsAITool()], 1196Tools = [AIFunctionFactory.Create(() => 42, "GetPersonAge", "Gets the age of the specified person.")], 1366Tools = [tool], 1593Tools = [new HostedMcpServerTool("deepwiki", new Uri("https://mcp.deepwiki.com/mcp"))] 2098Tools = [mcpTool], 2504Tools = [new HostedMcpServerTool("deepwiki", new Uri("https://mcp.deepwiki.com/mcp")) 2718Tools = [mcpTool], 2830var response = await client.GetResponseAsync("hello", new ChatOptions { Tools = [mcpTool] }); 2920var response = await client.GetResponseAsync("hello", new ChatOptions { Tools = [mcpTool] }); 3492Tools = [new HostedCodeInterpreterTool()], 3712Tools = [new HostedCodeInterpreterTool()], 3800Tools = [new HostedCodeInterpreterTool()], 6521Tools = [imageTool] 6622Tools = [imageTool] 6740Tools = [imageTool] 6998Tools = [new ApplyPatchTool().AsAITool()], 7280Tools = [new HostedWebSearchTool()], 7408Tools = [new HostedWebSearchTool()], 7517Tools = [new HostedToolSearchTool()], 7604Tools = 7696Tools = 7763Tools = 7873Tools = 7973Tools = 8078Tools = 8178Tools = 8265Tools = 8356Tools = 8442Tools = 8555Tools = 8654Tools = 8758Tools = 8871Tools = 8989new ChatOptions { Tools = [tool] }); 9083new ChatOptions { Tools = [tool] }))
Microsoft.Extensions.AI.Tests (109)
ChatCompletion\FunctionInvokingChatClientApprovalsTests.cs (34)
31Tools = useAdditionalTools ? null : tools 63Tools = 111Tools = 165var options = new ChatOptions { Tools = tools }; 206Tools = 247Tools = 298Tools = 351Tools = 410Tools = 469Tools = 533Tools = 598Tools = 692Tools = 749Tools = 803Tools = 883Tools = 955Tools = 1019Tools = 1074Tools = 1104Tools = 1150Tools = 1198Tools = [new ApprovalRequiredAIFunction(AIFunctionFactory.Create(() => "Result 1", "Func1"))], 1248Tools = [new ApprovalRequiredAIFunction(AIFunctionFactory.Create(() => "Result 1", "Func1"))], 1294Tools = [new ApprovalRequiredAIFunction(AIFunctionFactory.Create(() => "Result 1", "Func1"))], 1349Tools = [new ApprovalRequiredAIFunction(AIFunctionFactory.Create(() => "Result 1", "Func1"))], 1400Tools = 1457Tools = 1517Tools = 1592Tools = 1691Tools = 1731Tools = 1788Tools = useAdditionalTools ? null : tools 1831Tools = useAdditionalTools ? null : tools 1915Tools = useAdditionalTools ? null : tools
ChatCompletion\FunctionInvokingChatClientTests.cs (65)
83Tools = 114new() { Tools = [AIFunctionFactory.Create(() => "Shouldn't be invoked", "ChatOptionsFunc")] } : 147Tools = [AIFunctionFactory.Create(() => "Result 1", "Func1")] 182Tools = 233Tools = 280Tools = 319Tools = 366Tools = 447Tools = 528Tools = 628Tools = 680Tools = [AIFunctionFactory.Create(() => "Result", "Func1")], 724Tools = [AIFunctionFactory.Create(() => "Result", "Func1")], 777Tools = [AIFunctionFactory.Create(() => "Result", "Func1"), hostedTool], 817Tools = [originalTool], 843Tools = 924Tools = 973Tools = 1012Tools = 1050Tools = [AIFunctionFactory.Create(() => "Result 1", "Func1")] 1107Tools = [AIFunctionFactory.Create(() => "Result 1", "Func1")] 1172Tools = [AIFunctionFactory.Create((string text) => $"Result for {text}", "Func1")] 1230Tools = [AIFunctionFactory.Create(() => "doesn't matter", "Func1")] 1287Tools = [function], 1378var chatOptions = new ChatOptions { Tools = [function] }; 1399Tools = 1434Tools = 1476Tools = 1519Tools = 1552Tools = [AIFunctionFactory.Create(() => "Result 1", "Func1")], 1613Tools = [AIFunctionFactory.Create((IServiceProvider actual) => 1646Tools = [AIFunctionFactory.Create(async (string arg, CancellationToken cancellationToken) => 1674Tools = [AIFunctionFactory.Create((int i) => $"Known: {i}", "KnownFunc")] 1728ChatOptions options = new() { Tools = [declarationOnly] }; 1756Tools = [known, defOnly] 1809Tools = [AIFunctionFactory.Create(() => { }, "Func1")], 1842Tools = [AIFunctionFactory.Create(() => "Result 1", "Func1")] 1907Tools = [AIFunctionFactory.Create(() => "Result 1", "Func1")] 1953Tools = [AIFunctionFactory.Create(() => "Result 1", "Func1")] 1995Tools = [AIFunctionFactory.Create(() => "Result 1", "Func1")] 2045Tools = [AIFunctionFactory.Create(() => "Result 1", "Func1")] 2117Tools = [AIFunctionFactory.Create(() => "Result 1", "Func1")] 2153Tools = [AIFunctionFactory.Create(() => "Result 1", "Func1")] 2182Tools = [AIFunctionFactory.Create(() => { functionInvokedCount++; return "Result 1"; }, "Func1")] 2230Tools = 2300Tools = [AIFunctionFactory.Create(() => { functionInvokedCount++; return "Result 1"; }, "Func1")] 2527Tools = [functionA] 2621Tools = [functionA, functionB] 2729Tools = [functionA, originalFunctionB] 2827Tools = [functionA] 2931Tools = [functionA] 3028Tools = [functionA] 3107Tools = [functionA, functionB] 3208Tools = [functionA] 3314Tools = [functionA, originalFunctionB] 3405Tools = [AIFunctionFactory.Create(() => "Result 1", "Func1")] 3435Tools = [declarationOnly] 3466Tools = [AIFunctionFactory.Create(() => 3499Tools = [AIFunctionFactory.Create(string () => 3532Tools = [approvalFunc] 3576var options = new ChatOptions { Tools = [approvalFunc] }; 3613var options = new ChatOptions { Tools = [approvalFunc] }; 3649Tools = [AIFunctionFactory.Create(() => { functionInvokedCount++; return "Result 1"; }, "Func1")] 3704Tools = 3780Tools = [AIFunctionFactory.Create(() => { functionInvokedCount++; return "Local Result"; }, "Func1")]
ChatCompletion\ImageGeneratingChatClientTests.cs (9)
48Tools = [AIFunctionFactory.Create(() => "dummy function", name: "DummyFunction")] 85Tools = [new HostedImageGenerationTool()] 133Tools = [dummyFunction, new HostedImageGenerationTool()] 237Tools = [new HostedImageGenerationTool()] 293Tools = [] 327Tools = [new HostedImageGenerationTool()] 368Tools = [new HostedImageGenerationTool()] 422Tools = [new HostedImageGenerationTool()] 496Tools = [new HostedImageGenerationTool()]
ChatCompletion\OpenTelemetryChatClientTests.cs (1)
140Tools =
99 references to Tools
Microsoft.AspNetCore.Components.AI (2)
Engine\UIAgent.cs (2)
336var tools = chatOptions.Tools is null 338: [.. chatOptions.Tools];
Microsoft.Extensions.AI (20)
ChatCompletion\FunctionInvokingChatClient.cs (14)
32/// in <see cref="ChatOptions.Tools"/> (or in <see cref="AdditionalTools"/>), producing a <see cref="FunctionResultContent"/> 234/// <see cref="ChatOptions.Tools" /> unmodified. However, if the inner client requests the invocation of a tool 235/// that was not in <see cref="ChatOptions.Tools" />, this <see cref="AdditionalTools"/> collection will also be consulted 260/// <see cref="ChatOptions.Tools"/> or <see cref="AdditionalTools"/>) but that aren't <see cref="AIFunction"/>s aren't considered 356anyToolsRequireApproval = AnyToolsRequireApproval(options?.Tools, AdditionalTools); 360(options?.Tools ?? Enumerable.Empty<AITool>()) 535anyToolsRequireApproval = AnyToolsRequireApproval(options?.Tools, AdditionalTools); 582(options?.Tools ?? Enumerable.Empty<AITool>()) 1057if (options?.Tools is not { Count: > 0 }) 1064foreach (var tool in options.Tools) 1075if (remainingCount < options.Tools.Count) 1099if (!HasAnyTools(options?.Tools, AdditionalTools)) 1120AIFunctionDeclaration? tool = FindTool(fcc.Name, options?.Tools, AdditionalTools); 1176name => FindTool(name, options?.Tools, AdditionalTools),
ChatCompletion\ImageGeneratingChatClient.cs (4)
24/// This client automatically detects <see cref="HostedImageGenerationTool"/> instances in the <see cref="ChatOptions.Tools"/> collection 247if (options?.Tools is null || options.Tools.Count == 0) 253var tools = options.Tools;
ChatCompletion\OpenTelemetryChatClient.cs (2)
369if (options.Tools is { Count: > 0 }) 373JsonSerializer.Serialize(options.Tools.Select(t => OtelFunction.Create(t, includeOptionalProperties: EnableSensitiveData)), OtelContext.Default.IEnumerableOtelFunction));
Microsoft.Extensions.AI.Abstractions (6)
ChatCompletion\ChatOptions.cs (3)
51if (other.Tools is not null) 53Tools = [.. other.Tools]; 230/// The clone will have the same values for all properties as the original instance. Any collections, like <see cref="Tools"/>,
ChatCompletion\ChatToolMode.cs (3)
33/// <see cref="ChatOptions.Tools"/> can contain zero or more <see cref="AITool"/> 42/// <see cref="ChatOptions.Tools"/> can contain zero or more <see cref="AITool"/> 55/// At least one tool must be provided in <see cref="ChatOptions.Tools"/>.
Microsoft.Extensions.AI.Abstractions.Tests (5)
ChatCompletion\ChatOptionsTests.cs (5)
32Assert.Null(options.Tools); 52Assert.Null(clone.Tools); 123Assert.Same(tools, options.Tools); 147Assert.Equal(tools, clone.Tools); 220Assert.Null(deserialized.Tools);
Microsoft.Extensions.AI.Evaluation.Integration.Tests (5)
AgentQualityEvaluatorTests.cs (5)
119new TaskAdherenceEvaluatorContext(toolDefinitions: _chatOptionsWithTools.Tools!); 122new IntentResolutionEvaluatorContext(toolDefinitions: _chatOptionsWithTools.Tools!); 176new ToolCallAccuracyEvaluatorContext(toolDefinitions: _chatOptionsWithTools.Tools!); 179new TaskAdherenceEvaluatorContext(toolDefinitions: _chatOptionsWithTools.Tools!); 182new IntentResolutionEvaluatorContext(toolDefinitions: _chatOptionsWithTools.Tools!);
Microsoft.Extensions.AI.Evaluation.Quality (9)
IntentResolutionEvaluatorContext.cs (3)
34/// The set of tool definitions (see <see cref="ChatOptions.Tools"/>) that were used when generating the model 53/// The set of tool definitions (see <see cref="ChatOptions.Tools"/>) that were used when generating the model 73/// Gets set of tool definitions (see <see cref="ChatOptions.Tools"/>) that were used when generating the model
TaskAdherenceEvaluatorContext.cs (3)
35/// The set of tool definitions (see <see cref="ChatOptions.Tools"/>) that were used when generating the model 54/// The set of tool definitions (see <see cref="ChatOptions.Tools"/>) that were used when generating the model 74/// Gets set of tool definitions (see <see cref="ChatOptions.Tools"/>) that were used when generating the model
ToolCallAccuracyEvaluatorContext.cs (3)
36/// The set of tool definitions (see <see cref="ChatOptions.Tools"/>) that were used when generating the model 55/// The set of tool definitions (see <see cref="ChatOptions.Tools"/>) that were used when generating the model 75/// Gets set of tool definitions (see <see cref="ChatOptions.Tools"/>) that were used when generating the model
Microsoft.Extensions.AI.Integration.Tests (2)
PromptBasedFunctionCallingChatClient.cs (2)
47if (options?.Tools is { Count: > 0 }) 49List<ChatMessage> chatMessagesList = [CreateToolPrompt(options.Tools), .. chatMessages.Select(m => m.Clone())];
Microsoft.Extensions.AI.OllamaSharp.Integration.Tests (1)
OllamaSharpChatClientIntegrationTests.cs (1)
113Assert.Null(options?.Tools);
Microsoft.Extensions.AI.OpenAI (4)
OpenAIChatClient.cs (1)
636if (options.Tools is { Count: > 0 } tools)
OpenAIResponsesChatClient.cs (3)
733if ((toolSearchLookup ??= ToolSearchLookup.Create(options?.Tools)).IsDeferred(aiFunction.Name)) 858if ((toolSearchLookup ??= ToolSearchLookup.Create(options?.Tools)).IsDeferred(mcpTool.ServerName)) 1017if (options.Tools is { Count: > 0 } tools)
Microsoft.Extensions.AI.OpenAI.Tests (7)
OpenAIConversionTests.cs (7)
2243Assert.Single(options.Tools); 2244Assert.NotNull(options.Tools[0]); 2251Assert.Single(options.Tools); 2252Assert.NotNull(options.Tools[0]); 2254Assert.Same(rawSearchTool, options.Tools[0].GetService<ResponseTool>()); 2255Assert.Same(rawSearchTool, options.Tools[0].GetService<WebSearchTool>()); 2256Assert.Null(options.Tools[0].GetService<ResponseTool>("key"));
Microsoft.Extensions.AI.Tests (38)
ChatCompletion\FunctionInvokingChatClientTests.cs (22)
690Assert.NotNull(capturedOptions[i]?.Tools); 691Assert.Single(capturedOptions[i]!.Tools!); 696Assert.Null(lastOptions!.Tools); 734Assert.NotNull(capturedOptions[i]?.Tools); 735Assert.Single(capturedOptions[i]!.Tools!); 740Assert.Null(lastOptions!.Tools); 784Assert.NotNull(capturedOptions[0]?.Tools); 785Assert.Equal(2, capturedOptions[0]!.Tools!.Count); 787Assert.NotNull(capturedOptions[1]?.Tools); 788Assert.Single(capturedOptions[1]!.Tools!); 789Assert.IsType<HostedWebSearchTool>(capturedOptions[1]!.Tools![0]); 823Assert.NotNull(originalOptions.Tools); 824Assert.Single(originalOptions.Tools); 825Assert.Same(originalTool, originalOptions.Tools[0]); 2520context.Options!.Tools!.Add(functionB); 2614context.Options!.Tools!.Remove(functionB); 2716var tools = context.Options!.Tools!; 2820context.Options!.Tools!.Add(functionB); 2924context.Options!.Tools!.Add(addedToolSameName); 3100context.Options!.Tools!.Clear(); 3201context.Options!.Tools!.Add(functionB); 3304var tools = context.Options!.Tools!;
ChatCompletion\ImageGeneratingChatClientTests.cs (16)
59Assert.Single(chatOptions.Tools); 60Assert.IsAssignableFrom<AIFunction>(chatOptions.Tools[0]); 94Assert.NotNull(capturedOptions.Tools); 95Assert.Equal(3, capturedOptions.Tools.Count); 98var generateImageFunction = capturedOptions.Tools[0] as AIFunction; 99var editImageFunction = capturedOptions.Tools[1] as AIFunction; 100var getImagesForEditImageFunction = capturedOptions.Tools[2] as AIFunction; 142Assert.NotNull(capturedOptions.Tools); 143Assert.Equal(4, capturedOptions.Tools.Count); // DummyFunction + GenerateImage + EditImage + GetImagesForEdit 145Assert.Same(dummyFunction, capturedOptions.Tools[0]); // Original function preserved 146Assert.IsAssignableFrom<AIFunction>(capturedOptions.Tools[1]); // GenerateImage function 147Assert.IsAssignableFrom<AIFunction>(capturedOptions.Tools[2]); // EditImage function 249Assert.NotNull(capturedOptions.Tools); 250Assert.Equal(3, capturedOptions.Tools.Count); 302Assert.NotNull(capturedOptions?.Tools); 304Assert.Empty(capturedOptions.Tools);