MCPcopy Create free account
hub / github.com/aiwaves-cn/agents / do_node_optim

Method do_node_optim

src/agents/optimization/node_optimizer.py:240–316  ·  view source on GitHub ↗

Executes the node optimization based on the given method. Note: If an error occurs during optimization, an exception is raised instead of returning, because the upper layer will handle the error and return the original unoptimized node. Args: node (Node

(node: Node, optim_method_str: str, logger)

Source from the content-addressed store, hash-verified

238
239 @staticmethod
240 def do_node_optim(node: Node, optim_method_str: str, logger):
241 """
242 Executes the node optimization based on the given method.
243
244 Note: If an error occurs during optimization, an exception is raised instead of returning,
245 because the upper layer will handle the error and return the original unoptimized node.
246
247 Args:
248 node (Node): The node to be optimized.
249 optim_method_str (str): The optimization method in JSON string format.
250 logger: The logger for logging information and errors.
251
252 Returns:
253 tuple: The optimized Node object, a boolean indicating if the update was successful,
254 and the optimization method (JSON if successful, otherwise a string).
255 """
256 optim_method = json.loads(optim_method_str)
257
258 # Validity check, attempt update only if successful
259 check_status, reasons = NodeOptimizer.validate_dict(optim_method)
260
261 if not check_status:
262 logger.error(f"Error in validating optim_method: {reasons}, optim_method: {optim_method}")
263 raise ValueError(f"Error in validating optim_method: {reasons}")
264 else:
265 logger.debug(f"succeed in validating optim_method, load the json successfully.")
266 # try to optim the node
267 for rule in optim_method:
268 action = rule.get("action")
269 if action == "add_role":
270 role_name = rule["role_name"]
271 role_description = rule["role_description"]
272 role_prompt = rule["role_prompt"]
273 role_prompt_key = "step_" + role_name
274 assert role_name not in node.node_prompt_paddings.keys(), f"Role name '{role_name}' already exists."
275 node.node_prompt_templates[role_prompt_key] = role_prompt
276 node.node_roles_description[role_name] = role_description
277 node.node_prompt_paddings[role_name] = {
278 role_prompt_key: {"value_source": "case", "value": "input_data"}}
279
280 elif action == "delete_role":
281 role_name = rule["role_name"]
282 node.node_roles.pop(role_name)
283 node.node_roles_description.pop(role_name)
284 node.node_primary_prompts.pop(role_name)
285 node.node_prompt_templates.pop(role_name)
286 node.node_prompt_paddings.pop(role_name)
287 if len(node.node_prompt_paddings) == 0:
288 raise ValueError("The node should have at least one role.")
289 # begin role may need to be updated
290 if node.begin_role == role_name:
291 node.begin_role = next(iter(node.node_prompt_templates))
292
293 elif action == "update_role_description":
294 role_name = rule["role_name"]
295 role_description = rule["role_description"]
296 node.node_roles_description[role_name] = role_description
297

Callers 1

optimize_single_nodeMethod · 0.95

Calls 2

validate_dictMethod · 0.80
errorMethod · 0.80

Tested by

no test coverage detected