Falcon-H1R-7B-mlx / chat_template.jinja
alexgusevski's picture
Add files using upload-large-folder tool
6cf8d4b verified
{# --- System Prompt Handling --- #}
{%- if messages and messages[0]['role'] == 'system' %}
{% set system_msg = messages[0]['content'] %}
{%- set remaining_messages = messages[1:] %}
{%- else %}
{% set system_msg = "You are Falcon, a helpful AI assistant created by Technology Innovation Institute (TII). To answer the user's question, you first think about the reasoning process and then provide the user with the answer. The reasoning process is enclosed within <think> </think> tags, i.e., <think> reasoning process here </think> answer here." %}
{%- set remaining_messages = messages %}
{%- endif %}
{%- if tools %}
<|im_start|>system
{{ system_msg }}
# 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|>
{%- else %}
<|im_start|>system
{{ system_msg }}
<|im_end|>
{%- endif %}
{# --- Render remaining messages --- #}
{%- 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 remaining_messages %}
{%- set content = message.get('content','') %}
{%- if message['role'] == 'user' %}
{{- '<|im_start|>' + message['role'] + '\n' + content + '<|im_end|>\n' }}
{%- elif message['role'] == 'assistant' %}
{{- '<|im_start|>' + message.role + '\n' }}
{%- set reasoning_content = '' %}
{%- if message.reasoning_content is string %}
{%- set reasoning_content = message.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_query_index %}
{%- if loop.last or (not loop.last and reasoning_content) %}
{{- '<think>\n' + reasoning_content.strip('\n') + '\n</think>\n\n' + content.lstrip('\n') }}
{%- else %}
{{- content + '\n' }}
{%- endif %}
{%- else %}
{{- 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 %}