File size: 5,472 Bytes
493df70
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
{%- set ns = namespace(enable_thinking=true) -%}
{%- for message in messages -%} 
    {%- if message['content'] is string -%}
        {%- if message['role'] == 'user' or message['role'] == 'system' -%}
            {%- if '/think' in message['content'] -%}
                {%- set ns.enable_thinking = true -%}
            {%- elif '/no_think' in message['content'] -%}
                {%- set ns.enable_thinking = false -%}
            {%- endif -%} 
        {%- endif -%}
    {%- else -%}    
        {%- for content in message['content'] -%}
            {%- if content['type'] == 'text' -%}
                {%- if message['role'] == 'user' or message['role'] == 'system' -%}
                    {%- if '/think' in content['text'] -%}
                        {%- set ns.enable_thinking = true -%}
                    {%- elif '/no_think' in content['text'] -%}
                        {%- set ns.enable_thinking = false -%}
                    {%- endif -%}
                {%- endif -%}
            {%- endif -%}
        {%- endfor -%}
    {%- endif -%}
{%- endfor -%}
{%- for message in messages -%}
    {%- if loop.first -%}
        {%- if message['role'] != 'system' -%}
            {{- '<SPECIAL_10>System\n\n' }}
        {%- endif -%}
    {%- endif -%}

    {%- if message['role'] == 'system' -%}
        {{- '<SPECIAL_10>System\n' }}
        {%- if message['content'] is string -%}
            {{- message['content'].replace('/think', '').replace('/no_think', '').strip() }}
        {%- else -%}
            {%- for content in message['content'] -%}
                {%- if content['type'] == 'image' -%}
                    {{- '' }}
                {%- elif content['type'] == 'text' -%}
                    {{- content['text'].replace('/think', '').replace('/no_think', '').strip() }}
                {%- endif -%}
            {%- endfor -%}
        {%- endif -%}

        {%- if tools -%}
            {%- if message['content'].replace('/think', '').replace('/no_think', '').strip() != '' -%}
                {{- '\n\n' }}
            {%- endif -%}

            {{- 'You can use the following tools to assist the user if required:\n<AVAILABLE_TOOLS>[' }}
            {%- for tool in tools -%}
                {{- (tool.function if tool.function is defined else tool) | tojson -}}
                {{- ', ' if not loop.last else '' -}}
            {%- endfor -%}
            {{- ']</AVAILABLE_TOOLS>\n\nIf you decide to call any tool(s), use the following format:\n<TOOLCALL>[{{\"name\": \"tool_name1\", \"arguments\": "\tool_args1\"}}, {{\"name\": \"tool_name2\", \"arguments\": \"tool_args2\"}}]</TOOLCALL>\n\nThe user will execute tool-calls and return responses from tool(s) in this format:\n<TOOL_RESPONSE>[{{\"tool_response1\"}}, {{\"tool_response2\"}}]</TOOL_RESPONSE>\n\nBased on the tool responses, you can call additional tools if needed, correct tool calls if any errors are found, or just respond to the user.' -}}
        {%- endif -%}
        {{- '\n' -}}

    {%- elif message['role'] == 'user' -%}
        {{- '<SPECIAL_11>User\n' }}
        {%- if message['content'] is string -%}
            {{- message['content'].replace('/think', '').replace('/no_think', '').strip() }}
        {%- else -%}
            {%- for content in message['content'] -%}
                {%- if content['type'] == 'image' -%}
                    {{- '' }}
                {%- elif content['type'] == 'text' -%}
                    {{- content['text'].replace('/think', '').replace('/no_think', '').strip() }}
                {%- endif -%}
            {%- endfor -%}
        {%- endif -%}
        {{- '\n' -}}

    {%- elif message['role'] == 'tool' -%}
        {%- if loop.first or (messages[loop.index0 - 1].role != 'tool') -%}
            {{- '<SPECIAL_11>User\n<TOOL_RESPONSE>[' }}
        {%- endif -%}

        {{- message.content }}
        {{- ', ' if not loop.last and (messages[loop.index0 + 1].role == 'tool') else '' -}}

        {%- if loop.last or (messages[loop.index0 + 1].role != 'tool') -%}
            {{- ']</TOOL_RESPONSE>\n' -}}
        {%- endif -%}

    {%- elif message['role'] == 'assistant' -%}
        {%- if '</think>' in content -%}
            {%- set content = content.split('</think>')[1].strip() -%}
        {%- endif -%}

        {{- '<SPECIAL_11>Assistant\n' + content.strip() }}

        {%- if message.tool_calls -%}
            {%- if content.strip() != '' -%}
                {{- '\n\n' -}}
            {%- endif -%}

            {{- '<TOOLCALL>[' -}}
            {%- for call in message.tool_calls -%}
                {%- set fn = call.function if call.function is defined else call -%}
                {{- '{"name": "' + fn.name + '", "arguments": ' -}}
                {%- if fn.arguments is string -%}
                    {{- fn.arguments -}}
                {%- else -%}
                    {{- fn.arguments | tojson -}}
                {%- endif -%}
                {{- '}' + (', ' if not loop.last else '') -}}
            {%- endfor -%}
            {{- ']</TOOLCALL>' -}}
        {%- endif -%}
        {{- '\n<SPECIAL_12>\n' -}}
    {%- endif -%}
{%- endfor -%}
{%- if not add_generation_prompt is defined -%}
  {%- set add_generation_prompt = false -%}
{%- endif -%}
{%- if add_generation_prompt -%}
    {{- '<SPECIAL_11>Assistant\n' }}
    {%- if ns.enable_thinking is defined and ns.enable_thinking is false -%}
        {{- '<think></think>' }}
    {%- else -%}
        {{- '<think>\n' }}
    {%- endif -%}
{%- endif -%}