Module: Legion::Extensions::Llm::Streaming::FaradayHandlers

Defined in:
lib/legion/extensions/llm/streaming.rb

Overview

Builds Faraday on_data handlers for different major versions.

Class Method Summary collapse

Class Method Details

.build(faraday_v1:, on_chunk:, on_failed_response:) ⇒ Object



199
200
201
202
203
204
205
# File 'lib/legion/extensions/llm/streaming.rb', line 199

def build(faraday_v1:, on_chunk:, on_failed_response:)
  if faraday_v1
    v1_on_data(on_chunk)
  else
    v2_on_data(on_chunk, on_failed_response)
  end
end

.v1_on_data(on_chunk) ⇒ Object



207
208
209
210
211
# File 'lib/legion/extensions/llm/streaming.rb', line 207

def v1_on_data(on_chunk)
  proc do |chunk, _size|
    on_chunk.call(chunk, nil)
  end
end

.v2_on_data(on_chunk, on_failed_response) ⇒ Object



213
214
215
216
217
218
219
220
221
222
223
224
225
# File 'lib/legion/extensions/llm/streaming.rb', line 213

def v2_on_data(on_chunk, on_failed_response)
  proc do |chunk, _bytes, env|
    # Typhoeus/libcurl sends on_data callbacks before headers arrive, so env&.status
    # may be nil or 0 during streaming. Only treat as failure when we have a
    # definitive non-200 status (e.g. 400, 500) and still have data to process.
    status = env&.status
    if status == 200 || status.nil? || status.zero?
      on_chunk.call(chunk, env)
    else
      on_failed_response.call(chunk, env)
    end
  end
end