NODEDC_1C/router/decision_log.py

52 lines
1.4 KiB
Python

from __future__ import annotations
from dataclasses import asdict, dataclass
from typing import Any
from router.query_classifier import RouteDecisionFlags
from router.route_selector import RouteSelectionResult
from router.store_sufficiency import StoreSufficiencyResult
@dataclass
class RouteDecisionLog:
question_id: str
question_text: str
parsed_class: str
decision_flags: dict[str, Any]
sufficiency_snapshot: dict[str, Any]
candidate_routes: list[str]
rejected_routes: dict[str, str]
chosen_route: str
execution_mode: str
batch_job_id: str | None
def to_dict(self) -> dict[str, Any]:
return asdict(self)
def build_route_decision_log(
*,
question_id: str,
question_text: str,
parsed_class: str,
flags: RouteDecisionFlags,
suff: StoreSufficiencyResult,
selection: RouteSelectionResult,
execution_mode: str,
batch_job_id: str | None,
) -> RouteDecisionLog:
return RouteDecisionLog(
question_id=question_id,
question_text=question_text,
parsed_class=parsed_class,
decision_flags=flags.to_dict(),
sufficiency_snapshot=suff.to_dict(),
candidate_routes=selection.candidate_routes,
rejected_routes=selection.rejected_routes,
chosen_route=selection.chosen_route,
execution_mode=execution_mode,
batch_job_id=batch_job_id,
)