Source code for lmflow.utils.conversation_template.deepseek

#!/usr/bin/env python
# coding=utf-8
# Copyright 2024 Statistics and Machine Learning Research Group. All rights reserved.
from .base import StringFormatter, TemplateComponent, ConversationTemplate


[docs] DEEPSEEK_V2_TEMPLATE = ConversationTemplate( template_name='deepseek_v2', user_formatter=StringFormatter( template=[ TemplateComponent(type='string', content='User: {{content}}\n\n') ] ), assistant_formatter=StringFormatter( template=[ TemplateComponent(type='string', content='Assistant: {{content}}'), TemplateComponent(type='token', content='eos_token') ] ), system_formatter=StringFormatter( template=[ TemplateComponent(type='string', content='{{content}}\n\n') ] ), special_starter=TemplateComponent(type='token', content='bos_token') )
[docs] DEEPSEEK_V3_TEMPLATE = ( "{% if not add_generation_prompt is defined %}" "{% set add_generation_prompt = false %}" "{% endif %}" "{% set ns = namespace(is_first=false, is_tool=false, is_output_first=true, system_prompt='', is_first_sp=true) %}" "{%- 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 + '\n\n' + message['content'] %}" "{%- endif %}" "{%- endif %}" "{%- endfor %}" "{{bos_token}}" "{{ns.system_prompt}}" "{%- for message in messages %}" "{%- if message['role'] == 'user' %}" "{%- set ns.is_tool = false -%}" "{{'<|User|>' + message['content']}}" "{%- endif %}" "{%- if message['role'] == 'assistant' and message['content'] is none %}" "{%- set ns.is_tool = false -%}" "{%- for tool in message['tool_calls']%}" "{%- if not ns.is_first %}" "{{'<|Assistant|>'}}" "{% generation %}" "{{'<|tool▁calls▁begin|><|tool▁call▁begin|>' + tool['type'] + '<|tool▁sep|>' + tool['function']['name'] + '\n' + '```json' + '\n' + tool['function']['arguments'] + '\n' + '```' + '<|tool▁call▁end|>'}}" "{% endgeneration %}" "{%- set ns.is_first = true -%}" "{%- else %}" "{% generation %}" "{{'\n' + '<|tool▁call▁begin|>' + tool['type'] + '<|tool▁sep|>' + tool['function']['name'] + '\n' + '```json' + '\n' + tool['function']['arguments'] + '\n' + '```' + '<|tool▁call▁end|>'}}" "{{'<|tool▁calls▁end|><|end▁of▁sentence|>'}}" "{% endgeneration %}" "{%- endif %}" "{%- endfor %}" "{%- endif %}" "{%- if message['role'] == 'assistant' and message['content'] is not none %}" "{%- if ns.is_tool %}" "{{'<|tool▁outputs▁end|>'}}" "{% generation %}" "{{ message['content'] + '<|end▁of▁sentence|>'}}" "{%- set ns.is_tool = false -%}" "{% endgeneration %}" "{%- else %}" "{{'<|Assistant|>'}}" "{% generation %}" "{{ message['content'] + '<|end▁of▁sentence|>'}}" "{% endgeneration %}" "{%- endif %}" "{%- endif %}" "{%- if message['role'] == 'tool' %}" "{%- set ns.is_tool = true -%}" "{%- if ns.is_output_first %}" "{{'<|tool▁outputs▁begin|><|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>'}}" "{%- set ns.is_output_first = false %}" "{%- else %}" "{{'\n<|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>'}}" "{%- endif %}" "{%- endif %}" "{%- endfor -%}" "{% if ns.is_tool %}" "{{'<|tool▁outputs▁end|>'}}" "{% endif %}" "{% if add_generation_prompt and not ns.is_tool %}" "{{'<|Assistant|>'}}" "{% endif %}" )
[docs] DEEPSEEK_R1_TEMPLATE = ( "{% if not add_generation_prompt is defined %}" "{% set add_generation_prompt = false %}" "{% endif %}" "{% set ns = namespace(is_first=false, is_tool=false, is_output_first=true, system_prompt='', is_first_sp=true) %}" "{%- 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 + '\\n\\n' + message['content'] %}" "{%- endif %}" "{%- endif %}" "{%- endfor %}" "{{ bos_token }}" "{{ ns.system_prompt }}" "{%- for message in messages %}" "{%- if message['role'] == 'user' %}" "{%- set ns.is_tool = false -%}" "{{'<|User|>' + message['content']}}" "{%- endif %}" "{%- if message['role'] == 'assistant' and 'tool_calls' in message %}" "{%- set ns.is_tool = false -%}" "{%- for tool in message['tool_calls'] %}" "{%- if not ns.is_first %}" "{%- if message['content'] is none %}" " {{'<|Assistant|>'}}" " {% generation %}" " {{'<|tool▁calls▁begin|><|tool▁call▁begin|>' + tool['type'] + '<|tool▁sep|>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<|tool▁call▁end|>'}}" " {% endgeneration %}" "{%- else %}" " {{'<|Assistant|>'}}" " {% generation %}" " {{ message['content'] + '<|tool▁calls▁begin|><|tool▁call▁begin|>' + tool['type'] + '<|tool▁sep|>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<|tool▁call▁end|>'}}" " {% endgeneration %}" "{%- endif %}" "{%- set ns.is_first = true -%}" "{%- else %}" "{% generation %}" "{{'\\n' + '<|tool▁call▁begin|>' + tool['type'] + '<|tool▁sep|>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<|tool▁call▁end|>'}}" "{% endgeneration %}" "{%- endif %}" "{%- endfor %}" "{% generation %}" "{{'<|tool▁calls▁end|><|end▁of▁sentence|>'}}" "{% endgeneration %}" "{%- endif %}" "{%- if message['role'] == 'assistant' and 'tool_calls' not in message %}" "{%- if ns.is_tool %}" "{{'<|tool▁outputs▁end|>'}}" "{% generation %}" "{{ message['content'] + '<|end▁of▁sentence|>'}}" "{% endgeneration %}" "{%- set ns.is_tool = false -%}" "{%- else %}" "{% set content = message['content'] %}" "{% if '</think>' in content %}" "{% set content = content.split('</think>')[-1] %}" "{% endif %}" "{{'<|Assistant|>'}}" "{% generation %}" "{{ content + '<|end▁of▁sentence|>'}}" "{% endgeneration %}" "{%- endif %}" "{%- endif %}" "{%- if message['role'] == 'tool' %}" "{%- set ns.is_tool = true -%}" "{%- if ns.is_output_first %}" "{{'<|tool▁outputs▁begin|><|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>'}}" "{%- set ns.is_output_first = false %}" "{%- else %}" "{{'<|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>'}}" "{%- endif %}" "{%- endif %}" "{%- endfor -%}" "{% if ns.is_tool %}" "{{'<|tool▁outputs▁end|>'}}" "{% endif %}" "{% if add_generation_prompt and not ns.is_tool %}" "{{'<|Assistant|>'}}" "{% endif %}" )
[docs] DEEPSEEK_R1_DISTILL_TEMPLATE = ( "{% if not add_generation_prompt is defined %}" "{% set add_generation_prompt = false %}" "{% endif %}" "{% set ns = namespace(is_first=false, is_tool=false, is_output_first=true, system_prompt='') %}" "{%- for message in messages %}" "{%- if message['role'] == 'system' %}" "{% set ns.system_prompt = message['content'] %}" "{%- endif %}" "{%- endfor %}" "{{bos_token}}" "{{ns.system_prompt}}" "{%- for message in messages %}" "{%- if message['role'] == 'user' %}" "{%- set ns.is_tool = false -%}" "{{'<|User|>' + message['content']}}" "{%- endif %}" "{%- if message['role'] == 'assistant' and message['content'] is none %}" "{%- set ns.is_tool = false -%}" "{%- for tool in message['tool_calls']%}" "{%- if not ns.is_first %}" "{{'<|Assistant|>'}}" "{% generation %}" "{{'<|tool▁calls▁begin|><|tool▁call▁begin|>' + tool['type'] + '<|tool▁sep|>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<|tool▁call▁end|>'}}" "{% endgeneration %}" "{%- set ns.is_first = true -%}" "{%- else %}" "{% generation %}" "{{'\\n' + '<|tool▁call▁begin|>' + tool['type'] + '<|tool▁sep|>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<|tool▁call▁end|>'}}" "{{'<|tool▁calls▁end|><|end▁of▁sentence|>'}}" "{% endgeneration %}" "{%- endif %}" "{%- endfor %}" "{%- endif %}" "{%- if message['role'] == 'assistant' and message['content'] is not none %}" "{%- if ns.is_tool %}" "{{'<|tool▁outputs▁end|>'}}" "{% generation %}" "{{ message['content'] + '<|end▁of▁sentence|>'}}" "{% endgeneration %}" "{%- set ns.is_tool = false -%}" "{%- else %}" "{% set content = message['content'] %}" "{% if '</think>' in content %}" "{% set content = content.split('</think>')[-1] %}" "{% endif %}" "{{'<|Assistant|>'}}" "{% generation %}" "{{ content + '<|end▁of▁sentence|>'}}" "{% endgeneration %}" "{%- endif %}" "{%- endif %}" "{%- if message['role'] == 'tool' %}" "{%- set ns.is_tool = true -%}" "{%- if ns.is_output_first %}" "{{'<|tool▁outputs▁begin|><|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>'}}" "{%- set ns.is_output_first = false %}" "{%- else %}" "{{'\\n<|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>'}}" "{%- endif %}" "{%- endif %}" "{%- endfor -%}" "{% if ns.is_tool %}" "{{'<|tool▁outputs▁end|>'}}" "{% endif %}" "{% if add_generation_prompt and not ns.is_tool %}" "{{'<|Assistant|>'}}" "{% endif %}" )