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.05
DECAY_THRESHOLD =
0.05
CORROBORATION_SIMILARITY_THRESHOLD =
0.9
WRITE_CONFIDENCE_GATE =
0.6
WRITE_NOVELTY_GATE =
0.3
STALE_DAYS =
90
DECAY_MIN_AGE_HOURS =
168
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



28
29
30
31
32
33
34
35
# File 'lib/legion/extensions/apollo/helpers/confidence.rb', line 28

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

  Legion::Settings[:apollo].dig(*keys) || default
rescue StandardError => e
  log.warn("Apollo Confidence.apollo_setting failed: #{e.message}")
  default
end

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



67
68
69
# File 'lib/legion/extensions/apollo/helpers/confidence.rb', line 67

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



51
52
53
54
55
56
57
58
59
60
61
# File 'lib/legion/extensions/apollo/helpers/confidence.rb', line 51

def apply_decay(confidence:, age_hours: nil, alpha: power_law_alpha, **)
  return confidence if age_hours && age_hours < decay_min_age_hours

  if age_hours
    age_days = age_hours / 24.0
    [confidence * ((age_days.clamp(1, Float::INFINITY) + 1.0)**(-alpha)) / (age_days.clamp(1, Float::INFINITY)**(-alpha)), 0.0].max
  else
    factor = 1.0 / (1.0 + alpha)
    [confidence * factor, 0.0].max
  end
end

.apply_retrieval_boost(confidence:) ⇒ Object



63
64
65
# File 'lib/legion/extensions/apollo/helpers/confidence.rb', line 63

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

.corroboration_boostObject



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

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

.corroboration_similarity_thresholdObject



47
48
49
# File 'lib/legion/extensions/apollo/helpers/confidence.rb', line 47

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

.decay_min_age_hoursObject



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

def decay_min_age_hours    = apollo_setting(:decay_min_age_hours, default: DECAY_MIN_AGE_HOURS)

.decay_thresholdObject



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

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

.decayed?(confidence:) ⇒ Boolean

Returns:

  • (Boolean)


71
72
73
# File 'lib/legion/extensions/apollo/helpers/confidence.rb', line 71

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

.initial_confidenceObject



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

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

.logObject



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

def log
  Legion::Logging
end

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

Returns:

  • (Boolean)


75
76
77
# File 'lib/legion/extensions/apollo/helpers/confidence.rb', line 75

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

.power_law_alphaObject



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

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

.retrieval_boostObject



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

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

.stale_daysObject



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

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

.write_confidence_gateObject



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

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

.write_novelty_gateObject



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

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