fix: merged with develop and resolved conflicts

This commit is contained in:
Artem Timoshenko 2026-04-22 00:31:19 +03:00
parent 680ba6e38d
commit c064784c9f

View file

@ -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(