Add Browser Use Agent Pro (#52)

This commit is contained in:
Yue Cui
2025-12-05 18:47:40 +08:00
committed by GitHub
parent f242f4399e
commit f3952caf6c
22 changed files with 2696 additions and 3 deletions

View File

@@ -0,0 +1,129 @@
# -*- coding: utf-8 -*-
"""Main entry point for browser-use agent"""
import os
import sys
import traceback
from pathlib import Path
import asyncio
from loguru import logger
from agentscope.formatter import DashScopeChatFormatter
from agentscope.memory import InMemoryMemory
from agentscope.model import DashScopeChatModel
from agentscope.tool import Toolkit
from agentscope.mcp import StdIOStatefulClient
from agentscope.message import Msg
from _browser_agent import BrowserAgent
# Add current directory to path for imports
current_dir = Path(__file__).parent
if str(current_dir) not in sys.path:
sys.path.insert(0, str(current_dir))
MODEL_FORMATTER_MAPPING = {
"qwen3-max": [
DashScopeChatModel(
api_key=os.environ.get("DASHSCOPE_API_KEY"),
model_name="qwen3-max-preview",
stream=True,
),
DashScopeChatFormatter(),
],
"qwen-vl-max": [
DashScopeChatModel(
api_key=os.environ.get("DASHSCOPE_API_KEY"),
model_name="qwen-vl-max-latest",
stream=True,
),
DashScopeChatFormatter(),
],
}
MODEL_CONFIG_NAME = os.getenv("MODEL", "qwen3-max")
async def run_browser_agent(
task: str,
start_url: str = "https://www.google.com",
):
"""Run the browser agent with a given task.
Args:
task: The task description for the browser agent
start_url: The initial URL to navigate to
Example:
await run_browser_agent("Search for Python tutorials")
"""
model, formatter = MODEL_FORMATTER_MAPPING[MODEL_CONFIG_NAME]
# Create toolkit and MCP client
browser_toolkit = Toolkit()
browser_client = StdIOStatefulClient(
name="playwright-mcp",
command="npx",
args=["@playwright/mcp@latest"],
)
try:
await browser_client.connect()
await browser_toolkit.register_mcp_client(browser_client)
logger.info(
"Init browser toolkit with MCP client (playwright-mcp)",
)
except Exception as e:
logger.error(f"Failed to connect MCP client: {e}")
try:
await browser_client.close()
except Exception:
# Ignore errors when closing failed client connection
pass
raise
try:
browser_agent = BrowserAgent(
name="BrowserUseAgentPro",
model=model,
formatter=formatter,
memory=InMemoryMemory(),
toolkit=browser_toolkit,
max_iters=50,
start_url=start_url,
)
await browser_agent.reply(Msg(name="user", content=task, role="user"))
except Exception as e:
logger.error(f"Browser agent execution failed: {e}")
logger.error(traceback.format_exc())
finally:
# Close MCP client
if browser_client is not None:
try:
await browser_client.close()
logger.info("MCP client closed successfully")
except Exception as cleanup_error:
logger.warning(
f"Error while closing MCP client: {cleanup_error}",
)
async def main():
if len(sys.argv) < 2:
print("Usage: python main.py <task> [start_url]")
sys.exit(1)
task = sys.argv[1]
start_url = sys.argv[2] if len(sys.argv) > 2 else "https://www.google.com"
print("Starting Browser Agent Example...")
print(
"The browser agent will use "
"playwright-mcp (https://github.com/microsoft/playwright-mcp). "
"Make sure the MCP server can be installed "
"by `npx @playwright/mcp@latest`",
)
await run_browser_agent(task=task, start_url=start_url)
if __name__ == "__main__":
asyncio.run(main())