Convert SceneConfig → JSON-safe dict.
(scene: SceneConfig)
| 86 | |
| 87 | |
| 88 | def _serialize_scene(scene: SceneConfig) -> dict[str, Any]: |
| 89 | """Convert SceneConfig → JSON-safe dict.""" |
| 90 | data = asdict(scene) |
| 91 | # Convert Tier enums to strings |
| 92 | if data.get("tier_floor") is not None: |
| 93 | data["tier_floor"] = data["tier_floor"].value if isinstance(data["tier_floor"], Tier) else str(data["tier_floor"]) |
| 94 | else: |
| 95 | data.pop("tier_floor", None) |
| 96 | if data.get("tier_cap") is not None: |
| 97 | data["tier_cap"] = data["tier_cap"].value if isinstance(data["tier_cap"], Tier) else str(data["tier_cap"]) |
| 98 | else: |
| 99 | data.pop("tier_cap", None) |
| 100 | # Strip None/empty optionals for cleaner JSON |
| 101 | if not data.get("allowed_providers"): |
| 102 | data.pop("allowed_providers", None) |
| 103 | if data.get("max_cost_per_request") is None: |
| 104 | data.pop("max_cost_per_request", None) |
| 105 | return data |
| 106 | |
| 107 | |
| 108 | def _deserialize_scene(data: dict[str, Any]) -> SceneConfig | None: |