[GH-ISSUE #9806] MetaStone-L1-7B model template #6415

Closed
opened 2026-04-12 17:58:02 -05:00 by GiteaMirror · 1 comment
Owner

Originally created by @wqerrewetw on GitHub (Mar 17, 2025).
Original GitHub issue: https://github.com/ollama/ollama/issues/9806

https://huggingface.co/MetaStoneTec/MetaStone-L1-7B

I have made it work, but how to add tool call support?

{{- if .System }}<beginofsentence>{{ .System }}{{ end }}
{{- range $i, $_ := .Messages }}
{{- $last := eq (len (slice $.Messages $i)) 1}}
{{- if eq .Role "user" }}<User>{{ .Content }}
{{- else if eq .Role "assistant" }}<Assistant>{{ .Content }}{{- if not $last }}<endofsentence>{{- end }}
{{- end }}
{{- if and $last (ne .Role "assistant") }}<Assistant>{{- end }}
{{- end }}

Original 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|><|tool▁calls▁begin|><|tool▁call▁begin|>' + tool['type'] + '<|tool▁sep|>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<|tool▁call▁end|>'}}{%- set ns.is_first = true -%}{%- else %}{{'\\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|>'}}{%- endif %}{%- endfor %}{%- endif %}{%- if message['role'] == 'assistant' and message['content'] is not none %}{%- if ns.is_tool %}{{'<|tool▁outputs▁end|>' + 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] %}{% endif %}{{'<|Assistant|>' + content + '<|end▁of▁sentence|>'}}{%- 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|><think>\\n'}}{% endif %}

Originally created by @wqerrewetw on GitHub (Mar 17, 2025). Original GitHub issue: https://github.com/ollama/ollama/issues/9806 https://huggingface.co/MetaStoneTec/MetaStone-L1-7B I have made it work, but how to add tool call support? ```go {{- if .System }}<|begin▁of▁sentence|>{{ .System }}{{ end }} {{- range $i, $_ := .Messages }} {{- $last := eq (len (slice $.Messages $i)) 1}} {{- if eq .Role "user" }}<|User|>{{ .Content }} {{- else if eq .Role "assistant" }}<|Assistant|>{{ .Content }}{{- if not $last }}<|end▁of▁sentence|>{{- end }} {{- end }} {{- if and $last (ne .Role "assistant") }}<|Assistant|>{{- end }} {{- end }} ``` Original template ```python {% 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|><|tool▁calls▁begin|><|tool▁call▁begin|>' + tool['type'] + '<|tool▁sep|>' + tool['function']['name'] + '\\n' + '```json' + '\\n' + tool['function']['arguments'] + '\\n' + '```' + '<|tool▁call▁end|>'}}{%- set ns.is_first = true -%}{%- else %}{{'\\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|>'}}{%- endif %}{%- endfor %}{%- endif %}{%- if message['role'] == 'assistant' and message['content'] is not none %}{%- if ns.is_tool %}{{'<|tool▁outputs▁end|>' + 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] %}{% endif %}{{'<|Assistant|>' + content + '<|end▁of▁sentence|>'}}{%- 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|><think>\\n'}}{% endif %} ```
GiteaMirror added the model label 2026-04-12 17:58:02 -05:00
Author
Owner

@wqerrewetw commented on GitHub (Mar 18, 2025):

{{- if .Messages }}
{{- if or .System .Tools }}
{{- if .System }}
{{ .System }}
{{- end }}
{{- if .Tools }}
When using a tool, format as:
{"name": "function_name", "parameters": {"param1": "value1"}}

The following tools are available when needed for specific tasks:
{{ $.Tools }}
{{- end }}
{{- end }}
{{- range $i, $_ := .Messages }}
{{- $last := eq (len (slice $.Messages $i)) 1 }}
{{- if eq .Role "user" }}<User>
{{- if and $.Tools $last }}
Given the tools, please respond with a JSON object for a function call with its proper arguments that best answers the given prompt.
Prioritize specific concurrent tool calls over a single generic tool call. Use tools first, explain what happened after recieving the results.
Respond in the format {"name": function name, "parameters": dictionary of argument name and its value}.
{{- end }}
Question: {{ .Content }}
{{- if $last }}<Assistant>{{ end }}
{{- else if eq .Role "assistant" }}
<Assistant>
{{- if .ToolCalls }}
{{- range .ToolCalls }}
{"name": "{{ .Function.Name }}", "parameters": {{ .Function.Arguments }}}
{{- end }}
{{- else }}
{{ .Content }}
{{- if not $last }}<endofsentence>{{- end }}
{{- end }}
{{- else if eq .Role "tool" }}<endofsentence><tooloutputsbegin><tooloutputbegin>{{ .Content }}<tooloutputend><tooloutputsend>
{{- if and $last (ne .Role "assistant") }}<Assistant>
{{- end }}
{{- end }}
{{- end }}
{{- else }}
{{- if .System }}
{{ .System }}
{{- end }}
{{- if .Prompt }}
<User>
{{ .Prompt }}
{{- end }}
<Assistant>
{{ .Response }}
{{- if .Response }}{{ end }}
{{- end }}
<!-- gh-comment-id:2731350479 --> @wqerrewetw commented on GitHub (Mar 18, 2025): ```go {{- if .Messages }} {{- if or .System .Tools }} {{- if .System }} {{ .System }} {{- end }} {{- if .Tools }} When using a tool, format as: {"name": "function_name", "parameters": {"param1": "value1"}} The following tools are available when needed for specific tasks: {{ $.Tools }} {{- end }} {{- end }} {{- range $i, $_ := .Messages }} {{- $last := eq (len (slice $.Messages $i)) 1 }} {{- if eq .Role "user" }}<|User|> {{- if and $.Tools $last }} Given the tools, please respond with a JSON object for a function call with its proper arguments that best answers the given prompt. Prioritize specific concurrent tool calls over a single generic tool call. Use tools first, explain what happened after recieving the results. Respond in the format {"name": function name, "parameters": dictionary of argument name and its value}. {{- end }} Question: {{ .Content }} {{- if $last }}<|Assistant|>{{ end }} {{- else if eq .Role "assistant" }} <|Assistant|> {{- if .ToolCalls }} {{- range .ToolCalls }} {"name": "{{ .Function.Name }}", "parameters": {{ .Function.Arguments }}} {{- end }} {{- else }} {{ .Content }} {{- if not $last }}<|end▁of▁sentence|>{{- end }} {{- end }} {{- else if eq .Role "tool" }}<|end▁of▁sentence|><|tool▁outputs▁begin|><|tool▁output▁begin|>{{ .Content }}<|tool▁output▁end|><|tool▁outputs▁end|> {{- if and $last (ne .Role "assistant") }}<|Assistant|> {{- end }} {{- end }} {{- end }} {{- else }} {{- if .System }} {{ .System }} {{- end }} {{- if .Prompt }} <|User|> {{ .Prompt }} {{- end }} <|Assistant|> {{ .Response }} {{- if .Response }}{{ end }} {{- end }} ```
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: github-starred/ollama#6415