Class: LLM::EventStream::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/llm/eventstream/parser.rb

Defined Under Namespace

Classes: Visitor

Constant Summary collapse

COMPACT_THRESHOLD =
4096

Instance Method Summary collapse

Constructor Details

#initializeLLM::EventStream::Parser



12
13
14
15
16
17
# File 'lib/llm/eventstream/parser.rb', line 12

def initialize
  @buffer = +""
  @events = Hash.new { |h, k| h[k] = [] }
  @cursor = 0
  @visitors = []
end

Instance Method Details

#<<(event) ⇒ void

This method returns an undefined value.

Append an event to the internal buffer



44
45
46
47
# File 'lib/llm/eventstream/parser.rb', line 44

def <<(event)
  @buffer << event
  each_line { parse!(_1) }
end

#bodyString

Returns the internal buffer

Returns:

  • (String)


52
53
54
55
# File 'lib/llm/eventstream/parser.rb', line 52

def body
  return @buffer.dup if @cursor.zero?
  @buffer.byteslice(@cursor, @buffer.bytesize - @cursor) || +""
end

#freevoid

This method returns an undefined value.

Free the internal buffer



60
61
62
63
# File 'lib/llm/eventstream/parser.rb', line 60

def free
  @buffer.clear
  @cursor = 0
end

#on(evtname, &block) ⇒ void

This method returns an undefined value.

Subscribe to an event

Parameters:

  • evtname (Symbol)
  • block (Proc)


37
38
39
# File 'lib/llm/eventstream/parser.rb', line 37

def on(evtname, &block)
  @events[evtname.to_s] << block
end

#register(visitor) ⇒ void

This method returns an undefined value.

Register a visitor

Parameters:

  • visitor (#on_data)


23
24
25
26
27
28
29
30
# File 'lib/llm/eventstream/parser.rb', line 23

def register(visitor)
  @visitors << Visitor.new(
    visitor,
    visitor.respond_to?(:on_data), visitor.respond_to?(:on_event),
    visitor.respond_to?(:on_id), visitor.respond_to?(:on_retry),
    visitor.respond_to?(:on_chunk)
  )
end