diff --git a/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/AIAgentResponseExecutor.cs b/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/AIAgentResponseExecutor.cs index 18863034bf..8b909651b9 100644 --- a/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/AIAgentResponseExecutor.cs +++ b/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/AIAgentResponseExecutor.cs @@ -24,6 +24,10 @@ public AIAgentResponseExecutor(AIAgent agent) this._agent = agent; } + public ValueTask ValidateRequestAsync( + CreateResponse request, + CancellationToken cancellationToken = default) => ValueTask.FromResult(null); + public async IAsyncEnumerable ExecuteAsync( AgentInvocationContext context, CreateResponse request, diff --git a/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/AgentRunResponseExtensions.cs b/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/AgentRunResponseExtensions.cs index fedaeae1f4..97dcf9740f 100644 --- a/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/AgentRunResponseExtensions.cs +++ b/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/AgentRunResponseExtensions.cs @@ -56,7 +56,7 @@ public static Response ToResponse( MaxOutputTokens = request.MaxOutputTokens, MaxToolCalls = request.MaxToolCalls, Metadata = request.Metadata is IReadOnlyDictionary metadata ? new Dictionary(metadata) : [], - Model = request.Agent?.Name ?? request.Model, + Model = request.Model, Output = output, ParallelToolCalls = request.ParallelToolCalls ?? true, PreviousResponseId = request.PreviousResponseId, @@ -64,7 +64,7 @@ public static Response ToResponse( PromptCacheKey = request.PromptCacheKey, Reasoning = request.Reasoning, SafetyIdentifier = request.SafetyIdentifier, - ServiceTier = request.ServiceTier ?? "default", + ServiceTier = request.ServiceTier, Status = ResponseStatus.Completed, Store = request.Store ?? true, Temperature = request.Temperature ?? 1.0, diff --git a/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/AgentRunResponseUpdateExtensions.cs b/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/AgentRunResponseUpdateExtensions.cs index 252cdc8d92..d8f00735f9 100644 --- a/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/AgentRunResponseUpdateExtensions.cs +++ b/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/AgentRunResponseUpdateExtensions.cs @@ -165,7 +165,7 @@ Response CreateResponse(ResponseStatus status = ResponseStatus.Completed, IEnume MaxOutputTokens = request.MaxOutputTokens, MaxToolCalls = request.MaxToolCalls, Metadata = request.Metadata != null ? new Dictionary(request.Metadata) : [], - Model = request.Agent?.Name ?? request.Model, + Model = request.Model, Output = outputs?.ToList() ?? [], ParallelToolCalls = request.ParallelToolCalls ?? true, PreviousResponseId = request.PreviousResponseId, diff --git a/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/HostedAgentResponseExecutor.cs b/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/HostedAgentResponseExecutor.cs index 78e4331b6b..f90e47b070 100644 --- a/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/HostedAgentResponseExecutor.cs +++ b/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/HostedAgentResponseExecutor.cs @@ -13,8 +13,9 @@ namespace Microsoft.Agents.AI.Hosting.OpenAI.Responses; /// -/// Response executor that routes requests to hosted AIAgent services based on the model or agent.name parameter. +/// Response executor that routes requests to hosted AIAgent services based on agent.name or metadata["entity_id"]. /// This executor resolves agents from keyed services registered via AddAIAgent(). +/// The model field is reserved for actual model names and is never used for entity/agent identification. /// internal sealed class HostedAgentResponseExecutor : IResponseExecutor { @@ -37,16 +38,46 @@ public HostedAgentResponseExecutor( this._logger = logger; } + /// + public ValueTask ValidateRequestAsync( + CreateResponse request, + CancellationToken cancellationToken = default) + { + // Extract agent name from agent.name or model parameter + string? agentName = GetAgentName(request); + + if (string.IsNullOrEmpty(agentName)) + { + return ValueTask.FromResult(new ResponseError + { + Code = "missing_required_parameter", + Message = "No 'agent.name' or 'metadata[\"entity_id\"]' specified in the request." + }); + } + + // Validate that the agent can be resolved + AIAgent? agent = this._serviceProvider.GetKeyedService(agentName); + if (agent is null) + { + this._logger.LogWarning("Failed to resolve agent with name '{AgentName}'", agentName); + return ValueTask.FromResult(new ResponseError + { + Code = "agent_not_found", + Message = $"Agent '{agentName}' not found. Ensure the agent is registered with AddAIAgent()." + }); + } + + return ValueTask.FromResult(null); + } + /// public async IAsyncEnumerable ExecuteAsync( AgentInvocationContext context, CreateResponse request, [EnumeratorCancellation] CancellationToken cancellationToken = default) { - // Validate and resolve agent synchronously to ensure validation errors are thrown immediately - AIAgent agent = this.ResolveAgent(request); - - // Create options with properties from the request + string agentName = GetAgentName(request)!; + AIAgent agent = this._serviceProvider.GetRequiredKeyedService(agentName); var chatOptions = new ChatOptions { ConversationId = request.Conversation?.Id, @@ -57,8 +88,6 @@ public async IAsyncEnumerable ExecuteAsync( ModelId = request.Model, }; var options = new ChatClientAgentRunOptions(chatOptions); - - // Convert input to chat messages var messages = new List(); foreach (var inputMessage in request.Input.GetInputMessages()) @@ -66,7 +95,6 @@ public async IAsyncEnumerable ExecuteAsync( messages.Add(inputMessage.ToChatMessage()); } - // Use the extension method to convert streaming updates to streaming response events await foreach (var streamingEvent in agent.RunStreamingAsync(messages, options: options, cancellationToken: cancellationToken) .ToStreamingResponseAsync(request, context, cancellationToken).ConfigureAwait(false)) { @@ -75,41 +103,20 @@ public async IAsyncEnumerable ExecuteAsync( } /// - /// Resolves an agent from the service provider based on the request. + /// Extracts the agent name for a request from the agent.name property, falling back to metadata["entity_id"]. /// /// The create response request. - /// The resolved AIAgent instance. - /// Thrown when the agent cannot be resolved. - private AIAgent ResolveAgent(CreateResponse request) + /// The agent name. + private static string? GetAgentName(CreateResponse request) { - // Extract agent name from agent.name or model parameter - var agentName = request.Agent?.Name ?? request.Model; - if (string.IsNullOrEmpty(agentName)) - { - throw new InvalidOperationException("No 'agent.name' or 'model' specified in the request."); - } + string? agentName = request.Agent?.Name; - // Resolve the keyed agent service - try + // Fall back to metadata["entity_id"] if agent.name is not present + if (string.IsNullOrEmpty(agentName) && request.Metadata?.TryGetValue("entity_id", out string? entityId) == true) { - return this._serviceProvider.GetRequiredKeyedService(agentName); + agentName = entityId; } - catch (InvalidOperationException ex) - { - this._logger.LogError(ex, "Failed to resolve agent with name '{AgentName}'", agentName); - throw new InvalidOperationException($"Agent '{agentName}' not found. Ensure the agent is registered with AddAIAgent().", ex); - } - } - /// - /// Validates that the agent can be resolved without actually resolving it. - /// This allows early validation before starting async execution. - /// - /// The create response request. - /// Thrown when the agent cannot be resolved. - public void ValidateAgent(CreateResponse request) - { - // Use the same logic as ResolveAgent but don't return the agent - _ = this.ResolveAgent(request); + return agentName; } } diff --git a/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/IResponseExecutor.cs b/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/IResponseExecutor.cs index ca4da70b88..b96879f4cc 100644 --- a/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/IResponseExecutor.cs +++ b/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/IResponseExecutor.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Threading; +using System.Threading.Tasks; using Microsoft.Agents.AI.Hosting.OpenAI.Responses.Models; namespace Microsoft.Agents.AI.Hosting.OpenAI.Responses; @@ -12,6 +13,16 @@ namespace Microsoft.Agents.AI.Hosting.OpenAI.Responses; /// internal interface IResponseExecutor { + /// + /// Validates a create response request before execution. + /// + /// The create response request to validate. + /// Cancellation token. + /// A if validation fails, null if validation succeeds. + ValueTask ValidateRequestAsync( + CreateResponse request, + CancellationToken cancellationToken = default); + /// /// Executes a response generation request and returns streaming events. /// diff --git a/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/IResponsesService.cs b/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/IResponsesService.cs index 67f7b72f20..b1676ac99c 100644 --- a/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/IResponsesService.cs +++ b/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/IResponsesService.cs @@ -18,6 +18,17 @@ internal interface IResponsesService /// Default limit for list operations. /// const int DefaultListLimit = 20; + + /// + /// Validates a create response request before execution. + /// + /// The create response request to validate. + /// Cancellation token. + /// A ResponseError if validation fails, null if validation succeeds. + ValueTask ValidateRequestAsync( + CreateResponse request, + CancellationToken cancellationToken = default); + /// /// Creates a model response for the given input. /// diff --git a/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/InMemoryResponsesService.cs b/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/InMemoryResponsesService.cs index dfb744596a..2f5b3f4660 100644 --- a/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/InMemoryResponsesService.cs +++ b/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/InMemoryResponsesService.cs @@ -147,18 +147,27 @@ public InMemoryResponsesService(IResponseExecutor executor, InMemoryStorageOptio this._conversationStorage = conversationStorage; } - public async Task CreateResponseAsync( + public async ValueTask ValidateRequestAsync( CreateResponse request, CancellationToken cancellationToken = default) { - ValidateRequest(request); - - // Validate agent resolution early for HostedAgentResponseExecutor - if (this._executor is HostedAgentResponseExecutor hostedExecutor) + if (request.Conversation is not null && !string.IsNullOrEmpty(request.Conversation.Id) && + !string.IsNullOrEmpty(request.PreviousResponseId)) { - hostedExecutor.ValidateAgent(request); + return new ResponseError + { + Code = "invalid_request", + Message = "Mutually exclusive parameters: 'conversation' and 'previous_response_id'. Ensure you are only providing one of: 'previous_response_id' or 'conversation'." + }; } + return await this._executor.ValidateRequestAsync(request, cancellationToken).ConfigureAwait(false); + } + + public async Task CreateResponseAsync( + CreateResponse request, + CancellationToken cancellationToken = default) + { if (request.Stream == true) { throw new InvalidOperationException("Cannot create a streaming response using CreateResponseAsync. Use CreateResponseStreamingAsync instead."); @@ -189,8 +198,6 @@ public async IAsyncEnumerable CreateResponseStreamingAsy CreateResponse request, [EnumeratorCancellation] CancellationToken cancellationToken = default) { - ValidateRequest(request); - if (request.Stream == false) { throw new InvalidOperationException("Cannot create a non-streaming response using CreateResponseStreamingAsync. Use CreateResponseAsync instead."); @@ -342,15 +349,6 @@ public Task> ListResponseInputItemsAsync( }); } - private static void ValidateRequest(CreateResponse request) - { - if (request.Conversation is not null && !string.IsNullOrEmpty(request.Conversation.Id) && - !string.IsNullOrEmpty(request.PreviousResponseId)) - { - throw new InvalidOperationException("Mutually exclusive parameters: 'conversation' and 'previous_response_id'. Ensure you are only providing one of: 'previous_response_id' or 'conversation'."); - } - } - private ResponseState InitializeResponse(string responseId, CreateResponse request) { var metadata = request.Metadata ?? []; @@ -371,7 +369,7 @@ private ResponseState InitializeResponse(string responseId, CreateResponse reque MaxOutputTokens = request.MaxOutputTokens, MaxToolCalls = request.MaxToolCalls, Metadata = metadata, - Model = request.Model ?? "default", + Model = request.Model, Output = [], ParallelToolCalls = request.ParallelToolCalls ?? true, PreviousResponseId = request.PreviousResponseId, diff --git a/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/ResponsesHttpHandler.cs b/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/ResponsesHttpHandler.cs index 31f61e967e..b73cdebda5 100644 --- a/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/ResponsesHttpHandler.cs +++ b/dotnet/src/Microsoft.Agents.AI.Hosting.OpenAI/Responses/ResponsesHttpHandler.cs @@ -34,6 +34,21 @@ public async Task CreateResponseAsync( [FromQuery] bool? stream, CancellationToken cancellationToken) { + // Validate the request first + ResponseError? validationError = await this._responsesService.ValidateRequestAsync(request, cancellationToken).ConfigureAwait(false); + if (validationError is not null) + { + return Results.BadRequest(new ErrorResponse + { + Error = new ErrorDetails + { + Message = validationError.Message, + Type = "invalid_request_error", + Code = validationError.Code + } + }); + } + try { // Handle streaming vs non-streaming @@ -55,45 +70,24 @@ public async Task CreateResponseAsync( request, cancellationToken: cancellationToken).ConfigureAwait(false); - return Results.Ok(response); - } - catch (InvalidOperationException ex) when (ex.Message.Contains("Mutually exclusive")) - { - // Return OpenAI-style error for mutual exclusivity violations - return Results.BadRequest(new ErrorResponse + return response.Status switch { - Error = new ErrorDetails - { - Message = ex.Message, - Type = "invalid_request_error", - Code = "mutually_exclusive_parameters" - } - }); - } - catch (InvalidOperationException ex) when (ex.Message.Contains("not found") || ex.Message.Contains("does not exist")) - { - // Return OpenAI-style error for not found errors - return Results.NotFound(new ErrorResponse - { - Error = new ErrorDetails - { - Message = ex.Message, - Type = "invalid_request_error" - } - }); + ResponseStatus.Failed when response.Error is { } error => Results.Problem( + detail: error.Message, + statusCode: StatusCodes.Status500InternalServerError, + title: error.Code ?? "Internal Server Error"), + ResponseStatus.Failed => Results.Problem(), + ResponseStatus.Queued => Results.Accepted(value: response), + _ => Results.Ok(response) + }; } - catch (InvalidOperationException ex) when (ex.Message.Contains("No 'agent.name' or 'model' specified")) + catch (Exception ex) { - // Return OpenAI-style error for missing required parameters - return Results.BadRequest(new ErrorResponse - { - Error = new ErrorDetails - { - Message = ex.Message, - Type = "invalid_request_error", - Code = "missing_required_parameter" - } - }); + // Return InternalServerError for unexpected exceptions + return Results.Problem( + detail: ex.Message, + statusCode: StatusCodes.Status500InternalServerError, + title: "Internal Server Error"); } } diff --git a/dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/OpenAIHttpApiIntegrationTests.cs b/dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/OpenAIHttpApiIntegrationTests.cs index 0c07410b91..1a72b252b5 100644 --- a/dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/OpenAIHttpApiIntegrationTests.cs +++ b/dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/OpenAIHttpApiIntegrationTests.cs @@ -45,7 +45,7 @@ public async Task CreateConversationAndResponse_NonStreaming_NonBackground_Updat // Act - Create response (non-streaming, non-background) var createResponseRequest = new { - model = AgentName, + metadata = new { entity_id = AgentName }, conversation = conversationId, input = UserMessage, stream = false @@ -122,7 +122,7 @@ public async Task CreateConversationAndResponse_Streaming_NonBackground_UpdatesC // Act - Create response (streaming, non-background) var createResponseRequest = new { - model = AgentName, + metadata = new { entity_id = AgentName }, conversation = conversationId, input = UserMessage, stream = true @@ -196,7 +196,7 @@ public async Task CreateConversationAndResponse_NonStreaming_Background_UpdatesC // Act - Create response (non-streaming, background) var createResponseRequest = new { - model = AgentName, + metadata = new { entity_id = AgentName }, conversation = conversationId, input = UserMessage, stream = false, diff --git a/dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/OpenAIResponsesAgentResolutionIntegrationTests.cs b/dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/OpenAIResponsesAgentResolutionIntegrationTests.cs index c8ce5b770e..9ea9541ccb 100644 --- a/dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/OpenAIResponsesAgentResolutionIntegrationTests.cs +++ b/dotnet/tests/Microsoft.Agents.AI.Hosting.OpenAI.UnitTests/OpenAIResponsesAgentResolutionIntegrationTests.cs @@ -168,23 +168,23 @@ public async Task CreateResponse_WithMultipleAgents_ResolvesCorrectAgentAsync() } /// - /// Verifies that agent resolution using the model property works correctly. + /// Verifies that agent resolution using the metadata.entity_id property works correctly. /// [Fact] - public async Task CreateResponse_WithModelProperty_ResolvesCorrectAgentAsync() + public async Task CreateResponse_WithMetadataEntityId_ResolvesCorrectAgentAsync() { // Arrange - const string AgentName = "model-agent"; + const string AgentName = "metadata-agent"; const string Instructions = "You are a helpful assistant."; - const string ExpectedResponse = "Response via model property"; + const string ExpectedResponse = "Response via metadata.entity_id"; this._httpClient = await this.CreateTestServerWithAgentResolutionAsync( (AgentName, Instructions, ExpectedResponse)); - // Act - Use raw HTTP request to control the model property + // Act - Use raw HTTP request with metadata.entity_id using StringContent requestContent = new(JsonSerializer.Serialize(new { - model = AgentName, + metadata = new { entity_id = AgentName }, input = new[] { new { type = "message", role = "user", content = "Test message" } @@ -235,7 +235,7 @@ public async Task CreateResponse_WithNonExistentAgent_ReturnsNotFoundAsync() using HttpResponseMessage httpResponse = await this._httpClient!.PostAsync(new Uri("/v1/responses", UriKind.Relative), requestContent); // Assert - Assert.Equal(System.Net.HttpStatusCode.NotFound, httpResponse.StatusCode); + Assert.Equal(System.Net.HttpStatusCode.BadRequest, httpResponse.StatusCode); string responseJson = await httpResponse.Content.ReadAsStringAsync(); Assert.Contains("non-existent-agent", responseJson); @@ -268,7 +268,6 @@ public async Task CreateResponse_WithoutAgentOrModel_ReturnsBadRequestAsync() string responseJson = await httpResponse.Content.ReadAsStringAsync(); Assert.Contains("agent.name", responseJson, StringComparison.OrdinalIgnoreCase); - Assert.Contains("model", responseJson, StringComparison.OrdinalIgnoreCase); } /// diff --git a/python/packages/devui/README.md b/python/packages/devui/README.md index 30e807e341..245fffc5dd 100644 --- a/python/packages/devui/README.md +++ b/python/packages/devui/README.md @@ -91,15 +91,15 @@ devui ./agents --tracing framework ## OpenAI-Compatible API -For convenience, DevUI provides an OpenAI Responses backend API. This means you can run the backend and also use the OpenAI client sdk to connect to it. Use **agent/workflow name as the model**, and set streaming to `True` as needed. +For convenience, DevUI provides an OpenAI Responses backend API. This means you can run the backend and also use the OpenAI client sdk to connect to it. Use **agent/workflow name as the entity_id in metadata**, and set streaming to `True` as needed. ```bash -# Simple - use your entity name as the model +# Simple - use your entity name as the entity_id in metadata curl -X POST http://localhost:8080/v1/responses \ -H "Content-Type: application/json" \ -d @- << 'EOF' { - "model": "weather_agent", + "metadata": {"entity_id": "weather_agent"}, "input": "Hello world" } ``` @@ -115,7 +115,7 @@ client = OpenAI( ) response = client.responses.create( - model="weather_agent", # Your agent/workflow name + metadata={"entity_id": "weather_agent"}, # Your agent/workflow name input="What's the weather in Seattle?" ) @@ -136,13 +136,13 @@ conversation = client.conversations.create( # Use it across multiple turns response1 = client.responses.create( - model="weather_agent", + metadata={"entity_id": "weather_agent"}, input="What's the weather in Seattle?", conversation=conversation.id ) response2 = client.responses.create( - model="weather_agent", + metadata={"entity_id": "weather_agent"}, input="How about tomorrow?", conversation=conversation.id # Continues the conversation! ) diff --git a/python/packages/devui/agent_framework_devui/_mapper.py b/python/packages/devui/agent_framework_devui/_mapper.py index af127e6d3d..8e234842c5 100644 --- a/python/packages/devui/agent_framework_devui/_mapper.py +++ b/python/packages/devui/agent_framework_devui/_mapper.py @@ -273,7 +273,7 @@ async def aggregate_to_response(self, events: Sequence[Any], request: AgentFrame id=f"resp_{uuid.uuid4().hex[:12]}", object="response", created_at=datetime.now().timestamp(), - model=request.model, + model=request.model or "devui", output=[response_output_message], usage=usage, parallel_tool_calls=False, @@ -495,8 +495,9 @@ async def _convert_agent_lifecycle_event(self, event: Any, context: dict[str, An from .models._openai_custom import AgentCompletedEvent, AgentFailedEvent, AgentStartedEvent try: - # Get model name from context (the agent name) - model_name = context.get("request", {}).model if context.get("request") else "agent" + # Get model name from request or use 'devui' as default + request_obj = context.get("request") + model_name = request_obj.model if request_obj and request_obj.model else "devui" if isinstance(event, AgentStartedEvent): execution_id = f"agent_{uuid4().hex[:12]}" @@ -603,16 +604,16 @@ async def _convert_workflow_event(self, event: Any, context: dict[str, Any]) -> # Return proper OpenAI event objects events: list[Any] = [] - # Determine the model name - use request model or default to "workflow" - # The request model will be the agent name for agents, workflow name for workflows - model_name = context.get("request", {}).model if context.get("request") else "workflow" + # Get model name from request or use 'devui' as default + request_obj = context.get("request") + model_name = request_obj.model if request_obj and request_obj.model else "devui" # Create a full Response object with all required fields response_obj = Response( id=f"resp_{workflow_id}", object="response", created_at=float(time.time()), - model=model_name, # Use the actual model/agent name + model=model_name, output=[], # Empty output list initially status="in_progress", # Required fields with safe defaults @@ -643,8 +644,9 @@ async def _convert_workflow_event(self, event: Any, context: dict[str, Any]) -> # Import Response type for proper construction from openai.types.responses import Response - # Get model name from context - model_name = context.get("request", {}).model if context.get("request") else "workflow" + # Get model name from request or use 'devui' as default + request_obj = context.get("request") + model_name = request_obj.model if request_obj and request_obj.model else "devui" # Create a full Response object for completed state response_obj = Response( @@ -672,8 +674,9 @@ async def _convert_workflow_event(self, event: Any, context: dict[str, Any]) -> # Import Response and ResponseError types from openai.types.responses import Response, ResponseError - # Get model name from context - model_name = context.get("request", {}).model if context.get("request") else "workflow" + # Get model name from request or use 'devui' as default + request_obj = context.get("request") + model_name = request_obj.model if request_obj and request_obj.model else "devui" # Create error object error_message = str(error_info) if error_info else "Unknown error" @@ -1208,7 +1211,7 @@ async def _create_error_response(self, error_message: str, request: AgentFramewo id=f"resp_{uuid.uuid4().hex[:12]}", object="response", created_at=datetime.now().timestamp(), - model=request.model, + model=request.model or "devui", output=[response_output_message], usage=usage, parallel_tool_calls=False, diff --git a/python/packages/devui/agent_framework_devui/_server.py b/python/packages/devui/agent_framework_devui/_server.py index 3e3c538098..51ce0f9128 100644 --- a/python/packages/devui/agent_framework_devui/_server.py +++ b/python/packages/devui/agent_framework_devui/_server.py @@ -359,14 +359,14 @@ async def create_response(request: AgentFrameworkRequest, raw_request: Request) try: raw_body = await raw_request.body() logger.info(f"Raw request body: {raw_body.decode()}") - logger.info(f"Parsed request: model={request.model}, extra_body={request.extra_body}") + logger.info(f"Parsed request: metadata={request.metadata}") - # Get entity_id using the new method + # Get entity_id from metadata entity_id = request.get_entity_id() logger.info(f"Extracted entity_id: {entity_id}") if not entity_id: - error = OpenAIError.create(f"Missing entity_id. Request extra_body: {request.extra_body}") + error = OpenAIError.create("Missing entity_id in metadata. Provide metadata.entity_id in request.") return JSONResponse(status_code=400, content=error.to_dict()) # Get executor and validate entity exists diff --git a/python/packages/devui/agent_framework_devui/models/_openai_custom.py b/python/packages/devui/agent_framework_devui/models/_openai_custom.py index d4506c7b4c..d1ff6de0f6 100644 --- a/python/packages/devui/agent_framework_devui/models/_openai_custom.py +++ b/python/packages/devui/agent_framework_devui/models/_openai_custom.py @@ -144,7 +144,7 @@ class AgentFrameworkRequest(BaseModel): """ # All OpenAI fields from ResponseCreateParams - model: str # Used as entity_id in DevUI! + model: str | None = None input: str | list[Any] | dict[str, Any] # ResponseInputParam + dict for workflow structured input stream: bool | None = False @@ -163,13 +163,14 @@ class AgentFrameworkRequest(BaseModel): model_config = ConfigDict(extra="allow") - def get_entity_id(self) -> str: - """Get entity_id from model field. + def get_entity_id(self) -> str | None: + """Get entity_id from metadata.entity_id. - In DevUI, model IS the entity_id (agent/workflow name). - Simple and clean! + In DevUI, entity_id is specified in metadata for routing. """ - return self.model + if self.metadata: + return self.metadata.get("entity_id") + return None def get_conversation_id(self) -> str | None: """Extract conversation_id from conversation parameter. diff --git a/python/packages/devui/agent_framework_devui/ui/assets/index.js b/python/packages/devui/agent_framework_devui/ui/assets/index.js index 56570a4f3c..d276ef3b02 100644 --- a/python/packages/devui/agent_framework_devui/ui/assets/index.js +++ b/python/packages/devui/agent_framework_devui/ui/assets/index.js @@ -6,7 +6,7 @@ function ZE(e,n){for(var o=0;o>>1,T=_[B];if(0>>1;Bl(ee,z))sel(he,ee)?(_[B]=he,_[se]=z,B=se):(_[B]=ee,_[X]=z,B=X);else if(sel(he,z))_[B]=he,_[se]=z,B=se;else break e}}return O}function l(_,O){var z=_.sortIndex-O.sortIndex;return z!==0?z:_.id-O.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var u=performance;e.unstable_now=function(){return u.now()}}else{var d=Date,f=d.now();e.unstable_now=function(){return d.now()-f}}var h=[],p=[],g=1,y=null,v=3,b=!1,N=!1,w=!1,j=!1,k=typeof setTimeout=="function"?setTimeout:null,M=typeof clearTimeout=="function"?clearTimeout:null,E=typeof setImmediate<"u"?setImmediate:null;function A(_){for(var O=o(p);O!==null;){if(O.callback===null)s(p);else if(O.startTime<=_)s(p),O.sortIndex=O.expirationTime,n(h,O);else break;O=o(p)}}function D(_){if(w=!1,A(_),!N)if(o(h)!==null)N=!0,L||(L=!0,G());else{var O=o(p);O!==null&&V(D,O.startTime-_)}}var L=!1,H=-1,U=5,q=-1;function F(){return j?!0:!(e.unstable_now()-q_&&F());){var B=y.callback;if(typeof B=="function"){y.callback=null,v=y.priorityLevel;var T=B(y.expirationTime<=_);if(_=e.unstable_now(),typeof T=="function"){y.callback=T,A(_),O=!0;break t}y===o(h)&&s(h),A(_)}else s(h);y=o(h)}if(y!==null)O=!0;else{var P=o(p);P!==null&&V(D,P.startTime-_),O=!1}}break e}finally{y=null,v=z,b=!1}O=void 0}}finally{O?G():L=!1}}}var G;if(typeof E=="function")G=function(){E(K)};else if(typeof MessageChannel<"u"){var te=new MessageChannel,I=te.port2;te.port1.onmessage=K,G=function(){I.postMessage(null)}}else G=function(){k(K,0)};function V(_,O){H=k(function(){_(e.unstable_now())},O)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(_){_.callback=null},e.unstable_forceFrameRate=function(_){0>_||125<_?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):U=0<_?Math.floor(1e3/_):5},e.unstable_getCurrentPriorityLevel=function(){return v},e.unstable_next=function(_){switch(v){case 1:case 2:case 3:var O=3;break;default:O=v}var z=v;v=O;try{return _()}finally{v=z}},e.unstable_requestPaint=function(){j=!0},e.unstable_runWithPriority=function(_,O){switch(_){case 1:case 2:case 3:case 4:case 5:break;default:_=3}var z=v;v=_;try{return O()}finally{v=z}},e.unstable_scheduleCallback=function(_,O,z){var B=e.unstable_now();switch(typeof z=="object"&&z!==null?(z=z.delay,z=typeof z=="number"&&0B?(_.sortIndex=z,n(p,_),o(h)===null&&_===o(p)&&(w?(M(H),H=-1):w=!0,V(D,z-B))):(_.sortIndex=T,n(h,_),N||b||(N=!0,L||(L=!0,G()))),_},e.unstable_shouldYield=F,e.unstable_wrapCallback=function(_){var O=v;return function(){var z=v;v=O;try{return _.apply(this,arguments)}finally{v=z}}}})(Tm)),Tm}var Mv;function ej(){return Mv||(Mv=1,Mm.exports=JE()),Mm.exports}var Rm={exports:{}},Bt={};/** + */var Ay;function JE(){return Ay||(Ay=1,(function(e){function n(_,O){var z=_.length;_.push(O);e:for(;0>>1,T=_[B];if(0>>1;Bl(ee,z))sel(he,ee)?(_[B]=he,_[se]=z,B=se):(_[B]=ee,_[X]=z,B=X);else if(sel(he,z))_[B]=he,_[se]=z,B=se;else break e}}return O}function l(_,O){var z=_.sortIndex-O.sortIndex;return z!==0?z:_.id-O.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var u=performance;e.unstable_now=function(){return u.now()}}else{var d=Date,f=d.now();e.unstable_now=function(){return d.now()-f}}var h=[],p=[],g=1,v=null,y=3,b=!1,N=!1,w=!1,j=!1,k=typeof setTimeout=="function"?setTimeout:null,M=typeof clearTimeout=="function"?clearTimeout:null,E=typeof setImmediate<"u"?setImmediate:null;function A(_){for(var O=o(p);O!==null;){if(O.callback===null)s(p);else if(O.startTime<=_)s(p),O.sortIndex=O.expirationTime,n(h,O);else break;O=o(p)}}function D(_){if(w=!1,A(_),!N)if(o(h)!==null)N=!0,L||(L=!0,G());else{var O=o(p);O!==null&&V(D,O.startTime-_)}}var L=!1,H=-1,U=5,q=-1;function F(){return j?!0:!(e.unstable_now()-q_&&F());){var B=v.callback;if(typeof B=="function"){v.callback=null,y=v.priorityLevel;var T=B(v.expirationTime<=_);if(_=e.unstable_now(),typeof T=="function"){v.callback=T,A(_),O=!0;break t}v===o(h)&&s(h),A(_)}else s(h);v=o(h)}if(v!==null)O=!0;else{var P=o(p);P!==null&&V(D,P.startTime-_),O=!1}}break e}finally{v=null,y=z,b=!1}O=void 0}}finally{O?G():L=!1}}}var G;if(typeof E=="function")G=function(){E(K)};else if(typeof MessageChannel<"u"){var te=new MessageChannel,I=te.port2;te.port1.onmessage=K,G=function(){I.postMessage(null)}}else G=function(){k(K,0)};function V(_,O){H=k(function(){_(e.unstable_now())},O)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(_){_.callback=null},e.unstable_forceFrameRate=function(_){0>_||125<_?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):U=0<_?Math.floor(1e3/_):5},e.unstable_getCurrentPriorityLevel=function(){return y},e.unstable_next=function(_){switch(y){case 1:case 2:case 3:var O=3;break;default:O=y}var z=y;y=O;try{return _()}finally{y=z}},e.unstable_requestPaint=function(){j=!0},e.unstable_runWithPriority=function(_,O){switch(_){case 1:case 2:case 3:case 4:case 5:break;default:_=3}var z=y;y=_;try{return O()}finally{y=z}},e.unstable_scheduleCallback=function(_,O,z){var B=e.unstable_now();switch(typeof z=="object"&&z!==null?(z=z.delay,z=typeof z=="number"&&0B?(_.sortIndex=z,n(p,_),o(h)===null&&_===o(p)&&(w?(M(H),H=-1):w=!0,V(D,z-B))):(_.sortIndex=T,n(h,_),N||b||(N=!0,L||(L=!0,G()))),_},e.unstable_shouldYield=F,e.unstable_wrapCallback=function(_){var O=y;return function(){var z=y;y=O;try{return _.apply(this,arguments)}finally{y=z}}}})(Tm)),Tm}var My;function ej(){return My||(My=1,Mm.exports=JE()),Mm.exports}var Rm={exports:{}},Bt={};/** * @license React * react-dom.production.js * @@ -30,7 +30,7 @@ function ZE(e,n){for(var o=0;o"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(n){console.error(n)}}return e(),Rm.exports=tj(),Rm.exports}/** + */var Ty;function tj(){if(Ty)return Bt;Ty=1;var e=Ji();function n(h){var p="https://react.dev/errors/"+h;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(n){console.error(n)}}return e(),Rm.exports=tj(),Rm.exports}/** * @license React * react-dom-client.production.js * @@ -38,15 +38,15 @@ function ZE(e,n){for(var o=0;oT||(t.current=B[T],B[T]=null,T--)}function ee(t,r){T++,B[T]=t.current,t.current=r}var se=P(null),he=P(null),fe=P(null),Q=P(null);function ae(t,r){switch(ee(fe,r),ee(he,t),ee(se,null),r.nodeType){case 9:case 11:t=(t=r.documentElement)&&(t=t.namespaceURI)?J0(t):0;break;default:if(t=r.tagName,r=r.namespaceURI)r=J0(r),t=ev(r,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}X(se),ee(se,t)}function xe(){X(se),X(he),X(fe)}function le(t){t.memoizedState!==null&&ee(Q,t);var r=se.current,a=ev(r,t.type);r!==a&&(ee(he,t),ee(se,a))}function ce(t){he.current===t&&(X(se),X(he)),Q.current===t&&(X(Q),vi._currentValue=z)}var ue=Object.prototype.hasOwnProperty,ge=e.unstable_scheduleCallback,pe=e.unstable_cancelCallback,Ye=e.unstable_shouldYield,it=e.unstable_requestPaint,re=e.unstable_now,Ce=e.unstable_getCurrentPriorityLevel,ke=e.unstable_ImmediatePriority,ze=e.unstable_UserBlockingPriority,Ne=e.unstable_NormalPriority,je=e.unstable_LowPriority,Le=e.unstable_IdlePriority,Ue=e.log,ct=e.unstable_setDisableYieldValue,$e=null,ye=null;function Te(t){if(typeof Ue=="function"&&ct(t),ye&&typeof ye.setStrictMode=="function")try{ye.setStrictMode($e,t)}catch{}}var Ie=Math.clz32?Math.clz32:Tr,Nt=Math.log,Tt=Math.LN2;function Tr(t){return t>>>=0,t===0?32:31-(Nt(t)/Tt|0)|0}var os=256,ss=4194304;function Qn(t){var r=t&42;if(r!==0)return r;switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194048;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function as(t,r,a){var c=t.pendingLanes;if(c===0)return 0;var m=0,x=t.suspendedLanes,C=t.pingedLanes;t=t.warmLanes;var R=c&134217727;return R!==0?(c=R&~x,c!==0?m=Qn(c):(C&=R,C!==0?m=Qn(C):a||(a=R&~t,a!==0&&(m=Qn(a))))):(R=c&~x,R!==0?m=Qn(R):C!==0?m=Qn(C):a||(a=c&~t,a!==0&&(m=Qn(a)))),m===0?0:r!==0&&r!==m&&(r&x)===0&&(x=m&-m,a=r&-r,x>=a||x===32&&(a&4194048)!==0)?r:m}function yo(t,r){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&r)===0}function pd(t,r){switch(t){case 1:case 2:case 4:case 8:case 64:return r+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return r+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function ml(){var t=os;return os<<=1,(os&4194048)===0&&(os=256),t}function hl(){var t=ss;return ss<<=1,(ss&62914560)===0&&(ss=4194304),t}function ya(t){for(var r=[],a=0;31>a;a++)r.push(t);return r}function bo(t,r){t.pendingLanes|=r,r!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function gd(t,r,a,c,m,x){var C=t.pendingLanes;t.pendingLanes=a,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=a,t.entangledLanes&=a,t.errorRecoveryDisabledLanes&=a,t.shellSuspendCounter=0;var R=t.entanglements,$=t.expirationTimes,J=t.hiddenUpdates;for(a=C&~a;0T||(t.current=B[T],B[T]=null,T--)}function ee(t,r){T++,B[T]=t.current,t.current=r}var se=P(null),he=P(null),fe=P(null),Q=P(null);function ae(t,r){switch(ee(fe,r),ee(he,t),ee(se,null),r.nodeType){case 9:case 11:t=(t=r.documentElement)&&(t=t.namespaceURI)?J0(t):0;break;default:if(t=r.tagName,r=r.namespaceURI)r=J0(r),t=ey(r,t);else switch(t){case"svg":t=1;break;case"math":t=2;break;default:t=0}}X(se),ee(se,t)}function xe(){X(se),X(he),X(fe)}function le(t){t.memoizedState!==null&&ee(Q,t);var r=se.current,a=ey(r,t.type);r!==a&&(ee(he,t),ee(se,a))}function ce(t){he.current===t&&(X(se),X(he)),Q.current===t&&(X(Q),yi._currentValue=z)}var ue=Object.prototype.hasOwnProperty,ge=e.unstable_scheduleCallback,pe=e.unstable_cancelCallback,Ye=e.unstable_shouldYield,it=e.unstable_requestPaint,re=e.unstable_now,Ce=e.unstable_getCurrentPriorityLevel,ke=e.unstable_ImmediatePriority,ze=e.unstable_UserBlockingPriority,Ne=e.unstable_NormalPriority,je=e.unstable_LowPriority,Le=e.unstable_IdlePriority,Ue=e.log,ct=e.unstable_setDisableYieldValue,$e=null,ve=null;function Te(t){if(typeof Ue=="function"&&ct(t),ve&&typeof ve.setStrictMode=="function")try{ve.setStrictMode($e,t)}catch{}}var Ie=Math.clz32?Math.clz32:Tr,Nt=Math.log,Tt=Math.LN2;function Tr(t){return t>>>=0,t===0?32:31-(Nt(t)/Tt|0)|0}var os=256,ss=4194304;function Qn(t){var r=t&42;if(r!==0)return r;switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194048;case 4194304:case 8388608:case 16777216:case 33554432:return t&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return t}}function as(t,r,a){var c=t.pendingLanes;if(c===0)return 0;var m=0,x=t.suspendedLanes,C=t.pingedLanes;t=t.warmLanes;var R=c&134217727;return R!==0?(c=R&~x,c!==0?m=Qn(c):(C&=R,C!==0?m=Qn(C):a||(a=R&~t,a!==0&&(m=Qn(a))))):(R=c&~x,R!==0?m=Qn(R):C!==0?m=Qn(C):a||(a=c&~t,a!==0&&(m=Qn(a)))),m===0?0:r!==0&&r!==m&&(r&x)===0&&(x=m&-m,a=r&-r,x>=a||x===32&&(a&4194048)!==0)?r:m}function vo(t,r){return(t.pendingLanes&~(t.suspendedLanes&~t.pingedLanes)&r)===0}function pd(t,r){switch(t){case 1:case 2:case 4:case 8:case 64:return r+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return r+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function ml(){var t=os;return os<<=1,(os&4194048)===0&&(os=256),t}function hl(){var t=ss;return ss<<=1,(ss&62914560)===0&&(ss=4194304),t}function va(t){for(var r=[],a=0;31>a;a++)r.push(t);return r}function bo(t,r){t.pendingLanes|=r,r!==268435456&&(t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0)}function gd(t,r,a,c,m,x){var C=t.pendingLanes;t.pendingLanes=a,t.suspendedLanes=0,t.pingedLanes=0,t.warmLanes=0,t.expiredLanes&=a,t.entangledLanes&=a,t.errorRecoveryDisabledLanes&=a,t.shellSuspendCounter=0;var R=t.entanglements,$=t.expirationTimes,J=t.hiddenUpdates;for(a=C&~a;0)":-1m||$[c]!==J[m]){var ie=` `+$[c].replace(" at new "," at ");return t.displayName&&ie.includes("")&&(ie=ie.replace("",t.displayName)),ie}while(1<=c&&0<=m);break}}}finally{Ca=!1,Error.prepareStackTrace=a}return(a=t?t.displayName||t.name:"")?nr(a):""}function Sd(t){switch(t.tag){case 26:case 27:case 5:return nr(t.type);case 16:return nr("Lazy");case 13:return nr("Suspense");case 19:return nr("SuspenseList");case 0:case 15:return ka(t.type,!1);case 11:return ka(t.type.render,!1);case 1:return ka(t.type,!0);case 31:return nr("Activity");default:return""}}function Sl(t){try{var r="";do r+=Sd(t),t=t.return;while(t);return r}catch(a){return` Error generating stack: `+a.message+` -`+a.stack}}function $t(t){switch(typeof t){case"bigint":case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function Nl(t){var r=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(r==="checkbox"||r==="radio")}function Nd(t){var r=Nl(t)?"checked":"value",a=Object.getOwnPropertyDescriptor(t.constructor.prototype,r),c=""+t[r];if(!t.hasOwnProperty(r)&&typeof a<"u"&&typeof a.get=="function"&&typeof a.set=="function"){var m=a.get,x=a.set;return Object.defineProperty(t,r,{configurable:!0,get:function(){return m.call(this)},set:function(C){c=""+C,x.call(this,C)}}),Object.defineProperty(t,r,{enumerable:a.enumerable}),{getValue:function(){return c},setValue:function(C){c=""+C},stopTracking:function(){t._valueTracker=null,delete t[r]}}}}function cs(t){t._valueTracker||(t._valueTracker=Nd(t))}function Aa(t){if(!t)return!1;var r=t._valueTracker;if(!r)return!0;var a=r.getValue(),c="";return t&&(c=Nl(t)?t.checked?"true":"false":t.value),t=c,t!==a?(r.setValue(t),!0):!1}function us(t){if(t=t||(typeof document<"u"?document:void 0),typeof t>"u")return null;try{return t.activeElement||t.body}catch{return t.body}}var _d=/[\n"\\]/g;function Vt(t){return t.replace(_d,function(r){return"\\"+r.charCodeAt(0).toString(16)+" "})}function So(t,r,a,c,m,x,C,R){t.name="",C!=null&&typeof C!="function"&&typeof C!="symbol"&&typeof C!="boolean"?t.type=C:t.removeAttribute("type"),r!=null?C==="number"?(r===0&&t.value===""||t.value!=r)&&(t.value=""+$t(r)):t.value!==""+$t(r)&&(t.value=""+$t(r)):C!=="submit"&&C!=="reset"||t.removeAttribute("value"),r!=null?Ma(t,C,$t(r)):a!=null?Ma(t,C,$t(a)):c!=null&&t.removeAttribute("value"),m==null&&x!=null&&(t.defaultChecked=!!x),m!=null&&(t.checked=m&&typeof m!="function"&&typeof m!="symbol"),R!=null&&typeof R!="function"&&typeof R!="symbol"&&typeof R!="boolean"?t.name=""+$t(R):t.removeAttribute("name")}function _l(t,r,a,c,m,x,C,R){if(x!=null&&typeof x!="function"&&typeof x!="symbol"&&typeof x!="boolean"&&(t.type=x),r!=null||a!=null){if(!(x!=="submit"&&x!=="reset"||r!=null))return;a=a!=null?""+$t(a):"",r=r!=null?""+$t(r):a,R||r===t.value||(t.value=r),t.defaultValue=r}c=c??m,c=typeof c!="function"&&typeof c!="symbol"&&!!c,t.checked=R?t.checked:!!c,t.defaultChecked=!!c,C!=null&&typeof C!="function"&&typeof C!="symbol"&&typeof C!="boolean"&&(t.name=C)}function Ma(t,r,a){r==="number"&&us(t.ownerDocument)===t||t.defaultValue===""+a||(t.defaultValue=""+a)}function rr(t,r,a,c){if(t=t.options,r){r={};for(var m=0;m"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Ad=!1;if(or)try{var Ra={};Object.defineProperty(Ra,"passive",{get:function(){Ad=!0}}),window.addEventListener("test",Ra,Ra),window.removeEventListener("test",Ra,Ra)}catch{Ad=!1}var Lr=null,Md=null,jl=null;function rg(){if(jl)return jl;var t,r=Md,a=r.length,c,m="value"in Lr?Lr.value:Lr.textContent,x=m.length;for(t=0;t=za),cg=" ",ug=!1;function dg(t,r){switch(t){case"keyup":return y_.indexOf(r.keyCode)!==-1;case"keydown":return r.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function fg(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var hs=!1;function w_(t,r){switch(t){case"compositionend":return fg(r);case"keypress":return r.which!==32?null:(ug=!0,cg);case"textInput":return t=r.data,t===cg&&ug?null:t;default:return null}}function S_(t,r){if(hs)return t==="compositionend"||!zd&&dg(t,r)?(t=rg(),jl=Md=Lr=null,hs=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(r.ctrlKey||r.altKey||r.metaKey)||r.ctrlKey&&r.altKey){if(r.char&&1=r)return{node:a,offset:r-t};t=c}e:{for(;a;){if(a.nextSibling){a=a.nextSibling;break e}a=a.parentNode}a=void 0}a=bg(a)}}function Sg(t,r){return t&&r?t===r?!0:t&&t.nodeType===3?!1:r&&r.nodeType===3?Sg(t,r.parentNode):"contains"in t?t.contains(r):t.compareDocumentPosition?!!(t.compareDocumentPosition(r)&16):!1:!1}function Ng(t){t=t!=null&&t.ownerDocument!=null&&t.ownerDocument.defaultView!=null?t.ownerDocument.defaultView:window;for(var r=us(t.document);r instanceof t.HTMLIFrameElement;){try{var a=typeof r.contentWindow.location.href=="string"}catch{a=!1}if(a)t=r.contentWindow;else break;r=us(t.document)}return r}function Hd(t){var r=t&&t.nodeName&&t.nodeName.toLowerCase();return r&&(r==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||r==="textarea"||t.contentEditable==="true")}var M_=or&&"documentMode"in document&&11>=document.documentMode,ps=null,Bd=null,Ba=null,Ud=!1;function _g(t,r,a){var c=a.window===a?a.document:a.nodeType===9?a:a.ownerDocument;Ud||ps==null||ps!==us(c)||(c=ps,"selectionStart"in c&&Hd(c)?c={start:c.selectionStart,end:c.selectionEnd}:(c=(c.ownerDocument&&c.ownerDocument.defaultView||window).getSelection(),c={anchorNode:c.anchorNode,anchorOffset:c.anchorOffset,focusNode:c.focusNode,focusOffset:c.focusOffset}),Ba&&Ha(Ba,c)||(Ba=c,c=gc(Bd,"onSelect"),0>=C,m-=C,ar=1<<32-Ie(r)+m|a<x?x:8;var C=_.T,R={};_.T=R,jf(t,!1,r,a);try{var $=m(),J=_.S;if(J!==null&&J(R,$),$!==null&&typeof $=="object"&&typeof $.then=="function"){var ie=B_($,c);ei(t,r,ie,nn(t))}else ei(t,r,c,nn(t))}catch(me){ei(t,r,{then:function(){},status:"rejected",reason:me},nn())}finally{O.p=x,_.T=C}}function q_(){}function _f(t,r,a,c){if(t.tag!==5)throw Error(s(476));var m=Ex(t).queue;_x(t,m,r,z,a===null?q_:function(){return jx(t),a(c)})}function Ex(t){var r=t.memoizedState;if(r!==null)return r;r={memoizedState:z,baseState:z,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ur,lastRenderedState:z},next:null};var a={};return r.next={memoizedState:a,baseState:a,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ur,lastRenderedState:a},next:null},t.memoizedState=r,t=t.alternate,t!==null&&(t.memoizedState=r),r}function jx(t){var r=Ex(t).next.queue;ei(t,r,{},nn())}function Ef(){return Ht(vi)}function Cx(){return bt().memoizedState}function kx(){return bt().memoizedState}function Y_(t){for(var r=t.return;r!==null;){switch(r.tag){case 24:case 3:var a=nn();t=Br(a);var c=Ur(r,t,a);c!==null&&(rn(c,r,a),Fa(c,r,a)),r={cache:ef()},t.payload=r;return}r=r.return}}function G_(t,r,a){var c=nn();a={lane:c,revertLane:0,action:a,hasEagerState:!1,eagerState:null,next:null},Kl(t)?Mx(r,a):(a=qd(t,r,a,c),a!==null&&(rn(a,t,c),Tx(a,r,c)))}function Ax(t,r,a){var c=nn();ei(t,r,a,c)}function ei(t,r,a,c){var m={lane:c,revertLane:0,action:a,hasEagerState:!1,eagerState:null,next:null};if(Kl(t))Mx(r,m);else{var x=t.alternate;if(t.lanes===0&&(x===null||x.lanes===0)&&(x=r.lastRenderedReducer,x!==null))try{var C=r.lastRenderedState,R=x(C,a);if(m.hasEagerState=!0,m.eagerState=R,Wt(R,C))return Dl(t,r,m,0),lt===null&&Rl(),!1}catch{}finally{}if(a=qd(t,r,m,c),a!==null)return rn(a,t,c),Tx(a,r,c),!0}return!1}function jf(t,r,a,c){if(c={lane:2,revertLane:om(),action:c,hasEagerState:!1,eagerState:null,next:null},Kl(t)){if(r)throw Error(s(479))}else r=qd(t,a,c,2),r!==null&&rn(r,t,2)}function Kl(t){var r=t.alternate;return t===Ve||r!==null&&r===Ve}function Mx(t,r){Es=ql=!0;var a=t.pending;a===null?r.next=r:(r.next=a.next,a.next=r),t.pending=r}function Tx(t,r,a){if((a&4194048)!==0){var c=r.lanes;c&=t.pendingLanes,a|=c,r.lanes=a,ba(t,a)}}var Wl={readContext:Ht,use:Gl,useCallback:gt,useContext:gt,useEffect:gt,useImperativeHandle:gt,useLayoutEffect:gt,useInsertionEffect:gt,useMemo:gt,useReducer:gt,useRef:gt,useState:gt,useDebugValue:gt,useDeferredValue:gt,useTransition:gt,useSyncExternalStore:gt,useId:gt,useHostTransitionStatus:gt,useFormState:gt,useActionState:gt,useOptimistic:gt,useMemoCache:gt,useCacheRefresh:gt},Rx={readContext:Ht,use:Gl,useCallback:function(t,r){return Yt().memoizedState=[t,r===void 0?null:r],t},useContext:Ht,useEffect:px,useImperativeHandle:function(t,r,a){a=a!=null?a.concat([t]):null,Zl(4194308,4,yx.bind(null,r,t),a)},useLayoutEffect:function(t,r){return Zl(4194308,4,t,r)},useInsertionEffect:function(t,r){Zl(4,2,t,r)},useMemo:function(t,r){var a=Yt();r=r===void 0?null:r;var c=t();if(Oo){Te(!0);try{t()}finally{Te(!1)}}return a.memoizedState=[c,r],c},useReducer:function(t,r,a){var c=Yt();if(a!==void 0){var m=a(r);if(Oo){Te(!0);try{a(r)}finally{Te(!1)}}}else m=r;return c.memoizedState=c.baseState=m,t={pending:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:m},c.queue=t,t=t.dispatch=G_.bind(null,Ve,t),[c.memoizedState,t]},useRef:function(t){var r=Yt();return t={current:t},r.memoizedState=t},useState:function(t){t=bf(t);var r=t.queue,a=Ax.bind(null,Ve,r);return r.dispatch=a,[t.memoizedState,a]},useDebugValue:Sf,useDeferredValue:function(t,r){var a=Yt();return Nf(a,t,r)},useTransition:function(){var t=bf(!1);return t=_x.bind(null,Ve,t.queue,!0,!1),Yt().memoizedState=t,[!1,t]},useSyncExternalStore:function(t,r,a){var c=Ve,m=Yt();if(et){if(a===void 0)throw Error(s(407));a=a()}else{if(a=r(),lt===null)throw Error(s(349));(Ke&124)!==0||Jg(c,r,a)}m.memoizedState=a;var x={value:a,getSnapshot:r};return m.queue=x,px(tx.bind(null,c,x,t),[t]),c.flags|=2048,Cs(9,Fl(),ex.bind(null,c,x,a,r),null),a},useId:function(){var t=Yt(),r=lt.identifierPrefix;if(et){var a=ir,c=ar;a=(c&~(1<<32-Ie(c)-1)).toString(32)+a,r="«"+r+"R"+a,a=Yl++,0De?(Mt=Ae,Ae=null):Mt=Ae.sibling;var Qe=ne(Z,Ae,W[De],de);if(Qe===null){Ae===null&&(Ae=Mt);break}t&&Ae&&Qe.alternate===null&&r(Z,Ae),Y=x(Qe,Y,De),Ge===null?be=Qe:Ge.sibling=Qe,Ge=Qe,Ae=Mt}if(De===W.length)return a(Z,Ae),et&&ko(Z,De),be;if(Ae===null){for(;DeDe?(Mt=Ae,Ae=null):Mt=Ae.sibling;var ro=ne(Z,Ae,Qe.value,de);if(ro===null){Ae===null&&(Ae=Mt);break}t&&Ae&&ro.alternate===null&&r(Z,Ae),Y=x(ro,Y,De),Ge===null?be=ro:Ge.sibling=ro,Ge=ro,Ae=Mt}if(Qe.done)return a(Z,Ae),et&&ko(Z,De),be;if(Ae===null){for(;!Qe.done;De++,Qe=W.next())Qe=me(Z,Qe.value,de),Qe!==null&&(Y=x(Qe,Y,De),Ge===null?be=Qe:Ge.sibling=Qe,Ge=Qe);return et&&ko(Z,De),be}for(Ae=c(Ae);!Qe.done;De++,Qe=W.next())Qe=oe(Ae,Z,De,Qe.value,de),Qe!==null&&(t&&Qe.alternate!==null&&Ae.delete(Qe.key===null?De:Qe.key),Y=x(Qe,Y,De),Ge===null?be=Qe:Ge.sibling=Qe,Ge=Qe);return t&&Ae.forEach(function(FE){return r(Z,FE)}),et&&ko(Z,De),be}function st(Z,Y,W,de){if(typeof W=="object"&&W!==null&&W.type===N&&W.key===null&&(W=W.props.children),typeof W=="object"&&W!==null){switch(W.$$typeof){case v:e:{for(var be=W.key;Y!==null;){if(Y.key===be){if(be=W.type,be===N){if(Y.tag===7){a(Z,Y.sibling),de=m(Y,W.props.children),de.return=Z,Z=de;break e}}else if(Y.elementType===be||typeof be=="object"&&be!==null&&be.$$typeof===U&&Ox(be)===Y.type){a(Z,Y.sibling),de=m(Y,W.props),ni(de,W),de.return=Z,Z=de;break e}a(Z,Y);break}else r(Z,Y);Y=Y.sibling}W.type===N?(de=jo(W.props.children,Z.mode,de,W.key),de.return=Z,Z=de):(de=zl(W.type,W.key,W.props,null,Z.mode,de),ni(de,W),de.return=Z,Z=de)}return C(Z);case b:e:{for(be=W.key;Y!==null;){if(Y.key===be)if(Y.tag===4&&Y.stateNode.containerInfo===W.containerInfo&&Y.stateNode.implementation===W.implementation){a(Z,Y.sibling),de=m(Y,W.children||[]),de.return=Z,Z=de;break e}else{a(Z,Y);break}else r(Z,Y);Y=Y.sibling}de=Xd(W,Z.mode,de),de.return=Z,Z=de}return C(Z);case U:return be=W._init,W=be(W._payload),st(Z,Y,W,de)}if(V(W))return Oe(Z,Y,W,de);if(G(W)){if(be=G(W),typeof be!="function")throw Error(s(150));return W=be.call(W),Re(Z,Y,W,de)}if(typeof W.then=="function")return st(Z,Y,Ql(W),de);if(W.$$typeof===E)return st(Z,Y,Bl(Z,W),de);Jl(Z,W)}return typeof W=="string"&&W!==""||typeof W=="number"||typeof W=="bigint"?(W=""+W,Y!==null&&Y.tag===6?(a(Z,Y.sibling),de=m(Y,W),de.return=Z,Z=de):(a(Z,Y),de=Gd(W,Z.mode,de),de.return=Z,Z=de),C(Z)):a(Z,Y)}return function(Z,Y,W,de){try{ti=0;var be=st(Z,Y,W,de);return ks=null,be}catch(Ae){if(Ae===Ga||Ae===Pl)throw Ae;var Ge=Qt(29,Ae,null,Z.mode);return Ge.lanes=de,Ge.return=Z,Ge}finally{}}}var As=zx(!0),Lx=zx(!1),pn=P(null),zn=null;function $r(t){var r=t.alternate;ee(Et,Et.current&1),ee(pn,t),zn===null&&(r===null||_s.current!==null||r.memoizedState!==null)&&(zn=t)}function Ix(t){if(t.tag===22){if(ee(Et,Et.current),ee(pn,t),zn===null){var r=t.alternate;r!==null&&r.memoizedState!==null&&(zn=t)}}else Vr()}function Vr(){ee(Et,Et.current),ee(pn,pn.current)}function dr(t){X(pn),zn===t&&(zn=null),X(Et)}var Et=P(0);function ec(t){for(var r=t;r!==null;){if(r.tag===13){var a=r.memoizedState;if(a!==null&&(a=a.dehydrated,a===null||a.data==="$?"||gm(a)))return r}else if(r.tag===19&&r.memoizedProps.revealOrder!==void 0){if((r.flags&128)!==0)return r}else if(r.child!==null){r.child.return=r,r=r.child;continue}if(r===t)break;for(;r.sibling===null;){if(r.return===null||r.return===t)return null;r=r.return}r.sibling.return=r.return,r=r.sibling}return null}function Cf(t,r,a,c){r=t.memoizedState,a=a(c,r),a=a==null?r:g({},r,a),t.memoizedState=a,t.lanes===0&&(t.updateQueue.baseState=a)}var kf={enqueueSetState:function(t,r,a){t=t._reactInternals;var c=nn(),m=Br(c);m.payload=r,a!=null&&(m.callback=a),r=Ur(t,m,c),r!==null&&(rn(r,t,c),Fa(r,t,c))},enqueueReplaceState:function(t,r,a){t=t._reactInternals;var c=nn(),m=Br(c);m.tag=1,m.payload=r,a!=null&&(m.callback=a),r=Ur(t,m,c),r!==null&&(rn(r,t,c),Fa(r,t,c))},enqueueForceUpdate:function(t,r){t=t._reactInternals;var a=nn(),c=Br(a);c.tag=2,r!=null&&(c.callback=r),r=Ur(t,c,a),r!==null&&(rn(r,t,a),Fa(r,t,a))}};function Hx(t,r,a,c,m,x,C){return t=t.stateNode,typeof t.shouldComponentUpdate=="function"?t.shouldComponentUpdate(c,x,C):r.prototype&&r.prototype.isPureReactComponent?!Ha(a,c)||!Ha(m,x):!0}function Bx(t,r,a,c){t=r.state,typeof r.componentWillReceiveProps=="function"&&r.componentWillReceiveProps(a,c),typeof r.UNSAFE_componentWillReceiveProps=="function"&&r.UNSAFE_componentWillReceiveProps(a,c),r.state!==t&&kf.enqueueReplaceState(r,r.state,null)}function zo(t,r){var a=r;if("ref"in r){a={};for(var c in r)c!=="ref"&&(a[c]=r[c])}if(t=t.defaultProps){a===r&&(a=g({},a));for(var m in t)a[m]===void 0&&(a[m]=t[m])}return a}var tc=typeof reportError=="function"?reportError:function(t){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var r=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof t=="object"&&t!==null&&typeof t.message=="string"?String(t.message):String(t),error:t});if(!window.dispatchEvent(r))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",t);return}console.error(t)};function Ux(t){tc(t)}function Px(t){console.error(t)}function $x(t){tc(t)}function nc(t,r){try{var a=t.onUncaughtError;a(r.value,{componentStack:r.stack})}catch(c){setTimeout(function(){throw c})}}function Vx(t,r,a){try{var c=t.onCaughtError;c(a.value,{componentStack:a.stack,errorBoundary:r.tag===1?r.stateNode:null})}catch(m){setTimeout(function(){throw m})}}function Af(t,r,a){return a=Br(a),a.tag=3,a.payload={element:null},a.callback=function(){nc(t,r)},a}function qx(t){return t=Br(t),t.tag=3,t}function Yx(t,r,a,c){var m=a.type.getDerivedStateFromError;if(typeof m=="function"){var x=c.value;t.payload=function(){return m(x)},t.callback=function(){Vx(r,a,c)}}var C=a.stateNode;C!==null&&typeof C.componentDidCatch=="function"&&(t.callback=function(){Vx(r,a,c),typeof m!="function"&&(Zr===null?Zr=new Set([this]):Zr.add(this));var R=c.stack;this.componentDidCatch(c.value,{componentStack:R!==null?R:""})})}function F_(t,r,a,c,m){if(a.flags|=32768,c!==null&&typeof c=="object"&&typeof c.then=="function"){if(r=a.alternate,r!==null&&Va(r,a,m,!0),a=pn.current,a!==null){switch(a.tag){case 13:return zn===null?Jf():a.alternate===null&&pt===0&&(pt=3),a.flags&=-257,a.flags|=65536,a.lanes=m,c===rf?a.flags|=16384:(r=a.updateQueue,r===null?a.updateQueue=new Set([c]):r.add(c),tm(t,c,m)),!1;case 22:return a.flags|=65536,c===rf?a.flags|=16384:(r=a.updateQueue,r===null?(r={transitions:null,markerInstances:null,retryQueue:new Set([c])},a.updateQueue=r):(a=r.retryQueue,a===null?r.retryQueue=new Set([c]):a.add(c)),tm(t,c,m)),!1}throw Error(s(435,a.tag))}return tm(t,c,m),Jf(),!1}if(et)return r=pn.current,r!==null?((r.flags&65536)===0&&(r.flags|=256),r.flags|=65536,r.lanes=m,c!==Kd&&(t=Error(s(422),{cause:c}),$a(dn(t,a)))):(c!==Kd&&(r=Error(s(423),{cause:c}),$a(dn(r,a))),t=t.current.alternate,t.flags|=65536,m&=-m,t.lanes|=m,c=dn(c,a),m=Af(t.stateNode,c,m),af(t,m),pt!==4&&(pt=2)),!1;var x=Error(s(520),{cause:c});if(x=dn(x,a),ci===null?ci=[x]:ci.push(x),pt!==4&&(pt=2),r===null)return!0;c=dn(c,a),a=r;do{switch(a.tag){case 3:return a.flags|=65536,t=m&-m,a.lanes|=t,t=Af(a.stateNode,c,t),af(a,t),!1;case 1:if(r=a.type,x=a.stateNode,(a.flags&128)===0&&(typeof r.getDerivedStateFromError=="function"||x!==null&&typeof x.componentDidCatch=="function"&&(Zr===null||!Zr.has(x))))return a.flags|=65536,m&=-m,a.lanes|=m,m=qx(m),Yx(m,t,a,c),af(a,m),!1}a=a.return}while(a!==null);return!1}var Gx=Error(s(461)),kt=!1;function Rt(t,r,a,c){r.child=t===null?Lx(r,null,a,c):As(r,t.child,a,c)}function Xx(t,r,a,c,m){a=a.render;var x=r.ref;if("ref"in c){var C={};for(var R in c)R!=="ref"&&(C[R]=c[R])}else C=c;return Ro(r),c=ff(t,r,a,C,x,m),R=mf(),t!==null&&!kt?(hf(t,r,m),fr(t,r,m)):(et&&R&&Fd(r),r.flags|=1,Rt(t,r,c,m),r.child)}function Fx(t,r,a,c,m){if(t===null){var x=a.type;return typeof x=="function"&&!Yd(x)&&x.defaultProps===void 0&&a.compare===null?(r.tag=15,r.type=x,Zx(t,r,x,c,m)):(t=zl(a.type,null,c,r,r.mode,m),t.ref=r.ref,t.return=r,r.child=t)}if(x=t.child,!If(t,m)){var C=x.memoizedProps;if(a=a.compare,a=a!==null?a:Ha,a(C,c)&&t.ref===r.ref)return fr(t,r,m)}return r.flags|=1,t=sr(x,c),t.ref=r.ref,t.return=r,r.child=t}function Zx(t,r,a,c,m){if(t!==null){var x=t.memoizedProps;if(Ha(x,c)&&t.ref===r.ref)if(kt=!1,r.pendingProps=c=x,If(t,m))(t.flags&131072)!==0&&(kt=!0);else return r.lanes=t.lanes,fr(t,r,m)}return Mf(t,r,a,c,m)}function Kx(t,r,a){var c=r.pendingProps,m=c.children,x=t!==null?t.memoizedState:null;if(c.mode==="hidden"){if((r.flags&128)!==0){if(c=x!==null?x.baseLanes|a:a,t!==null){for(m=r.child=t.child,x=0;m!==null;)x=x|m.lanes|m.childLanes,m=m.sibling;r.childLanes=x&~c}else r.childLanes=0,r.child=null;return Wx(t,r,c,a)}if((a&536870912)!==0)r.memoizedState={baseLanes:0,cachePool:null},t!==null&&Ul(r,x!==null?x.cachePool:null),x!==null?Zg(r,x):cf(),Ix(r);else return r.lanes=r.childLanes=536870912,Wx(t,r,x!==null?x.baseLanes|a:a,a)}else x!==null?(Ul(r,x.cachePool),Zg(r,x),Vr(),r.memoizedState=null):(t!==null&&Ul(r,null),cf(),Vr());return Rt(t,r,m,a),r.child}function Wx(t,r,a,c){var m=nf();return m=m===null?null:{parent:_t._currentValue,pool:m},r.memoizedState={baseLanes:a,cachePool:m},t!==null&&Ul(r,null),cf(),Ix(r),t!==null&&Va(t,r,c,!0),null}function rc(t,r){var a=r.ref;if(a===null)t!==null&&t.ref!==null&&(r.flags|=4194816);else{if(typeof a!="function"&&typeof a!="object")throw Error(s(284));(t===null||t.ref!==a)&&(r.flags|=4194816)}}function Mf(t,r,a,c,m){return Ro(r),a=ff(t,r,a,c,void 0,m),c=mf(),t!==null&&!kt?(hf(t,r,m),fr(t,r,m)):(et&&c&&Fd(r),r.flags|=1,Rt(t,r,a,m),r.child)}function Qx(t,r,a,c,m,x){return Ro(r),r.updateQueue=null,a=Wg(r,c,a,m),Kg(t),c=mf(),t!==null&&!kt?(hf(t,r,x),fr(t,r,x)):(et&&c&&Fd(r),r.flags|=1,Rt(t,r,a,x),r.child)}function Jx(t,r,a,c,m){if(Ro(r),r.stateNode===null){var x=ys,C=a.contextType;typeof C=="object"&&C!==null&&(x=Ht(C)),x=new a(c,x),r.memoizedState=x.state!==null&&x.state!==void 0?x.state:null,x.updater=kf,r.stateNode=x,x._reactInternals=r,x=r.stateNode,x.props=c,x.state=r.memoizedState,x.refs={},of(r),C=a.contextType,x.context=typeof C=="object"&&C!==null?Ht(C):ys,x.state=r.memoizedState,C=a.getDerivedStateFromProps,typeof C=="function"&&(Cf(r,a,C,c),x.state=r.memoizedState),typeof a.getDerivedStateFromProps=="function"||typeof x.getSnapshotBeforeUpdate=="function"||typeof x.UNSAFE_componentWillMount!="function"&&typeof x.componentWillMount!="function"||(C=x.state,typeof x.componentWillMount=="function"&&x.componentWillMount(),typeof x.UNSAFE_componentWillMount=="function"&&x.UNSAFE_componentWillMount(),C!==x.state&&kf.enqueueReplaceState(x,x.state,null),Ka(r,c,x,m),Za(),x.state=r.memoizedState),typeof x.componentDidMount=="function"&&(r.flags|=4194308),c=!0}else if(t===null){x=r.stateNode;var R=r.memoizedProps,$=zo(a,R);x.props=$;var J=x.context,ie=a.contextType;C=ys,typeof ie=="object"&&ie!==null&&(C=Ht(ie));var me=a.getDerivedStateFromProps;ie=typeof me=="function"||typeof x.getSnapshotBeforeUpdate=="function",R=r.pendingProps!==R,ie||typeof x.UNSAFE_componentWillReceiveProps!="function"&&typeof x.componentWillReceiveProps!="function"||(R||J!==C)&&Bx(r,x,c,C),Hr=!1;var ne=r.memoizedState;x.state=ne,Ka(r,c,x,m),Za(),J=r.memoizedState,R||ne!==J||Hr?(typeof me=="function"&&(Cf(r,a,me,c),J=r.memoizedState),($=Hr||Hx(r,a,$,c,ne,J,C))?(ie||typeof x.UNSAFE_componentWillMount!="function"&&typeof x.componentWillMount!="function"||(typeof x.componentWillMount=="function"&&x.componentWillMount(),typeof x.UNSAFE_componentWillMount=="function"&&x.UNSAFE_componentWillMount()),typeof x.componentDidMount=="function"&&(r.flags|=4194308)):(typeof x.componentDidMount=="function"&&(r.flags|=4194308),r.memoizedProps=c,r.memoizedState=J),x.props=c,x.state=J,x.context=C,c=$):(typeof x.componentDidMount=="function"&&(r.flags|=4194308),c=!1)}else{x=r.stateNode,sf(t,r),C=r.memoizedProps,ie=zo(a,C),x.props=ie,me=r.pendingProps,ne=x.context,J=a.contextType,$=ys,typeof J=="object"&&J!==null&&($=Ht(J)),R=a.getDerivedStateFromProps,(J=typeof R=="function"||typeof x.getSnapshotBeforeUpdate=="function")||typeof x.UNSAFE_componentWillReceiveProps!="function"&&typeof x.componentWillReceiveProps!="function"||(C!==me||ne!==$)&&Bx(r,x,c,$),Hr=!1,ne=r.memoizedState,x.state=ne,Ka(r,c,x,m),Za();var oe=r.memoizedState;C!==me||ne!==oe||Hr||t!==null&&t.dependencies!==null&&Hl(t.dependencies)?(typeof R=="function"&&(Cf(r,a,R,c),oe=r.memoizedState),(ie=Hr||Hx(r,a,ie,c,ne,oe,$)||t!==null&&t.dependencies!==null&&Hl(t.dependencies))?(J||typeof x.UNSAFE_componentWillUpdate!="function"&&typeof x.componentWillUpdate!="function"||(typeof x.componentWillUpdate=="function"&&x.componentWillUpdate(c,oe,$),typeof x.UNSAFE_componentWillUpdate=="function"&&x.UNSAFE_componentWillUpdate(c,oe,$)),typeof x.componentDidUpdate=="function"&&(r.flags|=4),typeof x.getSnapshotBeforeUpdate=="function"&&(r.flags|=1024)):(typeof x.componentDidUpdate!="function"||C===t.memoizedProps&&ne===t.memoizedState||(r.flags|=4),typeof x.getSnapshotBeforeUpdate!="function"||C===t.memoizedProps&&ne===t.memoizedState||(r.flags|=1024),r.memoizedProps=c,r.memoizedState=oe),x.props=c,x.state=oe,x.context=$,c=ie):(typeof x.componentDidUpdate!="function"||C===t.memoizedProps&&ne===t.memoizedState||(r.flags|=4),typeof x.getSnapshotBeforeUpdate!="function"||C===t.memoizedProps&&ne===t.memoizedState||(r.flags|=1024),c=!1)}return x=c,rc(t,r),c=(r.flags&128)!==0,x||c?(x=r.stateNode,a=c&&typeof a.getDerivedStateFromError!="function"?null:x.render(),r.flags|=1,t!==null&&c?(r.child=As(r,t.child,null,m),r.child=As(r,null,a,m)):Rt(t,r,a,m),r.memoizedState=x.state,t=r.child):t=fr(t,r,m),t}function e0(t,r,a,c){return Pa(),r.flags|=256,Rt(t,r,a,c),r.child}var Tf={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function Rf(t){return{baseLanes:t,cachePool:Pg()}}function Df(t,r,a){return t=t!==null?t.childLanes&~a:0,r&&(t|=gn),t}function t0(t,r,a){var c=r.pendingProps,m=!1,x=(r.flags&128)!==0,C;if((C=x)||(C=t!==null&&t.memoizedState===null?!1:(Et.current&2)!==0),C&&(m=!0,r.flags&=-129),C=(r.flags&32)!==0,r.flags&=-33,t===null){if(et){if(m?$r(r):Vr(),et){var R=ht,$;if($=R){e:{for($=R,R=On;$.nodeType!==8;){if(!R){R=null;break e}if($=Nn($.nextSibling),$===null){R=null;break e}}R=$}R!==null?(r.memoizedState={dehydrated:R,treeContext:Co!==null?{id:ar,overflow:ir}:null,retryLane:536870912,hydrationErrors:null},$=Qt(18,null,null,0),$.stateNode=R,$.return=r,r.child=$,Ut=r,ht=null,$=!0):$=!1}$||Mo(r)}if(R=r.memoizedState,R!==null&&(R=R.dehydrated,R!==null))return gm(R)?r.lanes=32:r.lanes=536870912,null;dr(r)}return R=c.children,c=c.fallback,m?(Vr(),m=r.mode,R=oc({mode:"hidden",children:R},m),c=jo(c,m,a,null),R.return=r,c.return=r,R.sibling=c,r.child=R,m=r.child,m.memoizedState=Rf(a),m.childLanes=Df(t,C,a),r.memoizedState=Tf,c):($r(r),Of(r,R))}if($=t.memoizedState,$!==null&&(R=$.dehydrated,R!==null)){if(x)r.flags&256?($r(r),r.flags&=-257,r=zf(t,r,a)):r.memoizedState!==null?(Vr(),r.child=t.child,r.flags|=128,r=null):(Vr(),m=c.fallback,R=r.mode,c=oc({mode:"visible",children:c.children},R),m=jo(m,R,a,null),m.flags|=2,c.return=r,m.return=r,c.sibling=m,r.child=c,As(r,t.child,null,a),c=r.child,c.memoizedState=Rf(a),c.childLanes=Df(t,C,a),r.memoizedState=Tf,r=m);else if($r(r),gm(R)){if(C=R.nextSibling&&R.nextSibling.dataset,C)var J=C.dgst;C=J,c=Error(s(419)),c.stack="",c.digest=C,$a({value:c,source:null,stack:null}),r=zf(t,r,a)}else if(kt||Va(t,r,a,!1),C=(a&t.childLanes)!==0,kt||C){if(C=lt,C!==null&&(c=a&-a,c=(c&42)!==0?1:wa(c),c=(c&(C.suspendedLanes|a))!==0?0:c,c!==0&&c!==$.retryLane))throw $.retryLane=c,vs(t,c),rn(C,t,c),Gx;R.data==="$?"||Jf(),r=zf(t,r,a)}else R.data==="$?"?(r.flags|=192,r.child=t.child,r=null):(t=$.treeContext,ht=Nn(R.nextSibling),Ut=r,et=!0,Ao=null,On=!1,t!==null&&(mn[hn++]=ar,mn[hn++]=ir,mn[hn++]=Co,ar=t.id,ir=t.overflow,Co=r),r=Of(r,c.children),r.flags|=4096);return r}return m?(Vr(),m=c.fallback,R=r.mode,$=t.child,J=$.sibling,c=sr($,{mode:"hidden",children:c.children}),c.subtreeFlags=$.subtreeFlags&65011712,J!==null?m=sr(J,m):(m=jo(m,R,a,null),m.flags|=2),m.return=r,c.return=r,c.sibling=m,r.child=c,c=m,m=r.child,R=t.child.memoizedState,R===null?R=Rf(a):($=R.cachePool,$!==null?(J=_t._currentValue,$=$.parent!==J?{parent:J,pool:J}:$):$=Pg(),R={baseLanes:R.baseLanes|a,cachePool:$}),m.memoizedState=R,m.childLanes=Df(t,C,a),r.memoizedState=Tf,c):($r(r),a=t.child,t=a.sibling,a=sr(a,{mode:"visible",children:c.children}),a.return=r,a.sibling=null,t!==null&&(C=r.deletions,C===null?(r.deletions=[t],r.flags|=16):C.push(t)),r.child=a,r.memoizedState=null,a)}function Of(t,r){return r=oc({mode:"visible",children:r},t.mode),r.return=t,t.child=r}function oc(t,r){return t=Qt(22,t,null,r),t.lanes=0,t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null},t}function zf(t,r,a){return As(r,t.child,null,a),t=Of(r,r.pendingProps.children),t.flags|=2,r.memoizedState=null,t}function n0(t,r,a){t.lanes|=r;var c=t.alternate;c!==null&&(c.lanes|=r),Qd(t.return,r,a)}function Lf(t,r,a,c,m){var x=t.memoizedState;x===null?t.memoizedState={isBackwards:r,rendering:null,renderingStartTime:0,last:c,tail:a,tailMode:m}:(x.isBackwards=r,x.rendering=null,x.renderingStartTime=0,x.last=c,x.tail=a,x.tailMode=m)}function r0(t,r,a){var c=r.pendingProps,m=c.revealOrder,x=c.tail;if(Rt(t,r,c.children,a),c=Et.current,(c&2)!==0)c=c&1|2,r.flags|=128;else{if(t!==null&&(t.flags&128)!==0)e:for(t=r.child;t!==null;){if(t.tag===13)t.memoizedState!==null&&n0(t,a,r);else if(t.tag===19)n0(t,a,r);else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===r)break e;for(;t.sibling===null;){if(t.return===null||t.return===r)break e;t=t.return}t.sibling.return=t.return,t=t.sibling}c&=1}switch(ee(Et,c),m){case"forwards":for(a=r.child,m=null;a!==null;)t=a.alternate,t!==null&&ec(t)===null&&(m=a),a=a.sibling;a=m,a===null?(m=r.child,r.child=null):(m=a.sibling,a.sibling=null),Lf(r,!1,m,a,x);break;case"backwards":for(a=null,m=r.child,r.child=null;m!==null;){if(t=m.alternate,t!==null&&ec(t)===null){r.child=m;break}t=m.sibling,m.sibling=a,a=m,m=t}Lf(r,!0,a,null,x);break;case"together":Lf(r,!1,null,null,void 0);break;default:r.memoizedState=null}return r.child}function fr(t,r,a){if(t!==null&&(r.dependencies=t.dependencies),Fr|=r.lanes,(a&r.childLanes)===0)if(t!==null){if(Va(t,r,a,!1),(a&r.childLanes)===0)return null}else return null;if(t!==null&&r.child!==t.child)throw Error(s(153));if(r.child!==null){for(t=r.child,a=sr(t,t.pendingProps),r.child=a,a.return=r;t.sibling!==null;)t=t.sibling,a=a.sibling=sr(t,t.pendingProps),a.return=r;a.sibling=null}return r.child}function If(t,r){return(t.lanes&r)!==0?!0:(t=t.dependencies,!!(t!==null&&Hl(t)))}function Z_(t,r,a){switch(r.tag){case 3:ae(r,r.stateNode.containerInfo),Ir(r,_t,t.memoizedState.cache),Pa();break;case 27:case 5:le(r);break;case 4:ae(r,r.stateNode.containerInfo);break;case 10:Ir(r,r.type,r.memoizedProps.value);break;case 13:var c=r.memoizedState;if(c!==null)return c.dehydrated!==null?($r(r),r.flags|=128,null):(a&r.child.childLanes)!==0?t0(t,r,a):($r(r),t=fr(t,r,a),t!==null?t.sibling:null);$r(r);break;case 19:var m=(t.flags&128)!==0;if(c=(a&r.childLanes)!==0,c||(Va(t,r,a,!1),c=(a&r.childLanes)!==0),m){if(c)return r0(t,r,a);r.flags|=128}if(m=r.memoizedState,m!==null&&(m.rendering=null,m.tail=null,m.lastEffect=null),ee(Et,Et.current),c)break;return null;case 22:case 23:return r.lanes=0,Kx(t,r,a);case 24:Ir(r,_t,t.memoizedState.cache)}return fr(t,r,a)}function o0(t,r,a){if(t!==null)if(t.memoizedProps!==r.pendingProps)kt=!0;else{if(!If(t,a)&&(r.flags&128)===0)return kt=!1,Z_(t,r,a);kt=(t.flags&131072)!==0}else kt=!1,et&&(r.flags&1048576)!==0&&Og(r,Il,r.index);switch(r.lanes=0,r.tag){case 16:e:{t=r.pendingProps;var c=r.elementType,m=c._init;if(c=m(c._payload),r.type=c,typeof c=="function")Yd(c)?(t=zo(c,t),r.tag=1,r=Jx(null,r,c,t,a)):(r.tag=0,r=Mf(null,r,c,t,a));else{if(c!=null){if(m=c.$$typeof,m===A){r.tag=11,r=Xx(null,r,c,t,a);break e}else if(m===H){r.tag=14,r=Fx(null,r,c,t,a);break e}}throw r=I(c)||c,Error(s(306,r,""))}}return r;case 0:return Mf(t,r,r.type,r.pendingProps,a);case 1:return c=r.type,m=zo(c,r.pendingProps),Jx(t,r,c,m,a);case 3:e:{if(ae(r,r.stateNode.containerInfo),t===null)throw Error(s(387));c=r.pendingProps;var x=r.memoizedState;m=x.element,sf(t,r),Ka(r,c,null,a);var C=r.memoizedState;if(c=C.cache,Ir(r,_t,c),c!==x.cache&&Jd(r,[_t],a,!0),Za(),c=C.element,x.isDehydrated)if(x={element:c,isDehydrated:!1,cache:C.cache},r.updateQueue.baseState=x,r.memoizedState=x,r.flags&256){r=e0(t,r,c,a);break e}else if(c!==m){m=dn(Error(s(424)),r),$a(m),r=e0(t,r,c,a);break e}else{switch(t=r.stateNode.containerInfo,t.nodeType){case 9:t=t.body;break;default:t=t.nodeName==="HTML"?t.ownerDocument.body:t}for(ht=Nn(t.firstChild),Ut=r,et=!0,Ao=null,On=!0,a=Lx(r,null,c,a),r.child=a;a;)a.flags=a.flags&-3|4096,a=a.sibling}else{if(Pa(),c===m){r=fr(t,r,a);break e}Rt(t,r,c,a)}r=r.child}return r;case 26:return rc(t,r),t===null?(a=lv(r.type,null,r.pendingProps,null))?r.memoizedState=a:et||(a=r.type,t=r.pendingProps,c=vc(fe.current).createElement(a),c[Ct]=r,c[It]=t,Ot(c,a,t),vt(c),r.stateNode=c):r.memoizedState=lv(r.type,t.memoizedProps,r.pendingProps,t.memoizedState),null;case 27:return le(r),t===null&&et&&(c=r.stateNode=sv(r.type,r.pendingProps,fe.current),Ut=r,On=!0,m=ht,Qr(r.type)?(xm=m,ht=Nn(c.firstChild)):ht=m),Rt(t,r,r.pendingProps.children,a),rc(t,r),t===null&&(r.flags|=4194304),r.child;case 5:return t===null&&et&&((m=c=ht)&&(c=NE(c,r.type,r.pendingProps,On),c!==null?(r.stateNode=c,Ut=r,ht=Nn(c.firstChild),On=!1,m=!0):m=!1),m||Mo(r)),le(r),m=r.type,x=r.pendingProps,C=t!==null?t.memoizedProps:null,c=x.children,mm(m,x)?c=null:C!==null&&mm(m,C)&&(r.flags|=32),r.memoizedState!==null&&(m=ff(t,r,P_,null,null,a),vi._currentValue=m),rc(t,r),Rt(t,r,c,a),r.child;case 6:return t===null&&et&&((t=a=ht)&&(a=_E(a,r.pendingProps,On),a!==null?(r.stateNode=a,Ut=r,ht=null,t=!0):t=!1),t||Mo(r)),null;case 13:return t0(t,r,a);case 4:return ae(r,r.stateNode.containerInfo),c=r.pendingProps,t===null?r.child=As(r,null,c,a):Rt(t,r,c,a),r.child;case 11:return Xx(t,r,r.type,r.pendingProps,a);case 7:return Rt(t,r,r.pendingProps,a),r.child;case 8:return Rt(t,r,r.pendingProps.children,a),r.child;case 12:return Rt(t,r,r.pendingProps.children,a),r.child;case 10:return c=r.pendingProps,Ir(r,r.type,c.value),Rt(t,r,c.children,a),r.child;case 9:return m=r.type._context,c=r.pendingProps.children,Ro(r),m=Ht(m),c=c(m),r.flags|=1,Rt(t,r,c,a),r.child;case 14:return Fx(t,r,r.type,r.pendingProps,a);case 15:return Zx(t,r,r.type,r.pendingProps,a);case 19:return r0(t,r,a);case 31:return c=r.pendingProps,a=r.mode,c={mode:c.mode,children:c.children},t===null?(a=oc(c,a),a.ref=r.ref,r.child=a,a.return=r,r=a):(a=sr(t.child,c),a.ref=r.ref,r.child=a,a.return=r,r=a),r;case 22:return Kx(t,r,a);case 24:return Ro(r),c=Ht(_t),t===null?(m=nf(),m===null&&(m=lt,x=ef(),m.pooledCache=x,x.refCount++,x!==null&&(m.pooledCacheLanes|=a),m=x),r.memoizedState={parent:c,cache:m},of(r),Ir(r,_t,m)):((t.lanes&a)!==0&&(sf(t,r),Ka(r,null,null,a),Za()),m=t.memoizedState,x=r.memoizedState,m.parent!==c?(m={parent:c,cache:c},r.memoizedState=m,r.lanes===0&&(r.memoizedState=r.updateQueue.baseState=m),Ir(r,_t,c)):(c=x.cache,Ir(r,_t,c),c!==m.cache&&Jd(r,[_t],a,!0))),Rt(t,r,r.pendingProps.children,a),r.child;case 29:throw r.pendingProps}throw Error(s(156,r.tag))}function mr(t){t.flags|=4}function s0(t,r){if(r.type!=="stylesheet"||(r.state.loading&4)!==0)t.flags&=-16777217;else if(t.flags|=16777216,!mv(r)){if(r=pn.current,r!==null&&((Ke&4194048)===Ke?zn!==null:(Ke&62914560)!==Ke&&(Ke&536870912)===0||r!==zn))throw Xa=rf,$g;t.flags|=8192}}function sc(t,r){r!==null&&(t.flags|=4),t.flags&16384&&(r=t.tag!==22?hl():536870912,t.lanes|=r,Ds|=r)}function ri(t,r){if(!et)switch(t.tailMode){case"hidden":r=t.tail;for(var a=null;r!==null;)r.alternate!==null&&(a=r),r=r.sibling;a===null?t.tail=null:a.sibling=null;break;case"collapsed":a=t.tail;for(var c=null;a!==null;)a.alternate!==null&&(c=a),a=a.sibling;c===null?r||t.tail===null?t.tail=null:t.tail.sibling=null:c.sibling=null}}function ft(t){var r=t.alternate!==null&&t.alternate.child===t.child,a=0,c=0;if(r)for(var m=t.child;m!==null;)a|=m.lanes|m.childLanes,c|=m.subtreeFlags&65011712,c|=m.flags&65011712,m.return=t,m=m.sibling;else for(m=t.child;m!==null;)a|=m.lanes|m.childLanes,c|=m.subtreeFlags,c|=m.flags,m.return=t,m=m.sibling;return t.subtreeFlags|=c,t.childLanes=a,r}function K_(t,r,a){var c=r.pendingProps;switch(Zd(r),r.tag){case 31:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return ft(r),null;case 1:return ft(r),null;case 3:return a=r.stateNode,c=null,t!==null&&(c=t.memoizedState.cache),r.memoizedState.cache!==c&&(r.flags|=2048),cr(_t),xe(),a.pendingContext&&(a.context=a.pendingContext,a.pendingContext=null),(t===null||t.child===null)&&(Ua(r)?mr(r):t===null||t.memoizedState.isDehydrated&&(r.flags&256)===0||(r.flags|=1024,Ig())),ft(r),null;case 26:return a=r.memoizedState,t===null?(mr(r),a!==null?(ft(r),s0(r,a)):(ft(r),r.flags&=-16777217)):a?a!==t.memoizedState?(mr(r),ft(r),s0(r,a)):(ft(r),r.flags&=-16777217):(t.memoizedProps!==c&&mr(r),ft(r),r.flags&=-16777217),null;case 27:ce(r),a=fe.current;var m=r.type;if(t!==null&&r.stateNode!=null)t.memoizedProps!==c&&mr(r);else{if(!c){if(r.stateNode===null)throw Error(s(166));return ft(r),null}t=se.current,Ua(r)?zg(r):(t=sv(m,c,a),r.stateNode=t,mr(r))}return ft(r),null;case 5:if(ce(r),a=r.type,t!==null&&r.stateNode!=null)t.memoizedProps!==c&&mr(r);else{if(!c){if(r.stateNode===null)throw Error(s(166));return ft(r),null}if(t=se.current,Ua(r))zg(r);else{switch(m=vc(fe.current),t){case 1:t=m.createElementNS("http://www.w3.org/2000/svg",a);break;case 2:t=m.createElementNS("http://www.w3.org/1998/Math/MathML",a);break;default:switch(a){case"svg":t=m.createElementNS("http://www.w3.org/2000/svg",a);break;case"math":t=m.createElementNS("http://www.w3.org/1998/Math/MathML",a);break;case"script":t=m.createElement("div"),t.innerHTML="