Escape reserved tokens in untrusted chat inputs

#19
by mvp468 - opened
Files changed (1) hide show
  1. chat_template.jinja +17 -5
chat_template.jinja CHANGED
@@ -1,7 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
  {%- macro render_content(msg) -%}
2
  {%- set c = msg.get('content') -%}
3
  {%- if c is string -%}
4
- {{ c }}
5
  {%- elif c is not none -%}
6
  {% for content in c -%}
7
  {% if content['type'] == 'image' or content['type'] == 'image_url' -%}
@@ -9,7 +21,7 @@
9
  {% elif content['type'] == 'video' or content['type']== 'video_url'-%}
10
  <|kimi_k25_video_placeholder|>
11
  {% else -%}
12
- {{ content['text'] }}
13
  {%- endif -%}
14
  {%- endfor -%}
15
  {%- endif -%}
@@ -17,11 +29,11 @@
17
  {% macro set_roles(message) -%}
18
  {%- set role_name = message.get('name') or message['role'] -%}
19
  {%- if message['role'] == 'user' -%}
20
- <|im_user|>{{role_name}}<|im_middle|>
21
  {%- elif message['role'] == 'assistant' -%}
22
  <|im_assistant|>{{role_name}}<|im_middle|>
23
  {%- else -%}
24
- <|im_system|>{{role_name}}<|im_middle|>
25
  {%- endif -%}
26
  {%- endmacro -%}
27
  {%- macro render_toolcalls(message) -%}
@@ -48,7 +60,7 @@
48
  {{render_toolcalls(message)}}
49
  {%- endif -%}
50
  {%- elif message['role'] == 'tool' -%}
51
- {%- set tool_call_id = message.tool_call_id -%}
52
  ## Return of {{ tool_call_id }}
53
  {{render_content(message)}}
54
  {%- elif message['content'] is not none -%}
 
1
+ {%- macro sanitize_input(value) -%}
2
+ {{- value | replace('<|', '&lt;|') | replace('|>', '|&gt;') -}}
3
+ {%- endmacro -%}
4
+
5
+ {%- macro render_text(msg, text) -%}
6
+ {%- if msg['role'] == 'user' or msg['role'] == 'tool' -%}
7
+ {{- sanitize_input(text) -}}
8
+ {%- else -%}
9
+ {{- text -}}
10
+ {%- endif -%}
11
+ {%- endmacro -%}
12
+
13
  {%- macro render_content(msg) -%}
14
  {%- set c = msg.get('content') -%}
15
  {%- if c is string -%}
16
+ {{ render_text(msg, c) }}
17
  {%- elif c is not none -%}
18
  {% for content in c -%}
19
  {% if content['type'] == 'image' or content['type'] == 'image_url' -%}
 
21
  {% elif content['type'] == 'video' or content['type']== 'video_url'-%}
22
  <|kimi_k25_video_placeholder|>
23
  {% else -%}
24
+ {{ render_text(msg, content['text']) }}
25
  {%- endif -%}
26
  {%- endfor -%}
27
  {%- endif -%}
 
29
  {% macro set_roles(message) -%}
30
  {%- set role_name = message.get('name') or message['role'] -%}
31
  {%- if message['role'] == 'user' -%}
32
+ <|im_user|>{{sanitize_input(role_name)}}<|im_middle|>
33
  {%- elif message['role'] == 'assistant' -%}
34
  <|im_assistant|>{{role_name}}<|im_middle|>
35
  {%- else -%}
36
+ <|im_system|>{{sanitize_input(role_name)}}<|im_middle|>
37
  {%- endif -%}
38
  {%- endmacro -%}
39
  {%- macro render_toolcalls(message) -%}
 
60
  {{render_toolcalls(message)}}
61
  {%- endif -%}
62
  {%- elif message['role'] == 'tool' -%}
63
+ {%- set tool_call_id = sanitize_input(message.tool_call_id) -%}
64
  ## Return of {{ tool_call_id }}
65
  {{render_content(message)}}
66
  {%- elif message['content'] is not none -%}