avfranco's picture
HF Space deploy snapshot (minimal allow-list)
557ee65
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)