|
@@ -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)]
|