Module: Desiru::Modules
- Defined in:
- lib/desiru/modules/react.rb,
lib/desiru/modules/predict.rb,
lib/desiru/modules/majority.rb,
lib/desiru/modules/retrieve.rb,
lib/desiru/modules/best_of_n.rb,
lib/desiru/modules/chain_of_thought.rb,
lib/desiru/modules/program_of_thought.rb,
lib/desiru/modules/multi_chain_comparison.rb
Defined Under Namespace
Classes: Backend, BestOfN, ChainOfThought, InMemoryBackend, MultiChainComparison, Predict, ProgramOfThought, ReAct, Retrieve
Class Method Summary collapse
-
.majority(module_instance, **inputs) ⇒ Object
Function-style module for majority voting Returns the most common response from multiple completions.
Class Method Details
.majority(module_instance, **inputs) ⇒ Object
Function-style module for majority voting Returns the most common response from multiple completions
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/desiru/modules/majority.rb', line 7 def self.majority(module_instance, **inputs) raise ArgumentError, "First argument must be a Desiru module instance" unless module_instance.respond_to?(:call) # Number of completions to generate num_completions = inputs.delete(:num_completions) || 5 # Generate multiple completions results = [] num_completions.times do result = module_instance.call(**inputs) results << result end # Find the majority answer # For simplicity, we'll compare the first output field output_fields = module_instance.signature.output_fields.keys main_field = output_fields.first # Count occurrences of each answer answer_counts = Hash.new(0) answer_to_result = {} results.each do |result| answer = result[main_field] answer_counts[answer] += 1 answer_to_result[answer] ||= result end # Return the result with the most common answer majority_answer = answer_counts.max_by { |_, count| count }&.first winning_result = answer_to_result[majority_answer] || results.first # Add voting metadata if requested if output_fields.include?(:voting_data) winning_result[:voting_data] = { votes: answer_counts, num_completions: num_completions, consensus_rate: answer_counts[majority_answer].to_f / num_completions } end winning_result end |