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

Extended by:
Logging::Helper, Settings::Helper
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



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

def apollo_setting(*keys, default:)
  settings.dig(*keys)
rescue StandardError => e
  handle_exception(e, level: :warn, operation: 'apollo.confidence.apollo_setting', keys: keys)
  default
end

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



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

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



48
49
50
51
52
53
54
55
56
57
58
# File 'lib/legion/extensions/apollo/helpers/confidence.rb', line 48

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



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

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

.corroboration_boostObject



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

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

.corroboration_similarity_thresholdObject



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

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

.decay_min_age_hoursObject



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

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

.decay_thresholdObject



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

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

.decayed?(confidence:) ⇒ Boolean

Returns:

  • (Boolean)


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

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

.initial_confidenceObject



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

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

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

Returns:

  • (Boolean)


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

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

.power_law_alphaObject



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

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

.retrieval_boostObject



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

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

.stale_daysObject



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

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

.write_confidence_gateObject



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

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

.write_novelty_gateObject



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

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