diff --git a/letta/helpers/converters.py b/letta/helpers/converters.py index 3ad3ce67..b2a43986 100644 --- a/letta/helpers/converters.py +++ b/letta/helpers/converters.py @@ -39,6 +39,7 @@ from letta.schemas.tool_rule import ( MaxCountPerStepToolRule, ParentToolRule, RequiredBeforeExitToolRule, + RequiresApprovalToolRule, TerminalToolRule, ToolRule, ) @@ -139,6 +140,8 @@ def deserialize_tool_rule( return ParentToolRule(**data) elif rule_type == ToolRuleType.required_before_exit: return RequiredBeforeExitToolRule(**data) + elif rule_type == ToolRuleType.requires_approval: + return RequiresApprovalToolRule(**data) raise ValueError(f"Unknown ToolRule type: {rule_type}") diff --git a/letta/schemas/enums.py b/letta/schemas/enums.py index a9d1f320..b8b62802 100644 --- a/letta/schemas/enums.py +++ b/letta/schemas/enums.py @@ -94,6 +94,7 @@ class ToolRuleType(str, Enum): max_count_per_step = "max_count_per_step" parent_last_tool = "parent_last_tool" required_before_exit = "required_before_exit" # tool must be called before loop can exit + requires_approval = "requires_approval" class FileProcessingStatus(str, Enum): diff --git a/letta/schemas/tool_rule.py b/letta/schemas/tool_rule.py index 9c310f58..6056f3b4 100644 --- a/letta/schemas/tool_rule.py +++ b/letta/schemas/tool_rule.py @@ -272,6 +272,18 @@ class MaxCountPerStepToolRule(BaseToolRule): return available_tools +class RequiresApprovalToolRule(BaseToolRule): + """ + Represents a tool rule configuration which requires approval before the tool can be invoked. + """ + + type: Literal[ToolRuleType.requires_approval] = ToolRuleType.requires_approval + + def get_valid_tools(self, tool_call_history: List[str], available_tools: Set[str], last_function_response: Optional[str]) -> Set[str]: + """Does not enforce any restrictions on which tools are valid""" + return available_tools + + ToolRule = Annotated[ Union[ ChildToolRule, @@ -282,6 +294,7 @@ ToolRule = Annotated[ RequiredBeforeExitToolRule, MaxCountPerStepToolRule, ParentToolRule, + RequiresApprovalToolRule, ], Field(discriminator="type"), ]