@@ -119,7 +119,7 @@ def __init__(
119119 max_agent_steps : int = 100 ,
120120 streaming_callback : StreamingCallbackT | None = None ,
121121 raise_on_tool_invocation_failure : bool = False ,
122- confirmation_strategies : dict [str , ConfirmationStrategy ] | None = None ,
122+ confirmation_strategies : dict [str | tuple [ str , ...] , ConfirmationStrategy ] | None = None ,
123123 tool_invoker_kwargs : dict [str , Any ] | None = None ,
124124 chat_message_store : ChatMessageStore | None = None ,
125125 memory_store : MemoryStore | None = None ,
@@ -843,9 +843,20 @@ def from_dict(cls, data: dict[str, Any]) -> "Agent":
843843
844844 deserialize_tools_or_toolset_inplace (init_params , key = "tools" )
845845
846- if "confirmation_strategies" in init_params and init_params ["confirmation_strategies" ] is not None :
847- for name in init_params ["confirmation_strategies" ]:
848- deserialize_component_inplace (init_params ["confirmation_strategies" ], key = name )
846+ if init_params .get ("confirmation_strategies" ) is not None :
847+ restored : dict [str | tuple [str , ...], Any ] = {}
848+
849+ for raw_key in init_params ["confirmation_strategies" ].keys ():
850+ deserialize_component_inplace (init_params ["confirmation_strategies" ], key = raw_key )
851+ strategy = init_params ["confirmation_strategies" ][raw_key ]
852+
853+ if isinstance (raw_key , list ):
854+ key = tuple (raw_key )
855+ else :
856+ key = raw_key
857+ restored [key ] = strategy
858+
859+ init_params ["confirmation_strategies" ] = restored
849860
850861 # NOTE: This is different from the base Agent class to handle ChatMessageStore deserialization
851862 if "chat_message_store" in init_params and init_params ["chat_message_store" ] is not None :
0 commit comments