Spaces:
Running
Running
| import uuid | |
| from datetime import datetime, date | |
| from typing import Dict, Any, Optional, Union, List, Literal | |
| from pydantic import BaseModel, Field | |
| class Insight(BaseModel): | |
| """A single insight generated by the agent.""" | |
| message: str | |
| value: Optional[Union[float, int, str]] = None | |
| raw_data: Dict[str, Any] = Field(default_factory=dict) | |
| evidence: Optional[List[str]] = None | |
| constraint: Optional[str] = None | |
| class InsightsOutput(BaseModel): | |
| """Output from the InsightsAgent.""" | |
| primary_lever: Insight | |
| risk_signal: Insight | |
| key_observations: List[Insight] | |
| summary: Optional[Insight] = None | |
| class PlanOutput(BaseModel): | |
| """Output from the PlanAgent.""" | |
| plan: str | |
| class RiskAssessment(BaseModel): | |
| """Assessment of injury or fatigue risk based on heuristics.""" | |
| risk_level: Literal["LOW", "MEDIUM", "HIGH"] | |
| reasons: List[str] = Field(default_factory=list) | |
| recommended_adjustments: List[str] = Field(default_factory=list) | |
| metrics_used: Dict[str, Any] = Field(default_factory=dict) | |
| class WeeklyTrends(BaseModel): | |
| """Weekly trend metrics used for analysis.""" | |
| pace_trend_s_per_km: Optional[float] = None | |
| distance_trend_m: Optional[float] = None | |
| avg_runs_per_week: Optional[float] = None | |
| run_monotony: Optional[float] = None | |
| class WeeklySummary(BaseModel): | |
| """Aggregated metrics for the current coaching session.""" | |
| week_start: Optional[date] = None | |
| weekly_km: Dict[str, float] = Field(default_factory=dict) | |
| consistency_score: int = 50 | |
| num_runs: int = 0 | |
| total_distance_m: float = 0.0 | |
| avg_hr_bpm: Optional[float] = None | |
| avg_pace_s_per_km: float = 0.0 | |
| total_duration_s: int = 0 | |
| performance_brief: Optional[str] = None | |
| performance_focus: Optional[str] = None | |
| structure_status: Optional[dict] = None | |
| brief_source_hash: Optional[str] = None | |
| brief_generated_at: Optional[datetime] = None | |
| class AnalysisRecord(BaseModel): | |
| """Full record of an analysis run.""" | |
| id: str = Field(default_factory=lambda: str(uuid.uuid4())) | |
| created_at: datetime = Field(default_factory=datetime.now) | |
| source_files: List[str] = Field(default_factory=list) | |
| formats: List[str] = Field(default_factory=list) | |
| run_summary: Dict[str, Any] = Field(default_factory=dict) | |
| run_timeseries: List[Dict[str, Any]] = Field(default_factory=list) | |
| insights_json: Dict[str, Any] = Field(default_factory=dict) | |
| plan_json: Dict[str, Any] = Field(default_factory=dict) | |
| route_json: Dict[str, Any] = Field(default_factory=dict) | |