152 writes to Tools
Aspire.Dashboard (1)
Model\Assistant\AIHelpers.cs (1)
457Tools = tools
Microsoft.Extensions.AI (2)
ChatCompletion\ImageGeneratingChatClient.cs (1)
275newOptions.Tools = newTools;
ToolReduction\ToolReducingChatClient.cs (1)
86cloned.Tools = reducedList;
Microsoft.Extensions.AI.Abstractions (1)
ChatCompletion\ChatOptions.cs (1)
53Tools = [.. other.Tools];
Microsoft.Extensions.AI.Abstractions.Tests (2)
ChatCompletion\ChatOptionsTests.cs (2)
97options.Tools = tools; 176options.Tools =
Microsoft.Extensions.AI.AzureAIInference.Tests (6)
AzureAIInferenceChatClientTests.cs (6)
359Tools = [tool], 443Tools = [tool], 530Tools = [tool], 605Tools = [tool], 1251Tools = [AIFunctionFactory.Create(([Description("The person whose age is being requested")] string personName) => 42, "GetPersonAge", "Gets the age of the specified person.")], 1338Tools = [AIFunctionFactory.Create(([Description("The person whose age is being requested")] string personName) => 42, "GetPersonAge", "Gets the age of the specified person.")],
Microsoft.Extensions.AI.Evaluation.Integration.Tests (1)
AgentQualityEvaluatorTests.cs (1)
43Tools = [AIFunctionFactory.Create(GetOrders), AIFunctionFactory.Create(GetOrderStatus)]
Microsoft.Extensions.AI.Integration.Tests (54)
ChatClientIntegrationTests.cs (23)
246Tools = [AIFunctionFactory.Create(() => secretNumber, "GetSecretNumber")] 262Tools = [AIFunctionFactory.Create((int a, int b) => a * b, "SecretComputation")] 277Tools = [AIFunctionFactory.Create((int a, int b) => a * b, "SecretComputation")] 314Tools = [func] 346Tools = [func] 378Tools = [func] 456Tools = 584Tools = [AIFunctionFactory.Create((string personName) => 616Tools = [tool], 637Tools = [getSecretNumberTool, shieldsUpTool], 735.ConfigureOptions(options => options.Tools = [getTemperature]) 774.ConfigureOptions(options => options.Tools = [getTemperature]) 816.ConfigureOptions(options => options.Tools = [getTemperature]) 897new ChatOptions { Tools = [AIFunctionFactory.Create(() => secretNumber, "GetSecretNumber")] }); 923new ChatOptions { Tools = [AIFunctionFactory.Create(() => secretNumber, "GetSecretNumber")] })) 1077Tools = [AIFunctionFactory.Create((int personId) => 1255var response = await chatClient.GetResponseAsync(messages, new() { Tools = [getWeather] }); 1471var firstResponse = await client.GetResponseAsync(history, new ChatOptions { Tools = allTools }); 1480var secondResponse = await client.GetResponseAsync(history, new ChatOptions { Tools = allTools }); 1539Tools = tools, 1602Tools = [weatherTool], 1615Tools = [weatherTool] 1706var response = await client.GetResponseAsync(history, new ChatOptions { Tools = allTools });
ImageGeneratingChatClientIntegrationTests.cs (7)
124Tools = [new HostedImageGenerationTool()] 162Tools = [new HostedImageGenerationTool()] 191Tools = [new HostedImageGenerationTool()] 241Tools = [new HostedImageGenerationTool()] 286Tools = [new HostedImageGenerationTool()] 337Tools = [new HostedImageGenerationTool { Options = imageGenerationOptions }] 386new ChatOptions { Tools = [new HostedImageGenerationTool()] },
PromptBasedFunctionCallingChatClient.cs (1)
52options.Tools = null;
ToolReductionTests.cs (23)
29var options = new ChatOptions { Tools = tools }; 51new ChatOptions { Tools = tools }); 63var options = new ChatOptions { Tools = tools }; 89new ChatOptions { Tools = tools })).ToList(); 105_ = await strategy.SelectToolsForRequestAsync(messages, new ChatOptions { Tools = tools }); 108_ = await strategy.SelectToolsForRequestAsync(messages, new ChatOptions { Tools = tools }); 125var options = new ChatOptions { Tools = [] }; 146new ChatOptions { Tools = [highTool, lowTool] })).ToList(); 162new ChatOptions { Tools = tools })).ToList(); 179new ChatOptions { Tools = [target, filler] }); 194new ChatOptions { Tools = [target, filler] }); 212new ChatOptions { Tools = [target, filler] }); 236new ChatOptions { Tools = tools })).ToList(); 259new ChatOptions { Tools = tools }); 285_ = await strategy.SelectToolsForRequestAsync(messages, new ChatOptions { Tools = tools }); 316_ = await strategy.SelectToolsForRequestAsync(messages, new ChatOptions { Tools = tools }); 335new ChatOptions { Tools = tools })).ToList(); 354new ChatOptions { Tools = tools })).ToList(); 382new ChatOptions { Tools = tools }); 412new ChatOptions { Tools = tools })) 430var options = new ChatOptions { Tools = tools }; 454var options = new ChatOptions { Tools = tools }; 483var result = await strategy.SelectToolsForRequestAsync(messages, new ChatOptions { Tools = tools });
Microsoft.Extensions.AI.OllamaSharp.Integration.Tests (2)
OllamaSharpChatClientIntegrationTests.cs (2)
46Tools = [AIFunctionFactory.Create(() => secretNumber, "GetSecretNumber")], 80Tools = [stockPriceTool, irrelevantTool],
Microsoft.Extensions.AI.OpenAI.Tests (35)
OpenAIAssistantChatClientIntegrationTests.cs (1)
56Tools = [new HostedCodeInterpreterTool()],
OpenAIChatClientTests.cs (9)
332Tools = [AIFunctionFactory.Create(() => 42, "GetPersonAge", "Gets the age of the specified person.")], 411Tools = [tool], 488Tools = [tool], 569Tools = [tool], 643Tools = [tool], 729Tools = [AIFunctionFactory.Create((string name) => 42, "GetPersonAge")], 1141Tools = [AIFunctionFactory.Create(([Description("The person whose age is being requested")] string personName) => 42, "GetPersonAge", "Gets the age of the specified person.")], 1225Tools = [new HostedWebSearchTool()], 1325Tools = [AIFunctionFactory.Create(([Description("The person whose age is being requested")] string personName) => 42, "GetPersonAge", "Gets the age of the specified person.")],
OpenAIConversionTests.cs (2)
1508Tools = new List<AITool> { ResponseTool.CreateWebSearchTool() }, 1516Tools = [rawSearchTool.AsAITool()],
OpenAIResponseClientIntegrationTests.cs (13)
32Tools = [new HostedCodeInterpreterTool()], 76new() { Tools = [new HostedWebSearchTool()] }); 105Tools = [new HostedMcpServerTool("deepwiki", new Uri("https://mcp.deepwiki.com/mcp")) { ApprovalMode = HostedMcpServerToolApprovalMode.NeverRequire }], 127Tools = [new HostedMcpServerTool("deepwiki", new Uri("https://mcp.deepwiki.com/mcp")) 167Tools = [new HostedMcpServerTool("deepwiki", new Uri("https://mcp.deepwiki.com/mcp")) 262Tools = [AIFunctionFactory.Create(() => { callCount++; return "5:43"; }, new AIFunctionFactoryOptions { Name = "GetCurrentTime" })] 356Tools = [AIFunctionFactory.Create(() => { callCount++; return "5:43"; }, new AIFunctionFactoryOptions { Name = "GetCurrentTime" })] 389Tools = [new HostedMcpServerTool("calendar", "connector_googlecalendar") 436Tools = [AIFunctionFactory.Create((int a, int b) => new TextContent($"The sum is {a + b}"), "AddNumbers", "Adds two numbers together")] 456Tools = [AIFunctionFactory.Create((string city) => new List<AIContent> 484Tools = [AIFunctionFactory.Create(() => new DataContent(ImageDataUri.GetImageDataUri(), "image/png"), "GetDotnetLogo", "Returns the .NET logo image")] 509Tools = [AIFunctionFactory.Create(() => new DataContent(ImageDataUri.GetPdfDataUri(), "application/pdf") { Name = "document.pdf" }, "GetDocument", "Returns a PDF document")] 532Tools = [AIFunctionFactory.Create(() => new List<AIContent>
OpenAIResponseClientTests.cs (10)
662Tools = [AIFunctionFactory.Create(() => 42, "GetPersonAge", "Gets the age of the specified person.")], 832Tools = [tool], 1061Tools = [new HostedMcpServerTool("deepwiki", new Uri("https://mcp.deepwiki.com/mcp"))] 1446Tools = [mcpTool], 1855Tools = [new HostedMcpServerTool("deepwiki", new Uri("https://mcp.deepwiki.com/mcp")) 2477Tools = [new HostedCodeInterpreterTool()], 2697Tools = [new HostedCodeInterpreterTool()], 4841Tools = [imageTool] 4943Tools = [imageTool] 5062Tools = [imageTool]
Microsoft.Extensions.AI.Tests (48)
ChatCompletion\FunctionInvokingChatClientApprovalsTests.cs (15)
31Tools = useAdditionalTools ? null : tools 63Tools = 108Tools = 143Tools = 194Tools = 253Tools = 312Tools = 376Tools = 430Tools = 501Tools = 556Tools = 586Tools = 632Tools = 684Tools = 756Tools =
ChatCompletion\FunctionInvokingChatClientTests.cs (25)
82Tools = 113new() { Tools = [AIFunctionFactory.Create(() => "Shouldn't be invoked", "ChatOptionsFunc")] } : 146Tools = [AIFunctionFactory.Create(() => "Result 1", "Func1")] 181Tools = 232Tools = 279Tools = 318Tools = 369Tools = 411Tools = 492Tools = 541Tools = 580Tools = 618Tools = [AIFunctionFactory.Create(() => "Result 1", "Func1")] 675Tools = [AIFunctionFactory.Create(() => "Result 1", "Func1")] 740Tools = [AIFunctionFactory.Create((string text) => $"Result for {text}", "Func1")] 798Tools = [AIFunctionFactory.Create(() => "doesn't matter", "Func1")] 855Tools = [function], 946var chatOptions = new ChatOptions { Tools = [function] }; 967Tools = [AIFunctionFactory.Create(() => "Result 1", "Func1")], 1028Tools = [AIFunctionFactory.Create((IServiceProvider actual) => 1061Tools = [AIFunctionFactory.Create(async (string arg, CancellationToken cancellationToken) => 1089Tools = [AIFunctionFactory.Create((int i) => $"Known: {i}", "KnownFunc")] 1143ChatOptions options = new() { Tools = [declarationOnly] }; 1171Tools = [known, defOnly] 1224Tools = [AIFunctionFactory.Create(() => { }, "Func1")],
ChatCompletion\ImageGeneratingChatClientTests.cs (7)
48Tools = [AIFunctionFactory.Create(() => "dummy function", name: "DummyFunction")] 85Tools = [new HostedImageGenerationTool()] 133Tools = [dummyFunction, new HostedImageGenerationTool()] 237Tools = [new HostedImageGenerationTool()] 293Tools = [] 327Tools = [new HostedImageGenerationTool()] 368Tools = [new HostedImageGenerationTool()]
ChatCompletion\OpenTelemetryChatClientTests.cs (1)
133Tools =
85 references to Tools
Microsoft.Extensions.AI (17)
ChatCompletion\FunctionInvokingChatClient.cs (7)
30/// in <see cref="ChatOptions.Tools"/> (or in <see cref="AdditionalTools"/>), producing a <see cref="FunctionResultContent"/> 222/// <see cref="ChatOptions.Tools" /> unmodified. However, if the inner client requests the invocation of a tool 223/// that was not in <see cref="ChatOptions.Tools" />, this <see cref="AdditionalTools"/> collection will also be consulted 248/// <see cref="ChatOptions.Tools"/> or <see cref="AdditionalTools"/>) but that aren't <see cref="AIFunction"/>s aren't considered 287(Dictionary<string, AITool>? toolMap, bool anyToolsRequireApproval) = CreateToolsMap(AdditionalTools, options?.Tools); // all available tools, indexed by name 427(Dictionary<string, AITool>? toolMap, bool anyToolsRequireApproval) = CreateToolsMap(AdditionalTools, options?.Tools); // all available tools, indexed by name 526(options?.Tools ?? Enumerable.Empty<AITool>())
ChatCompletion\ImageGeneratingChatClient.cs (4)
23/// This client automatically detects <see cref="HostedImageGenerationTool"/> instances in the <see cref="ChatOptions.Tools"/> collection 246if (options?.Tools is null || options.Tools.Count == 0) 252var tools = options.Tools;
ChatCompletion\OpenTelemetryChatClient.cs (2)
452if (options.Tools is { Count: > 0 }) 456JsonSerializer.Serialize(options.Tools.Select(t => t switch
ToolReduction\EmbeddingToolReductionStrategy.cs (2)
158if (options?.Tools is not { Count: > 0 } tools) 163return options?.Tools ?? [];
ToolReduction\ToolReducingChatClient.cs (2)
65if (options?.Tools is not { Count: > 0 }) 73if (ReferenceEquals(reduced, options.Tools))
Microsoft.Extensions.AI.Abstractions (8)
ChatCompletion\ChatOptions.cs (3)
51if (other.Tools is not null) 53Tools = [.. other.Tools]; 229/// 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"/> 52/// but that any tool can be selected. At least one tool must be provided in <see cref="ChatOptions.Tools"/>.
ToolReduction\IToolReductionStrategy.cs (2)
20/// <see cref="ChatOptions.Tools"/> instance indicates no change. Returning a different enumerable indicates 35/// Returning the same instance referenced by <paramref name="options"/>.<see cref="ChatOptions.Tools"/> signals no change.
Microsoft.Extensions.AI.Abstractions.Tests (5)
ChatCompletion\ChatOptionsTests.cs (5)
31Assert.Null(options.Tools); 50Assert.Null(clone.Tools); 117Assert.Same(tools, options.Tools); 137Assert.Equal(tools, clone.Tools); 206Assert.Null(deserialized.Tools);
Microsoft.Extensions.AI.AzureAIInference (1)
AzureAIInferenceChatClient.cs (1)
334if (options.Tools is { Count: > 0 } tools)
Microsoft.Extensions.AI.Evaluation.Integration.Tests (5)
AgentQualityEvaluatorTests.cs (5)
120new TaskAdherenceEvaluatorContext(toolDefinitions: _chatOptionsWithTools.Tools!); 123new IntentResolutionEvaluatorContext(toolDefinitions: _chatOptionsWithTools.Tools!); 177new ToolCallAccuracyEvaluatorContext(toolDefinitions: _chatOptionsWithTools.Tools!); 180new TaskAdherenceEvaluatorContext(toolDefinitions: _chatOptionsWithTools.Tools!); 183new 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 (13)
ChatClientIntegrationTests.cs (8)
1454firstTurnTools = options?.Tools; 1458secondTurnTools ??= options?.Tools; 1527captured = options?.Tools; 1584firstTurnTools = options?.Tools; 1588secondTurnTools ??= options?.Tools; 1696selectedTools = options?.Tools; 1732if (!_used && options?.Tools is { Count: > 0 }) 1736return Task.FromResult<IEnumerable<AITool>>(options.Tools);
PromptBasedFunctionCallingChatClient.cs (2)
47if (options?.Tools is { Count: > 0 }) 49List<ChatMessage> chatMessagesList = [CreateToolPrompt(options.Tools), .. chatMessages.Select(m => m.Clone())];
ToolReductionTests.cs (3)
128Assert.Same(options.Tools, result); 373observedTools = options?.Tools; 403observedTools = options?.Tools;
Microsoft.Extensions.AI.OllamaSharp.Integration.Tests (1)
OllamaSharpChatClientIntegrationTests.cs (1)
112Assert.Null(options?.Tools);
Microsoft.Extensions.AI.OpenAI (3)
OpenAIAssistantsChatClient.cs (1)
359if (options.Tools is { Count: > 0 } tools)
OpenAIChatClient.cs (1)
581if (options.Tools is { Count: > 0 } tools)
OpenAIResponsesChatClient.cs (1)
715if (options.Tools is { Count: > 0 } tools)
Microsoft.Extensions.AI.OpenAI.Tests (7)
OpenAIConversionTests.cs (7)
1510Assert.Single(options.Tools); 1511Assert.NotNull(options.Tools[0]); 1518Assert.Single(options.Tools); 1519Assert.NotNull(options.Tools[0]); 1521Assert.Same(rawSearchTool, options.Tools[0].GetService<ResponseTool>()); 1522Assert.Same(rawSearchTool, options.Tools[0].GetService<WebSearchTool>()); 1523Assert.Null(options.Tools[0].GetService<ResponseTool>("key"));
Microsoft.Extensions.AI.Tests (16)
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);