Module: Legion::Extensions::Apollo::Helpers::Confidence

Defined in:
lib/legion/extensions/apollo/helpers/confidence.rb

Constant Summary collapse

INITIAL_CONFIDENCE =
0.5
CORROBORATION_BOOST =
0.3
RETRIEVAL_BOOST =
0.02
POWER_LAW_ALPHA =
0.5
DECAY_THRESHOLD =
0.1
CORROBORATION_SIMILARITY_THRESHOLD =
0.9
WRITE_CONFIDENCE_GATE =
0.6
WRITE_NOVELTY_GATE =
0.3
STALE_DAYS =
90
CONTENT_TYPES =
%i[fact concept procedure association observation].freeze
STATUSES =
%w[candidate confirmed disputed decayed archived].freeze
RELATION_TYPES =
%w[is_a has_a part_of causes similar_to contradicts supersedes depends_on].freeze

Class Method Summary collapse

Class Method Details

.apollo_setting(*keys, default:) ⇒ Object



23
24
25
26
27
28
29
# File 'lib/legion/extensions/apollo/helpers/confidence.rb', line 23

def apollo_setting(*keys, default:)
  return default unless defined?(Legion::Settings) && !Legion::Settings[:apollo].nil?

  Legion::Settings[:apollo].dig(*keys) || default
rescue StandardError
  default
end

.apply_corroboration_boost(confidence:, weight: 1.0) ⇒ Object



57
58
59
# File 'lib/legion/extensions/apollo/helpers/confidence.rb', line 57

def apply_corroboration_boost(confidence:, weight: 1.0, **)
  [confidence + (corroboration_boost * weight), 1.0].min
end

.apply_decay(confidence:, age_hours: nil, alpha: power_law_alpha) ⇒ Object



44
45
46
47
48
49
50
51
# File 'lib/legion/extensions/apollo/helpers/confidence.rb', line 44

def apply_decay(confidence:, age_hours: nil, alpha: power_law_alpha, **)
  if age_hours
    [confidence * ((age_hours.clamp(0, Float::INFINITY) + 2.0)**(-alpha)) / ((age_hours.clamp(0, Float::INFINITY) + 1.0)**(-alpha)), 0.0].max
  else
    factor = 1.0 / (1.0 + alpha)
    [confidence * factor, 0.0].max
  end
end

.apply_retrieval_boost(confidence:) ⇒ Object



53
54
55
# File 'lib/legion/extensions/apollo/helpers/confidence.rb', line 53

def apply_retrieval_boost(confidence:, **)
  [confidence + retrieval_boost, 1.0].min
end

.corroboration_boostObject



32
# File 'lib/legion/extensions/apollo/helpers/confidence.rb', line 32

def corroboration_boost    = apollo_setting(:confidence, :corroboration_boost, default: CORROBORATION_BOOST)

.corroboration_similarity_thresholdObject



40
41
42
# File 'lib/legion/extensions/apollo/helpers/confidence.rb', line 40

def corroboration_similarity_threshold
  apollo_setting(:confidence, :corroboration_similarity, default: CORROBORATION_SIMILARITY_THRESHOLD)
end

.decay_thresholdObject



35
# File 'lib/legion/extensions/apollo/helpers/confidence.rb', line 35

def decay_threshold        = apollo_setting(:decay_threshold, default: DECAY_THRESHOLD)

.decayed?(confidence:) ⇒ Boolean

Returns:

  • (Boolean)


61
62
63
# File 'lib/legion/extensions/apollo/helpers/confidence.rb', line 61

def decayed?(confidence:, **)
  confidence < decay_threshold
end

.initial_confidenceObject



31
# File 'lib/legion/extensions/apollo/helpers/confidence.rb', line 31

def initial_confidence     = apollo_setting(:confidence, :initial, default: INITIAL_CONFIDENCE)

.meets_write_gate?(confidence:, novelty:) ⇒ Boolean

Returns:

  • (Boolean)


65
66
67
# File 'lib/legion/extensions/apollo/helpers/confidence.rb', line 65

def meets_write_gate?(confidence:, novelty:, **)
  confidence > write_confidence_gate && novelty > write_novelty_gate
end

.power_law_alphaObject



34
# File 'lib/legion/extensions/apollo/helpers/confidence.rb', line 34

def power_law_alpha        = apollo_setting(:power_law_alpha, default: POWER_LAW_ALPHA)

.retrieval_boostObject



33
# File 'lib/legion/extensions/apollo/helpers/confidence.rb', line 33

def retrieval_boost        = apollo_setting(:confidence, :retrieval_boost, default: RETRIEVAL_BOOST)

.stale_daysObject



38
# File 'lib/legion/extensions/apollo/helpers/confidence.rb', line 38

def stale_days             = apollo_setting(:stale_days, default: STALE_DAYS)

.write_confidence_gateObject



36
# File 'lib/legion/extensions/apollo/helpers/confidence.rb', line 36

def write_confidence_gate  = apollo_setting(:confidence, :write_gate, default: WRITE_CONFIDENCE_GATE)

.write_novelty_gateObject



37
# File 'lib/legion/extensions/apollo/helpers/confidence.rb', line 37

def write_novelty_gate     = apollo_setting(:confidence, :novelty_gate, default: WRITE_NOVELTY_GATE)