Clean up of the Langgraph examples that are used for the documentation. Mostly just a restructuring for the update to ``langchain_arcade==1.0.0``
59 lines
1.9 KiB
Python
59 lines
1.9 KiB
Python
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
|
|
|
|
# Get the API key from the environment variable
|
|
api_key = os.getenv("ARCADE_API_KEY")
|
|
|
|
# Initialize the Arcade client
|
|
client = Arcade(api_key=api_key)
|
|
|
|
# Start the authorization process for Gmail
|
|
# see all possible gmail scopes here:
|
|
# https://developers.google.com/gmail/api/auth/scopes
|
|
user_id = "user@example.com"
|
|
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 not already completed
|
|
if auth_response.status != "completed":
|
|
print("Please authorize the application in your browser:")
|
|
print(auth_response.url)
|
|
|
|
# Wait for the user to complete the authorization process, if necessary...
|
|
auth_response = client.auth.wait_for_completion(auth_response)
|
|
|
|
# Obtain credentials using the authorization context
|
|
creds = Credentials(auth_response.context.token)
|
|
api_resource = build_resource_service(credentials=creds)
|
|
|
|
# Initialize the Gmail toolkit with the authorized API resource
|
|
toolkit = GmailToolkit(api_resource=api_resource)
|
|
|
|
# Retrieve the tools from the langchain gmail toolkit
|
|
tools = toolkit.get_tools()
|
|
|
|
# Initialize the language model and create an agent
|
|
llm = ChatOpenAI(model="gpt-4o")
|
|
agent_executor = create_react_agent(llm, tools)
|
|
|
|
# Define the user query
|
|
example_query = "Read my latest emails and summarize them."
|
|
|
|
# Execute the agent with the user query
|
|
events = agent_executor.stream(
|
|
{"messages": [("user", example_query)]},
|
|
stream_mode="values",
|
|
)
|
|
|
|
# Display the agent's response
|
|
for event in events:
|
|
event["messages"][-1].pretty_print()
|