tool rendering (#10786)

This commit is contained in:
Harrison Chase 2023-09-19 12:05:39 -07:00 committed by GitHub
parent 1b050b98f5
commit c68be4eb2b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 75 additions and 0 deletions

View File

@ -0,0 +1,33 @@
from typing import List
from langchain.tools.base import BaseTool
def render_text_description(tools: List[BaseTool]) -> str:
"""Render the tool name and description in plain text.
Output will be in the format of:
```
search: This tool is used for search
calculator: This tool is used for math
```
"""
return "\n".join([f"{tool.name}: {tool.description}" for tool in tools])
def render_text_description_and_args(tools: List[BaseTool]) -> str:
"""Render the tool name, description, and args in plain text.
Output will be in the format of:
```
search: This tool is used for search, args: {"query": {"type": "string"}}
calculator: This tool is used for math, args: {"expression": {"type": "string"}}
```
"""
tool_strings = []
for tool in tools:
args_schema = str(tool.args)
tool_strings.append(f"{tool.name}: {tool.description}, args: {args_schema}")
return "\n".join(tool_strings)

View File

@ -0,0 +1,42 @@
from typing import List
import pytest
from langchain.tools.base import BaseTool, tool
from langchain.tools.render import (
render_text_description,
render_text_description_and_args,
)
@tool
def search(query: str) -> str:
"""Lookup things online."""
return "foo"
@tool
def calculator(expression: str) -> str:
"""Do math."""
return "bar"
@pytest.fixture
def tools() -> List[BaseTool]:
return [search, calculator] # type: ignore
def test_render_text_description(tools: List[BaseTool]) -> None:
tool_string = render_text_description(tools)
expected_string = """search: search(query: str) -> str - Lookup things online.
calculator: calculator(expression: str) -> str - Do math."""
assert tool_string == expected_string
def test_render_text_description_and_args(tools: List[BaseTool]) -> None:
tool_string = render_text_description_and_args(tools)
expected_string = """search: search(query: str) -> str - Lookup things online., \
args: {'query': {'title': 'Query', 'type': 'string'}}
calculator: calculator(expression: str) -> str - Do math., \
args: {'expression': {'title': 'Expression', 'type': 'string'}}"""
assert tool_string == expected_string