File size: 2,436 Bytes
ad88793
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
{%- set add_generation_prompt = add_generation_prompt | default(false) -%}

{%- set thinking = thinking | default(false) -%}

{%- set bos_token = bos_token | default('', true) -%}

{%- set tools = tools | default([], true) -%}

{%- set ns = namespace(system_prompt='') -%}

{%- for message in messages -%}

    {%- if message.role == 'system' -%}

        {%- set ns.system_prompt = message.content | trim -%}

    {%- endif -%}

{%- endfor -%}

{{- bos_token -}}

{%- if ns.system_prompt or tools | length > 0 -%}

{{ 'System: ' }}{{ ns.system_prompt }}

{%- if tools | length > 0 -%}

{%- if ns.system_prompt %}{{ '\n' }}{%- endif -%}

{{ 'Tools:\n' -}}

{{ tools | tojson }}

{{ '\nWhen using a tool, return only a compact JSON function call in a ```json block, like {"name":"calculator","arguments":{"expression":"2+2"}}. The `name` field must be top-level, never inside `arguments`. Do not copy the tool schema into arguments. Otherwise answer normally.' }}

{%- endif -%}

{{ '\n\n' }}

{%- endif -%}

{%- for message in messages -%}

{%- if message.role == 'user' -%}

{{ 'User: ' ~ (message.content | trim) ~ '\n\n' }}

{%- elif message.role == 'assistant' -%}

{%- generation -%}

{%- set content = message.content | default('', true) | trim -%}

{{ 'Assistant:' }}

{%- if message.tool_calls is defined and message.tool_calls | length > 0 -%}

{%- if content %}{{ ' ' ~ content ~ '\n' }}{%- endif -%}

{%- for tool_call in message.tool_calls -%}

    {%- if tool_call.function is defined -%}

        {%- set name = tool_call.function.name | default('') -%}

        {%- set args = tool_call.function.arguments | default({}, true) -%}

    {%- else -%}

        {%- set name = tool_call.name | default('') -%}

        {%- set args = tool_call.arguments | default({}, true) -%}

    {%- endif -%}

{{ ' ```json\n' -}}

{{ '{"name": ' }}{{ name | tojson }}{{ ', "arguments": ' }}{% if args is string %}{{ args }}{% else %}{{ args | tojson }}{% endif %}{{ '}\n' -}}

{{ '```' }}{{ '\n' if not loop.last else '' }}

{%- endfor -%}

{%- elif content -%}

{{ ' ' ~ content }}

{%- endif -%}

{{ '\n\n' }}

{%- endgeneration -%}

{%- elif message.role == 'tool' -%}

{{ 'User: Function output:\n' ~ (message.content | trim) ~ '\n\n' }}

{%- endif -%}

{%- endfor -%}

{%- if add_generation_prompt -%}

{%- if thinking -%}

{{ 'Assistant: <think' }}

{%- else -%}

{{ 'Assistant: <think></think>\n' }}

{%- endif -%}

{%- endif -%}