refactor: rebuild birth time rectification agent
This commit is contained in:
@@ -0,0 +1,71 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Any
|
||||
from uuid import NAMESPACE_URL, uuid5
|
||||
|
||||
from scripts.rectification.candidate_feature_service import build_candidate_feature_snapshot
|
||||
from scripts.rectification.contracts import RectificationRequest
|
||||
from scripts.rectification.diagnostics_service import run_diagnostics
|
||||
from scripts.rectification.scoring_service import (
|
||||
ALGORITHM_VERSION,
|
||||
build_event_contribution_matrix,
|
||||
calculation_spec,
|
||||
score_from_matrix,
|
||||
sha256,
|
||||
)
|
||||
|
||||
|
||||
def candidate_features(request: RectificationRequest) -> dict[str, Any]:
|
||||
spec = calculation_spec(request)
|
||||
spec_hash = sha256(spec)
|
||||
return {
|
||||
"algorithm_version": ALGORITHM_VERSION,
|
||||
"calculation_spec": spec,
|
||||
"calculation_spec_hash": spec_hash,
|
||||
"candidate_feature_snapshot": build_candidate_feature_snapshot(request, spec_hash),
|
||||
"can_confirm_exact_minute": False,
|
||||
}
|
||||
|
||||
|
||||
def score_candidates(request: RectificationRequest) -> dict[str, Any]:
|
||||
built = build_event_contribution_matrix(request)
|
||||
rows = score_from_matrix(request, built)
|
||||
spec = calculation_spec(request)
|
||||
spec_hash = sha256(spec)
|
||||
diagnostics = run_diagnostics(request, rows, built)
|
||||
fingerprint = sha256(request)
|
||||
return {
|
||||
"result_id": str(uuid5(NAMESPACE_URL, f"{ALGORITHM_VERSION}:{fingerprint}")),
|
||||
"algorithm_version": ALGORITHM_VERSION,
|
||||
"calculation_spec": spec,
|
||||
"calculation_spec_hash": spec_hash,
|
||||
"candidate_scores": [{
|
||||
"time": row["time"],
|
||||
"score": row["score"],
|
||||
"supporting_event_ids": [item["event_id"] for item in row["evidence"] if item["points"] > 0],
|
||||
"conflicting_event_ids": [item["event_id"] for item in row["evidence"] if item["points"] < 0],
|
||||
} for row in rows],
|
||||
"event_contribution_matrix": built["matrix"],
|
||||
"candidate_feature_snapshot": build_candidate_feature_snapshot(request, spec_hash, built.get("static_contexts")),
|
||||
"diagnostics": diagnostics,
|
||||
"robustness": {
|
||||
"neighbor_support_minutes": diagnostics["neighbor_support_minutes"],
|
||||
"leave_one_out_retention_rate": diagnostics["leave_one_event_out_retention_rate"],
|
||||
"leave_one_domain_out_retention_rate": diagnostics["leave_one_domain_out_retention_rate"],
|
||||
"date_sensitivity_retention_rate": diagnostics["date_sensitivity_retention_rate"],
|
||||
},
|
||||
"missing_layers": built["missing_layers"],
|
||||
"can_confirm_exact_minute": False,
|
||||
}
|
||||
|
||||
|
||||
def diagnostics(request: RectificationRequest) -> dict[str, Any]:
|
||||
scored = score_candidates(request)
|
||||
return {
|
||||
"result_id": scored["result_id"],
|
||||
"algorithm_version": scored["algorithm_version"],
|
||||
"calculation_spec_hash": scored["calculation_spec_hash"],
|
||||
"diagnostics": scored["diagnostics"],
|
||||
"missing_layers": scored["missing_layers"],
|
||||
"can_confirm_exact_minute": False,
|
||||
}
|
||||
Reference in New Issue
Block a user