52 lines
1.4 KiB
Python
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,
|
|
)
|
|
|