BrowserUse_and_ComputerUse_.../hermes_code/tools/browser_use_tool.py

98 lines
3.7 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import json
import os
from urllib import error, request
from tools.browser_use_manager import (
cleanup_browser_use_runtime,
ensure_isolated_browser_runtime,
)
from tools.registry import registry
def run_browser_task(task, task_id=None, honcho_session_key=None):
if not task or not str(task).strip():
return json.dumps({"success": False, "error": "Task is required"}, ensure_ascii=False)
runtime = ensure_isolated_browser_runtime(
task_id=task_id,
honcho_session_key=honcho_session_key,
)
rpc_url = runtime.get("rpc_url") or os.getenv("BROWSER_USE_RPC_URL", "http://browser:8787/run")
timeout_sec = int(os.getenv("BROWSER_USE_RPC_TIMEOUT", "900"))
payload = json.dumps({"task": task}).encode("utf-8")
req = request.Request(rpc_url, data=payload, headers={"Content-Type": "application/json"}, method="POST")
try:
with request.urlopen(req, timeout=timeout_sec) as resp:
body = resp.read().decode("utf-8")
try:
data = json.loads(body)
except json.JSONDecodeError:
return body
if isinstance(data, dict):
browser_view = runtime.get("browser_view")
if browser_view and not data.get("browser_view"):
data["browser_view"] = browser_view
data["isolation_mode"] = runtime.get("isolation_mode", "shared")
return json.dumps(data, ensure_ascii=False)
return body
except error.HTTPError as http_err:
body = http_err.read().decode("utf-8", errors="replace")
return json.dumps(
{
"success": False,
"error": f"browser-use RPC returned HTTP {http_err.code}",
"details": body,
},
ensure_ascii=False,
)
except Exception as err:
return json.dumps(
{
"success": False,
"error": f"browser-use RPC request failed: {err}",
},
ensure_ascii=False,
)
finally:
try:
cleanup_browser_use_runtime(
task_id=task_id,
honcho_session_key=honcho_session_key,
)
except Exception:
pass
registry.register(
name="internet_browser",
toolset="browse_cmd",
schema={
"name": "internet_browser",
"description": (
"ГЛАВНЫЙ ИНСТРУМЕНТ ДЛЯ ВЕБ-СЕРФИНГА. Вызывай этот инструмент НАПРЯМУЮ (через стандартный tool call/function call). "
"КАТЕГОРИЧЕСКИ ЗАПРЕЩЕНО использовать `execute_code` или `delegate_task` для работы с браузером. "
"Не пиши Python-скрипты! Просто передай в этот инструмент параметр `task`. "
"Используй для любых задач в интернете: поиск товаров (Wildberries, Ozon), чтение статей, клики, навигация."
),
"parameters": {
"type": "object",
"properties": {
"task": {
"type": "string",
"description": "Подробная задача на естественном языке. Например: 'Зайди на wildberries.ru, найди черную футболку и верни цену'."
}
},
"required": ["task"]
}
},
handler=lambda args, **kw: run_browser_task(
args.get("task"),
task_id=kw.get("task_id"),
honcho_session_key=kw.get("honcho_session_key"),
),
emoji="🌐",
)