Class: Legion::Extensions::Agentic::Learning::LearningRate::Helpers::RateModel
- Inherits:
-
Object
- Object
- Legion::Extensions::Agentic::Learning::LearningRate::Helpers::RateModel
show all
- Includes:
- Constants
- Defined in:
- lib/legion/extensions/agentic/learning/learning_rate/helpers/rate_model.rb
Constant Summary
Constants included
from Constants
Constants::ACCURACY_WINDOW, Constants::CONFIDENCE_DAMPENING, Constants::DEFAULT_RATE, Constants::ERROR_BOOST, Constants::MAX_DOMAINS, Constants::MAX_RATE, Constants::MAX_RATE_HISTORY, Constants::MIN_RATE, Constants::RATE_DECAY, Constants::RATE_DECREASE, Constants::RATE_INCREASE, Constants::RATE_LABELS, Constants::SURPRISE_BOOST
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of RateModel.
14
15
16
17
18
|
# File 'lib/legion/extensions/agentic/learning/learning_rate/helpers/rate_model.rb', line 14
def initialize
@rates = {}
@accuracy_buffers = {}
@rate_history = []
end
|
Instance Attribute Details
#accuracy_buffers ⇒ Object
Returns the value of attribute accuracy_buffers.
12
13
14
|
# File 'lib/legion/extensions/agentic/learning/learning_rate/helpers/rate_model.rb', line 12
def accuracy_buffers
@accuracy_buffers
end
|
#rate_history ⇒ Object
Returns the value of attribute rate_history.
12
13
14
|
# File 'lib/legion/extensions/agentic/learning/learning_rate/helpers/rate_model.rb', line 12
def rate_history
@rate_history
end
|
#rates ⇒ Object
Returns the value of attribute rates.
12
13
14
|
# File 'lib/legion/extensions/agentic/learning/learning_rate/helpers/rate_model.rb', line 12
def rates
@rates
end
|
Instance Method Details
#accuracy_for(domain) ⇒ Object
45
46
47
48
49
50
|
# File 'lib/legion/extensions/agentic/learning/learning_rate/helpers/rate_model.rb', line 45
def accuracy_for(domain)
buffer = @accuracy_buffers.fetch(domain, [])
return 0.0 if buffer.empty?
buffer.sum / buffer.size
end
|
#decay ⇒ Object
52
53
54
55
56
57
58
|
# File 'lib/legion/extensions/agentic/learning/learning_rate/helpers/rate_model.rb', line 52
def decay
@rates.each_key do |domain|
current = @rates[domain]
delta = (current - DEFAULT_RATE) * RATE_DECAY
@rates[domain] = (current - delta).clamp(MIN_RATE, MAX_RATE)
end
end
|
#domain_count ⇒ Object
82
83
84
|
# File 'lib/legion/extensions/agentic/learning/learning_rate/helpers/rate_model.rb', line 82
def domain_count
@rates.size
end
|
#fastest_domains(count = 5) ⇒ Object
68
69
70
|
# File 'lib/legion/extensions/agentic/learning/learning_rate/helpers/rate_model.rb', line 68
def fastest_domains(count = 5)
@rates.sort_by { |_, r| -r }.first(count).to_h
end
|
#label_for(domain) ⇒ Object
60
61
62
63
64
65
66
|
# File 'lib/legion/extensions/agentic/learning/learning_rate/helpers/rate_model.rb', line 60
def label_for(domain)
rate = rate_for(domain)
RATE_LABELS.each do |range, lbl|
return lbl if range.cover?(rate)
end
:consolidated
end
|
#overall_rate ⇒ Object
76
77
78
79
80
|
# File 'lib/legion/extensions/agentic/learning/learning_rate/helpers/rate_model.rb', line 76
def overall_rate
return DEFAULT_RATE if @rates.empty?
@rates.values.sum / @rates.size
end
|
#rate_for(domain) ⇒ Object
20
21
22
|
# File 'lib/legion/extensions/agentic/learning/learning_rate/helpers/rate_model.rb', line 20
def rate_for(domain)
@rates.fetch(domain, DEFAULT_RATE)
end
|
#record_error(domain:, magnitude:) ⇒ Object
38
39
40
41
42
43
|
# File 'lib/legion/extensions/agentic/learning/learning_rate/helpers/rate_model.rb', line 38
def record_error(domain:, magnitude:)
ensure_domain(domain)
boost = magnitude * ERROR_BOOST
@rates[domain] = (@rates[domain] + boost).clamp(MIN_RATE, MAX_RATE)
record_event(domain, :error, @rates[domain])
end
|
#record_prediction(domain:, correct:) ⇒ Object
24
25
26
27
28
29
|
# File 'lib/legion/extensions/agentic/learning/learning_rate/helpers/rate_model.rb', line 24
def record_prediction(domain:, correct:)
ensure_domain(domain)
@accuracy_buffers[domain] << (correct ? 1.0 : 0.0)
@accuracy_buffers[domain].shift while @accuracy_buffers[domain].size > ACCURACY_WINDOW
adjust_rate(domain, correct: correct)
end
|
#record_surprise(domain:, magnitude:) ⇒ Object
31
32
33
34
35
36
|
# File 'lib/legion/extensions/agentic/learning/learning_rate/helpers/rate_model.rb', line 31
def record_surprise(domain:, magnitude:)
ensure_domain(domain)
boost = magnitude * SURPRISE_BOOST
@rates[domain] = (@rates[domain] + boost).clamp(MIN_RATE, MAX_RATE)
record_event(domain, :surprise, @rates[domain])
end
|
#slowest_domains(count = 5) ⇒ Object
72
73
74
|
# File 'lib/legion/extensions/agentic/learning/learning_rate/helpers/rate_model.rb', line 72
def slowest_domains(count = 5)
@rates.sort_by { |_, r| r }.first(count).to_h
end
|
#to_h ⇒ Object
86
87
88
89
90
91
92
93
|
# File 'lib/legion/extensions/agentic/learning/learning_rate/helpers/rate_model.rb', line 86
def to_h
{
domain_count: @rates.size,
overall_rate: overall_rate.round(4),
rates: @rates.dup,
history_size: @rate_history.size
}
end
|