File size: 6,714 Bytes
273e128
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
126
127
128
129
130
131
132
133
134
135
{%- if tools %}
    {{- "<|im_start|>system\n" }}
    {%- if messages[0].role == 'system' and messages[0].content %}
        {{- messages[0].content + '\n\n' }}
    {%- endif %}
    {{- "\n# Tools\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within <tools></tools> XML tags:\n<tools>" }}
    {%- for tool in tools %}
        {{- "\n" }}
        {{- tool | tojson }}
    {%- endfor %}
    {{- "\n</tools>\n\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\n<tool_call>\n{\"name\": <function-name>, \"arguments\": <args-json-object>}\n</tool_call><|im_end|>\n" }}
{%- else %}
    {%- if messages[0].role == 'system' %}
        {%- if messages[0].get('tools') %}
            {%- if messages[0].content %}
                {{- '<|im_start|>system\n' + messages[0].content + '\n\n' }}
            {%- else %}
                {{- '<|im_start|>system\n\n' }}
            {%- endif %}
            {{- "# Tools\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within <tools></tools> XML tags:\n<tools>" }}
            {%- for tool in messages[0]['tools'] %}
                {{- "\n" }}
                {{- tool | tojson }}
            {%- endfor %}
            {{- "\n</tools>\n\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\n<tool_call>\n{\"name\": <function-name>, \"arguments\": <args-json-object>}\n</tool_call><|im_end|>\n" }}
        {%- else %}
            {{- '<|im_start|>system\n' + messages[0].content + '<|im_end|>\n' }}
        {%- endif %}
    {%- endif %}
{%- endif %}
{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}
{%- for message in messages[::-1] %}
    {%- set index = (messages|length - 1) - loop.index0 %}
    {%- if ns.multi_step_tool and message.role == "user" and message.content is string and not(message.content.startswith('<tool_response>') and message.content.endswith('</tool_response>')) %}
        {%- set ns.multi_step_tool = false %}
        {%- set ns.last_query_index = index %}
    {%- endif %}
{%- endfor %}
{%- for message in messages %}
    {%- if message.content is string %}
        {%- set content = message.content %}
    {%- else %}
        {%- set content = '' %}
    {%- endif %}
    {%- if (message.role == "user") or (message.role == "system" and not loop.first) %}
        {{- '<|im_start|>' + message.role + '\n' + content + '<|im_end|>' + '\n' }}
    {%- elif message.role == "assistant" %}
        {%- set thinking_content = '' %}
        {%- set think_tag = '' %}
        {%- if message.think is defined and message.think is string %}
            {%- set thinking_content = message.think %}
            {%- set think_tag = 'think' %}
        {%- elif message.think_fast is defined and message.think_fast is string %}
            {%- set thinking_content = message.think_fast %}
            {%- set think_tag = 'think_fast' %}
        {%- elif message.think_faster is defined and message.think_faster is string %}
            {%- set thinking_content = message.think_faster %}
            {%- set think_tag = 'think_faster' %}
        {%- else %}
            {%- if '</think>' in content %}
                {%- set thinking_content = content.split('</think>')[0].rstrip('\n').split('<think>')[-1].lstrip('\n') %}
                {%- set content = content.split('</think>')[-1].lstrip('\n') %}
                {%- set think_tag = 'think' %}
            {%- elif '</think_fast>' in content %}
                {%- set thinking_content = content.split('</think_fast>')[0].rstrip('\n').split('<think_fast>')[-1].lstrip('\n') %}
                {%- set content = content.split('</think_fast>')[-1].lstrip('\n') %}
                {%- set think_tag = 'think_fast' %}
            {%- elif '</think_faster>' in content %}
                {%- set thinking_content = content.split('</think_faster>')[0].rstrip('\n').split('<think_faster>')[-1].lstrip('\n') %}
                {%- set content = content.split('</think_faster>')[-1].lstrip('\n') %}
                {%- set think_tag = 'think_faster' %}
            {%- else %}
                {%- set thinking_content = '' %}
                {%- set think_tag = 'think_faster' %}
            {%- endif %}
        {%- endif %}
        {{- '<|im_start|>' + message.role }}
        {% generation %}
        {%- if loop.index0 > ns.last_query_index %}
            {%- if loop.last and think_tag %}
                {%- if thinking_content %}
                    {{- '<' + think_tag + '>\n' + thinking_content + '\n</' + think_tag + '>\n' + content.lstrip('\n') }}
                {%- else %}
                    {{- '<' + think_tag + '>\n</' + think_tag + '>\n' + content.lstrip('\n') }}
                {%- endif %}
            {%- else %}
                {{- content }}
            {%- endif %}
        {%- else %}
            {{- content }}
        {%- endif %}
        {%- if message.tool_calls %}
            {%- for tool_call in message.tool_calls %}
                {%- if (loop.first and content) or (not loop.first) %}
                    {{- '\n' }}
                {%- endif %}
                {%- if tool_call.function %}
                    {%- set tool_call = tool_call.function %}
                {%- endif %}
                {{- '<tool_call>\n{"name": "' }}
                {{- tool_call.name }}
                {{- '", "arguments": ' }}
                {%- if tool_call.arguments is string %}
                    {{- tool_call.arguments }}
                {%- else %}
                    {{- tool_call.arguments | tojson }}
                {%- endif %}
                {{- '}\n</tool_call>' }}
            {%- endfor %}
        {%- endif %}
        {{- '<|im_end|>' }}
        {% endgeneration %}
    {%- elif message.role == "tool" %}
        {%- if loop.first or (messages[loop.index0 - 1].role != "tool") %}
            {{- '<|im_start|>tool\n' }}
        {%- endif %}
        {{- content }}
        {%- if loop.last or (messages[loop.index0 + 1].role != "tool") %}
            {{- '<|im_end|>\n' }}
        {%- endif %}
    {%- endif %}
{%- endfor %}
{%- if add_generation_prompt %}
    {%- set effort = reasoning_effort | default('medium') %}
    {%- if effort == 'high' %}
        {{- '<|im_start|>assistant\n<think>\n' }}
    {%- elif effort == 'medium' %}
        {{- '<|im_start|>assistant\n<think_fast>\n' }}
    {%- elif effort == 'low' %}
        {{- '<|im_start|>assistant\n<think_faster>\n' }}
    {%- else %}
        {{- '<|im_start|>assistant\n<think_fast>\n' }}
    {%- endif %}
{%- endif %}