api.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. """Formal FastAPI entrypoint for the creation-knowledge workbench."""
  2. from __future__ import annotations
  3. import os
  4. from pathlib import Path
  5. from fastapi import FastAPI
  6. from fastapi.middleware.cors import CORSMiddleware
  7. from fastapi.middleware.gzip import GZipMiddleware
  8. from fastapi.staticfiles import StaticFiles
  9. from app.routes import acquisition, decode, manual_queries, payloads, query_generation, runs
  10. ROOT = Path(__file__).resolve().parent.parent
  11. FRONTEND_DIST = ROOT / "app" / "frontend" / "dist"
  12. def _cors_origins() -> list[str]:
  13. raw = os.getenv("CK_CORS_ORIGINS", "")
  14. if raw.strip():
  15. return [item.strip() for item in raw.split(",") if item.strip()]
  16. return [
  17. "http://localhost:5173",
  18. "http://127.0.0.1:5173",
  19. "http://localhost:5180",
  20. "http://127.0.0.1:5180",
  21. ]
  22. def create_app() -> FastAPI:
  23. app = FastAPI(title="创作知识发现解构工作台", version="0.6.0")
  24. app.add_middleware(
  25. CORSMiddleware,
  26. allow_origins=_cors_origins(),
  27. allow_credentials=True,
  28. allow_methods=["GET", "POST", "PATCH", "OPTIONS"],
  29. allow_headers=["Authorization", "Content-Type"],
  30. )
  31. app.add_middleware(GZipMiddleware, minimum_size=1024)
  32. app.include_router(acquisition.router)
  33. app.include_router(decode.router)
  34. app.include_router(manual_queries.router)
  35. app.include_router(payloads.router)
  36. app.include_router(query_generation.router)
  37. app.include_router(runs.router)
  38. @app.get("/health")
  39. def health() -> dict[str, str]:
  40. return {"status": "ok", "entrypoint": "app.api:app"}
  41. if FRONTEND_DIST.exists():
  42. app.mount("/app", StaticFiles(directory=str(FRONTEND_DIST), html=True), name="app")
  43. return app
  44. app = create_app()