Agent mode requires running skyvern init first to set up your local Skyvern environment.
from dotenv import load_dotenvfrom llama_index.agent.openai import OpenAIAgentfrom llama_index.llms.openai import OpenAIfrom skyvern_llamaindex.agent import SkyvernToolload_dotenv()skyvern_tool = SkyvernTool()agent = OpenAIAgent.from_tools( tools=[skyvern_tool.run_task()], llm=OpenAI(model="gpt-4o"), verbose=True,)response = agent.chat( "Run a task with Skyvern. The task is about 'Navigate to the Hacker News " "homepage and get the top 3 posts.'")print(response)
from dotenv import load_dotenvfrom llama_index.agent.openai import OpenAIAgentfrom llama_index.llms.openai import OpenAIfrom skyvern_llamaindex.client import SkyvernToolload_dotenv()skyvern_tool = SkyvernTool( api_key="<your_skyvern_api_key>")# Or load from SKYVERN_API_KEY environment variable:# skyvern_tool = SkyvernTool()agent = OpenAIAgent.from_tools( tools=[skyvern_tool.run_task()], llm=OpenAI(model="gpt-4o"), verbose=True,)response = agent.chat( "Run a task with Skyvern. The task is about 'Navigate to the Hacker News " "homepage and get the top 3 posts.'")print(response)
Starts a task asynchronously and returns immediately.Usage:
import asynciofrom llama_index.core.tools import FunctionToolasync def sleep(seconds: int) -> str: await asyncio.sleep(seconds) return f"Slept for {seconds} seconds"sleep_tool = FunctionTool.from_defaults( async_fn=sleep, description="Sleep for a given number of seconds", name="sleep",)skyvern_tool = SkyvernTool()agent = OpenAIAgent.from_tools( tools=[skyvern_tool.dispatch_task(), sleep_tool], llm=OpenAI(model="gpt-4o"),)response = agent.chat( "Run a task with Skyvern. The task is about 'Navigate to the Hacker News " "homepage and get the top 3 posts.' Then, sleep for 10 minutes.")
Input: Natural language task descriptionOutput: Task ID and initial status
When running locally, keep your agent running until the task completes.
Retrieves the status and results of a previously dispatched task.Usage:
skyvern_tool = SkyvernTool()agent = OpenAIAgent.from_tools( tools=[skyvern_tool.get_task()], llm=OpenAI(model="gpt-4o"),)response = agent.chat( "Get the task information with Skyvern. The task id is 'tsk_abc123'.")
Input: Task IDOutput: Task status, extracted data, and results
This agent dispatches a task, polls for completion, and returns results.
import asynciofrom dotenv import load_dotenvfrom llama_index.agent.openai import OpenAIAgentfrom llama_index.llms.openai import OpenAIfrom llama_index.core.tools import FunctionToolfrom skyvern_llamaindex.agent import SkyvernToolload_dotenv()async def sleep(seconds: int) -> str: await asyncio.sleep(seconds) return f"Slept for {seconds} seconds"sleep_tool = FunctionTool.from_defaults( async_fn=sleep, description="Sleep for a given number of seconds", name="sleep",)skyvern_tool = SkyvernTool()agent = OpenAIAgent.from_tools( tools=[ skyvern_tool.dispatch_task(), skyvern_tool.get_task(), sleep_tool ], llm=OpenAI(model="gpt-4o"), verbose=True, max_function_calls=10,)response = agent.chat( "Run a task with Skyvern. The task is about 'Navigate to the Hacker News " "homepage and get the top 3 posts.' Then, get this task information until " "it's completed. The task information re-get interval should be 60s.")print(response)
import asynciofrom dotenv import load_dotenvfrom llama_index.agent.openai import OpenAIAgentfrom llama_index.llms.openai import OpenAIfrom llama_index.core.tools import FunctionToolfrom skyvern_llamaindex.client import SkyvernToolload_dotenv()async def sleep(seconds: int) -> str: await asyncio.sleep(seconds) return f"Slept for {seconds} seconds"sleep_tool = FunctionTool.from_defaults( async_fn=sleep, description="Sleep for a given number of seconds", name="sleep",)skyvern_tool = SkyvernTool(api_key="<your_skyvern_api_key>")# Or load from environment: SkyvernTool()agent = OpenAIAgent.from_tools( tools=[ skyvern_tool.dispatch_task(), skyvern_tool.get_task(), sleep_tool ], llm=OpenAI(model="gpt-4o"), verbose=True, max_function_calls=10,)response = agent.chat( "Run a task with Skyvern. The task is about 'Navigate to the Hacker News " "homepage and get the top 3 posts.' Then, get this task information until " "it's completed. The task information re-get interval should be 60s.")print(response)
Build an agent that researches topics across multiple websites:
from llama_index.agent.openai import OpenAIAgentfrom llama_index.llms.openai import OpenAIfrom skyvern_llamaindex.client import SkyvernToolskyvern = SkyvernTool(api_key="your_key")agent = OpenAIAgent.from_tools( tools=[skyvern.run_task()], llm=OpenAI(model="gpt-4o"), verbose=True,)response = agent.chat( "Research the pricing of the top 3 CRM tools and compare their features.")print(response)
from llama_index.agent.openai import OpenAIAgentfrom skyvern_llamaindex.client import SkyvernToolskyvern = SkyvernTool()agent = OpenAIAgent.from_tools( tools=[ skyvern.dispatch_task(), skyvern.get_task(), # Add other tools like database connectors ], llm=OpenAI(model="gpt-4o"), max_function_calls=20,)response = agent.chat( "Extract product data from these e-commerce sites and save to database: " "[list of URLs]")
from llama_index import VectorStoreIndex, SimpleDirectoryReaderfrom llama_index.agent.openai import OpenAIAgentfrom skyvern_llamaindex.client import SkyvernTool# Load and index documentsdocuments = SimpleDirectoryReader('data').load_data()index = VectorStoreIndex.from_documents(documents)query_engine = index.as_query_engine()# Create agent with both toolsskyvern = SkyvernTool()agent = OpenAIAgent.from_tools( tools=[skyvern.run_task()], llm=OpenAI(model="gpt-4o"),)# Use both capabilitiesresponse = agent.chat( "First, check our docs for the pricing page URL, then extract the current " "pricing from the website.")