| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- [gMASK]<sop>
- {%- if tools -%}
- <|system|>
- # Tools
- You may call one or more functions to assist with the user query.
- You are provided with function signatures within <tools></tools> XML tags:
- <tools>
- {% for tool in tools %}
- {{ tool | tojson(ensure_ascii=False) }}
- {% endfor %}
- </tools>
- For each function call, output the function name and arguments within the following XML format:
- <tool_call>{function-name}
- <arg_key>{arg-key-1}</arg_key>
- <arg_value>{arg-value-1}</arg_value>
- <arg_key>{arg-key-2}</arg_key>
- <arg_value>{arg-value-2}</arg_value>
- ...
- </tool_call>{%- endif -%}
- {%- macro visible_text(content) -%}
- {%- if content is string -%}
- {{- content }}
- {%- elif content is iterable and content is not mapping -%}
- {%- for item in content -%}
- {%- if item is mapping and item.type == 'text' -%}
- {{- item.text }}
- {%- elif item is string -%}
- {{- item }}
- {%- endif -%}
- {%- endfor -%}
- {%- else -%}
- {{- content }}
- {%- endif -%}
- {%- endmacro -%}
- {%- set ns = namespace(last_user_index=-1) %}
- {%- for m in messages %}
- {%- if m.role == 'user' %}
- {% set ns.last_user_index = loop.index0 -%}
- {%- endif %}
- {%- endfor %}
- {% for m in messages %}
- {%- if m.role == 'user' -%}<|user|>
- {{ visible_text(m.content) }}
- {{- '/nothink' if (enable_thinking is defined and not enable_thinking and not visible_text(m.content).endswith("/nothink")) else '' -}}
- {%- elif m.role == 'assistant' -%}
- <|assistant|>
- {%- set reasoning_content = '' %}
- {%- set content = visible_text(m.content) %}
- {%- if m.reasoning_content is string %}
- {%- set reasoning_content = m.reasoning_content %}
- {%- else %}
- {%- if '</think>' in content %}
- {%- set reasoning_content = content.split('</think>')[0].rstrip('\n').split('<think>')[-1].lstrip('\n') %}
- {%- set content = content.split('</think>')[-1].lstrip('\n') %}
- {%- endif %}
- {%- endif %}
- {%- if loop.index0 > ns.last_user_index and reasoning_content -%}
- {{ '\n<think>' + reasoning_content.strip() + '</think>'}}
- {%- else -%}
- {{ '\n<think></think>' }}
- {%- endif -%}
- {%- if content.strip() -%}
- {{ '\n' + content.strip() }}
- {%- endif -%}
- {% if m.tool_calls %}
- {% for tc in m.tool_calls %}
- {%- if tc.function %}
- {%- set tc = tc.function %}
- {%- endif %}
- {{ '\n<tool_call>' + tc.name }}
- {% set _args = tc.arguments or {} %}
- {% if _args is not mapping %}
- {{ raise_exception("Invalid tool call arguments passed: " + _args | string) }}
- {% endif %}
- {% for k, v in _args.items() %}
- <arg_key>{{ k }}</arg_key>
- <arg_value>{{ v | tojson(ensure_ascii=False) if v is not string else v }}</arg_value>
- {% endfor %}
- </tool_call>{% endfor %}
- {% endif %}
- {%- elif m.role == 'tool' -%}
- {%- if m.content is string -%}
- {%- if loop.first or (messages[loop.index0 - 1].role != "tool") %}
- {{- '<|observation|>' }}
- {%- endif %}
- {{- '\n<tool_response>\n' }}
- {{- m.content }}
- {{- '\n</tool_response>' }}
- {%- else -%}
- <|observation|>{% for tr in m.content %}
- <tool_response>
- {{ tr.output if tr.output is defined else tr }}
- </tool_response>{% endfor -%}
- {% endif -%}
- {%- elif m.role == 'system' -%}
- <|system|>
- {{ visible_text(m.content) }}
- {%- endif -%}
- {%- endfor -%}
- {%- if add_generation_prompt -%}
- <|assistant|>{{- '\n<think></think>' if (enable_thinking is defined and not enable_thinking) else '' -}}
- {%- endif -%}
|