Blum / backend /app /api /routers /runtime.py
Italianhype's picture
Deploy BLUM engine evidence agents
f7c0a33 verified
Raw
History Blame Contribute Delete
3.05 kB
from __future__ import annotations
from fastapi import APIRouter, Depends, Query
from sqlalchemy.orm import Session
from app.core.config import get_settings
from app.core.database import get_db
from app.runtime.facade import BlumRuntimeFacade
from app.services.central_brain_runtime import CentralBrainRuntime, LearningHealthService, SnapshotProducerService, SnapshotWatchdogService
from app.services.dashboard_snapshots import DashboardSnapshotService
from app.services.learning_summary import LearningSummaryService
settings = get_settings()
router = APIRouter(tags=["Runtime"])
@router.get("/brain/runtime-state")
def brain_runtime_state(db: Session = Depends(get_db)) -> dict:
return CentralBrainRuntime().state(db)
@router.get("/engine/status")
@router.get("/api/engine/status")
def engine_status(db: Session = Depends(get_db)) -> dict:
from app.engine.facade import BlumEngineFacade
return BlumEngineFacade().status(db)
@router.get("/engine/contracts")
@router.get("/api/engine/contracts")
def engine_contracts() -> dict:
from app.engine.facade import BlumEngineFacade
return BlumEngineFacade().contract()
@router.get("/engine/agents")
@router.get("/api/engine/agents")
def engine_agents(
agent: list[str] | None = Query(default=None),
limit: int = Query(default=8, ge=1, le=20),
db: Session = Depends(get_db),
) -> dict:
from app.engine.facade import BlumEngineFacade
return BlumEngineFacade().agent_evidence(db, agents=agent, limit=limit)
@router.get("/runtime/status")
@router.get("/api/runtime/status")
def runtime_status(db: Session = Depends(get_db)) -> dict:
return BlumRuntimeFacade().status(db)
@router.get("/runtime/contracts")
@router.get("/api/runtime/contracts")
def runtime_contracts() -> dict:
return BlumRuntimeFacade().contract()
@router.get("/snapshots/health")
def snapshots_health(db: Session = Depends(get_db)) -> dict:
return SnapshotWatchdogService().health(db, queue_rebuild=False)
@router.post("/snapshots/produce")
def snapshots_produce(
snapshot_type: str | None = Query(default=None),
max_items: int = Query(default=settings.blum_autonomous_max_items_per_job, ge=1, le=50),
db: Session = Depends(get_db),
) -> dict:
if snapshot_type:
return SnapshotProducerService().produce(db, snapshot_type)
return SnapshotProducerService().produce_many(db, max_items=max_items)
@router.get("/learning/health")
def learning_health(db: Session = Depends(get_db)) -> dict:
snapshot_health = SnapshotWatchdogService().health(db, queue_rebuild=False)
return LearningHealthService().health(db, snapshot_health=snapshot_health)
@router.get("/api/learning-intelligence/summary")
def learning_intelligence_summary(db: Session = Depends(get_db)) -> dict:
return LearningSummaryService().summary(db)
@router.get("/api/dashboard-snapshots/{snapshot_type}")
def dashboard_snapshot(snapshot_type: str, db: Session = Depends(get_db)) -> dict:
return DashboardSnapshotService().latest(db, snapshot_type=snapshot_type)