Expand description
Fit chat messages to an LLM context window.
Token-aware truncation with pluggable tokenizers and multiple
strategies. Default ships with a CharApproxTokenizer (chars/4) for
zero-dep coarse counting; enable the tiktoken feature for accurate
BPE counting via tiktoken-rs.
§Quick start
use agentfit::{Fitter, Message, Strategy};
let messages = vec![
Message::system("You are concise."),
Message::user("First question..."),
Message::assistant("First answer..."),
Message::user("Second question, the one we actually care about."),
];
// 30 chars-as-tokens budget; oldest middle messages get dropped.
let fitter = Fitter::new(30);
let kept = fitter.fit(messages, Strategy::DropOldest);
assert!(!kept.is_empty());
// System message and the trailing user turn are always preserved.
assert_eq!(kept.first().unwrap().role, "system");
assert_eq!(kept.last().unwrap().role, "user");Structs§
- Char
Approx Tokenizer - Zero-dependency approximation:
chars.len() / 4. Coarse but predictable. - Fitter
- Fits messages to a token budget.
- Message
- One chat message. The
roleis provider-specific (system,user,assistant,tool, etc.).
Enums§
- Strategy
- Truncation strategy.
Traits§
- Tokenizer
- Counts tokens in a string. Implementations should be fast and stable.