Repository navigation
Labels
.NETUsage: [Issues, PRs], Target: .NetUsage: [Issues, PRs], Target: .NetagentsUsage: [Issues, PRs], Target: Single agentUsage: [Issues, PRs], Target: Single agentreproducedUsage: [Issues], Target: all issues that can be reproduced by the triage workflowUsage: [Issues], Target: all issues that can be reproduced by the triage workflow
Description
Description
When I enable the web search tool in my AI agent and send a message, the request processing immediately fails with an exception indicating that the web_search_options parameter is not recognized.
Code Sample
services.AddAIAgent(name: agentName, instructions: agentInstructions)
.WithAITool(new HostedWebSearchTool()) // enabling web search tool
.WithInMemorySessionStore(false)Error Messages / Stack Traces
fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]
An unhandled exception has occurred while executing the request.
System.ClientModel.ClientResultException: HTTP 400 (invalid_request_error: unknown_parameter)
Parameter: web_search_options
Unknown parameter: 'web_search_options'.
at OpenAI.ClientPipelineExtensions.ProcessMessageAsync(ClientPipeline pipeline, PipelineMessage message, RequestOptions options)
at OpenAI.Chat.ChatClient.CompleteChatAsync(BinaryContent content, RequestOptions options)
at OpenAI.Chat.ChatClient.<>c__DisplayClass20_0.<<CompleteChatStreamingAsync>b__0>d.MoveNext()
--- End of stack trace from previous location ---
at OpenAI.AsyncSseUpdateCollection`1.GetRawPagesAsync()+MoveNext()
at OpenAI.AsyncSseUpdateCollection`1.GetRawPagesAsync()+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
at System.ClientModel.AsyncCollectionResult`1.GetAsyncEnumerator(CancellationToken cancellationToken)+MoveNext()
at System.ClientModel.AsyncCollectionResult`1.GetAsyncEnumerator(CancellationToken cancellationToken)+MoveNext()
at System.ClientModel.AsyncCollectionResult`1.GetAsyncEnumerator(CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
at Microsoft.Extensions.AI.OpenAIChatClient.FromOpenAIStreamingChatCompletionAsync(IAsyncEnumerable`1 updates, ChatCompletionOptions options, CancellationToken cancellationToken)+MoveNext()
at Microsoft.Extensions.AI.OpenAIChatClient.FromOpenAIStreamingChatCompletionAsync(IAsyncEnumerable`1 updates, ChatCompletionOptions options, CancellationToken cancellationToken)+MoveNext()
at Microsoft.Extensions.AI.OpenAIChatClient.FromOpenAIStreamingChatCompletionAsync(IAsyncEnumerable`1 updates, ChatCompletionOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
at Microsoft.Extensions.AI.ConfigureOptionsChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext()
at Microsoft.Extensions.AI.ConfigureOptionsChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext()
at Microsoft.Extensions.AI.ConfigureOptionsChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
at Microsoft.Extensions.AI.FunctionInvokingChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext()
at Microsoft.Extensions.AI.FunctionInvokingChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext()
at Microsoft.Extensions.AI.FunctionInvokingChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
at Microsoft.Agents.AI.ApprovalNotRequiredFunctionBypassingChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext()
at Microsoft.Agents.AI.ApprovalNotRequiredFunctionBypassingChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext()
at Microsoft.Agents.AI.ApprovalNotRequiredFunctionBypassingChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
at Microsoft.Agents.AI.ApprovalResponseBindingChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext()
at Microsoft.Agents.AI.ApprovalResponseBindingChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+MoveNext()
at Microsoft.Agents.AI.ApprovalResponseBindingChatClient.GetStreamingResponseAsync(IEnumerable`1 messages, ChatOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
at Microsoft.Agents.AI.ChatClientAgent.RunCoreStreamingAsync(IEnumerable`1 messages, AgentSession session, AgentRunOptions options, CancellationToken cancellationToken)+MoveNext()
at Microsoft.Agents.AI.ChatClientAgent.RunCoreStreamingAsync(IEnumerable`1 messages, AgentSession session, AgentRunOptions options, CancellationToken cancellationToken)+MoveNext()
at Microsoft.Agents.AI.ChatClientAgent.RunCoreStreamingAsync(IEnumerable`1 messages, AgentSession session, AgentRunOptions options, CancellationToken cancellationToken)+MoveNext()
at Microsoft.Agents.AI.ChatClientAgent.RunCoreStreamingAsync(IEnumerable`1 messages, AgentSession session, AgentRunOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
at Microsoft.Agents.AI.AIAgent.RunStreamingAsync(IEnumerable`1 messages, AgentSession session, AgentRunOptions options, CancellationToken cancellationToken)+MoveNext()
at Microsoft.Agents.AI.AIAgent.RunStreamingAsync(IEnumerable`1 messages, AgentSession session, AgentRunOptions options, CancellationToken cancellationToken)+MoveNext()
at Microsoft.Agents.AI.AIAgent.RunStreamingAsync(IEnumerable`1 messages, AgentSession session, AgentRunOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
at Microsoft.Agents.AI.AIAgent.RunStreamingAsync(IEnumerable`1 messages, AgentSession session, AgentRunOptions options, CancellationToken cancellationToken)+MoveNext()
at Microsoft.Agents.AI.AIAgent.RunStreamingAsync(IEnumerable`1 messages, AgentSession session, AgentRunOptions options, CancellationToken cancellationToken)+MoveNext()
at Microsoft.Agents.AI.AIAgent.RunStreamingAsync(IEnumerable`1 messages, AgentSession session, AgentRunOptions options, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
at Microsoft.Agents.AI.AgentResponseExtensions.AsChatResponseUpdatesAsync(IAsyncEnumerable`1 responseUpdates)+MoveNext()
at Microsoft.Agents.AI.AgentResponseExtensions.AsChatResponseUpdatesAsync(IAsyncEnumerable`1 responseUpdates)+MoveNext()
at Microsoft.Agents.AI.AgentResponseExtensions.AsChatResponseUpdatesAsync(IAsyncEnumerable`1 responseUpdates)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
at AGUI.Server.ChatResponseUpdateAGUIExtensions.CoreAsync(IAsyncEnumerable`1 updates, ChatRequestContext context, CancellationToken cancellationToken)+MoveNext()
at AGUI.Server.ChatResponseUpdateAGUIExtensions.CoreAsync(IAsyncEnumerable`1 updates, ChatRequestContext context, CancellationToken cancellationToken)+MoveNext()
at AGUI.Server.ChatResponseUpdateAGUIExtensions.CoreAsync(IAsyncEnumerable`1 updates, ChatRequestContext context, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
at Microsoft.Agents.AI.Hosting.AGUI.AspNetCore.AGUIEndpointRouteBuilderExtensions.SaveSessionAfterStreamingAsync(IAsyncEnumerable`1 events, AIHostAgent hostAgent, String threadId, AgentSession session, CancellationToken cancellationToken)+MoveNext()
at Microsoft.Agents.AI.Hosting.AGUI.AspNetCore.AGUIEndpointRouteBuilderExtensions.SaveSessionAfterStreamingAsync(IAsyncEnumerable`1 events, AIHostAgent hostAgent, String threadId, AgentSession session, CancellationToken cancellationToken)+MoveNext()
at Microsoft.Agents.AI.Hosting.AGUI.AspNetCore.AGUIEndpointRouteBuilderExtensions.SaveSessionAfterStreamingAsync(IAsyncEnumerable`1 events, AIHostAgent hostAgent, String threadId, AgentSession session, CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
at Microsoft.AspNetCore.Http.HttpResults.ServerSentEventsResult`1.WrapEvents(IAsyncEnumerable`1 events, String eventType)+MoveNext()
at Microsoft.AspNetCore.Http.HttpResults.ServerSentEventsResult`1.WrapEvents(IAsyncEnumerable`1 events, String eventType)+MoveNext()
at System.Net.ServerSentEvents.SseFormatter.WriteAsyncCore[T](IAsyncEnumerable`1 source, Stream destination, Action`2 itemFormatter, CancellationToken cancellationToken)
at System.Net.ServerSentEvents.SseFormatter.WriteAsyncCore[T](IAsyncEnumerable`1 source, Stream destination, Action`2 itemFormatter, CancellationToken cancellationToken)
at Microsoft.AspNetCore.Http.HttpResults.ServerSentEventsResult`1.ExecuteAsync(HttpContext httpContext)
at Microsoft.AspNetCore.Http.Generated.<GeneratedRouteBuilderExtensions_g>FL87DEE35F409427C0994BF3A8D11207C7ZAB7E4167B350548AEB07B262E3F58E__GeneratedRouteBuilderExtensionsCore.<>c__DisplayClass2_0.<<MapPost0>g__RequestHandler|5>d.MoveNext()Package Versions
Microsoft.Agents.AI.Hosting 1.17.0-preview.260804.1, Microsoft.Agents.AI.Hosting.AGUI.AspNetCore 1.17.0-preview.260804.1, Microsoft.Agents.AI.Hosting.OpenAI 1.17.0-alpha.260804.1
.NET Version
.NET 10
Additional Context
No response
Reacted by Copilot
Metadata
Metadata
Assignees
Labels
.NETUsage: [Issues, PRs], Target: .NetUsage: [Issues, PRs], Target: .NetagentsUsage: [Issues, PRs], Target: Single agentUsage: [Issues, PRs], Target: Single agentreproducedUsage: [Issues], Target: all issues that can be reproduced by the triage workflowUsage: [Issues], Target: all issues that can be reproduced by the triage workflow
Type
Projects
- StatusShow more project fieldsDone
Activity
github-actions commentedon Aug 9, 2026
🤖 Automated triage reproduction notes (agent-authored — trust but verify)
Agent analysis
Repro: ChatClientAgentRunOptionsConverter.ToRequestInfo() in dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/ChatCompletions/Converters/ChatClientAgentRunOptionsConverter.cs (line 19-32) does not include WebSearchOptions from CreateChatCompletion when building the OpenAIChatCompletionRequestInfo. When HostedWebSearchTool is added via WithAITool() or HarnessAgent defaults (HarnessAgent.cs:281), it flows unchanged to M.E.AI's OpenAIChatClient which serializes it as web_search_options — rejected by endpoints that don't support it. Minimal repro: create a ChatClientAgent with HostedWebSearchTool in ChatOptions.Tools and invoke it against any non-search OpenAI model endpoint.
none1.17.0-preview.260804.1meisterfranz commentedon Sep 30, 2026
Hi Roger Barreto (@rogerbarreto), I’m using the latest version, 1.23.0, but the issue still hasn’t been fixed.
Unknown parameter: 'web_search_options'.