Authorize Existing Tools
In this guide, we’ll show you how to authorize LangChain tools like the GmailToolkit
using Arcade. You may already have tools you want to use, and this guide will show you how to authorize them. Arcade handles retrieving, authorizing, and managing tokens so you don’t have to.
Install the required packages
Instead of the langchain_arcade
package, you only need the arcadepy
package to authorize existing tools since Arcade tools are not being used.
pip install langchain-openai langgraph arcadepy langchain-google-community
Import the necessary packages
import os
from arcadepy import Arcade
from google.oauth2.credentials import Credentials
from langchain_google_community import GmailToolkit
from langchain_google_community.gmail.utils import build_resource_service
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
Initialize the Arcade client
api_key = os.getenv("ARCADE_API_KEY")
client = Arcade(api_key=api_key)
Start the authorization process for Gmail
user_id = "[email protected]"
auth_response = client.auth.start(
user_id=user_id,
provider="google",
scopes=["https://www.googleapis.com/auth/gmail.readonly"],
)
Prompt the user to authorize
if auth_response.status != "completed":
print("Please authorize the application in your browser:")
print(auth_response.url)
The auth_response.status
will be "completed"
if the user has already authorized the application, so they won’t be prompted to authorize again.
Wait for authorization completion
auth_response = client.auth.wait_for_completion(auth_response)
The wait_for_completion
method will do nothing if the user has already authorized the application.
Use the token to initialize the Gmail toolkit
creds = Credentials(auth_response.context.token)
api_resource = build_resource_service(credentials=creds)
toolkit = GmailToolkit(api_resource=api_resource)
tools = toolkit.get_tools()
Initialize the agent
model = ChatOpenAI(model="gpt-4o")
agent_executor = create_react_agent(model, tools)
Execute the agent
example_query = "Read my latest emails and summarize them."
events = agent_executor.stream(
{"messages": [("user", example_query)]},
stream_mode="values",
)
for event in events:
event["messages"][-1].pretty_print()
Next Steps
Now you’re ready to explore more LangChain tools with Arcade. Try integrating additional toolkits and crafting more complex queries to enhance your AI workflows.