Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

core, community: deprecate tool.__call__ #20900

Merged
merged 2 commits into from
Apr 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ def test_edenai_call() -> None:
"""Test simple call to edenai's speech to text endpoint."""
speech2text = EdenAiSpeechToTextTool(providers=["amazon"])

output = speech2text(
output = speech2text.invoke(
"https://audio-samples.github.io/samples/mp3/blizzard_unconditional/sample-0.mp3"
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ def test_edenai_call() -> None:
providers=["amazon"], language="en", voice="MALE"
)

output = text2speech("hello")
output = text2speech.invoke("hello")
parsed_url = urlparse(output)

assert text2speech.name == "edenai_text_to_speech"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ def test_edenai_call() -> None:
"""Test simple call to edenai's image moderation endpoint."""
image_moderation = EdenAiExplicitImageTool(providers=["amazon"])

output = image_moderation("https://static.javatpoint.com/images/objects.jpg")
output = image_moderation.invoke("https://static.javatpoint.com/images/objects.jpg")

assert image_moderation.name == "edenai_image_explicit_content_detection"
assert image_moderation.feature == "image"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ def test_edenai_call() -> None:
"""Test simple call to edenai's object detection endpoint."""
object_detection = EdenAiObjectDetectionTool(providers=["google"])

output = object_detection("https://static.javatpoint.com/images/objects.jpg")
output = object_detection.invoke("https://static.javatpoint.com/images/objects.jpg")

assert object_detection.name == "edenai_object_detection"
assert object_detection.feature == "image"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ def test_edenai_call() -> None:
"""Test simple call to edenai's identity parser endpoint."""
id_parser = EdenAiParsingIDTool(providers=["amazon"], language="en")

output = id_parser(
output = id_parser.invoke(
"https://www.citizencard.com/images/citizencard-uk-id-card-2023.jpg"
)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@ def test_edenai_call() -> None:
"""Test simple call to edenai's invoice parser endpoint."""
invoice_parser = EdenAiParsingInvoiceTool(providers=["amazon"], language="en")

output = invoice_parser("https://app.edenai.run/assets/img/data_1.72e3bdcc.png")
output = invoice_parser.invoke(
"https://app.edenai.run/assets/img/data_1.72e3bdcc.png"
)

assert invoice_parser.name == "edenai_invoice_parsing"
assert invoice_parser.feature == "ocr"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def test_edenai_call() -> None:

text_moderation = EdenAiTextModerationTool(providers=["openai"], language="en")

output = text_moderation("i hate you")
output = text_moderation.invoke("i hate you")

assert text_moderation.name == "edenai_explicit_content_detection_text"
assert text_moderation.feature == "text"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -151,7 +151,7 @@ def _load_arxiv_from_universal_entry(**kwargs: Any) -> BaseTool:

def test_load_arxiv_from_universal_entry() -> None:
arxiv_tool = _load_arxiv_from_universal_entry()
output = arxiv_tool("Caprice Stanley")
output = arxiv_tool.invoke("Caprice Stanley")
assert (
"On Mixing Behavior of a Family of Random Walks" in output
), "failed to fetch a valid result"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def ddg_installed() -> bool:
def test_ddg_search_tool() -> None:
keywords = "Bella Ciao"
tool = DuckDuckGoSearchRun()
result = tool(keywords)
result = tool.invoke(keywords)
print(result) # noqa: T201
assert len(result.split()) > 20

Expand All @@ -29,6 +29,6 @@ def test_ddg_search_tool() -> None:
def test_ddg_search_news_tool() -> None:
keywords = "Tesla"
tool = DuckDuckGoSearchResults(source="news")
result = tool(keywords)
result = tool.invoke(keywords)
print(result) # noqa: T201
assert len(result.split()) > 20
Original file line number Diff line number Diff line change
Expand Up @@ -147,7 +147,7 @@ def test_load_pupmed_from_universal_entry() -> None:
"Examining the Validity of ChatGPT in Identifying "
"Relevant Nephrology Literature"
)
output = pubmed_tool(search_string)
output = pubmed_tool.invoke(search_string)
test_string = (
"Examining the Validity of ChatGPT in Identifying "
"Relevant Nephrology Literature: Findings and Implications"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,6 @@ def test_parse_response_format(mock_post: MagicMock) -> None:
]
mock_post.return_value = mock_response

result = tool("some query")
result = tool.invoke("some query")

assert result == 'nsfw_likelihood: 5\n"offensive": 4\n"hate_speech": 5'
2 changes: 2 additions & 0 deletions libs/core/langchain_core/tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
from inspect import signature
from typing import Any, Awaitable, Callable, Dict, List, Optional, Tuple, Type, Union

from langchain_core._api import deprecated
from langchain_core.callbacks import (
AsyncCallbackManager,
AsyncCallbackManagerForToolRun,
Expand Down Expand Up @@ -559,6 +560,7 @@ async def arun(
)
return observation

@deprecated("0.1.47", alternative="invoke", removal="0.3.0")
def __call__(self, tool_input: str, callbacks: Callbacks = None) -> str:
"""Make tool callable."""
return self.run(tool_input, callbacks=callbacks)
Expand Down
8 changes: 4 additions & 4 deletions libs/core/tests/unit_tests/test_tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ def search_api(query: str) -> str:
assert isinstance(search_api, BaseTool)
assert search_api.name == "search_api"
assert not search_api.return_direct
assert search_api("test") == "API result"
assert search_api.invoke("test") == "API result"


class _MockSchema(BaseModel):
Expand Down Expand Up @@ -562,7 +562,7 @@ def search_api(query: str) -> str:
def test_create_tool_positional_args() -> None:
"""Test that positional arguments are allowed."""
test_tool = Tool("test_name", lambda x: x, "test_description")
assert test_tool("foo") == "foo"
assert test_tool.invoke("foo") == "foo"
assert test_tool.name == "test_name"
assert test_tool.description == "test_description"
assert test_tool.is_single_input
Expand All @@ -572,7 +572,7 @@ def test_create_tool_keyword_args() -> None:
"""Test that keyword arguments are allowed."""
test_tool = Tool(name="test_name", func=lambda x: x, description="test_description")
assert test_tool.is_single_input
assert test_tool("foo") == "foo"
assert test_tool.invoke("foo") == "foo"
assert test_tool.name == "test_name"
assert test_tool.description == "test_description"

Expand All @@ -590,7 +590,7 @@ async def _test_func(x: str) -> str:
coroutine=_test_func,
)
assert test_tool.is_single_input
assert test_tool("foo") == "foo"
assert test_tool.invoke("foo") == "foo"
assert test_tool.name == "test_name"
assert test_tool.description == "test_description"
assert test_tool.coroutine is not None
Expand Down
Loading