ccurme
975b6129f6
core[patch]: support conversion of runnables to tools (#23992)
Open to other thoughts on UX.
string input:
```python
as_tool = retriever.as_tool()
as_tool.invoke("cat") # [Document(...), ...]
```
typed dict input:
```python
class Args(TypedDict):
key: int
def f(x: Args) -> str:
return str(x["key"] * 2)
as_tool = RunnableLambda(f).as_tool(
name="my tool",
description="description", # name, description are inferred if not supplied
)
as_tool.invoke({"key": 3}) # "6"
```
for untyped dict input, allow specification of parameters + types
```python
def g(x: Dict[str, Any]) -> str:
return str(x["key"] * 2)
as_tool = RunnableLambda(g).as_tool(arg_types={"key": int})
result = as_tool.invoke({"key": 3}) # "6"
```
Passing the `arg_types` is slightly awkward but necessary to ensure tool
calls populate parameters correctly:
```python
from typing import Any, Dict
from langchain_core.runnables import RunnableLambda
from langchain_openai import ChatOpenAI
def f(x: Dict[str, Any]) -> str:
return str(x["key"] * 2)
runnable = RunnableLambda(f)
as_tool = runnable.as_tool(arg_types={"key": int})
llm = ChatOpenAI().bind_tools([as_tool])
result = llm.invoke("Use the tool on 3.")
tool_call = result.tool_calls[0]
args = tool_call["args"]
assert args == {"key": 3}
as_tool.run(args)
```
Contrived (?) example with langgraph agent as a tool:
```python
from typing import List, Literal
from typing_extensions import TypedDict
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
llm = ChatOpenAI(temperature=0)
def magic_function(input: int) -> int:
"""Applies a magic function to an input."""
return input + 2
agent_1 = create_react_agent(llm, [magic_function])
class Message(TypedDict):
role: Literal["human"]
content: str
agent_tool = agent_1.as_tool(
arg_types={"messages": List[Message]},
name="Jeeves",
description="Ask Jeeves.",
)
agent_2 = create_react_agent(llm, [agent_tool])
```
---------
Co-authored-by: Erick Friis <erick@langchain.dev>
2024-07-10 19:29:59 -04:00
..
2024-07-03 10:33:27 -07:00
2024-07-03 10:33:27 -07:00
2024-06-27 16:35:50 -04:00
2024-05-20 18:23:06 -07:00
2024-06-10 16:59:28 -04:00
2024-03-28 03:19:02 +00:00
2023-12-19 08:58:24 -05:00
2024-05-22 15:21:08 -07:00
2024-01-22 11:11:03 -08:00
2023-12-11 13:53:30 -08:00
2024-07-03 10:33:27 -07:00
2024-07-03 10:33:27 -07:00
2024-06-10 16:59:28 -04:00
2024-07-01 17:13:23 -04:00
2024-06-06 09:38:50 -07:00
2024-01-25 15:24:19 -08:00
2024-07-03 10:33:27 -07:00
2024-06-18 03:16:24 +00:00
2024-07-10 19:29:59 -04:00
2024-07-10 14:51:03 +00:00
2023-12-11 13:53:30 -08:00
2023-12-11 13:53:30 -08:00
2024-07-03 10:33:27 -07:00
2024-07-03 10:33:27 -07:00
2024-07-03 10:33:27 -07:00
2024-07-03 10:33:27 -07:00
2024-05-03 14:29:36 -04:00
2023-12-11 13:53:30 -08:00
2023-12-11 13:53:30 -08:00
2024-01-25 15:24:19 -08:00
2024-05-13 14:55:07 -04:00
2023-12-11 13:53:30 -08:00
2024-05-03 14:29:36 -04:00
2023-12-11 13:53:30 -08:00
2023-12-11 13:53:30 -08:00
2023-12-11 13:53:30 -08:00
2024-02-09 16:13:30 -08:00
2024-07-03 10:33:27 -07:00
2024-07-05 15:11:10 +00:00
2024-07-03 10:33:27 -07:00
2024-07-03 10:33:27 -07:00
2024-01-25 15:24:19 -08:00
2024-05-03 14:29:36 -04:00
2024-04-29 15:49:53 +00:00
2024-07-03 10:33:27 -07:00
2024-07-03 10:33:27 -07:00
2024-06-06 15:45:22 -07:00
2024-07-03 10:33:27 -07:00
2024-03-29 00:23:14 +00:00
2024-07-03 10:33:27 -07:00
2024-07-03 10:33:27 -07:00
2024-03-08 20:33:22 +00:00
2024-07-10 14:51:03 +00:00
2024-03-11 11:58:10 -07:00
2024-07-03 10:33:27 -07:00
2024-05-13 14:55:07 -04:00
2024-05-13 14:55:07 -04:00
2024-07-03 10:33:27 -07:00
2024-07-03 10:33:27 -07:00
2023-12-11 13:53:30 -08:00
2024-07-03 10:33:27 -07:00
2024-06-27 16:35:50 -04:00
2024-07-10 14:51:03 +00:00
2024-07-03 10:33:27 -07:00
2024-07-03 10:33:27 -07:00
2024-07-03 10:33:27 -07:00
2024-07-03 10:33:27 -07:00
2024-01-25 15:24:19 -08:00
2024-01-25 15:24:19 -08:00
2024-07-03 10:33:27 -07:00
2024-06-13 12:14:11 -07:00
2024-03-05 15:56:58 -08:00
2024-01-28 16:45:21 -08:00
2024-05-22 21:31:58 +00:00
2024-07-03 10:33:27 -07:00
2024-07-03 10:33:27 -07:00
2024-07-03 10:33:27 -07:00
2024-07-10 14:51:03 +00:00
2024-06-25 19:26:32 +00:00
2024-06-25 19:26:32 +00:00
2024-01-25 13:18:46 -08:00
2024-07-03 10:33:27 -07:00
2023-12-11 13:53:30 -08:00
2024-01-25 13:18:46 -08:00
2024-05-06 13:27:54 -07:00