use super::policy::{PolicyError, SpecialMode};
pub trait Tokenize: Send + Sync {
fn encode(&self, text: &str) -> Vec<u32>;
fn encode_with(&self, text: &str, mode: &SpecialMode<'_>) -> Result<Vec<u32>, PolicyError>;
fn decode(&self, ids: &[u32]) -> Result<String, TokenizeError>;
fn vocab_size(&self) -> usize;
}
#[derive(Debug, thiserror::Error)]
pub enum TokenizeError {
#[error("Decoding error: invalid UTF-8")]
Utf8Error,
#[error("Decoding error: token ID {0} out of range")]
InvalidTokenId(u32),
#[error("{0}")]
Other(String),
}