MiniCPM5-1B-int4-g128-ov / openvino_detokenizer.xml
HarmenWessels's picture
Initial release: first OpenVINO IR of MiniCPM5-1B (int4 g128, no-think rt_info template, probe-validated)
7eb10d3 verified
Raw
History Blame Contribute Delete
17.9 kB
<?xml version="1.0"?>
<net name="detokenizer" version="11">
<layers>
<layer id="0" name="Parameter_79702" type="Parameter" version="opset1">
<data shape="?,?" element_type="i64" />
<output>
<port id="0" precision="I64" names="Parameter_79702">
<dim>-1</dim>
<dim>-1</dim>
</port>
</output>
</layer>
<layer id="1" name="Convert_79738" type="Convert" version="opset1">
<data destination_type="i32" />
<input>
<port id="0" precision="I64">
<dim>-1</dim>
<dim>-1</dim>
</port>
</input>
<output>
<port id="1" precision="I32">
<dim>-1</dim>
<dim>-1</dim>
</port>
</output>
</layer>
<layer id="2" name="Constant_79704" type="Const" version="opset1">
<data element_type="i32" shape="130560" offset="0" size="522240" />
<output>
<port id="0" precision="I32">
<dim>130560</dim>
</port>
</output>
</layer>
<layer id="3" name="Constant_79706" type="Const" version="opset1">
<data element_type="i32" shape="130560" offset="522240" size="522240" />
<output>
<port id="0" precision="I32">
<dim>130560</dim>
</port>
</output>
</layer>
<layer id="4" name="Constant_79708" type="Const" version="opset1">
<data element_type="u8" shape="869396" offset="1044480" size="869396" />
<output>
<port id="0" precision="U8">
<dim>869396</dim>
</port>
</output>
</layer>
<layer id="5" name="Slice_79713" type="Const" version="opset1">
<data element_type="i32" shape="30" offset="1913876" size="120" />
<output>
<port id="0" precision="I32">
<dim>30</dim>
</port>
</output>
</layer>
<layer id="6" name="VocabDecoder_79715" type="VocabDecoder" version="extension">
<data skip_tokens="" />
<input>
<port id="0" precision="I32">
<dim>-1</dim>
<dim>-1</dim>
</port>
<port id="1" precision="I32">
<dim>130560</dim>
</port>
<port id="2" precision="I32">
<dim>130560</dim>
</port>
<port id="3" precision="U8">
<dim>869396</dim>
</port>
<port id="4" precision="I32">
<dim>30</dim>
</port>
</input>
<output>
<port id="5" precision="I32">
<dim>-1</dim>
</port>
<port id="6" precision="I32">
<dim>-1</dim>
</port>
<port id="7" precision="I32">
<dim>-1</dim>
</port>
<port id="8" precision="I32">
<dim>-1</dim>
</port>
<port id="9" precision="U8">
<dim>-1</dim>
</port>
</output>
</layer>
<layer id="7" name="FuzeRagged_79716" type="FuzeRagged" version="extension">
<input>
<port id="0" precision="I32">
<dim>-1</dim>
</port>
<port id="1" precision="I32">
<dim>-1</dim>
</port>
<port id="2" precision="I32">
<dim>-1</dim>
</port>
<port id="3" precision="I32">
<dim>-1</dim>
</port>
</input>
<output>
<port id="4" precision="I32">
<dim>-1</dim>
</port>
<port id="5" precision="I32">
<dim>-1</dim>
</port>
</output>
</layer>
<layer id="8" name="UTF8Validate_79717" type="UTF8Validate" version="extension">
<data replace_mode="true" />
<input>
<port id="0" precision="I32">
<dim>-1</dim>
</port>
<port id="1" precision="I32">
<dim>-1</dim>
</port>
<port id="2" precision="U8">
<dim>-1</dim>
</port>
</input>
<output>
<port id="3" precision="I32">
<dim>-1</dim>
</port>
<port id="4" precision="I32">
<dim>-1</dim>
</port>
<port id="5" precision="U8">
<dim>-1</dim>
</port>
</output>
</layer>
<layer id="9" name="StringTensorPack_79718" type="StringTensorPack" version="opset15">
<input>
<port id="0" precision="I32">
<dim>-1</dim>
</port>
<port id="1" precision="I32">
<dim>-1</dim>
</port>
<port id="2" precision="U8">
<dim>-1</dim>
</port>
</input>
<output>
<port id="3" precision="STRING" names="Result_79719,string_output">
<dim>-1</dim>
</port>
</output>
</layer>
<layer id="10" name="Result_79719" type="Result" version="opset1" output_names="Result_79719,string_output">
<input>
<port id="0" precision="STRING">
<dim>-1</dim>
</port>
</input>
</layer>
</layers>
<edges>
<edge from-layer="0" from-port="0" to-layer="1" to-port="0" />
<edge from-layer="1" from-port="1" to-layer="6" to-port="0" />
<edge from-layer="2" from-port="0" to-layer="6" to-port="1" />
<edge from-layer="3" from-port="0" to-layer="6" to-port="2" />
<edge from-layer="4" from-port="0" to-layer="6" to-port="3" />
<edge from-layer="5" from-port="0" to-layer="6" to-port="4" />
<edge from-layer="6" from-port="5" to-layer="7" to-port="0" />
<edge from-layer="6" from-port="6" to-layer="7" to-port="1" />
<edge from-layer="6" from-port="7" to-layer="7" to-port="2" />
<edge from-layer="6" from-port="8" to-layer="7" to-port="3" />
<edge from-layer="6" from-port="9" to-layer="8" to-port="2" />
<edge from-layer="7" from-port="4" to-layer="8" to-port="0" />
<edge from-layer="7" from-port="5" to-layer="8" to-port="1" />
<edge from-layer="8" from-port="3" to-layer="9" to-port="0" />
<edge from-layer="8" from-port="4" to-layer="9" to-port="1" />
<edge from-layer="8" from-port="5" to-layer="9" to-port="2" />
<edge from-layer="9" from-port="3" to-layer="10" to-port="0" />
</edges>
<rt_info>
<info name="OpenVINO Runtime" value="2026.3.0-22098-367f60d8408" />
<add_attention_mask value="True" />
<add_prefix_space />
<add_special_tokens value="True" />
<bos_token_id value="0" />
<chat_template value="{{- bos_token }}{%- if tools %}&#10; {%- set tool_definitions %}&#10; {{- &quot;# Tools\n\nYou are provided with function signatures within &lt;tools>&lt;/tools> XML tags:\n&lt;tools>&quot; }}&#10; {%- for tool in tools %}&#10; {{- &quot;\n&quot; }}&#10; {{- tool | tojson(ensure_ascii=False) }}&#10; {%- endfor %}&#10; {{- '\n&lt;/tools>\n\nTool usage guidelines:\n- You may call zero or more functions. If no function calls are needed, just answer normally and do not include any &lt;function ... &lt;/function>.\n- When calling a function, return an XML object within &lt;function ... &lt;/function> using:\n&lt;function name=&quot;function-name&quot;>&lt;param name=&quot;param-name&quot;>param-value&lt;/param>&lt;/function>\n- param-value may be multi-line. If it contains &lt;, &amp; or newline characters, wrap it in a CDATA block: &lt;param name=&quot;param-name&quot;>&lt;![CDATA[...multi-line value...]]>&lt;/param>' }}&#10; {%- endset %}&#10; &#10; {{- '&lt;|im_start|>system\n' }}&#10; {%- if messages[0].role == 'system' %}&#10; {%- if '&lt;tool_def_sep>' in messages[0].content %}&#10; {{- messages[0].content.replace('&lt;tool_def_sep>', tool_definitions) }}&#10; {%- else %}&#10; {{- messages[0].content + '\n\n' + tool_definitions }}&#10; {%- endif %}&#10; {%- else %}&#10; {{- tool_definitions.lstrip() }}&#10; {%- endif %}&#10; {{- '&lt;|im_end|>\n' }}&#10;{%- else %}&#10; {%- if messages[0].role == 'system' %}&#10; {{- '&lt;|im_start|>system\n' + messages[0].content + '&lt;|im_end|>\n' }}&#10; {%- endif %}&#10;{%- endif %}&#10;{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}&#10;{%- for message in messages[::-1] %}&#10; {%- set index = (messages|length - 1) - loop.index0 %}&#10; {%- if ns.multi_step_tool and message.role == &quot;user&quot; and message.content is string and not(message.content.startswith('&lt;tool_response>') and message.content.endswith('&lt;/tool_response>')) %}&#10; {%- set ns.multi_step_tool = false %}&#10; {%- set ns.last_query_index = index %}&#10; {%- endif %}&#10;{%- endfor %}&#10;{%- for message in messages %}&#10; {%- if message.content is string %}&#10; {%- set content = message.content %}&#10; {%- else %}&#10; {%- set content = '' %}&#10; {%- endif %}&#10; {%- if (message.role == &quot;user&quot;) or (message.role == &quot;system&quot; and not loop.first) %}&#10; {{- '&lt;|im_start|>' + message.role + '\n' + content + '&lt;|im_end|>' + '\n' }}&#10; {%- elif message.role == &quot;assistant&quot; %}&#10; {%- set reasoning_content = '' %}&#10; {%- if message.reasoning_content is string %}&#10; {%- set reasoning_content = message.reasoning_content %}&#10; {%- else %}&#10; {%- if '&lt;/think>' in content %}&#10; {%- set reasoning_content = content.split('&lt;/think>')[0].rstrip('\n').split('&lt;think>')[-1].lstrip('\n') %}&#10; {%- set content = content.split('&lt;/think>')[-1].lstrip('\n') %}&#10; {%- endif %}&#10; {%- endif %}&#10; &#10; {%- if message.tool_calls %}&#10; {%- set content_parts = content.split('&lt;tool_sep>') %}&#10; {%- set processed_content = content_parts[0] %}&#10; {%- set tool_calls_count = message.tool_calls|length %}&#10; {%- set tool_sep_count = content_parts|length - 1 %}&#10; {%- set min_count = [tool_calls_count, tool_sep_count]|min %}&#10; &#10; {%- for i in range(1, content_parts|length) %}&#10; {%- set tool_index = i - 1 %}&#10; {%- if tool_index &lt; tool_calls_count %}&#10; {%- set tool_call = message.tool_calls[tool_index] %}&#10; {%- if tool_call.function %}&#10; {%- set tool_call = tool_call.function %}&#10; {%- endif %}&#10; {%- set single_tool_xml %}&#10; {{- '&lt;function name=&quot;' ~ tool_call.name ~ '&quot;>' }}&#10; {%- if tool_call.arguments %}&#10; {%- set args_dict = tool_call.arguments %}&#10; {%- for param_name, param_value in args_dict.items() %}&#10; {{- '&lt;param name=&quot;' ~ param_name ~ '&quot;>' }}&#10; {%- if param_value is string and ('&lt;' in param_value or '&amp;' in param_value or '\n' in param_value) %}&#10; {{- '&lt;![CDATA[' + param_value + ']]>' }}&#10; {%- else %}&#10; {{- param_value }}&#10; {%- endif %}&#10; {{- '&lt;/param>' }}&#10; {%- endfor %}&#10; {%- endif %}&#10; {{- '&lt;/function>' }}&#10; {%- endset %}&#10; {%- set processed_content = processed_content + single_tool_xml + content_parts[i] %}&#10; {%- else %}&#10; {%- set processed_content = processed_content + content_parts[i] %}&#10; {%- endif %}&#10; {%- endfor %}&#10; &#10; {%- if tool_calls_count > tool_sep_count %}&#10; {%- for remaining_index in range(tool_sep_count, tool_calls_count) %}&#10; {%- set tool_call = message.tool_calls[remaining_index] %}&#10; {%- if tool_call.function %}&#10; {%- set tool_call = tool_call.function %}&#10; {%- endif %}&#10; {%- set remaining_tool_xml %}&#10; {{- '&lt;function name=&quot;' ~ tool_call.name ~ '&quot;>' }}&#10; {%- if tool_call.arguments %}&#10; {%- set args_dict = tool_call.arguments %}&#10; {%- for param_name, param_value in args_dict.items() %}&#10; {{- '&lt;param name=&quot;' ~ param_name ~ '&quot;>' }}&#10; {%- if param_value is string and ('&lt;' in param_value or '&amp;' in param_value or '\n' in param_value) %}&#10; {{- '&lt;![CDATA[' + param_value + ']]>' }}&#10; {%- else %}&#10; {{- param_value }}&#10; {%- endif %}&#10; {{- '&lt;/param>' }}&#10; {%- endfor %}&#10; {%- endif %}&#10; {{- '&lt;/function>' }}&#10; {%- endset %}&#10; {%- set processed_content = processed_content + remaining_tool_xml %}&#10; {%- endfor %}&#10; {%- endif %}&#10; &#10; {%- set content = processed_content %}&#10; {%- endif %}&#10; &#10; {%- if loop.index0 > ns.last_query_index %}&#10; {%- if reasoning_content %}&#10; {{- '&lt;|im_start|>' + message.role + '\n&lt;think>\n' + reasoning_content.strip('\n') + '\n&lt;/think>\n\n' + content.lstrip('\n') }}&#10; {%- else %}&#10; {{- '&lt;|im_start|>' + message.role + '\n' + content }}&#10; {%- endif %}&#10; {%- else %}&#10; {{- '&lt;|im_start|>' + message.role + '\n' + content }}&#10; {%- endif %}&#10; &#10; {%- if message.tool_calls and not has_tool_sep %}&#10; {%- for tool_call in message.tool_calls %}&#10; {%- if (loop.first and content) or (not loop.first) %}&#10; {{- '\n' }}&#10; {%- endif %}&#10; {%- if tool_call.function %}&#10; {%- set tool_call = tool_call.function %}&#10; {%- endif %}&#10; {{- '&lt;function name=&quot;' ~ tool_call.name ~ '&quot;>' }}&#10; {%- if tool_call.arguments %}&#10; {%- set args_dict = tool_call.arguments %}&#10; {%- for param_name, param_value in args_dict.items() %}&#10; {{- '&lt;param name=&quot;' ~ param_name ~ '&quot;>' }}&#10; {%- if param_value is string and ('&lt;' in param_value or '&amp;' in param_value or '\n' in param_value) %}&#10; {{- '&lt;![CDATA[' + param_value + ']]>' }}&#10; {%- else %}&#10; {{- param_value }}&#10; {%- endif %}&#10; {{- '&lt;/param>' }}&#10; {%- endfor %}&#10; {%- endif %}&#10; {{- '&lt;/function>' }}&#10; {%- endfor %}&#10; {%- endif %}&#10; {{- '&lt;|im_end|>\n' }}&#10; {%- elif message.role == &quot;tool&quot; %}&#10; {%- if loop.first or (messages[loop.index0 - 1].role != &quot;tool&quot;) %}&#10; {{- '&lt;|im_start|>user' }}&#10; {%- endif %}&#10; {{- '\n&lt;tool_response>\n' }}&#10; {%- if message.content is string %}&#10; {{- content }}&#10; {%- else %}&#10; {{- message.content | tojson(ensure_ascii=False) }}&#10; {%- endif %}&#10; {{- '\n&lt;/tool_response>' }}&#10; {%- if loop.last or (messages[loop.index0 + 1].role != &quot;tool&quot;) %}&#10; {{- '&lt;|im_end|>\n' }}&#10; {%- endif %}&#10; {%- endif %}&#10;{%- endfor %}&#10;{%- if add_generation_prompt %}&#10; {{- '&lt;|im_start|>assistant\n' }}&#10; {%- if enable_thinking is defined %}&#10; {%- if enable_thinking is false %}&#10; {{- '&lt;think>\n\n&lt;/think>\n\n' }}&#10; {%- elif enable_thinking is true %}&#10; {{- '&lt;think>\n' }}&#10; {%- endif %}&#10; {%- endif %}&#10;{%- endif %}&#10;" />
<clean_up_tokenization_spaces />
<detokenizer_input_type value="i64" />
<eos_token_id value="1" />
<handle_special_tokens_with_re />
<max_length />
<number_of_inputs value="1" />
<openvino_tokenizers_version value="2026.3.0.0-683-6d28e696dfa" />
<openvino_version value="2026.3.0-22098-367f60d8408" />
<original_post_processor_template value="{&quot;type&quot;: &quot;TemplateProcessing&quot;, &quot;single&quot;: [{&quot;SpecialToken&quot;: {&quot;id&quot;: &quot;&lt;s>&quot;, &quot;type_id&quot;: 0}}, {&quot;Sequence&quot;: {&quot;id&quot;: &quot;A&quot;, &quot;type_id&quot;: 0}}], &quot;pair&quot;: [{&quot;SpecialToken&quot;: {&quot;id&quot;: &quot;&lt;s>&quot;, &quot;type_id&quot;: 0}}, {&quot;Sequence&quot;: {&quot;id&quot;: &quot;A&quot;, &quot;type_id&quot;: 0}}, {&quot;SpecialToken&quot;: {&quot;id&quot;: &quot;&lt;s>&quot;, &quot;type_id&quot;: 1}}, {&quot;Sequence&quot;: {&quot;id&quot;: &quot;B&quot;, &quot;type_id&quot;: 1}}], &quot;special_tokens&quot;: {&quot;&lt;s>&quot;: {&quot;id&quot;: &quot;&lt;s>&quot;, &quot;ids&quot;: [0], &quot;tokens&quot;: [&quot;&lt;s>&quot;]}}}" />
<original_tokenizer_class value="&lt;class 'transformers.tokenization_utils_fast.PreTrainedTokenizerFast'>" />
<pad_token_id value="1" />
<processed_post_processor_template value="{&quot;single&quot;: {&quot;ids&quot;: [0, -1], &quot;type_ids&quot;: [0, 0]}, &quot;pair&quot;: {&quot;ids&quot;: [0, -1, 0, -2], &quot;type_ids&quot;: [0, 0, 1, 1]}}" />
<skip_special_tokens value="True" />
<streaming_detokenizer value="False" />
<tiktoken_version value="0.13.0" />
<tokenizer_output_type value="i64" />
<tokenizers_version value="0.23.0rc0" />
<transformers_version value="4.57.6" />
<use_max_padding value="False" />
<use_sentencepiece_backend value="False" />
<utf8_replace_mode value="replace" />
<with_detokenizer value="True" />
</rt_info>
</net>