Class: Legion::Extensions::Agentic::Affect::Emotion::Helpers::Baseline

Inherits:
Object
  • Object
show all
Defined in:
lib/legion/extensions/agentic/affect/emotion/helpers/baseline.rb

Constant Summary collapse

ALPHA =

slow adaptation to prevent adversarial manipulation

0.05
MIN_STDDEV =

prevents division issues when baseline is stable

0.1
INITIAL_MEAN =
0.5
INITIAL_STDDEV =
0.25

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeBaseline

Returns a new instance of Baseline.



17
18
19
20
21
# File 'lib/legion/extensions/agentic/affect/emotion/helpers/baseline.rb', line 17

def initialize
  @dimensions = Valence::DIMENSIONS.to_h do |dim|
    [dim, { mean: INITIAL_MEAN, stddev: INITIAL_STDDEV, count: 0 }]
  end
end

Instance Attribute Details

#dimensionsObject (readonly)

Returns the value of attribute dimensions.



15
16
17
# File 'lib/legion/extensions/agentic/affect/emotion/helpers/baseline.rb', line 15

def dimensions
  @dimensions
end

Instance Method Details

#get(dimension) ⇒ Object



43
44
45
# File 'lib/legion/extensions/agentic/affect/emotion/helpers/baseline.rb', line 43

def get(dimension)
  @dimensions[dimension]
end

#normalize(raw_score, dimension) ⇒ Object



23
24
25
26
27
28
29
# File 'lib/legion/extensions/agentic/affect/emotion/helpers/baseline.rb', line 23

def normalize(raw_score, dimension)
  baseline = @dimensions[dimension]
  return Valence.clamp(raw_score) unless baseline

  normalized = (raw_score - baseline[:mean]) / [baseline[:stddev], MIN_STDDEV].max
  Valence.clamp(normalized)
end

#update(dimension, raw_score) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
# File 'lib/legion/extensions/agentic/affect/emotion/helpers/baseline.rb', line 31

def update(dimension, raw_score)
  baseline = @dimensions[dimension]
  return unless baseline

  baseline[:count] += 1
  old_mean = baseline[:mean]
  baseline[:mean] = (ALPHA * raw_score) + ((1.0 - ALPHA) * old_mean)
  # Online stddev update (Welford-like with EMA)
  deviation = (raw_score - baseline[:mean]).abs
  baseline[:stddev] = (ALPHA * deviation) + ((1.0 - ALPHA) * baseline[:stddev])
end