flare / app.py
ciyidogan's picture
Update app.py
a50f65d verified
raw
history blame
3.07 kB
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
from fastapi.responses import FileResponse
import uvicorn
import os
from pathlib import Path
from utils import log
from chat_handler import router as chat_router # ← start_session & chat
from admin_routes import router as admin_router # ← Admin API endpoints
from spark_startup import run_in_thread
app = FastAPI(
title="Flare Orchestration Service",
version="0.1.0",
description="LLM-driven intent & API flow engine (bootstrap)",
)
run_in_thread()
# ---------------- Core chat/session routes --------------------------
app.include_router(chat_router)
# ---------------- Admin API routes ----------------------------------
app.include_router(admin_router)
# ---------------- Health probe (HF Spaces watchdog) -----------------
@app.get("/")
def health_check():
return {"status": "ok"}
# ---------------- Serve Angular UI if exists ------------------------
static_path = Path("static")
log(f"πŸ” Checking for static directory at: {static_path.absolute()}")
log(f"πŸ” Static directory exists: {static_path.exists()}")
if static_path.exists() and static_path.is_dir():
# List files in static directory
files = list(static_path.iterdir())
log(f"πŸ“ Files in static directory: {[f.name for f in files]}")
# Check for index.html
index_path = static_path / "index.html"
log(f"πŸ” index.html exists: {index_path.exists()}")
# Serve static files (Angular assets) - only if assets directory exists
assets_path = static_path / "assets"
if assets_path.exists() and assets_path.is_dir():
app.mount("/assets", StaticFiles(directory=str(assets_path)), name="assets")
# Root path - serve index.html
@app.get("/")
async def serve_root():
index_path = static_path / "index.html"
if index_path.exists():
log("πŸ“„ Serving index.html")
return FileResponse(str(index_path))
log("⚠️ index.html not found, returning health check")
return {"status": "ok", "sessions": len(session_store._sessions)} # Fallback to health check
# Catch-all route for Angular routing (must be last!)
@app.get("/{full_path:path}")
async def serve_angular(full_path: str):
# Don't catch API routes
if full_path.startswith("api/") or full_path in ["start_session", "chat", "health"]:
return {"error": "Not found"}, 404
# Return Angular index.html for all other routes
index_path = static_path / "index.html"
if index_path.exists():
return FileResponse(str(index_path))
return {"error": "UI not found"}, 404
else:
log("⚠️ Static directory not found")
# No UI built, just health endpoint
@app.get("/")
def health_check():
return {"status": "ok", "message": "UI not found. Build Angular app first."}I not found. Build Angular app first."}
if __name__ == "__main__":
log("🌐 Starting Flare backend …")
uvicorn.run(app, host="0.0.0.0", port=7860)