class Collector
Rebuilds output items from streamed events when the terminal Codex response omits them (some Codex responses return an empty output array).
Definitions
def initialize
Initialize an empty streamed-output collector.
Implementation
def initialize
@items = {}
end
def accept(event)
Accumulate one Codex Responses streaming event.
Signature
-
parameter
eventHash The event to record.
Implementation
def accept(event)
case event["type"]
when "response.output_item.added"
@items[event.fetch("output_index", @items.length)] = duplicate(event.fetch("item"))
when "response.output_text.delta", "response.refusal.delta"
append_text(event)
when "response.function_call_arguments.delta"
append_arguments(event)
when "response.output_item.done"
@items[event.fetch("output_index", @items.length)] = duplicate(event.fetch("item"))
end
end
def complete(response)
Fill missing output items in a terminal response from collected events.
Signature
-
parameter
responseHash The completed Responses object.
-
returns
Hash The response with reconstructed output items.
Implementation
def complete(response)
unless response["output"].is_a?(Array) && !response["output"].empty?
response["output"] = @items.sort_by{|index, _item| index}.map(&:last)
end
return response
end