Files
openswarm/backend/main.py
T

53 lines
1.8 KiB
Python

from typing import List
import os
import argparse
import socket
from typing import Optional
import uvicorn
from typeguard import typechecked
from backend.ports import get_backend_port
from backend.config.Apps import MainApp
from backend.apps.health.health import health
from backend.apps.agents.agents import agents
from backend.apps.settings.settings import settings
from backend.apps.dashboards.dashboards import dashboards
from fastapi.middleware.cors import CORSMiddleware
main_app = MainApp([
health, agents, settings, dashboards
])
app = main_app.app
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
if __name__ == "__main__":
parser: argparse.ArgumentParser = argparse.ArgumentParser(description="OpenSwarm backend server")
parser.add_argument("--port", type=int, default=get_backend_port())
parser.add_argument("--host", default=os.environ.get("OPENSWARM_HOST", "127.0.0.1"))
parser.add_argument("--reload", action="store_true", default=False)
args: argparse.Namespace = parser.parse_args()
os.environ["OPENSWARM_PORT"] = str(args.port)
class P_ReadyServer(uvicorn.Server):
"""Subclass that prints a machine-readable READY line on startup."""
@typechecked
async def startup(self, sockets: Optional[List[socket.socket]] = None) -> None:
await super().startup(sockets)
print(f"READY:PORT={args.port}", flush=True)
if args.reload:
uvicorn.run("backend.main:app", host=args.host, port=args.port, reload=True)
else:
config = uvicorn.Config("backend.main:app", host=args.host, port=args.port)
server = P_ReadyServer(config)
import asyncio
asyncio.run(server.serve())