Module: RubyLLM::Contract::MinitestHelpers

Defined in:
lib/ruby_llm/contract/minitest.rb

Instance Method Summary collapse

Instance Method Details

#assert_eval_passes(step, eval_name, minimum_score: nil, maximum_cost: nil, context: {}, msg: nil) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/ruby_llm/contract/minitest.rb', line 17

def assert_eval_passes(step, eval_name, minimum_score: nil, maximum_cost: nil, context: {}, msg: nil)
  report = step.run_eval(eval_name, context: context)

  if minimum_score
    assert report.score >= minimum_score,
           msg || "Expected #{eval_name} eval score >= #{minimum_score}, got #{report.score.round(2)} (#{report.pass_rate})"
  else
    assert report.passed?,
           msg || "Expected #{eval_name} eval to pass, got #{report.score.round(2)} (#{report.pass_rate})"
  end

  if maximum_cost
    assert report.total_cost <= maximum_cost,
           msg || "Expected #{eval_name} eval cost <= $#{format("%.4f", maximum_cost)}, got $#{format("%.4f", report.total_cost)}"
  end

  report
end

#assert_satisfies_contract(result, msg = nil) ⇒ Object



8
9
10
11
# File 'lib/ruby_llm/contract/minitest.rb', line 8

def assert_satisfies_contract(result, msg = nil)
  assert result.ok?, msg || "Expected step result to satisfy contract, " \
    "but got status: #{result.status}. Errors: #{result.validation_errors.join(", ")}"
end

#refute_satisfies_contract(result, msg = nil) ⇒ Object



13
14
15
# File 'lib/ruby_llm/contract/minitest.rb', line 13

def refute_satisfies_contract(result, msg = nil)
  refute result.ok?, msg || "Expected step result NOT to satisfy contract, but it passed"
end

#stub_step(step_class, response: nil, responses: nil) ⇒ Object



36
37
38
39
40
41
42
43
# File 'lib/ruby_llm/contract/minitest.rb', line 36

def stub_step(step_class, response: nil, responses: nil)
  adapter = if responses
              Adapters::Test.new(responses: responses)
            else
              Adapters::Test.new(response: response)
            end
  RubyLLM::Contract.configure { |c| c.default_adapter = adapter }
end