Merge origin/develop and integrate browser isolation
This commit is contained in:
parent
50589232d6
commit
ebba5d04a4
13 changed files with 812 additions and 251 deletions
|
|
@ -1,14 +1,23 @@
|
|||
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):
|
||||
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)
|
||||
|
||||
rpc_url = os.getenv("BROWSER_USE_RPC_URL", "http://browser:8787/run")
|
||||
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")
|
||||
|
|
@ -16,7 +25,20 @@ def run_browser_task(task):
|
|||
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(
|
||||
|
|
@ -35,11 +57,19 @@ def run_browser_task(task):
|
|||
},
|
||||
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",
|
||||
toolset="browse_cmd",
|
||||
schema={
|
||||
"name": "internet_browser",
|
||||
"description": (
|
||||
|
|
@ -52,14 +82,17 @@ registry.register(
|
|||
"type": "object",
|
||||
"properties": {
|
||||
"task": {
|
||||
"type": "string",
|
||||
"type": "string",
|
||||
"description": "Подробная задача на естественном языке. Например: 'Зайди на wildberries.ru, найди черную футболку и верни цену'."
|
||||
}
|
||||
},
|
||||
"required": ["task"]
|
||||
}
|
||||
},
|
||||
|
||||
handler=lambda args, **kw: run_browser_task(args.get("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="🌐",
|
||||
)
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue