rippertnt commited on
Commit
3cd2e08
·
verified ·
1 Parent(s): 4923606

Upload 19 files

Browse files
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ tokenizer.json filter=lfs diff=lfs merge=lfs -text
chat_template.jinja ADDED
@@ -0,0 +1,347 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {%- macro format_parameters(properties, required) -%}
2
+ {%- set standard_keys = ['description', 'type', 'properties', 'required', 'nullable'] -%}
3
+ {%- set ns = namespace(found_first=false) -%}
4
+ {%- for key, value in properties | dictsort -%}
5
+ {%- set add_comma = false -%}
6
+ {%- if key not in standard_keys -%}
7
+ {%- if ns.found_first %},{% endif -%}
8
+ {%- set ns.found_first = true -%}
9
+ {{ key }}:{
10
+ {%- if value['description'] -%}
11
+ description:<|"|>{{ value['description'] }}<|"|>
12
+ {%- set add_comma = true -%}
13
+ {%- endif -%}
14
+ {%- if value['type'] | upper == 'STRING' -%}
15
+ {%- if value['enum'] -%}
16
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
17
+ enum:{{ format_argument(value['enum']) }}
18
+ {%- endif -%}
19
+ {%- elif value['type'] | upper == 'ARRAY' -%}
20
+ {%- if value['items'] is mapping and value['items'] -%}
21
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
22
+ items:{
23
+ {%- set ns_items = namespace(found_first=false) -%}
24
+ {%- for item_key, item_value in value['items'] | dictsort -%}
25
+ {%- if item_value is not none -%}
26
+ {%- if ns_items.found_first %},{% endif -%}
27
+ {%- set ns_items.found_first = true -%}
28
+ {%- if item_key == 'properties' -%}
29
+ properties:{
30
+ {%- if item_value is mapping -%}
31
+ {{- format_parameters(item_value, value['items']['required'] | default([])) -}}
32
+ {%- endif -%}
33
+ }
34
+ {%- elif item_key == 'required' -%}
35
+ required:[
36
+ {%- for req_item in item_value -%}
37
+ <|"|>{{- req_item -}}<|"|>
38
+ {%- if not loop.last %},{% endif -%}
39
+ {%- endfor -%}
40
+ ]
41
+ {%- elif item_key == 'type' -%}
42
+ {%- if item_value is string -%}
43
+ type:{{ format_argument(item_value | upper) }}
44
+ {%- else -%}
45
+ type:{{ format_argument(item_value | map('upper') | list) }}
46
+ {%- endif -%}
47
+ {%- else -%}
48
+ {{ item_key }}:{{ format_argument(item_value) }}
49
+ {%- endif -%}
50
+ {%- endif -%}
51
+ {%- endfor -%}
52
+ }
53
+ {%- endif -%}
54
+ {%- endif -%}
55
+ {%- if value['nullable'] %}
56
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
57
+ nullable:true
58
+ {%- endif -%}
59
+ {%- if value['type'] | upper == 'OBJECT' -%}
60
+ {%- if value['properties'] is defined and value['properties'] is mapping -%}
61
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
62
+ properties:{
63
+ {{- format_parameters(value['properties'], value['required'] | default([])) -}}
64
+ }
65
+ {%- elif value is mapping -%}
66
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
67
+ properties:{
68
+ {{- format_parameters(value, value['required'] | default([])) -}}
69
+ }
70
+ {%- endif -%}
71
+ {%- if value['required'] -%}
72
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
73
+ required:[
74
+ {%- for item in value['required'] | default([]) -%}
75
+ <|"|>{{- item -}}<|"|>
76
+ {%- if not loop.last %},{% endif -%}
77
+ {%- endfor -%}
78
+ ]
79
+ {%- endif -%}
80
+ {%- endif -%}
81
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
82
+ type:<|"|>{{ value['type'] | upper }}<|"|>}
83
+ {%- endif -%}
84
+ {%- endfor -%}
85
+ {%- endmacro -%}
86
+ {%- macro format_function_declaration(tool_data) -%}
87
+ declaration:{{- tool_data['function']['name'] -}}{description:<|"|>{{- tool_data['function']['description'] -}}<|"|>
88
+ {%- set params = tool_data['function']['parameters'] -%}
89
+ {%- if params -%}
90
+ ,parameters:{
91
+ {%- if params['properties'] -%}
92
+ properties:{ {{- format_parameters(params['properties'], params['required']) -}} },
93
+ {%- endif -%}
94
+ {%- if params['required'] -%}
95
+ required:[
96
+ {%- for item in params['required'] -%}
97
+ <|"|>{{- item -}}<|"|>
98
+ {{- ',' if not loop.last -}}
99
+ {%- endfor -%}
100
+ ],
101
+ {%- endif -%}
102
+ {%- if params['type'] -%}
103
+ type:<|"|>{{- params['type'] | upper -}}<|"|>}
104
+ {%- endif -%}
105
+ {%- endif -%}
106
+ {%- if 'response' in tool_data['function'] -%}
107
+ {%- set response_declaration = tool_data['function']['response'] -%}
108
+ ,response:{
109
+ {%- if response_declaration['description'] -%}
110
+ description:<|"|>{{- response_declaration['description'] -}}<|"|>,
111
+ {%- endif -%}
112
+ {%- if response_declaration['type'] | upper == 'OBJECT' -%}
113
+ type:<|"|>{{- response_declaration['type'] | upper -}}<|"|>}
114
+ {%- endif -%}
115
+ {%- endif -%}
116
+ }
117
+ {%- endmacro -%}
118
+ {%- macro format_argument(argument, escape_keys=True) -%}
119
+ {%- if argument is string -%}
120
+ {{- '<|"|>' + argument + '<|"|>' -}}
121
+ {%- elif argument is boolean -%}
122
+ {{- 'true' if argument else 'false' -}}
123
+ {%- elif argument is mapping -%}
124
+ {{- '{' -}}
125
+ {%- set ns = namespace(found_first=false) -%}
126
+ {%- for key, value in argument | dictsort -%}
127
+ {%- if ns.found_first %},{% endif -%}
128
+ {%- set ns.found_first = true -%}
129
+ {%- if escape_keys -%}
130
+ {{- '<|"|>' + key + '<|"|>' -}}
131
+ {%- else -%}
132
+ {{- key -}}
133
+ {%- endif -%}
134
+ :{{- format_argument(value, escape_keys=escape_keys) -}}
135
+ {%- endfor -%}
136
+ {{- '}' -}}
137
+ {%- elif argument is sequence -%}
138
+ {{- '[' -}}
139
+ {%- for item in argument -%}
140
+ {{- format_argument(item, escape_keys=escape_keys) -}}
141
+ {%- if not loop.last %},{% endif -%}
142
+ {%- endfor -%}
143
+ {{- ']' -}}
144
+ {%- else -%}
145
+ {{- argument -}}
146
+ {%- endif -%}
147
+ {%- endmacro -%}
148
+ {%- macro strip_thinking(text) -%}
149
+ {%- set ns = namespace(result='') -%}
150
+ {%- for part in text.split('<channel|>') -%}
151
+ {%- if '<|channel>' in part -%}
152
+ {%- set ns.result = ns.result + part.split('<|channel>')[0] -%}
153
+ {%- else -%}
154
+ {%- set ns.result = ns.result + part -%}
155
+ {%- endif -%}
156
+ {%- endfor -%}
157
+ {{- ns.result | trim -}}
158
+ {%- endmacro -%}
159
+
160
+ {%- macro format_tool_response_block(tool_name, response) -%}
161
+ {{- '<|tool_response>' -}}
162
+ {%- if response is mapping -%}
163
+ {{- 'response:' + tool_name + '{' -}}
164
+ {%- for key, value in response | dictsort -%}
165
+ {{- key -}}:{{- format_argument(value, escape_keys=False) -}}
166
+ {%- if not loop.last %},{% endif -%}
167
+ {%- endfor -%}
168
+ {{- '}' -}}
169
+ {%- else -%}
170
+ {{- 'response:' + tool_name + '{value:' + format_argument(response, escape_keys=False) + '}' -}}
171
+ {%- endif -%}
172
+ {{- '<tool_response|>' -}}
173
+ {%- endmacro -%}
174
+
175
+ {%- set ns = namespace(prev_message_type=None) -%}
176
+ {%- set loop_messages = messages -%}
177
+ {{- bos_token -}}
178
+ {#- Handle System/Tool Definitions Block -#}
179
+ {%- if (enable_thinking is defined and enable_thinking) or tools or messages[0]['role'] in ['system', 'developer'] -%}
180
+ {{- '<|turn>system\n' -}}
181
+
182
+ {#- Inject Thinking token at the very top of the FIRST system turn -#}
183
+ {%- if enable_thinking is defined and enable_thinking -%}
184
+ {{- '<|think|>\n' -}}
185
+ {%- set ns.prev_message_type = 'think' -%}
186
+ {%- endif -%}
187
+
188
+ {%- if messages[0]['role'] in ['system', 'developer'] -%}
189
+ {{- messages[0]['content'] | trim -}}
190
+ {%- set loop_messages = messages[1:] -%}
191
+ {%- endif -%}
192
+
193
+ {%- if tools -%}
194
+ {%- for tool in tools %}
195
+ {{- '<|tool>' -}}
196
+ {{- format_function_declaration(tool) | trim -}}
197
+ {{- '<tool|>' -}}
198
+ {%- endfor %}
199
+ {%- set ns.prev_message_type = 'tool' -%}
200
+ {%- endif -%}
201
+
202
+ {{- '<turn|>\n' -}}
203
+ {%- endif %}
204
+
205
+ {#- Pre-scan: find last user message index for reasoning guard -#}
206
+ {%- set ns_turn = namespace(last_user_idx=-1) -%}
207
+ {%- for i in range(loop_messages | length) -%}
208
+ {%- if loop_messages[i]['role'] == 'user' -%}
209
+ {%- set ns_turn.last_user_idx = i -%}
210
+ {%- endif -%}
211
+ {%- endfor -%}
212
+
213
+ {#- Loop through messages -#}
214
+ {%- for message in loop_messages -%}
215
+ {%- if message['role'] != 'tool' -%}
216
+ {%- set ns.prev_message_type = None -%}
217
+ {%- set role = 'model' if message['role'] == 'assistant' else message['role'] -%}
218
+ {#- Detect continuation: suppress duplicate <|turn>model when previous non-tool message was also assistant -#}
219
+ {%- set prev_nt = namespace(role=None, found=false) -%}
220
+ {%- if loop.index0 > 0 -%}
221
+ {%- for j in range(loop.index0 - 1, -1, -1) -%}
222
+ {%- if not prev_nt.found -%}
223
+ {%- if loop_messages[j]['role'] != 'tool' -%}
224
+ {%- set prev_nt.role = loop_messages[j]['role'] -%}
225
+ {%- set prev_nt.found = true -%}
226
+ {%- endif -%}
227
+ {%- endif -%}
228
+ {%- endfor -%}
229
+ {%- endif -%}
230
+ {%- set continue_same_model_turn = (role == 'model' and prev_nt.role == 'assistant') -%}
231
+ {%- if not continue_same_model_turn -%}
232
+ {{- '<|turn>' + role + '\n' }}
233
+ {%- endif -%}
234
+
235
+ {#- Render reasoning/reasoning_content as thinking channel -#}
236
+ {%- set thinking_text = message.get('reasoning') or message.get('reasoning_content') -%}
237
+ {%- if thinking_text and loop.index0 > ns_turn.last_user_idx and message.get('tool_calls') -%}
238
+ {{- '<|channel>thought\n' + thinking_text + '\n<channel|>' -}}
239
+ {%- endif -%}
240
+
241
+ {%- if message['tool_calls'] -%}
242
+ {%- for tool_call in message['tool_calls'] -%}
243
+ {%- set function = tool_call['function'] -%}
244
+ {{- '<|tool_call>call:' + function['name'] + '{' -}}
245
+ {%- if function['arguments'] is mapping -%}
246
+ {%- set ns_args = namespace(found_first=false) -%}
247
+ {%- for key, value in function['arguments'] | dictsort -%}
248
+ {%- if ns_args.found_first %},{% endif -%}
249
+ {%- set ns_args.found_first = true -%}
250
+ {{- key -}}:{{- format_argument(value, escape_keys=False) -}}
251
+ {%- endfor -%}
252
+ {%- elif function['arguments'] is string -%}
253
+ {{- function['arguments'] -}}
254
+ {%- endif -%}
255
+ {{- '}<tool_call|>' -}}
256
+ {%- endfor -%}
257
+ {%- set ns.prev_message_type = 'tool_call' -%}
258
+ {%- endif -%}
259
+
260
+ {%- set ns_tr_out = namespace(flag=false) -%}
261
+ {%- if message.get('tool_responses') -%}
262
+ {#- Legacy: tool_responses embedded on the assistant message (Google/Gemma native) -#}
263
+ {%- for tool_response in message['tool_responses'] -%}
264
+ {{- format_tool_response_block(tool_response['name'] | default('unknown'), tool_response['response']) -}}
265
+ {%- set ns_tr_out.flag = true -%}
266
+ {%- set ns.prev_message_type = 'tool_response' -%}
267
+ {%- endfor -%}
268
+ {%- elif message.get('tool_calls') -%}
269
+ {#- OpenAI Chat Completions: forward-scan consecutive role:tool messages -#}
270
+ {%- set ns_tool_scan = namespace(stopped=false) -%}
271
+ {%- for k in range(loop.index0 + 1, loop_messages | length) -%}
272
+ {%- if ns_tool_scan.stopped -%}
273
+ {%- elif loop_messages[k]['role'] != 'tool' -%}
274
+ {%- set ns_tool_scan.stopped = true -%}
275
+ {%- else -%}
276
+ {%- set follow = loop_messages[k] -%}
277
+ {#- Resolve tool_call_id to function name -#}
278
+ {%- set ns_tname = namespace(name=follow.get('name') | default('unknown')) -%}
279
+ {%- for tc in message['tool_calls'] -%}
280
+ {%- if tc.get('id') == follow.get('tool_call_id') -%}
281
+ {%- set ns_tname.name = tc['function']['name'] -%}
282
+ {%- endif -%}
283
+ {%- endfor -%}
284
+ {#- Handle content as string or content-parts array -#}
285
+ {%- set tool_body = follow.get('content') -%}
286
+ {%- if tool_body is string -%}
287
+ {{- format_tool_response_block(ns_tname.name, tool_body) -}}
288
+ {%- elif tool_body is sequence and tool_body is not string -%}
289
+ {%- set ns_txt = namespace(s='') -%}
290
+ {%- for part in tool_body -%}
291
+ {%- if part.get('type') == 'text' -%}
292
+ {%- set ns_txt.s = ns_txt.s + (part.get('text') | default('')) -%}
293
+ {%- endif -%}
294
+ {%- endfor -%}
295
+ {{- format_tool_response_block(ns_tname.name, ns_txt.s) -}}
296
+ {%- else -%}
297
+ {{- format_tool_response_block(ns_tname.name, tool_body) -}}
298
+ {%- endif -%}
299
+ {%- set ns_tr_out.flag = true -%}
300
+ {%- set ns.prev_message_type = 'tool_response' -%}
301
+ {%- endif -%}
302
+ {%- endfor -%}
303
+ {%- endif -%}
304
+
305
+ {%- if message['content'] is string -%}
306
+ {%- if role == 'model' -%}
307
+ {{- strip_thinking(message['content']) -}}
308
+ {%- else -%}
309
+ {{- message['content'] | trim -}}
310
+ {%- endif -%}
311
+ {%- elif message['content'] is sequence -%}
312
+ {%- for item in message['content'] -%}
313
+ {%- if item['type'] == 'text' -%}
314
+ {%- if role == 'model' -%}
315
+ {{- strip_thinking(item['text']) -}}
316
+ {%- else -%}
317
+ {{- item['text'] | trim -}}
318
+ {%- endif -%}
319
+ {%- elif item['type'] == 'image' -%}
320
+ {{- '<|image|>' -}}
321
+ {%- set ns.prev_message_type = 'image' -%}
322
+ {%- elif item['type'] == 'audio' -%}
323
+ {{- '<|audio|>' -}}
324
+ {%- set ns.prev_message_type = 'audio' -%}
325
+ {%- elif item['type'] == 'video' -%}
326
+ {{- '<|video|>' -}}
327
+ {%- set ns.prev_message_type = 'video' -%}
328
+ {%- endif -%}
329
+ {%- endfor -%}
330
+ {%- endif -%}
331
+
332
+ {%- if ns.prev_message_type == 'tool_call' and not ns_tr_out.flag -%}
333
+ {{- '<|tool_response>' -}}
334
+ {%- elif not (ns_tr_out.flag and not message.get('content')) -%}
335
+ {{- '<turn|>\n' -}}
336
+ {%- endif -%}
337
+ {%- endif -%}
338
+ {%- endfor -%}
339
+
340
+ {%- if add_generation_prompt -%}
341
+ {%- if ns.prev_message_type != 'tool_response' and ns.prev_message_type != 'tool_call' -%}
342
+ {{- '<|turn>model\n' -}}
343
+ {%- if not enable_thinking | default(false) -%}
344
+ {{- '<|channel>thought\n<channel|>' -}}
345
+ {%- endif -%}
346
+ {%- endif -%}
347
+ {%- endif -%}
config.json ADDED
@@ -0,0 +1,146 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "Gemma4ForConditionalGeneration"
4
+ ],
5
+ "audio_config": null,
6
+ "audio_token_id": 258881,
7
+ "boa_token_id": 256000,
8
+ "boi_token_id": 255999,
9
+ "dtype": "bfloat16",
10
+ "eoa_token_id": 258883,
11
+ "eoa_token_index": 258883,
12
+ "eoi_token_id": 258882,
13
+ "eos_token_id": [
14
+ 1,
15
+ 106
16
+ ],
17
+ "image_token_id": 258880,
18
+ "initializer_range": 0.02,
19
+ "model_type": "gemma4",
20
+ "text_config": {
21
+ "attention_bias": false,
22
+ "attention_dropout": 0.0,
23
+ "attention_k_eq_v": true,
24
+ "bos_token_id": 2,
25
+ "dtype": "bfloat16",
26
+ "enable_moe_block": true,
27
+ "eos_token_id": 1,
28
+ "final_logit_softcapping": 30.0,
29
+ "global_head_dim": 512,
30
+ "head_dim": 256,
31
+ "hidden_activation": "gelu_pytorch_tanh",
32
+ "hidden_size": 2816,
33
+ "hidden_size_per_layer_input": 0,
34
+ "initializer_range": 0.02,
35
+ "intermediate_size": 2112,
36
+ "layer_types": [
37
+ "sliding_attention",
38
+ "sliding_attention",
39
+ "sliding_attention",
40
+ "sliding_attention",
41
+ "sliding_attention",
42
+ "full_attention",
43
+ "sliding_attention",
44
+ "sliding_attention",
45
+ "sliding_attention",
46
+ "sliding_attention",
47
+ "sliding_attention",
48
+ "full_attention",
49
+ "sliding_attention",
50
+ "sliding_attention",
51
+ "sliding_attention",
52
+ "sliding_attention",
53
+ "sliding_attention",
54
+ "full_attention",
55
+ "sliding_attention",
56
+ "sliding_attention",
57
+ "sliding_attention",
58
+ "sliding_attention",
59
+ "sliding_attention",
60
+ "full_attention",
61
+ "sliding_attention",
62
+ "sliding_attention",
63
+ "sliding_attention",
64
+ "sliding_attention",
65
+ "sliding_attention",
66
+ "full_attention"
67
+ ],
68
+ "max_position_embeddings": 262144,
69
+ "model_type": "gemma4_text",
70
+ "moe_intermediate_size": 704,
71
+ "num_attention_heads": 16,
72
+ "num_experts": 128,
73
+ "num_global_key_value_heads": 2,
74
+ "num_hidden_layers": 30,
75
+ "num_key_value_heads": 8,
76
+ "num_kv_shared_layers": 0,
77
+ "pad_token_id": 0,
78
+ "rms_norm_eps": 1e-06,
79
+ "rope_parameters": {
80
+ "full_attention": {
81
+ "partial_rotary_factor": 0.25,
82
+ "rope_theta": 1000000.0,
83
+ "rope_type": "proportional"
84
+ },
85
+ "sliding_attention": {
86
+ "rope_theta": 10000.0,
87
+ "rope_type": "default"
88
+ }
89
+ },
90
+ "sliding_window": 1024,
91
+ "tie_word_embeddings": true,
92
+ "top_k_experts": 8,
93
+ "use_bidirectional_attention": "vision",
94
+ "use_cache": true,
95
+ "use_double_wide_mlp": false,
96
+ "vocab_size": 262144,
97
+ "vocab_size_per_layer_input": 262144
98
+ },
99
+ "tie_word_embeddings": true,
100
+ "transformers_version": "5.5.0",
101
+ "video_token_id": 258884,
102
+ "vision_config": {
103
+ "_name_or_path": "",
104
+ "architectures": null,
105
+ "attention_bias": false,
106
+ "attention_dropout": 0.0,
107
+ "chunk_size_feed_forward": 0,
108
+ "default_output_length": 280,
109
+ "dtype": "bfloat16",
110
+ "global_head_dim": 72,
111
+ "head_dim": 72,
112
+ "hidden_activation": "gelu_pytorch_tanh",
113
+ "hidden_size": 1152,
114
+ "id2label": {
115
+ "0": "LABEL_0",
116
+ "1": "LABEL_1"
117
+ },
118
+ "initializer_range": 0.02,
119
+ "intermediate_size": 4304,
120
+ "is_encoder_decoder": false,
121
+ "label2id": {
122
+ "LABEL_0": 0,
123
+ "LABEL_1": 1
124
+ },
125
+ "max_position_embeddings": 131072,
126
+ "model_type": "gemma4_vision",
127
+ "num_attention_heads": 16,
128
+ "num_hidden_layers": 27,
129
+ "num_key_value_heads": 16,
130
+ "output_attentions": false,
131
+ "output_hidden_states": false,
132
+ "patch_size": 16,
133
+ "pooling_kernel_size": 3,
134
+ "position_embedding_size": 10240,
135
+ "problem_type": null,
136
+ "return_dict": true,
137
+ "rms_norm_eps": 1e-06,
138
+ "rope_parameters": {
139
+ "rope_theta": 100.0,
140
+ "rope_type": "default"
141
+ },
142
+ "standardize": true,
143
+ "use_clipped_linears": false
144
+ },
145
+ "vision_soft_tokens_per_image": 280
146
+ }
generation_config.json ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "bos_token_id": 2,
3
+ "do_sample": true,
4
+ "eos_token_id": [
5
+ 1,
6
+ 106,
7
+ 50
8
+ ],
9
+ "pad_token_id": 0,
10
+ "temperature": 1.0,
11
+ "top_k": 64,
12
+ "top_p": 0.95,
13
+ "transformers_version": "5.5.0"
14
+ }
openvino_config.json ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "dtype": "int4",
3
+ "input_info": null,
4
+ "optimum_version": "2.1.0.dev0",
5
+ "output_attentions": false,
6
+ "quantization_config": {
7
+ "_dataset_kwargs": {},
8
+ "dataset": null,
9
+ "default_config": {
10
+ "quant_method": "default"
11
+ },
12
+ "ignored_scope": null,
13
+ "num_samples": null,
14
+ "processor": "google/gemma-4-26B-A4B-it",
15
+ "quantization_configs": {
16
+ "lm_model": {
17
+ "_dataset_kwargs": {},
18
+ "all_layers": true,
19
+ "backup_precision": null,
20
+ "bits": 4,
21
+ "dataset": null,
22
+ "dq_group_size": null,
23
+ "dtype": "int4",
24
+ "gptq": null,
25
+ "group_size": 64,
26
+ "group_size_fallback": null,
27
+ "ignored_scope": {
28
+ "patterns": [
29
+ ".*router.*"
30
+ ]
31
+ },
32
+ "lora_correction": null,
33
+ "num_samples": null,
34
+ "processor": "google/gemma-4-26B-A4B-it",
35
+ "quant_method": "awq",
36
+ "ratio": 1.0,
37
+ "scale_estimation": null,
38
+ "sensitivity_metric": null,
39
+ "statistics_path": null,
40
+ "sym": false,
41
+ "tokenizer": "google/gemma-4-26B-A4B-it"
42
+ }
43
+ },
44
+ "tokenizer": "google/gemma-4-26B-A4B-it"
45
+ },
46
+ "save_onnx_model": false,
47
+ "transformers_version": "5.5.0"
48
+ }
openvino_detokenizer.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:461919bda7b546453e903052588c578e3e94e9e8215b7cec07cb00cb97459d13
3
+ size 4413547
openvino_detokenizer.xml ADDED
@@ -0,0 +1,302 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <net name="detokenizer" version="11">
3
+ <layers>
4
+ <layer id="0" name="Parameter_281118" type="Parameter" version="opset1">
5
+ <data shape="?,?" element_type="i64" />
6
+ <output>
7
+ <port id="0" precision="I64" names="Parameter_281118">
8
+ <dim>-1</dim>
9
+ <dim>-1</dim>
10
+ </port>
11
+ </output>
12
+ </layer>
13
+ <layer id="1" name="Convert_281153" type="Convert" version="opset1">
14
+ <data destination_type="i32" />
15
+ <input>
16
+ <port id="0" precision="I64">
17
+ <dim>-1</dim>
18
+ <dim>-1</dim>
19
+ </port>
20
+ </input>
21
+ <output>
22
+ <port id="1" precision="I32">
23
+ <dim>-1</dim>
24
+ <dim>-1</dim>
25
+ </port>
26
+ </output>
27
+ </layer>
28
+ <layer id="2" name="Constant_281074" type="Const" version="opset1">
29
+ <data element_type="i32" shape="262144" offset="0" size="1048576" />
30
+ <output>
31
+ <port id="0" precision="I32">
32
+ <dim>262144</dim>
33
+ </port>
34
+ </output>
35
+ </layer>
36
+ <layer id="3" name="Constant_281076" type="Const" version="opset1">
37
+ <data element_type="i32" shape="262144" offset="1048576" size="1048576" />
38
+ <output>
39
+ <port id="0" precision="I32">
40
+ <dim>262144</dim>
41
+ </port>
42
+ </output>
43
+ </layer>
44
+ <layer id="4" name="Constant_281078" type="Const" version="opset1">
45
+ <data element_type="u8" shape="2316295" offset="2097152" size="2316295" />
46
+ <output>
47
+ <port id="0" precision="U8">
48
+ <dim>2316295</dim>
49
+ </port>
50
+ </output>
51
+ </layer>
52
+ <layer id="5" name="Slice_281123" type="Const" version="opset1">
53
+ <data element_type="i32" shape="24" offset="4413447" size="96" />
54
+ <output>
55
+ <port id="0" precision="I32">
56
+ <dim>24</dim>
57
+ </port>
58
+ </output>
59
+ </layer>
60
+ <layer id="6" name="VocabDecoder_281125" type="VocabDecoder" version="extension">
61
+ <data skip_tokens="" />
62
+ <input>
63
+ <port id="0" precision="I32">
64
+ <dim>-1</dim>
65
+ <dim>-1</dim>
66
+ </port>
67
+ <port id="1" precision="I32">
68
+ <dim>262144</dim>
69
+ </port>
70
+ <port id="2" precision="I32">
71
+ <dim>262144</dim>
72
+ </port>
73
+ <port id="3" precision="U8">
74
+ <dim>2316295</dim>
75
+ </port>
76
+ <port id="4" precision="I32">
77
+ <dim>24</dim>
78
+ </port>
79
+ </input>
80
+ <output>
81
+ <port id="5" precision="I32">
82
+ <dim>-1</dim>
83
+ </port>
84
+ <port id="6" precision="I32">
85
+ <dim>-1</dim>
86
+ </port>
87
+ <port id="7" precision="I32">
88
+ <dim>-1</dim>
89
+ </port>
90
+ <port id="8" precision="I32">
91
+ <dim>-1</dim>
92
+ </port>
93
+ <port id="9" precision="U8">
94
+ <dim>-1</dim>
95
+ </port>
96
+ </output>
97
+ </layer>
98
+ <layer id="7" name="Constant_281127" type="Const" version="opset1">
99
+ <data element_type="u8" shape="3" offset="4413543" size="3" />
100
+ <output>
101
+ <port id="0" precision="U8">
102
+ <dim>3</dim>
103
+ </port>
104
+ </output>
105
+ </layer>
106
+ <layer id="8" name="Constant_281129" type="Const" version="opset1">
107
+ <data element_type="u8" shape="1" offset="4413546" size="1" />
108
+ <output>
109
+ <port id="0" precision="U8">
110
+ <dim>1</dim>
111
+ </port>
112
+ </output>
113
+ </layer>
114
+ <layer id="9" name="RegexNormalization_281130" type="RegexNormalization" version="extension">
115
+ <data global_replace="true" />
116
+ <input>
117
+ <port id="0" precision="I32">
118
+ <dim>-1</dim>
119
+ </port>
120
+ <port id="1" precision="I32">
121
+ <dim>-1</dim>
122
+ </port>
123
+ <port id="2" precision="U8">
124
+ <dim>-1</dim>
125
+ </port>
126
+ <port id="3" precision="U8">
127
+ <dim>3</dim>
128
+ </port>
129
+ <port id="4" precision="U8">
130
+ <dim>1</dim>
131
+ </port>
132
+ </input>
133
+ <output>
134
+ <port id="5" precision="I32">
135
+ <dim>-1</dim>
136
+ </port>
137
+ <port id="6" precision="I32">
138
+ <dim>-1</dim>
139
+ </port>
140
+ <port id="7" precision="U8">
141
+ <dim>-1</dim>
142
+ </port>
143
+ </output>
144
+ </layer>
145
+ <layer id="10" name="ByteFallback_281131" type="ByteFallback" version="extension">
146
+ <input>
147
+ <port id="0" precision="I32">
148
+ <dim>-1</dim>
149
+ </port>
150
+ <port id="1" precision="I32">
151
+ <dim>-1</dim>
152
+ </port>
153
+ <port id="2" precision="U8">
154
+ <dim>-1</dim>
155
+ </port>
156
+ </input>
157
+ <output>
158
+ <port id="3" precision="I32">
159
+ <dim>-1</dim>
160
+ </port>
161
+ <port id="4" precision="I32">
162
+ <dim>-1</dim>
163
+ </port>
164
+ <port id="5" precision="U8">
165
+ <dim>-1</dim>
166
+ </port>
167
+ </output>
168
+ </layer>
169
+ <layer id="11" name="FuzeRagged_281132" type="FuzeRagged" version="extension">
170
+ <input>
171
+ <port id="0" precision="I32">
172
+ <dim>-1</dim>
173
+ </port>
174
+ <port id="1" precision="I32">
175
+ <dim>-1</dim>
176
+ </port>
177
+ <port id="2" precision="I32">
178
+ <dim>-1</dim>
179
+ </port>
180
+ <port id="3" precision="I32">
181
+ <dim>-1</dim>
182
+ </port>
183
+ </input>
184
+ <output>
185
+ <port id="4" precision="I32">
186
+ <dim>-1</dim>
187
+ </port>
188
+ <port id="5" precision="I32">
189
+ <dim>-1</dim>
190
+ </port>
191
+ </output>
192
+ </layer>
193
+ <layer id="12" name="UTF8Validate_281133" type="UTF8Validate" version="extension">
194
+ <data replace_mode="true" />
195
+ <input>
196
+ <port id="0" precision="I32">
197
+ <dim>-1</dim>
198
+ </port>
199
+ <port id="1" precision="I32">
200
+ <dim>-1</dim>
201
+ </port>
202
+ <port id="2" precision="U8">
203
+ <dim>-1</dim>
204
+ </port>
205
+ </input>
206
+ <output>
207
+ <port id="3" precision="I32">
208
+ <dim>-1</dim>
209
+ </port>
210
+ <port id="4" precision="I32">
211
+ <dim>-1</dim>
212
+ </port>
213
+ <port id="5" precision="U8">
214
+ <dim>-1</dim>
215
+ </port>
216
+ </output>
217
+ </layer>
218
+ <layer id="13" name="StringTensorPack_281134" type="StringTensorPack" version="opset15">
219
+ <input>
220
+ <port id="0" precision="I32">
221
+ <dim>-1</dim>
222
+ </port>
223
+ <port id="1" precision="I32">
224
+ <dim>-1</dim>
225
+ </port>
226
+ <port id="2" precision="U8">
227
+ <dim>-1</dim>
228
+ </port>
229
+ </input>
230
+ <output>
231
+ <port id="3" precision="STRING" names="Result_281135,string_output">
232
+ <dim>-1</dim>
233
+ </port>
234
+ </output>
235
+ </layer>
236
+ <layer id="14" name="Result_281135" type="Result" version="opset1" output_names="Result_281135,string_output">
237
+ <input>
238
+ <port id="0" precision="STRING">
239
+ <dim>-1</dim>
240
+ </port>
241
+ </input>
242
+ </layer>
243
+ </layers>
244
+ <edges>
245
+ <edge from-layer="0" from-port="0" to-layer="1" to-port="0" />
246
+ <edge from-layer="1" from-port="1" to-layer="6" to-port="0" />
247
+ <edge from-layer="2" from-port="0" to-layer="6" to-port="1" />
248
+ <edge from-layer="3" from-port="0" to-layer="6" to-port="2" />
249
+ <edge from-layer="4" from-port="0" to-layer="6" to-port="3" />
250
+ <edge from-layer="5" from-port="0" to-layer="6" to-port="4" />
251
+ <edge from-layer="6" from-port="7" to-layer="9" to-port="0" />
252
+ <edge from-layer="6" from-port="8" to-layer="9" to-port="1" />
253
+ <edge from-layer="6" from-port="9" to-layer="9" to-port="2" />
254
+ <edge from-layer="6" from-port="6" to-layer="11" to-port="1" />
255
+ <edge from-layer="6" from-port="5" to-layer="11" to-port="0" />
256
+ <edge from-layer="7" from-port="0" to-layer="9" to-port="3" />
257
+ <edge from-layer="8" from-port="0" to-layer="9" to-port="4" />
258
+ <edge from-layer="9" from-port="6" to-layer="10" to-port="1" />
259
+ <edge from-layer="9" from-port="7" to-layer="10" to-port="2" />
260
+ <edge from-layer="9" from-port="5" to-layer="10" to-port="0" />
261
+ <edge from-layer="10" from-port="3" to-layer="11" to-port="2" />
262
+ <edge from-layer="10" from-port="4" to-layer="11" to-port="3" />
263
+ <edge from-layer="10" from-port="5" to-layer="12" to-port="2" />
264
+ <edge from-layer="11" from-port="4" to-layer="12" to-port="0" />
265
+ <edge from-layer="11" from-port="5" to-layer="12" to-port="1" />
266
+ <edge from-layer="12" from-port="3" to-layer="13" to-port="0" />
267
+ <edge from-layer="12" from-port="4" to-layer="13" to-port="1" />
268
+ <edge from-layer="12" from-port="5" to-layer="13" to-port="2" />
269
+ <edge from-layer="13" from-port="3" to-layer="14" to-port="0" />
270
+ </edges>
271
+ <rt_info>
272
+ <info name="OpenVINO Runtime" value="2026.2.0-21553-ed55e5f2bd5" />
273
+ <add_attention_mask value="True" />
274
+ <add_prefix_space />
275
+ <add_special_tokens value="True" />
276
+ <bos_token_id value="2" />
277
+ <chat_template value="{%- macro format_parameters(properties, required) -%}&#10; {%- set standard_keys = ['description', 'type', 'properties', 'required', 'nullable'] -%}&#10; {%- set ns = namespace(found_first=false) -%}&#10; {%- for key, value in properties | dictsort -%}&#10; {%- set add_comma = false -%}&#10; {%- if key not in standard_keys -%}&#10; {%- if ns.found_first %},{% endif -%}&#10; {%- set ns.found_first = true -%}&#10; {{ key }}:{&#10; {%- if value['description'] -%}&#10; description:&lt;|&quot;|>{{ value['description'] }}&lt;|&quot;|>&#10; {%- set add_comma = true -%}&#10; {%- endif -%}&#10; {%- if value['type'] | upper == 'STRING' -%}&#10; {%- if value['enum'] -%}&#10; {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}&#10; enum:{{ format_argument(value['enum']) }}&#10; {%- endif -%}&#10; {%- elif value['type'] | upper == 'ARRAY' -%}&#10; {%- if value['items'] is mapping and value['items'] -%}&#10; {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}&#10; items:{&#10; {%- set ns_items = namespace(found_first=false) -%}&#10; {%- for item_key, item_value in value['items'] | dictsort -%}&#10; {%- if item_value is not none -%}&#10; {%- if ns_items.found_first %},{% endif -%}&#10; {%- set ns_items.found_first = true -%}&#10; {%- if item_key == 'properties' -%}&#10; properties:{&#10; {%- if item_value is mapping -%}&#10; {{- format_parameters(item_value, value['items']['required'] | default([])) -}}&#10; {%- endif -%}&#10; }&#10; {%- elif item_key == 'required' -%}&#10; required:[&#10; {%- for req_item in item_value -%}&#10; &lt;|&quot;|>{{- req_item -}}&lt;|&quot;|>&#10; {%- if not loop.last %},{% endif -%}&#10; {%- endfor -%}&#10; ]&#10; {%- elif item_key == 'type' -%}&#10; {%- if item_value is string -%}&#10; type:{{ format_argument(item_value | upper) }}&#10; {%- else -%}&#10; type:{{ format_argument(item_value | map('upper') | list) }}&#10; {%- endif -%}&#10; {%- else -%}&#10; {{ item_key }}:{{ format_argument(item_value) }}&#10; {%- endif -%}&#10; {%- endif -%}&#10; {%- endfor -%}&#10; }&#10; {%- endif -%}&#10; {%- endif -%}&#10; {%- if value['nullable'] %}&#10; {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}&#10; nullable:true&#10; {%- endif -%}&#10; {%- if value['type'] | upper == 'OBJECT' -%}&#10; {%- if value['properties'] is defined and value['properties'] is mapping -%}&#10; {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}&#10; properties:{&#10; {{- format_parameters(value['properties'], value['required'] | default([])) -}}&#10; }&#10; {%- elif value is mapping -%}&#10; {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}&#10; properties:{&#10; {{- format_parameters(value, value['required'] | default([])) -}}&#10; }&#10; {%- endif -%}&#10; {%- if value['required'] -%}&#10; {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}&#10; required:[&#10; {%- for item in value['required'] | default([]) -%}&#10; &lt;|&quot;|>{{- item -}}&lt;|&quot;|>&#10; {%- if not loop.last %},{% endif -%}&#10; {%- endfor -%}&#10; ]&#10; {%- endif -%}&#10; {%- endif -%}&#10; {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}&#10; type:&lt;|&quot;|>{{ value['type'] | upper }}&lt;|&quot;|>}&#10; {%- endif -%}&#10; {%- endfor -%}&#10;{%- endmacro -%}&#10;{%- macro format_function_declaration(tool_data) -%}&#10; declaration:{{- tool_data['function']['name'] -}}{description:&lt;|&quot;|>{{- tool_data['function']['description'] -}}&lt;|&quot;|>&#10; {%- set params = tool_data['function']['parameters'] -%}&#10; {%- if params -%}&#10; ,parameters:{&#10; {%- if params['properties'] -%}&#10; properties:{ {{- format_parameters(params['properties'], params['required']) -}} },&#10; {%- endif -%}&#10; {%- if params['required'] -%}&#10; required:[&#10; {%- for item in params['required'] -%}&#10; &lt;|&quot;|>{{- item -}}&lt;|&quot;|>&#10; {{- ',' if not loop.last -}}&#10; {%- endfor -%}&#10; ],&#10; {%- endif -%}&#10; {%- if params['type'] -%}&#10; type:&lt;|&quot;|>{{- params['type'] | upper -}}&lt;|&quot;|>}&#10; {%- endif -%}&#10; {%- endif -%}&#10; {%- if 'response' in tool_data['function'] -%}&#10; {%- set response_declaration = tool_data['function']['response'] -%}&#10; ,response:{&#10; {%- if response_declaration['description'] -%}&#10; description:&lt;|&quot;|>{{- response_declaration['description'] -}}&lt;|&quot;|>,&#10; {%- endif -%}&#10; {%- if response_declaration['type'] | upper == 'OBJECT' -%}&#10; type:&lt;|&quot;|>{{- response_declaration['type'] | upper -}}&lt;|&quot;|>}&#10; {%- endif -%}&#10; {%- endif -%}&#10; }&#10;{%- endmacro -%}&#10;{%- macro format_argument(argument, escape_keys=True) -%}&#10; {%- if argument is string -%}&#10; {{- '&lt;|&quot;|>' + argument + '&lt;|&quot;|>' -}}&#10; {%- elif argument is boolean -%}&#10; {{- 'true' if argument else 'false' -}}&#10; {%- elif argument is mapping -%}&#10; {{- '{' -}}&#10; {%- set ns = namespace(found_first=false) -%}&#10; {%- for key, value in argument | dictsort -%}&#10; {%- if ns.found_first %},{% endif -%}&#10; {%- set ns.found_first = true -%}&#10; {%- if escape_keys -%}&#10; {{- '&lt;|&quot;|>' + key + '&lt;|&quot;|>' -}}&#10; {%- else -%}&#10; {{- key -}}&#10; {%- endif -%}&#10; :{{- format_argument(value, escape_keys=escape_keys) -}}&#10; {%- endfor -%}&#10; {{- '}' -}}&#10; {%- elif argument is sequence -%}&#10; {{- '[' -}}&#10; {%- for item in argument -%}&#10; {{- format_argument(item, escape_keys=escape_keys) -}}&#10; {%- if not loop.last %},{% endif -%}&#10; {%- endfor -%}&#10; {{- ']' -}}&#10; {%- else -%}&#10; {{- argument -}}&#10; {%- endif -%}&#10;{%- endmacro -%}&#10;{%- macro strip_thinking(text) -%}&#10; {%- set ns = namespace(result='') -%}&#10; {%- for part in text.split('&lt;channel|>') -%}&#10; {%- if '&lt;|channel>' in part -%}&#10; {%- set ns.result = ns.result + part.split('&lt;|channel>')[0] -%}&#10; {%- else -%}&#10; {%- set ns.result = ns.result + part -%}&#10; {%- endif -%}&#10; {%- endfor -%}&#10; {{- ns.result | trim -}}&#10;{%- endmacro -%}&#10;&#10;{%- macro format_tool_response_block(tool_name, response) -%}&#10; {{- '&lt;|tool_response>' -}}&#10; {%- if response is mapping -%}&#10; {{- 'response:' + tool_name + '{' -}}&#10; {%- for key, value in response | dictsort -%}&#10; {{- key -}}:{{- format_argument(value, escape_keys=False) -}}&#10; {%- if not loop.last %},{% endif -%}&#10; {%- endfor -%}&#10; {{- '}' -}}&#10; {%- else -%}&#10; {{- 'response:' + tool_name + '{value:' + format_argument(response, escape_keys=False) + '}' -}}&#10; {%- endif -%}&#10; {{- '&lt;tool_response|>' -}}&#10;{%- endmacro -%}&#10;&#10;{%- set ns = namespace(prev_message_type=None) -%}&#10;{%- set loop_messages = messages -%}&#10;{{- bos_token -}}&#10;{#- Handle System/Tool Definitions Block -#}&#10;{%- if (enable_thinking is defined and enable_thinking) or tools or messages[0]['role'] in ['system', 'developer'] -%}&#10; {{- '&lt;|turn>system\n' -}}&#10;&#10; {#- Inject Thinking token at the very top of the FIRST system turn -#}&#10; {%- if enable_thinking is defined and enable_thinking -%}&#10; {{- '&lt;|think|>\n' -}}&#10; {%- set ns.prev_message_type = 'think' -%}&#10; {%- endif -%}&#10;&#10; {%- if messages[0]['role'] in ['system', 'developer'] -%}&#10; {{- messages[0]['content'] | trim -}}&#10; {%- set loop_messages = messages[1:] -%}&#10; {%- endif -%}&#10;&#10; {%- if tools -%}&#10; {%- for tool in tools %}&#10; {{- '&lt;|tool>' -}}&#10; {{- format_function_declaration(tool) | trim -}}&#10; {{- '&lt;tool|>' -}}&#10; {%- endfor %}&#10; {%- set ns.prev_message_type = 'tool' -%}&#10; {%- endif -%}&#10;&#10; {{- '&lt;turn|>\n' -}}&#10;{%- endif %}&#10;&#10;{#- Pre-scan: find last user message index for reasoning guard -#}&#10;{%- set ns_turn = namespace(last_user_idx=-1) -%}&#10;{%- for i in range(loop_messages | length) -%}&#10; {%- if loop_messages[i]['role'] == 'user' -%}&#10; {%- set ns_turn.last_user_idx = i -%}&#10; {%- endif -%}&#10;{%- endfor -%}&#10;&#10;{#- Loop through messages -#}&#10;{%- for message in loop_messages -%}&#10; {%- if message['role'] != 'tool' -%}&#10; {%- set ns.prev_message_type = None -%}&#10; {%- set role = 'model' if message['role'] == 'assistant' else message['role'] -%}&#10; {#- Detect continuation: suppress duplicate &lt;|turn>model when previous non-tool message was also assistant -#}&#10; {%- set prev_nt = namespace(role=None, found=false) -%}&#10; {%- if loop.index0 > 0 -%}&#10; {%- for j in range(loop.index0 - 1, -1, -1) -%}&#10; {%- if not prev_nt.found -%}&#10; {%- if loop_messages[j]['role'] != 'tool' -%}&#10; {%- set prev_nt.role = loop_messages[j]['role'] -%}&#10; {%- set prev_nt.found = true -%}&#10; {%- endif -%}&#10; {%- endif -%}&#10; {%- endfor -%}&#10; {%- endif -%}&#10; {%- set continue_same_model_turn = (role == 'model' and prev_nt.role == 'assistant') -%}&#10; {%- if not continue_same_model_turn -%}&#10; {{- '&lt;|turn>' + role + '\n' }}&#10; {%- endif -%}&#10;&#10; {#- Render reasoning/reasoning_content as thinking channel -#}&#10; {%- set thinking_text = message.get('reasoning') or message.get('reasoning_content') -%}&#10; {%- if thinking_text and loop.index0 > ns_turn.last_user_idx and message.get('tool_calls') -%}&#10; {{- '&lt;|channel>thought\n' + thinking_text + '\n&lt;channel|>' -}}&#10; {%- endif -%}&#10;&#10; {%- if message['tool_calls'] -%}&#10; {%- for tool_call in message['tool_calls'] -%}&#10; {%- set function = tool_call['function'] -%}&#10; {{- '&lt;|tool_call>call:' + function['name'] + '{' -}}&#10; {%- if function['arguments'] is mapping -%}&#10; {%- set ns_args = namespace(found_first=false) -%}&#10; {%- for key, value in function['arguments'] | dictsort -%}&#10; {%- if ns_args.found_first %},{% endif -%}&#10; {%- set ns_args.found_first = true -%}&#10; {{- key -}}:{{- format_argument(value, escape_keys=False) -}}&#10; {%- endfor -%}&#10; {%- elif function['arguments'] is string -%}&#10; {{- function['arguments'] -}}&#10; {%- endif -%}&#10; {{- '}&lt;tool_call|>' -}}&#10; {%- endfor -%}&#10; {%- set ns.prev_message_type = 'tool_call' -%}&#10; {%- endif -%}&#10;&#10; {%- set ns_tr_out = namespace(flag=false) -%}&#10; {%- if message.get('tool_responses') -%}&#10; {#- Legacy: tool_responses embedded on the assistant message (Google/Gemma native) -#}&#10; {%- for tool_response in message['tool_responses'] -%}&#10; {{- format_tool_response_block(tool_response['name'] | default('unknown'), tool_response['response']) -}}&#10; {%- set ns_tr_out.flag = true -%}&#10; {%- set ns.prev_message_type = 'tool_response' -%}&#10; {%- endfor -%}&#10; {%- elif message.get('tool_calls') -%}&#10; {#- OpenAI Chat Completions: forward-scan consecutive role:tool messages -#}&#10; {%- set ns_tool_scan = namespace(stopped=false) -%}&#10; {%- for k in range(loop.index0 + 1, loop_messages | length) -%}&#10; {%- if ns_tool_scan.stopped -%}&#10; {%- elif loop_messages[k]['role'] != 'tool' -%}&#10; {%- set ns_tool_scan.stopped = true -%}&#10; {%- else -%}&#10; {%- set follow = loop_messages[k] -%}&#10; {#- Resolve tool_call_id to function name -#}&#10; {%- set ns_tname = namespace(name=follow.get('name') | default('unknown')) -%}&#10; {%- for tc in message['tool_calls'] -%}&#10; {%- if tc.get('id') == follow.get('tool_call_id') -%}&#10; {%- set ns_tname.name = tc['function']['name'] -%}&#10; {%- endif -%}&#10; {%- endfor -%}&#10; {#- Handle content as string or content-parts array -#}&#10; {%- set tool_body = follow.get('content') -%}&#10; {%- if tool_body is string -%}&#10; {{- format_tool_response_block(ns_tname.name, tool_body) -}}&#10; {%- elif tool_body is sequence and tool_body is not string -%}&#10; {%- set ns_txt = namespace(s='') -%}&#10; {%- for part in tool_body -%}&#10; {%- if part.get('type') == 'text' -%}&#10; {%- set ns_txt.s = ns_txt.s + (part.get('text') | default('')) -%}&#10; {%- endif -%}&#10; {%- endfor -%}&#10; {{- format_tool_response_block(ns_tname.name, ns_txt.s) -}}&#10; {%- else -%}&#10; {{- format_tool_response_block(ns_tname.name, tool_body) -}}&#10; {%- endif -%}&#10; {%- set ns_tr_out.flag = true -%}&#10; {%- set ns.prev_message_type = 'tool_response' -%}&#10; {%- endif -%}&#10; {%- endfor -%}&#10; {%- endif -%}&#10;&#10; {%- if message['content'] is string -%}&#10; {%- if role == 'model' -%}&#10; {{- strip_thinking(message['content']) -}}&#10; {%- else -%}&#10; {{- message['content'] | trim -}}&#10; {%- endif -%}&#10; {%- elif message['content'] is sequence -%}&#10; {%- for item in message['content'] -%}&#10; {%- if item['type'] == 'text' -%}&#10; {%- if role == 'model' -%}&#10; {{- strip_thinking(item['text']) -}}&#10; {%- else -%}&#10; {{- item['text'] | trim -}}&#10; {%- endif -%}&#10; {%- elif item['type'] == 'image' -%}&#10; {{- '&lt;|image|>' -}}&#10; {%- set ns.prev_message_type = 'image' -%}&#10; {%- elif item['type'] == 'audio' -%}&#10; {{- '&lt;|audio|>' -}}&#10; {%- set ns.prev_message_type = 'audio' -%}&#10; {%- elif item['type'] == 'video' -%}&#10; {{- '&lt;|video|>' -}}&#10; {%- set ns.prev_message_type = 'video' -%}&#10; {%- endif -%}&#10; {%- endfor -%}&#10; {%- endif -%}&#10;&#10; {%- if ns.prev_message_type == 'tool_call' and not ns_tr_out.flag -%}&#10; {{- '&lt;|tool_response>' -}}&#10; {%- elif not (ns_tr_out.flag and not message.get('content')) -%}&#10; {{- '&lt;turn|>\n' -}}&#10; {%- endif -%}&#10; {%- endif -%}&#10;{%- endfor -%}&#10;&#10;{%- if add_generation_prompt -%}&#10; {%- if ns.prev_message_type != 'tool_response' and ns.prev_message_type != 'tool_call' -%}&#10; {{- '&lt;|turn>model\n' -}}&#10; {%- if not enable_thinking | default(false) -%}&#10; {{- '&lt;|channel>thought\n&lt;channel|>' -}}&#10; {%- endif -%}&#10; {%- endif -%}&#10;{%- endif -%}&#10;" />
278
+ <clean_up_tokenization_spaces />
279
+ <detokenizer_input_type value="i64" />
280
+ <eos_token_id value="1" />
281
+ <handle_special_tokens_with_re />
282
+ <max_length />
283
+ <number_of_inputs value="1" />
284
+ <openvino_tokenizers_version value="2026.2.0.0-668-cb14978d71b" />
285
+ <openvino_version value="2026.2.0-21553-ed55e5f2bd5" />
286
+ <original_post_processor_template value="{&quot;type&quot;: &quot;TemplateProcessing&quot;, &quot;single&quot;: [{&quot;Sequence&quot;: {&quot;id&quot;: &quot;A&quot;, &quot;type_id&quot;: 0}}], &quot;pair&quot;: [{&quot;Sequence&quot;: {&quot;id&quot;: &quot;A&quot;, &quot;type_id&quot;: 0}}, {&quot;Sequence&quot;: {&quot;id&quot;: &quot;B&quot;, &quot;type_id&quot;: 1}}], &quot;special_tokens&quot;: {}}" />
287
+ <original_tokenizer_class value="&lt;class 'transformers.models.gemma.tokenization_gemma.GemmaTokenizer'>" />
288
+ <pad_token_id value="0" />
289
+ <processed_post_processor_template value="{&quot;single&quot;: {&quot;ids&quot;: [-1], &quot;type_ids&quot;: [0]}, &quot;pair&quot;: {&quot;ids&quot;: [-1, -2], &quot;type_ids&quot;: [0, 1]}}" />
290
+ <sentencepiece_version value="0.2.0" />
291
+ <skip_special_tokens value="True" />
292
+ <streaming_detokenizer value="False" />
293
+ <tiktoken_version value="0.9.0" />
294
+ <tokenizer_output_type value="i64" />
295
+ <tokenizers_version value="0.22.2" />
296
+ <transformers_version value="5.5.0" />
297
+ <use_max_padding value="False" />
298
+ <use_sentencepiece_backend value="False" />
299
+ <utf8_replace_mode value="replace" />
300
+ <with_detokenizer value="True" />
301
+ </rt_info>
302
+ </net>
openvino_language_model.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0e7d50b1740182627f3bb9838b1f8c02ea09287bc20d7f77d9dbdee40a26afc3
3
+ size 13642063885
openvino_language_model.xml ADDED
The diff for this file is too large to render. See raw diff
 
openvino_text_embeddings_model.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2d8dfbdcc2174aa6223621502dc566d9e881b7c3db3ff2e1e96a65cee7827edb
3
+ size 738721800
openvino_text_embeddings_model.xml ADDED
@@ -0,0 +1,211 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <net name="Model3" version="11">
3
+ <layers>
4
+ <layer id="0" name="input" type="Parameter" version="opset1">
5
+ <data shape="?,?" element_type="i64" />
6
+ <output>
7
+ <port id="0" precision="I64" names="input">
8
+ <dim>-1</dim>
9
+ <dim>-1</dim>
10
+ </port>
11
+ </output>
12
+ </layer>
13
+ <layer id="1" name="self.model.model.language_model.embed_tokens.weight" type="Const" version="opset1">
14
+ <data element_type="i8" shape="262144, 2816" offset="0" size="738197504" />
15
+ <output>
16
+ <port id="0" precision="I8">
17
+ <dim>262144</dim>
18
+ <dim>2816</dim>
19
+ </port>
20
+ </output>
21
+ </layer>
22
+ <layer id="2" name="Convert_1732239" type="Convert" version="opset1">
23
+ <data destination_type="f16" />
24
+ <input>
25
+ <port id="0" precision="I8">
26
+ <dim>262144</dim>
27
+ <dim>2816</dim>
28
+ </port>
29
+ </input>
30
+ <output>
31
+ <port id="1" precision="FP16">
32
+ <dim>262144</dim>
33
+ <dim>2816</dim>
34
+ </port>
35
+ </output>
36
+ </layer>
37
+ <layer id="3" name="self.model.model.language_model.embed_tokens.weight/scale" type="Const" version="opset1">
38
+ <data element_type="f16" shape="262144, 1" offset="738197504" size="524288" />
39
+ <output>
40
+ <port id="0" precision="FP16">
41
+ <dim>262144</dim>
42
+ <dim>1</dim>
43
+ </port>
44
+ </output>
45
+ </layer>
46
+ <layer id="4" name="self.model.model.language_model.embed_tokens.weight/fq_weights_0" type="Multiply" version="opset1">
47
+ <data auto_broadcast="numpy" />
48
+ <input>
49
+ <port id="0" precision="FP16">
50
+ <dim>262144</dim>
51
+ <dim>2816</dim>
52
+ </port>
53
+ <port id="1" precision="FP16">
54
+ <dim>262144</dim>
55
+ <dim>1</dim>
56
+ </port>
57
+ </input>
58
+ <output>
59
+ <port id="2" precision="FP16">
60
+ <dim>262144</dim>
61
+ <dim>2816</dim>
62
+ </port>
63
+ </output>
64
+ </layer>
65
+ <layer id="5" name="self.model.model.language_model.embed_tokens.weight/fq_weights_0/convert" type="Convert" version="opset1">
66
+ <data destination_type="f32" />
67
+ <input>
68
+ <port id="0" precision="FP16">
69
+ <dim>262144</dim>
70
+ <dim>2816</dim>
71
+ </port>
72
+ </input>
73
+ <output>
74
+ <port id="1" precision="FP32">
75
+ <dim>262144</dim>
76
+ <dim>2816</dim>
77
+ </port>
78
+ </output>
79
+ </layer>
80
+ <layer id="6" name="__module.model.model.language_model.embed_tokens/aten::embedding/Convert" type="Convert" version="opset1">
81
+ <data destination_type="i32" />
82
+ <input>
83
+ <port id="0" precision="I64">
84
+ <dim>-1</dim>
85
+ <dim>-1</dim>
86
+ </port>
87
+ </input>
88
+ <output>
89
+ <port id="1" precision="I32">
90
+ <dim>-1</dim>
91
+ <dim>-1</dim>
92
+ </port>
93
+ </output>
94
+ </layer>
95
+ <layer id="7" name="__module.model.model.language_model.embed_tokens/aten::embedding/Constant" type="Const" version="opset1">
96
+ <data element_type="i32" shape="" offset="738721792" size="4" />
97
+ <output>
98
+ <port id="0" precision="I32" />
99
+ </output>
100
+ </layer>
101
+ <layer id="8" name="__module.model.model.language_model.embed_tokens/aten::embedding/Gather" type="Gather" version="opset8">
102
+ <data batch_dims="0" />
103
+ <input>
104
+ <port id="0" precision="FP32">
105
+ <dim>262144</dim>
106
+ <dim>2816</dim>
107
+ </port>
108
+ <port id="1" precision="I32">
109
+ <dim>-1</dim>
110
+ <dim>-1</dim>
111
+ </port>
112
+ <port id="2" precision="I32" />
113
+ </input>
114
+ <output>
115
+ <port id="3" precision="FP32" names="14">
116
+ <dim>-1</dim>
117
+ <dim>-1</dim>
118
+ <dim>2816</dim>
119
+ </port>
120
+ </output>
121
+ </layer>
122
+ <layer id="9" name="Constant_86383" type="Const" version="opset1">
123
+ <data element_type="f32" shape="1, 1, 1" offset="738721796" size="4" />
124
+ <output>
125
+ <port id="0" precision="FP32">
126
+ <dim>1</dim>
127
+ <dim>1</dim>
128
+ <dim>1</dim>
129
+ </port>
130
+ </output>
131
+ </layer>
132
+ <layer id="10" name="__module.model.model.language_model.embed_tokens/aten::mul/Multiply" type="Multiply" version="opset1">
133
+ <data auto_broadcast="numpy" />
134
+ <input>
135
+ <port id="0" precision="FP32">
136
+ <dim>-1</dim>
137
+ <dim>-1</dim>
138
+ <dim>2816</dim>
139
+ </port>
140
+ <port id="1" precision="FP32">
141
+ <dim>1</dim>
142
+ <dim>1</dim>
143
+ <dim>1</dim>
144
+ </port>
145
+ </input>
146
+ <output>
147
+ <port id="2" precision="FP32" names="inputs_embeds">
148
+ <dim>-1</dim>
149
+ <dim>-1</dim>
150
+ <dim>2816</dim>
151
+ </port>
152
+ </output>
153
+ </layer>
154
+ <layer id="11" name="Result_84307" type="Result" version="opset1" output_names="inputs_embeds">
155
+ <input>
156
+ <port id="0" precision="FP32">
157
+ <dim>-1</dim>
158
+ <dim>-1</dim>
159
+ <dim>2816</dim>
160
+ </port>
161
+ </input>
162
+ </layer>
163
+ </layers>
164
+ <edges>
165
+ <edge from-layer="0" from-port="0" to-layer="6" to-port="0" />
166
+ <edge from-layer="1" from-port="0" to-layer="2" to-port="0" />
167
+ <edge from-layer="2" from-port="1" to-layer="4" to-port="0" />
168
+ <edge from-layer="3" from-port="0" to-layer="4" to-port="1" />
169
+ <edge from-layer="4" from-port="2" to-layer="5" to-port="0" />
170
+ <edge from-layer="5" from-port="1" to-layer="8" to-port="0" />
171
+ <edge from-layer="6" from-port="1" to-layer="8" to-port="1" />
172
+ <edge from-layer="7" from-port="0" to-layer="8" to-port="2" />
173
+ <edge from-layer="8" from-port="3" to-layer="10" to-port="0" />
174
+ <edge from-layer="9" from-port="0" to-layer="10" to-port="1" />
175
+ <edge from-layer="10" from-port="2" to-layer="11" to-port="0" />
176
+ </edges>
177
+ <rt_info>
178
+ <info name="OpenVINO Runtime" value="2026.2.0-21553-ed55e5f2bd5" />
179
+ <Runtime_version value="2026.2.0-21553-ed55e5f2bd5" />
180
+ <conversion_parameters>
181
+ <framework value="pytorch" />
182
+ <is_python_object value="True" />
183
+ </conversion_parameters>
184
+ <nncf>
185
+ <friendly_names_were_updated value="True" />
186
+ <version value="3.1.0" />
187
+ <weight_compression>
188
+ <advanced_parameters value="{'statistics_path': None, 'lora_adapter_rank': 256, 'group_size_fallback_mode': 'error', 'min_adjusted_group_size': 32, 'awq_params': {'subset_size': 32, 'percent_to_apply': 0.002, 'alpha_min': 0.0, 'alpha_max': 1.0, 'steps': 100, 'prefer_data_aware_scaling': True}, 'scale_estimation_params': {'subset_size': 64, 'initial_steps': 5, 'scale_steps': 5, 'weight_penalty': -1.0}, 'gptq_params': {'damp_percent': 0.1, 'block_size': 128, 'subset_size': 128}, 'lora_correction_params': {'adapter_rank': 8, 'num_iterations': 3, 'apply_regularization': True, 'subset_size': 128, 'use_int8_adapters': True}, 'backend_params': {}, 'codebook': None, 'adaptive_codebook_params': {'value_type': 'f8e4m3', 'across_blocks': False, 'num_elements': 16}}" />
189
+ <all_layers value="False" />
190
+ <awq value="False" />
191
+ <backup_mode value="int8_asym" />
192
+ <compression_format value="dequantize" />
193
+ <gptq value="False" />
194
+ <group_size value="-1" />
195
+ <ignored_scope value="[]" />
196
+ <lora_correction value="False" />
197
+ <mode value="int8_sym" />
198
+ <ratio value="1.0" />
199
+ <scale_estimation value="False" />
200
+ <sensitivity_metric value="weight_quantization_error" />
201
+ </weight_compression>
202
+ </nncf>
203
+ <optimum>
204
+ <nncf_version value="3.1.0" />
205
+ <optimum_intel_version value="1.27.0.dev0+6baab95" />
206
+ <optimum_version value="2.1.0.dev0" />
207
+ <pytorch_version value="2.10.0+cu130" />
208
+ <transformers_version value="5.5.0" />
209
+ </optimum>
210
+ </rt_info>
211
+ </net>
openvino_text_embeddings_per_layer_model.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:57fda7ab0340cda71819a3ecd5f9e52e346260fe840fddcc9c87d3614b5a815b
3
+ size 20
openvino_text_embeddings_per_layer_model.xml ADDED
@@ -0,0 +1,139 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <net name="Model9" version="11">
3
+ <layers>
4
+ <layer id="0" name="input_ids" type="Parameter" version="opset1">
5
+ <data shape="?,?" element_type="i64" />
6
+ <output>
7
+ <port id="0" precision="I64" names="input_ids">
8
+ <dim>-1</dim>
9
+ <dim>-1</dim>
10
+ </port>
11
+ </output>
12
+ </layer>
13
+ <layer id="1" name="aten::zeros/Convert" type="Const" version="opset1">
14
+ <data element_type="f32" shape="" offset="0" size="4" />
15
+ <output>
16
+ <port id="0" precision="FP32" />
17
+ </output>
18
+ </layer>
19
+ <layer id="2" name="aten::size/ShapeOf" type="ShapeOf" version="opset3">
20
+ <data output_type="i64" />
21
+ <input>
22
+ <port id="0" precision="I64">
23
+ <dim>-1</dim>
24
+ <dim>-1</dim>
25
+ </port>
26
+ </input>
27
+ <output>
28
+ <port id="1" precision="I64">
29
+ <dim>2</dim>
30
+ </port>
31
+ </output>
32
+ </layer>
33
+ <layer id="3" name="Constant_278552" type="Const" version="opset1">
34
+ <data element_type="i64" shape="1" offset="4" size="8" />
35
+ <output>
36
+ <port id="0" precision="I64">
37
+ <dim>1</dim>
38
+ </port>
39
+ </output>
40
+ </layer>
41
+ <layer id="4" name="Constant_278553" type="Const" version="opset1">
42
+ <data element_type="i64" shape="1" offset="12" size="8" />
43
+ <output>
44
+ <port id="0" precision="I64">
45
+ <dim>1</dim>
46
+ </port>
47
+ </output>
48
+ </layer>
49
+ <layer id="5" name="prim::ListConstruct/SequenceMark" type="Concat" version="opset1">
50
+ <data axis="0" />
51
+ <input>
52
+ <port id="0" precision="I64">
53
+ <dim>2</dim>
54
+ </port>
55
+ <port id="1" precision="I64">
56
+ <dim>1</dim>
57
+ </port>
58
+ <port id="2" precision="I64">
59
+ <dim>1</dim>
60
+ </port>
61
+ </input>
62
+ <output>
63
+ <port id="3" precision="I64">
64
+ <dim>4</dim>
65
+ </port>
66
+ </output>
67
+ </layer>
68
+ <layer id="6" name="aten::zeros/Broadcast" type="Broadcast" version="opset3">
69
+ <data mode="numpy" />
70
+ <input>
71
+ <port id="0" precision="FP32" />
72
+ <port id="1" precision="I64">
73
+ <dim>4</dim>
74
+ </port>
75
+ </input>
76
+ <output>
77
+ <port id="2" precision="FP32" names="text_embeds_per_layer">
78
+ <dim>-1</dim>
79
+ <dim>-1</dim>
80
+ <dim>30</dim>
81
+ <dim>0</dim>
82
+ </port>
83
+ </output>
84
+ </layer>
85
+ <layer id="7" name="Result_278594" type="Result" version="opset1" output_names="text_embeds_per_layer">
86
+ <input>
87
+ <port id="0" precision="FP32">
88
+ <dim>-1</dim>
89
+ <dim>-1</dim>
90
+ <dim>30</dim>
91
+ <dim>0</dim>
92
+ </port>
93
+ </input>
94
+ </layer>
95
+ </layers>
96
+ <edges>
97
+ <edge from-layer="0" from-port="0" to-layer="2" to-port="0" />
98
+ <edge from-layer="1" from-port="0" to-layer="6" to-port="0" />
99
+ <edge from-layer="2" from-port="1" to-layer="5" to-port="0" />
100
+ <edge from-layer="3" from-port="0" to-layer="5" to-port="1" />
101
+ <edge from-layer="4" from-port="0" to-layer="5" to-port="2" />
102
+ <edge from-layer="5" from-port="3" to-layer="6" to-port="1" />
103
+ <edge from-layer="6" from-port="2" to-layer="7" to-port="0" />
104
+ </edges>
105
+ <rt_info>
106
+ <info name="OpenVINO Runtime" value="2026.2.0-21553-ed55e5f2bd5" />
107
+ <Runtime_version value="2026.2.0-21553-ed55e5f2bd5" />
108
+ <conversion_parameters>
109
+ <framework value="pytorch" />
110
+ <is_python_object value="True" />
111
+ </conversion_parameters>
112
+ <nncf>
113
+ <friendly_names_were_updated value="True" />
114
+ <version value="3.1.0" />
115
+ <weight_compression>
116
+ <advanced_parameters value="{'statistics_path': None, 'lora_adapter_rank': 256, 'group_size_fallback_mode': 'error', 'min_adjusted_group_size': 32, 'awq_params': {'subset_size': 32, 'percent_to_apply': 0.002, 'alpha_min': 0.0, 'alpha_max': 1.0, 'steps': 100, 'prefer_data_aware_scaling': True}, 'scale_estimation_params': {'subset_size': 64, 'initial_steps': 5, 'scale_steps': 5, 'weight_penalty': -1.0}, 'gptq_params': {'damp_percent': 0.1, 'block_size': 128, 'subset_size': 128}, 'lora_correction_params': {'adapter_rank': 8, 'num_iterations': 3, 'apply_regularization': True, 'subset_size': 128, 'use_int8_adapters': True}, 'backend_params': {}, 'codebook': None, 'adaptive_codebook_params': {'value_type': 'f8e4m3', 'across_blocks': False, 'num_elements': 16}}" />
117
+ <all_layers value="False" />
118
+ <awq value="False" />
119
+ <backup_mode value="int8_asym" />
120
+ <compression_format value="dequantize" />
121
+ <gptq value="False" />
122
+ <group_size value="-1" />
123
+ <ignored_scope value="[]" />
124
+ <lora_correction value="False" />
125
+ <mode value="int8_sym" />
126
+ <ratio value="1.0" />
127
+ <scale_estimation value="False" />
128
+ <sensitivity_metric value="weight_quantization_error" />
129
+ </weight_compression>
130
+ </nncf>
131
+ <optimum>
132
+ <nncf_version value="3.1.0" />
133
+ <optimum_intel_version value="1.27.0.dev0+6baab95" />
134
+ <optimum_version value="2.1.0.dev0" />
135
+ <pytorch_version value="2.10.0+cu130" />
136
+ <transformers_version value="5.5.0" />
137
+ </optimum>
138
+ </rt_info>
139
+ </net>
openvino_tokenizer.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d151f48d29ba9d22fdf0f071cd16cb68e5f8fba51a5489c3d2df8e29030e4a13
3
+ size 17270328
openvino_tokenizer.xml ADDED
@@ -0,0 +1,798 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <net name="tokenizer" version="11">
3
+ <layers>
4
+ <layer id="0" name="Parameter_280986" type="Parameter" version="opset1">
5
+ <data shape="?" element_type="string" />
6
+ <output>
7
+ <port id="0" precision="STRING" names="Parameter_280986">
8
+ <dim>-1</dim>
9
+ </port>
10
+ </output>
11
+ </layer>
12
+ <layer id="1" name="Constant_280992" type="Const" version="opset1">
13
+ <data element_type="i64" shape="" offset="0" size="8" />
14
+ <output>
15
+ <port id="0" precision="I64" />
16
+ </output>
17
+ </layer>
18
+ <layer id="2" name="StringTensorUnpack_280987" type="StringTensorUnpack" version="opset15">
19
+ <input>
20
+ <port id="0" precision="STRING">
21
+ <dim>-1</dim>
22
+ </port>
23
+ </input>
24
+ <output>
25
+ <port id="1" precision="I32">
26
+ <dim>-1</dim>
27
+ </port>
28
+ <port id="2" precision="I32">
29
+ <dim>-1</dim>
30
+ </port>
31
+ <port id="3" precision="U8">
32
+ <dim>-1</dim>
33
+ </port>
34
+ </output>
35
+ </layer>
36
+ <layer id="3" name="ShapeOf_280988" type="ShapeOf" version="opset3">
37
+ <data output_type="i64" />
38
+ <input>
39
+ <port id="0" precision="I32">
40
+ <dim>-1</dim>
41
+ </port>
42
+ </input>
43
+ <output>
44
+ <port id="1" precision="I64">
45
+ <dim>1</dim>
46
+ </port>
47
+ </output>
48
+ </layer>
49
+ <layer id="4" name="Constant_280989" type="Const" version="opset1">
50
+ <data element_type="i64" shape="" offset="0" size="8" />
51
+ <output>
52
+ <port id="0" precision="I64" />
53
+ </output>
54
+ </layer>
55
+ <layer id="5" name="Constant_280990" type="Const" version="opset1">
56
+ <data element_type="i64" shape="" offset="0" size="8" />
57
+ <output>
58
+ <port id="0" precision="I64" />
59
+ </output>
60
+ </layer>
61
+ <layer id="6" name="Gather_280991" type="Gather" version="opset8">
62
+ <data batch_dims="0" />
63
+ <input>
64
+ <port id="0" precision="I64">
65
+ <dim>1</dim>
66
+ </port>
67
+ <port id="1" precision="I64" />
68
+ <port id="2" precision="I64" />
69
+ </input>
70
+ <output>
71
+ <port id="3" precision="I64" />
72
+ </output>
73
+ </layer>
74
+ <layer id="7" name="Constant_280993" type="Const" version="opset1">
75
+ <data element_type="i64" shape="" offset="8" size="8" />
76
+ <output>
77
+ <port id="0" precision="I64" />
78
+ </output>
79
+ </layer>
80
+ <layer id="8" name="Range_280994" type="Range" version="opset4">
81
+ <data output_type="i32" />
82
+ <input>
83
+ <port id="0" precision="I64" />
84
+ <port id="1" precision="I64" />
85
+ <port id="2" precision="I64" />
86
+ </input>
87
+ <output>
88
+ <port id="3" precision="I32">
89
+ <dim>-1</dim>
90
+ </port>
91
+ </output>
92
+ </layer>
93
+ <layer id="9" name="Constant_280995" type="Const" version="opset1">
94
+ <data element_type="i64" shape="" offset="8" size="8" />
95
+ <output>
96
+ <port id="0" precision="I64" />
97
+ </output>
98
+ </layer>
99
+ <layer id="10" name="Constant_280996" type="Const" version="opset1">
100
+ <data element_type="i64" shape="" offset="8" size="8" />
101
+ <output>
102
+ <port id="0" precision="I64" />
103
+ </output>
104
+ </layer>
105
+ <layer id="11" name="Add_280997" type="Add" version="opset1">
106
+ <data auto_broadcast="numpy" />
107
+ <input>
108
+ <port id="0" precision="I64" />
109
+ <port id="1" precision="I64" />
110
+ </input>
111
+ <output>
112
+ <port id="2" precision="I64" />
113
+ </output>
114
+ </layer>
115
+ <layer id="12" name="Constant_280998" type="Const" version="opset1">
116
+ <data element_type="i64" shape="" offset="8" size="8" />
117
+ <output>
118
+ <port id="0" precision="I64" />
119
+ </output>
120
+ </layer>
121
+ <layer id="13" name="Range_280999" type="Range" version="opset4">
122
+ <data output_type="i32" />
123
+ <input>
124
+ <port id="0" precision="I64" />
125
+ <port id="1" precision="I64" />
126
+ <port id="2" precision="I64" />
127
+ </input>
128
+ <output>
129
+ <port id="3" precision="I32">
130
+ <dim>-1</dim>
131
+ </port>
132
+ </output>
133
+ </layer>
134
+ <layer id="14" name="Constant_281063" type="Const" version="opset1">
135
+ <data element_type="u8" shape="301" offset="16" size="301" />
136
+ <output>
137
+ <port id="0" precision="U8">
138
+ <dim>301</dim>
139
+ </port>
140
+ </output>
141
+ </layer>
142
+ <layer id="15" name="SpecialTokensSplit_281064" type="SpecialTokensSplit" version="extension">
143
+ <input>
144
+ <port id="0" precision="I32">
145
+ <dim>-1</dim>
146
+ </port>
147
+ <port id="1" precision="I32">
148
+ <dim>-1</dim>
149
+ </port>
150
+ <port id="2" precision="I32">
151
+ <dim>-1</dim>
152
+ </port>
153
+ <port id="3" precision="I32">
154
+ <dim>-1</dim>
155
+ </port>
156
+ <port id="4" precision="U8">
157
+ <dim>-1</dim>
158
+ </port>
159
+ <port id="5" precision="U8">
160
+ <dim>301</dim>
161
+ </port>
162
+ </input>
163
+ <output>
164
+ <port id="6" precision="I32">
165
+ <dim>-1</dim>
166
+ </port>
167
+ <port id="7" precision="I32">
168
+ <dim>-1</dim>
169
+ </port>
170
+ <port id="8" precision="I32">
171
+ <dim>-1</dim>
172
+ </port>
173
+ <port id="9" precision="I32">
174
+ <dim>-1</dim>
175
+ </port>
176
+ <port id="10" precision="U8">
177
+ <dim>-1</dim>
178
+ </port>
179
+ <port id="11" precision="BOOL">
180
+ <dim>-1</dim>
181
+ </port>
182
+ </output>
183
+ </layer>
184
+ <layer id="16" name="Constant_281066" type="Const" version="opset1">
185
+ <data element_type="u8" shape="1" offset="317" size="1" />
186
+ <output>
187
+ <port id="0" precision="U8">
188
+ <dim>1</dim>
189
+ </port>
190
+ </output>
191
+ </layer>
192
+ <layer id="17" name="Constant_281068" type="Const" version="opset1">
193
+ <data element_type="u8" shape="3" offset="318" size="3" />
194
+ <output>
195
+ <port id="0" precision="U8">
196
+ <dim>3</dim>
197
+ </port>
198
+ </output>
199
+ </layer>
200
+ <layer id="18" name="RegexNormalization_281069" type="RegexNormalization" version="extension">
201
+ <data global_replace="true" />
202
+ <input>
203
+ <port id="0" precision="I32">
204
+ <dim>-1</dim>
205
+ </port>
206
+ <port id="1" precision="I32">
207
+ <dim>-1</dim>
208
+ </port>
209
+ <port id="2" precision="U8">
210
+ <dim>-1</dim>
211
+ </port>
212
+ <port id="3" precision="BOOL">
213
+ <dim>-1</dim>
214
+ </port>
215
+ <port id="4" precision="U8">
216
+ <dim>1</dim>
217
+ </port>
218
+ <port id="5" precision="U8">
219
+ <dim>3</dim>
220
+ </port>
221
+ </input>
222
+ <output>
223
+ <port id="6" precision="I32">
224
+ <dim>-1</dim>
225
+ </port>
226
+ <port id="7" precision="I32">
227
+ <dim>-1</dim>
228
+ </port>
229
+ <port id="8" precision="U8">
230
+ <dim>-1</dim>
231
+ </port>
232
+ <port id="9" precision="BOOL">
233
+ <dim>-1</dim>
234
+ </port>
235
+ </output>
236
+ </layer>
237
+ <layer id="19" name="Constant_281071" type="Const" version="opset1">
238
+ <data element_type="u8" shape="1" offset="317" size="1" />
239
+ <output>
240
+ <port id="0" precision="U8">
241
+ <dim>1</dim>
242
+ </port>
243
+ </output>
244
+ </layer>
245
+ <layer id="20" name="RegexSplit_281072" type="RegexSplit" version="extension">
246
+ <data behaviour="mergedwithprevious" invert="false" max_splits="-1" />
247
+ <input>
248
+ <port id="0" precision="I32">
249
+ <dim>-1</dim>
250
+ </port>
251
+ <port id="1" precision="I32">
252
+ <dim>-1</dim>
253
+ </port>
254
+ <port id="2" precision="I32">
255
+ <dim>-1</dim>
256
+ </port>
257
+ <port id="3" precision="I32">
258
+ <dim>-1</dim>
259
+ </port>
260
+ <port id="4" precision="U8">
261
+ <dim>-1</dim>
262
+ </port>
263
+ <port id="5" precision="BOOL">
264
+ <dim>-1</dim>
265
+ </port>
266
+ <port id="6" precision="U8">
267
+ <dim>1</dim>
268
+ </port>
269
+ </input>
270
+ <output>
271
+ <port id="7" precision="I32">
272
+ <dim>-1</dim>
273
+ </port>
274
+ <port id="8" precision="I32">
275
+ <dim>-1</dim>
276
+ </port>
277
+ <port id="9" precision="I32">
278
+ <dim>-1</dim>
279
+ </port>
280
+ <port id="10" precision="I32">
281
+ <dim>-1</dim>
282
+ </port>
283
+ <port id="11" precision="U8">
284
+ <dim>-1</dim>
285
+ </port>
286
+ <port id="12" precision="BOOL">
287
+ <dim>-1</dim>
288
+ </port>
289
+ </output>
290
+ </layer>
291
+ <layer id="21" name="Constant_281074" type="Const" version="opset1">
292
+ <data element_type="i32" shape="262144" offset="321" size="1048576" />
293
+ <output>
294
+ <port id="0" precision="I32">
295
+ <dim>262144</dim>
296
+ </port>
297
+ </output>
298
+ </layer>
299
+ <layer id="22" name="Constant_281076" type="Const" version="opset1">
300
+ <data element_type="i32" shape="262144" offset="1048897" size="1048576" />
301
+ <output>
302
+ <port id="0" precision="I32">
303
+ <dim>262144</dim>
304
+ </port>
305
+ </output>
306
+ </layer>
307
+ <layer id="23" name="Constant_281078" type="Const" version="opset1">
308
+ <data element_type="u8" shape="2316295" offset="2097473" size="2316295" />
309
+ <output>
310
+ <port id="0" precision="U8">
311
+ <dim>2316295</dim>
312
+ </port>
313
+ </output>
314
+ </layer>
315
+ <layer id="24" name="Constant_281086" type="Const" version="opset1">
316
+ <data element_type="i32" shape="514906" offset="4413768" size="2059624" />
317
+ <output>
318
+ <port id="0" precision="I32">
319
+ <dim>514906</dim>
320
+ </port>
321
+ </output>
322
+ </layer>
323
+ <layer id="25" name="Constant_281088" type="Const" version="opset1">
324
+ <data element_type="i32" shape="514906" offset="6473392" size="2059624" />
325
+ <output>
326
+ <port id="0" precision="I32">
327
+ <dim>514906</dim>
328
+ </port>
329
+ </output>
330
+ </layer>
331
+ <layer id="26" name="Constant_281090" type="Const" version="opset1">
332
+ <data element_type="u8" shape="2714340" offset="8533016" size="2714340" />
333
+ <output>
334
+ <port id="0" precision="U8">
335
+ <dim>2714340</dim>
336
+ </port>
337
+ </output>
338
+ </layer>
339
+ <layer id="27" name="Constant_281092" type="Const" version="opset1">
340
+ <data element_type="i32" shape="514906" offset="11247356" size="2059624" />
341
+ <output>
342
+ <port id="0" precision="I32">
343
+ <dim>514906</dim>
344
+ </port>
345
+ </output>
346
+ </layer>
347
+ <layer id="28" name="Constant_281094" type="Const" version="opset1">
348
+ <data element_type="i32" shape="514906" offset="13306980" size="2059624" />
349
+ <output>
350
+ <port id="0" precision="I32">
351
+ <dim>514906</dim>
352
+ </port>
353
+ </output>
354
+ </layer>
355
+ <layer id="29" name="Constant_281096" type="Const" version="opset1">
356
+ <data element_type="u8" shape="1903225" offset="15366604" size="1903225" />
357
+ <output>
358
+ <port id="0" precision="U8">
359
+ <dim>1903225</dim>
360
+ </port>
361
+ </output>
362
+ </layer>
363
+ <layer id="30" name="Constant_281080" type="Const" version="opset1">
364
+ <data element_type="i32" shape="23" offset="17269829" size="92" />
365
+ <output>
366
+ <port id="0" precision="I32">
367
+ <dim>23</dim>
368
+ </port>
369
+ </output>
370
+ </layer>
371
+ <layer id="31" name="Constant_281082" type="Const" version="opset1">
372
+ <data element_type="i32" shape="23" offset="17269921" size="92" />
373
+ <output>
374
+ <port id="0" precision="I32">
375
+ <dim>23</dim>
376
+ </port>
377
+ </output>
378
+ </layer>
379
+ <layer id="32" name="Constant_281084" type="Const" version="opset1">
380
+ <data element_type="u8" shape="198" offset="17270013" size="198" />
381
+ <output>
382
+ <port id="0" precision="U8">
383
+ <dim>198</dim>
384
+ </port>
385
+ </output>
386
+ </layer>
387
+ <layer id="33" name="Constant_281097" type="Const" version="opset1">
388
+ <data element_type="i32" shape="23" offset="17270211" size="92" />
389
+ <output>
390
+ <port id="0" precision="I32">
391
+ <dim>23</dim>
392
+ </port>
393
+ </output>
394
+ </layer>
395
+ <layer id="34" name="BPETokenizer_281098" type="BPETokenizer" version="extension">
396
+ <data unk_token="&lt;unk>" fuse_unk="true" suffix_indicator="" end_suffix="" byte_fallback="true" cache_capacity="52428" />
397
+ <input>
398
+ <port id="0" precision="I32">
399
+ <dim>-1</dim>
400
+ </port>
401
+ <port id="1" precision="I32">
402
+ <dim>-1</dim>
403
+ </port>
404
+ <port id="2" precision="I32">
405
+ <dim>-1</dim>
406
+ </port>
407
+ <port id="3" precision="I32">
408
+ <dim>-1</dim>
409
+ </port>
410
+ <port id="4" precision="U8">
411
+ <dim>-1</dim>
412
+ </port>
413
+ <port id="5" precision="I32">
414
+ <dim>262144</dim>
415
+ </port>
416
+ <port id="6" precision="I32">
417
+ <dim>262144</dim>
418
+ </port>
419
+ <port id="7" precision="U8">
420
+ <dim>2316295</dim>
421
+ </port>
422
+ <port id="8" precision="I32">
423
+ <dim>514906</dim>
424
+ </port>
425
+ <port id="9" precision="I32">
426
+ <dim>514906</dim>
427
+ </port>
428
+ <port id="10" precision="U8">
429
+ <dim>2714340</dim>
430
+ </port>
431
+ <port id="11" precision="I32">
432
+ <dim>514906</dim>
433
+ </port>
434
+ <port id="12" precision="I32">
435
+ <dim>514906</dim>
436
+ </port>
437
+ <port id="13" precision="U8">
438
+ <dim>1903225</dim>
439
+ </port>
440
+ <port id="14" precision="I32">
441
+ <dim>23</dim>
442
+ </port>
443
+ <port id="15" precision="I32">
444
+ <dim>23</dim>
445
+ </port>
446
+ <port id="16" precision="U8">
447
+ <dim>198</dim>
448
+ </port>
449
+ <port id="17" precision="I32">
450
+ <dim>23</dim>
451
+ </port>
452
+ </input>
453
+ <output>
454
+ <port id="18" precision="I32">
455
+ <dim>-1</dim>
456
+ </port>
457
+ <port id="19" precision="I32">
458
+ <dim>-1</dim>
459
+ </port>
460
+ <port id="20" precision="I32">
461
+ <dim>-1</dim>
462
+ </port>
463
+ </output>
464
+ </layer>
465
+ <layer id="35" name="Constant_281099" type="Const" version="opset1">
466
+ <data element_type="i32" shape="" offset="17270303" size="4" />
467
+ <output>
468
+ <port id="0" precision="I32" />
469
+ </output>
470
+ </layer>
471
+ <layer id="36" name="Constant_281101" type="Const" version="opset1">
472
+ <data element_type="u8" shape="4" offset="17270307" size="4" />
473
+ <output>
474
+ <port id="0" precision="U8">
475
+ <dim>4</dim>
476
+ </port>
477
+ </output>
478
+ </layer>
479
+ <layer id="37" name="Constant_281103" type="Const" version="opset1">
480
+ <data element_type="u8" shape="13" offset="17270311" size="13" />
481
+ <output>
482
+ <port id="0" precision="U8">
483
+ <dim>13</dim>
484
+ </port>
485
+ </output>
486
+ </layer>
487
+ <layer id="38" name="Truncate_281104" type="Truncate" version="extension">
488
+ <data m_num_inputs="1" />
489
+ <input>
490
+ <port id="0" precision="I32">
491
+ <dim>-1</dim>
492
+ </port>
493
+ <port id="1" precision="I32">
494
+ <dim>-1</dim>
495
+ </port>
496
+ <port id="2" precision="I32">
497
+ <dim>-1</dim>
498
+ </port>
499
+ <port id="3" precision="I32" />
500
+ <port id="4" precision="U8">
501
+ <dim>4</dim>
502
+ </port>
503
+ <port id="5" precision="U8">
504
+ <dim>13</dim>
505
+ </port>
506
+ </input>
507
+ <output>
508
+ <port id="6" precision="I32">
509
+ <dim>-1</dim>
510
+ </port>
511
+ <port id="7" precision="I32">
512
+ <dim>-1</dim>
513
+ </port>
514
+ <port id="8" precision="I32">
515
+ <dim>-1</dim>
516
+ </port>
517
+ </output>
518
+ </layer>
519
+ <layer id="39" name="Constant_281105" type="Const" version="opset1">
520
+ <data element_type="i32" shape="1" offset="17270324" size="4" />
521
+ <output>
522
+ <port id="0" precision="I32">
523
+ <dim>1</dim>
524
+ </port>
525
+ </output>
526
+ </layer>
527
+ <layer id="40" name="CombineSegments_281106" type="CombineSegments" version="extension">
528
+ <input>
529
+ <port id="0" precision="I32">
530
+ <dim>-1</dim>
531
+ </port>
532
+ <port id="1" precision="I32">
533
+ <dim>-1</dim>
534
+ </port>
535
+ <port id="2" precision="I32">
536
+ <dim>-1</dim>
537
+ </port>
538
+ <port id="3" precision="I32">
539
+ <dim>1</dim>
540
+ </port>
541
+ </input>
542
+ <output>
543
+ <port id="4" precision="I32">
544
+ <dim>-1</dim>
545
+ </port>
546
+ <port id="5" precision="I32">
547
+ <dim>-1</dim>
548
+ </port>
549
+ <port id="6" precision="I32">
550
+ <dim>-1</dim>
551
+ </port>
552
+ <port id="7" precision="I32">
553
+ <dim>-1</dim>
554
+ </port>
555
+ <port id="8" precision="I32">
556
+ <dim>-1</dim>
557
+ </port>
558
+ <port id="9" precision="I32">
559
+ <dim>-1</dim>
560
+ </port>
561
+ </output>
562
+ </layer>
563
+ <layer id="41" name="Subtract_281107" type="Subtract" version="opset1">
564
+ <data auto_broadcast="numpy" />
565
+ <input>
566
+ <port id="0" precision="I32">
567
+ <dim>-1</dim>
568
+ </port>
569
+ <port id="1" precision="I32">
570
+ <dim>-1</dim>
571
+ </port>
572
+ </input>
573
+ <output>
574
+ <port id="2" precision="I32">
575
+ <dim>-1</dim>
576
+ </port>
577
+ </output>
578
+ </layer>
579
+ <layer id="42" name="Constant_281108" type="Const" version="opset1">
580
+ <data element_type="i32" shape="" offset="17270324" size="4" />
581
+ <output>
582
+ <port id="0" precision="I32" />
583
+ </output>
584
+ </layer>
585
+ <layer id="43" name="ReduceMax_281109" type="ReduceMax" version="opset1">
586
+ <data keep_dims="false" />
587
+ <input>
588
+ <port id="0" precision="I32">
589
+ <dim>-1</dim>
590
+ </port>
591
+ <port id="1" precision="I32" />
592
+ </input>
593
+ <output>
594
+ <port id="2" precision="I32" />
595
+ </output>
596
+ </layer>
597
+ <layer id="44" name="Constant_281110" type="Const" version="opset1">
598
+ <data element_type="i32" shape="" offset="17270324" size="4" />
599
+ <output>
600
+ <port id="0" precision="I32" />
601
+ </output>
602
+ </layer>
603
+ <layer id="45" name="RaggedToDense_281111" type="RaggedToDense" version="extension">
604
+ <data pad_right="false" m_pad_max_length="false" />
605
+ <input>
606
+ <port id="0" precision="I32">
607
+ <dim>-1</dim>
608
+ </port>
609
+ <port id="1" precision="I32">
610
+ <dim>-1</dim>
611
+ </port>
612
+ <port id="2" precision="I32">
613
+ <dim>-1</dim>
614
+ </port>
615
+ <port id="3" precision="I32" />
616
+ <port id="4" precision="I32" />
617
+ </input>
618
+ <output>
619
+ <port id="5" precision="I32">
620
+ <dim>-1</dim>
621
+ <dim>-1</dim>
622
+ </port>
623
+ <port id="6" precision="BOOL">
624
+ <dim>-1</dim>
625
+ <dim>-1</dim>
626
+ </port>
627
+ </output>
628
+ </layer>
629
+ <layer id="46" name="Convert_281112" type="Convert" version="opset1">
630
+ <data destination_type="i32" />
631
+ <input>
632
+ <port id="0" precision="BOOL">
633
+ <dim>-1</dim>
634
+ <dim>-1</dim>
635
+ </port>
636
+ </input>
637
+ <output>
638
+ <port id="1" precision="I32">
639
+ <dim>-1</dim>
640
+ <dim>-1</dim>
641
+ </port>
642
+ </output>
643
+ </layer>
644
+ <layer id="47" name="Convert_281112.0" type="Convert" version="opset1">
645
+ <data destination_type="i64" />
646
+ <input>
647
+ <port id="0" precision="I32">
648
+ <dim>-1</dim>
649
+ <dim>-1</dim>
650
+ </port>
651
+ </input>
652
+ <output>
653
+ <port id="1" precision="I64" names="attention_mask">
654
+ <dim>-1</dim>
655
+ <dim>-1</dim>
656
+ </port>
657
+ </output>
658
+ </layer>
659
+ <layer id="48" name="RaggedToDense_281111.0" type="Convert" version="opset1">
660
+ <data destination_type="i64" />
661
+ <input>
662
+ <port id="0" precision="I32">
663
+ <dim>-1</dim>
664
+ <dim>-1</dim>
665
+ </port>
666
+ </input>
667
+ <output>
668
+ <port id="1" precision="I64" names="input_ids">
669
+ <dim>-1</dim>
670
+ <dim>-1</dim>
671
+ </port>
672
+ </output>
673
+ </layer>
674
+ <layer id="49" name="Result_281115" type="Result" version="opset1" output_names="input_ids">
675
+ <input>
676
+ <port id="0" precision="I64">
677
+ <dim>-1</dim>
678
+ <dim>-1</dim>
679
+ </port>
680
+ </input>
681
+ </layer>
682
+ <layer id="50" name="Result_281117" type="Result" version="opset1" output_names="attention_mask">
683
+ <input>
684
+ <port id="0" precision="I64">
685
+ <dim>-1</dim>
686
+ <dim>-1</dim>
687
+ </port>
688
+ </input>
689
+ </layer>
690
+ </layers>
691
+ <edges>
692
+ <edge from-layer="0" from-port="0" to-layer="2" to-port="0" />
693
+ <edge from-layer="1" from-port="0" to-layer="8" to-port="0" />
694
+ <edge from-layer="2" from-port="1" to-layer="3" to-port="0" />
695
+ <edge from-layer="2" from-port="3" to-layer="15" to-port="4" />
696
+ <edge from-layer="2" from-port="2" to-layer="15" to-port="3" />
697
+ <edge from-layer="2" from-port="1" to-layer="15" to-port="2" />
698
+ <edge from-layer="3" from-port="1" to-layer="6" to-port="0" />
699
+ <edge from-layer="4" from-port="0" to-layer="6" to-port="1" />
700
+ <edge from-layer="5" from-port="0" to-layer="6" to-port="2" />
701
+ <edge from-layer="6" from-port="3" to-layer="11" to-port="0" />
702
+ <edge from-layer="6" from-port="3" to-layer="8" to-port="1" />
703
+ <edge from-layer="7" from-port="0" to-layer="8" to-port="2" />
704
+ <edge from-layer="8" from-port="3" to-layer="15" to-port="0" />
705
+ <edge from-layer="9" from-port="0" to-layer="13" to-port="0" />
706
+ <edge from-layer="10" from-port="0" to-layer="11" to-port="1" />
707
+ <edge from-layer="11" from-port="2" to-layer="13" to-port="1" />
708
+ <edge from-layer="12" from-port="0" to-layer="13" to-port="2" />
709
+ <edge from-layer="13" from-port="3" to-layer="15" to-port="1" />
710
+ <edge from-layer="14" from-port="0" to-layer="15" to-port="5" />
711
+ <edge from-layer="15" from-port="11" to-layer="18" to-port="3" />
712
+ <edge from-layer="15" from-port="7" to-layer="20" to-port="1" />
713
+ <edge from-layer="15" from-port="6" to-layer="20" to-port="0" />
714
+ <edge from-layer="15" from-port="10" to-layer="18" to-port="2" />
715
+ <edge from-layer="15" from-port="9" to-layer="18" to-port="1" />
716
+ <edge from-layer="15" from-port="8" to-layer="18" to-port="0" />
717
+ <edge from-layer="16" from-port="0" to-layer="18" to-port="4" />
718
+ <edge from-layer="17" from-port="0" to-layer="18" to-port="5" />
719
+ <edge from-layer="18" from-port="6" to-layer="20" to-port="2" />
720
+ <edge from-layer="18" from-port="7" to-layer="20" to-port="3" />
721
+ <edge from-layer="18" from-port="8" to-layer="20" to-port="4" />
722
+ <edge from-layer="18" from-port="9" to-layer="20" to-port="5" />
723
+ <edge from-layer="19" from-port="0" to-layer="20" to-port="6" />
724
+ <edge from-layer="20" from-port="7" to-layer="34" to-port="0" />
725
+ <edge from-layer="20" from-port="8" to-layer="34" to-port="1" />
726
+ <edge from-layer="20" from-port="9" to-layer="34" to-port="2" />
727
+ <edge from-layer="20" from-port="10" to-layer="34" to-port="3" />
728
+ <edge from-layer="20" from-port="11" to-layer="34" to-port="4" />
729
+ <edge from-layer="21" from-port="0" to-layer="34" to-port="5" />
730
+ <edge from-layer="22" from-port="0" to-layer="34" to-port="6" />
731
+ <edge from-layer="23" from-port="0" to-layer="34" to-port="7" />
732
+ <edge from-layer="24" from-port="0" to-layer="34" to-port="8" />
733
+ <edge from-layer="25" from-port="0" to-layer="34" to-port="9" />
734
+ <edge from-layer="26" from-port="0" to-layer="34" to-port="10" />
735
+ <edge from-layer="27" from-port="0" to-layer="34" to-port="11" />
736
+ <edge from-layer="28" from-port="0" to-layer="34" to-port="12" />
737
+ <edge from-layer="29" from-port="0" to-layer="34" to-port="13" />
738
+ <edge from-layer="30" from-port="0" to-layer="34" to-port="14" />
739
+ <edge from-layer="31" from-port="0" to-layer="34" to-port="15" />
740
+ <edge from-layer="32" from-port="0" to-layer="34" to-port="16" />
741
+ <edge from-layer="33" from-port="0" to-layer="34" to-port="17" />
742
+ <edge from-layer="34" from-port="18" to-layer="38" to-port="0" />
743
+ <edge from-layer="34" from-port="19" to-layer="38" to-port="1" />
744
+ <edge from-layer="34" from-port="20" to-layer="38" to-port="2" />
745
+ <edge from-layer="35" from-port="0" to-layer="38" to-port="3" />
746
+ <edge from-layer="36" from-port="0" to-layer="38" to-port="4" />
747
+ <edge from-layer="37" from-port="0" to-layer="38" to-port="5" />
748
+ <edge from-layer="38" from-port="6" to-layer="40" to-port="0" />
749
+ <edge from-layer="38" from-port="8" to-layer="40" to-port="2" />
750
+ <edge from-layer="38" from-port="7" to-layer="40" to-port="1" />
751
+ <edge from-layer="39" from-port="0" to-layer="40" to-port="3" />
752
+ <edge from-layer="40" from-port="5" to-layer="41" to-port="0" />
753
+ <edge from-layer="40" from-port="4" to-layer="41" to-port="1" />
754
+ <edge from-layer="40" from-port="4" to-layer="45" to-port="0" />
755
+ <edge from-layer="40" from-port="5" to-layer="45" to-port="1" />
756
+ <edge from-layer="40" from-port="6" to-layer="45" to-port="2" />
757
+ <edge from-layer="41" from-port="2" to-layer="43" to-port="0" />
758
+ <edge from-layer="42" from-port="0" to-layer="43" to-port="1" />
759
+ <edge from-layer="43" from-port="2" to-layer="45" to-port="3" />
760
+ <edge from-layer="44" from-port="0" to-layer="45" to-port="4" />
761
+ <edge from-layer="45" from-port="6" to-layer="46" to-port="0" />
762
+ <edge from-layer="45" from-port="5" to-layer="48" to-port="0" />
763
+ <edge from-layer="46" from-port="1" to-layer="47" to-port="0" />
764
+ <edge from-layer="47" from-port="1" to-layer="50" to-port="0" />
765
+ <edge from-layer="48" from-port="1" to-layer="49" to-port="0" />
766
+ </edges>
767
+ <rt_info>
768
+ <info name="OpenVINO Runtime" value="2026.2.0-21553-ed55e5f2bd5" />
769
+ <add_attention_mask value="True" />
770
+ <add_prefix_space />
771
+ <add_special_tokens value="True" />
772
+ <bos_token_id value="2" />
773
+ <chat_template value="{%- macro format_parameters(properties, required) -%}&#10; {%- set standard_keys = ['description', 'type', 'properties', 'required', 'nullable'] -%}&#10; {%- set ns = namespace(found_first=false) -%}&#10; {%- for key, value in properties | dictsort -%}&#10; {%- set add_comma = false -%}&#10; {%- if key not in standard_keys -%}&#10; {%- if ns.found_first %},{% endif -%}&#10; {%- set ns.found_first = true -%}&#10; {{ key }}:{&#10; {%- if value['description'] -%}&#10; description:&lt;|&quot;|>{{ value['description'] }}&lt;|&quot;|>&#10; {%- set add_comma = true -%}&#10; {%- endif -%}&#10; {%- if value['type'] | upper == 'STRING' -%}&#10; {%- if value['enum'] -%}&#10; {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}&#10; enum:{{ format_argument(value['enum']) }}&#10; {%- endif -%}&#10; {%- elif value['type'] | upper == 'ARRAY' -%}&#10; {%- if value['items'] is mapping and value['items'] -%}&#10; {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}&#10; items:{&#10; {%- set ns_items = namespace(found_first=false) -%}&#10; {%- for item_key, item_value in value['items'] | dictsort -%}&#10; {%- if item_value is not none -%}&#10; {%- if ns_items.found_first %},{% endif -%}&#10; {%- set ns_items.found_first = true -%}&#10; {%- if item_key == 'properties' -%}&#10; properties:{&#10; {%- if item_value is mapping -%}&#10; {{- format_parameters(item_value, value['items']['required'] | default([])) -}}&#10; {%- endif -%}&#10; }&#10; {%- elif item_key == 'required' -%}&#10; required:[&#10; {%- for req_item in item_value -%}&#10; &lt;|&quot;|>{{- req_item -}}&lt;|&quot;|>&#10; {%- if not loop.last %},{% endif -%}&#10; {%- endfor -%}&#10; ]&#10; {%- elif item_key == 'type' -%}&#10; {%- if item_value is string -%}&#10; type:{{ format_argument(item_value | upper) }}&#10; {%- else -%}&#10; type:{{ format_argument(item_value | map('upper') | list) }}&#10; {%- endif -%}&#10; {%- else -%}&#10; {{ item_key }}:{{ format_argument(item_value) }}&#10; {%- endif -%}&#10; {%- endif -%}&#10; {%- endfor -%}&#10; }&#10; {%- endif -%}&#10; {%- endif -%}&#10; {%- if value['nullable'] %}&#10; {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}&#10; nullable:true&#10; {%- endif -%}&#10; {%- if value['type'] | upper == 'OBJECT' -%}&#10; {%- if value['properties'] is defined and value['properties'] is mapping -%}&#10; {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}&#10; properties:{&#10; {{- format_parameters(value['properties'], value['required'] | default([])) -}}&#10; }&#10; {%- elif value is mapping -%}&#10; {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}&#10; properties:{&#10; {{- format_parameters(value, value['required'] | default([])) -}}&#10; }&#10; {%- endif -%}&#10; {%- if value['required'] -%}&#10; {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}&#10; required:[&#10; {%- for item in value['required'] | default([]) -%}&#10; &lt;|&quot;|>{{- item -}}&lt;|&quot;|>&#10; {%- if not loop.last %},{% endif -%}&#10; {%- endfor -%}&#10; ]&#10; {%- endif -%}&#10; {%- endif -%}&#10; {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}&#10; type:&lt;|&quot;|>{{ value['type'] | upper }}&lt;|&quot;|>}&#10; {%- endif -%}&#10; {%- endfor -%}&#10;{%- endmacro -%}&#10;{%- macro format_function_declaration(tool_data) -%}&#10; declaration:{{- tool_data['function']['name'] -}}{description:&lt;|&quot;|>{{- tool_data['function']['description'] -}}&lt;|&quot;|>&#10; {%- set params = tool_data['function']['parameters'] -%}&#10; {%- if params -%}&#10; ,parameters:{&#10; {%- if params['properties'] -%}&#10; properties:{ {{- format_parameters(params['properties'], params['required']) -}} },&#10; {%- endif -%}&#10; {%- if params['required'] -%}&#10; required:[&#10; {%- for item in params['required'] -%}&#10; &lt;|&quot;|>{{- item -}}&lt;|&quot;|>&#10; {{- ',' if not loop.last -}}&#10; {%- endfor -%}&#10; ],&#10; {%- endif -%}&#10; {%- if params['type'] -%}&#10; type:&lt;|&quot;|>{{- params['type'] | upper -}}&lt;|&quot;|>}&#10; {%- endif -%}&#10; {%- endif -%}&#10; {%- if 'response' in tool_data['function'] -%}&#10; {%- set response_declaration = tool_data['function']['response'] -%}&#10; ,response:{&#10; {%- if response_declaration['description'] -%}&#10; description:&lt;|&quot;|>{{- response_declaration['description'] -}}&lt;|&quot;|>,&#10; {%- endif -%}&#10; {%- if response_declaration['type'] | upper == 'OBJECT' -%}&#10; type:&lt;|&quot;|>{{- response_declaration['type'] | upper -}}&lt;|&quot;|>}&#10; {%- endif -%}&#10; {%- endif -%}&#10; }&#10;{%- endmacro -%}&#10;{%- macro format_argument(argument, escape_keys=True) -%}&#10; {%- if argument is string -%}&#10; {{- '&lt;|&quot;|>' + argument + '&lt;|&quot;|>' -}}&#10; {%- elif argument is boolean -%}&#10; {{- 'true' if argument else 'false' -}}&#10; {%- elif argument is mapping -%}&#10; {{- '{' -}}&#10; {%- set ns = namespace(found_first=false) -%}&#10; {%- for key, value in argument | dictsort -%}&#10; {%- if ns.found_first %},{% endif -%}&#10; {%- set ns.found_first = true -%}&#10; {%- if escape_keys -%}&#10; {{- '&lt;|&quot;|>' + key + '&lt;|&quot;|>' -}}&#10; {%- else -%}&#10; {{- key -}}&#10; {%- endif -%}&#10; :{{- format_argument(value, escape_keys=escape_keys) -}}&#10; {%- endfor -%}&#10; {{- '}' -}}&#10; {%- elif argument is sequence -%}&#10; {{- '[' -}}&#10; {%- for item in argument -%}&#10; {{- format_argument(item, escape_keys=escape_keys) -}}&#10; {%- if not loop.last %},{% endif -%}&#10; {%- endfor -%}&#10; {{- ']' -}}&#10; {%- else -%}&#10; {{- argument -}}&#10; {%- endif -%}&#10;{%- endmacro -%}&#10;{%- macro strip_thinking(text) -%}&#10; {%- set ns = namespace(result='') -%}&#10; {%- for part in text.split('&lt;channel|>') -%}&#10; {%- if '&lt;|channel>' in part -%}&#10; {%- set ns.result = ns.result + part.split('&lt;|channel>')[0] -%}&#10; {%- else -%}&#10; {%- set ns.result = ns.result + part -%}&#10; {%- endif -%}&#10; {%- endfor -%}&#10; {{- ns.result | trim -}}&#10;{%- endmacro -%}&#10;&#10;{%- macro format_tool_response_block(tool_name, response) -%}&#10; {{- '&lt;|tool_response>' -}}&#10; {%- if response is mapping -%}&#10; {{- 'response:' + tool_name + '{' -}}&#10; {%- for key, value in response | dictsort -%}&#10; {{- key -}}:{{- format_argument(value, escape_keys=False) -}}&#10; {%- if not loop.last %},{% endif -%}&#10; {%- endfor -%}&#10; {{- '}' -}}&#10; {%- else -%}&#10; {{- 'response:' + tool_name + '{value:' + format_argument(response, escape_keys=False) + '}' -}}&#10; {%- endif -%}&#10; {{- '&lt;tool_response|>' -}}&#10;{%- endmacro -%}&#10;&#10;{%- set ns = namespace(prev_message_type=None) -%}&#10;{%- set loop_messages = messages -%}&#10;{{- bos_token -}}&#10;{#- Handle System/Tool Definitions Block -#}&#10;{%- if (enable_thinking is defined and enable_thinking) or tools or messages[0]['role'] in ['system', 'developer'] -%}&#10; {{- '&lt;|turn>system\n' -}}&#10;&#10; {#- Inject Thinking token at the very top of the FIRST system turn -#}&#10; {%- if enable_thinking is defined and enable_thinking -%}&#10; {{- '&lt;|think|>\n' -}}&#10; {%- set ns.prev_message_type = 'think' -%}&#10; {%- endif -%}&#10;&#10; {%- if messages[0]['role'] in ['system', 'developer'] -%}&#10; {{- messages[0]['content'] | trim -}}&#10; {%- set loop_messages = messages[1:] -%}&#10; {%- endif -%}&#10;&#10; {%- if tools -%}&#10; {%- for tool in tools %}&#10; {{- '&lt;|tool>' -}}&#10; {{- format_function_declaration(tool) | trim -}}&#10; {{- '&lt;tool|>' -}}&#10; {%- endfor %}&#10; {%- set ns.prev_message_type = 'tool' -%}&#10; {%- endif -%}&#10;&#10; {{- '&lt;turn|>\n' -}}&#10;{%- endif %}&#10;&#10;{#- Pre-scan: find last user message index for reasoning guard -#}&#10;{%- set ns_turn = namespace(last_user_idx=-1) -%}&#10;{%- for i in range(loop_messages | length) -%}&#10; {%- if loop_messages[i]['role'] == 'user' -%}&#10; {%- set ns_turn.last_user_idx = i -%}&#10; {%- endif -%}&#10;{%- endfor -%}&#10;&#10;{#- Loop through messages -#}&#10;{%- for message in loop_messages -%}&#10; {%- if message['role'] != 'tool' -%}&#10; {%- set ns.prev_message_type = None -%}&#10; {%- set role = 'model' if message['role'] == 'assistant' else message['role'] -%}&#10; {#- Detect continuation: suppress duplicate &lt;|turn>model when previous non-tool message was also assistant -#}&#10; {%- set prev_nt = namespace(role=None, found=false) -%}&#10; {%- if loop.index0 > 0 -%}&#10; {%- for j in range(loop.index0 - 1, -1, -1) -%}&#10; {%- if not prev_nt.found -%}&#10; {%- if loop_messages[j]['role'] != 'tool' -%}&#10; {%- set prev_nt.role = loop_messages[j]['role'] -%}&#10; {%- set prev_nt.found = true -%}&#10; {%- endif -%}&#10; {%- endif -%}&#10; {%- endfor -%}&#10; {%- endif -%}&#10; {%- set continue_same_model_turn = (role == 'model' and prev_nt.role == 'assistant') -%}&#10; {%- if not continue_same_model_turn -%}&#10; {{- '&lt;|turn>' + role + '\n' }}&#10; {%- endif -%}&#10;&#10; {#- Render reasoning/reasoning_content as thinking channel -#}&#10; {%- set thinking_text = message.get('reasoning') or message.get('reasoning_content') -%}&#10; {%- if thinking_text and loop.index0 > ns_turn.last_user_idx and message.get('tool_calls') -%}&#10; {{- '&lt;|channel>thought\n' + thinking_text + '\n&lt;channel|>' -}}&#10; {%- endif -%}&#10;&#10; {%- if message['tool_calls'] -%}&#10; {%- for tool_call in message['tool_calls'] -%}&#10; {%- set function = tool_call['function'] -%}&#10; {{- '&lt;|tool_call>call:' + function['name'] + '{' -}}&#10; {%- if function['arguments'] is mapping -%}&#10; {%- set ns_args = namespace(found_first=false) -%}&#10; {%- for key, value in function['arguments'] | dictsort -%}&#10; {%- if ns_args.found_first %},{% endif -%}&#10; {%- set ns_args.found_first = true -%}&#10; {{- key -}}:{{- format_argument(value, escape_keys=False) -}}&#10; {%- endfor -%}&#10; {%- elif function['arguments'] is string -%}&#10; {{- function['arguments'] -}}&#10; {%- endif -%}&#10; {{- '}&lt;tool_call|>' -}}&#10; {%- endfor -%}&#10; {%- set ns.prev_message_type = 'tool_call' -%}&#10; {%- endif -%}&#10;&#10; {%- set ns_tr_out = namespace(flag=false) -%}&#10; {%- if message.get('tool_responses') -%}&#10; {#- Legacy: tool_responses embedded on the assistant message (Google/Gemma native) -#}&#10; {%- for tool_response in message['tool_responses'] -%}&#10; {{- format_tool_response_block(tool_response['name'] | default('unknown'), tool_response['response']) -}}&#10; {%- set ns_tr_out.flag = true -%}&#10; {%- set ns.prev_message_type = 'tool_response' -%}&#10; {%- endfor -%}&#10; {%- elif message.get('tool_calls') -%}&#10; {#- OpenAI Chat Completions: forward-scan consecutive role:tool messages -#}&#10; {%- set ns_tool_scan = namespace(stopped=false) -%}&#10; {%- for k in range(loop.index0 + 1, loop_messages | length) -%}&#10; {%- if ns_tool_scan.stopped -%}&#10; {%- elif loop_messages[k]['role'] != 'tool' -%}&#10; {%- set ns_tool_scan.stopped = true -%}&#10; {%- else -%}&#10; {%- set follow = loop_messages[k] -%}&#10; {#- Resolve tool_call_id to function name -#}&#10; {%- set ns_tname = namespace(name=follow.get('name') | default('unknown')) -%}&#10; {%- for tc in message['tool_calls'] -%}&#10; {%- if tc.get('id') == follow.get('tool_call_id') -%}&#10; {%- set ns_tname.name = tc['function']['name'] -%}&#10; {%- endif -%}&#10; {%- endfor -%}&#10; {#- Handle content as string or content-parts array -#}&#10; {%- set tool_body = follow.get('content') -%}&#10; {%- if tool_body is string -%}&#10; {{- format_tool_response_block(ns_tname.name, tool_body) -}}&#10; {%- elif tool_body is sequence and tool_body is not string -%}&#10; {%- set ns_txt = namespace(s='') -%}&#10; {%- for part in tool_body -%}&#10; {%- if part.get('type') == 'text' -%}&#10; {%- set ns_txt.s = ns_txt.s + (part.get('text') | default('')) -%}&#10; {%- endif -%}&#10; {%- endfor -%}&#10; {{- format_tool_response_block(ns_tname.name, ns_txt.s) -}}&#10; {%- else -%}&#10; {{- format_tool_response_block(ns_tname.name, tool_body) -}}&#10; {%- endif -%}&#10; {%- set ns_tr_out.flag = true -%}&#10; {%- set ns.prev_message_type = 'tool_response' -%}&#10; {%- endif -%}&#10; {%- endfor -%}&#10; {%- endif -%}&#10;&#10; {%- if message['content'] is string -%}&#10; {%- if role == 'model' -%}&#10; {{- strip_thinking(message['content']) -}}&#10; {%- else -%}&#10; {{- message['content'] | trim -}}&#10; {%- endif -%}&#10; {%- elif message['content'] is sequence -%}&#10; {%- for item in message['content'] -%}&#10; {%- if item['type'] == 'text' -%}&#10; {%- if role == 'model' -%}&#10; {{- strip_thinking(item['text']) -}}&#10; {%- else -%}&#10; {{- item['text'] | trim -}}&#10; {%- endif -%}&#10; {%- elif item['type'] == 'image' -%}&#10; {{- '&lt;|image|>' -}}&#10; {%- set ns.prev_message_type = 'image' -%}&#10; {%- elif item['type'] == 'audio' -%}&#10; {{- '&lt;|audio|>' -}}&#10; {%- set ns.prev_message_type = 'audio' -%}&#10; {%- elif item['type'] == 'video' -%}&#10; {{- '&lt;|video|>' -}}&#10; {%- set ns.prev_message_type = 'video' -%}&#10; {%- endif -%}&#10; {%- endfor -%}&#10; {%- endif -%}&#10;&#10; {%- if ns.prev_message_type == 'tool_call' and not ns_tr_out.flag -%}&#10; {{- '&lt;|tool_response>' -}}&#10; {%- elif not (ns_tr_out.flag and not message.get('content')) -%}&#10; {{- '&lt;turn|>\n' -}}&#10; {%- endif -%}&#10; {%- endif -%}&#10;{%- endfor -%}&#10;&#10;{%- if add_generation_prompt -%}&#10; {%- if ns.prev_message_type != 'tool_response' and ns.prev_message_type != 'tool_call' -%}&#10; {{- '&lt;|turn>model\n' -}}&#10; {%- if not enable_thinking | default(false) -%}&#10; {{- '&lt;|channel>thought\n&lt;channel|>' -}}&#10; {%- endif -%}&#10; {%- endif -%}&#10;{%- endif -%}&#10;" />
774
+ <clean_up_tokenization_spaces />
775
+ <detokenizer_input_type value="i64" />
776
+ <eos_token_id value="1" />
777
+ <handle_special_tokens_with_re />
778
+ <max_length />
779
+ <number_of_inputs value="1" />
780
+ <openvino_tokenizers_version value="2026.2.0.0-668-cb14978d71b" />
781
+ <openvino_version value="2026.2.0-21553-ed55e5f2bd5" />
782
+ <original_post_processor_template value="{&quot;type&quot;: &quot;TemplateProcessing&quot;, &quot;single&quot;: [{&quot;Sequence&quot;: {&quot;id&quot;: &quot;A&quot;, &quot;type_id&quot;: 0}}], &quot;pair&quot;: [{&quot;Sequence&quot;: {&quot;id&quot;: &quot;A&quot;, &quot;type_id&quot;: 0}}, {&quot;Sequence&quot;: {&quot;id&quot;: &quot;B&quot;, &quot;type_id&quot;: 1}}], &quot;special_tokens&quot;: {}}" />
783
+ <original_tokenizer_class value="&lt;class 'transformers.models.gemma.tokenization_gemma.GemmaTokenizer'>" />
784
+ <pad_token_id value="0" />
785
+ <processed_post_processor_template value="{&quot;single&quot;: {&quot;ids&quot;: [-1], &quot;type_ids&quot;: [0]}, &quot;pair&quot;: {&quot;ids&quot;: [-1, -2], &quot;type_ids&quot;: [0, 1]}}" />
786
+ <sentencepiece_version value="0.2.0" />
787
+ <skip_special_tokens value="True" />
788
+ <streaming_detokenizer value="False" />
789
+ <tiktoken_version value="0.9.0" />
790
+ <tokenizer_output_type value="i64" />
791
+ <tokenizers_version value="0.22.2" />
792
+ <transformers_version value="5.5.0" />
793
+ <use_max_padding value="False" />
794
+ <use_sentencepiece_backend value="False" />
795
+ <utf8_replace_mode value="replace" />
796
+ <with_detokenizer value="True" />
797
+ </rt_info>
798
+ </net>
openvino_vision_embeddings_model.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7f2378b7f9fb6b39dbedeb407cad9d8eb2738d904e053e2f70d091928cbef41b
3
+ size 573967772
openvino_vision_embeddings_model.xml ADDED
The diff for this file is too large to render. See raw diff
 
preprocessor_config.json ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "do_convert_rgb": true,
3
+ "do_normalize": false,
4
+ "do_rescale": true,
5
+ "do_resize": true,
6
+ "image_mean": [
7
+ 0.0,
8
+ 0.0,
9
+ 0.0
10
+ ],
11
+ "image_processor_type": "Gemma4ImageProcessor",
12
+ "image_seq_length": 280,
13
+ "image_std": [
14
+ 1.0,
15
+ 1.0,
16
+ 1.0
17
+ ],
18
+ "max_soft_tokens": 280,
19
+ "patch_size": 16,
20
+ "pooling_kernel_size": 3,
21
+ "resample": 3,
22
+ "rescale_factor": 0.00392156862745098
23
+ }
tokenizer.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cc8d3a0ce36466ccc1278bf987df5f71db1719b9ca6b4118264f45cb627bfe0f
3
+ size 32169626
tokenizer_config.json ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "audio_token": "<|audio|>",
3
+ "backend": "tokenizers",
4
+ "boa_token": "<|audio>",
5
+ "boi_token": "<|image>",
6
+ "bos_token": "<bos>",
7
+ "eoa_token": "<audio|>",
8
+ "eoc_token": "<channel|>",
9
+ "eoi_token": "<image|>",
10
+ "eos_token": "<eos>",
11
+ "eot_token": "<turn|>",
12
+ "escape_token": "<|\"|>",
13
+ "etc_token": "<tool_call|>",
14
+ "etd_token": "<tool|>",
15
+ "etr_token": "<tool_response|>",
16
+ "extra_special_tokens": [
17
+ "<|video|>"
18
+ ],
19
+ "image_token": "<|image|>",
20
+ "is_local": false,
21
+ "mask_token": "<mask>",
22
+ "model_max_length": 1000000000000000019884624838656,
23
+ "model_specific_special_tokens": {
24
+ "audio_token": "<|audio|>",
25
+ "boa_token": "<|audio>",
26
+ "boi_token": "<|image>",
27
+ "eoa_token": "<audio|>",
28
+ "eoc_token": "<channel|>",
29
+ "eoi_token": "<image|>",
30
+ "eot_token": "<turn|>",
31
+ "escape_token": "<|\"|>",
32
+ "etc_token": "<tool_call|>",
33
+ "etd_token": "<tool|>",
34
+ "etr_token": "<tool_response|>",
35
+ "image_token": "<|image|>",
36
+ "soc_token": "<|channel>",
37
+ "sot_token": "<|turn>",
38
+ "stc_token": "<|tool_call>",
39
+ "std_token": "<|tool>",
40
+ "str_token": "<|tool_response>",
41
+ "think_token": "<|think|>"
42
+ },
43
+ "pad_token": "<pad>",
44
+ "padding_side": "left",
45
+ "processor_class": "Gemma4Processor",
46
+ "response_schema": {
47
+ "properties": {
48
+ "content": {
49
+ "type": "string"
50
+ },
51
+ "role": {
52
+ "const": "assistant"
53
+ },
54
+ "thinking": {
55
+ "type": "string"
56
+ },
57
+ "tool_calls": {
58
+ "items": {
59
+ "properties": {
60
+ "function": {
61
+ "properties": {
62
+ "arguments": {
63
+ "additionalProperties": {},
64
+ "type": "object",
65
+ "x-parser": "gemma4-tool-call"
66
+ },
67
+ "name": {
68
+ "type": "string"
69
+ }
70
+ },
71
+ "type": "object",
72
+ "x-regex": "call\\:(?P<name>\\w+)(?P<arguments>\\{.*\\})"
73
+ },
74
+ "type": {
75
+ "const": "function"
76
+ }
77
+ },
78
+ "type": "object"
79
+ },
80
+ "type": "array",
81
+ "x-regex-iterator": "<\\|tool_call>(.*?)<tool_call\\|>"
82
+ }
83
+ },
84
+ "type": "object",
85
+ "x-regex": "(\\<\\|channel\\>thought\\n(?P<thinking>.*?)\\<channel\\|\\>)?(?P<content>(?:(?!\\<\\|tool_call\\>)(?!\\<turn\\|\\>).)+)?(?P<tool_calls>\\<\\|tool_call\\>.*\\<tool_call\\|\\>)?(?:\\<turn\\|\\>)?"
86
+ },
87
+ "soc_token": "<|channel>",
88
+ "sot_token": "<|turn>",
89
+ "stc_token": "<|tool_call>",
90
+ "std_token": "<|tool>",
91
+ "str_token": "<|tool_response>",
92
+ "think_token": "<|think|>",
93
+ "tokenizer_class": "GemmaTokenizer",
94
+ "unk_token": "<unk>"
95
+ }