|
{{- if .Messages }} |
|
{{- if or .System .Tools }}<|im_start|>system |
|
{{- if .System }} |
|
{{ .System }} |
|
{{- end }} |
|
{{- if .Tools }} |
|
|
|
# Tools |
|
|
|
You may call one or more functions to assist with the user query. |
|
|
|
You are provided with function signatures within <tools></tools> XML tags: |
|
<tools> |
|
{{- range .Tools }} |
|
{"type": "function", "function": {{ .Function }}} |
|
{{- end }} |
|
</tools> |
|
|
|
For each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags: |
|
<tool_call> |
|
{"name": <function-name>, "arguments": <args-json-object>} |
|
</tool_call> |
|
{{- end }}<|im_end|> |
|
{{ end }} |
|
{{- range $i, $_ := .Messages }} |
|
{{- $last := eq (len (slice $.Messages $i)) 1 -}} |
|
{{- if eq .Role "user" }}<|im_start|>user |
|
{{ .Content }}<|im_end|> |
|
{{ else if eq .Role "assistant" }}<|im_start|>assistant |
|
{{ if .Content }}{{ .Content }} |
|
{{- else if .ToolCalls }}<tool_call> |
|
{{ range .ToolCalls }}{"name": "{{ .Function.Name }}", "arguments": {{ .Function.Arguments }}} |
|
{{ end }}</tool_call> |
|
{{- end }}{{ if not $last }}<|im_end|> |
|
{{ end }} |
|
{{- else if eq .Role "tool" }}<|im_start|>user |
|
<tool_response> |
|
{{ .Content }} |
|
</tool_response><|im_end|> |
|
{{ end }} |
|
{{- if and (ne .Role "assistant") $last }}<|im_start|>assistant |
|
{{ end }} |
|
{{- end }} |
|
{{- else }} |
|
{{- if .System }}<|im_start|>system |
|
{{ .System }}<|im_end|> |
|
{{ end }}{{ if .Prompt }}<|im_start|>user |
|
{{ .Prompt }}<|im_end|> |
|
{{ end }}<|im_start|>assistant |
|
{{ end }}{{ .Response }}{{ if .Response }}<|im_end|>{{ end }} |