mirror of
https://github.com/hwchase17/langchain.git
synced 2025-05-21 15:07:35 +00:00
core: dont mutate tool_kwargs during tool run (#28824)
fixes https://github.com/langchain-ai/langchain/issues/24621
This commit is contained in:
parent
033ac41760
commit
6a37899b39
@ -687,9 +687,9 @@ class ChildTool(BaseTool):
|
||||
context.run(_set_config_context, child_config)
|
||||
tool_args, tool_kwargs = self._to_args_and_kwargs(tool_input, tool_call_id)
|
||||
if signature(self._run).parameters.get("run_manager"):
|
||||
tool_kwargs["run_manager"] = run_manager
|
||||
tool_kwargs = tool_kwargs | {"run_manager": run_manager}
|
||||
if config_param := _get_runnable_config_param(self._run):
|
||||
tool_kwargs[config_param] = config
|
||||
tool_kwargs = tool_kwargs | {config_param: config}
|
||||
response = context.run(self._run, *tool_args, **tool_kwargs)
|
||||
if self.response_format == "content_and_artifact":
|
||||
if not isinstance(response, tuple) or len(response) != 2:
|
||||
|
@ -2268,3 +2268,20 @@ def test_tool_return_output_mixin() -> None:
|
||||
assert foo.invoke(
|
||||
{"type": "tool_call", "args": {"x": 0}, "name": "foo", "id": "bar"}
|
||||
) == Bar(x=0)
|
||||
|
||||
|
||||
def test_tool_mutate_input() -> None:
|
||||
class MyTool(BaseTool):
|
||||
name: str = "MyTool"
|
||||
description: str = "a tool"
|
||||
|
||||
def _run(
|
||||
self,
|
||||
x: str,
|
||||
run_manager: Optional[CallbackManagerForToolRun] = None,
|
||||
) -> str:
|
||||
return "hi"
|
||||
|
||||
my_input = {"x": "hi"}
|
||||
MyTool().invoke(my_input)
|
||||
assert my_input == {"x": "hi"}
|
||||
|
Loading…
Reference in New Issue
Block a user