File size: 2,375 Bytes
2765b5c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
{{ bos_token }}{%- macro strip_thinking(text) -%}
    {%- set ns = namespace(result='') -%}
    {%- for part in text.split('<channel|>') -%}
        {%- if '<|channel>' in part -%}
            {%- set ns.result = ns.result + part.split('<|channel>')[0] -%}
        {%- else -%}
            {%- set ns.result = ns.result + part -%}
        {%- endif -%}
    {%- endfor -%}
    {{- ns.result | trim -}}
{%- endmacro -%}
{%- set thinking = enable_thinking is defined and enable_thinking -%}
{%- set loop_messages = messages -%}
{%- if messages[0]['role'] in ['system', 'developer'] or thinking -%}
    {{ '<|turn>system
' }}
    {%- if thinking -%}
        {{ '<|think|>
' }}
    {%- endif -%}
    {%- if messages[0]['role'] in ['system', 'developer'] -%}
        {{ messages[0]['content'] | trim }}
        {%- set loop_messages = messages[1:] -%}
    {%- endif -%}
    {{ '<turn|>
' }}
{%- endif -%}
{%- for message in loop_messages -%}
    {%- if (message['role'] == 'user') != (loop.index0 % 2 == 0) -%}
        {{ raise_exception("Conversation roles must alternate user/assistant/user/assistant/...") }}
    {%- endif -%}
    {%- if (message['role'] == 'assistant') -%}
        {%- set role = "model" -%}
    {%- else -%}
        {%- set role = message['role'] -%}
    {%- endif -%}
    {{ '<|turn>' + role + '
' }}
    {%- if message['content'] is string -%}
        {%- if role == "model" -%}
            {{ strip_thinking(message['content']) }}
        {%- else -%}
            {{ message['content'] | trim }}
        {%- endif -%}
    {%- elif message['content'] is iterable -%}
        {%- for item in message['content'] -%}
            {%- if item['type'] == 'audio' -%}
                {{ '<|audio|>' }}
            {%- elif item['type'] == 'image' -%}
                {{ '<|image|>' }}
            {%- elif item['type'] == 'video' -%}
                {{ '<|video|>' }}
            {%- elif item['type'] == 'text' -%}
                {%- if role == "model" -%}
                    {{ strip_thinking(item['text']) }}
                {%- else -%}
                    {{ item['text'] | trim }}
                {%- endif -%}
            {%- endif -%}
        {%- endfor -%}
    {%- else -%}
        {{ raise_exception("Invalid content type") }}
    {%- endif -%}
    {{ '<turn|>
' }}
{%- endfor -%}
{%- if add_generation_prompt -%}
    {{'<|turn>model
'}}
{%- endif -%}