Module: RubyLLM::Tribunal::Judge
- Defined in:
- lib/ruby_llm/tribunal/judge.rb
Overview
Base module for LLM-as-judge assertions.
All judges (built-in and custom) implement this interface. This provides a consistent interface for evaluation criteria.
Constant Summary collapse
- BUILTIN_JUDGES =
Built-in judge classes
[].freeze
Class Attribute Summary collapse
-
.custom_judges ⇒ Object
readonly
Returns the value of attribute custom_judges.
Class Method Summary collapse
-
.all_judge_names ⇒ Array<Symbol>
Returns list of all judge names (built-in + custom).
-
.all_judges ⇒ Array<Class>
Returns all judge modules (built-in + custom).
-
.builtin_judge?(name) ⇒ Boolean
Checks if a name is a built-in judge.
-
.builtin_judge_names ⇒ Array<Symbol>
Returns list of built-in judge names.
-
.builtin_judges ⇒ Array<Class>
Returns all built-in judge modules.
-
.custom_judge?(name) ⇒ Boolean
Checks if a name is a registered custom judge.
-
.custom_judge_names ⇒ Array<Symbol>
Returns list of custom judge names.
-
.evaluate_result(_result, _opts) ⇒ Array
Optional: customize how the LLM result is interpreted.
-
.find(name) ⇒ Class?
Finds a judge module by name.
-
.judge_name ⇒ Symbol
Returns the atom name for this judge.
-
.negative_metric? ⇒ Boolean
Optional: whether "no" verdict means pass (for negative metrics like toxicity).
-
.prompt(test_case, opts) ⇒ String
Builds the evaluation prompt for the LLM judge.
-
.register(judge_class) ⇒ Object
Registers a custom judge class.
-
.validate(_test_case) ⇒ nil, String
Optional: validate that the test case has required fields.
Class Attribute Details
.custom_judges ⇒ Object (readonly)
Returns the value of attribute custom_judges.
42 43 44 |
# File 'lib/ruby_llm/tribunal/judge.rb', line 42 def custom_judges @custom_judges end |
Class Method Details
.all_judge_names ⇒ Array<Symbol>
Returns list of all judge names (built-in + custom).
87 88 89 |
# File 'lib/ruby_llm/tribunal/judge.rb', line 87 def all_judge_names all_judges.map(&:judge_name) end |
.all_judges ⇒ Array<Class>
Returns all judge modules (built-in + custom).
72 73 74 |
# File 'lib/ruby_llm/tribunal/judge.rb', line 72 def all_judges builtin_judges + @custom_judges end |
.builtin_judge?(name) ⇒ Boolean
Checks if a name is a built-in judge.
117 118 119 |
# File 'lib/ruby_llm/tribunal/judge.rb', line 117 def builtin_judge?(name) builtin_judge_names.include?(name) end |
.builtin_judge_names ⇒ Array<Symbol>
Returns list of built-in judge names.
94 95 96 |
# File 'lib/ruby_llm/tribunal/judge.rb', line 94 def builtin_judge_names builtin_judges.map(&:judge_name) end |
.builtin_judges ⇒ Array<Class>
Returns all built-in judge modules.
54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/ruby_llm/tribunal/judge.rb', line 54 def builtin_judges [ Judges::Faithful, Judges::Relevant, Judges::Hallucination, Judges::Correctness, Judges::Bias, Judges::Toxicity, Judges::Harmful, Judges::Jailbreak, Judges::PII, Judges::Refusal ] end |
.custom_judge?(name) ⇒ Boolean
Checks if a name is a registered custom judge.
109 110 111 |
# File 'lib/ruby_llm/tribunal/judge.rb', line 109 def custom_judge?(name) custom_judge_names.include?(name) end |
.custom_judge_names ⇒ Array<Symbol>
Returns list of custom judge names.
101 102 103 |
# File 'lib/ruby_llm/tribunal/judge.rb', line 101 def custom_judge_names @custom_judges.map(&:judge_name) end |
.evaluate_result(_result, _opts) ⇒ Array
Optional: customize how the LLM result is interpreted.
161 162 163 |
# File 'lib/ruby_llm/tribunal/judge.rb', line 161 def self.evaluate_result(_result, _opts) nil # Return nil to use default interpretation end |
.find(name) ⇒ Class?
Finds a judge module by name.
80 81 82 |
# File 'lib/ruby_llm/tribunal/judge.rb', line 80 def find(name) all_judges.find { |judge| judge.judge_name == name } end |
.judge_name ⇒ Symbol
Returns the atom name for this judge. This name is used to invoke the judge in assertions.
128 129 130 |
# File 'lib/ruby_llm/tribunal/judge.rb', line 128 def self.judge_name raise NotImplementedError, 'Judge classes must implement .judge_name' end |
.negative_metric? ⇒ Boolean
Optional: whether "no" verdict means pass (for negative metrics like toxicity).
152 153 154 |
# File 'lib/ruby_llm/tribunal/judge.rb', line 152 def self.negative_metric? false end |
.prompt(test_case, opts) ⇒ String
Builds the evaluation prompt for the LLM judge.
137 138 139 |
# File 'lib/ruby_llm/tribunal/judge.rb', line 137 def self.prompt(test_case, opts) raise NotImplementedError, 'Judge classes must implement .prompt(test_case, opts)' end |
.register(judge_class) ⇒ Object
Registers a custom judge class.
47 48 49 |
# File 'lib/ruby_llm/tribunal/judge.rb', line 47 def register(judge_class) @custom_judges << judge_class unless @custom_judges.include?(judge_class) end |
.validate(_test_case) ⇒ nil, String
Optional: validate that the test case has required fields.
145 146 147 |
# File 'lib/ruby_llm/tribunal/judge.rb', line 145 def self.validate(_test_case) nil end |