Connector calls, semantic rules, and DuckDB memory keep long runs stable, and stream retry stops chats from stalling. Co-authored-by: Cursor <cursoragent@cursor.com>
57 lines
1.6 KiB
Python
57 lines
1.6 KiB
Python
from __future__ import annotations
|
|
|
|
from fastapi import APIRouter, Request
|
|
|
|
router = APIRouter()
|
|
|
|
|
|
def _features_payload(settings) -> dict:
|
|
flags = settings.features.to_dict()
|
|
from kamidso.native_connectors.flags import (
|
|
didar_connector_enabled,
|
|
native_connectors_v1_enabled,
|
|
)
|
|
|
|
flags["connectors"] = bool(
|
|
native_connectors_v1_enabled() and didar_connector_enabled()
|
|
)
|
|
return flags
|
|
|
|
|
|
@router.get("/health")
|
|
async def health(request: Request):
|
|
app = request.app.state.kamidso
|
|
engine = app.engines.default()
|
|
engine_health = await engine.health() if engine else {"status": "unavailable"}
|
|
return {
|
|
"status": "ok",
|
|
"product": app.settings.product.name,
|
|
"locale": app.settings.product.locale,
|
|
"engine": engine_health,
|
|
}
|
|
|
|
|
|
@router.get("/product")
|
|
async def product(request: Request):
|
|
settings = request.app.state.kamidso.settings
|
|
return {
|
|
"product": settings.product.name,
|
|
"locale": settings.product.locale,
|
|
"direction": settings.product.direction,
|
|
"features": _features_payload(settings),
|
|
"developer_mode": settings.developer_mode,
|
|
}
|
|
|
|
|
|
@router.get("/features")
|
|
async def features(request: Request):
|
|
settings = request.app.state.kamidso.settings
|
|
user = getattr(request.state, "kamidso_user", None)
|
|
flags = _features_payload(settings)
|
|
role = user.role if user else "user"
|
|
if role == "user" and not settings.developer_mode:
|
|
flags["apps"] = False
|
|
flags["awel"] = False
|
|
flags["scheduled_tasks"] = False
|
|
return {"features": flags, "developer_mode": settings.developer_mode, "role": role}
|