{#- ───────────────────────────────────────────────────────────────────────── Proteus Chat Template ───────────────────────────────────────────────────────────────────────── Token legend ──────────── <|BOS|> – begins every sequence <|SYSTEM_START|> / <|SYSTEM_END|> – system prompt wrapper (optional) <|USER_START|> / <|USER_END|> – user turn wrapper <|AGENT_START|> / <|AGENT_END|> – assistant turn wrapper <|EOS|> – ends every assistant turn Wire format (no extra whitespace between special tokens) ───────────────────────────────────────────────────────── <|BOS|> [<|SYSTEM_START|>{system}<|SYSTEM_END|>] ← optional, at most once <|USER_START|>{user}<|USER_END|> <|AGENT_START|>{reply}<|AGENT_END|><|EOS|> ... repeated for further turns ... <|USER_START|>{user}<|USER_END|> <|AGENT_START|> ← generation prompt only ───────────────────────────────────────────────────────────────────────── -#} {{- bos_token -}} {#- ── System message (at most once, from the first role="system" entry) ── -#} {%- if messages[0]['role'] == 'system' -%} {{- '<|SYSTEM_START|>' + messages[0]['content'] | trim + '<|SYSTEM_END|>' -}} {%- set messages = messages[1:] -%} {%- endif -%} {#- ── Conversation turns ──────────────────────────────────────────────── -#} {%- for message in messages -%} {%- if message['role'] == 'user' -%} {{- '<|USER_START|>' + message['content'] | trim + '<|USER_END|>' -}} {%- elif message['role'] == 'assistant' -%} {{- '<|AGENT_START|>' + message['content'] | trim + '<|AGENT_END|>' + eos_token -}} {%- else -%} {{- raise_exception("Unsupported role: " + message['role']) -}} {%- endif -%} {%- endfor -%} {#- ── Generation prompt ───────────────────────────────────────────────── -#} {%- if add_generation_prompt -%} {{- '<|AGENT_START|>' -}} {%- endif -%}