Update Langgraph examples (#231)

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``
This commit is contained in:
Sam Partee 2025-01-26 23:38:59 -08:00 committed by GitHub
parent 7960158ee8
commit 778b7af83f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 50 additions and 90 deletions

View file

@ -0,0 +1,50 @@
import os
from langchain_arcade import ArcadeToolManager
from langchain_openai import ChatOpenAI
from langgraph.checkpoint.memory import MemorySaver
from langgraph.errors import NodeInterrupt
from langgraph.prebuilt import create_react_agent
# 1) Set API keys (place your real keys in env variables or directly below)
arcade_api_key = os.environ.get("ARCADE_API_KEY", "YOUR_ARCADE_API_KEY")
openai_api_key = os.environ.get("OPENAI_API_KEY", "YOUR_OPENAI_API_KEY")
# 2) Create an ArcadeToolManager and fetch tools from the "Google" toolkit.
manager = ArcadeToolManager(api_key=arcade_api_key)
# Tool names follow the format "ToolkitName.ToolName"
tools = manager.get_tools(tools=["Web.ScrapeUrl"])
print(manager.tools)
# Get all tools from a toolkit
tools = manager.get_tools(toolkits=["Google"])
print(manager.tools)
# 3) Create a ChatOpenAI model and bind the Arcade tools.
model = ChatOpenAI(model="gpt-4o", api_key=openai_api_key)
bound_model = model.bind_tools(tools)
# 4) Use MemorySaver for checkpointing.
memory = MemorySaver()
# 5) Create a ReAct-style agent from the prebuilt function.
graph = create_react_agent(model=bound_model, tools=tools, checkpointer=memory)
# 6) Provide basic config and a user query.
# Note: user_id is required for the tool to be authorized
config = {"configurable": {"thread_id": "1", "user_id": "user@example.coom"}}
user_input = {"messages": [("user", "List any new and important emails in my inbox.")]}
# 7) Stream the agent's output. If the tool is unauthorized, it may trigger NodeInterrupt.
try:
for chunk in graph.stream(user_input, config, stream_mode="values"):
chunk["messages"][-1].pretty_print()
except NodeInterrupt as exc:
print(f"\nNodeInterrupt occurred: {exc}")
print("Please authorize the tool or update the request, then re-run.")
# If you need to authorize, you can do so via:
# auth_res = manager.authorize("Google_ListEmails", user_id="someone@example.com")
# manager.wait_for_auth(auth_res.id)
# Then run the graph again or edit the final tool call and call graph.stream(None, config).

View file

@ -1,53 +0,0 @@
import os
# Import necessary modules and classes
from langchain_arcade import ArcadeToolManager
from langchain_core.messages import HumanMessage
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
"""
Example showing how to use pre-auth'd tokens for tools
this will not wait for the user to authorize the tool
if the tool is not authorized, it will return an error
to have the user authorize the tool, you can see the
example in langgraph_with_user_auth.py
"""
arcade_api_key = os.environ["ARCADE_API_KEY"]
openai_api_key = os.environ["OPENAI_API_KEY"]
# Initialize the tool manager that fetches
# tools from arcade and wraps them as langgraph tools
tool_manager = ArcadeToolManager(api_key=arcade_api_key)
tools = tool_manager.get_tools()
# Create an instance of the AI language model
model = ChatOpenAI(model="gpt-4o", api_key=openai_api_key)
# Init a prebuilt agent that can use tools
# in a REACT style langgraph
graph = create_react_agent(model, tools=tools)
# Define the initial input message from the user
inputs = {
"messages": [HumanMessage(content="Check and see if I have any important emails in my inbox")],
}
# Configuration parameters for the agent and tools
config = {
"configurable": {
"thread_id": "2",
"user_id": "user@example.com",
}
}
# Stream the assistant's responses by executing the graph
for chunk in graph.stream(inputs, stream_mode="values", config=config):
# Access the latest message from the conversation
last_message = chunk["messages"][-1]
# Print the assistant's message content
if last_message.content:
print(last_message.content)

View file

@ -1,37 +0,0 @@
import os
from langchain import hub
from langchain.agents import AgentExecutor, create_openai_functions_agent
from langchain_arcade import ArcadeToolManager
from langchain_openai import ChatOpenAI
arcade_api_key = os.environ["ARCADE_API_KEY"]
openai_api_key = os.environ["OPENAI_API_KEY"]
# Pull relevant agent model.
prompt = hub.pull("hwchase17/openai-functions-agent")
# Get all the tools available in Arcade
manager = ArcadeToolManager(api_key=arcade_api_key)
# Tool names follow the format "ToolkitName.ToolName"
tools = manager.get_tools(tools=["Web.ScrapeUrl"])
print(manager.tools)
# clear and init new tools from a toolkit
manager.init_tools(toolkits=["Search"])
print(manager.tools)
# get more tools
tools = manager.get_tools(toolkits=["Math"])
print(manager.tools)
# init the LLM
llm = ChatOpenAI(api_key=openai_api_key)
# Define agent
agent = create_openai_functions_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
# Try a few examples
agent_executor.invoke({"input": "Lookup Seymour Cray on Google"})
agent_executor.invoke({"input": "What is 1234567890 * 9876543210?"})