class RubyLLM::Providers::Anthropic
def handle_stream(&block)
def handle_stream(&block) to_json_stream do |data| if data['type'] == 'content_block_delta' && data.dig('delta', 'type') == 'input_json_delta' block.call( Chunk.new( role: :assistant, model_id: data.dig('message', 'model'), content: data.dig('delta', 'text'), input_tokens: data.dig('message', 'usage', 'input_tokens'), output_tokens: data.dig('message', 'usage', 'output_tokens') || data.dig('usage', 'output_tokens'), tool_calls: { nil => ToolCall.new(id: nil, name: nil, arguments: data.dig('delta', 'partial_json')) } ) ) else block.call( Chunk.new( role: :assistant, model_id: data.dig('message', 'model'), content: data.dig('delta', 'text'), input_tokens: data.dig('message', 'usage', 'input_tokens'), output_tokens: data.dig('message', 'usage', 'output_tokens') || data.dig('usage', 'output_tokens'), tool_calls: parse_tool_calls(data['content_block']) ) ) end end end