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

145 lines
3.9 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_PROJECT_UPDATE,
INTENT_PROJECT_ARCHIVE,
INTENT_PROJECT_REOPEN,
INTENT_PROJECT_DELETE,
INTENT_QUERY,
INTENT_TASK_CREATE,
INTENT_TASK_UPDATE,
INTENT_TASK_ASSIGN,
INTENT_TASK_PRIORITIZE,
INTENT_TASK_STATUS_TRANSITION,
INTENT_TASK_DELETE,
INTENT_PERSONNEL_ROLE_UPDATE,
INTENT_PERSONNEL_WORKLOAD_UPDATE,
INTENT_PERSONNEL_AVAILABILITY_UPDATE,
INTENT_KNOWLEDGE_DOC_UPSERT,
INTENT_KNOWLEDGE_CHUNK_UPSERT,
INTENT_KNOWLEDGE_LINK_UPSERT,
INTENT_KNOWLEDGE_REINDEX,
INTENT_NOTIFICATION_CREATE,
INTENT_NOTIFICATION_ACK,
INTENT_NOTIFICATION_CLOSE,
INTENT_SIGNAL_CREATE,
INTENT_SIGNAL_SOURCE_ONBOARD,
ROUTE_FAMILY_KNOWLEDGE,
ROUTE_FAMILY_NOTIFICATION,
ROUTE_FAMILY_PERSONNEL,
ROUTE_FAMILY_PROJECT,
ROUTE_PROJECT_SIGNAL_CANCEL,
ROUTE_PROJECT_SIGNAL_COMMIT,
ROUTE_PROJECT_SIGNAL_DISCOVER,
ROUTE_PROJECT_SIGNAL_REFRESH,
ROUTE_PROJECT_UPDATE,
ROUTE_PROJECT_ARCHIVE,
ROUTE_PROJECT_REOPEN,
ROUTE_PROJECT_DELETE,
ROUTE_TASK_UPDATE,
ROUTE_TASK_ASSIGN,
ROUTE_TASK_PRIORITIZE,
ROUTE_TASK_STATUS_TRANSITION,
ROUTE_TASK_DELETE,
ROUTE_PERSONNEL_ROLE_UPDATE,
ROUTE_PERSONNEL_WORKLOAD_UPDATE,
ROUTE_PERSONNEL_AVAILABILITY_UPDATE,
ROUTE_KNOWLEDGE_DOC_UPSERT,
ROUTE_KNOWLEDGE_CHUNK_UPSERT,
ROUTE_KNOWLEDGE_LINK_UPSERT,
ROUTE_KNOWLEDGE_REINDEX,
ROUTE_NOTIFICATION_CREATE,
ROUTE_NOTIFICATION_ACK,
ROUTE_NOTIFICATION_CLOSE,
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_PROJECT_UPDATE",
"INTENT_PROJECT_ARCHIVE",
"INTENT_PROJECT_REOPEN",
"INTENT_PROJECT_DELETE",
"INTENT_QUERY",
"INTENT_TASK_CREATE",
"INTENT_TASK_UPDATE",
"INTENT_TASK_ASSIGN",
"INTENT_TASK_PRIORITIZE",
"INTENT_TASK_STATUS_TRANSITION",
"INTENT_TASK_DELETE",
"INTENT_PERSONNEL_ROLE_UPDATE",
"INTENT_PERSONNEL_WORKLOAD_UPDATE",
"INTENT_PERSONNEL_AVAILABILITY_UPDATE",
"INTENT_KNOWLEDGE_DOC_UPSERT",
"INTENT_KNOWLEDGE_CHUNK_UPSERT",
"INTENT_KNOWLEDGE_LINK_UPSERT",
"INTENT_KNOWLEDGE_REINDEX",
"INTENT_NOTIFICATION_CREATE",
"INTENT_NOTIFICATION_ACK",
"INTENT_NOTIFICATION_CLOSE",
"INTENT_SIGNAL_CREATE",
"INTENT_SIGNAL_SOURCE_ONBOARD",
"ROUTE_FAMILY_KNOWLEDGE",
"ROUTE_FAMILY_NOTIFICATION",
"ROUTE_FAMILY_PERSONNEL",
"ROUTE_FAMILY_PROJECT",
"ROUTE_PROJECT_SIGNAL_CANCEL",
"ROUTE_PROJECT_SIGNAL_COMMIT",
"ROUTE_PROJECT_SIGNAL_DISCOVER",
"ROUTE_PROJECT_SIGNAL_REFRESH",
"ROUTE_PROJECT_UPDATE",
"ROUTE_PROJECT_ARCHIVE",
"ROUTE_PROJECT_REOPEN",
"ROUTE_PROJECT_DELETE",
"ROUTE_TASK_UPDATE",
"ROUTE_TASK_ASSIGN",
"ROUTE_TASK_PRIORITIZE",
"ROUTE_TASK_STATUS_TRANSITION",
"ROUTE_TASK_DELETE",
"ROUTE_PERSONNEL_ROLE_UPDATE",
"ROUTE_PERSONNEL_WORKLOAD_UPDATE",
"ROUTE_PERSONNEL_AVAILABILITY_UPDATE",
"ROUTE_KNOWLEDGE_DOC_UPSERT",
"ROUTE_KNOWLEDGE_CHUNK_UPSERT",
"ROUTE_KNOWLEDGE_LINK_UPSERT",
"ROUTE_KNOWLEDGE_REINDEX",
"ROUTE_NOTIFICATION_CREATE",
"ROUTE_NOTIFICATION_ACK",
"ROUTE_NOTIFICATION_CLOSE",
"normalize_workload_ratio",
"re",
"safe_int",
]