merge(R2): DialogResolver MVP P0 (worktree a86565d0)
This commit is contained in:
@@ -5790,6 +5790,66 @@ async def agents_fleet():
|
||||
}
|
||||
|
||||
|
||||
# =========================================================================
|
||||
# R2 MVP P0 — DialogResolver (catalogue centralisé des modaux runtime)
|
||||
# Flag OFF par défaut. Activer en posant RPA_DIALOG_RESOLVER_ENABLED=true.
|
||||
# Le rebranchement côté agent_v1 (consommation de cet endpoint au runtime)
|
||||
# vient en P1 — pour l'instant l'endpoint est exposé "prêt à consommer".
|
||||
# =========================================================================
|
||||
from .core.dialog import DialogResolver as _DialogResolver # noqa: E402
|
||||
|
||||
|
||||
def _dialog_resolver_enabled() -> bool:
|
||||
"""Flag d'activation R2 — lu à chaque appel pour faciliter les tests."""
|
||||
return os.environ.get("RPA_DIALOG_RESOLVER_ENABLED", "").lower() in (
|
||||
"1", "true", "yes", "on",
|
||||
)
|
||||
|
||||
|
||||
# Instance partagée — le résolveur est stateless (cf. resolver.py).
|
||||
_dialog_resolver_singleton = _DialogResolver()
|
||||
|
||||
|
||||
class DialogResolveRequest(BaseModel):
|
||||
"""Payload de l'endpoint ``/api/v1/dialog/resolve`` (P0)."""
|
||||
|
||||
current_title: str
|
||||
evidence_texts: List[str] = []
|
||||
machine_id: Optional[str] = None
|
||||
|
||||
|
||||
@app.post("/api/v1/dialog/resolve")
|
||||
async def dialog_resolve(payload: DialogResolveRequest):
|
||||
"""Renvoyer la résolution d'un modal pour un titre + evidences donnés.
|
||||
|
||||
Réponse :
|
||||
{
|
||||
"matched": bool,
|
||||
"dialog_id": str,
|
||||
"policy": "auto" | "pause" | "skip",
|
||||
"action": {...} | None
|
||||
}
|
||||
|
||||
Si le flag ``RPA_DIALOG_RESOLVER_ENABLED`` n'est pas positionné,
|
||||
l'endpoint retourne 503 (désactivé par défaut — aucun risque de
|
||||
régression sur le pipeline existant).
|
||||
"""
|
||||
if not _dialog_resolver_enabled():
|
||||
raise HTTPException(
|
||||
status_code=503,
|
||||
detail=(
|
||||
"DialogResolver désactivé (flag RPA_DIALOG_RESOLVER_ENABLED). "
|
||||
"P0 : endpoint exposé mais OFF par défaut."
|
||||
),
|
||||
)
|
||||
|
||||
resolution = _dialog_resolver_singleton.resolve(
|
||||
current_title=payload.current_title,
|
||||
evidence_texts=payload.evidence_texts,
|
||||
)
|
||||
return resolution.to_dict()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
import uvicorn
|
||||
|
||||
|
||||
Reference in New Issue
Block a user