File size: 2,675 Bytes
d64fd55
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
from dataclasses import dataclass, field
from datetime import date
from typing import Optional, Dict
import uuid

@dataclass
class RunnerIntelligenceSnapshot:
    """
    Central intelligence artifact representing the current state of a runner.
    
    This object serves as the canonical interface between the pipeline and:
    - UI (Gradio)
    - Integrations (Strava / WhatsApp)
    - Observability analytics
    
    It aggregates derived signals without altering pipeline logic.
    Fields are raw values rather than translated text, allowing i18n
    at the edge (e.g. UI).
    """
    id: Optional[uuid.UUID] = field(default_factory=uuid.uuid4)

    week_start: Optional[date] = None

    # Training state and health
    training_state: Optional[str] = None
    health_signal: Optional[str] = None

    # Positioning
    positioning_status: Optional[str] = None
    positioning_change: Optional[str] = None

    # Goals
    goal_trajectory: Optional[str] = None
    goal_progress_pct: Optional[float] = None

    # Advice / Future
    next_run: Optional[str] = None
    training_type: Optional[str] = None
    training_focus: Optional[str] = None
    training_why: Optional[str] = None

    # Insights
    key_insight: Optional[str] = None
    forward_focus: Optional[str] = None

    # Quantitative Metrics
    weekly_distance_km: float = 0.0
    num_runs: int = 0
    run_count: int = 0
    consistency_score: int = 0
    avg_pace: Optional[float] = None
    avg_hr: Optional[float] = None
    
    # Structure
    structure_status: Dict = field(default_factory=dict)

    # Performance
    performance_brief: Optional[str] = None
    performance_focus: Optional[str] = None
    
    # UI Presentation Ready Fields
    performance_story: Optional[str] = None
    delta_summary: Optional[Dict[str, str]] = None
    evidence_view: Optional[str] = None
    structure_view: Optional[str] = None
    goal_status_text: Optional[str] = None
    
    # Raw DTO data for UI transparency
    trend: Dict = field(default_factory=dict)
    weekly_trend: Dict = field(default_factory=dict)
    positioning: Dict = field(default_factory=dict)
    positioning_view: Dict = field(default_factory=dict)
    goal_trajectory_data: Dict = field(default_factory=dict)
    insights: Dict = field(default_factory=dict)
    plan: Optional[str] = None
    recommendation: Dict = field(default_factory=dict)
    charts: Dict = field(default_factory=dict)
    weekly_brief: Optional[str] = None
    weekly_focus: Optional[str] = None
    weekly_snapshot: Dict = field(default_factory=dict)
    active_goal: Dict = field(default_factory=dict)
    goal_view: Dict = field(default_factory=dict)