Skip to content

.NET: [Bug]: Request processing fails when web search is enabled because of an unsupported web_search_options parameter #7578

Description

@meisterfranz

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    .NETUsage: [Issues, PRs], Target: .NetreproducedUsage: [Issues], Target: all issues that can be reproduced by the triage workflowtriageUsage: [Issues], Target: All issues that still need to be triaged

    Type

    Projects

    Status
    No status

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions