File size: 2,278 Bytes
5e500c2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
{{- bos_token }}
{%- if messages[0]['role'] == 'system' -%}
{%- if messages[1] is not defined or messages[1]['role'] != 'user' -%}
{{- raise_exception("System message must be followed by a user message") }}
{%- endif -%}
{%- set system_content = messages[0]['content'] -%}
{%- set loop_messages = messages[1:] -%}
{%- set first_user_has_system = true -%}
{%- else -%}
{%- set system_content = "" -%}
{%- set loop_messages = messages -%}
{%- set first_user_has_system = false -%}
{%- endif -%}
{%- for message in loop_messages -%}
{%- if (message['role'] == 'user') != (loop.index0 % 2 == 0) -%}
{{- raise_exception("Conversation roles must alternate user/assistant/user/assistant/...") }}
{%- endif -%}
{%- if message['role'] == 'user' -%}
{{- '<|user_start|>' }}
{%- if loop.first and first_user_has_system -%}
{{- system_content + '\n\n' }}
{%- endif -%}
{%- if message['content'] is not string -%}
{{- raise_exception("User messages must contain string content") }}
{%- endif -%}
{{- message['content'] }}
{{- '<|user_end|>' }}
{%- elif message['role'] == 'assistant' -%}
{{- '<|assistant_start|>' }}
{%- if message['content'] is string -%}
{{- message['content'] }}
{%- elif message['content'] is iterable -%}
{%- for part in message['content'] -%}
{%- if part['type'] == 'text' -%}
{{- part.get('text', '') }}
{%- elif part['type'] == 'python' -%}
{{- '<|python_start|>' + part.get('text', '') + '<|python_end|>' }}
{%- elif part['type'] == 'python_output' -%}
{{- '<|output_start|>' + part.get('text', '') + '<|output_end|>' }}
{%- else -%}
{{- raise_exception("Unknown assistant content part: " + part['type']) }}
{%- endif -%}
{%- endfor -%}
{%- else -%}
{{- raise_exception("Unsupported assistant content type") }}
{%- endif -%}
{{- '<|assistant_end|>' }}
{%- endif -%}
{%- endfor -%}
{%- if add_generation_prompt -%}
{{- '<|assistant_start|>' }}
{%- endif -%}
|