71 lines
3.3 KiB
Django/Jinja
71 lines
3.3 KiB
Django/Jinja
{% if not add_generation_prompt is defined -%}
|
||
{%- set add_generation_prompt = false -%}
|
||
{%- endif -%}
|
||
{%- if not thinking is defined -%}
|
||
{%- if enable_thinking is defined -%}
|
||
{%- set thinking = enable_thinking -%}
|
||
{%- else -%}
|
||
{%- set thinking = false -%}
|
||
{%- endif -%}
|
||
{%- endif -%}
|
||
{%- set ns = namespace(is_first=false, is_tool=false, system_prompt='', is_first_sp=true, is_last_user=false) -%}
|
||
{%- for message in messages -%}
|
||
{%- if message['role'] == 'system' -%}
|
||
{%- if ns.is_first_sp -%}
|
||
{%- set ns.system_prompt = ns.system_prompt + message['content'] -%}
|
||
{%- set ns.is_first_sp = false -%}
|
||
{%- else -%}
|
||
{%- set ns.system_prompt = ns.system_prompt + '
|
||
|
||
' + message['content'] -%}
|
||
{%- endif -%}
|
||
{%- endif -%}
|
||
{%- endfor -%}{{ bos_token }}{{ ns.system_prompt }}
|
||
{%- for message in messages -%}
|
||
{%- if message['role'] == 'user' -%}
|
||
{%- set ns.is_tool = false -%}
|
||
{%- set ns.is_first = false -%}
|
||
{%- set ns.is_last_user = true -%}{{'<|User|>' + message['content']}}
|
||
{%- endif -%}
|
||
{%- if message['role'] == 'assistant' and message['tool_calls'] is defined and message['tool_calls'] is not none -%}
|
||
{%- if ns.is_last_user -%}{{'<|Assistant|></think>'}}
|
||
{%- endif -%}
|
||
{%- set ns.is_last_user = false -%}
|
||
{%- set ns.is_first = false -%}
|
||
{%- set ns.is_tool = false -%}
|
||
{%- for tool in message['tool_calls'] -%}
|
||
{%- if not ns.is_first -%}
|
||
{%- if message['content'] is none -%}{{'<|tool▁calls▁begin|><|tool▁call▁begin|>'+ tool['function']['name'] + '<|tool▁sep|>' + tool['function']['arguments'] + '<|tool▁call▁end|>'}}
|
||
{%- else -%}{{message['content'] + '<|tool▁calls▁begin|><|tool▁call▁begin|>' + tool['function']['name'] + '<|tool▁sep|>' + tool['function']['arguments'] + '<|tool▁call▁end|>'}}
|
||
{%- endif -%}
|
||
{%- set ns.is_first = true -%}
|
||
{%- else -%}{{'<|tool▁call▁begin|>'+ tool['function']['name'] + '<|tool▁sep|>' + tool['function']['arguments'] + '<|tool▁call▁end|>'}}
|
||
{%- endif -%}
|
||
{%- endfor -%}{{'<|tool▁calls▁end|><|end▁of▁sentence|>'}}
|
||
{%- endif -%}
|
||
{%- if message['role'] == 'assistant' and (message['tool_calls'] is not defined or message['tool_calls'] is none) -%}
|
||
{%- if ns.is_last_user -%}{{'<|Assistant|>'}}
|
||
{%- if message['prefix'] is defined and message['prefix'] and thinking -%}{{'<think>'}}
|
||
{%- else -%}{{'</think>'}}
|
||
{%- endif -%}
|
||
{%- endif -%}
|
||
{%- set ns.is_last_user = false -%}
|
||
{%- if ns.is_tool -%}{{message['content'] + '<|end▁of▁sentence|>'}}
|
||
{%- set ns.is_tool = false -%}
|
||
{%- else -%}
|
||
{%- set content = message['content'] -%}
|
||
{%- if '</think>' in content -%}
|
||
{%- set content = content.split('</think>', 1)[1] -%}
|
||
{%- endif -%}{{content + '<|end▁of▁sentence|>'}}
|
||
{%- endif -%}
|
||
{%- endif -%}
|
||
{%- if message['role'] == 'tool' -%}
|
||
{%- set ns.is_last_user = false -%}
|
||
{%- set ns.is_tool = true -%}{{'<|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>'}}
|
||
{%- endif -%}
|
||
{%- endfor -%}
|
||
{%- if add_generation_prompt and ns.is_last_user and not ns.is_tool -%}{{'<|Assistant|>'}}
|
||
{%- if not thinking -%}{{'</think>'}}
|
||
{%- else -%}{{'<think>'}}
|
||
{%- endif -%}
|
||
{%- endif %} |