pushBlockEndEvent function

void pushBlockEndEvent(
  1. AssistantMessageEventStream eventStream,
  2. List<StreamingBlock> blocks,
  3. StreamingBlock block,
  4. AssistantMessage snapshot(),
)

Pushes the end event for block (text, thinking, or tool call) at its position in blocks.

Shared by the adapters: pi fires text_end / thinking_end / toolcall_end identically across providers.

Implementation

void pushBlockEndEvent(
  AssistantMessageEventStream eventStream,
  List<StreamingBlock> blocks,
  StreamingBlock block,
  AssistantMessage Function() snapshot,
) {
  final index = blocks.indexOf(block);
  if (index == -1) {
    return;
  }
  switch (block) {
    case TextStreamingBlock():
      eventStream.push(
        TextEndEvent(
          contentIndex: index,
          content: block.text.toString(),
          partial: snapshot(),
        ),
      );
    case ThinkingStreamingBlock():
      eventStream.push(
        ThinkingEndEvent(
          contentIndex: index,
          content: block.thinking.toString(),
          partial: snapshot(),
        ),
      );
    case ToolCallStreamingBlock():
      block.finish();
      final partial = snapshot();
      eventStream.push(
        ToolCallEndEvent(
          contentIndex: index,
          toolCall: partial.content[index] as ToolCall,
          partial: partial,
        ),
      );
  }
}