Luca448's picture
Savestate: Fix Dockerfile and add Browser_Agent for HF build, bump version to 1.8.334
508316a
Raw History Blame Contribute Delete
2.56 kB
import uvicorn
import logging
import asyncio
import subprocess
from config.settings import settings
from api.server import app
from messenger.telegram_bot import create_telegram_app
from job_queue.task_queue import task_queue, worker_loop
from browser.manager import browser_manager
from agent.brain import AgentBrain
logging.basicConfig(
level=logging.INFO,
format='[BROWSER] %(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
logger = logging.getLogger(__name__)
worker_handles: list[asyncio.Task] = []
brain: AgentBrain | None = None
async def start_background_services():
global brain
# Start Tor Daemon
try:
subprocess.Popen(["tor"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
logger.info(f"Tor daemon started on port {settings.tor_socks_port}.")
except FileNotFoundError:
logger.warning("Tor daemon executable not found. Ghost Mode will not work unless Tor is installed.")
except Exception as e:
logger.error(f"Failed to start Tor daemon: {e}")
# Start Telegram Bot if configured
telegram_app = None
if settings.telegram_bot_token:
telegram_app = create_telegram_app()
await telegram_app.initialize()
await telegram_app.start()
await telegram_app.updater.start_polling()
logger.info("Telegram Bot gestartet.")
# Start Task Queue Worker
await task_queue.initialize()
brain = AgentBrain()
for worker_index in range(max(1, settings.max_concurrent_browsers)):
handle = asyncio.create_task(
worker_loop(
task_queue,
brain,
browser_manager,
telegram_app.bot if telegram_app else None,
),
name=f"agent-worker-{worker_index + 1}",
)
worker_handles.append(handle)
logger.info("Background services started.")
@app.on_event("startup")
async def startup_services():
await start_background_services()
@app.on_event("shutdown")
async def shutdown_services():
for handle in worker_handles:
handle.cancel()
if worker_handles:
await asyncio.gather(*worker_handles, return_exceptions=True)
if brain:
await brain.close()
await browser_manager.close_all()
await task_queue._store.close()
if __name__ == "__main__":
# Startet den internen Uvicorn Server auf Port 8765 (offen für den Verkehrspolizisten)
uvicorn.run(
"main:app",
host="0.0.0.0",
port=settings.internal_api_port,
reload=False
)