use serde::{Deserialize, Serialize};
use typed_builder::TypedBuilder;
#[derive(
Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize, TypedBuilder, Default,
)]
#[builder(field_defaults(default))]
pub struct ToolOutputTruncationConfig {
#[builder(default)]
pub max_tokens: u32,
#[serde(default)]
#[builder(default)]
pub save_full_output: bool,
}
impl ToolOutputTruncationConfig {
#[must_use]
pub const fn new(max_tokens: u32) -> Self {
Self {
max_tokens,
save_full_output: false,
}
}
#[must_use]
pub const fn with_save_full_output(mut self, save_full_output: bool) -> Self {
self.save_full_output = save_full_output;
self
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_tool_output_truncation_config_defaults() {
let default_cfg = ToolOutputTruncationConfig::default();
assert_eq!(default_cfg.max_tokens, 0);
let custom = ToolOutputTruncationConfig::builder()
.max_tokens(2048)
.build();
assert_eq!(custom.max_tokens, 2048);
}
#[test]
fn test_tool_output_truncation_config_serde_roundtrip() {
let custom = ToolOutputTruncationConfig::builder()
.max_tokens(1024)
.build();
let json = serde_json::to_string(&custom).expect("serialize");
let parsed: ToolOutputTruncationConfig = serde_json::from_str(&json).expect("deserialize");
assert_eq!(custom, parsed);
}
}