Class: Observ::EvaluatorRunnerService

Inherits:
Object
  • Object
show all
Defined in:
app/services/observ/evaluator_runner_service.rb

Constant Summary collapse

BUILT_IN_EVALUATORS =
{
  "exact_match" => Evaluators::ExactMatchEvaluator,
  "contains" => Evaluators::ContainsEvaluator,
  "json_structure" => Evaluators::JsonStructureEvaluator
}.freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(dataset_run, evaluator_configs: nil) ⇒ EvaluatorRunnerService

Returns a new instance of EvaluatorRunnerService.



13
14
15
16
# File 'app/services/observ/evaluator_runner_service.rb', line 13

def initialize(dataset_run, evaluator_configs: nil)
  @dataset_run = dataset_run
  @evaluator_configs = evaluator_configs || default_evaluator_configs
end

Instance Attribute Details

#dataset_runObject (readonly)

Returns the value of attribute dataset_run.



11
12
13
# File 'app/services/observ/evaluator_runner_service.rb', line 11

def dataset_run
  @dataset_run
end

#evaluator_configsObject (readonly)

Returns the value of attribute evaluator_configs.



11
12
13
# File 'app/services/observ/evaluator_runner_service.rb', line 11

def evaluator_configs
  @evaluator_configs
end

Instance Method Details

#callObject



18
19
20
21
22
23
24
25
26
27
28
# File 'app/services/observ/evaluator_runner_service.rb', line 18

def call
  return if evaluator_configs.blank?

  dataset_run.run_items.includes(:dataset_item, :trace).find_each do |run_item|
    next unless run_item.succeeded?

    evaluate_item(run_item)
  end

  dataset_run
end

#evaluate_item(run_item) ⇒ Object



30
31
32
33
34
35
36
37
38
39
# File 'app/services/observ/evaluator_runner_service.rb', line 30

def evaluate_item(run_item)
  evaluator_configs.each do |config|
    evaluator = build_evaluator(config)
    next unless evaluator

    evaluator.call(run_item)
  rescue StandardError => e
    Rails.logger.error("Evaluator #{config['type']} failed for run_item #{run_item.id}: #{e.message}")
  end
end