community[patch]: Release 0.0.2 (#14610)

This commit is contained in:
Bagatur
2023-12-12 09:58:04 -08:00
committed by GitHub
parent 5d1deddbfb
commit d388863a3b
6 changed files with 85 additions and 45 deletions

View File

@@ -1,4 +1,38 @@
from langchain_community.tools.render import format_tool_to_openai_function
from langchain_core.tools import BaseTool
# For backwards compatibility
__all__ = ["format_tool_to_openai_function"]
from langchain_community.utils.openai_functions import (
FunctionDescription,
ToolDescription,
convert_pydantic_to_openai_function,
)
def format_tool_to_openai_function(tool: BaseTool) -> FunctionDescription:
"""Format tool into the OpenAI function API."""
if tool.args_schema:
return convert_pydantic_to_openai_function(
tool.args_schema, name=tool.name, description=tool.description
)
else:
return {
"name": tool.name,
"description": tool.description,
"parameters": {
# This is a hack to get around the fact that some tools
# do not expose an args_schema, and expect an argument
# which is a string.
# And Open AI does not support an array type for the
# parameters.
"properties": {
"__arg1": {"title": "__arg1", "type": "string"},
},
"required": ["__arg1"],
"type": "object",
},
}
def format_tool_to_openai_tool(tool: BaseTool) -> ToolDescription:
"""Format tool into the OpenAI function API."""
function = format_tool_to_openai_function(tool)
return {"type": "function", "function": function}

View File

@@ -4,8 +4,6 @@ Depending on the LLM you are using and the prompting strategy you are using,
you may want Tools to be rendered in a different way.
This module contains various ways to render tools.
"""
from typing import List
from langchain_core.tools import BaseTool
from langchain_community.utils.openai_functions import (
@@ -15,37 +13,6 @@ from langchain_community.utils.openai_functions import (
)
def render_text_description(tools: List[BaseTool]) -> str:
"""Render the tool name and description in plain text.
Output will be in the format of:
.. code-block:: markdown
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:
.. code-block:: markdown
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)
def format_tool_to_openai_function(tool: BaseTool) -> FunctionDescription:
"""Format tool into the OpenAI function API."""
if tool.args_schema:

View File

@@ -3421,7 +3421,7 @@ files = [
[[package]]
name = "langchain-core"
version = "0.0.13"
version = "0.1.0"
description = "Building applications with LLMs through composability"
optional = false
python-versions = ">=3.8.1,<4.0"
@@ -8485,4 +8485,4 @@ extended-testing = ["aiosqlite", "aleph-alpha-client", "anthropic", "arxiv", "as
[metadata]
lock-version = "2.0"
python-versions = ">=3.8.1,<4.0"
content-hash = "a77af01e299fdeb0849f20f2ae8a49030bd38993ff603f464c1c1f6a170d1d9b"
content-hash = "e3bacf389a13d283c4dd29e3a673e1863826b4e98785c666fefc10cf714c2f6f"

View File

@@ -1,6 +1,6 @@
[tool.poetry]
name = "langchain-community"
version = "0.0.1"
version = "0.0.2"
description = "Community contributed LangChain integrations."
authors = []
license = "MIT"
@@ -9,7 +9,7 @@ repository = "https://github.com/langchain-ai/langchain"
[tool.poetry.dependencies]
python = ">=3.8.1,<4.0"
langchain-core = ">=0.0.13,<0.1"
langchain-core = "^0.1"
SQLAlchemy = ">=1.4,<3"
requests = "^2"
PyYAML = ">=5.3"

View File

@@ -1,42 +0,0 @@
from typing import List
import pytest
from langchain_core.tools import BaseTool, tool
from langchain_community.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