|  | @@ -1,4 +1,4 @@
 | 
	
		
			
				|  |  | -from ast import literal_eval
 | 
	
		
			
				|  |  | +import json
 | 
	
		
			
				|  |  |  from collections.abc import Generator, Mapping, Sequence
 | 
	
		
			
				|  |  |  from typing import Any, cast
 | 
	
		
			
				|  |  |  
 | 
	
	
		
			
				|  | @@ -143,15 +143,23 @@ class AgentNode(ToolNode):
 | 
	
		
			
				|  |  |                      raise ValueError(f"Variable {agent_input.value} does not exist")
 | 
	
		
			
				|  |  |                  parameter_value = variable.value
 | 
	
		
			
				|  |  |              elif agent_input.type in {"mixed", "constant"}:
 | 
	
		
			
				|  |  | -                segment_group = variable_pool.convert_template(str(agent_input.value))
 | 
	
		
			
				|  |  | +                # variable_pool.convert_template expects a string template,
 | 
	
		
			
				|  |  | +                # but if passing a dict, convert to JSON string first before rendering
 | 
	
		
			
				|  |  | +                try:
 | 
	
		
			
				|  |  | +                    parameter_value = json.dumps(agent_input.value, ensure_ascii=False)
 | 
	
		
			
				|  |  | +                except TypeError:
 | 
	
		
			
				|  |  | +                    parameter_value = str(agent_input.value)
 | 
	
		
			
				|  |  | +                segment_group = variable_pool.convert_template(parameter_value)
 | 
	
		
			
				|  |  |                  parameter_value = segment_group.log if for_log else segment_group.text
 | 
	
		
			
				|  |  | +                # variable_pool.convert_template returns a string,
 | 
	
		
			
				|  |  | +                # so we need to convert it back to a dictionary
 | 
	
		
			
				|  |  | +                try:
 | 
	
		
			
				|  |  | +                    parameter_value = json.loads(parameter_value)
 | 
	
		
			
				|  |  | +                except json.JSONDecodeError:
 | 
	
		
			
				|  |  | +                    parameter_value = parameter_value
 | 
	
		
			
				|  |  |              else:
 | 
	
		
			
				|  |  |                  raise ValueError(f"Unknown agent input type '{agent_input.type}'")
 | 
	
		
			
				|  |  | -            value = parameter_value.strip()
 | 
	
		
			
				|  |  | -            if (parameter_value.startswith("{") and parameter_value.endswith("}")) or (
 | 
	
		
			
				|  |  | -                parameter_value.startswith("[") and parameter_value.endswith("]")
 | 
	
		
			
				|  |  | -            ):
 | 
	
		
			
				|  |  | -                value = literal_eval(parameter_value)  # transform string to python object
 | 
	
		
			
				|  |  | +            value = parameter_value
 | 
	
		
			
				|  |  |              if parameter.type == "array[tools]":
 | 
	
		
			
				|  |  |                  value = cast(list[dict[str, Any]], value)
 | 
	
		
			
				|  |  |                  value = [tool for tool in value if tool.get("enabled", False)]
 |