From ca1afa72138910d41d0e0e7f2c3e641dbfc3bb4a Mon Sep 17 00:00:00 2001 From: Harrison Chase Date: Sat, 10 Jun 2023 14:37:26 -0700 Subject: [PATCH] add test for structured tools (#5989) --- tests/unit_tests/tools/test_base.py | 32 +++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/tests/unit_tests/tools/test_base.py b/tests/unit_tests/tools/test_base.py index 6638a09531..cea017d79d 100644 --- a/tests/unit_tests/tools/test_base.py +++ b/tests/unit_tests/tools/test_base.py @@ -556,3 +556,35 @@ async def test_async_exception_handling_non_tool_exception() -> None: _tool = _FakeExceptionTool(exception=ValueError()) with pytest.raises(ValueError): await _tool.arun({}) + + +def test_structured_tool_from_function() -> None: + """Test that structured tools can be created from functions.""" + + def foo(bar: int, baz: str) -> str: + """Docstring + Args: + bar: int + baz: str + """ + raise NotImplementedError() + + structured_tool = StructuredTool.from_function(foo) + assert structured_tool.name == "foo" + assert structured_tool.args == { + "bar": {"title": "Bar", "type": "integer"}, + "baz": {"title": "Baz", "type": "string"}, + } + + assert structured_tool.args_schema.schema() == { + "properties": { + "bar": {"title": "Bar", "type": "integer"}, + "baz": {"title": "Baz", "type": "string"}, + }, + "title": "fooSchemaSchema", + "type": "object", + } + + prefix = "foo(bar: int, baz: str) -> str - " + assert foo.__doc__ is not None + assert structured_tool.description == prefix + foo.__doc__.strip()