feat: add client side tool calling support (#5313)

This commit is contained in:
cthomas
2025-10-10 13:50:55 -07:00
committed by Caren Thomas
parent f79a47dbc1
commit 3128b5e126
5 changed files with 86 additions and 32 deletions

View File

@@ -27,6 +27,7 @@ from letta.otel.metric_registry import MetricRegistry
from letta.otel.tracing import tracer
from letta.schemas.agent import AgentState
from letta.schemas.enums import MessageRole
from letta.schemas.letta_message import ToolReturn as LettaToolReturn
from letta.schemas.letta_message_content import (
OmittedReasoningContent,
ReasoningContent,
@@ -169,6 +170,20 @@ def create_input_messages(input_messages: List[MessageCreate], agent_id: str, ti
def create_approval_response_message_from_input(agent_state: AgentState, input_message: ApprovalCreate) -> List[Message]:
def maybe_convert_tool_return_message(maybe_tool_return: LettaToolReturn):
if isinstance(maybe_tool_return, LettaToolReturn):
packaged_function_response = package_function_response(
maybe_tool_return.status == "success", maybe_tool_return.tool_return, agent_state.timezone
)
return ToolReturn(
tool_call_id=maybe_tool_return.tool_call_id,
status=maybe_tool_return.status,
func_response=packaged_function_response,
stdout=maybe_tool_return.stdout,
stderr=maybe_tool_return.stderr,
)
return maybe_tool_return
return [
Message(
role=MessageRole.approval,
@@ -177,6 +192,7 @@ def create_approval_response_message_from_input(agent_state: AgentState, input_m
approval_request_id=input_message.approval_request_id,
approve=input_message.approve,
denial_reason=input_message.reason,
approvals=[maybe_convert_tool_return_message(approval) for approval in input_message.approvals],
)
]