14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# File 'lib/ruby_llm/providers/openai/streaming.rb', line 14
def build_chunk(data)
usage = data['usage'] || {}
delta = data.dig('choices', 0, 'delta') || {}
content_source = delta['content'] || data.dig('choices', 0, 'message', 'content')
content, thinking_from_blocks = OpenAI::Chat.extract_content_and_thinking(content_source)
Chunk.new(
role: :assistant,
model_id: data['model'],
content: content,
thinking: Thinking.build(
text: thinking_from_blocks || delta['reasoning_content'] || delta['reasoning'],
signature: delta['reasoning_signature']
),
tool_calls: parse_tool_calls(delta['tool_calls'], parse_arguments: false),
input_tokens: OpenAI::Chat.input_tokens(usage),
output_tokens: OpenAI::Chat.output_tokens(usage),
cached_tokens: OpenAI::Chat.cache_read_tokens(usage),
cache_creation_tokens: OpenAI::Chat.cache_write_tokens(usage),
thinking_tokens: OpenAI::Chat.thinking_tokens(usage)
)
end
|