Module: Legion::Extensions::Agentic::Affect::Fatigue::Runners::Fatigue

Includes:
Helpers::Lex
Included in:
Client
Defined in:
lib/legion/extensions/agentic/affect/fatigue/runners/fatigue.rb

Instance Method Summary collapse

Instance Method Details

#energy_forecast(ticks: 50) ⇒ Object



60
61
62
63
# File 'lib/legion/extensions/agentic/affect/fatigue/runners/fatigue.rb', line 60

def energy_forecast(ticks: 50, **)
  log.debug("[fatigue] forecasting #{ticks} ticks")
  fatigue_store.energy_forecast(ticks: ticks)
end

#energy_statusObject



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/legion/extensions/agentic/affect/fatigue/runners/fatigue.rb', line 30

def energy_status(**)
  model = fatigue_store.model
  log.debug("[fatigue] status: energy=#{model.energy.round(3)} level=#{model.fatigue_level}")

  {
    energy:              model.energy.round(4),
    fatigue_level:       model.fatigue_level,
    performance_factor:  model.performance_factor,
    needs_rest:          model.needs_rest?,
    critically_fatigued: model.critically_fatigued?,
    burnout:             model.burnout?,
    recovery_mode:       model.recovery_mode,
    trend:               model.trend
  }
end

#enter_rest(mode: :full_rest) ⇒ Object



46
47
48
49
50
51
52
# File 'lib/legion/extensions/agentic/affect/fatigue/runners/fatigue.rb', line 46

def enter_rest(mode: :full_rest, **)
  return { success: false, error: "unknown recovery mode: #{mode}" } unless Helpers::Constants::RECOVERY_MODES.include?(mode)

  fatigue_store.model.enter_recovery(mode)
  log.info("[fatigue] entered recovery mode=#{mode}")
  { success: true, mode: mode, energy: fatigue_store.model.energy.round(4) }
end

#exit_restObject



54
55
56
57
58
# File 'lib/legion/extensions/agentic/affect/fatigue/runners/fatigue.rb', line 54

def exit_rest(**)
  fatigue_store.model.exit_recovery
  log.info('[fatigue] exited recovery mode')
  { success: true, energy: fatigue_store.model.energy.round(4), fatigue_level: fatigue_store.model.fatigue_level }
end

#fatigue_statsObject



65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/legion/extensions/agentic/affect/fatigue/runners/fatigue.rb', line 65

def fatigue_stats(**)
  stats  = fatigue_store.session_stats
  model  = fatigue_store.model
  log.debug("[fatigue] stats: ticks=#{stats[:total_ticks]} burnout=#{stats[:burnout]}")

  {
    session:  stats,
    history:  model.history.last(10),
    trend:    model.trend,
    schedule: fatigue_store.optimal_rest_schedule
  }
end

#update_fatigue(tick_results: {}) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/legion/extensions/agentic/affect/fatigue/runners/fatigue.rb', line 13

def update_fatigue(tick_results: {}, **)
  result = fatigue_store.update(tick_results: tick_results)
  recommendation = fatigue_store.recommend_action

  log.debug("[fatigue] tick: energy=#{result[:energy]} level=#{result[:fatigue_level]} " \
            "perf=#{result[:performance_factor]} rec=#{recommendation}")

  {
    energy:             result[:energy],
    fatigue_level:      result[:fatigue_level],
    performance_factor: result[:performance_factor],
    recommendation:     recommendation,
    needs_rest:         result[:needs_rest],
    burnout:            result[:burnout]
  }
end