(self)
| 507 | self._storage.save([_record_payload(r) for r in self._records]) |
| 508 | |
| 509 | def _load(self) -> None: |
| 510 | for r in self._storage.load(): |
| 511 | if not isinstance(r, dict) or "timestamp" not in r: |
| 512 | continue |
| 513 | self._records.append(RouteRecord( |
| 514 | timestamp=r["timestamp"], |
| 515 | requested_model=r.get("requested_model", ""), |
| 516 | mode=r.get("mode", "auto"), |
| 517 | model=r.get("model", ""), |
| 518 | tier=_normalize_tier_label(r.get("tier", "")), |
| 519 | decision_tier=_normalize_tier_label(r.get("decision_tier", "")) if r.get("decision_tier", "") else "", |
| 520 | served_quality=_normalize_served_quality(r.get("served_quality", "")), |
| 521 | served_quality_target=_normalize_served_quality(r.get("served_quality_target", "")), |
| 522 | served_quality_floor=_normalize_served_quality(r.get("served_quality_floor", "")), |
| 523 | capability_lane=str(r.get("capability_lane", "") or "").strip().lower(), |
| 524 | confidence=r.get("confidence", 0.0), |
| 525 | raw_confidence=r.get("raw_confidence", r.get("confidence", 0.0)), |
| 526 | confidence_source=r.get("confidence_source", ""), |
| 527 | calibration_version=r.get("calibration_version", ""), |
| 528 | calibration_sample_count=r.get("calibration_sample_count", 0), |
| 529 | calibration_temperature=r.get("calibration_temperature", 1.0), |
| 530 | calibration_applied_tags=list(r.get("calibration_applied_tags", []) or []), |
| 531 | method=r.get("method", "pool"), |
| 532 | estimated_cost=r.get("estimated_cost", 0.0), |
| 533 | baseline_cost=r.get("baseline_cost", 0.0), |
| 534 | actual_cost=r.get("actual_cost"), |
| 535 | savings=r.get("savings", 0.0), |
| 536 | latency_us=r.get("latency_us", 0.0), |
| 537 | usage_input_tokens=r.get("usage_input_tokens", 0), |
| 538 | usage_output_tokens=r.get("usage_output_tokens", 0), |
| 539 | cache_read_input_tokens=r.get("cache_read_input_tokens", 0), |
| 540 | cache_write_input_tokens=r.get("cache_write_input_tokens", 0), |
| 541 | cache_hit_ratio=r.get("cache_hit_ratio", 0.0), |
| 542 | transport=r.get("transport", "openai-chat"), |
| 543 | cache_mode=r.get("cache_mode", "none"), |
| 544 | cache_family=r.get("cache_family", "generic"), |
| 545 | cache_breakpoints=r.get("cache_breakpoints", 0), |
| 546 | input_tokens_before=r.get("input_tokens_before", 0), |
| 547 | input_tokens_after=r.get("input_tokens_after", 0), |
| 548 | artifacts_created=r.get("artifacts_created", 0), |
| 549 | compacted_messages=r.get("compacted_messages", 0), |
| 550 | semantic_summaries=r.get("semantic_summaries", 0), |
| 551 | semantic_calls=r.get("semantic_calls", 0), |
| 552 | semantic_failures=r.get("semantic_failures", 0), |
| 553 | semantic_quality_fallbacks=r.get("semantic_quality_fallbacks", 0), |
| 554 | checkpoint_created=r.get("checkpoint_created", False), |
| 555 | rehydrated_artifacts=r.get("rehydrated_artifacts", 0), |
| 556 | sidechannel_estimated_cost=r.get("sidechannel_estimated_cost", 0.0), |
| 557 | sidechannel_actual_cost=r.get("sidechannel_actual_cost"), |
| 558 | session_id=r.get("session_id"), |
| 559 | turn_id=r.get("turn_id", ""), |
| 560 | step_type=r.get("step_type", "general"), |
| 561 | fallback_reason=r.get("fallback_reason", ""), |
| 562 | streaming=r.get("streaming", False), |
| 563 | request_id=r.get("request_id", ""), |
| 564 | prompt_preview=r.get("prompt_preview", ""), |
| 565 | complexity=r.get("complexity", 0.33), |
| 566 | route_reasoning=r.get("route_reasoning", ""), |
no test coverage detected