CompactAI's picture
Upload folder using huggingface_hub
b7e5c48 verified
{# --- System Prompt Handling --- #}
{%- if messages and messages[0]['role'] == 'system' %}
{%- set remaining_messages = messages[1:] %}
{%- else %}
{%- set remaining_messages = messages %}
{%- endif %}
{%- if tools %}
{{- '<|im_start|>system\n' }}
{%- if messages[0].role == 'system' %}
{{- messages[0].content + '\n' }}
{%- endif %}
# 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 }}
{%- endfor %}
{{- "" }}
</tools>
For each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:
<tool_call>
{"name": <function-name>, "arguments": <args-json-object>}
</tool_call>
{{- '<|im_end|>\n' }}
{%- else %}
{%- if messages[0].role == 'system' %}
{{- '<|im_start|>system\n' + messages[0].content + '<|im_end|>\n' }}
{%- endif %}
{%- endif %}
{# --- Render remaining messages --- #}
{%- for message in remaining_messages %}
{%- if message['role'] == 'user' %}
{{- '<|im_start|>' + message['role'] + '\n' + message['content'] + '<|im_end|>\n' }}
{%- elif message['role'] == 'assistant' %}
{{- '<|im_start|>' + message['role'] +'\n' }}
{%- if message.get('content','') %}
{{- message['content'] + '\n' }}
{%- endif %}
{%- if tools and message.tool_calls %}
{%- for tool_call in message.tool_calls %}
{%- if tool_call.function is defined %}
{%- 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>\n' }}
{%- endfor %}
{%- endif %}
{%- if not loop.last %}
{{- '<|im_end|>' + '\n' }}
{%- else %}
{{- '<|im_end|>' }}
{%- endif %}
{%- elif message['role'] == 'tool' %}
{# Tool responses treated as user messages #}
{%- if (loop.index0 == 0) or (messages[loop.index0 - 1].role != "tool") %}
{{- '<|im_start|>user' }}
{%- endif %}
{{- '\n<tool_response>\n' + message['content'] + '\n</tool_response>' }}
{%- if loop.last or (messages[loop.index0 + 1].role != "tool") %}
{{- '<|im_end|>\n' }}
{%- endif %}
{%- endif %}
{# --- Add generation prompt after last message if requested --- #}
{%- if loop.last and add_generation_prompt %}
{{- '<|im_start|>assistant\n' }}
{%- endif %}
{%- endfor %}