From e5ca3c417769d97a6b020e235a6294cd49247c3c Mon Sep 17 00:00:00 2001 From: Lars Date: Tue, 7 Oct 2025 11:36:52 +0200 Subject: [PATCH] app/main.py aktualisiert --- app/main.py | 43 ++++++++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/app/main.py b/app/main.py index 1353471..5cb8ed0 100644 --- a/app/main.py +++ b/app/main.py @@ -7,9 +7,9 @@ Zweck: Kompatibilität: Python 3.12+; FastAPI 0.110+ (getestet lokal) Version: - 0.4.0 (WP-04 Hooks: optionale Router, /admin/meta) + 0.4.1 (WP-04 Hooks erweitert: Feature-Flags & /admin/features; bestehende Routen unverändert) Stand: - 2025-10-06 + 2025-10-07 Bezug: Handbuch & Knowledge Design (WP-03/04) Umgebung: @@ -17,8 +17,9 @@ Umgebung: Nutzung: uvicorn app.main:app --reload --port 8000 Änderungsverlauf: + 0.4.1 (2025-10-07) – Feature-Flags für dynamische WP-04-Router + /admin/features ergänzt. 0.4.0 (2025-10-06) – /admin/meta ergänzt; optionale Einbindung von graph/query/admin Routern. - 0.3.x (vorher) – Basisversion laut bereitgestellter Datei. + 0.3.x (vorher) – Basisversion laut bereitgestellter Datei. Hinweise: Bestehende Routen/Funktionen bleiben unverändert. @@ -31,21 +32,39 @@ from .config import get_settings from .routers.embed_router import router as embed_router from .routers.qdrant_router import router as qdrant_router -# Optionale WP-04 Router dynamisch einbinden, ohne harte Abhängigkeit: + def _maybe_include_wp04(app: FastAPI) -> None: + """ + WP-04 Router dynamisch einbinden, ohne harte Abhängigkeit. + Ergänzung: setzt app.state.features['wp04']-Flags, damit Admin/Monitoring + sichtbar machen kann, was tatsächlich geladen wurde. + """ + # Initialisiere Feature-Flags + if not hasattr(app.state, "features"): + app.state.features = {} + app.state.features.setdefault("wp04", {"graph": False, "query": False, "admin": False}) + + # Graph try: from .routers.graph import router as graph_router # type: ignore app.include_router(graph_router, prefix="/graph", tags=["graph"]) + app.state.features["wp04"]["graph"] = True except Exception: pass + + # Query try: from .routers.query import router as query_router # type: ignore app.include_router(query_router, prefix="/query", tags=["query"]) + app.state.features["wp04"]["query"] = True except Exception: pass + + # Admin (optional) try: from .routers.admin import router as admin_router # type: ignore app.include_router(admin_router, prefix="/admin", tags=["admin"]) + app.state.features["wp04"]["admin"] = True except Exception: pass @@ -56,9 +75,10 @@ def create_app() -> FastAPI: @app.get("/healthz") def healthz(): + """Basis-Liveness-Check (unverändert).""" return {"status": "ok", "qdrant": s.QDRANT_URL, "prefix": s.COLLECTION_PREFIX} - # Admin-Metadaten (WP-04) + # Admin-Metadaten (WP-04, unverändert) @app.get("/admin/meta") def admin_meta(): # Import lokal, damit fehlende Module nicht beim Start stören @@ -93,8 +113,21 @@ def create_app() -> FastAPI: pass return {"meta": meta} + # NEU: Features-/Readiness-Ansicht (rein ergänzend) + @app.get("/admin/features") + def admin_features(): + """ + Liefert die dynamisch gesetzten Feature-Flags für WP-04 Router + (graph/query/admin), ohne bestehende Endpunkte zu beeinflussen. + """ + features = getattr(app.state, "features", {}) + return {"features": features} + + # Bestehende Router (unverändert) app.include_router(embed_router) app.include_router(qdrant_router) + + # WP-04 Router ggf. dynamisch einbinden _maybe_include_wp04(app) return app