app.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import warnings
  2. from contextlib import asynccontextmanager
  3. with warnings.catch_warnings():
  4. warnings.simplefilter('ignore')
  5. from fastapi import (
  6. FastAPI,
  7. )
  8. import openhands.agenthub # noqa F401 (we import this to get the agents registered)
  9. from openhands.server.middleware import (
  10. AttachSessionMiddleware,
  11. InMemoryRateLimiter,
  12. LocalhostCORSMiddleware,
  13. NoCacheMiddleware,
  14. RateLimitMiddleware,
  15. )
  16. from openhands.server.routes.auth import app as auth_api_router
  17. from openhands.server.routes.conversation import app as conversation_api_router
  18. from openhands.server.routes.feedback import app as feedback_api_router
  19. from openhands.server.routes.files import app as files_api_router
  20. from openhands.server.routes.public import app as public_api_router
  21. from openhands.server.routes.security import app as security_api_router
  22. from openhands.server.shared import config, session_manager
  23. from openhands.utils.import_utils import get_impl
  24. @asynccontextmanager
  25. async def _lifespan(app: FastAPI):
  26. async with session_manager:
  27. yield
  28. app = FastAPI(lifespan=_lifespan)
  29. app.add_middleware(
  30. LocalhostCORSMiddleware,
  31. allow_credentials=True,
  32. allow_methods=['*'],
  33. allow_headers=['*'],
  34. )
  35. app.add_middleware(NoCacheMiddleware)
  36. app.add_middleware(
  37. RateLimitMiddleware, rate_limiter=InMemoryRateLimiter(requests=10, seconds=1)
  38. )
  39. @app.get('/health')
  40. async def health():
  41. return 'OK'
  42. app.include_router(auth_api_router)
  43. app.include_router(public_api_router)
  44. app.include_router(files_api_router)
  45. app.include_router(conversation_api_router)
  46. app.include_router(security_api_router)
  47. app.include_router(feedback_api_router)
  48. AttachSessionMiddlewareImpl = get_impl(
  49. AttachSessionMiddleware, config.attach_session_middleware_class
  50. )
  51. app.middleware('http')(AttachSessionMiddlewareImpl(app, target_router=files_api_router))
  52. app.middleware('http')(
  53. AttachSessionMiddlewareImpl(app, target_router=conversation_api_router)
  54. )
  55. app.middleware('http')(
  56. AttachSessionMiddlewareImpl(app, target_router=security_api_router)
  57. )
  58. app.middleware('http')(
  59. AttachSessionMiddlewareImpl(app, target_router=feedback_api_router)
  60. )