mirror of
https://github.com/kennethreitz/langchain.git
synced 2026-06-05 23:00:18 +00:00
da462d9dd4
Description: Update documentation to
1) point to updated documentation links at Zapier.com (we've revamped
our help docs and paths), and
2) To provide clarity how to use the wrapper with an access token for
OAuth support
Demo:
Initializing the Zapier Wrapper with an OAuth Access Token
`ZapierNLAWrapper(zapier_nla_oauth_access_token="<redacted>")`
Using LangChain to resolve the current weather in Vancouver BC
leveraging Zapier NLA to lookup weather by coords.
```
> Entering new chain...
I need to use a tool to get the current weather.
Action: The Weather: Get Current Weather
Action Input: Get the current weather for Vancouver BC
Observation: {"coord__lon": -123.1207, "coord__lat": 49.2827, "weather": [{"id": 802, "main": "Clouds", "description": "scattered clouds", "icon": "03d", "icon_url": "http://openweathermap.org/img/wn/03d@2x.png"}], "weather[]icon_url": ["http://openweathermap.org/img/wn/03d@2x.png"], "weather[]icon": ["03d"], "weather[]id": [802], "weather[]description": ["scattered clouds"], "weather[]main": ["Clouds"], "base": "stations", "main__temp": 71.69, "main__feels_like": 71.56, "main__temp_min": 67.64, "main__temp_max": 76.39, "main__pressure": 1015, "main__humidity": 64, "visibility": 10000, "wind__speed": 3, "wind__deg": 155, "wind__gust": 11.01, "clouds__all": 41, "dt": 1687806607, "sys__type": 2, "sys__id": 2011597, "sys__country": "CA", "sys__sunrise": 1687781297, "sys__sunset": 1687839730, "timezone": -25200, "id": 6173331, "name": "Vancouver", "cod": 200, "summary": "scattered clouds", "_zap_search_was_found_status": true}
Thought: I now know the current weather in Vancouver BC.
Final Answer: The current weather in Vancouver BC is scattered clouds with a temperature of 71.69 and wind speed of 3
```
69 lines
2.4 KiB
Python
69 lines
2.4 KiB
Python
"""Test building the Zapier tool, not running it."""
|
|
import pytest
|
|
|
|
from langchain.tools.zapier.prompt import BASE_ZAPIER_TOOL_PROMPT
|
|
from langchain.tools.zapier.tool import ZapierNLARunAction
|
|
from langchain.utilities.zapier import ZapierNLAWrapper
|
|
|
|
|
|
def test_default_base_prompt() -> None:
|
|
"""Test that the default prompt is being inserted."""
|
|
tool = ZapierNLARunAction(
|
|
action_id="test",
|
|
zapier_description="test",
|
|
params_schema={"test": "test"},
|
|
api_wrapper=ZapierNLAWrapper(zapier_nla_api_key="test"),
|
|
)
|
|
|
|
# Test that the base prompt was successfully assigned to the default prompt
|
|
assert tool.base_prompt == BASE_ZAPIER_TOOL_PROMPT
|
|
assert tool.description == BASE_ZAPIER_TOOL_PROMPT.format(
|
|
zapier_description="test",
|
|
params=str(list({"test": "test"}.keys())),
|
|
)
|
|
|
|
|
|
def test_custom_base_prompt() -> None:
|
|
"""Test that a custom prompt is being inserted."""
|
|
base_prompt = "Test. {zapier_description} and {params}."
|
|
tool = ZapierNLARunAction(
|
|
action_id="test",
|
|
zapier_description="test",
|
|
params_schema={"test": "test"},
|
|
base_prompt=base_prompt,
|
|
api_wrapper=ZapierNLAWrapper(zapier_nla_api_key="test"),
|
|
)
|
|
|
|
# Test that the base prompt was successfully assigned to the default prompt
|
|
assert tool.base_prompt == base_prompt
|
|
assert tool.description == "Test. test and ['test']."
|
|
|
|
|
|
def test_custom_base_prompt_fail() -> None:
|
|
"""Test validating an invalid custom prompt."""
|
|
base_prompt = "Test. {zapier_description}."
|
|
with pytest.raises(ValueError):
|
|
ZapierNLARunAction(
|
|
action_id="test",
|
|
zapier_description="test",
|
|
params={"test": "test"},
|
|
base_prompt=base_prompt,
|
|
api_wrapper=ZapierNLAWrapper(zapier_nla_api_key="test"),
|
|
)
|
|
|
|
|
|
def test_wrapper_fails_no_api_key_or_access_token_initialization() -> None:
|
|
"""Test Wrapper requires either an API Key or OAuth Access Token."""
|
|
with pytest.raises(ValueError):
|
|
ZapierNLAWrapper()
|
|
|
|
|
|
def test_wrapper_api_key_initialization() -> None:
|
|
"""Test Wrapper initializes with an API Key."""
|
|
ZapierNLAWrapper(zapier_nla_api_key="test")
|
|
|
|
|
|
def test_wrapper_access_token_initialization() -> None:
|
|
"""Test Wrapper initializes with an API Key."""
|
|
ZapierNLAWrapper(zapier_nla_oauth_access_token="test")
|