fn coverage_screen(ok: bool) -> &'static str {
if ok { "formatted" } else { "error" }
}
fn edge_screen(ok: bool) -> &'static str {
if ok { "success" } else { "handled_error" }
}
#[test]
fn test_chat_template_format_coverage() {
let mut gui = gui_coverage! {
buttons: [
"chatml_basic", "chatml_multiturn", "chatml_system",
"llama2_basic", "llama2_system", "llama2_multiturn",
"mistral_basic", "mistral_multiturn",
"phi_basic", "phi_system",
"alpaca_basic", "alpaca_system",
"raw_passthrough", "custom_jinja2"
],
screens: ["formatted", "error"]
};
{
let template = ChatMLTemplate::new();
let messages = vec![ChatMessage::user("Hello")];
let result = template.format_conversation(&messages);
gui.click("chatml_basic");
gui.visit(coverage_screen(result.is_ok()));
assert!(result.is_ok());
assert!(result.as_ref().unwrap().contains("<|im_start|>user"));
let messages = vec![
ChatMessage::user("What is 2+2?"),
ChatMessage::assistant("4"),
ChatMessage::user("And 3+3?"),
];
let result = template.format_conversation(&messages);
gui.click("chatml_multiturn");
gui.visit(coverage_screen(result.is_ok()));
assert!(result.is_ok());
let messages = vec![
ChatMessage::system("You are helpful."),
ChatMessage::user("Hello"),
];
let result = template.format_conversation(&messages);
gui.click("chatml_system");
gui.visit(coverage_screen(result.is_ok()));
assert!(result.is_ok());
assert!(result.as_ref().unwrap().contains("<|im_start|>system"));
}
{
let template = Llama2Template::new();
let messages = vec![ChatMessage::user("Hello")];
let result = template.format_conversation(&messages);
gui.click("llama2_basic");
gui.visit(coverage_screen(result.is_ok()));
assert!(result.is_ok());
assert!(result.as_ref().unwrap().contains("[INST]"));
let messages = vec![ChatMessage::system("Be helpful."), ChatMessage::user("Hi")];
let result = template.format_conversation(&messages);
gui.click("llama2_system");
gui.visit(coverage_screen(result.is_ok()));
assert!(result.is_ok());
assert!(result.as_ref().unwrap().contains("<<SYS>>"));
let messages = vec![
ChatMessage::user("Question 1"),
ChatMessage::assistant("Answer 1"),
ChatMessage::user("Question 2"),
];
let result = template.format_conversation(&messages);
gui.click("llama2_multiturn");
gui.visit(coverage_screen(result.is_ok()));
assert!(result.is_ok());
}
{
let template = MistralTemplate::new();
assert!(!template.supports_system_prompt());
let messages = vec![ChatMessage::user("Hello Mistral")];
let result = template.format_conversation(&messages);
gui.click("mistral_basic");
gui.visit(coverage_screen(result.is_ok()));
assert!(result.is_ok());
assert!(result.as_ref().unwrap().contains("[INST]"));
let messages = vec![
ChatMessage::system("Ignored"),
ChatMessage::user("Hello"),
ChatMessage::assistant("Hi"),
ChatMessage::user("Bye"),
];
let result = template.format_conversation(&messages);
gui.click("mistral_multiturn");
gui.visit(coverage_screen(result.is_ok()));
assert!(result.is_ok());
assert!(!result.as_ref().unwrap().contains("Ignored"));
}
{
let template = PhiTemplate::new();
let messages = vec![ChatMessage::user("Explain quantum")];
let result = template.format_conversation(&messages);
gui.click("phi_basic");
gui.visit(coverage_screen(result.is_ok()));
assert!(result.is_ok());
assert!(result.as_ref().unwrap().contains("Instruct:"));
let messages = vec![
ChatMessage::system("Be concise."),
ChatMessage::user("Hello"),
];
let result = template.format_conversation(&messages);
gui.click("phi_system");
gui.visit(coverage_screen(result.is_ok()));
assert!(result.is_ok());
}
{
let template = AlpacaTemplate::new();
let messages = vec![ChatMessage::user("Summarize this")];
let result = template.format_conversation(&messages);
gui.click("alpaca_basic");
gui.visit(coverage_screen(result.is_ok()));
assert!(result.is_ok());
assert!(result.as_ref().unwrap().contains("### Instruction:"));
let messages = vec![
ChatMessage::system("You are an AI."),
ChatMessage::user("Help me"),
];
let result = template.format_conversation(&messages);
gui.click("alpaca_system");
gui.visit(coverage_screen(result.is_ok()));
assert!(result.is_ok());
}
{
let template = RawTemplate::new();
let messages = vec![ChatMessage::user("Just pass through")];
let result = template.format_conversation(&messages);
gui.click("raw_passthrough");
gui.visit(coverage_screen(result.is_ok()));
assert!(result.is_ok());
assert!(result.as_ref().unwrap().contains("Just pass through"));
}
{
let template_str = r#"{% for message in messages %}{{ message.role }}: {{ message.content }}
{% endfor %}"#;
let template = HuggingFaceTemplate::new(
template_str.to_string(),
SpecialTokens::default(),
TemplateFormat::Custom,
);
if let Ok(t) = template {
let messages = vec![ChatMessage::user("Hello"), ChatMessage::assistant("Hi")];
let result = t.format_conversation(&messages);
gui.click("custom_jinja2");
gui.visit(coverage_screen(result.is_ok()));
assert!(result.is_ok());
} else {
gui.click("custom_jinja2");
gui.visit("error");
}
}
{
let invalid_template = "{% for message in messages %}{{ invalid syntax";
let template = HuggingFaceTemplate::new(
invalid_template.to_string(),
SpecialTokens::default(),
TemplateFormat::Custom,
);
gui.click("custom_jinja2");
gui.visit(if template.is_err() {
"error"
} else {
"formatted"
});
assert!(template.is_err(), "Invalid Jinja2 should produce error");
}
println!("\nTemplate Format Coverage: {:.1}%", gui.percent());
assert!(gui.meets(80.0), "Template format coverage >= 80%");
}
#[test]
fn test_chat_template_auto_detection_coverage() {
let mut gui = gui_coverage! {
buttons: [
"detect_chatml_qwen", "detect_chatml_yi", "detect_chatml_hermes",
"detect_llama2_tinyllama", "detect_llama2_vicuna",
"detect_mistral", "detect_mixtral",
"detect_phi2", "detect_phi3",
"detect_alpaca",
"detect_fallback_raw"
],
screens: ["detected", "fallback"]
};
let tests = [
(
"Qwen2-0.5B-Instruct",
TemplateFormat::ChatML,
"detect_chatml_qwen",
),
("Yi-6B-Chat", TemplateFormat::ChatML, "detect_chatml_yi"),
(
"OpenHermes-2.5-Mistral",
TemplateFormat::ChatML,
"detect_chatml_hermes",
),
(
"TinyLlama-1.1B-Chat-v1.0",
TemplateFormat::Llama2,
"detect_llama2_tinyllama",
),
(
"vicuna-7b-v1.5",
TemplateFormat::Llama2,
"detect_llama2_vicuna",
),
(
"Mistral-7B-Instruct-v0.2",
TemplateFormat::Mistral,
"detect_mistral",
),
(
"Mixtral-8x7B-Instruct",
TemplateFormat::Mistral,
"detect_mixtral",
),
("phi-2", TemplateFormat::Phi, "detect_phi2"),
("Phi-3-mini", TemplateFormat::Phi, "detect_phi3"),
("alpaca-7b", TemplateFormat::Alpaca, "detect_alpaca"),
(
"unknown-random-model",
TemplateFormat::Raw,
"detect_fallback_raw",
),
];
for (model_name, expected_format, feature) in tests {
let detected = detect_format_from_name(model_name);
gui.click(feature);
if detected == expected_format {
gui.visit("detected");
} else {
gui.visit("fallback");
}
assert_eq!(
detected, expected_format,
"Format detection for '{}': expected {:?}, got {:?}",
model_name, expected_format, detected
);
}
gui.visit("fallback");
println!("\nAuto-Detection Coverage: {:.1}%", gui.percent());
assert!(gui.meets(80.0), "Auto-detection coverage >= 80%");
}
#[test]
fn test_chat_template_edge_cases() {
let mut gui = gui_coverage! {
buttons: [
"empty_conversation", "single_message",
"unicode_cjk", "unicode_emoji", "unicode_rtl",
"special_token_in_content", "long_conversation",
"whitespace_only", "newline_content", "nested_quotes"
],
screens: ["success", "handled_error"]
};
let template = ChatMLTemplate::new();
{
let messages: Vec<ChatMessage> = vec![];
let result = template.format_conversation(&messages);
gui.click("empty_conversation");
gui.visit(edge_screen(result.is_ok()));
assert!(result.is_ok());
}
{
let messages = vec![ChatMessage::user("Single")];
let result = template.format_conversation(&messages);
gui.click("single_message");
gui.visit(edge_screen(result.is_ok()));
assert!(result.is_ok());
}
{
let messages = vec![ChatMessage::user("Hello")];
let result = template.format_conversation(&messages);
gui.click("unicode_cjk");
gui.visit(edge_screen(result.is_ok()));
assert!(result.is_ok());
assert!(result.as_ref().unwrap().contains("Hello"));
}
{
let messages = vec![ChatMessage::user("Hello! How are you?")];
let result = template.format_conversation(&messages);
gui.click("unicode_emoji");
gui.visit(edge_screen(result.is_ok()));
assert!(result.is_ok());
}
{
let messages = vec![ChatMessage::user("Hello World")];
let result = template.format_conversation(&messages);
gui.click("unicode_rtl");
gui.visit(edge_screen(result.is_ok()));
assert!(result.is_ok());
}
{
let messages = vec![ChatMessage::user("Test <|im_end|> injection")];
let result = template.format_conversation(&messages);
gui.click("special_token_in_content");
gui.visit(edge_screen(result.is_ok()));
assert!(result.is_ok());
}
{
let mut messages = Vec::new();
for i in 0..50 {
messages.push(ChatMessage::user(format!("Question {}", i)));
messages.push(ChatMessage::assistant(format!("Answer {}", i)));
}
let result = template.format_conversation(&messages);
gui.click("long_conversation");
gui.visit(edge_screen(result.is_ok()));
assert!(result.is_ok());
}
{
let messages = vec![ChatMessage::user(" \t\t ")];
let result = template.format_conversation(&messages);
gui.click("whitespace_only");
gui.visit(edge_screen(result.is_ok()));
assert!(result.is_ok());
}
{
let messages = vec![ChatMessage::user("Line 1\nLine 2\nLine 3")];
let result = template.format_conversation(&messages);
gui.click("newline_content");
gui.visit(edge_screen(result.is_ok()));
assert!(result.is_ok());
assert!(result.as_ref().unwrap().contains("Line 1\nLine 2"));
}
{
let messages = vec![ChatMessage::user(r#"He said "Hello 'world'" today"#)];
let result = template.format_conversation(&messages);
gui.click("nested_quotes");
gui.visit(edge_screen(result.is_ok()));
assert!(result.is_ok());
}
{
let invalid_template = HuggingFaceTemplate::new(
"{% invalid".to_string(),
SpecialTokens::default(),
TemplateFormat::Custom,
);
gui.visit("handled_error");
assert!(invalid_template.is_err());
}
println!("\nEdge Case Coverage: {:.1}%", gui.percent());
assert!(gui.meets(80.0), "Edge case coverage >= 80%");
}