fix: merged with develop and resolved conflicts
This commit is contained in:
parent
680ba6e38d
commit
c064784c9f
1 changed files with 45 additions and 51 deletions
|
|
@ -1,14 +1,8 @@
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import asyncio
|
from urllib import error, request
|
||||||
import socket
|
|
||||||
import logging
|
|
||||||
from telegram import Bot
|
|
||||||
from telegram.constants import ParseMode
|
|
||||||
from browser_use import Agent, Browser, ChatOpenAI
|
|
||||||
from tools.registry import registry
|
from tools.registry import registry
|
||||||
|
|
||||||
|
|
||||||
logger = logging.getLogger("hermes.browser_use_tool")
|
logger = logging.getLogger("hermes.browser_use_tool")
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -17,9 +11,9 @@ def get_chat_id(honcho_session_key: str) -> str:
|
||||||
logger.warning("нет honcho_session_key")
|
logger.warning("нет honcho_session_key")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
if ':' in honcho_session_key:
|
if ":" in honcho_session_key:
|
||||||
logger.info("получен honcho_session_key")
|
logger.info("получен honcho_session_key")
|
||||||
return honcho_session_key.split(':')[-1]
|
return honcho_session_key.split(":")[-1]
|
||||||
|
|
||||||
logger.warning("нет honcho_session_key")
|
logger.warning("нет honcho_session_key")
|
||||||
return None
|
return None
|
||||||
|
|
@ -52,7 +46,10 @@ async def notify_user_vnc(honcho_session_key: str, vnc_url: str):
|
||||||
logger.warning(f"Ошибка при отправке уведомления в Telegram: {str(e)}")
|
logger.warning(f"Ошибка при отправке уведомления в Telegram: {str(e)}")
|
||||||
|
|
||||||
|
|
||||||
async def run_browser_task(task: str, honcho_session_key: str):
|
async def run_browser_task(task: str, honcho_session_key: str = None):
|
||||||
|
if not task or not str(task).strip():
|
||||||
|
return json.dumps({"success": False, "error": "Task is required"}, ensure_ascii=False)
|
||||||
|
|
||||||
browser_host = "browser"
|
browser_host = "browser"
|
||||||
browser_port = 9222
|
browser_port = 9222
|
||||||
vnc_url = os.getenv("BROWSER_VIEW_URL", "")
|
vnc_url = os.getenv("BROWSER_VIEW_URL", "")
|
||||||
|
|
@ -66,50 +63,47 @@ async def run_browser_task(task: str, honcho_session_key: str):
|
||||||
except Exception:
|
except Exception:
|
||||||
cdp_url = f"http://{browser_host}:{browser_port}"
|
cdp_url = f"http://{browser_host}:{browser_port}"
|
||||||
|
|
||||||
browser = Browser(cdp_url=cdp_url)
|
rpc_url = os.getenv("BROWSER_USE_RPC_URL", "http://browser:8787/run")
|
||||||
|
timeout_sec = int(os.getenv("BROWSER_USE_RPC_TIMEOUT", "900"))
|
||||||
# Для подключения к Chrome на виртуальной машине раскомментируй
|
payload = json.dumps({"task": task}).encode("utf-8")
|
||||||
# browser = Browser(
|
req = request.Request(rpc_url, data=payload, headers={"Content-Type": "application/json"}, method="POST")
|
||||||
# executable_path="/usr/bin/google-chrome", # Linux
|
|
||||||
# # Windows: "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe"
|
|
||||||
# # macOS: "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
|
|
||||||
# )
|
|
||||||
# или
|
|
||||||
# browser = Browser.from_system_chrome() для автоопределения
|
|
||||||
|
|
||||||
llm = ChatOpenAI(
|
|
||||||
model=os.getenv("MODEL_DEFAULT", "qwen3.5-122b"),
|
|
||||||
api_key=os.getenv("OPENAI_API_KEY"),
|
|
||||||
base_url=os.getenv("OPENAI_BASE_URL"),
|
|
||||||
temperature=0.0,
|
|
||||||
)
|
|
||||||
|
|
||||||
agent = Agent(
|
|
||||||
task=task,
|
|
||||||
llm=llm,
|
|
||||||
browser=browser,
|
|
||||||
use_vision=False
|
|
||||||
)
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
history = await agent.run()
|
def _do_rpc():
|
||||||
final_result = history.final_result()
|
with request.urlopen(req, timeout=timeout_sec) as resp:
|
||||||
|
return resp.read().decode("utf-8")
|
||||||
|
|
||||||
return json.dumps({
|
body = await asyncio.to_thread(_do_rpc)
|
||||||
"success": True,
|
|
||||||
"result": final_result,
|
|
||||||
"vnc_url": vnc_url
|
|
||||||
}, ensure_ascii=False)
|
|
||||||
|
|
||||||
except Exception as e:
|
try:
|
||||||
return json.dumps({
|
resp_json = json.loads(body)
|
||||||
"success": False,
|
if isinstance(resp_json, dict):
|
||||||
"error": f"Browser automation failed: {str(e)}"
|
if "vnc_url" not in resp_json:
|
||||||
}, ensure_ascii=False)
|
resp_json["vnc_url"] = vnc_url
|
||||||
|
return json.dumps(resp_json, ensure_ascii=False)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
finally:
|
return body
|
||||||
if browser:
|
|
||||||
await browser.stop()
|
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,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
registry.register(
|
registry.register(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue