|
{{- if .Messages }} |
|
{{- if .Tools }} |
|
{{- "<|im_start|>system\n" }} |
|
{{- if eq (index .Messages 0).Role "system" }} |
|
{{- (index .Messages 0).Content }} |
|
{{- else }} |
|
{{ .System }} |
|
{{- end }} |
|
{{- "\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>" }} |
|
{{- range .Tools }} |
|
{{- "\n" }} |
|
{{- json . }} |
|
{{- end }} |
|
{{- "\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 eq (index .Messages 0).Role "system" }} |
|
{{- "<|im_start|>system\n" }}{{- (index .Messages 0).Content }}{{- "<|im_end|>\n" }} |
|
{{- else }} |
|
{{- "<|im_start|>system\n" }}{{ .System }} |
|
{{- 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 }} |