14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
# File 'lib/ruby_llm/protocols/gemini/streaming.rb', line 14
def build_chunk(data)
parts = data.dig('candidates', 0, 'content', 'parts') || []
track_stream_parts(data, parts)
Chunk.new(
role: :assistant,
model: data['modelVersion'],
content: (parts),
citations: (data, nil),
thinking: Thinking.build(
text: (parts),
signature: (parts)
),
input_tokens: input_tokens(data),
output_tokens: (data),
cache_read_tokens: data.dig('usageMetadata', 'cachedContentTokenCount'),
thinking_tokens: data.dig('usageMetadata', 'thoughtsTokenCount'),
finish_reason: normalize_finish_reason(
data.dig('candidates', 0, 'finishReason') || data.dig('promptFeedback', 'blockReason')
),
tool_calls: (data),
**stream_end_fields(data)
)
end
|