Class: RubyLLM::Contract::Validator

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_llm/contract/contract/validator.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.run_observations(observers, parsed_output, input: nil) ⇒ Object



22
23
24
25
26
27
28
29
# File 'lib/ruby_llm/contract/contract/validator.rb', line 22

def self.run_observations(observers, parsed_output, input: nil)
  observers.map do |obs|
    passed = obs.call(parsed_output, input: input)
    { description: obs.description, passed: !!passed }
  rescue StandardError => e
    { description: obs.description, passed: false, error: "#{e.class}: #{e.message}" }
  end
end

.validate(raw_output:, definition:, output_type:, input: nil, schema: nil) ⇒ Object



17
18
19
20
# File 'lib/ruby_llm/contract/contract/validator.rb', line 17

def self.validate(raw_output:, definition:, output_type:, input: nil, schema: nil)
  new.validate(raw_output: raw_output, definition: definition, output_type: output_type,
               input: input, schema: schema)
end

Instance Method Details

#validate(raw_output:, definition:, output_type:, input: nil, schema: nil) ⇒ Object



6
7
8
9
10
11
12
13
14
15
# File 'lib/ruby_llm/contract/contract/validator.rb', line 6

def validate(raw_output:, definition:, output_type:, input: nil, schema: nil)
  effective_definition = schema ? with_json_strategy(definition) : definition
  parsed_output = parse_output(raw_output, effective_definition)
  return parsed_output if parse_error?(parsed_output)

  effective_output = coerce_and_freeze(parsed_output, output_type, schema)
  errors = collect_errors(effective_output, schema, definition, input)

  { parsed_output: effective_output[:value], errors: errors, status: errors.empty? ? :ok : :validation_failed }
end