1#pragma once
2
3#include <string>
4#include <vector>
5#include <cstdint>
6
7enum llm_chat_template {
8 LLM_CHAT_TEMPLATE_CHATML,
9 LLM_CHAT_TEMPLATE_LLAMA_2,
10 LLM_CHAT_TEMPLATE_LLAMA_2_SYS,
11 LLM_CHAT_TEMPLATE_LLAMA_2_SYS_BOS,
12 LLM_CHAT_TEMPLATE_LLAMA_2_SYS_STRIP,
13 LLM_CHAT_TEMPLATE_MISTRAL_V1,
14 LLM_CHAT_TEMPLATE_MISTRAL_V3,
15 LLM_CHAT_TEMPLATE_MISTRAL_V3_TEKKEN,
16 LLM_CHAT_TEMPLATE_MISTRAL_V7,
17 LLM_CHAT_TEMPLATE_MISTRAL_V7_TEKKEN,
18 LLM_CHAT_TEMPLATE_PHI_3,
19 LLM_CHAT_TEMPLATE_PHI_4,
20 LLM_CHAT_TEMPLATE_FALCON_3,
21 LLM_CHAT_TEMPLATE_ZEPHYR,
22 LLM_CHAT_TEMPLATE_MONARCH,
23 LLM_CHAT_TEMPLATE_GEMMA,
24 LLM_CHAT_TEMPLATE_ORION,
25 LLM_CHAT_TEMPLATE_OPENCHAT,
26 LLM_CHAT_TEMPLATE_VICUNA,
27 LLM_CHAT_TEMPLATE_VICUNA_ORCA,
28 LLM_CHAT_TEMPLATE_DEEPSEEK,
29 LLM_CHAT_TEMPLATE_DEEPSEEK_2,
30 LLM_CHAT_TEMPLATE_DEEPSEEK_3,
31 LLM_CHAT_TEMPLATE_COMMAND_R,
32 LLM_CHAT_TEMPLATE_LLAMA_3,
33 LLM_CHAT_TEMPLATE_CHATGLM_3,
34 LLM_CHAT_TEMPLATE_CHATGLM_4,
35 LLM_CHAT_TEMPLATE_GLMEDGE,
36 LLM_CHAT_TEMPLATE_MINICPM,
37 LLM_CHAT_TEMPLATE_EXAONE_3,
38 LLM_CHAT_TEMPLATE_EXAONE_4,
39 LLM_CHAT_TEMPLATE_RWKV_WORLD,
40 LLM_CHAT_TEMPLATE_GRANITE,
41 LLM_CHAT_TEMPLATE_GIGACHAT,
42 LLM_CHAT_TEMPLATE_MEGREZ,
43 LLM_CHAT_TEMPLATE_YANDEX,
44 LLM_CHAT_TEMPLATE_BAILING,
45 LLM_CHAT_TEMPLATE_BAILING_THINK,
46 LLM_CHAT_TEMPLATE_BAILING2,
47 LLM_CHAT_TEMPLATE_LLAMA4,
48 LLM_CHAT_TEMPLATE_SMOLVLM,
49 LLM_CHAT_TEMPLATE_DOTS1,
50 LLM_CHAT_TEMPLATE_HUNYUAN_MOE,
51 LLM_CHAT_TEMPLATE_OPENAI_MOE,
52 LLM_CHAT_TEMPLATE_HUNYUAN_DENSE,
53 LLM_CHAT_TEMPLATE_KIMI_K2,
54 LLM_CHAT_TEMPLATE_SEED_OSS,
55 LLM_CHAT_TEMPLATE_GROK_2,
56 LLM_CHAT_TEMPLATE_PANGU_EMBED,
57 LLM_CHAT_TEMPLATE_UNKNOWN,
58};
59
60struct llama_chat_message;
61
62llm_chat_template llm_chat_template_from_str(const std::string & name);
63
64llm_chat_template llm_chat_detect_template(const std::string & tmpl);
65
66int32_t llm_chat_apply_template(
67 llm_chat_template tmpl,
68 const std::vector<const llama_chat_message *> & chat,
69 std::string & dest, bool add_ass);
70