PMFlow/backend/app/services/ai_pmo/ai_pmo_decision/shared.py

59 lines
1.3 KiB
Python

"""Shared imports/helpers for AI PMO decision runtime."""
from __future__ import annotations
import re
from typing import Any
from ..ai_pmo_intent import (
INTENT_FOLLOWUP_CONFIRM,
INTENT_FOLLOWUP_CONTINUE,
INTENT_PROJECT_CREATE,
INTENT_QUERY,
INTENT_SIGNAL_CREATE,
INTENT_SIGNAL_SOURCE_ONBOARD,
ROUTE_PROJECT_SIGNAL_CANCEL,
ROUTE_PROJECT_SIGNAL_COMMIT,
ROUTE_PROJECT_SIGNAL_DISCOVER,
ROUTE_PROJECT_SIGNAL_REFRESH,
CanonicalIntent,
)
def normalize_workload_ratio(value: Any) -> float:
try:
ratio = float(value or 0.0)
except (TypeError, ValueError):
return 0.0
if ratio <= 0:
return 0.0
return ratio / 100.0 if ratio > 1.0 else ratio
def safe_int(value: Any) -> int | None:
try:
if value is None or value == "":
return None
return int(value)
except (TypeError, ValueError):
return None
__all__ = [
"Any",
"CanonicalIntent",
"INTENT_FOLLOWUP_CONFIRM",
"INTENT_FOLLOWUP_CONTINUE",
"INTENT_PROJECT_CREATE",
"INTENT_QUERY",
"INTENT_SIGNAL_CREATE",
"INTENT_SIGNAL_SOURCE_ONBOARD",
"ROUTE_PROJECT_SIGNAL_CANCEL",
"ROUTE_PROJECT_SIGNAL_COMMIT",
"ROUTE_PROJECT_SIGNAL_DISCOVER",
"ROUTE_PROJECT_SIGNAL_REFRESH",
"normalize_workload_ratio",
"re",
"safe_int",
]