feat: Force tool violation to continue (#2831)

This commit is contained in:
Matthew Zhou
2025-06-15 20:14:27 -07:00
committed by GitHub
parent 6efbc56e3b
commit 69434781be

View File

@@ -940,7 +940,10 @@ class LettaAgent(BaseAgent):
tool_call_id=tool_call_id,
request_heartbeat=request_heartbeat,
)
if tool_call_name not in valid_tool_names:
# Check if tool rule is violated - if so, we'll force continuation
tool_rule_violated = tool_call_name not in valid_tool_names
if tool_rule_violated:
base_error_message = f"[ToolConstraintError] Cannot call {tool_call_name}, valid tools to call include: {valid_tool_names}."
violated_rule_messages = tool_rules_solver.guess_rule_violation(tool_call_name)
if violated_rule_messages:
@@ -969,7 +972,7 @@ class LettaAgent(BaseAgent):
# get the function response limit
target_tool = next((x for x in agent_state.tools if x.name == tool_call_name), None)
return_char_limit = target_tool.return_char_limit
return_char_limit = target_tool.return_char_limit if target_tool else None
function_response_string = validate_function_response(
tool_execution_result.func_return, return_char_limit=return_char_limit, truncate=truncate
)
@@ -981,15 +984,20 @@ class LettaAgent(BaseAgent):
# 4. Register tool call with tool rule solver
# Resolve whether or not to continue stepping
continue_stepping = request_heartbeat
tool_rules_solver.register_tool_call(tool_name=tool_call_name)
if tool_rules_solver.is_terminal_tool(tool_name=tool_call_name):
if continue_stepping:
stop_reason = LettaStopReason(stop_reason=StopReasonType.tool_rule.value)
continue_stepping = False
elif tool_rules_solver.has_children_tools(tool_name=tool_call_name):
continue_stepping = True
elif tool_rules_solver.is_continue_tool(tool_name=tool_call_name):
# Force continuation if tool rule was violated to give the model another chance
if tool_rule_violated:
continue_stepping = True
else:
tool_rules_solver.register_tool_call(tool_name=tool_call_name)
if tool_rules_solver.is_terminal_tool(tool_name=tool_call_name):
if continue_stepping:
stop_reason = LettaStopReason(stop_reason=StopReasonType.tool_rule.value)
continue_stepping = False
elif tool_rules_solver.has_children_tools(tool_name=tool_call_name):
continue_stepping = True
elif tool_rules_solver.is_continue_tool(tool_name=tool_call_name):
continue_stepping = True
# 5a. Persist Steps to DB
# Following agent loop to persist this before messages