about summary refs log tree commit diff
path: root/R2R/r2r/main/app.py
diff options
context:
space:
mode:
Diffstat (limited to 'R2R/r2r/main/app.py')
-rwxr-xr-xR2R/r2r/main/app.py53
1 files changed, 53 insertions, 0 deletions
diff --git a/R2R/r2r/main/app.py b/R2R/r2r/main/app.py
new file mode 100755
index 00000000..981445e4
--- /dev/null
+++ b/R2R/r2r/main/app.py
@@ -0,0 +1,53 @@
+from fastapi import FastAPI
+
+from .engine import R2REngine
+
+
+class R2RApp:
+    def __init__(self, engine: R2REngine):
+        self.engine = engine
+        self._setup_routes()
+        self._apply_cors()
+
+    async def openapi_spec(self, *args, **kwargs):
+        from fastapi.openapi.utils import get_openapi
+
+        return get_openapi(
+            title="R2R Application API",
+            version="1.0.0",
+            routes=self.app.routes,
+        )
+
+    def _setup_routes(self):
+        from .api.routes import ingestion, management, retrieval
+
+        self.app = FastAPI()
+
+        # Create routers with the engine
+        ingestion_router = ingestion.IngestionRouter.build_router(self.engine)
+        management_router = management.ManagementRouter.build_router(
+            self.engine
+        )
+        retrieval_router = retrieval.RetrievalRouter.build_router(self.engine)
+
+        # Include routers in the app
+        self.app.include_router(ingestion_router, prefix="/v1")
+        self.app.include_router(management_router, prefix="/v1")
+        self.app.include_router(retrieval_router, prefix="/v1")
+
+    def _apply_cors(self):
+        from fastapi.middleware.cors import CORSMiddleware
+
+        origins = ["*", "http://localhost:3000", "http://localhost:8000"]
+        self.app.add_middleware(
+            CORSMiddleware,
+            allow_origins=origins,
+            allow_credentials=True,
+            allow_methods=["*"],
+            allow_headers=["*"],
+        )
+
+    def serve(self, host: str = "0.0.0.0", port: int = 8000):
+        import uvicorn
+
+        uvicorn.run(self.app, host=host, port=port)