pub struct TokenCounter { /* private fields */ }Expand description
Token counter backed by tiktoken cl100k_base BPE encoding.
Estimates how many tokens a piece of text or a full Message will consume when
sent to an LLM API. Uses a process-scoped OnceLock so BPE data is loaded once
and shared across all instances.
Falls back to a chars/4 heuristic when tiktoken init fails or when the input
exceeds MAX_INPUT_LEN bytes (64 KiB).
§Examples
use zeph_memory::TokenCounter;
let counter = TokenCounter::new();
let n = counter.count_tokens("Hello, world!");
assert!(n > 0);Implementations§
Source§impl TokenCounter
impl TokenCounter
Sourcepub fn new() -> Self
pub fn new() -> Self
Create a new counter. Falls back to chars/4 if tiktoken init fails.
BPE data is loaded once and cached in a OnceLock for the process lifetime.
Sourcepub fn count_tokens(&self, text: &str) -> usize
pub fn count_tokens(&self, text: &str) -> usize
Count tokens in text. Uses cache, falls back to heuristic.
Inputs exceeding 64 KiB bypass BPE and use chars/4 without caching to avoid CPU amplification from oversized inputs.
Sourcepub fn count_message_tokens(&self, msg: &Message) -> usize
pub fn count_message_tokens(&self, msg: &Message) -> usize
Estimate token count for a message the way the LLM API will see it.
When structured parts exist, counts from parts matching the API payload
structure. Falls back to content (flattened text) when parts is empty.
Sourcepub fn count_tool_schema_tokens(&self, schema: &Value) -> usize
pub fn count_tool_schema_tokens(&self, schema: &Value) -> usize
Count tokens for an OpenAI tool/function schema JSON value.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for TokenCounter
impl !RefUnwindSafe for TokenCounter
impl Send for TokenCounter
impl Sync for TokenCounter
impl Unpin for TokenCounter
impl UnsafeUnpin for TokenCounter
impl UnwindSafe for TokenCounter
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request