chat_template.jinja
3.0 KB · 74 lines · plaintext Raw
1 {{- bos_token }}
2 {#- This block extracts the system message, so we can slot it into the right place. #}
3 {%- if messages[0]['role'] == 'system' %}
4 {%- if messages[0]['content'] is string %}
5 {%- set system_message = messages[0]['content']|trim %}
6 {%- elif messages[0]['content'] is iterable and messages[0]['content'][0]['type'] == 'text' %}
7 {%- set system_message = messages[0]['content'][0]['text']|trim %}
8 {%- else %}
9 {{- raise_exception("System message content must be a string or contain text type!") }}
10 {%- endif %}
11 {%- set messages = messages[1:] %}
12 {%- else %}
13 {{- raise_exception("A system message is required but not provided!") }}
14 {%- endif %}
15
16 {#- System message #}
17 {{- "<|start_header_id|>system<|end_header_id|>\n\n" }}
18 {{- system_message }}
19
20 {#- Check for scene message and handle it specially #}
21 {%- if messages and messages[0]['role'] == 'scene' %}
22 {{- "\n\n<|scene_desc_start|>\n" }}
23 {%- if messages[0]['content'] is string %}
24 {{- messages[0]['content'] | trim }}
25 {%- elif messages[0]['content'] is iterable %}
26 {%- for content_item in messages[0]['content'] %}
27 {%- if content_item['type'] == 'text' %}
28 {%- set text_content = content_item['text'] | trim %}
29 {{- text_content }}
30 {%- if loop.first and not loop.last %}
31 {{- "\n\n" }}
32 {%- endif %}
33 {%- if not loop.first and not loop.last and messages[0]['content'][loop.index]['type'] != 'audio' %}
34 {{- "\n" }}
35 {%- endif %}
36 {%- elif content_item['type'] == 'audio' %}
37 {{- ' <|audio_out_bos|><|AUDIO_OUT|><|audio_eos|>' }}
38 {%- if not loop.last %}
39 {{- "\n" }}
40 {%- endif %}
41 {%- endif %}
42 {%- endfor %}
43 {%- endif %}
44 {{- "\n<|scene_desc_end|>" }}
45 {%- set messages = messages[1:] %}
46 {%- endif %}
47
48 {{- "<|eot_id|>" }}
49
50 {#- Loop through all messages #}
51 {%- for message in messages %}
52 {{- '<|start_header_id|>' + message['role'] + '<|end_header_id|>\n\n' }}
53 {%- if message['role'] == 'assistant' %}
54 {%- if message['content'] is not iterable or message['content'][0]['type'] != 'audio' %}
55 {{- raise_exception("Assistant messages must contain audio content only!") }}
56 {%- endif %}
57 {{- '<|audio_out_bos|><|AUDIO_OUT|><|audio_eos|>' }}
58 {%- else %}
59 {%- if message['content'] is string %}
60 {{- message['content'] | trim }}
61 {%- elif message['content'] is iterable %}
62 {%- for content_item in message['content'] %}
63 {%- if content_item['type'] == 'text' %}
64 {{- content_item['text'] | trim }}
65 {%- endif %}
66 {%- endfor %}
67 {%- endif %}
68 {%- endif %}
69 {{- '<|eot_id|>' }}
70 {%- endfor %}
71
72 {%- if add_generation_prompt %}
73 {{- '<|start_header_id|>assistant<|end_header_id|>\n\n<|audio_out_bos|>' }}
74 {%- endif %}