Class: DebugAgent::SseCallback

Inherits:
ChatCallback show all
Defined in:
lib/debug_agent/middleware.rb

Overview

SSE callback that collects events for both buffered and streaming modes. In streaming mode, events are yielded in real-time via an Enumerator.

Instance Method Summary collapse

Constructor Details

#initializeSseCallback

Returns a new instance of SseCallback.



8
9
10
11
12
# File 'lib/debug_agent/middleware.rb', line 8

def initialize
  @events = []
  @queue = Queue.new
  @done = false
end

Instance Method Details

#eventsObject



14
15
16
# File 'lib/debug_agent/middleware.rb', line 14

def events
  @events
end

#on_completeObject



33
34
35
36
37
38
# File 'lib/debug_agent/middleware.rb', line 33

def on_complete
  @events << ['done', '']
  @queue << ['done', '']
  @done = true
  @queue.close
end

#on_content(chunk) ⇒ Object



18
19
20
21
# File 'lib/debug_agent/middleware.rb', line 18

def on_content(chunk)
  @events << ['content', JSON.generate(chunk)]
  @queue << ['content', JSON.generate(chunk)]
end

#on_context_compressed(original, compressed, removed_rounds) ⇒ Object



47
48
49
50
51
# File 'lib/debug_agent/middleware.rb', line 47

def on_context_compressed(original, compressed, removed_rounds)
  info = JSON.generate({ originalTokens: original, compressedTokens: compressed, removedRounds: removed_rounds })
  @events << ['context_compressed', info]
  @queue << ['context_compressed', info]
end

#on_error(message) ⇒ Object



40
41
42
43
44
45
# File 'lib/debug_agent/middleware.rb', line 40

def on_error(message)
  @events << ['error', message]
  @queue << ['error', message]
  @done = true
  @queue.close
end

#on_tool_result(tool_name, result) ⇒ Object



28
29
30
31
# File 'lib/debug_agent/middleware.rb', line 28

def on_tool_result(tool_name, result)
  @events << ['tool_result', "#{tool_name}: #{result}"]
  @queue << ['tool_result', "#{tool_name}: #{result}"]
end

#on_tool_start(tool_name, args) ⇒ Object



23
24
25
26
# File 'lib/debug_agent/middleware.rb', line 23

def on_tool_start(tool_name, args)
  @events << ['tool_start', tool_name]
  @queue << ['tool_start', tool_name]
end

#streaming_enumObject

Real-time streaming Enumerator: yields SSE-formatted lines as events arrive.



54
55
56
57
58
59
60
61
# File 'lib/debug_agent/middleware.rb', line 54

def streaming_enum
  Enumerator.new do |yielder|
    while (item = @queue.pop)
      event_type, data = item
      yielder << "event: #{event_type}\ndata: #{data}\n\n"
    end
  end
end