diff --git a/__pycache__/app.cpython-312.pyc b/__pycache__/app.cpython-312.pyc new file mode 100644 index 0000000..3e1b3ce Binary files /dev/null and b/__pycache__/app.cpython-312.pyc differ diff --git a/app.py b/app.py index fd1fe70..5f41084 100644 --- a/app.py +++ b/app.py @@ -9,10 +9,13 @@ from fastapi import FastAPI, HTTPException from pydantic import BaseModel from browser_use import Agent, Browser, ChatOpenAI from browser_use.agent.views import AgentHistoryList +from browser_use.browser.context import BrowserContextConfig, BrowserConfig import uvicorn +from fastapi.responses import HTMLResponse -# Обход проверки API ключа browser-use -os.environ["OPENAI_API_KEY"] = os.environ.get("OPENAI_API_KEY", "dummy") +# Настройки Remote Debugging +REMOTE_DEBUGGING_PORT = int(os.getenv("REMOTE_DEBUGGING_PORT", "9222")) +REMOTE_DEBUGGING_ENABLED = os.getenv("REMOTE_DEBUGGING_ENABLED", "false").lower() == "true" app = FastAPI(title="Browser Use API", version="1.0.0") @@ -20,7 +23,7 @@ app = FastAPI(title="Browser Use API", version="1.0.0") class TaskRequest(BaseModel): task: str max_steps: Optional[int] = 20 - model: Optional[str] = "openai/gpt-4o-mini" + model: Optional[str] = DEFAULT_MODEL class TaskResponse(BaseModel): task_id: str @@ -69,12 +72,22 @@ async def run_browser_task(task_id: str, task: str, max_steps: int, model: str): api_key=api_key ) - # Инициализация браузера с постоянной директорией для cookies - browser = Browser( + # Настройки браузера + browser_config = BrowserConfig( user_data_dir="/app/browser-data", - profile_directory="Default" + profile_directory="Default", + headless=True, ) + # Добавляем remote debugging если включено + if REMOTE_DEBUGGING_ENABLED: + browser_config.extra_chromium_args = [ + f"--remote-debugging-port={REMOTE_DEBUGGING_PORT}", + "--remote-debugging-address=0.0.0.0" + ] + + browser = Browser(config=browser_config) + # Создание агента agent = Agent( task=task, @@ -117,6 +130,22 @@ async def get_task(task_id: str): error=task.get("error") ) +@app.get("/api/tasks") +async def list_tasks(): + """Получить список всех задач""" + return { + "tasks": [ + { + "task_id": task_id, + "status": task["status"], + "task": task.get("task", ""), + "result": task.get("result"), + "error": task.get("error") + } + for task_id, task in tasks.items() + ] + } + @app.get("/api/health") async def health_check(): """Проверка здоровья сервера""" @@ -126,5 +155,174 @@ async def health_check(): "version": "1.0.0" } +# Web UI - Главная страница +WEB_UI_HTML = """ + + + + + + Browser Use API + + + +

Browser Use API

+

REST API для автоматизации браузера с помощью AI

+ +
+

Быстрые ссылки

+

Открыть Dashboard

+
+ +
+

API Endpoints

+ +
+ +
+

Пример использования

+
curl -X POST http://localhost:8383/api/tasks \\
+  -H "Content-Type: application/json" \\
+  -d '{"task": "Перейди на example.com", "max_steps": 20}'
+
+ + +""" + +DASHBOARD_HTML = """ + + + + + + Browser Use Dashboard + + + +
+ +

Browser Use Dashboard

+ +
+

Создать задачу

+
+ + + + +
+
+ +
+

Задачи

+ + +
+
+ + + + +""" + +@app.get("/", response_class=HTMLResponse) +async def root(): + """Главная страница""" + return HTMLResponse(content=WEB_UI_HTML) + +@app.get("/dashboard", response_class=HTMLResponse) +async def dashboard(): + """Dashboard""" + return HTMLResponse(content=DASHBOARD_HTML) + if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=8383) diff --git a/docker-compose.yml b/docker-compose.yml index 6c798cb..cd172f3 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -9,8 +9,12 @@ services: container_name: browser-use ports: - "8383:8383" + - "9222:9222" environment: - OPENROUTER_API_KEY=${OPENROUTER_API_KEY} + - LLM_MODEL_NAME=${LLM_MODEL_NAME:-arcee-ai/trinity-large-preview:free} + - REMOTE_DEBUGGING_ENABLED=${REMOTE_DEBUGGING_ENABLED:-false} + - REMOTE_DEBUGGING_PORT=${REMOTE_DEBUGGING_PORT:-9222} volumes: - /home/nafer/dokploy_data/browser-use:/app/browser-data shm_size: '2gb'