use std::collections::HashMap;
use std::path::PathBuf;
#[derive(Debug, Clone)]
pub struct TokenizerSpec {
pub tokenizer_json: PathBuf,
pub added_tokens: HashMap<u32, String>,
pub chat_template: Option<String>,
}
impl TokenizerSpec {
pub fn special_token_id(&self, token: &str) -> Option<u32> {
self.added_tokens
.iter()
.find(|(_, s)| s.as_str() == token)
.map(|(id, _)| *id)
}
pub fn chatml_wrap(&self, user_prompt: &str) -> Option<String> {
let start = self.special_token_id("<|im_start|>")?;
self.special_token_id("<|im_end|>")?;
let _ = start;
Some(format!(
"<|im_start|>user\n{user_prompt}<|im_end|>\n<|im_start|>assistant\n"
))
}
}