@@ -1612,6 +1612,7 @@ enum llm_chat_template {
1612
1612
LLM_CHAT_TEMPLATE_MISTRAL_V3_TEKKEN,
1613
1613
LLM_CHAT_TEMPLATE_MISTRAL_V7,
1614
1614
LLM_CHAT_TEMPLATE_PHI_3,
1615
+ LLM_CHAT_TEMPLATE_FALCON_3,
1615
1616
LLM_CHAT_TEMPLATE_ZEPHYR,
1616
1617
LLM_CHAT_TEMPLATE_MONARCH,
1617
1618
LLM_CHAT_TEMPLATE_GEMMA,
@@ -1644,6 +1645,7 @@ static const std::map<std::string, llm_chat_template> LLM_CHAT_TEMPLATES = {
1644
1645
{ "mistral-v3-tekken", LLM_CHAT_TEMPLATE_MISTRAL_V3_TEKKEN },
1645
1646
{ "mistral-v7", LLM_CHAT_TEMPLATE_MISTRAL_V7 },
1646
1647
{ "phi3", LLM_CHAT_TEMPLATE_PHI_3 },
1648
+ { "falcon3", LLM_CHAT_TEMPLATE_FALCON_3 },
1647
1649
{ "zephyr", LLM_CHAT_TEMPLATE_ZEPHYR },
1648
1650
{ "monarch", LLM_CHAT_TEMPLATE_MONARCH },
1649
1651
{ "gemma", LLM_CHAT_TEMPLATE_GEMMA },
@@ -6473,6 +6475,11 @@ static void llm_load_vocab(
6473
6475
} else if (
6474
6476
tokenizer_pre == "falcon") {
6475
6477
vocab.type_pre = LLAMA_VOCAB_PRE_TYPE_FALCON;
6478
+ } else if (
6479
+ tokenizer_pre == "falcon3") {
6480
+ vocab.type_pre = LLAMA_VOCAB_PRE_TYPE_LLAMA3;
6481
+ vocab.tokenizer_ignore_merges = true;
6482
+ vocab.tokenizer_add_bos = true;
6476
6483
} else if (
6477
6484
tokenizer_pre == "mpt") {
6478
6485
vocab.type_pre = LLAMA_VOCAB_PRE_TYPE_MPT;
@@ -22219,6 +22226,8 @@ static llm_chat_template llama_chat_detect_template(const std::string & tmpl) {
22219
22226
}
22220
22227
} else if (tmpl_contains("<|assistant|>") && tmpl_contains("<|end|>")) {
22221
22228
return LLM_CHAT_TEMPLATE_PHI_3;
22229
+ } else if (tmpl_contains("<|assistant|>") && tmpl_contains("<|user|>")) {
22230
+ return LLM_CHAT_TEMPLATE_FALCON_3;
22222
22231
} else if (tmpl_contains("<|user|>") && tmpl_contains("<|endoftext|>")) {
22223
22232
return LLM_CHAT_TEMPLATE_ZEPHYR;
22224
22233
} else if (tmpl_contains("bos_token + message['role']")) {
@@ -22371,6 +22380,15 @@ static int32_t llama_chat_apply_template_internal(
22371
22380
if (add_ass) {
22372
22381
ss << "<|assistant|>\n";
22373
22382
}
22383
+ } else if (tmpl == LLM_CHAT_TEMPLATE_FALCON_3) {
22384
+ // Falcon 3
22385
+ for (auto message : chat) {
22386
+ std::string role(message->role);
22387
+ ss << "<|" << role << "|>\n" << message->content << "\n";
22388
+ }
22389
+ if (add_ass) {
22390
+ ss << "<|assistant|>\n";
22391
+ }
22374
22392
} else if (tmpl == LLM_CHAT_TEMPLATE_ZEPHYR) {
22375
22393
// zephyr template
22376
22394
for (auto message : chat) {
0 commit comments