59 lines
1.3 KiB
Python
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",
|
|
]
|