-
Notifications
You must be signed in to change notification settings - Fork 107
Expand file tree
/
Copy pathagent_example.py
More file actions
109 lines (92 loc) · 3.84 KB
/
agent_example.py
File metadata and controls
109 lines (92 loc) · 3.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import asyncio
import logging
import os
from dotenv import load_dotenv
from rich.console import Console
from rich.panel import Panel
from rich.theme import Theme
from stagehand import Stagehand, StagehandConfig, configure_logging
# Create a custom theme for consistent styling
custom_theme = Theme(
{
"info": "cyan",
"success": "green",
"warning": "yellow",
"error": "red bold",
"highlight": "magenta",
"url": "blue underline",
}
)
# Create a Rich console instance with our theme
console = Console(theme=custom_theme)
load_dotenv()
# Configure logging with the utility function
configure_logging(
level=logging.INFO, # Set to INFO for regular logs, DEBUG for detailed
quiet_dependencies=True, # Reduce noise from dependencies
)
async def main():
# Build a unified configuration object for Stagehand
config = StagehandConfig(
env="BROWSERBASE",
# env="LOCAL",
api_key=os.getenv("BROWSERBASE_API_KEY"),
project_id=os.getenv("BROWSERBASE_PROJECT_ID"),
model_name="gpt-4o",
self_heal=True,
system_prompt="You are a browser automation assistant that helps users navigate websites effectively.",
model_client_options={"apiKey": os.getenv("MODEL_API_KEY")},
verbose=1,
)
# Create a Stagehand client using the configuration object.
stagehand = Stagehand(config)
# Initialize - this creates a new session automatically.
console.print("\n🚀 [info]Initializing Stagehand...[/]")
await stagehand.init()
if stagehand.env == "BROWSERBASE":
console.print(f"\n[yellow]Created new session:[/] {stagehand.session_id}")
console.print(
f"🌐 [white]View your live browser:[/] [url]https://www.browserbase.com/sessions/{stagehand.session_id}[/]"
)
console.print("\n▶️ [highlight] Navigating[/] to Google")
await stagehand.page.goto("https://google.com/")
console.print("✅ [success]Navigated to Google[/]")
console.print("\n▶️ [highlight] Using Agent to perform a task[/]: playing a game of 2048")
agent = stagehand.agent(
model="computer-use-preview",
instructions="You are a helpful web navigation assistant that helps users find information. You are currently on the following page: google.com. Do not ask follow up questions, the user will trust your judgement.",
options={"apiKey": os.getenv("MODEL_API_KEY")}
)
agent_result = await agent.execute(
instruction="Play a game of 2048",
max_steps=20,
auto_screenshot=True,
)
console.print("📊 [info]Agent execution result:[/]")
console.print(f"✅ Success: [bold]{'Yes' if agent_result.success else 'No'}[/]")
console.print(f"🎯 Completed: [bold]{'Yes' if agent_result.completed else 'No'}[/]")
if agent_result.message:
console.print(f"💬 Message: [italic]{agent_result.message}[/]")
if agent_result.actions:
console.print(f"🔄 Actions performed: [bold]{len(agent_result.actions)}[/]")
for i, action in enumerate(agent_result.actions):
console.print(f" Action {i+1}: {action.get('type', 'Unknown')} - {action.get('description', 'No description')}")
# For debugging, you can also print the full JSON
console.print("[dim]Full response JSON:[/]")
console.print_json(f"{agent_result.model_dump_json()}")
# Close the session
console.print("\n⏹️ [warning]Closing session...[/]")
await stagehand.close()
console.print("✅ [success]Session closed successfully![/]")
console.rule("[bold]End of Example[/]")
if __name__ == "__main__":
# Add a fancy header
console.print(
"\n",
Panel(
"[light_gray]Stagehand 🤘 Agent Example[/]",
border_style="green",
padding=(1, 10),
),
)
asyncio.run(main())