55 lines
1.8 KiB
Django/Jinja
55 lines
1.8 KiB
Django/Jinja
{%- set counter = namespace(index=0) -%}
|
||
{%- if not tools is defined %}
|
||
{%- set tools = none %}
|
||
{%- endif %}
|
||
|
||
{%- if messages and messages[0]['role'] == 'system' %}
|
||
{%- set system_message = messages[0]['content']|trim %}
|
||
{%- set messages = messages[1:] %}
|
||
{%- else %}
|
||
{%- set system_message = "You are a helpful assistant." %}
|
||
{%- endif %}
|
||
|
||
{%- if tools is not none %}
|
||
{%- set tool_instruction %}
|
||
You have access to the following tools. When you need to call a tool, you MUST use the following format:
|
||
|
||
<tool_call>function_name
|
||
<arg_key>parameter_name</arg_key>
|
||
<arg_value>parameter_value</arg_value>
|
||
</tool_call>
|
||
|
||
Important rules:
|
||
- Always wrap tool calls with <tool_call>...</tool_call> tags
|
||
- Put the function name on the first line after <tool_call>
|
||
- Use <arg_key> and <arg_value> tags for each parameter
|
||
- If a parameter value is a string, keep it as-is. If it's a number or boolean, convert it appropriately
|
||
- You can make multiple tool calls if needed
|
||
- If no tool is suitable, respond with regular text
|
||
|
||
Available tools:
|
||
{% endset %}
|
||
{{- tool_instruction + "\n\n" }}
|
||
{%- for t in tools %}
|
||
{{- t | tojson(indent=4) }}
|
||
{{- "\n\n" }}
|
||
{%- endfor %}
|
||
{%- endif %}
|
||
|
||
{%- for message in messages -%}
|
||
{%- if message['role'] == 'user' -%}
|
||
{{- '[Round ' + counter.index|string + ']\n问:' + message['content'] -}}
|
||
{%- set counter.index = counter.index + 1 -%}
|
||
{%- endif -%}
|
||
{%- if message['role'] == 'assistant' -%}
|
||
{{- '\n答:' + message['content'] -}}
|
||
{%- if (loop.last and add_generation_prompt) or not loop.last -%}
|
||
{{- '\n' -}}
|
||
{%- endif -%}
|
||
{%- endif -%}
|
||
{%- endfor -%}
|
||
|
||
{%- if add_generation_prompt and messages[-1]['role'] != 'assistant' -%}
|
||
{{- '\n答:' -}}
|
||
{%- endif -%}
|