runner-ai-intelligence / src /core /intelligence /intelligence_serializer.py
avfranco's picture
HF Space deploy snapshot (minimal allow-list)
d64fd55
Raw
History Blame Contribute Delete
2.19 kB
from tools.helpers import serialize_charts
def serialize_snapshot(snapshot):
if not snapshot:
return None
def _safe_dump(obj):
if obj is None: return None
if isinstance(obj, dict): return obj
if hasattr(obj, "model_dump"): return obj.model_dump()
return str(obj)
return {
"id": str(snapshot.id) if snapshot.id else None,
"week_start": str(snapshot.week_start) if snapshot.week_start else None,
"training_state": snapshot.training_state,
"health_signal": snapshot.health_signal,
"positioning_status": snapshot.positioning_status,
"positioning_change": snapshot.positioning_change,
"goal_trajectory": snapshot.goal_trajectory,
"goal_progress_pct": snapshot.goal_progress_pct,
"next_run": snapshot.next_run,
"training_focus": snapshot.training_focus,
"training_why": snapshot.training_why,
"key_insight": snapshot.key_insight,
"forward_focus": snapshot.forward_focus,
"weekly_distance_km": snapshot.weekly_distance_km,
"num_runs": snapshot.num_runs,
"run_count": snapshot.run_count,
"consistency_score": snapshot.consistency_score,
"avg_pace": snapshot.avg_pace,
"avg_hr": snapshot.avg_hr,
"structure_status": _safe_dump(snapshot.structure_status),
"performance_brief": snapshot.performance_brief,
"performance_focus": snapshot.performance_focus,
"trend": _safe_dump(snapshot.trend),
"weekly_trend": _safe_dump(snapshot.weekly_trend),
"positioning": _safe_dump(snapshot.positioning),
"positioning_view": _safe_dump(snapshot.positioning_view),
"goal_trajectory_data": _safe_dump(snapshot.goal_trajectory_data),
"insights": _safe_dump(snapshot.insights),
"plan": snapshot.plan,
"recommendation": _safe_dump(snapshot.recommendation),
"charts": serialize_charts(snapshot.charts),
"weekly_brief": snapshot.weekly_brief,
"weekly_focus": snapshot.weekly_focus,
"active_goal": _safe_dump(snapshot.active_goal),
"goal_view": _safe_dump(snapshot.goal_view),
}