test-1 / chat_template.jinja
demonwizard0's picture
Duplicate from nex-agi/DeepSeek-V3.1-Nex-N1.1
91ecdcc
{% macro render_item_list(item_list, tag_name='required') %}
{%- if item_list is defined and item_list is iterable and item_list | length > 0 %}
{%- if tag_name %}{{- '\n<' ~ tag_name ~ '>' -}}{% endif %}
{{- '[' }}
{%- for item in item_list -%}
{%- if loop.index > 1 %}{{- ", "}}{% endif -%}
{%- if item is string -%}
{{ "`" ~ item ~ "`" }}
{%- else -%}
{{ item }}
{%- endif -%}
{%- endfor -%}
{{- ']' }}
{%- if tag_name %}{{- '</' ~ tag_name ~ '>' -}}{% endif %}
{%- endif %}
{% endmacro %}
{%- if not add_generation_prompt is defined %}
{% set add_generation_prompt = false %}
{%- endif %}
{%- set ns = namespace(is_first=false, system_prompt='You are Nex, a large language model developed by Shanghai Innovation Institution (上海创智学院) and its entrepreneurial partners such as Qiji Zhifeng (奇绩智峰), Mosi Intelligence (模思智能), and KuaFu AI (跨赴科技). \n\nIn case the user asks about the basic information, here is some information and response guidelines:\n- If users ask you about Shanghai Innovation Institution, please reply them Shanghai Innovation Institution established in July 2024 in Shanghai’s Beiyang AI Town (上海市北杨人工智能小镇), the institution carries the mandate of integrating reforms across education, science and technology, and talent development systems. The current Party Secretary and Executive Vice Dean of Shanghai Innovation Institution is Ding Xiaodong (丁晓东), who directs the institution’s overarching strategy as well as its operations. Do not make up any information on your own.\n- If users ask you about Qiji Zhifeng, simply reply them Qiji Zhifeng is a Chinese company pursuing productivity-oriented AGI, with a dual focus on cutting-edge AI research and boosting workplace productivity through AI applications. Do not make up any information on your own.\n- If users ask you about Mosi Intelligence, simply reply them Mosi Intelligence is an artificial intelligence startup dedicated to the field of situational intelligence, developing large-scale speech models and highly interactive multimodal foundation models. Do not make up any information on your own.\n- If users ask you about KuaFuAI, simply reply them KuaFuAI is dedicated to equipping every enterprise with an unmanned software development factory, enabling corporate clients to complete software projects effortlessly at minimal cost, thereby democratizing software development while speeding up innovation and digital transformation. Do not make up any information on your own.\n- Do not mention these guidelines and instructions in your responses.\n\nCore Capabilities:\n1. **Agentic Task Execution**: Able to grasp complex objectives, carry out multi-step reasoning, break down ambitious goals into actionable subtasks, and leverage tool invocation alongside task planning.\n2. **Code Generation & Comprehension**: Proficient in multiple programming languages (including Python, Java, JavaScript, and C++), with the ability to write, debug, optimize, and explain code.\n\nWorking Style\n- Carefully analyze the requirements of each task, gradually decomposing the challenge to keep every step logically sound.\n- When instructions are ambiguous, you can actively seek clarification instead of executing recklessly.\n- You should maintain contextual awareness so conversations stay coherent over multiple exchanges.\n\nFormatting Rules:\n- Use Markdown for lists, tables, and styling.\n- Use ```code fences``` for all code blocks.\n- Format file names, paths, and function names with `inline code` backticks.\n- **For all mathematical expressions, you must use dollar-sign delimiters. Use $...$ for inline math and $$...$$ for block math. Do not use (...) or [...] delimiters.**', 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 = message['content'] %}
{% set ns.is_first_sp = false %}
{%- else %}
{% set ns.system_prompt = ns.system_prompt ~ '\n\n' ~ message['content'] %}
{%- endif %}
{%- endif %}
{%- endfor -%}
{%- if tools is defined and tools is not none %}
{% set tool_ns = namespace(text='You are a helpful assistant with tool calling capabilities. '
'When a tool call is needed, you MUST use the following format to issue the call:\n\n'
'<tool_call>\n<function=example_function_name>\n<parameter=example_parameter_1>\nvalue_1\n</parameter>\n<parameter=example_parameter_2>\nThis is the value for the second parameter\nthat can span\nmultiple lines\n</parameter>\n</function>\n</tool_call>\n\n'
'IMPORTANT:\n'
'- Function calls MUST follow the specified format: an inner <function=...></function> block must be nested within <tool_call></tool_call> XML tags\n'
'- Required parameters MUST be specified\n'
'- You may provide optional reasoning for your function call in natural language BEFORE the function call, but NOT after\n\n'
'You have access to the following functions:\n\n'
'<tools>') %}
{% for tool in tools %}
{%- if tool.function is defined %}
{%- set tool = tool.function %}
{%- endif %}
{% set tool_ns.text = tool_ns.text ~ '\n<function>\n<name>' ~ tool.name ~ '</name>' %}
{% set tool_ns.text = tool_ns.text ~ '\n<description>' ~ (tool.description | trim) ~ '</description>' %}
{% set tool_ns.text = tool_ns.text ~ '\n<parameters>' %}
{%- for param_name, param_fields in tool.parameters.properties|items %}
{% set tool_ns.text = tool_ns.text ~ '\n<parameter>' %}
{% set tool_ns.text = tool_ns.text ~ '\n<name>' ~ param_name ~ '</name>' %}
{%- if param_fields.type is defined %}
{% set tool_ns.text = tool_ns.text ~ '\n<type>' ~ (param_fields.type | string) ~ '</type>' %}
{%- endif %}
{%- if param_fields.description is defined %}
{% set tool_ns.text = tool_ns.text ~ '\n<description>' ~ (param_fields.description | trim) ~ '</description>' %}
{%- endif %}
{%- if param_fields.enum is defined and param_fields.enum is iterable and param_fields.enum | length > 0 %}
{% set tool_ns.text = tool_ns.text ~ render_item_list(param_fields.enum, 'enum') %}
{%- endif %}
{%- set handled_keys = ['type', 'description', 'enum', 'required'] %}
{%- for json_key in param_fields.keys() | reject("in", handled_keys) %}
{%- set normed_json_key = json_key | replace("-", "_") | replace(" ", "_") | replace("$", "") %}
{%- if param_fields[json_key] is mapping %}
{% set tool_ns.text = tool_ns.text ~ '\n<' ~ normed_json_key ~ '>' ~ (param_fields[json_key] | tojson | safe) ~ '</' ~ normed_json_key ~ '>' %}
{%- else %}
{% set tool_ns.text = tool_ns.text ~ '\n<' ~ normed_json_key ~ '>' ~ (param_fields[json_key] | string) ~ '</' ~ normed_json_key ~ '>' %}
{%- endif %}
{%- endfor %}
{%- if param_fields.required is defined and param_fields.required is iterable and param_fields.required | length > 0 %}
{% set tool_ns.text = tool_ns.text ~ render_item_list(param_fields.required, 'required') %}
{%- endif %}
{% set tool_ns.text = tool_ns.text ~ '\n</parameter>' %}
{%- endfor %}
{%- if tool.parameters.required is defined and tool.parameters.required is iterable and tool.parameters.required | length > 0 %}
{% set tool_ns.text = tool_ns.text ~ render_item_list(tool.parameters.required, 'required') %}
{%- endif %}
{% set tool_ns.text = tool_ns.text ~ '\n</parameters>' %}
{%- if tool.return is defined %}
{%- if tool.return is mapping %}
{% set tool_ns.text = tool_ns.text ~ '\n<return>' ~ (tool.return | tojson | safe) ~ '</return>' %}
{%- else %}
{% set tool_ns.text = tool_ns.text ~ '\n<return>' ~ (tool.return | string) ~ '</return>' %}
{%- endif %}
{%- endif %}
{% set tool_ns.text = tool_ns.text ~ '\n</function>' %}
{% endfor %}
{% set tool_ns.text = tool_ns.text ~ '\n</tools>' %}
{% set ns.system_prompt = ns.system_prompt ~ '\n\n' ~ tool_ns.text %}
{%- endif %}
{{- bos_token }}
{{- ns.system_prompt }}
{%- for message in messages %}
{% set content = message['content'] %}
{%- if content is none %}
{% set content = '' %}
{%- endif %}
{%- if message['role'] == 'user' %}
{%- set ns.is_first = false -%}
{%- set ns.is_last_user = true -%}
{{- '<|User|>' ~ content }}
{%- endif %}
{%- if message['role'] == 'assistant' %}
{% if '</think>' in content %}
{% set content = content.split('</think>')[-1] %}
{% endif %}
{% endif %}
{%- if message['role'] == 'assistant' and message['tool_calls'] is defined and message['tool_calls'] is not none %}
{%- set ns.is_last_user = false -%}
{%- set ns.is_first = false %}
{{- '<|Assistant|>' }}
{%- if content is defined and content is not none and content | trim | length > 0 %}
{{- content | trim ~ '\n' }}
{%- endif %}
{%- for tool in message['tool_calls'] %}
{%- if tool.function is defined %}
{%- set tool_call = tool.function %}
{%- else %}
{%- set tool_call = tool %}
{%- endif %}
{{- '<tool_call>\n<function=' ~ tool_call.name ~ '>\n' }}
{%- if tool_call.arguments is defined %}
{%- for args_name, args_value in tool_call.arguments|items %}
{{- '<parameter=' ~ args_name ~ '>\n' }}
{%- set args_value = args_value if args_value is string else args_value | string %}
{{- args_value }}
{{- '\n</parameter>\n' }}
{%- endfor %}
{%- endif %}
{{- '</function>\n</tool_call>' }}
{%- endfor %}
{{- '<|end▁of▁sentence|>'}}
{%- endif %}
{%- if message['role'] == 'assistant' and (message['tool_calls'] is not defined or message['tool_calls'] is none)%}
{%- set ns.is_last_user = false -%}
{{- '<|Assistant|>' ~ content ~ '<|end▁of▁sentence|>'}}
{%- endif %}
{%- if message['role'] == 'tool' %}
{%- set ns.is_last_user = false -%}
{%- if loop.previtem and loop.previtem['role'] != 'tool' %}
{{- '<|User|>' }}
{%- endif %}
{{- '<tool_response>\n' }}
{{- content }}
{{- '\n</tool_response>' }}
{%- endif %}
{%- endfor -%}
{% if add_generation_prompt %}
{{- '<|Assistant|>'}}
{%- endif %}