Skip to main content

Crate agentfit

Crate agentfit 

Source
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§

CharApproxTokenizer
Zero-dependency approximation: chars.len() / 4. Coarse but predictable.
Fitter
Fits messages to a token budget.
Message
One chat message. The role is provider-specific (system, user, assistant, tool, etc.).

Enums§

Strategy
Truncation strategy.

Traits§

Tokenizer
Counts tokens in a string. Implementations should be fast and stable.