mirror of
https://github.com/hwchase17/langchain.git
synced 2025-05-22 07:27:45 +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)
|
context.run(_set_config_context, child_config)
|
||||||
tool_args, tool_kwargs = self._to_args_and_kwargs(tool_input, tool_call_id)
|
tool_args, tool_kwargs = self._to_args_and_kwargs(tool_input, tool_call_id)
|
||||||
if signature(self._run).parameters.get("run_manager"):
|
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):
|
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)
|
response = context.run(self._run, *tool_args, **tool_kwargs)
|
||||||
if self.response_format == "content_and_artifact":
|
if self.response_format == "content_and_artifact":
|
||||||
if not isinstance(response, tuple) or len(response) != 2:
|
if not isinstance(response, tuple) or len(response) != 2:
|
||||||
|
@ -2268,3 +2268,20 @@ def test_tool_return_output_mixin() -> None:
|
|||||||
assert foo.invoke(
|
assert foo.invoke(
|
||||||
{"type": "tool_call", "args": {"x": 0}, "name": "foo", "id": "bar"}
|
{"type": "tool_call", "args": {"x": 0}, "name": "foo", "id": "bar"}
|
||||||
) == Bar(x=0)
|
) == 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