""" Punto de entrada de la API. Ejecutar con: uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload """ import os import pathlib from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from fastapi.staticfiles import StaticFiles from app.routers import documents, presentations, query app = FastAPI( title="chatbot-Norm API", version="0.2.0", description="RAG API para consultas sobre NORM y química.", ) # --------------------------------------------------------------------------- # CORS — ajustar ALLOWED_ORIGINS en producción vía variable de entorno # --------------------------------------------------------------------------- _raw_origins = os.getenv( "ALLOWED_ORIGINS", "http://localhost:3000,http://localhost:5173," "http://127.0.0.1:3000,http://127.0.0.1:5173", ) allowed_origins = [o.strip() for o in _raw_origins.split(",") if o.strip()] app.add_middleware( CORSMiddleware, allow_origins=allowed_origins, allow_origin_regex=r"https?://(localhost|127\.0\.0\.1)(:\d+)?", allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # --------------------------------------------------------------------------- # Routers # --------------------------------------------------------------------------- app.include_router(query.router) app.include_router(documents.router) app.include_router(presentations.router) @app.get("/health") async def health_check(): return {"status": "ok"} # --------------------------------------------------------------------------- # SPA — debe ir al final para no solapar las rutas de la API # --------------------------------------------------------------------------- _static_dir = pathlib.Path(__file__).parent / "static" if _static_dir.exists(): app.mount("/", StaticFiles(directory=_static_dir, html=True), name="spa")