TokenAIzer commited on
Commit
77ceb4c
·
verified ·
1 Parent(s): ba8879c

Add files using upload-large-folder tool

Browse files
chat_template.jinja ADDED
@@ -0,0 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {%- macro visible_text(content) -%}
2
+ {%- if content is string -%}
3
+ {{- content }}
4
+ {%- elif content is iterable and content is not mapping -%}
5
+ {%- for item in content -%}
6
+ {%- if item is mapping and item.type == 'text' -%}
7
+ {{- item.text }}
8
+ {%- elif item is string -%}
9
+ {{- item }}
10
+ {%- endif -%}
11
+ {%- endfor -%}
12
+ {%- else -%}
13
+ {{- content }}
14
+ {%- endif -%}
15
+ {%- endmacro -%}
16
+ {%- if messages[0]["role"] == "system" %}
17
+ {%- set system_message = messages[0]["content"] %}
18
+ {%- set loop_messages = messages[1:] %}
19
+ {%- else %}
20
+ {%- set loop_messages = messages %}
21
+ {%- endif %}
22
+ {%- if not tools is defined %}
23
+ {%- set tools = [] %}
24
+ {%- endif %}
25
+ {%- set default_system = "你是中国电信星辰语义大模型,英文名是Xing,你是由中电信人工智能科技有限公司研发的人工智能助手。\n" %}
26
+ {%- if system_message is defined %}
27
+ {{- "<_system>" + visible_text(system_message) }}
28
+ {%- else %}
29
+ {{- "<_system>" + default_system }}
30
+ {%- endif %}
31
+ {% if tools is iterable and tools | length > 0 %}
32
+
33
+ # Tools
34
+
35
+ You may call one or more functions to assist with the user query.
36
+
37
+ You are provided with function signatures within <tools></tools> XML tags:
38
+ <tools>
39
+ {% for tool in tools %}
40
+ {{ tool | tojson(ensure_ascii=False) }}
41
+ {% endfor %}
42
+ </tools>
43
+
44
+ For each function call, output the function name and arguments within the following XML format:
45
+ <tool_call>{function-name}<param_key>{param-key-1}</param_key><param_value>{param-value-1}</param_value><param_key>{param-key-2}</param_key><param_value>{param-value-2}</param_value>...</tool_call>
46
+ {%- endif %}
47
+
48
+
49
+ {%- set ns = namespace(last_user_index=-1) %}
50
+ {%- for m in loop_messages %}
51
+ {%- if m.role == 'user' %}
52
+ {%- set ns.last_user_index = loop.index0 -%}
53
+ {%- endif %}
54
+ {%- endfor %}
55
+ {%- for m in loop_messages %}
56
+ {%- if m.role == 'user' -%}<_user>{{ visible_text(m.content) }}
57
+ {%- elif m.role == 'assistant' or m.role == 'bot' -%}
58
+ <_bot>
59
+ {%- set reasoning_content = '' %}
60
+ {%- set content = visible_text(m.content) %}
61
+ {%- if m.reasoning_content is string %}
62
+ {%- set reasoning_content = m.reasoning_content %}
63
+ {%- elif m.reasoning is string %}
64
+ {%- set reasoning_content = m.reasoning %}
65
+ {%- else %}
66
+ {%- if '</think>' in content %}
67
+ {%- set reasoning_content = content.split('</think>')[0].rstrip('\n').split('<think>')[-1].lstrip('\n') %}
68
+ {%- set content = content.split('</think>')[-1].lstrip('\n') %}
69
+ {%- endif %}
70
+ {%- endif %}
71
+ {%- if loop.index0 < ns.last_user_index -%}
72
+ {{ '</think>' }}
73
+ {%- elif enable_thinking is not defined or enable_thinking -%}
74
+ {{ '<think>\n' + reasoning_content.strip() + '\n</think>'}}
75
+ {%- else -%}
76
+ {{ '</think>' }}
77
+ {%- endif -%}
78
+ {%- if content.strip() -%}
79
+ {{ content.strip() }}
80
+ {%- endif -%}
81
+ {% if m.tool_calls %}
82
+ {%- for tc in m.tool_calls %}
83
+ {%- if tc.function %}
84
+ {%- set tc = tc.function %}
85
+ {%- endif %}
86
+ {{- '<tool_call>' + tc.name -}}
87
+ {% set _args = tc.arguments %}
88
+ {%- for k, v in _args.items() %}<param_key>{{ k }}</param_key><param_value>{{ v | tojson(ensure_ascii=False) if v is not string else v }}</param_value>{% endfor %}{{ '</tool_call>' }}{% endfor %}{% endif %}{{- '<_end>\n' }}
89
+ {%- elif m.role == 'tool' -%}
90
+ {%- if loop.index0 > 0 -%}
91
+ {%- set prev_element = loop_messages[loop.index0 - 1] -%}
92
+ {%- if prev_element.role != "tool" -%}
93
+ {{- '<_observation>' -}}
94
+ {%- endif -%}
95
+ {%- endif -%}
96
+ {%- if m.content is string -%}
97
+ {{- '<tool_response>' -}}
98
+ {{- m.content }}
99
+ {{- '</tool_response>' -}}
100
+ {%- else -%}
101
+ {% for tr in m.content %}
102
+ {{- '<tool_response>' -}}{{ tr.output if tr.output is defined else tr }}{{- '</tool_response>' -}}
103
+ {% endfor -%}
104
+ {% endif -%}
105
+ {%- elif m.role == 'system' -%}
106
+ <_system>{{ visible_text(m.content) }}
107
+ {%- endif -%}
108
+ {%- endfor -%}
109
+ {%- if add_generation_prompt -%}
110
+ <_bot>{{- '</think>' if (enable_thinking is defined and not enable_thinking) else '<think>\n' -}}
111
+ {%- endif -%}
112
+
config.json ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "Xing4_0ForCausalLM"
4
+ ],
5
+ "attention_bias": false,
6
+ "attention_dropout": 0.0,
7
+ "auto_map": {
8
+ "AutoConfig": "configuration_xing4_0.Xing4_0Config"
9
+ },
10
+ "bos_token_id": 1,
11
+ "dtype": "bfloat16",
12
+ "eos_token_id": 2,
13
+ "ep_size": 1,
14
+ "first_k_dense_replace": 2,
15
+ "hc_eps": 1e-06,
16
+ "hc_mult": 4,
17
+ "hc_sinkhorn_iters": 20,
18
+ "hidden_act": "silu",
19
+ "hidden_size": 3584,
20
+ "initializer_range": 0.02,
21
+ "intermediate_size": 9216,
22
+ "kv_lora_rank": 512,
23
+ "max_position_embeddings": 262144,
24
+ "mhc_h_res_clamp_max": 30,
25
+ "mhc_h_res_clamp_min": -30,
26
+ "model_type": "xing4_0",
27
+ "moe_intermediate_size": 1024,
28
+ "moe_layer_freq": 1,
29
+ "n_group": 1,
30
+ "n_routed_experts": 64,
31
+ "n_shared_experts": 1,
32
+ "norm_topk_prob": true,
33
+ "num_attention_heads": 32,
34
+ "num_experts_per_tok": 4,
35
+ "num_hidden_layers": 40,
36
+ "num_key_value_heads": 32,
37
+ "num_nextn_predict_layers": 0,
38
+ "q_lora_rank": 768,
39
+ "qk_nope_head_dim": 128,
40
+ "qk_rope_head_dim": 64,
41
+ "quantization": {
42
+ "group_size": 64,
43
+ "bits": 4,
44
+ "mode": "affine"
45
+ },
46
+ "quantization_config": {
47
+ "group_size": 64,
48
+ "bits": 4,
49
+ "mode": "affine"
50
+ },
51
+ "rms_norm_eps": 1e-06,
52
+ "rope_scaling": {
53
+ "beta_fast": 32,
54
+ "beta_slow": 1,
55
+ "factor": 64,
56
+ "mscale": 1.0,
57
+ "mscale_all_dim": 1.0,
58
+ "original_max_position_embeddings": 4096,
59
+ "type": "yarn"
60
+ },
61
+ "rope_theta": 10000,
62
+ "routed_scaling_factor": 2.0,
63
+ "scoring_func": "sigmoid",
64
+ "tie_word_embeddings": false,
65
+ "topk_group": 1,
66
+ "topk_method": "noaux_tc",
67
+ "transformers_version": "5.14.1",
68
+ "use_cache": true,
69
+ "v_head_dim": 128,
70
+ "vocab_size": 131072
71
+ }
configuration_xing4_0.py ADDED
@@ -0,0 +1,142 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from transformers.configuration_utils import PretrainedConfig
2
+ from transformers.utils import logging
3
+
4
+ logger = logging.get_logger(__name__)
5
+
6
+ DEEPSEEK_PRETRAINED_CONFIG_ARCHIVE_MAP = {}
7
+
8
+
9
+ class Xing4_0Config(PretrainedConfig):
10
+ model_type = "xing4_0"
11
+ keys_to_ignore_at_inference = ["past_key_values"]
12
+ base_model_tp_plan = {
13
+ "layers.*.mlp.experts.gate_up_proj": "packed_colwise",
14
+ "layers.*.mlp.experts.down_proj": "rowwise",
15
+ "layers.*.mlp.experts": "moe_tp_experts",
16
+ "layers.*.mlp.shared_experts.gate_proj": "colwise",
17
+ "layers.*.mlp.shared_experts.up_proj": "colwise",
18
+ "layers.*.mlp.shared_experts.down_proj": "rowwise",
19
+ "layers.*.mlp.gate_proj": "colwise",
20
+ "layers.*.mlp.up_proj": "colwise",
21
+ "layers.*.mlp.down_proj": "rowwise",
22
+ }
23
+ base_model_pp_plan = {
24
+ "embed_tokens": (["input_ids"], ["inputs_embeds"]),
25
+ "layers": (["hidden_states", "attention_mask"], ["hidden_states"]),
26
+ "norm": (["hidden_states"], ["hidden_states"]),
27
+ }
28
+ base_model_ep_plan = {
29
+ "layers.*.mlp.gate": "ep_router",
30
+ "layers.*.mlp.experts.gate_up_proj": "grouped_gemm",
31
+ "layers.*.mlp.experts.down_proj": "grouped_gemm",
32
+ "layers.*.mlp.experts": "moe_tp_experts",
33
+ }
34
+
35
+ attribute_map = {
36
+ "num_local_experts": "n_routed_experts",
37
+ "num_mtp_layers": "num_nextn_predict_layers",
38
+ }
39
+
40
+ def __init__(
41
+ self,
42
+ vocab_size=131072,
43
+ hidden_size=3584,
44
+ intermediate_size=9216,
45
+ moe_intermediate_size=1024,
46
+ num_hidden_layers=40,
47
+ num_nextn_predict_layers=1,
48
+ num_attention_heads=32,
49
+ num_key_value_heads=32,
50
+ n_shared_experts=1,
51
+ n_routed_experts=64,
52
+ ep_size=1,
53
+ routed_scaling_factor=2.0,
54
+ kv_lora_rank=512,
55
+ q_lora_rank=1536,
56
+ qk_rope_head_dim=64,
57
+ v_head_dim=128,
58
+ qk_nope_head_dim=128,
59
+ topk_method='noaux_tc',
60
+ n_group=8,
61
+ topk_group=4,
62
+ num_experts_per_tok=4,
63
+ moe_layer_freq=1,
64
+ first_k_dense_replace=2,
65
+ norm_topk_prob=True,
66
+ scoring_func='sigmoid',
67
+ hidden_act="silu",
68
+ max_position_embeddings=4096,
69
+ initializer_range=0.02,
70
+ rms_norm_eps=1e-6,
71
+ use_cache=True,
72
+ pad_token_id=None,
73
+ bos_token_id=1,
74
+ eos_token_id=2,
75
+ tie_word_embeddings=False,
76
+ rope_theta=10000.0,
77
+ rope_scaling=None,
78
+ rope_interleave=True,
79
+ attention_bias=False,
80
+ attention_dropout=0.0,
81
+ hc_mult: int = 4,
82
+ hc_sinkhorn_iters: int = 20,
83
+ hc_eps: float = 1.0e-6,
84
+ mhc_h_res_clamp_min=-30,
85
+ mhc_h_res_clamp_max=30,
86
+ **kwargs,
87
+ ):
88
+ self.vocab_size = vocab_size
89
+ self.max_position_embeddings = max_position_embeddings
90
+ self.hidden_size = hidden_size
91
+ self.intermediate_size = intermediate_size
92
+ self.moe_intermediate_size = moe_intermediate_size
93
+ self.num_hidden_layers = num_hidden_layers
94
+ self.num_nextn_predict_layers = num_nextn_predict_layers
95
+ self.num_attention_heads = num_attention_heads
96
+ self.n_shared_experts = n_shared_experts
97
+ self.n_routed_experts = n_routed_experts
98
+ self.ep_size = ep_size
99
+ self.routed_scaling_factor = routed_scaling_factor
100
+ self.kv_lora_rank = kv_lora_rank
101
+ self.q_lora_rank = q_lora_rank
102
+ self.qk_rope_head_dim = qk_rope_head_dim
103
+ self.v_head_dim = v_head_dim
104
+ self.qk_nope_head_dim = qk_nope_head_dim
105
+ self.qk_head_dim = self.qk_nope_head_dim + self.qk_rope_head_dim
106
+ self.head_dim = self.qk_rope_head_dim
107
+ self.topk_method = topk_method
108
+ self.n_group = n_group
109
+ self.topk_group = topk_group
110
+ self.num_experts_per_tok = num_experts_per_tok
111
+ self.moe_layer_freq = moe_layer_freq
112
+ self.first_k_dense_replace = first_k_dense_replace
113
+ self.norm_topk_prob = norm_topk_prob
114
+ self.scoring_func = scoring_func
115
+ # for backward compatibility
116
+ if num_key_value_heads is None:
117
+ num_key_value_heads = num_attention_heads
118
+
119
+ self.num_key_value_heads = num_key_value_heads
120
+ self.hidden_act = hidden_act
121
+ self.initializer_range = initializer_range
122
+ self.rms_norm_eps = rms_norm_eps
123
+ self.use_cache = use_cache
124
+ self.rope_theta = rope_theta
125
+ self.rope_scaling = rope_scaling
126
+ self.attention_bias = attention_bias
127
+ self.attention_dropout = attention_dropout
128
+ self.hc_mult = hc_mult
129
+ self.hc_sinkhorn_iters = hc_sinkhorn_iters
130
+ self.hc_eps = hc_eps
131
+ self.mhc_h_res_clamp_min = mhc_h_res_clamp_min
132
+ self.mhc_h_res_clamp_max = mhc_h_res_clamp_max
133
+ self.rope_interleave = rope_interleave
134
+ super().__init__(
135
+ pad_token_id=pad_token_id,
136
+ bos_token_id=bos_token_id,
137
+ eos_token_id=eos_token_id,
138
+ tie_word_embeddings=tie_word_embeddings,
139
+ **kwargs,
140
+ )
141
+
142
+
generation_config.json ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_from_model_config": true,
3
+ "bos_token_id": 1,
4
+ "eos_token_id": 2,
5
+ "do_sample": true,
6
+ "temperature": 1.0,
7
+ "top_p": 0.95,
8
+ "repetition_penalty": 1.05,
9
+ "transformers_version": "4.48.1"
10
+ }
model-00001-of-00004.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ed0743b88189def95babc06322e6ec378f161776a6075081f61b1c1d868a2277
3
+ size 5315029228
model-00002-of-00004.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e132a4e086993ddebaef112721fe95be3e1c3dc4569445d1dd1be4e26d758ef3
3
+ size 5332993813
model-00003-of-00004.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:222a5d9bb8719d5c624a505108f8dab8212b992698b64778609d9c798a108f0b
3
+ size 5332993755
model-00004-of-00004.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:bb4f846469fe5ae875b9c63cc15b2292690bfc815d3c59a4194eaa3f756ce634
3
+ size 668656619
model.safetensors.index.json ADDED
The diff for this file is too large to render. See raw diff
 
tokenization_xing4_0.py ADDED
@@ -0,0 +1,222 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from shutil import copyfile
3
+ from typing import Any, Dict, List, Optional, Tuple
4
+ import sentencepiece as spm
5
+ from transformers.tokenization_utils import AddedToken, PreTrainedTokenizer
6
+ from transformers.utils import logging
7
+
8
+ logger = logging.get_logger(__name__)
9
+
10
+ VOCAB_FILES_NAMES = {"vocab_file": "tokenizer.model"}
11
+
12
+ # TODO: when we get download url from huggingface, refresh the map
13
+ PRETRAINED_VOCAB_FILES_MAP = {
14
+ "vocab_file": {},
15
+ "tokenizer_file": {},
16
+ }
17
+
18
+
19
+ class Xing4_0Tokenizer(PreTrainedTokenizer):
20
+ vocab_files_names = VOCAB_FILES_NAMES
21
+ pretrained_vocab_files_map = PRETRAINED_VOCAB_FILES_MAP
22
+ model_input_names = ["input_ids", "attention_mask"]
23
+
24
+ def __init__(
25
+ self,
26
+ vocab_file,
27
+ unk_token="<unk>",
28
+ bos_token="<_start>",
29
+ eos_token="<_end>",
30
+ pad_token="<_pad>",
31
+ sp_model_kwargs: Optional[Dict[str, Any]] = None,
32
+ add_bos_token=True,
33
+ add_eos_token=False,
34
+ clean_up_tokenization_spaces=False,
35
+ **kwargs,
36
+ ):
37
+ self.sp_model_kwargs = {} if sp_model_kwargs is None else sp_model_kwargs
38
+ bos_token = AddedToken(bos_token, lstrip=False, rstrip=False) if isinstance(bos_token, str) else bos_token
39
+ eos_token = AddedToken(eos_token, lstrip=False, rstrip=False) if isinstance(eos_token, str) else eos_token
40
+ pad_token = AddedToken(pad_token, lstrip=False, rstrip=False) if isinstance(pad_token, str) else pad_token
41
+ self.sp_model = spm.SentencePieceProcessor(**self.sp_model_kwargs)
42
+ self.sp_model.Load(vocab_file)
43
+ super().__init__(
44
+ bos_token=bos_token,
45
+ eos_token=eos_token,
46
+ pad_token=pad_token,
47
+ add_bos_token=add_bos_token,
48
+ add_eos_token=add_eos_token,
49
+ sp_model_kwargs=self.sp_model_kwargs,
50
+ clean_up_tokenization_spaces=clean_up_tokenization_spaces,
51
+ **kwargs,
52
+ )
53
+ self.vocab_file = vocab_file
54
+ self.add_bos_token = add_bos_token
55
+ self.add_eos_token = add_eos_token
56
+
57
+ def __getstate__(self):
58
+ state = self.__dict__.copy()
59
+ state["sp_model"] = None
60
+ return state
61
+
62
+ def __setstate__(self, d):
63
+ self.__dict__ = d
64
+ self.sp_model = spm.SentencePieceProcessor(**self.sp_model_kwargs)
65
+ self.sp_model.Load(self.vocab_file)
66
+
67
+ @property
68
+ def vocab_size(self):
69
+ """Returns vocab size"""
70
+ return self.sp_model.get_piece_size()
71
+
72
+ def get_vocab(self):
73
+ """Returns vocab as a dict"""
74
+ vocab = {self.convert_ids_to_tokens(i): i for i in range(self.vocab_size)}
75
+ vocab.update(self.added_tokens_encoder)
76
+ return vocab
77
+
78
+ @property
79
+ def vocab(self):
80
+ return self.get_vocab()
81
+
82
+ def _tokenize(self, text):
83
+ """Returns a tokenized string."""
84
+ return self.sp_model.encode(text, out_type=str)
85
+
86
+ def _convert_token_to_id(self, token):
87
+ """Converts a token (str) in an id using the vocab."""
88
+ return self.sp_model.piece_to_id(token)
89
+
90
+ def _convert_id_to_token(self, index):
91
+ """Converts an index (integer) in a token (str) using the vocab."""
92
+ token = self.sp_model.IdToPiece(index)
93
+ return token
94
+
95
+ def convert_tokens_to_string(self, tokens):
96
+ """Converts a sequence of tokens (string) in a single string."""
97
+ current_sub_tokens = []
98
+ out_string = ""
99
+ # prev_is_special = False
100
+ for i, token in enumerate(tokens):
101
+ # make sure that special tokens are not decoded using sentencepiece model
102
+ if token in self.all_special_tokens:
103
+ # if not prev_is_special and i != 0:
104
+ # out_string += " "
105
+ out_string += self.sp_model.decode(current_sub_tokens) + token
106
+ # prev_is_special = True
107
+ current_sub_tokens = []
108
+ else:
109
+ current_sub_tokens.append(token)
110
+ # prev_is_special = False
111
+ out_string += self.sp_model.decode(current_sub_tokens)
112
+ return out_string
113
+
114
+ def save_vocabulary(self, save_directory, filename_prefix: Optional[str] = None) -> Tuple[str]:
115
+ """
116
+ Save the vocabulary and special tokens file to a directory.
117
+
118
+ Args:
119
+ save_directory (`str`):
120
+ The directory in which to save the vocabulary.
121
+
122
+ Returns:
123
+ `Tuple(str)`: Paths to the files saved.
124
+ """
125
+ if not os.path.isdir(save_directory):
126
+ logger.error(f"Vocabulary path ({save_directory}) should be a directory")
127
+ return
128
+ out_vocab_file = os.path.join(
129
+ save_directory, (filename_prefix + "-" if filename_prefix else "") + VOCAB_FILES_NAMES["vocab_file"]
130
+ )
131
+
132
+ if os.path.abspath(self.vocab_file) != os.path.abspath(out_vocab_file) and os.path.isfile(self.vocab_file):
133
+ copyfile(self.vocab_file, out_vocab_file)
134
+ elif not os.path.isfile(self.vocab_file):
135
+ with open(out_vocab_file, "wb") as fi:
136
+ content_spiece_model = self.sp_model.serialized_model_proto()
137
+ fi.write(content_spiece_model)
138
+
139
+ return (out_vocab_file,)
140
+
141
+ def build_inputs_with_special_tokens(self, token_ids_0, token_ids_1=None):
142
+ bos_token_id = [self.bos_token_id] if self.add_bos_token else []
143
+ eos_token_id = [self.eos_token_id] if self.add_eos_token else []
144
+
145
+ output = bos_token_id + token_ids_0 + eos_token_id
146
+
147
+ if token_ids_1 is not None:
148
+ output = output + bos_token_id + token_ids_1 + eos_token_id
149
+
150
+ return output
151
+
152
+ def get_special_tokens_mask(
153
+ self, token_ids_0: List[int], token_ids_1: Optional[List[int]] = None,
154
+ already_has_special_tokens: bool = False
155
+ ) -> List[int]:
156
+ """
157
+ Retrieve sequence ids from a token list that has no special tokens added. This method is called when adding
158
+ special tokens using the tokenizer `prepare_for_model` method.
159
+
160
+ Args:
161
+ token_ids_0 (`List[int]`):
162
+ List of IDs.
163
+ token_ids_1 (`List[int]`, *optional*):
164
+ Optional second list of IDs for sequence pairs.
165
+ already_has_special_tokens (`bool`, *optional*, defaults to `False`):
166
+ Whether or not the token list is already formatted with special tokens for the model.
167
+
168
+ Returns:
169
+ `List[int]`: A list of integers in the range [0, 1]: 1 for a special token, 0 for a sequence token.
170
+ """
171
+ if already_has_special_tokens:
172
+ return super().get_special_tokens_mask(
173
+ token_ids_0=token_ids_0, token_ids_1=token_ids_1, already_has_special_tokens=True
174
+ )
175
+
176
+ bos_token_id = [1] if self.add_bos_token else []
177
+ eos_token_id = [1] if self.add_eos_token else []
178
+
179
+ if token_ids_1 is None:
180
+ return bos_token_id + ([0] * len(token_ids_0)) + eos_token_id
181
+ return (
182
+ bos_token_id
183
+ + ([0] * len(token_ids_0))
184
+ + eos_token_id
185
+ + bos_token_id
186
+ + ([0] * len(token_ids_1))
187
+ + eos_token_id
188
+ )
189
+
190
+ def create_token_type_ids_from_sequences(
191
+ self, token_ids_0: List[int], token_ids_1: Optional[List[int]] = None
192
+ ) -> List[int]:
193
+ """
194
+ Creates a mask from the two sequences passed to be used in a sequence-pair classification task. An ALBERT
195
+ sequence pair mask has the following format:
196
+
197
+ ```
198
+ 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1
199
+ | first sequence | second sequence |
200
+ ```
201
+
202
+ if token_ids_1 is None, only returns the first portion of the mask (0s).
203
+
204
+ Args:
205
+ token_ids_0 (`List[int]`):
206
+ List of ids.
207
+ token_ids_1 (`List[int]`, *optional*):
208
+ Optional second list of IDs for sequence pairs.
209
+
210
+ Returns:
211
+ `List[int]`: List of [token type IDs](../glossary#token-type-ids) according to the given sequence(s).
212
+ """
213
+ bos_token_id = [self.bos_token_id] if self.add_bos_token else []
214
+ eos_token_id = [self.eos_token_id] if self.add_eos_token else []
215
+
216
+ output = [0] * len(bos_token_id + token_ids_0 + eos_token_id)
217
+
218
+ if token_ids_1 is not None:
219
+ output += [1] * len(bos_token_id + token_ids_1 + eos_token_id)
220
+
221
+ return output
222
+
tokenizer.model ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:fdcbbfdf8655a2e8b8a9fe478de0e9347e857c9b043f9752d04ed660286c3ac5
3
+ size 2199270
tokenizer_config.json ADDED
@@ -0,0 +1,132 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "added_tokens_decoder": {
3
+ "1": {
4
+ "content": "<_start>",
5
+ "lstrip": false,
6
+ "normalized": false,
7
+ "rstrip": false,
8
+ "single_word": false,
9
+ "special": true
10
+ },
11
+ "2": {
12
+ "content": "<_end>",
13
+ "lstrip": false,
14
+ "normalized": false,
15
+ "rstrip": false,
16
+ "single_word": false,
17
+ "special": true
18
+ },
19
+ "3": {
20
+ "content": "<_pad>",
21
+ "lstrip": false,
22
+ "normalized": false,
23
+ "rstrip": false,
24
+ "single_word": false,
25
+ "special": true
26
+ },
27
+ "4": {
28
+ "content": "<_user>",
29
+ "lstrip": false,
30
+ "normalized": false,
31
+ "rstrip": false,
32
+ "single_word": false,
33
+ "special": true
34
+ },
35
+ "5": {
36
+ "content": "<_bot>",
37
+ "lstrip": false,
38
+ "normalized": false,
39
+ "rstrip": false,
40
+ "single_word": false,
41
+ "special": true
42
+ },
43
+ "6": {
44
+ "content": "<_system>",
45
+ "lstrip": false,
46
+ "normalized": false,
47
+ "rstrip": false,
48
+ "single_word": false,
49
+ "special": true
50
+ },
51
+ "9": {
52
+ "content": "<think>",
53
+ "lstrip": false,
54
+ "normalized": false,
55
+ "rstrip": false,
56
+ "single_word": false,
57
+ "special": true
58
+ },
59
+ "10": {
60
+ "content": "</think>",
61
+ "lstrip": false,
62
+ "normalized": false,
63
+ "rstrip": false,
64
+ "single_word": false,
65
+ "special": true
66
+ },
67
+ "11": {
68
+ "content": "<tool_call>",
69
+ "lstrip": false,
70
+ "normalized": false,
71
+ "rstrip": false,
72
+ "single_word": false,
73
+ "special": true
74
+ },
75
+ "12": {
76
+ "content": "</tool_call>",
77
+ "lstrip": false,
78
+ "normalized": false,
79
+ "rstrip": false,
80
+ "single_word": false,
81
+ "special": true
82
+ },
83
+ "13": {
84
+ "content": "<tool_response>",
85
+ "lstrip": false,
86
+ "normalized": false,
87
+ "rstrip": false,
88
+ "single_word": false,
89
+ "special": true
90
+ },
91
+ "14": {
92
+ "content": "</tool_response>",
93
+ "lstrip": false,
94
+ "normalized": false,
95
+ "rstrip": false,
96
+ "single_word": false,
97
+ "special": true
98
+ }
99
+ },
100
+ "auto_map": {
101
+ "AutoTokenizer": [
102
+ "tokenization_xing4_0.Xing4_0Tokenizer",
103
+ null
104
+ ]
105
+ },
106
+ "backend": "custom",
107
+ "bos_token": "<_start>",
108
+ "clean_up_tokenization_spaces": false,
109
+ "eos_token": "<_end>",
110
+ "extra_special_tokens": [
111
+ "<_start>",
112
+ "<_end>",
113
+ "<_pad>",
114
+ "<_user>",
115
+ "<_bot>",
116
+ "<_system>",
117
+ "<think>",
118
+ "</think>",
119
+ "<tool_call>",
120
+ "</tool_call>",
121
+ "<tool_response>",
122
+ "</tool_response>"
123
+ ],
124
+ "is_local": true,
125
+ "local_files_only": false,
126
+ "model_max_length": 100000000,
127
+ "pad_token": "<_pad>",
128
+ "sp_model_kwargs": {},
129
+ "split_special_tokens": false,
130
+ "tokenizer_class": "Xing4_0Tokenizer",
131
+ "use_fast": false
132
+ }