Class: Kward::Compaction::TokenEstimator
- Inherits:
-
Object
- Object
- Kward::Compaction::TokenEstimator
- Defined in:
- lib/kward/compaction/token_estimator.rb
Overview
Estimates transcript token usage from messages and provider usage metadata.
Instance Method Summary collapse
- #context_tokens(messages) ⇒ Object
- #estimate_tokens(text) ⇒ Object
- #message_tokens(message) ⇒ Object
- #messages_tokens(messages) ⇒ Object
Instance Method Details
#context_tokens(messages) ⇒ Object
19 20 21 22 23 24 25 26 27 |
# File 'lib/kward/compaction/token_estimator.rb', line 19 def context_tokens() = Array() usage_info = last_assistant_usage_info() return () unless usage_info usage_tokens = usage_tokens(usage_info[:usage]) trailing_tokens = [(usage_info[:index] + 1)..].to_a.sum { || () } usage_tokens + trailing_tokens end |
#estimate_tokens(text) ⇒ Object
11 12 13 |
# File 'lib/kward/compaction/token_estimator.rb', line 11 def estimate_tokens(text) (text.to_s.length / 4.0).ceil end |
#message_tokens(message) ⇒ Object
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/kward/compaction/token_estimator.rb', line 29 def () role = value(, :role) parts = [role] if role.to_s == "compactionSummary" parts << value(, :summary) else parts << content_text(value(, :content)) end parts << value(, :reasoning_summary) tool_calls().each do |tool_call| parts << tool_call_name(tool_call) parts << tool_call_arguments(tool_call) end parts << value(, :tool_call_id) parts << value(, :name) estimate_tokens(parts.compact.join("\n")) end |
#messages_tokens(messages) ⇒ Object
15 16 17 |
# File 'lib/kward/compaction/token_estimator.rb', line 15 def () Array().sum { || () } end |