Module: RubyLLM::Providers::Bedrock::Streaming::ContentExtraction
- Defined in:
- lib/ruby_llm/providers/bedrock/streaming/content_extraction.rb
Overview
Module for handling content extraction from AWS Bedrock streaming responses.
Instance Method Summary collapse
- #extract_cache_creation_tokens(data) ⇒ Object
- #extract_cached_tokens(data) ⇒ Object
- #extract_input_tokens(data) ⇒ Object
- #extract_model_id(data) ⇒ Object
- #extract_output_tokens(data) ⇒ Object
- #extract_signature_delta(data) ⇒ Object
- #extract_streaming_content(data) ⇒ Object
- #extract_thinking_delta(data) ⇒ Object
- #extract_thinking_tokens(data) ⇒ Object
- #extract_tool_calls(data) ⇒ Object
- #json_delta?(data) ⇒ Boolean
Instance Method Details
#extract_cache_creation_tokens(data) ⇒ Object
64 65 66 67 68 69 70 71 72 73 |
# File 'lib/ruby_llm/providers/bedrock/streaming/content_extraction.rb', line 64 def extract_cache_creation_tokens(data) direct = data.dig('message', 'usage', 'cache_creation_input_tokens') || data.dig('usage', 'cache_creation_input_tokens') return direct if direct breakdown = data.dig('message', 'usage', 'cache_creation') || data.dig('usage', 'cache_creation') return unless breakdown.is_a?(Hash) breakdown.values.compact.sum end |
#extract_cached_tokens(data) ⇒ Object
60 61 62 |
# File 'lib/ruby_llm/providers/bedrock/streaming/content_extraction.rb', line 60 def extract_cached_tokens(data) data.dig('message', 'usage', 'cache_read_input_tokens') || data.dig('usage', 'cache_read_input_tokens') end |
#extract_input_tokens(data) ⇒ Object
52 53 54 |
# File 'lib/ruby_llm/providers/bedrock/streaming/content_extraction.rb', line 52 def extract_input_tokens(data) data.dig('message', 'usage', 'input_tokens') end |
#extract_model_id(data) ⇒ Object
48 49 50 |
# File 'lib/ruby_llm/providers/bedrock/streaming/content_extraction.rb', line 48 def extract_model_id(data) data.dig('message', 'model') || @model_id end |
#extract_output_tokens(data) ⇒ Object
56 57 58 |
# File 'lib/ruby_llm/providers/bedrock/streaming/content_extraction.rb', line 56 def extract_output_tokens(data) data.dig('message', 'usage', 'output_tokens') || data.dig('usage', 'output_tokens') end |
#extract_signature_delta(data) ⇒ Object
33 34 35 36 37 38 39 40 41 42 |
# File 'lib/ruby_llm/providers/bedrock/streaming/content_extraction.rb', line 33 def extract_signature_delta(data) return nil unless data.is_a?(Hash) signature = extract_signature_from_delta(data) return signature if signature return nil unless data['type'] == 'content_block_start' extract_signature_from_block(data['content_block']) end |
#extract_streaming_content(data) ⇒ Object
13 14 15 16 17 |
# File 'lib/ruby_llm/providers/bedrock/streaming/content_extraction.rb', line 13 def extract_streaming_content(data) return '' unless data.is_a?(Hash) extract_content_by_type(data) end |
#extract_thinking_delta(data) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/ruby_llm/providers/bedrock/streaming/content_extraction.rb', line 19 def extract_thinking_delta(data) return nil unless data.is_a?(Hash) if data['type'] == 'content_block_delta' && data.dig('delta', 'type') == 'thinking_delta' return data.dig('delta', 'thinking') end if data['type'] == 'content_block_start' && data.dig('content_block', 'type') == 'thinking' return data.dig('content_block', 'thinking') || data.dig('content_block', 'text') end nil end |
#extract_thinking_tokens(data) ⇒ Object
75 76 77 78 79 80 81 82 83 84 |
# File 'lib/ruby_llm/providers/bedrock/streaming/content_extraction.rb', line 75 def extract_thinking_tokens(data) data.dig('message', 'usage', 'thinking_tokens') || data.dig('message', 'usage', 'output_tokens_details', 'thinking_tokens') || data.dig('usage', 'thinking_tokens') || data.dig('usage', 'output_tokens_details', 'thinking_tokens') || data.dig('message', 'usage', 'reasoning_tokens') || data.dig('message', 'usage', 'output_tokens_details', 'reasoning_tokens') || data.dig('usage', 'reasoning_tokens') || data.dig('usage', 'output_tokens_details', 'reasoning_tokens') end |
#extract_tool_calls(data) ⇒ Object
44 45 46 |
# File 'lib/ruby_llm/providers/bedrock/streaming/content_extraction.rb', line 44 def extract_tool_calls(data) data.dig('message', 'tool_calls') || data['tool_calls'] end |
#json_delta?(data) ⇒ Boolean
9 10 11 |
# File 'lib/ruby_llm/providers/bedrock/streaming/content_extraction.rb', line 9 def json_delta?(data) data['type'] == 'content_block_delta' && data.dig('delta', 'type') == 'input_json_delta' end |