Skip to main content
Afitpilot®
← Back to Glossary
Strength & Load

Modality

Also known as: Session Modality, Session Type Bucket

The 3-bucket coarse classification we apply to every session: Strength, Endurance, or Mixed. Modality is what makes weekly AU a richer story than a single number — it tells you whether your week leaned barbell-heavy, aerobic, or hybrid.

Path A (primary): the LLM populates session.modality at plan generation. Path B (fallback): a deterministic classifier infers modality from session.focus, sessionType, and exercise composition when Path A is missing or malformed.

A 5x5 squat-press-pull session = strength. A long Z2 ride = endurance. A circuit of kettlebell swings + box jumps + rowing = mixed. A hypertrophy push session = strength. A skill / drill / mobility flow = mixed.

Modality drives the weekly AU split shown on the coach drawer and the athlete Insights view. The plan generator prompts (week-plan and master-plan) now require session.modality on every output session. Historical sessions are classified with the Path B fallback during the load_summary backfill and tagged modalitySource: 'classified' so the UI can hint at inferred data.

Who / ContextValueNote
Strength researchTonnage worksMechanical-tension load is well captured by sets x reps x weight
Endurance researchTSS / TRIMP worksPower or HR-zone metrics, but require power meters or HR thresholds we don't have
Skill / mixed sessionsNo good external metricsRPE x duration is the only universal currency that works here
Practical realityMost athletes blendEven pure lifters do conditioning, warm-ups, mobility — modality split makes the blend visible without overengineering
  • Three buckets is intentionally coarse. "Mixed" is the catch-all for skill, mobility, hybrid, conditioning, and "didn't fit elsewhere" sessions, which can hide real differences (a power session versus a yoga flow both land in Mixed).
  • Path A and Path B can disagree on the same session — particularly for hybrid sessions where the LLM and the classifier weight differently. Validation target is >=95% agreement.
  • Classifier rules are keyword-based on session.focus and sessionType — niche labels can fall through to the Mixed default. Edge cases (e.g. a powerlifting opener simulator session) may be miscategorised.
  • Modality is per-session, not per-block. A session with a strength main + a conditioning finisher is bucketed as one or the other, not both.

The 3-bucket split mirrors how Impellizzeri (2020) frames internal versus external load: internal load (sRPE, AU) generalises across modalities, but external load (tonnage, TSS, distance) is modality-specific. By bucketing internal load by modality we get the best of both — a comparable AU number with enough context to interpret what produced it. We resisted finer splits (per-sport or per-energy-system) because the marginal information gain is small relative to classification reliability cost.