tokenizer/chat_template.jinja
1.5 KB · 48 lines · plaintext Raw
1 {{ bos_token }}
2 {%- if messages[0]['role'] == 'system' -%}
3 {%- if messages[0]['content'] is string -%}
4 {%- set first_user_prefix = messages[0]['content'] + '
5
6 ' -%}
7 {%- else -%}
8 {%- set first_user_prefix = messages[0]['content'][0]['text'] + '
9
10 ' -%}
11 {%- endif -%}
12 {%- set loop_messages = messages[1:] -%}
13 {%- else -%}
14 {%- set first_user_prefix = "" -%}
15 {%- set loop_messages = messages -%}
16 {%- endif -%}
17 {%- for message in loop_messages -%}
18 {%- if (message['role'] == 'user') != (loop.index0 % 2 == 0) -%}
19 {{ raise_exception("Conversation roles must alternate user/assistant/user/assistant/...") }}
20 {%- endif -%}
21 {%- if (message['role'] == 'assistant') -%}
22 {%- set role = "model" -%}
23 {%- else -%}
24 {%- set role = message['role'] -%}
25 {%- endif -%}
26 {{ '<start_of_turn>' + role + '
27 ' + (first_user_prefix if loop.first else "") }}
28 {%- if message['content'] is string -%}
29 {{ message['content'] | trim }}
30 {%- elif message['content'] is iterable -%}
31 {%- for item in message['content'] -%}
32 {%- if item['type'] == 'image' -%}
33 {{ '<start_of_image>' }}
34 {%- elif item['type'] == 'text' -%}
35 {{ item['text'] | trim }}
36 {%- endif -%}
37 {%- endfor -%}
38 {%- else -%}
39 {{ raise_exception("Invalid content type") }}
40 {%- endif -%}
41 {{ '<end_of_turn>
42 ' }}
43 {%- endfor -%}
44 {%- if add_generation_prompt -%}
45 {{'<start_of_turn>model
46 '}}
47 {%- endif -%}
48