Class: RubyLLM::Contract::Pipeline::Runner

Inherits:
Object
  • Object
show all
Includes:
Concerns::UsageAggregator
Defined in:
lib/ruby_llm/contract/pipeline/runner.rb

Defined Under Namespace

Classes: ExecutionState

Instance Method Summary collapse

Constructor Details

#initialize(steps:, context:, timeout_ms: nil, token_budget: nil) ⇒ Runner

Returns a new instance of Runner.

Raises:

  • (ArgumentError)


11
12
13
14
15
16
17
18
19
# File 'lib/ruby_llm/contract/pipeline/runner.rb', line 11

def initialize(steps:, context:, timeout_ms: nil, token_budget: nil)
  raise ArgumentError, "timeout_ms must be positive (got #{timeout_ms})" if timeout_ms && timeout_ms <= 0
  raise ArgumentError, "Pipeline has no steps defined" if steps.empty?

  @steps = steps
  @context = context || {}
  @timeout_ms = timeout_ms
  @token_budget = token_budget
end

Instance Method Details

#call(input) ⇒ Object



21
22
23
24
25
26
# File 'lib/ruby_llm/contract/pipeline/runner.rb', line 21

def call(input)
  execution = ExecutionState.new(input)
  start_time = Process.clock_gettime(Process::CLOCK_MONOTONIC)
  run_steps(execution, start_time)
  finalize_result(execution, start_time)
end

#run_steps(execution, start_time) ⇒ Object



28
29
30
31
32
33
34
# File 'lib/ruby_llm/contract/pipeline/runner.rb', line 28

def run_steps(execution, start_time)
  @steps.each_with_index do |step_def, index|
    execute_step(step_def, execution)
    break if execution.failed?
    break if check_limits(index, step_def, execution, start_time)
  end
end