210 writes to Tools
Microsoft.AspNetCore.Components.AI (1)
Engine\UIAgent.cs (1)
340chatOptions.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 (73)
OpenAIAssistantChatClientIntegrationTests.cs (1)
57Tools = [new HostedCodeInterpreterTool()],
OpenAIChatClientTests.cs (9)
334Tools = [AIFunctionFactory.Create(() => 42, "GetPersonAge", "Gets the age of the specified person.")], 413Tools = [tool], 490Tools = [tool], 571Tools = [tool], 645Tools = [tool], 731Tools = [AIFunctionFactory.Create((string name) => 42, "GetPersonAge")], 1143Tools = [AIFunctionFactory.Create(([Description("The person whose age is being requested")] string personName) => 42, "GetPersonAge", "Gets the age of the specified person.")], 1228Tools = [new HostedWebSearchTool()], 1328Tools = [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)
889Tools = [ResponseTool.CreateComputerTool(ComputerToolEnvironment.Browser, 1024, 768).AsAITool()], 984Tools = [ResponseTool.CreateComputerTool(ComputerToolEnvironment.Browser, 1024, 768).AsAITool()], 1090Tools = [AIFunctionFactory.Create(() => 42, "GetPersonAge", "Gets the age of the specified person.")], 1260Tools = [tool], 1487Tools = [new HostedMcpServerTool("deepwiki", new Uri("https://mcp.deepwiki.com/mcp"))] 1992Tools = [mcpTool], 2398Tools = [new HostedMcpServerTool("deepwiki", new Uri("https://mcp.deepwiki.com/mcp")) 2612Tools = [mcpTool], 2724var response = await client.GetResponseAsync("hello", new ChatOptions { Tools = [mcpTool] }); 2814var response = await client.GetResponseAsync("hello", new ChatOptions { Tools = [mcpTool] }); 3386Tools = [new HostedCodeInterpreterTool()], 3606Tools = [new HostedCodeInterpreterTool()], 3694Tools = [new HostedCodeInterpreterTool()], 6370Tools = [imageTool] 6471Tools = [imageTool] 6589Tools = [imageTool] 6847Tools = [new ApplyPatchTool().AsAITool()], 7129Tools = [new HostedWebSearchTool()], 7257Tools = [new HostedWebSearchTool()], 7366Tools = [new HostedToolSearchTool()], 7453Tools = 7545Tools = 7612Tools = 7722Tools = 7822Tools = 7927Tools = 8027Tools = 8114Tools = 8205Tools = 8291Tools = 8404Tools = 8503Tools = 8607Tools = 8720Tools = 8838new ChatOptions { Tools = [tool] }); 8932new ChatOptions { Tools = [tool] }))
Microsoft.Extensions.AI.Tests (103)
ChatCompletion\FunctionInvokingChatClientApprovalsTests.cs (33)
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 = 1460Tools = 1535Tools = 1634Tools = 1674Tools = 1731Tools = useAdditionalTools ? null : tools 1774Tools = useAdditionalTools ? null : tools 1858Tools = useAdditionalTools ? null : tools
ChatCompletion\FunctionInvokingChatClientTests.cs (60)
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 = [AIFunctionFactory.Create(() => "Result 1", "Func1")], 1460Tools = [AIFunctionFactory.Create((IServiceProvider actual) => 1493Tools = [AIFunctionFactory.Create(async (string arg, CancellationToken cancellationToken) => 1521Tools = [AIFunctionFactory.Create((int i) => $"Known: {i}", "KnownFunc")] 1575ChatOptions options = new() { Tools = [declarationOnly] }; 1603Tools = [known, defOnly] 1656Tools = [AIFunctionFactory.Create(() => { }, "Func1")], 1689Tools = [AIFunctionFactory.Create(() => "Result 1", "Func1")] 1754Tools = [AIFunctionFactory.Create(() => "Result 1", "Func1")] 1800Tools = [AIFunctionFactory.Create(() => "Result 1", "Func1")] 1842Tools = [AIFunctionFactory.Create(() => "Result 1", "Func1")] 1892Tools = [AIFunctionFactory.Create(() => "Result 1", "Func1")] 1964Tools = [AIFunctionFactory.Create(() => "Result 1", "Func1")] 2000Tools = [AIFunctionFactory.Create(() => "Result 1", "Func1")] 2029Tools = [AIFunctionFactory.Create(() => { functionInvokedCount++; return "Result 1"; }, "Func1")] 2077Tools = 2147Tools = [AIFunctionFactory.Create(() => { functionInvokedCount++; return "Result 1"; }, "Func1")] 2374Tools = [functionA] 2468Tools = [functionA, functionB] 2576Tools = [functionA, originalFunctionB] 2674Tools = [functionA] 2778Tools = [functionA] 2875Tools = [functionA] 2954Tools = [functionA, functionB] 3055Tools = [functionA] 3161Tools = [functionA, originalFunctionB] 3252Tools = [AIFunctionFactory.Create(() => "Result 1", "Func1")] 3282Tools = [declarationOnly] 3313Tools = [AIFunctionFactory.Create(() => 3347Tools = [approvalFunc] 3391var options = new ChatOptions { Tools = [approvalFunc] }; 3428var options = new ChatOptions { Tools = [approvalFunc] }; 3464Tools = [AIFunctionFactory.Create(() => { functionInvokedCount++; return "Result 1"; }, "Func1")] 3519Tools = 3595Tools = [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 =
100 references to Tools
Microsoft.AspNetCore.Components.AI (2)
Engine\UIAgent.cs (2)
331var tools = chatOptions.Tools is null 333: [.. 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 (5)
OpenAIAssistantsChatClient.cs (1)
360if (options.Tools is { Count: > 0 } tools)
OpenAIChatClient.cs (1)
633if (options.Tools is { Count: > 0 } tools)
OpenAIResponsesChatClient.cs (3)
733if ((toolSearchLookup ??= ToolSearchLookup.Create(options?.Tools)).IsDeferred(aiFunction.Name)) 855if ((toolSearchLookup ??= ToolSearchLookup.Create(options?.Tools)).IsDeferred(mcpTool.ServerName)) 1014if (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]); 2367context.Options!.Tools!.Add(functionB); 2461context.Options!.Tools!.Remove(functionB); 2563var tools = context.Options!.Tools!; 2667context.Options!.Tools!.Add(functionB); 2771context.Options!.Tools!.Add(addedToolSameName); 2947context.Options!.Tools!.Clear(); 3048context.Options!.Tools!.Add(functionB); 3151var 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);