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
- .build(faraday_v1:, on_chunk:, on_failed_response:) ⇒ Object
- .v1_on_data(on_chunk) ⇒ Object
- .v2_on_data(on_chunk, on_failed_response) ⇒ Object
Class Method Details
.build(faraday_v1:, on_chunk:, on_failed_response:) ⇒ Object
230 231 232 233 234 235 236 |
# File 'lib/legion/extensions/llm/streaming.rb', line 230 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
238 239 240 241 242 |
# File 'lib/legion/extensions/llm/streaming.rb', line 238 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
244 245 246 247 248 249 250 251 252 253 254 255 256 |
# File 'lib/legion/extensions/llm/streaming.rb', line 244 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 |