Class: SwarmSDK::ContextCompactor::Metrics
- Inherits:
-
Object
- Object
- SwarmSDK::ContextCompactor::Metrics
- Defined in:
- lib/swarm_sdk/context_compactor/metrics.rb
Overview
Metrics tracks compression statistics
Provides detailed information about the compression operation:
- Message counts (before/after)
- Token counts (before/after)
- Compression ratio
- Time taken
- Summary of changes
Usage
metrics = agent.compact_context
puts metrics.summary
puts "Compressed from #{metrics.original_tokens} to #{metrics.compressed_tokens} tokens"
puts "Compression ratio: #{(metrics.compression_ratio * 100).round(1)}%"
Instance Attribute Summary collapse
-
#compressed_messages ⇒ Object
readonly
Returns the value of attribute compressed_messages.
-
#original_messages ⇒ Object
readonly
Returns the value of attribute original_messages.
-
#time_taken ⇒ Object
readonly
Returns the value of attribute time_taken.
Instance Method Summary collapse
-
#compressed_message_count ⇒ Integer
Number of messages after compression.
-
#compressed_tokens ⇒ Integer
Estimated tokens after compression.
-
#compression_factor ⇒ Float
Compression factor (original / compressed).
-
#compression_percentage ⇒ Float
Compression percentage.
-
#compression_ratio ⇒ Float
Compression ratio (compressed / original).
-
#initialize(original_messages:, compressed_messages:, time_taken:) ⇒ Metrics
constructor
Initialize metrics from compression operation.
-
#messages_removed ⇒ Integer
Number of messages removed.
-
#messages_summarized ⇒ Integer
Number of checkpoint summary messages created.
-
#original_message_count ⇒ Integer
Number of messages before compression.
-
#original_tokens ⇒ Integer
Estimated tokens before compression.
-
#summary ⇒ String
Generate a human-readable summary.
-
#to_h ⇒ Hash
Convert metrics to hash for logging.
-
#tokens_removed ⇒ Integer
Number of tokens removed.
Constructor Details
#initialize(original_messages:, compressed_messages:, time_taken:) ⇒ Metrics
Initialize metrics from compression operation
29 30 31 32 33 |
# File 'lib/swarm_sdk/context_compactor/metrics.rb', line 29 def initialize(original_messages:, compressed_messages:, time_taken:) @original_messages = @compressed_messages = @time_taken = time_taken end |
Instance Attribute Details
#compressed_messages ⇒ Object (readonly)
Returns the value of attribute compressed_messages.
22 23 24 |
# File 'lib/swarm_sdk/context_compactor/metrics.rb', line 22 def @compressed_messages end |
#original_messages ⇒ Object (readonly)
Returns the value of attribute original_messages.
22 23 24 |
# File 'lib/swarm_sdk/context_compactor/metrics.rb', line 22 def @original_messages end |
#time_taken ⇒ Object (readonly)
Returns the value of attribute time_taken.
22 23 24 |
# File 'lib/swarm_sdk/context_compactor/metrics.rb', line 22 def time_taken @time_taken end |
Instance Method Details
#compressed_message_count ⇒ Integer
Number of messages after compression
45 46 47 |
# File 'lib/swarm_sdk/context_compactor/metrics.rb', line 45 def @compressed_messages.size end |
#compressed_tokens ⇒ Integer
Estimated tokens after compression
75 76 77 |
# File 'lib/swarm_sdk/context_compactor/metrics.rb', line 75 def compressed_tokens @compressed_tokens ||= TokenCounter.(@compressed_messages) end |
#compression_factor ⇒ Float
Compression factor (original / compressed)
e.g., 5.0 means compressed to 1/5th of original size
100 101 102 103 104 |
# File 'lib/swarm_sdk/context_compactor/metrics.rb', line 100 def compression_factor return 0.0 if compressed_tokens.zero? original_tokens.to_f / compressed_tokens end |
#compression_percentage ⇒ Float
Compression percentage
109 110 111 |
# File 'lib/swarm_sdk/context_compactor/metrics.rb', line 109 def compression_percentage (compression_ratio * 100).round(2) end |
#compression_ratio ⇒ Float
Compression ratio (compressed / original)
89 90 91 92 93 |
# File 'lib/swarm_sdk/context_compactor/metrics.rb', line 89 def compression_ratio return 0.0 if original_tokens.zero? compressed_tokens.to_f / original_tokens end |
#messages_removed ⇒ Integer
Number of messages removed
52 53 54 |
# File 'lib/swarm_sdk/context_compactor/metrics.rb', line 52 def - end |
#messages_summarized ⇒ Integer
Number of checkpoint summary messages created
59 60 61 62 63 |
# File 'lib/swarm_sdk/context_compactor/metrics.rb', line 59 def @compressed_messages.count do |msg| msg.role == :system && msg.content.to_s.include?("CONVERSATION CHECKPOINT") end end |
#original_message_count ⇒ Integer
Number of messages before compression
38 39 40 |
# File 'lib/swarm_sdk/context_compactor/metrics.rb', line 38 def @original_messages.size end |
#original_tokens ⇒ Integer
Estimated tokens before compression
68 69 70 |
# File 'lib/swarm_sdk/context_compactor/metrics.rb', line 68 def original_tokens @original_tokens ||= TokenCounter.(@original_messages) end |
#summary ⇒ String
Generate a human-readable summary
116 117 118 119 120 121 122 123 124 125 |
# File 'lib/swarm_sdk/context_compactor/metrics.rb', line 116 def summary <<~SUMMARY Context Compression Results: - Messages: #{} → #{} (-#{}) - Estimated tokens: #{original_tokens} → #{compressed_tokens} (-#{tokens_removed}) - Compression ratio: #{compression_factor.round(1)}:1 (#{compression_percentage}%) - Checkpoints created: #{} - Time taken: #{time_taken.round(3)}s SUMMARY end |
#to_h ⇒ Hash
Convert metrics to hash for logging
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 |
# File 'lib/swarm_sdk/context_compactor/metrics.rb', line 130 def to_h { original_message_count: , compressed_message_count: , messages_removed: , messages_summarized: , original_tokens: original_tokens, compressed_tokens: compressed_tokens, tokens_removed: tokens_removed, compression_ratio: compression_ratio.round(4), compression_factor: compression_factor.round(2), compression_percentage: compression_percentage, time_taken: time_taken.round(3), } end |
#tokens_removed ⇒ Integer
Number of tokens removed
82 83 84 |
# File 'lib/swarm_sdk/context_compactor/metrics.rb', line 82 def tokens_removed original_tokens - compressed_tokens end |