Class: Kward::Compaction::TokenEstimator

Inherits:
Object
  • Object
show all
Defined in:
lib/kward/compactor.rb

Instance Method Summary collapse

Instance Method Details

#context_tokens(messages) ⇒ Object



74
75
76
77
78
79
80
81
82
# File 'lib/kward/compactor.rb', line 74

def context_tokens(messages)
  messages = Array(messages)
  usage_info = last_assistant_usage_info(messages)
  return messages_tokens(messages) unless usage_info

  usage_tokens = usage_tokens(usage_info[:usage])
  trailing_tokens = messages[(usage_info[:index] + 1)..].to_a.sum { |message| message_tokens(message) }
  usage_tokens + trailing_tokens
end

#estimate_tokens(text) ⇒ Object



66
67
68
# File 'lib/kward/compactor.rb', line 66

def estimate_tokens(text)
  (text.to_s.length / 4.0).ceil
end

#message_tokens(message) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/kward/compactor.rb', line 84

def message_tokens(message)
  role = value(message, :role)
  parts = [role]
  if role.to_s == "compactionSummary"
    parts << value(message, :summary)
  else
    parts << content_text(value(message, :content))
  end
  parts << value(message, :reasoning_summary)
  tool_calls(message).each do |tool_call|
    parts << tool_call_name(tool_call)
    parts << tool_call_arguments(tool_call)
  end
  parts << value(message, :tool_call_id)
  parts << value(message, :name)
  estimate_tokens(parts.compact.join("\n"))
end

#messages_tokens(messages) ⇒ Object



70
71
72
# File 'lib/kward/compactor.rb', line 70

def messages_tokens(messages)
  Array(messages).sum { |message| message_tokens(message) }
end