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 event Hash

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 response Hash

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