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_EXAONE_MOE,
40    LLM_CHAT_TEMPLATE_RWKV_WORLD,
41    LLM_CHAT_TEMPLATE_GRANITE,
42    LLM_CHAT_TEMPLATE_GIGACHAT,
43    LLM_CHAT_TEMPLATE_MEGREZ,
44    LLM_CHAT_TEMPLATE_YANDEX,
45    LLM_CHAT_TEMPLATE_BAILING,
46    LLM_CHAT_TEMPLATE_BAILING_THINK,
47    LLM_CHAT_TEMPLATE_BAILING2,
48    LLM_CHAT_TEMPLATE_LLAMA4,
49    LLM_CHAT_TEMPLATE_SMOLVLM,
50    LLM_CHAT_TEMPLATE_DOTS1,
51    LLM_CHAT_TEMPLATE_HUNYUAN_MOE,
52    LLM_CHAT_TEMPLATE_OPENAI_MOE,
53    LLM_CHAT_TEMPLATE_HUNYUAN_DENSE,
54    LLM_CHAT_TEMPLATE_KIMI_K2,
55    LLM_CHAT_TEMPLATE_SEED_OSS,
56    LLM_CHAT_TEMPLATE_GROK_2,
57    LLM_CHAT_TEMPLATE_PANGU_EMBED,
58    LLM_CHAT_TEMPLATE_SOLAR_OPEN,
59    LLM_CHAT_TEMPLATE_UNKNOWN,
60};
61
62struct llama_chat_message;
63
64llm_chat_template llm_chat_template_from_str(const std::string & name);
65
66llm_chat_template llm_chat_detect_template(const std::string & tmpl);
67
68int32_t llm_chat_apply_template(
69    llm_chat_template tmpl,
70    const std::vector<const llama_chat_message *> & chat,
71    std::string & dest, bool add_ass);