Module: Riffer::Agent::Run

Extended by:
Run
Included in:
Run
Defined in:
lib/riffer/agent/run.rb

Overview

The generation loop — a pure module of functions over an agent, which owns every per-call value; Run just orchestrates.

Instance Method Summary collapse

Instance Method Details

#generate(agent:, prompt: nil, files: nil) ⇒ Object

Runs the generate loop for the given agent. See Riffer::Agent#generate for prompt/files semantics.

– : (agent: Riffer::Agent, ?prompt: String?, ?files: Array[Hash[Symbol, untyped] | Riffer::Messages::FilePart]?) -> Riffer::Agent::Response



14
15
16
17
# File 'lib/riffer/agent/run.rb', line 14

def generate(agent:, prompt: nil, files: nil)
  append_user_message(agent, prompt, files: files)
  run_loop(agent)
end

#stream(agent:, prompt: nil, files: nil) ⇒ Object

Runs the streaming loop for the given agent. See Riffer::Agent#stream for prompt/files semantics.

– : (agent: Riffer::Agent, ?prompt: String?, ?files: Array[Hash[Symbol, untyped] | Riffer::Messages::FilePart]?) -> Enumerator[Riffer::StreamEvents::Base, void]



24
25
26
27
28
29
30
31
32
# File 'lib/riffer/agent/run.rb', line 24

def stream(agent:, prompt: nil, files: nil)
  append_user_message(agent, prompt, files: files)
  # The enumerator body runs in its own fiber, where the fiber-local OTEL
  # context is empty — capture here so the run span parents to the caller's trace.
  trace_context = Riffer::Tracing.current_context
  Enumerator.new do |stream_yielder|
    Riffer::Tracing.with_context(trace_context) { run_loop(agent, stream_yielder: stream_yielder) }
  end
end