File size: 6,294 Bytes
0992a1e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
{%- set effort_map = {"none": 0.0, "minimal": 0.1, "low": 0.2, "medium": 0.7, "high": 0.9, "max": 0.99} -%}
{%- set role_token = {"user": "<|message_user|>", "assistant": "<|message_model|>", "system": "<|message_system|>", "tool": "<|message_tool|>"} -%}

{%- macro emit_thinking_effort() -%}
    {%- set eff = reasoning_effort if reasoning_effort is defined and reasoning_effort is not none else 0.9 -%}
    {%- if eff is string -%}
        {%- set key = eff | trim -%}
        {%- if key not in effort_map -%}
            {{- raise_exception("Unknown reasoning_effort: " ~ eff) -}}
        {%- endif -%}
        {%- set num = effort_map[key] -%}
    {%- else -%}
        {%- set num = eff | float -%}
    {%- endif -%}
    {%- if num < 0.0 or num > 0.99 -%}
        {{- raise_exception("reasoning_effort must be in [0.0, 0.99]") -}}
    {%- endif -%}
    {{- "<|message_system|><|content_text|>Thinking effort level: " -}}
    {%- if num == 0.0 -%}0{%- else -%}{{ num }}{%- endif -%}
    {{- "<|end_message|>" -}}
{%- endmacro -%}

{%- if tools -%}
    {%- set tool_state = namespace(specs=[]) -%}
    {%- for tool in tools -%}
        {%- set fn = tool.function if tool.function is defined else tool -%}
        {%- set spec = {
            "description": (fn.description if fn.description is defined and fn.description else ""),
            "name": fn.name,
            "parameters": (fn.parameters if fn.parameters is defined and fn.parameters else {}),
            "type": (tool.type if tool.type is defined and tool.type else "function"),
        } -%}
        {%- set tool_state.specs = tool_state.specs + [spec] -%}
    {%- endfor -%}
    {{- "<|message_system|>tool_declare<|content_xml|>" -}}
    {{- tool_state.specs | tojson(sort_keys=true, separators=(",", ":")) -}}
    {{- "<|end_message|>" -}}
{%- endif -%}

{%- set state = namespace(effort_emitted=false) -%}
{%- for message in messages -%}
    {%- if message.role not in role_token -%}
        {{- raise_exception("Unknown message role: " ~ message.role) -}}
    {%- endif -%}
    {%- if not state.effort_emitted and message.role != "system" -%}
        {{- emit_thinking_effort() -}}
        {%- set state.effort_emitted = true -%}
    {%- endif -%}

    {%- set rtok = role_token[message.role] -%}

    {%- if message.role == "tool" -%}
        {%- set tool_name_state = namespace(name="") -%}
        {%- if message.name is defined and message.name -%}
            {%- set tool_name_state.name = message.name -%}
        {%- elif message.tool_call_id is defined and message.tool_call_id -%}
            {%- for prev in messages -%}
                {%- if prev.role == "assistant" and prev.tool_calls -%}
                    {%- for tc in prev.tool_calls -%}
                        {%- if tc.id is defined and tc.id == message.tool_call_id and tc.function.name is defined -%}
                            {%- set tool_name_state.name = tc.function.name -%}
                        {%- endif -%}
                    {%- endfor -%}
                {%- endif -%}
            {%- endfor -%}
        {%- endif -%}
        {{- rtok -}}
        {%- if tool_name_state.name -%}{{- tool_name_state.name -}}{%- endif -%}
        {{- "<|content_text|>" -}}
        {%- if message.content is string -%}{{- message.content -}}{%- endif -%}
        {{- "<|end_message|>" -}}

    {%- else -%}
        {%- if message.role == "assistant" and message.reasoning_content is defined and message.reasoning_content -%}
            {{- "<|message_model|><|content_thinking|>" ~ message.reasoning_content ~ "<|end_message|>" -}}
        {%- endif -%}

        {%- if message.content is string -%}
            {{- rtok ~ "<|content_text|>" ~ message.content ~ "<|end_message|>" -}}
        {%- elif message.content -%}
            {%- for part in message.content -%}
                {%- if part is string -%}
                    {{- rtok ~ "<|content_text|>" ~ part ~ "<|end_message|>" -}}
                {%- elif part.type is not defined or part.type in ("text", "input_text") -%}
                    {%- set text_part = (part.text if part.text is defined and part.text is string else "") -%}
                    {{- rtok ~ "<|content_text|>" ~ text_part ~ "<|end_message|>" -}}
                {%- elif part.type in ("image", "input_image", "image_url") -%}
                    {{- rtok ~ "<|content_image|><|unused_200054|><|end_message|>" -}}
                {%- elif part.type in ("audio", "input_audio", "audio_url") -%}
                    {{- rtok ~ "<|content_audio_input|><|unused_200053|><|audio_end|><|end_message|>" -}}
                {%- else -%}
                    {{- raise_exception("Unsupported content part type: " ~ part.type) -}}
                {%- endif -%}
            {%- endfor -%}
        {%- endif -%}

        {%- if message.role == "assistant" and message.tool_calls -%}
            {%- for tc in message.tool_calls -%}
                {%- set fn = tc.function -%}
                {%- if fn.name is not defined or fn.name is not string -%}
                    {{- raise_exception("tool call function name must be a string") -}}
                {%- endif -%}
                {%- set args = fn.arguments if fn.arguments is defined and fn.arguments else {} -%}
                {%- if args is string -%}
                    {{- raise_exception("tool call arguments must be a parsed object, not a JSON string; canonicalize upstream") -}}
                {%- endif -%}
                {%- if args is not mapping -%}
                    {{- raise_exception("tool call arguments must be an object") -}}
                {%- endif -%}
                {{- "<|message_model|>" ~ fn.name ~ "<|content_invoke_tool_json|>" -}}
                {{- '{"name":' ~ (fn.name | tojson(sort_keys=true, separators=(",", ":"))) ~ ',"args":' -}}
                {{- (args | tojson(sort_keys=true, separators=(",", ":"))) -}}
                {{- "}<|end_message|>" -}}
            {%- endfor -%}
        {%- endif -%}

        {%- if message.role == "assistant" -%}
            {{- "<|content_model_end_sampling|>" -}}
        {%- endif -%}
    {%- endif -%}
{%- endfor -%}

{%- if not state.effort_emitted -%}
    {{- emit_thinking_effort() -}}
{%- endif -%}

{%- if add_generation_prompt -%}
    {{- "<|message_model|>" -}}
{%- endif -%}