- Notifications
You must be signed in to change notification settings - Fork1k
WIP: Temporal Agent#2225
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
base:main
Are you sure you want to change the base?
WIP: Temporal Agent#2225
Conversation
github-actionsbot commentedJul 17, 2025 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
Docs Preview
|
mattbrandman commentedJul 17, 2025
I'm so excited for this to be natively supported |
nir-litt commentedJul 17, 2025
Thank you for taking the time to look into native temporal support - this is a topic I’m really interested in seeing progress on. One key feature I’d love to see is support for HITL (Human-in-the-Loop) during tool calls when using temporal and agents. My suggestion on how to achieve that (and not being to specific for HITL) is to pause the workflow before a tool call waiting on a condition for a signal. This will allow, among other things, to wait for human input. Currently, tool calls are handled like this: asyncdefcall_tool(self,name:str,tool_args:dict[str,Any],ctx:RunContext[AgentDepsT],tool:ToolsetTool[AgentDepsT])->Any:serialized_run_context=self.serialize_run_context(ctx)returnawaitworkflow.execute_activity(activity=self.call_tool_activity,arg=FunctionCallToolParams(name=name,tool_args=tool_args,serialized_run_context=serialized_run_context),**self.temporal_settings.__dict__, ) To add the wait support, we can do something like:
asyncdefcall_tool(self,name:str,tool_args:dict[str,Any],ctx:RunContext[AgentDepsT],tool:ToolsetTool[AgentDepsT])->Any:# --- ADDED: tool call pause using signal and wait_condition ---awaitworkflow.wait_condition(lambda:self.allow_tool_call)# --- END ADDED CODE ---serialized_run_context=self.serialize_run_context(ctx)activity_result=awaitworkflow.execute_activity(activity=self.call_tool_activity,arg=FunctionCallToolParams(name=name,tool_args=tool_args,serialized_run_context=serialized_run_context),**self.temporal_settings.__dict__, )# --- ADDED: tool call reset state ---self.allow_tool_call=Falsereturnactivity_result# --- END ADDED CODE --- This will allow users to define their workflow something like: @workflow.signaldefapprove_tool_call(self): ...# some code to determine the tool is OK to runself.allow_tool_call=True This way, the workflow will pause at the tool call and only continue once the signal is approved. of course this would be optional and the default ,that can be overwritten by the user, will be to approve the request Appreciate the ongoing work! |
Closes#1975