Spaces:
Sleeping
Sleeping
File size: 1,642 Bytes
157b149 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | """
FastAPI application for MindSphere Coach.
"""
from __future__ import annotations
import logging
from pathlib import Path
from fastapi import FastAPI, WebSocket
# Configure logging to show INFO from mindsphere modules
logging.basicConfig(level=logging.INFO, format="%(name)s - %(levelname)s - %(message)s")
logging.getLogger("mindsphere").setLevel(logging.INFO)
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
from fastapi.responses import FileResponse
from .routes import router, get_session_manager
from .websocket import websocket_endpoint
app = FastAPI(
title="MindSphere Coach",
description="Interactive ToM-powered coaching agent with Active Inference",
version="0.1.0",
)
# CORS for development
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
# API routes
app.include_router(router)
# Static frontend files
FRONTEND_DIR = Path(__file__).parent.parent / "frontend"
if FRONTEND_DIR.exists():
app.mount("/static", StaticFiles(directory=str(FRONTEND_DIR)), name="static")
@app.get("/")
async def root():
"""Serve the main frontend page."""
index_path = FRONTEND_DIR / "index.html"
if index_path.exists():
return FileResponse(str(index_path))
return {"message": "MindSphere Coach API", "docs": "/docs"}
@app.websocket("/ws/{session_id}")
async def ws_endpoint(websocket: WebSocket, session_id: str):
"""WebSocket endpoint for real-time coaching."""
sm = get_session_manager()
await websocket_endpoint(websocket, session_id, sm)
|