Class: Legion::Extensions::Agentic::Inference::ArgumentMapping::Helpers::ArgumentEngine

Inherits:
Object
  • Object
show all
Includes:
Constants
Defined in:
lib/legion/extensions/agentic/inference/argument_mapping/helpers/argument_engine.rb

Constant Summary

Constants included from Constants

Constants::ARGUMENT_STRENGTHS, Constants::BACKING_WEIGHT, Constants::DECAY_RATE, Constants::DEFAULT_STRENGTH, Constants::GROUND_WEIGHT, Constants::MAX_ARGUMENTS, Constants::MAX_HISTORY, Constants::QUALIFIER_TYPES, Constants::REBUTTAL_IMPACT_LABELS, Constants::REBUTTAL_PENALTY, Constants::WARRANT_WEIGHT

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeArgumentEngine

Returns a new instance of ArgumentEngine.



14
15
16
17
# File 'lib/legion/extensions/agentic/inference/argument_mapping/helpers/argument_engine.rb', line 14

def initialize
  @arguments = {}
  @history   = []
end

Instance Attribute Details

#argumentsObject (readonly)

Returns the value of attribute arguments.



12
13
14
# File 'lib/legion/extensions/agentic/inference/argument_mapping/helpers/argument_engine.rb', line 12

def arguments
  @arguments
end

#historyObject (readonly)

Returns the value of attribute history.



12
13
14
# File 'lib/legion/extensions/agentic/inference/argument_mapping/helpers/argument_engine.rb', line 12

def history
  @history
end

Instance Method Details

#add_backing(argument_id:, backing:) ⇒ Object



39
40
41
42
43
44
45
46
# File 'lib/legion/extensions/agentic/inference/argument_mapping/helpers/argument_engine.rb', line 39

def add_backing(argument_id:, backing:)
  argument = @arguments[argument_id]
  return { success: false, reason: :not_found } unless argument

  argument.add_backing(backing: backing)
  add_history(type: :backing_added, argument_id: argument_id)
  { success: true, argument: argument.to_h }
end

#add_ground(argument_id:, ground:) ⇒ Object



30
31
32
33
34
35
36
37
# File 'lib/legion/extensions/agentic/inference/argument_mapping/helpers/argument_engine.rb', line 30

def add_ground(argument_id:, ground:)
  argument = @arguments[argument_id]
  return { success: false, reason: :not_found } unless argument

  argument.add_ground(ground: ground)
  add_history(type: :ground_added, argument_id: argument_id)
  { success: true, argument: argument.to_h }
end

#add_rebuttal(argument_id:, content:, impact: 0.5) ⇒ Object



48
49
50
51
52
53
54
55
# File 'lib/legion/extensions/agentic/inference/argument_mapping/helpers/argument_engine.rb', line 48

def add_rebuttal(argument_id:, content:, impact: 0.5)
  argument = @arguments[argument_id]
  return { success: false, reason: :not_found } unless argument

  argument.add_rebuttal(content: content, impact: impact)
  add_history(type: :rebuttal_added, argument_id: argument_id, impact: impact)
  { success: true, argument: argument.to_h }
end

#arguments_by_domain(domain:) ⇒ Object



84
85
86
# File 'lib/legion/extensions/agentic/inference/argument_mapping/helpers/argument_engine.rb', line 84

def arguments_by_domain(domain:)
  @arguments.values.select { |a| a.domain == domain }
end

#assess_argument(argument_id:) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/legion/extensions/agentic/inference/argument_mapping/helpers/argument_engine.rb', line 57

def assess_argument(argument_id:)
  argument = @arguments[argument_id]
  return { success: false, reason: :not_found } unless argument

  {
    success:        true,
    argument_id:    argument_id,
    claim:          argument.claim,
    domain:         argument.domain,
    strength:       argument.strength,
    strength_label: argument.strength_label,
    sound:          argument.sound?,
    rebutted:       argument.rebutted?,
    ground_count:   argument.grounds.size,
    backing_count:  argument.backing.size,
    rebuttal_count: argument.rebuttals.size
  }
end

#create_argument(claim:, domain: :general, warrant: nil, qualifier: :presumably) ⇒ Object



19
20
21
22
23
24
25
26
27
28
# File 'lib/legion/extensions/agentic/inference/argument_mapping/helpers/argument_engine.rb', line 19

def create_argument(claim:, domain: :general, warrant: nil, qualifier: :presumably)
  return { success: false, reason: :max_arguments_reached } if @arguments.size >= MAX_ARGUMENTS

  id       = generate_id('arg')
  argument = Argument.new(id: id, claim: claim, domain: domain,
                          warrant: warrant, qualifier: qualifier)
  @arguments[id] = argument
  add_history(type: :created, argument_id: id, claim: claim, domain: domain)
  { success: true, argument: argument.to_h }
end

#decay_allObject



96
97
98
99
100
101
102
103
104
# File 'lib/legion/extensions/agentic/inference/argument_mapping/helpers/argument_engine.rb', line 96

def decay_all
  @arguments.each_value do |argument|
    next unless argument.instance_variable_defined?(:@base_strength)

    current = argument.instance_variable_get(:@base_strength)
    argument.instance_variable_set(:@base_strength, [current - DECAY_RATE, 0.0].max)
  end
  @arguments.size
end

#rebutted_argumentsObject



80
81
82
# File 'lib/legion/extensions/agentic/inference/argument_mapping/helpers/argument_engine.rb', line 80

def rebutted_arguments
  @arguments.values.select(&:rebutted?)
end

#sound_argumentsObject



76
77
78
# File 'lib/legion/extensions/agentic/inference/argument_mapping/helpers/argument_engine.rb', line 76

def sound_arguments
  @arguments.values.select(&:sound?)
end

#strongest_arguments(limit: 5) ⇒ Object



88
89
90
# File 'lib/legion/extensions/agentic/inference/argument_mapping/helpers/argument_engine.rb', line 88

def strongest_arguments(limit: 5)
  @arguments.values.sort_by { |a| -a.strength }.first(limit)
end

#to_hObject



106
107
108
109
110
111
112
113
# File 'lib/legion/extensions/agentic/inference/argument_mapping/helpers/argument_engine.rb', line 106

def to_h
  {
    total_arguments:    @arguments.size,
    sound_arguments:    sound_arguments.size,
    rebutted_arguments: rebutted_arguments.size,
    history_entries:    @history.size
  }
end

#weakest_arguments(limit: 5) ⇒ Object



92
93
94
# File 'lib/legion/extensions/agentic/inference/argument_mapping/helpers/argument_engine.rb', line 92

def weakest_arguments(limit: 5)
  @arguments.values.sort_by(&:strength).first(limit)
end