Class: GroqRuby::Streaming::ChunkStream

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/groq_ruby/streaming/chunk_stream.rb

Overview

Lazy stream of parsed chat completion chunks. Wraps the transport’s SSE delivery with the ‘[DONE]` sentinel handling that OpenAI-style APIs use, and the JSON decode → model wrap step.

Yields Models::ChatCompletionChunk instances. Honours the ‘[DONE]` terminator by stopping iteration cleanly.

Examples:

Iterate via Enumerable

stream = client.chat.completions.create(stream: true, ...)
stream.each { |chunk| print chunk.choices.first.delta.content }

Pass a block directly

client.chat.completions.create(stream: true, ...) do |chunk|
  ...
end

Constant Summary collapse

DONE_SENTINEL =
"[DONE]".freeze

Instance Method Summary collapse

Constructor Details

#initialize(transport:, request:, chunk_model:) ⇒ ChunkStream

Returns a new instance of ChunkStream.

Parameters:

  • transport (Transport)
  • request (Request)
  • chunk_model (Class)

    class with a ‘.from_hash(Hash)` constructor



28
29
30
31
32
# File 'lib/groq_ruby/streaming/chunk_stream.rb', line 28

def initialize(transport:, request:, chunk_model:)
  @transport = transport
  @request = request
  @chunk_model = chunk_model
end

Instance Method Details

#each {|chunk| ... } ⇒ Enumerator, void

Iterate through each chunk. When called without a block, returns an Enumerator that lets callers compose with ‘Enumerable` methods.

Yield Parameters:

Returns:

  • (Enumerator)

    when called without a block

  • (void)

    when called with a block

Raises:

  • (APIError)

    subclass on non-2xx response or transport failure.



41
42
43
44
45
46
47
48
# File 'lib/groq_ruby/streaming/chunk_stream.rb', line 41

def each(&block)
  return enum_for(:each) unless block_given?
  parser = EventParser.new
  result = @transport.stream(@request) do |raw_chunk|
    parser.feed(raw_chunk) { |_event, data, _id, _retry| forward_event(data, &block) }
  end
  raise result.failure if result.failure?
end