## PR Description This PR adds 7 examples. * `call_a_tool_directly_with_auth.py` - Simple example that uses Arcade client to execute a tool that lists Gmail emails * `call_a_tool_directly.py` - Simple example that uses Arcade client to execute a tool that adds two numbers together * `call_a_tool_with_llm.py` - Simple example that uses the LLM api to star the arcade-ai repository * `get_auth_token.py` - Simple example that gets a Google auth token and then calls the Google API * `call_multiple_tools_directly_with_auth.py` - A more involved example that directly calls multiple spotify tools sequentially * `call_multiple_tools_with_llm.py` - A more involved example that uses an llm to call multiple spotify tools sequentially * `simple_chatbot.py` - Simple chatbot that uses arcade tools and has history --------- Co-authored-by: Nate Barbettini <nathanaelb@gmail.com>
74 lines
2.5 KiB
Python
74 lines
2.5 KiB
Python
"""
|
|
Example script demonstrating how to build a simple chatbot with Arcade AI.
|
|
|
|
For this example, we are using the prebuilt Google Docs toolkit to create and edit documents.
|
|
|
|
Try asking questions like:
|
|
- "Create a document with the title 'My New Document' and content 'Hello, World!'"
|
|
- "List my 2 most recently modified documents and tell me the title, document id, and document URL of each one and summarize them."
|
|
- "Edit the second document from the list you just returned and add the text 'Hello, World!' to the end of it."
|
|
"""
|
|
|
|
import os
|
|
|
|
from openai import OpenAI
|
|
|
|
|
|
def chat(openai_client: OpenAI, tool_names: list[str], user_id: str) -> None:
|
|
history = []
|
|
|
|
print("Hello! How can I help you today?")
|
|
while True:
|
|
message = {"role": "user", "content": input(">")}
|
|
history.append(message)
|
|
chat_result = call_tool_with_openai(openai_client, tool_names, user_id, history)
|
|
|
|
# If the tool call requires authorization, then wait for the user to authorize and then call the tool again
|
|
if (
|
|
chat_result.choices[0].tool_authorizations
|
|
and chat_result.choices[0].tool_authorizations[0].get("status") == "pending"
|
|
):
|
|
print("\n" + chat_result.choices[0].message.content)
|
|
input("\nAfter you have authorized, press Enter to continue...")
|
|
chat_result = call_tool_with_openai(openai_client, tool_names, user_id, history)
|
|
|
|
history.append({"role": "assistant", "content": chat_result.choices[0].message.content})
|
|
|
|
print(chat_result.choices[0].message.content)
|
|
|
|
|
|
def call_tool_with_openai(
|
|
client: OpenAI, tool_names: list[str], user_id: str, messages: list[dict]
|
|
) -> dict:
|
|
response = client.chat.completions.create(
|
|
messages=messages,
|
|
model="gpt-4o-mini",
|
|
user=user_id,
|
|
tools=tool_names,
|
|
tool_choice="generate",
|
|
)
|
|
|
|
return response
|
|
|
|
|
|
if __name__ == "__main__":
|
|
arcade_api_key = os.environ.get(
|
|
"ARCADE_API_KEY"
|
|
) # If you forget your Arcade API key, it is stored at ~/.arcade/credentials.yaml on `arcade login`
|
|
local_host = "http://localhost:9099/v1"
|
|
user_id = "user@example.com"
|
|
|
|
openai_client = OpenAI(
|
|
api_key=arcade_api_key,
|
|
base_url=local_host,
|
|
)
|
|
|
|
tool_names = [
|
|
"Google.GetDocumentById",
|
|
"Google.InsertTextAtEndOfDocument",
|
|
"Google.CreateBlankDocument",
|
|
"Google.CreateDocumentFromText",
|
|
"Google.ListDocuments",
|
|
]
|
|
|
|
chat(openai_client, tool_names, user_id)
|