Update prompt tags: Replace <think></think> with <|box_start|><|box_end|> for correct model usage

#1
by anrgct - opened

I found that the prompt tags for this model are not<think></think> but <|box_start|><|box_end|>. Setting the template below in lmstudio can be used normally.

{%- if tools %}  
    {{- '<|im_start|>system\n' }}  
    {%- if messages[0]['role'] == 'system' %}  
        {{- messages[0]['content'] }}  
    {%- else %}  
        {{- '' }}  
    {%- endif %}  
    {{- "\n\n# Tools\n\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within <tools></tools> XML tags:\n<tools>" }}  
    {%- for tool in tools %}  
        {{- "\n" }}  
        {{- tool | tojson }}  
    {%- endfor %}  
    {{- "\n</tools>\n\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\n<tool_call>\n{\"name\": <function-name>, \"arguments\": <args-json-object>}\n</tool_call><|im_end|>\n" }}  
{%- else %}  
    {%- if messages[0]['role'] == 'system' %}  
        {{- '<|im_start|>system\n' + messages[0]['content'] + '<|im_end|>\n' }}  
    {%- endif %}  
{%- endif %}  
{%- for message in messages %}  
    {%- if (message.role == "user") or (message.role == "system" and not loop.first) %}  
        {{- '<|im_start|>' + message.role + '\n' + message.content + '<|im_end|>' + '\n' }}  
    {%- elif message.role == "assistant" and not message.tool_calls %}  
        {%- set content = (message.content.split('<|box_end|>')|last).lstrip('\n') %}  
        {{- '<|im_start|>' + message.role + '\n' + content + '<|im_end|>' + '\n' }}  
    {%- elif message.role == "assistant" %}  
        {%- set content = (message.content.split('<|box_end|>')|last).lstrip('\n') %}  
        {{- '<|im_start|>' + message.role }}  
        {%- if message.content %}  
            {{- '\n' + content }}  
        {%- endif %}  
        {%- for tool_call in message.tool_calls %}  
            {%- if tool_call.function is defined %}  
                {%- set tool_call = tool_call.function %}  
            {%- endif %}  
            {{- '\n<tool_call>\n{"name": "' }}  
            {{- tool_call.name }}  
            {{- '", "arguments": ' }}  
            {{- tool_call.arguments | tojson }}  
            {{- '}\n</tool_call>' }}  
        {%- endfor %}  
        {{- '<|im_end|>\n' }}  
    {%- elif message.role == "tool" %}  
        {%- 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 %}  
{%- endfor %}  
{%- if add_generation_prompt %}  
    {{- '<|im_start|>assistant\n<|box_start|>' }}  
{%- endif %}
Your need to confirm your account before you can post a new comment.

Sign up or log in to comment