@@ -142,6 +142,14 @@ class AgentEscalationRecipientType(str, CaseInsensitiveEnum):
142142 ARGUMENT_GROUP_NAME = "ArgumentGroupName"
143143
144144
145+ class AgentEscalationChannelType (str , CaseInsensitiveEnum ):
146+ """Agent escalation channel type enumeration."""
147+
148+ ACTION_CENTER = "actionCenter"
149+ ACTION_CENTER_QUICK_FORM = "actionCenterQuickForm"
150+ UNKNOWN = "unknown" # fallback branch discriminator
151+
152+
145153class AgentContextRetrievalMode (str , CaseInsensitiveEnum ):
146154 """Agent context retrieval mode enumeration."""
147155
@@ -691,13 +699,9 @@ def _resolve_task_title(v: Any) -> Any:
691699 return v
692700
693701
694- class AgentEscalationChannelProperties (BaseResourceProperties ):
695- """Agent escalation channel properties model ."""
702+ class BaseEscalationChannelProperties (BaseResourceProperties ):
703+ """Fields shared by every escalation channel's properties."""
696704
697- app_name : str | None = Field (default = None , alias = "appName" )
698- app_version : int = Field (..., alias = "appVersion" )
699- folder_name : Optional [str ] = Field (None , alias = "folderName" )
700- resource_key : str | None = Field (default = None , alias = "resourceKey" )
701705 is_actionable_message_enabled : Optional [bool ] = Field (
702706 None , alias = "isActionableMessageEnabled"
703707 )
@@ -706,29 +710,44 @@ class AgentEscalationChannelProperties(BaseResourceProperties):
706710 )
707711
708712
709- class AgentEscalationChannel (BaseCfg ):
710- """Agent escalation channel model."""
713+ class AgentEscalationChannelProperties (BaseEscalationChannelProperties ):
714+ """Action Center app-task channel properties (channel type ``actionCenter``)."""
715+
716+ app_name : str | None = Field (default = None , alias = "appName" )
717+ app_version : int = Field (..., alias = "appVersion" )
718+ folder_name : Optional [str ] = Field (None , alias = "folderName" )
719+ resource_key : str | None = Field (default = None , alias = "resourceKey" )
720+
721+
722+ class AgentQuickFormChannelProperties (BaseEscalationChannelProperties ):
723+ """Quick Form channel properties (channel type ``actionCenterQuickForm``)."""
724+
725+ schema : Dict [str , Any ] = Field (...) # type: ignore[assignment]
726+
727+ @property
728+ def schema_id (self ) -> str | None :
729+ """Return the schema id nested inside schema."""
730+ return self .schema .get ("schemaId" )
731+
732+
733+ class BaseAgentEscalationChannel (BaseCfg ):
734+ """Fields shared by every escalation channel variant."""
711735
712736 id : Optional [str ] = Field (None , alias = "id" )
713737 name : str = Field (..., alias = "name" )
714- type : str = Field (alias = "type" )
715738 description : str = Field (..., alias = "description" )
716739 input_schema : Dict [str , Any ] = Field (..., alias = "inputSchema" )
717740 output_schema : Dict [str , Any ] = Field (EMPTY_SCHEMA , alias = "outputSchema" )
718741 argument_properties : Dict [str , AgentToolArgumentProperties ] = Field (
719742 {}, alias = "argumentProperties"
720743 )
721744 outcome_mapping : Optional [Dict [str , str ]] = Field (None , alias = "outcomeMapping" )
722- properties : AgentEscalationChannelProperties = Field (..., alias = "properties" )
723745 recipients : List [AgentEscalationRecipient ] = Field (..., alias = "recipients" )
724746 task_title : Optional [Union [str , TaskTitle ]] = Field (
725747 default = "Escalation Task" , alias = "taskTitle"
726748 )
727749 priority : Optional [str ] = None
728750 labels : List [str ] = Field (default_factory = list )
729- # schema_body avoids shadowing pydantic.BaseModel.schema(); JSON alias stays "schema".
730- schema_id : Optional [str ] = Field (None , alias = "schemaId" )
731- schema_body : Optional [Dict [str , Any ]] = Field (None , alias = "schema" )
732751
733752 @model_validator (mode = "before" )
734753 @classmethod
@@ -737,6 +756,46 @@ def _apply_task_title_resolution(cls, v: Any) -> Any:
737756 return _resolve_task_title (v )
738757
739758
759+ class AgentActionCenterEscalationChannel (BaseAgentEscalationChannel ):
760+ """Action Center app-task escalation channel."""
761+
762+ type : Literal [AgentEscalationChannelType .ACTION_CENTER ] = Field (
763+ default = AgentEscalationChannelType .ACTION_CENTER , alias = "type"
764+ )
765+ properties : AgentEscalationChannelProperties = Field (..., alias = "properties" )
766+
767+
768+ class AgentQuickFormEscalationChannel (BaseAgentEscalationChannel ):
769+ """Quick Form escalation channel; FormLib schema lives in ``properties.schema``."""
770+
771+ type : Literal [AgentEscalationChannelType .ACTION_CENTER_QUICK_FORM ] = Field (
772+ default = AgentEscalationChannelType .ACTION_CENTER_QUICK_FORM , alias = "type"
773+ )
774+ properties : AgentQuickFormChannelProperties = Field (..., alias = "properties" )
775+
776+
777+ class AgentUnknownEscalationChannel (BaseAgentEscalationChannel ):
778+ """Fallback for unknown or future escalation channel types."""
779+
780+ type : Literal [AgentEscalationChannelType .UNKNOWN ] = Field (
781+ default = AgentEscalationChannelType .UNKNOWN , alias = "type"
782+ )
783+ properties : BaseEscalationChannelProperties = Field (
784+ default_factory = BaseEscalationChannelProperties , alias = "properties"
785+ )
786+
787+
788+ AgentEscalationChannel = Annotated [
789+ Union [
790+ AgentActionCenterEscalationChannel ,
791+ AgentQuickFormEscalationChannel ,
792+ AgentUnknownEscalationChannel ,
793+ ],
794+ Field (discriminator = "type" ),
795+ _case_insensitive_enum_validator ("type" , AgentEscalationChannelType ),
796+ ]
797+
798+
740799class AgentEscalationResourceConfig (BaseAgentResourceConfig ):
741800 """Agent escalation resource configuration model."""
742801
@@ -772,23 +831,6 @@ class AgentIxpVsEscalationResourceConfig(BaseAgentResourceConfig):
772831 )
773832
774833
775- class AgentQuickFormEscalationResourceConfig (BaseAgentResourceConfig ):
776- """Quick Form Agent escalation resource configuration model (escalationType=2).
777-
778- Quick Form escalations render a schema-first HITL task in Action Center via FormLib.
779- The schema (and its key) live on the channel (see AgentEscalationChannel.schema_id /
780- schema) and are sent inline to Orchestrator's GenericTasks/CreateTask endpoint.
781- """
782-
783- id : Optional [str ] = Field (None , alias = "id" )
784- resource_type : Literal [AgentResourceType .ESCALATION ] = Field (
785- alias = "$resourceType" , default = AgentResourceType .ESCALATION , frozen = True
786- )
787- channels : List [AgentEscalationChannel ] = Field (alias = "channels" )
788- is_agent_memory_enabled : bool = Field (default = False , alias = "isAgentMemoryEnabled" )
789- escalation_type : Literal [2 ] = Field (default = 2 , alias = "escalationType" )
790-
791-
792834class BaseAgentToolResourceConfig (BaseAgentResourceConfig ):
793835 """Base agent tool resource configuration model."""
794836
@@ -994,11 +1036,11 @@ class AgentUnknownToolResourceConfig(BaseAgentToolResourceConfig):
9941036 Field (discriminator = "type" ),
9951037]
9961038
1039+
9971040EscalationResourceConfig = Annotated [
9981041 Union [
9991042 Annotated [AgentEscalationResourceConfig , Tag (0 )],
10001043 Annotated [AgentIxpVsEscalationResourceConfig , Tag (1 )],
1001- Annotated [AgentQuickFormEscalationResourceConfig , Tag (2 )],
10021044 ],
10031045 Discriminator (lambda v : v .get ("escalation_type" ) or v .get ("escalationType" ) or 0 ),
10041046]
0 commit comments