Download crates/forge_domain/src/compact/result.rs from SaylorTwift/forgecode: direct link, hf CLI and curl.
- Browser
- Download file 2.92 kB
-
https://huggingface.co/SaylorTwift/forgecode/resolve/main/crates/forge_domain/src/compact/result.rs
- Command line
-
hf download hf://SaylorTwift/forgecode/crates/forge_domain/src/compact/result.rs
-
curl -L -o result.rs https://huggingface.co/SaylorTwift/forgecode/resolve/main/crates/forge_domain/src/compact/result.rs
2.92 kB
| use serde::{Deserialize, Serialize}; | |
| /// Contains metrics related to context compaction | |
| /// This struct provides information about the compaction operation | |
| /// such as the original and compacted token counts. | |
| pub struct CompactionResult { | |
| /// Number of tokens in the original context | |
| pub original_tokens: usize, | |
| /// Number of tokens after compaction | |
| pub compacted_tokens: usize, | |
| /// Number of messages in the original context | |
| pub original_messages: usize, | |
| /// Number of messages after compaction | |
| pub compacted_messages: usize, | |
| } | |
| impl CompactionResult { | |
| /// Create a new CompactionResult with the specified metrics | |
| pub fn new( | |
| original_tokens: usize, | |
| compacted_tokens: usize, | |
| original_messages: usize, | |
| compacted_messages: usize, | |
| ) -> Self { | |
| Self { | |
| original_tokens, | |
| compacted_tokens, | |
| original_messages, | |
| compacted_messages, | |
| } | |
| } | |
| /// Calculate the percentage reduction in tokens | |
| pub fn token_reduction_percentage(&self) -> f64 { | |
| if self.original_tokens == 0 || self.compacted_tokens == 0 { | |
| return 0.0; | |
| } | |
| ((self.original_tokens.saturating_sub(self.compacted_tokens)) as f64 | |
| / self.original_tokens as f64) | |
| * 100.0 | |
| } | |
| /// Calculate the percentage reduction in messages | |
| pub fn message_reduction_percentage(&self) -> f64 { | |
| if self.original_messages == 0 || self.compacted_messages == 0 { | |
| return 0.0; | |
| } | |
| ((self | |
| .original_messages | |
| .saturating_sub(self.compacted_messages)) as f64 | |
| / self.original_messages as f64) | |
| * 100.0 | |
| } | |
| } | |
| mod tests { | |
| use pretty_assertions::assert_eq; | |
| use super::*; | |
| fn test_token_reduction_percentage() { | |
| let result = CompactionResult::new(1000, 500, 20, 10); | |
| assert_eq!(result.token_reduction_percentage(), 50.0); | |
| // Edge case: no original tokens | |
| let result = CompactionResult::new(0, 0, 20, 10); | |
| assert_eq!(result.token_reduction_percentage(), 0.0); | |
| // Edge case: no compacted tokens | |
| let result = CompactionResult::new(1000, 0, 20, 0); | |
| assert_eq!(result.token_reduction_percentage(), 0.0); | |
| } | |
| fn test_message_reduction_percentage() { | |
| let result = CompactionResult::new(1000, 500, 20, 10); | |
| assert_eq!(result.message_reduction_percentage(), 50.0); | |
| // Edge case: no original messages | |
| let result = CompactionResult::new(1000, 500, 0, 0); | |
| assert_eq!(result.message_reduction_percentage(), 0.0); | |
| // Edge case: no compacted messages | |
| let result = CompactionResult::new(1000, 0, 20, 0); | |
| assert_eq!(result.message_reduction_percentage(), 0.0); | |
| } | |
| } | |