K168-V0JL commited on
Commit
9ca6969
·
verified ·
1 Parent(s): f66c607

Copy files from models/inclusionAI/LLaDA2.2-flash

Browse files
Files changed (45) hide show
  1. .gitattributes +0 -2
  2. README.md +176 -21
  3. chat_template.jinja +136 -133
  4. config.json +48 -26
  5. configuration_llada2_moe.py +94 -0
  6. generation_config.json +4 -11
  7. model-00000-of-00032.safetensors +3 -0
  8. model-00001-of-00032.safetensors +3 -0
  9. model-00002-of-00032.safetensors +3 -0
  10. model-00003-of-00032.safetensors +3 -0
  11. model-00004-of-00032.safetensors +3 -0
  12. model-00005-of-00032.safetensors +3 -0
  13. model-00006-of-00032.safetensors +3 -0
  14. model-00007-of-00032.safetensors +3 -0
  15. model-00008-of-00032.safetensors +3 -0
  16. model-00009-of-00032.safetensors +3 -0
  17. model-00010-of-00032.safetensors +3 -0
  18. model-00011-of-00032.safetensors +3 -0
  19. model-00012-of-00032.safetensors +3 -0
  20. model-00013-of-00032.safetensors +3 -0
  21. model-00014-of-00032.safetensors +3 -0
  22. model-00015-of-00032.safetensors +3 -0
  23. model-00016-of-00032.safetensors +3 -0
  24. model-00017-of-00032.safetensors +3 -0
  25. model-00018-of-00032.safetensors +3 -0
  26. model-00019-of-00032.safetensors +3 -0
  27. model-00020-of-00032.safetensors +3 -0
  28. model-00021-of-00032.safetensors +3 -0
  29. model-00022-of-00032.safetensors +3 -0
  30. model-00023-of-00032.safetensors +3 -0
  31. model-00024-of-00032.safetensors +3 -0
  32. model-00025-of-00032.safetensors +3 -0
  33. model-00026-of-00032.safetensors +3 -0
  34. model-00027-of-00032.safetensors +3 -0
  35. model-00028-of-00032.safetensors +3 -0
  36. model-00029-of-00032.safetensors +3 -0
  37. model-00030-of-00032.safetensors +3 -0
  38. model-00031-of-00032.safetensors +3 -0
  39. model.safetensors.index.json +0 -0
  40. modeling_llada2_moe.py +1800 -0
  41. special_tokens_map.json +7 -4005
  42. tokenization_llada2.py +86 -0
  43. tokenizer.json +0 -0
  44. tokenizer_config.json +0 -0
  45. tool_declaration_ts.py +499 -0
.gitattributes CHANGED
@@ -17,7 +17,6 @@
17
  *.ot filter=lfs diff=lfs merge=lfs -text
18
  *.parquet filter=lfs diff=lfs merge=lfs -text
19
  *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pdf filter=lfs diff=lfs merge=lfs -text
21
  *.pickle filter=lfs diff=lfs merge=lfs -text
22
  *.pkl filter=lfs diff=lfs merge=lfs -text
23
  *.pt filter=lfs diff=lfs merge=lfs -text
@@ -34,4 +33,3 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
34
  *.zip filter=lfs diff=lfs merge=lfs -text
35
  *.zst filter=lfs diff=lfs merge=lfs -text
36
  *tfevents* filter=lfs diff=lfs merge=lfs -text
37
- tokenizer.json filter=lfs diff=lfs merge=lfs -text
 
17
  *.ot filter=lfs diff=lfs merge=lfs -text
18
  *.parquet filter=lfs diff=lfs merge=lfs -text
19
  *.pb filter=lfs diff=lfs merge=lfs -text
 
20
  *.pickle filter=lfs diff=lfs merge=lfs -text
21
  *.pkl filter=lfs diff=lfs merge=lfs -text
22
  *.pt 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
 
README.md CHANGED
@@ -1,32 +1,187 @@
1
  ---
 
2
  library_name: transformers
3
- pipeline_tag: text-generation
4
- base_model: upstage/Solar-Open-100B
5
  tags:
6
- - omega-ai
7
- - text-generation
8
- - mixture-of-experts
 
9
  ---
10
 
11
- # Omega AI 100B
12
 
13
- Omega AI 100B is an Omega-branded deployment based on Upstage Solar-Open-100B.
14
 
15
- ## Base model
16
- upstage/Solar-Open-100B
17
 
18
- ## Parameter class
19
- Approximately 102.6B total parameters, 12B active parameters per token.
 
20
 
21
- ## Modifications
22
- - Omega AI branding
23
- - Omega repository identity
24
- - Original model weights preserved
25
- - No retraining unless separately documented
26
 
27
- ## Provenance
28
- The underlying model architecture and pretrained weights originate from Upstage Solar-Open-100B.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
 
30
- ## License
31
- The model weights are subject to the Upstage Solar License.
32
- Original license terms and attribution requirements continue to apply.
 
1
  ---
2
+ license: apache-2.0
3
  library_name: transformers
 
 
4
  tags:
5
+ - dllm
6
+ - diffusion
7
+ - llm
8
+ - text_generation
9
  ---
10
 
11
+ # LLaDA2.2-flash
12
 
13
+ **LLaDA2.2-flash** is an agent-oriented diffusion language model in the LLaDA2 series. By introducing **Levenshtein Editing** (with `DELETE` and `INSERT` control tokens) to diffusion language modeling, it represents the LLaDA2 series' first step in agentic applications, including long-context tool use, multi-turn interaction, and robust error correction.For more information, please refer to our [technical report](https://github.com/inclusionAI/LLaDA2.X/blob/main/LLaDA2_2_tech_report.pdf).
14
 
 
 
15
 
16
+ <div align="center">
17
+ <img src="https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*9BoDT6rb1BwAAAAAUbAAAAgAemJ7AQ/original" width="800" />
18
+ </div>
19
 
20
+ <div align="center">
21
+ <img src="https://mdn.alipayobjects.com/huamei_qa8qxu/afts/img/A*W0wnS7xvKm4AAAAAY-AAAAgAemJ7AQ/original" width="800" />
22
+ </div>
 
 
23
 
24
+ ---
25
+
26
+ ## 📊 Benchmarks
27
+ The following tables compare **LLaDA2.2-flash** and **Ling-2.6-flash** in terms of agentic benchmark scores and throughput (TPS).
28
+
29
+ **Agentic benchmark scores**
30
+
31
+ | Benchmark | LLaDA2.2-flash | Ling-2.6-flash |
32
+ | --- | ---: | ---: |
33
+ | SWE-bench Verified | 49.28 | 61.20<sup>†</sup> |
34
+ | SWE-bench Pro | 30.10 | 31.88 |
35
+ | SWE-bench Multilingual | 25.00 | 33.73 |
36
+ | τ²-Bench | 80.33 | 76.36<sup>†</sup> |
37
+ | Claw-Eval | 64.22 | 64.56<sup>†</sup> |
38
+ | PinchBench | 81.66 | 81.30<sup>†</sup> |
39
+ | MCP-Atlas | 46.21 | 41.12 |
40
+ | BFCL-V4 | 60.78 | 66.81 |
41
+
42
+ > **LLaDA2.2-flash evaluation setup:** The SWE-bench series was evaluated using the Claude Code scaffold. Across all benchmarks, we used a 128K context window with `temperature=1.0`, `block_length=32`, `threshold=0.5`, and `editing_threshold=0.0`. Each score represents the average of five runs.
43
+
44
+ <sup>†</sup> The Ling-2.6-flash score on SWE-bench Verified is taken from the Ling and Ring 2.6 Technical Report, where it was obtained using the OpenHands scaffold. The Ling-2.6-flash scores on τ²-Bench, Claw-Eval, and PinchBench are also sourced from the technical report, whereas its SWE-bench Pro and SWE-bench Multilingual scores were evaluated by us using the same Claude Code scaffold as LLaDA2.2-flash.
45
+
46
+
47
+ **Throughput (TPS)**
48
+
49
+ | Benchmark | LLaDA2.2-flash (TPS) | Ling-2.6-flash (TPS) |
50
+ | --- | ---: | ---: |
51
+ | SWE-bench Verified | 519.0 | 303.2 |
52
+ | SWE-bench Pro | 485.3 | 283.4 |
53
+ | SWE-bench Multilingual | 459.5 | 200.6 |
54
+ | τ²-Bench | 592.8 | 334.9 |
55
+ | BFCL-V4 | 703.82 | 331.5 |
56
+
57
+ > **Ling-2.6-flash evaluation setup:** MTP was enabled with 4 draft tokens.
58
+
59
+ More results will be released in the upcoming technical report.
60
+
61
+ ---
62
+
63
+ ## 🚀 Highlights
64
+
65
+ + **Efficient 128K Diffusion Infrastructure**: LLaDA2.2-flash extends the context window to **128K** and introduces **Block Routing**, which bounds MoE expert activation at the diffusion-block level to enable efficient long-context agentic workloads.
66
+
67
+ + **Levenshtein Editing**: We introduces **DELETE** and **INSERT** control tokens, allowing diffusion decoding to edit sequence structure, remove redundant content, and create insertion slots during parallel generation.
68
+
69
+ + **Agentic Reinforcement Learning**: We propose **Levenshtein Editing ELBO-based Block-level Policy Optimization (L-EBPO)**, which leverages agentic environmental rewards to train levenshtein editing and error correction in multi-turn tool-use scenarios.
70
+
71
+ ---
72
+
73
+ ## 📦 Model Variants
74
+
75
+ | Model ID | Description | Hugging Face Link |
76
+ | --- | --- | --- |
77
+ | `inclusionAI/LLaDA2.2-flash` | Agent-oriented MoE diffusion language model with Levenshtein Editing. | [🤗 Model Card](https://huggingface.co/inclusionAI/LLaDA2.2-flash) |
78
+
79
+ <!-- TODO: Add other LLaDA2.2 variants if available. -->
80
+
81
+ ---
82
+
83
+ ## 🔍 Model Overview
84
+
85
+ **LLaDA2.2-flash** has the following specifications:
86
+
87
+ + **Type**: Mixture-of-Experts (MoE) Diffusion Language Model with Levenshtein Editing
88
+ + **Context Length**: 128K tokens
89
+ + **Levenshtein Editing Control Tokens**: `DELETE`, `INSERT`
90
+ + **Total Parameters (Non-Embedding)**: 100B
91
+ + **Number of Layers**: 32
92
+ + **Attention Heads**: 32
93
+ + **Positional Encoding**: Rotary Position Embedding (RoPE)
94
+ + **Vocabulary Size**: 157,184
95
+
96
+ ---
97
+
98
+ ## 🤗 Hugging Face Transformers
99
+
100
+ Make sure you have `transformers` and its dependencies installed.
101
+
102
+ <!-- TODO: Verify the final inference API, model path, and recommended generation parameters. -->
103
+
104
+ ```python
105
+ import torch
106
+ from transformers import AutoModelForCausalLM, AutoTokenizer
107
+
108
+ model_path = "inclusionAI/LLaDA2.2-flash"
109
+ device = "auto"
110
+
111
+ model = AutoModelForCausalLM.from_pretrained(
112
+ model_path,
113
+ trust_remote_code=True,
114
+ device_map=device,
115
+ )
116
+ model = model.to(torch.bfloat16)
117
+ model.eval()
118
+
119
+ tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
120
+
121
+ prompt = """Calculate 1+5-28*0.5-200=?"""
122
+ input_ids = tokenizer.apply_chat_template(
123
+ [{"role": "user", "content": prompt}],
124
+ add_generation_prompt=True,
125
+ tokenize=True,
126
+ return_tensors="pt",
127
+ ).input_ids
128
+
129
+ generated_tokens = model.generate(
130
+ inputs=input_ids,
131
+ eos_early_stop=True,
132
+ gen_length=512,
133
+ block_length=32,
134
+ threshold=0.5,
135
+ editing_threshold=0.0,
136
+ temperature=0.0,
137
+ )
138
+
139
+ generated_answer = tokenizer.decode(
140
+ generated_tokens[0],
141
+ skip_special_tokens=True,
142
+ )
143
+ print(generated_answer)
144
+ ```
145
+
146
+ ### Best Practices
147
+
148
+ <!-- TODO: Confirm final recommended values for Speed Mode and Quality Mode. -->
149
+
150
+ To achieve optimal performance, we recommend starting with the following settings:
151
+
152
+ 1. **Sampling Parameters**: Use `block_length=32`, `temperature=0.0`, `top_p=None`, and `top_k=None` as stable default settings.
153
+
154
+ 2. **Denoising Thresholds**: Tune `threshold`, `editing_threshold`, and `max_post_steps` according to the speed-quality trade-off required by the application. Lower thresholds may improve inference speed but can lead to increased repetition or unstable outputs.
155
+
156
+ 3. **Long-Context Agentic Workloads**: For long-context tool-use and multi-turn agent applications, we recommend using **SGLang** as the serving backend. Please ensure that the serving stack is configured for the 128K context window and the model's MoE diffusion inference requirements.
157
+
158
+ ---
159
+
160
+ ## 🤖 ModelScope
161
+
162
+ If you are in mainland China, we strongly recommend accessing our model from 🤖 [ModelScope](https://modelscope.cn/models/inclusionAI/LLaDA2.2-flash)
163
+
164
+ ---
165
+
166
+ ## Deployment
167
+
168
+ ### SGLang
169
+
170
+ SGLang deployment support is coming soon.
171
+
172
+ ---
173
+
174
+ ## 🌐 License
175
+
176
+ This project is licensed under the terms of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0).
177
+
178
+ ---
179
+
180
+ ## 🤝 Contact & Collaboration
181
+
182
+ For questions, collaboration opportunities, or feedback, please reach out via [Hugging Face](https://huggingface.co/inclusionAI/LLaDA2.2-flash) or open an issue in the [repository](https://github.com/inclusionAI).
183
+
184
+ Join us in advancing open, efficient, and intelligent diffusion language models for agentic applications.
185
+
186
+ ---
187
 
 
 
 
chat_template.jinja CHANGED
@@ -1,156 +1,159 @@
1
- {#- ======== Template Parameters ======== #}
2
- {%- set add_generation_prompt = add_generation_prompt if add_generation_prompt is defined else true %}
3
- {%- set default_system_prompt = default_system_prompt if default_system_prompt is defined else true %}
4
- {%- set reasoning_effort = reasoning_effort if reasoning_effort is defined else "high" %}
5
- {%- set think_render_option = think_render_option if think_render_option is defined else "lastthink" %}
 
 
6
 
7
- {#- ======== System Block State ======== #}
8
- {%- set sys_ns = namespace(is_first_block=true) -%}
9
-
10
- {#- ======== Find last user message index ======== #}
11
- {%- set last_user_idx = namespace(value=-1) -%}
12
- {%- for message in messages -%}
13
- {%- if message.role == 'user' -%}
14
- {%- set last_user_idx.value = loop.index0 -%}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
  {%- endif -%}
16
- {%- endfor -%}
17
 
18
- {#- ======== System messages renderers ======== #}
19
- {%- macro render_system_message(user_system_messages) %}
20
- {%- if default_system_prompt %}
21
- {%- if not sys_ns.is_first_block %}{{- "\n\n" }}{%- endif %}
22
- {%- set sys_ns.is_first_block = false %}
23
- {{- "## Provider System Prompt\n\nYou are Solar Open 100B, a large language model trained by Upstage AI, a Korean startup. Your knowledge cutoff is 2025-07. The current date is " + strftime_now("%Y-%m-%d") + "." }}
24
- {%- endif -%}
25
- {%- if user_system_messages %}
26
- {%- if not sys_ns.is_first_block %}{{- "\n\n" }}{%- endif %}
27
- {%- set sys_ns.is_first_block = false %}
28
- {{- "## System Prompt" }}
29
- {%- for system_message in user_system_messages %}
30
- {{- "\n\n" }}
31
- {{- system_message }}
32
- {%- endfor %}
33
- {%- endif -%}
34
- {%- endmacro %}
35
-
36
- {%- macro render_tool_instruction(tools) %}
37
- {%- if not sys_ns.is_first_block %}{{- "\n\n" }}{%- endif %}
38
- {%- set sys_ns.is_first_block = false %}
39
- {{- "## Tools\n\n### Tool Call Instruction" }}
40
- {{- "\nYou may invoke one or more tools to assist with the user's query. Available tools are provided in JSON Schema format: <|tools:begin|><|tool:begin|><tools-json-object><|tool:end|>...<|tools:end|>\n" }}
41
- {{- "\n### Available Tools\n" }}
42
- {{- "<|tools:begin|>" }}
43
- {%- for tool in tools %}
44
- {{- "<|tool:begin|>" }}
45
- {{- tool.function | tojson }}
46
- {{- "<|tool:end|>" }}
47
- {%- endfor %}
48
- {{- "<|tools:end|>\n" }}
49
- {{- "\n### Tool Call Format\n" }}
50
- {{- "For each tool call, return a JSON object with the following structure, enclosed within <|tool_call:begin|> and <|tool_call:end|> tags: \n<|tool_call:begin|><tool-call-id><|tool_call:name|><tool-name><|tool_call:args|><args-json-object><|tool_call:end|>\n" }}
51
- {{- "- The <tool-call-id> must be a randomly generated string consisting of 10 lowercase letters (a-z) and/or digits (0-9) (e.g., a1b2c3d4e5)\n" }}
52
- {{- "\n### Tool Response Format\n" }}
53
- {{- "Each tool is responded by `tool` with the following structure:\n<|tool_response:id|><tool-call-id><|tool_response:name|><tool-name><|tool_response:result|><results><|tool_response:end|>\n" }}
54
- {{- "- Ensure the <tool-call-id> matches the corresponding tool call" -}}
55
- {%- endmacro %}
56
-
57
- {%- macro render_json_response_format_instruction(response_format) %}
58
- {%- if not sys_ns.is_first_block %}{{- "\n\n" }}{%- endif %}
59
- {%- set sys_ns.is_first_block = false %}
60
- {{- "## Output Format Constraint" }}
61
- {{- "\n\nYour final response should follow the JSON schema: \n[Start of schema]" }}
62
- {{- response_format }}
63
- {{- "\n[End of schema]\nPlease ensure your answers adhere to this format and do not contain any unnecessary text." }}
64
- {%- endmacro %}
65
-
66
- {%- macro get_tool_name(messages, tool_call_id) %}
67
- {%- for msg in messages -%}
68
- {%- if msg.role == 'assistant' and msg.tool_calls -%}
69
- {%- for tool_call in msg.tool_calls -%}
70
- {%- if tool_call.id == tool_call_id -%}
71
- {{- tool_call.function.name }}
72
- {%- endif -%}
73
- {%- endfor -%}
74
  {%- endif -%}
 
75
  {%- endfor -%}
76
- {%- endmacro %}
 
77
 
78
- {%- macro render_tool_arguments(tool_arguments) %}
79
- {%- if tool_arguments is mapping -%}
80
- {{- tool_arguments | tojson }}
81
- {%- else -%}
82
- {{- tool_arguments }}
 
 
 
 
 
 
 
83
  {%- endif -%}
84
- {%- endmacro %}
 
85
 
86
- {#- ======== Render system message ======== #}
87
- {%- set ns = namespace(system_messages=[]) -%}
88
- {%- for message in messages -%}
89
- {%- if message.role == 'system' -%}
90
- {%- set ns.system_messages = ns.system_messages + [message.content] -%}
 
91
  {%- endif -%}
92
- {%- endfor -%}
93
 
94
- {%- if ns.system_messages or default_system_prompt or tools or response_format -%}
95
- {{- "<|begin|>system<|content|>" }}
96
- {{- render_system_message(ns.system_messages) }}
97
- {%- if tools -%}
98
- {{- render_tool_instruction(tools) }}
99
- {%- endif %}
100
- {%- if response_format -%}
101
- {{- render_json_response_format_instruction(response_format) }}
102
- {%- endif %}
103
- {{- "<|end|>" }}
 
 
 
 
104
  {%- endif -%}
105
 
106
- {#- ======== Render main messages ======== #}
 
 
107
  {%- for message in messages -%}
108
- {%- if message.role == 'user' -%}
109
- {{- "<|begin|>user<|content|>" + message.content + "<|end|>" }}
110
- {%- elif message.role == 'tool' -%}
111
- {%- set prev_is_tool = loop.index0 > 0 and messages[loop.index0 - 1].role == 'tool' -%}
112
- {%- set next_is_tool = loop.index0 < (messages | length - 1) and messages[loop.index0 + 1].role == 'tool' -%}
113
- {%- if not prev_is_tool -%}
114
- {{- "<|begin|>tool<|tool_response|>" }}
115
- {%- endif -%}
116
- {{- "<|tool_response:begin|>" + message.tool_call_id + "<|tool_response:name|>" }}
117
- {{- get_tool_name(messages, message.tool_call_id) }}
118
- {{- "<|tool_response:result|>" }}
119
- {{- message.content }}
120
- {{- "<|tool_response:end|>" }}
121
- {%- if not next_is_tool -%}
122
- {{- "<|end|>" }}
123
- {%- endif -%}
124
- {%- elif message.role == 'assistant' -%}
125
- {#- ======== Assistant Thinking ======== #}
126
- {%- if think_render_option == "all" -%}
127
- {%- if message.reasoning -%}
128
- {{- "<|begin|>assistant<|think|>" + message.reasoning + "<|end|>" }}
129
  {%- endif -%}
130
- {%- elif think_render_option == "lastthink" -%}
131
- {%- if message.reasoning and loop.index0 > last_user_idx.value -%}
132
- {{- "<|begin|>assistant<|think|>" + message.reasoning + "<|end|>" }}
 
133
  {%- endif -%}
134
- {%- endif -%}
135
 
136
- {#- ======== Assistant Messages ======== #}
137
- {%- if message.tool_calls -%}
138
- {{- "<|begin|>assistant<|tool_calls|>" }}
139
- {%- for tool_call in message.tool_calls -%}
140
- {{- "<|tool_call:begin|>" + tool_call.id +"<|tool_call:name|>" + tool_call.function.name + "<|tool_call:args|>" }}
141
- {{- render_tool_arguments(tool_call.function.arguments) }}
142
- {{- "<|tool_call:end|>" }}
 
 
 
 
 
 
 
 
143
  {%- endfor -%}
144
- {{- "<|calls|>" }}
145
- {%- else -%}
146
- {{- "<|begin|>assistant<|content|>" + message.content + "<|end|>" }}
147
  {%- endif -%}
 
148
  {%- endif -%}
149
  {%- endfor -%}
150
 
 
151
  {%- if add_generation_prompt -%}
152
- {%- if reasoning_effort in ["low", "minimal"] -%}
153
- {{- "<|begin|>assistant<|think|><|end|>" }}
154
- {%- endif -%}
155
- {{- "<|begin|>assistant" }}
156
  {%- endif -%}
 
1
+ {#-
2
+ LLaDA22 chat template NO-THINK variant.
3
+ Usage:
4
+ start_header: "<role>assistant</role>"
5
+ end_header: "<|role_end|>"
6
+ end_learnable_inclusive: true
7
+ #}
8
 
9
+ {#- Message Content Rendering ============================================== #}
10
+ {%- macro render_content(content) -%}
11
+ {%- if content is string -%}
12
+ {{- content -}}
13
+ {%- elif content is iterable and content is not mapping -%}
14
+ {%- for item in content -%}
15
+ {%- if item is mapping -%}
16
+ {%- if 'text' in item -%}
17
+ {{- item.text -}}
18
+ {%- elif 'image' in item or 'image_url' in item or item.get('type') == 'image' -%}
19
+ {{- raise_exception('Constraint Violation: Image data detected.') -}}
20
+ {%- elif 'video' in item or item.get('type') == 'video' -%}
21
+ {{- raise_exception('Constraint Violation: Video data detected.') -}}
22
+ {%- else -%}
23
+ {{- raise_exception('Invalid mapping structure: Missing "text" key.') -}}
24
+ {%- endif -%}
25
+ {%- elif item is string -%}
26
+ {{- item -}}
27
+ {%- else -%}
28
+ {{- raise_exception('Invalid item type: Must be string or mapping.') -}}
29
+ {%- endif -%}
30
+ {%- endfor -%}
31
+ {%- elif content is none or content is undefined -%}
32
+ {{- '' -}}
33
+ {%- else -%}
34
+ {{- raise_exception('Fatal error: Content must be a string, iterable, or None.') -}}
35
  {%- endif -%}
36
+ {%- endmacro -%}
37
 
38
+ {%- macro render_toolcalls(message, ns_tool) -%}
39
+ {{- '<|tool_calls_section_begin|>' -}}
40
+ {%- for tool_call in message.get('tool_calls', []) -%}
41
+ {%- set original_id = tool_call.get('id', '') -%}
42
+ {%- set func_name = tool_call.get('function', {}).get('name', 'unknown') -%}
43
+
44
+ {%- set tool_id = 'functions.' + func_name + ':' + ns_tool.index|string -%}
45
+
46
+ {%- set ns_tool.id_map = ns_tool.id_map + [[original_id, tool_id]] -%}
47
+ {%- set ns_tool.index = ns_tool.index + 1 -%}
48
+
49
+ {%- set args = tool_call.get('function', {}).get('arguments', '') -%}
50
+ {{- '<|tool_call_begin|>' + tool_id + '<|tool_call_argument_begin|>' -}}
51
+ {%- if args is string -%}
52
+ {{- args -}}
53
+ {%- else -%}
54
+ {{- args | tojson -}}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
  {%- endif -%}
56
+ {{- '<|tool_call_end|>' -}}
57
  {%- endfor -%}
58
+ {{- '<|tool_calls_section_end|>' -}}
59
+ {%- endmacro -%}
60
 
61
+ {%- if not messages -%}
62
+ {{- raise_exception('No messages provided.') -}}
63
+ {%- endif -%}
64
+
65
+ {# 1. System Instruction, Model Identity & Tools Injection #}
66
+ {%- set ns_sys = namespace(has_system=false, content='') -%}
67
+
68
+
69
+ {%- if messages[0].role == 'system' -%}
70
+ {%- set ns_sys.has_system = true -%}
71
+ {%- if ns_sys.content -%}
72
+ {%- set ns_sys.content = ns_sys.content + '\n\n' -%}
73
  {%- endif -%}
74
+ {%- set ns_sys.content = ns_sys.content + render_content(messages[0].content) -%}
75
+ {%- endif -%}
76
 
77
+ {%- if tools or ns_sys.content -%}
78
+ {{- '<role>system</role>' -}}
79
+
80
+ {%- if ns_sys.content -%}
81
+ {{- ns_sys.content -}}
82
+ {%- if tools -%}{{ '\n\n' }}{%- endif -%}
83
  {%- endif -%}
 
84
 
85
+ {#- Tool Definition Rendering -#}
86
+ {%- if tools and tools is iterable and tools is not mapping -%}
87
+ {{- "<tools>\n" -}}
88
+ {%- if tools_ts_str -%}
89
+ {{- tools_ts_str -}}
90
+ {%- else -%}
91
+ {%- for tool in tools -%}
92
+ {{- tool | tojson(ensure_ascii=False) -}}{{ '\n' -}}
93
+ {%- endfor -%}
94
+ {%- endif -%}
95
+ {{- "</tools>\n" -}}
96
+ {%- endif -%}
97
+
98
+ {{- '<|role_end|>' -}}
99
  {%- endif -%}
100
 
101
+ {# 2. Main Message Rendering Loop #}
102
+ {%- set ns_tool = namespace(index=0, id_map=[]) -%}
103
+
104
  {%- for message in messages -%}
105
+ {# Skip the first System message as it is pre-rendered above #}
106
+ {%- if not (loop.first and message.role == 'system') -%}
107
+
108
+ {%- set content_text = render_content(message.content) -%}
109
+ {%- set role_name = message.get('name') or message.role -%}
110
+
111
+ {%- if message.role == 'user' or message.role == 'system' -%}
112
+ {{- '<role>' + role_name + '</role>' -}}
113
+ {{- content_text + '<|role_end|>' -}}
114
+
115
+ {%- elif message.role == 'assistant' -%}
116
+ {{- '<role>' + role_name + '</role>' -}}
117
+
118
+ {#- NO-THINK: completely ignore reasoning_content, strip <think> from content -#}
119
+ {%- set final_content = content_text -%}
120
+
121
+ {#- Strip embedded <think>...</think> from content if present -#}
122
+ {%- if '<think>' in final_content and '</think>' in final_content -%}
123
+ {%- set parts = final_content.split('</think>', 1) -%}
124
+ {%- set final_content = parts[1].strip() -%}
 
125
  {%- endif -%}
126
+
127
+ {#- Output content directly, no think tags -#}
128
+ {%- if final_content -%}
129
+ {{- final_content -}}
130
  {%- endif -%}
 
131
 
132
+ {%- if message.tool_calls -%}
133
+ {{- render_toolcalls(message, ns_tool) -}}
134
+ {%- endif -%}
135
+
136
+ {{- '<|role_end|>' -}}
137
+
138
+ {%- elif message.role == 'tool' -%}
139
+ {{- '<role>tool</role>' -}}
140
+ {%- set original_id = message.get('tool_call_id', '') -%}
141
+
142
+ {%- set ns_lookup = namespace(mapped_id=original_id) -%}
143
+ {%- for pair in ns_tool.id_map -%}
144
+ {%- if pair[0] == original_id -%}
145
+ {%- set ns_lookup.mapped_id = pair[1] -%}
146
+ {%- endif -%}
147
  {%- endfor -%}
148
+
149
+ {{- '## Return of ' + ns_lookup.mapped_id + '\n' -}}
150
+ {{- content_text + '\n<|role_end|>' -}}
151
  {%- endif -%}
152
+
153
  {%- endif -%}
154
  {%- endfor -%}
155
 
156
+ {# 3. Generation Prompt Suffix — no think tag #}
157
  {%- if add_generation_prompt -%}
158
+ {{- '<role>assistant</role>' -}}
 
 
 
159
  {%- endif -%}
config.json CHANGED
@@ -1,36 +1,58 @@
1
  {
2
- "model_type": "solar_open",
3
  "architectures": [
4
- "SolarOpenForCausalLM"
5
  ],
6
- "pad_token_id": 2,
7
- "bos_token_id": 1,
8
- "eos_token_id": 2,
9
- "partial_rotary_factor": 1.0,
 
 
 
10
  "hidden_size": 4096,
11
- "num_hidden_layers": 48,
12
- "num_attention_heads": 64,
13
- "head_dim": 128,
14
- "num_key_value_heads": 8,
15
- "vocab_size": 196608,
16
- "intermediate_size": 10240,
17
- "moe_intermediate_size": 1280,
18
- "rms_norm_eps": 1e-05,
19
- "rope_theta": 1000000,
20
  "max_position_embeddings": 131072,
21
- "n_routed_experts": 128,
22
- "n_shared_experts": 1,
23
  "norm_topk_prob": true,
24
- "routed_scaling_factor": 1.0,
25
  "num_experts_per_tok": 8,
 
 
 
 
 
 
 
 
26
  "tie_word_embeddings": false,
27
  "torch_dtype": "bfloat16",
28
- "first_k_dense_replace": 0,
29
- "use_cache": true,
30
- "transformers_version": "4.57.1",
31
- "rope_scaling": {
32
- "type": "yarn",
33
- "factor": 2.0,
34
- "original_max_position_embeddings": 65536
35
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  }
 
1
  {
 
2
  "architectures": [
3
+ "LLaDA2MoeModelLM"
4
  ],
5
+ "attention_dropout": 0.0,
6
+ "auto_map": {
7
+ "AutoConfig": "configuration_llada2_moe.LLaDA2MoeConfig",
8
+ "AutoModel": "modeling_llada2_moe.LLaDA2MoeModel",
9
+ "AutoModelForCausalLM": "modeling_llada2_moe.LLaDA2MoeModelLM"
10
+ },
11
+ "num_hidden_layers": 32,
12
  "hidden_size": 4096,
13
+ "intermediate_size": 9216,
14
+ "first_k_dense_replace": 1,
15
+ "hidden_act": "silu",
 
 
 
 
 
 
16
  "max_position_embeddings": 131072,
17
+ "model_type": "llada2_moe",
18
+ "moe_intermediate_size": 1024,
19
  "norm_topk_prob": true,
 
20
  "num_experts_per_tok": 8,
21
+ "expert_capacity": 48,
22
+ "block_size": 32,
23
+ "norm_head": false,
24
+ "num_attention_heads": 32,
25
+ "num_experts": 256,
26
+ "num_key_value_heads": 4,
27
+ "rope_theta": 3000000,
28
+ "rope_scaling": null,
29
  "tie_word_embeddings": false,
30
  "torch_dtype": "bfloat16",
31
+ "transformers_version": "5.2.0",
32
+ "use_bias": false,
33
+ "use_rmsnorm": true,
34
+ "rms_norm_eps": 1e-06,
35
+ "head_dim": 128,
36
+ "num_shared_experts": 1,
37
+ "use_cache": false,
38
+ "use_qk_norm": true,
39
+ "use_qkv_bias": false,
40
+ "embedding_dropout": 0.0,
41
+ "norm_softmax": false,
42
+ "output_dropout": 0.0,
43
+ "vocab_size": 157184,
44
+ "rotary_dim": 64,
45
+ "using_split_qkv_in_self_attention": false,
46
+ "router_dtype": "fp32",
47
+ "moe_router_enable_expert_bias": true,
48
+ "routed_scaling_factor": 2.5,
49
+ "n_group": 8,
50
+ "topk_group": 4,
51
+ "score_function": "sigmoid",
52
+ "initializer_range": 0.02,
53
+ "max_window_layers": 28,
54
+ "output_router_logits": false,
55
+ "pad_token_id": 156892,
56
+ "partial_rotary_factor": 0.5,
57
+ "use_sliding_window": false
58
  }
configuration_llada2_moe.py ADDED
@@ -0,0 +1,94 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """LLaDA2 MoE model configuration"""
2
+
3
+ from transformers.configuration_utils import PretrainedConfig
4
+
5
+
6
+ class LLaDA2MoeConfig(PretrainedConfig):
7
+ model_type = "llada2_moe"
8
+
9
+ def __init__(
10
+ self,
11
+ vocab_size=30592,
12
+ hidden_size=1024,
13
+ intermediate_size=None,
14
+ num_hidden_layers=24,
15
+ num_attention_heads=16,
16
+ num_key_value_heads=0,
17
+ hidden_act="silu",
18
+ use_qkv_bias=False, # llada2 only
19
+ use_qk_norm=False,
20
+ use_bias=True, # llada2 only
21
+ rms_norm_eps=1e-05,
22
+ norm_head=False, # llada2 only
23
+ tie_word_embeddings=False, # PretrainedConfig key, here change default value.
24
+ embedding_dropout=0.1,
25
+ attention_dropout=0.1,
26
+ output_dropout=0.1,
27
+ initializer_range=0.02,
28
+ max_position_embeddings=16384,
29
+ rope_theta=10000.0,
30
+ use_cache=True,
31
+ use_sliding_window=False,
32
+ sliding_window=4096,
33
+ max_window_layers=28,
34
+ rope_scaling=None,
35
+ pad_token_id=126081,
36
+ num_experts=16,
37
+ num_shared_experts=0,
38
+ num_experts_per_tok=2,
39
+ n_group=8,
40
+ topk_group=4,
41
+ routed_scaling_factor=2.5,
42
+ moe_intermediate_size=None,
43
+ first_k_dense_replace=0,
44
+ head_dim=None,
45
+ output_router_logits=False,
46
+ partial_rotary_factor=0.5,
47
+ expert_capacity=48,
48
+ block_size=32,
49
+ **kwargs,
50
+ ):
51
+ self.num_hidden_layers = num_hidden_layers
52
+ self.vocab_size = vocab_size
53
+ self.hidden_size = hidden_size
54
+ self.intermediate_size = intermediate_size
55
+ self.num_attention_heads = num_attention_heads
56
+ self.num_key_value_heads = num_key_value_heads
57
+ self.hidden_act = hidden_act
58
+ self.use_qkv_bias = use_qkv_bias
59
+ self.use_qk_norm = use_qk_norm
60
+ self.use_bias = use_bias
61
+ self.norm_head = norm_head
62
+ self.rms_norm_eps = rms_norm_eps
63
+ self.embedding_dropout = embedding_dropout
64
+ self.attention_dropout = attention_dropout
65
+ self.output_dropout = output_dropout
66
+ self.initializer_range = initializer_range
67
+ self.max_position_embeddings = max_position_embeddings
68
+ self.rope_theta = rope_theta
69
+ self.use_cache = use_cache
70
+ self.use_sliding_window = use_sliding_window
71
+ self.sliding_window = sliding_window
72
+ self.max_window_layers = max_window_layers
73
+ self.head_dim = head_dim or self.hidden_size // self.num_attention_heads
74
+ self.rope_scaling = rope_scaling
75
+
76
+ # MoE configs
77
+ self.num_experts = num_experts
78
+ self.num_shared_experts = num_shared_experts
79
+ self.num_experts_per_tok = num_experts_per_tok
80
+ self.n_group = n_group
81
+ self.topk_group = topk_group
82
+ self.moe_intermediate_size = moe_intermediate_size
83
+ self.first_k_dense_replace = first_k_dense_replace
84
+ self.output_router_logits = output_router_logits
85
+ self.routed_scaling_factor = routed_scaling_factor
86
+ self.partial_rotary_factor = partial_rotary_factor
87
+
88
+ # Block routing configs
89
+ self.expert_capacity = expert_capacity
90
+ self.block_size = block_size
91
+
92
+ super().__init__(
93
+ pad_token_id=pad_token_id, tie_word_embeddings=tie_word_embeddings, **kwargs
94
+ )
generation_config.json CHANGED
@@ -1,14 +1,7 @@
1
  {
2
  "_from_model_config": true,
3
- "bos_token_id": 1,
4
- "eos_token_id": [
5
- 2,
6
- 24,
7
- 25
8
- ],
9
- "pad_token_id": 2,
10
- "transformers_version": "4.57.3",
11
- "do_sample": true,
12
- "temperature": 0.8,
13
- "top_p": 0.95
14
  }
 
1
  {
2
  "_from_model_config": true,
3
+ "eos_token_id": [156892, 156900],
4
+ "pad_token_id": 156892,
5
+ "transformers_version": "5.2.0",
6
+ "use_cache": false
 
 
 
 
 
 
 
7
  }
model-00000-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5d1990021fcc7bdbd07c1c0089073e2e6c412e1fd8cc4e40d349846087546127
3
+ size 12304705856
model-00001-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4abb1bc2dff14189ad2ed4b9800af3fb54757a0759ce68aed6204b11ee4a7deb
3
+ size 6241216968
model-00002-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a5a69255edc9ec0541f84448cb260da5b5067b45709554ea3e2a450b52eb267a
3
+ size 6241217160
model-00003-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d42ed754dbe4f71a8be830e36e60f896dcf3b843515cd02f44ba99c48b798b94
3
+ size 6241217160
model-00004-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:fc808529f723a2094b0ed4feb6f73eaa57b41f6e3fc808e953890b9b1581b1ad
3
+ size 6241217160
model-00005-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d9b716b15ee2052eb27f367add5c058c2cdc379b4c0d694442320afa1f6d8014
3
+ size 6241217160
model-00006-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0ef0ab4f979996160dcedb3ea801ddaff6c76a8bd90743331eda8a38c7a37d66
3
+ size 6241217160
model-00007-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3ef1088e751d6f96b611596f82c2a75d40f2dc2ebcc89710cba0694aa44e11b4
3
+ size 6241217160
model-00008-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b3b29011b004955d811d126e6079b0a020fad605dfb838d994746fc2d3697386
3
+ size 6241217160
model-00009-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3ec94d969a5d31c9263d2f6ea883dee0e23d824bad7f5df6ce3c066541628051
3
+ size 6241217160
model-00010-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:edeb684cb0a29468d3292dd79bb349b8eb8b6b2b455da89b31272cfb02abe43d
3
+ size 6241217160
model-00011-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:057bbb40f925141c459c22b34fb29aa43293f9686b99c52eff40a5790d3b97a4
3
+ size 6241217160
model-00012-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5297203652203933efb0e5c1b4231592cd387d3e6a8ba005d6ad718ee1ba5cd5
3
+ size 6241217528
model-00013-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7b52c6ceb64ce9cc192e7153c1003f58feb84a6b4eff66dd8bcf14cbeaca08c3
3
+ size 6241217904
model-00014-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:790c089f45a061711ff6e2442359702b3011e4cf1055928e53175ff30db7da6c
3
+ size 6241217904
model-00015-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1688f8d99143a104fc743959d293c9c7e8ed88ca9246a32b6c66e568250e0e76
3
+ size 6241217904
model-00016-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2b673b90d7ce20df76bcd63ed68da1fc56a23c5b6ea66d80003a6b484a8583cb
3
+ size 6241217904
model-00017-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e9741de327958cd1542206f46df66c064ae8b55eaf6408c57ec32099097dd22e
3
+ size 6241217904
model-00018-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d2b1eedc53f6f5110c9f7cbda3e39682600572aa142b1c8792a50300572336ae
3
+ size 6241217904
model-00019-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7ce6cc65fadbe15d0d9695e1a5e371f2df4ae2c6bcb5fcb93ed731a3f4322fc2
3
+ size 6241217904
model-00020-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a173a41b95409b6d1aff76f2c923f51936f9679c07b4480e3220ed5e8aaf6688
3
+ size 6241217904
model-00021-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f369627b48e8ff61d77daca5dddc4fe8e66428156d25030d3c45c522fa212f48
3
+ size 6241217904
model-00022-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e1670d3b111e173e45f773e2aef2a982f7e8b074c5a74ce2b9d8a2d795d95a30
3
+ size 6241217904
model-00023-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6cb566ee0a2bb9161946dd7dd2785f3ff35f31cd59d26b8e52cd8888bc33126e
3
+ size 6241217904
model-00024-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:110d4e1c4071796e4e6d3562a6afa55a5e9653f79b22d507c9472baea9ab8a0e
3
+ size 6241217904
model-00025-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e50d758bed684abfd4dfe567d41d652908bb809ad4581925d750d4f82b384e12
3
+ size 6241217904
model-00026-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:12c25ff4880833827155b08ead89b59ee66cbf1942c7f30a511d6403df411be6
3
+ size 6241217904
model-00027-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:332260d4dd6c96a68cc679c712032caa5dda9ed6170f0b38b98917428ca1aa7d
3
+ size 6241217904
model-00028-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d67a39cce185e1c5ae88efe66247b94231de6ad4dd43d9696fd2a517a56a0ea2
3
+ size 6241217904
model-00029-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:300e136169bba055b66c2c47602494a4457e2c3f06764f2b7ba17cbaa9599e7f
3
+ size 6241217904
model-00030-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6dd9ec5fdd4b8bb609de7cc6c6dc3b5b18af98df086d6bc3c2da678f6d81fe78
3
+ size 6241217904
model-00031-of-00032.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:6c133427faaa6fc619549824fd96f60b2a1901eca7a0c47c85f8021a6168c3a7
3
+ size 6241217904
model.safetensors.index.json CHANGED
The diff for this file is too large to render. See raw diff
 
modeling_llada2_moe.py ADDED
@@ -0,0 +1,1800 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright 2025 Antgroup and The HuggingFace Inc. team. All rights reserved.
2
+ #
3
+ # This code is based on EleutherAI's GPT-NeoX library and the GPT-NeoX
4
+ # and OPT implementations in this library. It has been modified from its
5
+ # original forms to accommodate minor architectural differences compared
6
+ # to GPT-NeoX and OPT used by the Meta AI team that trained the model.
7
+ #
8
+ # Licensed under the Apache License, Version 2.0 (the "License");
9
+ # you may not use this file except in compliance with the License.
10
+ # You may obtain a copy of the License at
11
+ #
12
+ # http://www.apache.org/licenses/LICENSE-2.0
13
+ #
14
+ # Unless required by applicable law or agreed to in writing, software
15
+ # distributed under the License is distributed on an "AS IS" BASIS,
16
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+ """PyTorch LLaDA2MoE model."""
20
+
21
+ import math
22
+ from typing import List, Callable, Optional, Tuple, Union
23
+
24
+ import torch
25
+ import torch.nn.functional as F
26
+ from torch import nn
27
+ from torch.nn import CrossEntropyLoss
28
+
29
+ from transformers.activations import ACT2FN
30
+ from transformers.cache_utils import Cache, DynamicCache
31
+ from transformers.masking_utils import create_bidirectional_mask
32
+ from transformers.modeling_outputs import (
33
+ MoeModelOutputWithPast,
34
+ MoeCausalLMOutputWithPast,
35
+ )
36
+ from transformers.modeling_rope_utils import ROPE_INIT_FUNCTIONS, dynamic_rope_update
37
+ from transformers.modeling_utils import ALL_ATTENTION_FUNCTIONS, PreTrainedModel
38
+ from transformers.processing_utils import Unpack
39
+ from transformers.pytorch_utils import (
40
+ ALL_LAYERNORM_LAYERS,
41
+ )
42
+ from transformers.utils import (
43
+ TransformersKwargs,
44
+ add_start_docstrings,
45
+ add_start_docstrings_to_model_forward,
46
+ logging,
47
+ replace_return_docstrings,
48
+ )
49
+ from .configuration_llada2_moe import LLaDA2MoeConfig
50
+ from transformers.generation.utils import GenerationMixin
51
+
52
+
53
+ logger = logging.get_logger(__name__)
54
+
55
+ _CONFIG_FOR_DOC = "LLaDA2MoeConfig"
56
+
57
+
58
+ def _get_unpad_data(attention_mask):
59
+ seqlens_in_batch = attention_mask.sum(dim=-1, dtype=torch.int32)
60
+ indices = torch.nonzero(attention_mask.flatten(), as_tuple=False).flatten()
61
+ max_seqlen_in_batch = seqlens_in_batch.max().item()
62
+ cu_seqlens = F.pad(
63
+ torch.cumsum(seqlens_in_batch, dim=0, dtype=torch.torch.int32), (1, 0)
64
+ )
65
+ return (
66
+ indices,
67
+ cu_seqlens,
68
+ max_seqlen_in_batch,
69
+ )
70
+
71
+
72
+ class LLaDA2MoeRMSNorm(nn.Module):
73
+ def __init__(self, hidden_size, eps=1e-6):
74
+ """
75
+ LLaDA2MoeRMSNorm is equivalent to T5LayerNorm
76
+ """
77
+ super().__init__()
78
+ self.weight = nn.Parameter(torch.ones(hidden_size))
79
+ self.variance_epsilon = eps
80
+
81
+ def forward(self, hidden_states):
82
+ input_dtype = hidden_states.dtype
83
+ hidden_states = hidden_states.to(torch.float32)
84
+ variance = hidden_states.pow(2).mean(-1, keepdim=True)
85
+ hidden_states = hidden_states * torch.rsqrt(variance + self.variance_epsilon)
86
+ return self.weight * hidden_states.to(input_dtype)
87
+
88
+
89
+ ALL_LAYERNORM_LAYERS.append(LLaDA2MoeRMSNorm)
90
+
91
+
92
+ class LLaDA2MoeRotaryEmbedding(nn.Module):
93
+ inv_freq: torch.Tensor # fix linting for register_buffer
94
+
95
+ def __init__(self, config: LLaDA2MoeConfig, device=None):
96
+ super().__init__()
97
+ self.max_seq_len_cached = config.max_position_embeddings
98
+ self.original_max_seq_len = config.max_position_embeddings
99
+
100
+ self.config = config
101
+
102
+ self.rope_type = self.config.rope_parameters["rope_type"]
103
+ rope_init_fn: Callable = self.compute_default_rope_parameters
104
+ if self.rope_type != "default":
105
+ rope_init_fn = ROPE_INIT_FUNCTIONS[self.rope_type]
106
+ inv_freq, self.attention_scaling = rope_init_fn(self.config, device)
107
+
108
+ self.register_buffer("inv_freq", inv_freq, persistent=False)
109
+ self.register_buffer("original_inv_freq", inv_freq.clone(), persistent=False)
110
+
111
+ @staticmethod
112
+ def compute_default_rope_parameters(
113
+ config: LLaDA2MoeConfig = None,
114
+ device=None,
115
+ seq_len: int = None,
116
+ ):
117
+ base = config.rope_parameters["rope_theta"]
118
+ partial_rotary_factor = config.rope_parameters.get("partial_rotary_factor", 1.0)
119
+ head_dim = getattr(config, "head_dim", None) or config.hidden_size // config.num_attention_heads
120
+ dim = int(head_dim * partial_rotary_factor)
121
+
122
+ attention_factor = 1.0 # Unused in this type of RoPE
123
+
124
+ inv_freq = 1.0 / (
125
+ base ** (torch.arange(0, dim, 2, dtype=torch.int64).to(device=device, dtype=torch.float) / dim)
126
+ )
127
+ return inv_freq, attention_factor
128
+
129
+ @torch.no_grad()
130
+ @dynamic_rope_update # power user: used with advanced RoPE types (e.g. dynamic rope)
131
+ def forward(self, x, position_ids):
132
+ inv_freq_expanded = (
133
+ self.inv_freq[None, :, None]
134
+ .float()
135
+ .expand(position_ids.shape[0], -1, 1)
136
+ .to(x.device)
137
+ )
138
+ position_ids_expanded = position_ids[:, None, :].float()
139
+
140
+ device_type = (
141
+ x.device.type
142
+ if isinstance(x.device.type, str) and x.device.type != "mps"
143
+ else "cpu"
144
+ )
145
+ with torch.autocast(device_type=device_type, enabled=False): # Force float32
146
+ freqs = (
147
+ inv_freq_expanded.float() @ position_ids_expanded.float()
148
+ ).transpose(1, 2)
149
+ emb = torch.cat((freqs, freqs), dim=-1)
150
+ cos = emb.cos() * self.attention_scaling
151
+ sin = emb.sin() * self.attention_scaling
152
+
153
+ return cos.to(dtype=x.dtype), sin.to(dtype=x.dtype)
154
+
155
+
156
+ # Copied from transformers.models.llama.modeling_llama.rotate_half
157
+ def rotate_half(x):
158
+ """Rotates half the hidden dims of the input."""
159
+ x1 = x[..., : x.shape[-1] // 2]
160
+ x2 = x[..., x.shape[-1] // 2 :]
161
+ return torch.cat((-x2, x1), dim=-1)
162
+
163
+
164
+ # Copied from transformers.models.llama.modeling_llama.apply_rotary_pos_emb
165
+ def apply_rotary_pos_emb(q, k, cos, sin, position_ids=None, unsqueeze_dim=1):
166
+ """Applies Rotary Position Embedding to the query and key tensors.
167
+
168
+ Args:
169
+ q (`torch.Tensor`): The query tensor.
170
+ k (`torch.Tensor`): The key tensor.
171
+ cos (`torch.Tensor`): The cosine part of the rotary embedding.
172
+ sin (`torch.Tensor`): The sine part of the rotary embedding.
173
+ position_ids (`torch.Tensor`):
174
+ The position indices of the tokens corresponding to the query and key tensors. For example, this can be
175
+ used to pass offsetted position ids when working with a KV-cache.
176
+ unsqueeze_dim (`int`, *optional*, defaults to 1):
177
+ The 'unsqueeze_dim' argument specifies the dimension along which to unsqueeze cos[position_ids] and
178
+ sin[position_ids] so that they can be properly broadcasted to the dimensions of q and k. For example, note
179
+ that cos[position_ids] and sin[position_ids] have the shape [batch_size, seq_len, head_dim]. Then, if q and
180
+ k have the shape [batch_size, heads, seq_len, head_dim], then setting unsqueeze_dim=1 makes
181
+ cos[position_ids] and sin[position_ids] broadcastable to the shapes of q and k. Similarly, if q and k have
182
+ the shape [batch_size, seq_len, heads, head_dim], then set unsqueeze_dim=2.
183
+ Returns:
184
+ `tuple(torch.Tensor)` comprising the query and key tensors rotated using the Rotary Position Embedding.
185
+ """
186
+ cos = cos.unsqueeze(unsqueeze_dim)
187
+ sin = sin.unsqueeze(unsqueeze_dim)
188
+
189
+ # Keep half or full tensor for later concatenation
190
+ rotary_dim = cos.shape[-1]
191
+ q_rot, q_pass = q[..., :rotary_dim], q[..., rotary_dim:]
192
+ k_rot, k_pass = k[..., :rotary_dim], k[..., rotary_dim:]
193
+
194
+ # Apply rotary embeddings on the first half or full tensor
195
+ q_embed = (q_rot * cos) + (rotate_half(q_rot) * sin)
196
+ k_embed = (k_rot * cos) + (rotate_half(k_rot) * sin)
197
+
198
+ # Concatenate back to full shape
199
+ q_embed = torch.cat([q_embed, q_pass], dim=-1)
200
+ k_embed = torch.cat([k_embed, k_pass], dim=-1)
201
+ return q_embed, k_embed
202
+
203
+
204
+ class LLaDA2MoeMLP(nn.Module):
205
+ def __init__(self, config: LLaDA2MoeConfig, intermediate_size: int):
206
+ super().__init__()
207
+ self.config = config
208
+ self.hidden_size = config.hidden_size
209
+ self.intermediate_size = intermediate_size
210
+
211
+ self.gate_proj = nn.Linear(self.hidden_size, self.intermediate_size, bias=False)
212
+ self.up_proj = nn.Linear(self.hidden_size, self.intermediate_size, bias=False)
213
+ self.down_proj = nn.Linear(self.intermediate_size, self.hidden_size, bias=False)
214
+ self.act_fn = ACT2FN[config.hidden_act]
215
+
216
+ def forward(self, x):
217
+ return self.down_proj(self.act_fn(self.gate_proj(x)) * self.up_proj(x))
218
+
219
+
220
+ class LLaDA2MoeGate(nn.Module):
221
+ def __init__(self, config):
222
+ super().__init__()
223
+ self.config = config
224
+ self.top_k = config.num_experts_per_tok
225
+ self.num_experts = config.num_experts
226
+
227
+ # Block routing
228
+ self.block_size = config.block_size
229
+ self.expert_capacity = config.expert_capacity
230
+
231
+ # topk selection algorithm
232
+ self.gating_dim = config.hidden_size
233
+ self.weight = nn.Parameter(torch.empty((self.num_experts, self.gating_dim)))
234
+ self.routed_scaling_factor = config.routed_scaling_factor
235
+
236
+ self.register_buffer("expert_bias", torch.zeros(self.num_experts))
237
+ self.reset_parameters()
238
+
239
+ def reset_parameters(self) -> None:
240
+ import torch.nn.init as init
241
+
242
+ init.kaiming_uniform_(self.weight, a=math.sqrt(5))
243
+
244
+ def block_routing(self, scores_for_routing: torch.Tensor):
245
+ """Block-level top-k routing: first select expert_capacity experts per block,
246
+ then do per-token top-k within the allowed set."""
247
+ num_tokens = scores_for_routing.shape[0]
248
+ assert num_tokens % self.block_size == 0
249
+
250
+ num_blocks = num_tokens // self.block_size
251
+ # Reshape to (num_blocks, block_size, num_experts)
252
+ block_routing_scores = scores_for_routing.view(num_blocks, self.block_size, self.num_experts)
253
+
254
+ # Phase 1: compute block-level expert scores (max over tokens in each block)
255
+ block_expert_scores = block_routing_scores.max(dim=1).values # (num_blocks, num_experts)
256
+
257
+ # Select top expert_capacity experts per block
258
+ _, block_routing_indices = torch.topk(
259
+ block_expert_scores, k=self.expert_capacity, dim=-1
260
+ ) # (num_blocks, expert_capacity)
261
+
262
+ # Build allowed mask: (num_blocks, num_experts)
263
+ allowed_mask = torch.zeros(
264
+ num_blocks, self.num_experts, dtype=torch.bool, device=scores_for_routing.device
265
+ )
266
+ allowed_mask.scatter_(1, block_routing_indices, True)
267
+
268
+ # Expand mask to per-token level: (num_tokens, num_experts)
269
+ allowed_mask = allowed_mask.unsqueeze(1).expand(-1, self.block_size, -1).reshape(num_tokens, self.num_experts)
270
+
271
+ # Phase 2: per-token top-k within allowed experts
272
+ masked_scores = scores_for_routing.masked_fill(~allowed_mask, -torch.inf)
273
+ _, topk_idx = torch.topk(masked_scores, k=self.top_k, dim=-1)
274
+
275
+ return topk_idx
276
+
277
+ def forward(self, hidden_states):
278
+ # compute gating score
279
+ hidden_states = hidden_states.view(-1, hidden_states.shape[-1])
280
+ logits = F.linear(
281
+ hidden_states.type(torch.float32), self.weight.type(torch.float32)
282
+ )
283
+
284
+ scores = torch.sigmoid(logits.float()).type_as(logits)
285
+
286
+ scores_for_routing = scores + self.expert_bias
287
+
288
+ topk_idx = self.block_routing(scores_for_routing)
289
+
290
+ scores = torch.gather(scores, dim=1, index=topk_idx).type_as(logits)
291
+ topk_weight = (
292
+ scores / (scores.sum(dim=-1, keepdim=True) + 1e-20)
293
+ if self.top_k > 1
294
+ else scores
295
+ )
296
+ topk_weight = topk_weight * self.routed_scaling_factor
297
+
298
+ return topk_idx, topk_weight, logits
299
+
300
+
301
+ class LLaDA2MoeSparseMoeBlock(nn.Module):
302
+ """
303
+ A mixed expert module containing shared experts.
304
+ """
305
+
306
+ def __init__(self, config: LLaDA2MoeConfig):
307
+ super().__init__()
308
+ self.config = config
309
+ self.num_experts_per_tok = config.num_experts_per_tok
310
+ self._setup_experts()
311
+ self.gate = LLaDA2MoeGate(config)
312
+ if config.num_shared_experts is not None:
313
+ self.shared_experts = LLaDA2MoeMLP(
314
+ config=config,
315
+ intermediate_size=config.moe_intermediate_size
316
+ * config.num_shared_experts,
317
+ )
318
+
319
+ def _setup_experts(self):
320
+ self.experts = nn.ModuleList(
321
+ [
322
+ LLaDA2MoeMLP(
323
+ config=self.config,
324
+ intermediate_size=self.config.moe_intermediate_size,
325
+ )
326
+ for _ in range(self.config.num_experts)
327
+ ]
328
+ )
329
+
330
+ def forward(self, hidden_states):
331
+ identity = hidden_states
332
+ bsz, seq_len, h = hidden_states.shape
333
+ topk_idx, topk_weight, router_logits = self.gate(hidden_states)
334
+ hidden_states = hidden_states.view(-1, hidden_states.shape[-1])
335
+ flat_topk_idx = topk_idx.view(-1)
336
+ if self.training:
337
+ hidden_states = hidden_states.repeat_interleave(
338
+ self.num_experts_per_tok, dim=0
339
+ )
340
+ y = torch.empty_like(hidden_states)
341
+ for i, expert in enumerate(self.experts):
342
+ y[flat_topk_idx == i] = expert(hidden_states[flat_topk_idx == i])
343
+ y = (y.view(*topk_weight.shape, -1) * topk_weight.unsqueeze(-1)).sum(dim=1)
344
+ y = y.to(hidden_states.dtype).view(bsz, seq_len, h)
345
+ else:
346
+ y = self.moe_infer(hidden_states, topk_idx, topk_weight).view(
347
+ bsz, seq_len, h
348
+ )
349
+ if self.config.num_shared_experts is not None:
350
+ y = y + self.shared_experts(identity)
351
+ return y, (
352
+ router_logits.view(bsz, seq_len, -1),
353
+ topk_idx.view(bsz, seq_len, -1),
354
+ )
355
+
356
+ @torch.no_grad()
357
+ def moe_infer(self, x, topk_ids, topk_weight):
358
+ cnts = topk_ids.new_zeros((topk_ids.shape[0], len(self.experts)))
359
+ cnts.scatter_(1, topk_ids, 1)
360
+ tokens_per_expert = cnts.sum(dim=0)
361
+ idxs = topk_ids.view(-1).argsort()
362
+ sorted_tokens = x[idxs // topk_ids.shape[1]]
363
+ tokens_per_expert = tokens_per_expert.cpu().numpy()
364
+ outputs = []
365
+ start_idx = 0
366
+ for i, num_tokens_tensor in enumerate(tokens_per_expert):
367
+ num_tokens = num_tokens_tensor.item()
368
+ if num_tokens == 0:
369
+ continue
370
+ end_idx = start_idx + num_tokens
371
+ expert = self.experts[i]
372
+ tokens_for_this_expert = sorted_tokens[start_idx:end_idx]
373
+ expert_out = expert(tokens_for_this_expert)
374
+ outputs.append(expert_out.to(x.device))
375
+ start_idx = end_idx
376
+
377
+ outs = torch.cat(outputs, dim=0) if len(outputs) else sorted_tokens.new_empty(0)
378
+ new_x = torch.empty_like(outs)
379
+ new_x[idxs] = outs
380
+ final_out = (
381
+ new_x.view(*topk_ids.shape, -1)
382
+ .type(topk_weight.dtype)
383
+ .mul_(topk_weight.unsqueeze(dim=-1))
384
+ .sum(dim=1)
385
+ .type(new_x.dtype)
386
+ )
387
+ return final_out
388
+
389
+
390
+ # Copied from transformers.models.llama.modeling_llama.repeat_kv
391
+ def repeat_kv(hidden_states: torch.Tensor, n_rep: int) -> torch.Tensor:
392
+ """
393
+ This is the equivalent of torch.repeat_interleave(x, dim=1, repeats=n_rep). The hidden states go from (batch,
394
+ num_key_value_heads, seqlen, head_dim) to (batch, num_attention_heads, seqlen, head_dim)
395
+ """
396
+ batch, num_key_value_heads, slen, head_dim = hidden_states.shape
397
+ if n_rep == 1:
398
+ return hidden_states
399
+ hidden_states = hidden_states[:, :, None, :, :].expand(
400
+ batch, num_key_value_heads, n_rep, slen, head_dim
401
+ )
402
+ return hidden_states.reshape(batch, num_key_value_heads * n_rep, slen, head_dim)
403
+
404
+
405
+ def eager_attention_forward(
406
+ module: nn.Module,
407
+ query: torch.Tensor,
408
+ key: torch.Tensor,
409
+ value: torch.Tensor,
410
+ attention_mask: Optional[torch.Tensor],
411
+ scaling: float,
412
+ dropout: float = 0.0,
413
+ **kwargs: Unpack[TransformersKwargs],
414
+ ):
415
+ key_states = repeat_kv(key, module.num_key_value_groups)
416
+ value_states = repeat_kv(value, module.num_key_value_groups)
417
+
418
+ attn_weights = torch.matmul(query, key_states.transpose(2, 3)) * scaling
419
+ if attention_mask is not None:
420
+ attn_weights = attn_weights + attention_mask[:, :, :, : key_states.shape[-2]]
421
+
422
+ # upcast attention to fp32
423
+ attn_weights = nn.functional.softmax(attn_weights, dim=-1, dtype=torch.float32).to(
424
+ query.dtype
425
+ )
426
+ attn_weights = nn.functional.dropout(
427
+ attn_weights, p=dropout, training=module.training
428
+ )
429
+ attn_output = torch.matmul(attn_weights, value_states)
430
+ attn_output = attn_output.transpose(1, 2).contiguous()
431
+
432
+ return attn_output, attn_weights
433
+
434
+
435
+ # Copied from transformers.models.llama.modeling_llama.LlamaAttention with Llama->LLaDA2Moe
436
+ class LLaDA2MoeAttention(nn.Module):
437
+ """Multi-headed attention from 'Attention Is All You Need' paper"""
438
+
439
+ def __init__(self, config: LLaDA2MoeConfig, layer_idx: Optional[int] = None):
440
+ super().__init__()
441
+ self.config = config
442
+ self.layer_idx = layer_idx
443
+ if layer_idx is None:
444
+ logger.warning_once(
445
+ f"Instantiating {self.__class__.__name__} without passing `layer_idx` is not recommended and will "
446
+ "to errors during the forward call, if caching is used. Please make sure to provide a `layer_idx` "
447
+ "when creating this class."
448
+ )
449
+ self.attention_dropout = config.attention_dropout
450
+ self.hidden_size = config.hidden_size
451
+ self.num_heads = config.num_attention_heads
452
+ self.head_dim = config.head_dim or self.hidden_size // self.num_heads
453
+ partial_rotary_factor = (
454
+ config.partial_rotary_factor
455
+ if hasattr(config, "partial_rotary_factor")
456
+ else 1.0
457
+ )
458
+ self.rope_dim = int(self.head_dim * partial_rotary_factor)
459
+ self.num_key_value_heads = config.num_key_value_heads
460
+ self.num_key_value_groups = self.num_heads // self.num_key_value_heads
461
+ self.max_position_embeddings = config.max_position_embeddings
462
+ self.rope_theta = config.rope_theta
463
+ self.scaling = self.head_dim**-0.5
464
+ self.is_causal = False
465
+
466
+ self.query_key_value = nn.Linear(
467
+ self.hidden_size,
468
+ (self.num_heads + 2 * self.num_key_value_heads) * self.head_dim,
469
+ bias=config.use_qkv_bias,
470
+ )
471
+
472
+ if self.config.use_qk_norm:
473
+ self.query_layernorm = LLaDA2MoeRMSNorm(
474
+ self.head_dim, eps=config.rms_norm_eps
475
+ )
476
+ self.key_layernorm = LLaDA2MoeRMSNorm(
477
+ self.head_dim, eps=config.rms_norm_eps
478
+ )
479
+ self.dense = nn.Linear(
480
+ self.num_heads * self.head_dim, self.hidden_size, bias=config.use_bias
481
+ )
482
+ self.sliding_window = getattr(config, "sliding_window", None)
483
+
484
+ def _shape(self, tensor: torch.Tensor, seq_len: int, bsz: int):
485
+ return (
486
+ tensor.view(bsz, seq_len, self.num_heads, self.head_dim)
487
+ .transpose(1, 2)
488
+ .contiguous()
489
+ )
490
+
491
+ def forward(
492
+ self,
493
+ hidden_states: torch.Tensor,
494
+ attention_mask: Optional[torch.Tensor] = None,
495
+ position_ids: Optional[torch.LongTensor] = None,
496
+ past_key_value: Optional[Cache] = None,
497
+ output_attentions: bool = False,
498
+ use_cache: bool = False,
499
+ position_embeddings: Optional[
500
+ Tuple[torch.Tensor, torch.Tensor]
501
+ ] = None, # necessary, but kept here for BC
502
+ **kwargs,
503
+ ) -> Tuple[torch.Tensor, Optional[torch.Tensor], Optional[Tuple[torch.Tensor]]]:
504
+ input_shape = hidden_states.shape[:-1]
505
+
506
+ bsz, q_len, _ = hidden_states.size()
507
+
508
+ qkv = self.query_key_value(hidden_states)
509
+ qkv = qkv.view(
510
+ bsz, q_len, self.num_heads + 2 * self.num_key_value_heads, self.head_dim
511
+ )
512
+
513
+ query_states, key_states, value_states = qkv.split(
514
+ [self.num_heads, self.num_key_value_heads, self.num_key_value_heads], dim=-2
515
+ )
516
+ query_states = query_states.transpose(1, 2)
517
+ key_states = key_states.transpose(1, 2)
518
+ value_states = value_states.transpose(1, 2)
519
+
520
+ if self.config.use_qk_norm:
521
+ query_states = self.query_layernorm(query_states)
522
+ key_states = self.key_layernorm(key_states)
523
+
524
+ cos, sin = position_embeddings
525
+ query_states, key_states = apply_rotary_pos_emb(
526
+ query_states, key_states, cos, sin
527
+ )
528
+
529
+ if past_key_value is not None:
530
+ if self.layer_idx is None:
531
+ raise ValueError(
532
+ f"The cache structure has changed since version v4.36. If you are using {self.__class__.__name__} "
533
+ "for auto-regressive decoding with k/v caching, please make sure to initialize the attention class "
534
+ "with a layer index."
535
+ )
536
+ cache_kwargs = {"sin": sin, "cos": cos}
537
+ key_states, value_states = past_key_value.update(
538
+ key_states, value_states, self.layer_idx, cache_kwargs
539
+ )
540
+
541
+ attention_interface: Callable = eager_attention_forward
542
+ if self.config._attn_implementation != "eager":
543
+ attention_interface = ALL_ATTENTION_FUNCTIONS[
544
+ self.config._attn_implementation
545
+ ]
546
+
547
+ attn_output, attn_weights = attention_interface(
548
+ self,
549
+ query_states,
550
+ key_states,
551
+ value_states,
552
+ attention_mask,
553
+ dropout=0.0 if not self.training else self.attention_dropout,
554
+ scaling=self.scaling,
555
+ sliding_window=self.sliding_window, # diff with Llama
556
+ **kwargs,
557
+ )
558
+
559
+ attn_output = attn_output.reshape(*input_shape, -1).contiguous()
560
+ attn_output = self.dense(attn_output)
561
+
562
+ return attn_output, attn_weights, past_key_value
563
+
564
+
565
+ class LLaDA2MoeDecoderLayer(nn.Module):
566
+ def __init__(self, config: LLaDA2MoeConfig, layer_idx: int):
567
+ super().__init__()
568
+ self.hidden_size = config.hidden_size
569
+
570
+ self.attention = LLaDA2MoeAttention(config=config, layer_idx=layer_idx)
571
+
572
+ self.mlp = (
573
+ LLaDA2MoeSparseMoeBlock(config)
574
+ if (
575
+ config.num_experts is not None
576
+ and layer_idx >= config.first_k_dense_replace
577
+ )
578
+ else LLaDA2MoeMLP(config=config, intermediate_size=config.intermediate_size)
579
+ )
580
+ self.input_layernorm = LLaDA2MoeRMSNorm(
581
+ config.hidden_size, eps=config.rms_norm_eps
582
+ )
583
+ self.post_attention_layernorm = LLaDA2MoeRMSNorm(
584
+ config.hidden_size, eps=config.rms_norm_eps
585
+ )
586
+
587
+ def forward(
588
+ self,
589
+ hidden_states: torch.Tensor,
590
+ attention_mask: Optional[torch.Tensor] = None,
591
+ position_ids: Optional[torch.LongTensor] = None,
592
+ past_key_value: Optional[Tuple[torch.Tensor]] = None,
593
+ output_attentions: Optional[bool] = False,
594
+ output_router_logits: Optional[bool] = False,
595
+ use_cache: Optional[bool] = False,
596
+ position_embeddings: Optional[
597
+ Tuple[torch.Tensor, torch.Tensor]
598
+ ] = None, # necessary, but kept here for BC
599
+ **kwargs,
600
+ ) -> Tuple[
601
+ torch.FloatTensor, Optional[Tuple[torch.FloatTensor, torch.FloatTensor]]
602
+ ]:
603
+ """
604
+ Args:
605
+ hidden_states (`torch.FloatTensor`): input to the layer of shape `(batch, seq_len, embed_dim)`
606
+ attention_mask (`torch.FloatTensor`, *optional*):
607
+ attention mask of size `(batch_size, sequence_length)` if flash attention is used or `(batch_size, 1,
608
+ query_sequence_length, key_sequence_length)` if default attention is used.
609
+ position_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
610
+ Indices of positions of each input sequence tokens in the position embeddings. Selected in the range `[0,
611
+ config.n_positions - 1]`.
612
+ past_key_value (`Tuple(torch.FloatTensor)`, *optional*):
613
+ cached past key and value projection states
614
+ output_attentions (`bool`, *optional*):
615
+ Whether to return the attentions tensors of all attention layers. See `attentions` under
616
+ returned tensors for more detail.
617
+ output_router_logits (`bool`, *optional*):
618
+ Whether or not to return the logits of all the routers. They are useful for computing the router loss,
619
+ and should not be returned during inference.
620
+ use_cache (`bool`, *optional*):
621
+ If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding
622
+ (see `past_key_values`).
623
+ """
624
+ residual = hidden_states
625
+
626
+ hidden_states = self.input_layernorm(hidden_states)
627
+
628
+ # Self Attention
629
+ hidden_states, self_attn_weights, present_key_value = self.attention(
630
+ hidden_states=hidden_states,
631
+ attention_mask=attention_mask,
632
+ position_ids=position_ids,
633
+ past_key_value=past_key_value,
634
+ output_attentions=output_attentions,
635
+ position_embeddings=position_embeddings,
636
+ use_cache=use_cache,
637
+ )
638
+ hidden_states = residual + hidden_states
639
+
640
+ # Fully Connected
641
+ residual = hidden_states
642
+ hidden_states = self.post_attention_layernorm(hidden_states)
643
+ hidden_states = self.mlp(hidden_states)
644
+ if isinstance(hidden_states, tuple):
645
+ hidden_states, router_logits = hidden_states
646
+ else:
647
+ router_logits = None
648
+ hidden_states = residual + hidden_states.to(residual.device)
649
+
650
+ outputs = (hidden_states,)
651
+
652
+ if output_attentions:
653
+ outputs += (self_attn_weights,)
654
+
655
+ if use_cache:
656
+ outputs += (present_key_value,)
657
+
658
+ if output_router_logits:
659
+ outputs += (router_logits,)
660
+
661
+ return outputs
662
+
663
+
664
+ LLADA2MOE_START_DOCSTRING = r"""
665
+ This model inherits from [`PreTrainedModel`]. Check the superclass documentation for the generic methods the
666
+ library implements for all its model (such as downloading or saving, resizing the input embeddings, pruning heads
667
+ etc.)
668
+
669
+ This model is also a PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) subclass.
670
+ Use it as a regular PyTorch Module and refer to the PyTorch documentation for all matter related to general usage
671
+ and behavior.
672
+
673
+ Parameters:
674
+ config ([`LLaDA2MoeConfig`]):
675
+ Model configuration class with all the parameters of the model. Initializing with a config file does not
676
+ load the weights associated with the model, only the configuration. Check out the
677
+ [`~PreTrainedModel.from_pretrained`] method to load the model weights.
678
+ """
679
+
680
+
681
+ @add_start_docstrings(
682
+ "The bare LLaDA2Moe Model outputting raw hidden-states without any specific head on top.",
683
+ LLADA2MOE_START_DOCSTRING,
684
+ )
685
+ class LLaDA2MoePreTrainedModel(PreTrainedModel):
686
+ config_class = LLaDA2MoeConfig
687
+ base_model_prefix = "model"
688
+ supports_gradient_checkpointing = True
689
+ _no_split_modules = ["LLaDA2MoeDecoderLayer"]
690
+ _skip_keys_device_placement = ["past_key_values"]
691
+ _supports_flash_attn_2 = False
692
+ _supports_sdpa = True
693
+ _supports_flex_attn = True
694
+ _supports_cache_class = True
695
+
696
+ @torch.no_grad()
697
+ def _init_weights(self, module):
698
+ super()._init_weights(module)
699
+ std = self.config.initializer_range
700
+ if isinstance(module, LLaDA2MoeGate):
701
+ nn.init.normal_(module.weight, mean=0.0, std=std)
702
+
703
+
704
+ LLADA2MOE_INPUTS_DOCSTRING = r"""
705
+ Args:
706
+ input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
707
+ Indices of input sequence tokens in the vocabulary. Padding will be ignored by default should you provide
708
+ it.
709
+
710
+ Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
711
+ [`PreTrainedTokenizer.__call__`] for details.
712
+
713
+ [What are input IDs?](../glossary#input-ids)
714
+ attention_mask (`torch.Tensor` of shape `(batch_size, sequence_length)`, *optional*):
715
+ Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`:
716
+
717
+ - 1 for tokens that are **not masked**,
718
+ - 0 for tokens that are **masked**.
719
+
720
+ [What are attention masks?](../glossary#attention-mask)
721
+
722
+ Indices can be obtained using [`AutoTokenizer`]. See [`PreTrainedTokenizer.encode`] and
723
+ [`PreTrainedTokenizer.__call__`] for details.
724
+
725
+ If `past_key_values` is used, optionally only the last `input_ids` have to be input (see
726
+ `past_key_values`).
727
+
728
+ If you want to change padding behavior, you should read [`modeling_opt._prepare_decoder_attention_mask`]
729
+ and modify to your needs. See diagram 1 in [the paper](https://arxiv.org/abs/1910.13461) for more
730
+ information on the default strategy.
731
+
732
+ - 1 indicates the head is **not masked**,
733
+ - 0 indicates the head is **masked**.
734
+ position_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
735
+ Indices of positions of each input sequence tokens in the position embeddings. Selected in the range `[0,
736
+ config.n_positions - 1]`.
737
+
738
+ [What are position IDs?](../glossary#position-ids)
739
+ past_key_values (`Cache` or `tuple(tuple(torch.FloatTensor))`, *optional*):
740
+ Pre-computed hidden-states (key and values in the self-attention blocks and in the cross-attention
741
+ blocks) that can be used to speed up sequential decoding. This typically consists in the `past_key_values`
742
+ returned by the model at a previous stage of decoding, when `use_cache=True` or `config.use_cache=True`.
743
+
744
+ Two formats are allowed:
745
+ - a [`~cache_utils.Cache`] instance;
746
+ - Tuple of `tuple(torch.FloatTensor)` of length `config.n_layers`, with each tuple having 2 tensors of
747
+ shape `(batch_size, num_heads, sequence_length, embed_size_per_head)`). This is also known as the legacy
748
+ cache format.
749
+
750
+ The model will output the same cache format that is fed as input. If no `past_key_values` are passed, the
751
+ legacy cache format will be returned.
752
+
753
+ If `past_key_values` are used, the user can optionally input only the last `input_ids` (those that don't
754
+ have their past key value states given to this model) of shape `(batch_size, 1)` instead of all `input_ids`
755
+ of shape `(batch_size, sequence_length)`.
756
+ inputs_embeds (`torch.FloatTensor` of shape `(batch_size, sequence_length, hidden_size)`, *optional*):
757
+ Optionally, instead of passing `input_ids` you can choose to directly pass an embedded representation. This
758
+ is useful if you want more control over how to convert `input_ids` indices into associated vectors than the
759
+ model's internal embedding lookup matrix.
760
+ use_cache (`bool`, *optional*):
761
+ If set to `True`, `past_key_values` key value states are returned and can be used to speed up decoding (see
762
+ `past_key_values`).
763
+ output_attentions (`bool`, *optional*):
764
+ Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned
765
+ tensors for more detail.
766
+ output_hidden_states (`bool`, *optional*):
767
+ Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
768
+ more detail.
769
+ return_dict (`bool`, *optional*):
770
+ Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
771
+ """
772
+
773
+
774
+ @add_start_docstrings(
775
+ "The bare LLaDA2Moe Model outputting raw hidden-states without any specific head on top.",
776
+ LLADA2MOE_START_DOCSTRING,
777
+ )
778
+ class LLaDA2MoeModel(LLaDA2MoePreTrainedModel):
779
+ """
780
+ Transformer decoder consisting of *config.num_hidden_layers* layers. Each layer is a [`LLaDA2MoeDecoderLayer`]
781
+
782
+ Args:
783
+ config: LLaDA2MoeConfig
784
+ """
785
+
786
+ def __init__(self, config: LLaDA2MoeConfig):
787
+ super().__init__(config)
788
+ self.padding_idx = config.pad_token_id
789
+ self.vocab_size = config.vocab_size
790
+
791
+ self.word_embeddings = nn.Embedding(
792
+ config.vocab_size, config.hidden_size, self.padding_idx
793
+ )
794
+ self.layers = nn.ModuleList(
795
+ [
796
+ LLaDA2MoeDecoderLayer(config, layer_idx)
797
+ for layer_idx in range(config.num_hidden_layers)
798
+ ]
799
+ )
800
+ self._use_sdpa = config._attn_implementation == "sdpa"
801
+ self._use_flex_attention = config._attn_implementation == "flex_attention"
802
+ self.norm = LLaDA2MoeRMSNorm(config.hidden_size, eps=config.rms_norm_eps)
803
+ self.rotary_emb = LLaDA2MoeRotaryEmbedding(config=config)
804
+ self.gradient_checkpointing = False
805
+ # Initialize weights and apply final processing
806
+ self.post_init()
807
+
808
+ def get_input_embeddings(self):
809
+ return self.word_embeddings
810
+
811
+ def set_input_embeddings(self, value):
812
+ self.word_embeddings = value
813
+
814
+ @add_start_docstrings_to_model_forward(LLADA2MOE_INPUTS_DOCSTRING)
815
+ def forward(
816
+ self,
817
+ input_ids: torch.LongTensor = None,
818
+ attention_mask: Optional[torch.Tensor] = None,
819
+ position_ids: Optional[torch.LongTensor] = None,
820
+ past_key_values: Optional[List[torch.FloatTensor]] = None,
821
+ inputs_embeds: Optional[torch.FloatTensor] = None,
822
+ use_cache: Optional[bool] = None,
823
+ output_attentions: Optional[bool] = None,
824
+ output_hidden_states: Optional[bool] = None,
825
+ output_router_logits: Optional[bool] = None,
826
+ return_dict: Optional[bool] = None,
827
+ **kwargs,
828
+ ) -> Union[Tuple, MoeModelOutputWithPast]:
829
+ output_attentions = (
830
+ output_attentions
831
+ if output_attentions is not None
832
+ else self.config.output_attentions
833
+ )
834
+ output_hidden_states = (
835
+ output_hidden_states
836
+ if output_hidden_states is not None
837
+ else self.config.output_hidden_states
838
+ )
839
+ output_router_logits = (
840
+ output_router_logits
841
+ if output_router_logits is not None
842
+ else self.config.output_router_logits
843
+ )
844
+ use_cache = use_cache if use_cache is not None else self.config.use_cache
845
+
846
+ return_dict = (
847
+ return_dict if return_dict is not None else self.config.use_return_dict
848
+ )
849
+
850
+ # retrieve input_ids and inputs_embeds
851
+ if input_ids is not None and inputs_embeds is not None:
852
+ raise ValueError(
853
+ "You cannot specify both input_ids and inputs_embeds at the same time"
854
+ )
855
+ elif input_ids is not None:
856
+ batch_size, seq_length = input_ids.shape[:2]
857
+ elif inputs_embeds is not None:
858
+ batch_size, seq_length = inputs_embeds.shape[:2]
859
+ else:
860
+ raise ValueError("You have to specify either input_ids or inputs_embeds")
861
+
862
+ if self.gradient_checkpointing and self.training:
863
+ if use_cache:
864
+ logger.warning_once(
865
+ "`use_cache=True` is incompatible with gradient checkpointing. Setting `use_cache=False`transformers."
866
+ )
867
+ use_cache = False
868
+
869
+ if use_cache and past_key_values is None:
870
+ past_key_values = DynamicCache()
871
+
872
+ if inputs_embeds is None:
873
+ inputs_embeds = self.word_embeddings(input_ids)
874
+
875
+ past_seen_tokens = (
876
+ past_key_values.get_seq_length() if past_key_values is not None else 0
877
+ )
878
+
879
+ if position_ids is None:
880
+ position_ids = torch.arange(
881
+ past_seen_tokens,
882
+ past_seen_tokens + inputs_embeds.shape[1],
883
+ device=inputs_embeds.device,
884
+ )
885
+ position_ids = position_ids.unsqueeze(0)
886
+
887
+ attention_mask = create_bidirectional_mask(
888
+ config=self.config,
889
+ inputs_embeds=inputs_embeds,
890
+ attention_mask=attention_mask,
891
+ )
892
+
893
+ # embed positions
894
+ hidden_states = inputs_embeds
895
+
896
+ # create position embeddings to be shared across the decoder layers
897
+ position_embeddings = self.rotary_emb(hidden_states, position_ids)
898
+
899
+ # decoder layers
900
+ all_hidden_states = () if output_hidden_states else None
901
+ all_self_attns = () if output_attentions else None
902
+ all_router_logits = () if output_router_logits else None
903
+ next_decoder_cache = None
904
+
905
+ for decoder_layer in self.layers:
906
+ if output_hidden_states:
907
+ all_hidden_states += (hidden_states,)
908
+
909
+ if self.gradient_checkpointing and self.training:
910
+ layer_outputs = self._gradient_checkpointing_func(
911
+ decoder_layer.__call__,
912
+ hidden_states,
913
+ attention_mask,
914
+ position_ids,
915
+ past_key_values,
916
+ output_attentions,
917
+ output_router_logits,
918
+ use_cache,
919
+ position_embeddings,
920
+ )
921
+ else:
922
+ layer_outputs = decoder_layer(
923
+ hidden_states,
924
+ attention_mask=attention_mask,
925
+ position_ids=position_ids,
926
+ past_key_value=past_key_values,
927
+ output_attentions=output_attentions,
928
+ output_router_logits=output_router_logits,
929
+ use_cache=use_cache,
930
+ position_embeddings=position_embeddings,
931
+ )
932
+ hidden_states = layer_outputs[0]
933
+
934
+ if use_cache:
935
+ next_decoder_cache = layer_outputs[2 if output_attentions else 1]
936
+
937
+ if output_attentions:
938
+ all_self_attns += (layer_outputs[1],)
939
+
940
+ if output_router_logits and layer_outputs[-1] is not None:
941
+ all_router_logits += (layer_outputs[-1],)
942
+
943
+ hidden_states = self.norm(hidden_states)
944
+
945
+ # add hidden states from the last decoder layer
946
+ if output_hidden_states:
947
+ all_hidden_states += (hidden_states,)
948
+
949
+ next_cache = None
950
+ if use_cache:
951
+ next_cache = next_decoder_cache
952
+ if not return_dict:
953
+ return tuple(
954
+ v
955
+ for v in [
956
+ hidden_states,
957
+ next_cache,
958
+ all_hidden_states,
959
+ all_self_attns,
960
+ all_router_logits,
961
+ ]
962
+ if v is not None
963
+ )
964
+ return MoeModelOutputWithPast(
965
+ last_hidden_state=hidden_states,
966
+ past_key_values=next_cache,
967
+ hidden_states=all_hidden_states,
968
+ attentions=all_self_attns,
969
+ router_logits=all_router_logits,
970
+ )
971
+
972
+
973
+ class LLaDA2MoeModelLM(LLaDA2MoePreTrainedModel, GenerationMixin):
974
+ _tied_weights_keys = ["lm_head.weight"]
975
+
976
+ def __init__(self, config: LLaDA2MoeConfig):
977
+ super().__init__(config)
978
+ self.model = LLaDA2MoeModel(config)
979
+ self.vocab_size = config.vocab_size
980
+ self.lm_head = nn.Linear(config.hidden_size, config.vocab_size, bias=False)
981
+
982
+ # Initialize weights and apply final processing
983
+ self.post_init()
984
+
985
+ def get_input_embeddings(self):
986
+ return self.model.word_embeddings
987
+
988
+ def set_input_embeddings(self, value):
989
+ self.model.word_embeddings = value
990
+
991
+ def get_output_embeddings(self):
992
+ return self.lm_head
993
+
994
+ def set_output_embeddings(self, new_embeddings):
995
+ self.lm_head = new_embeddings
996
+
997
+ def set_decoder(self, decoder):
998
+ self.model = decoder
999
+
1000
+ def get_decoder(self):
1001
+ return self.model
1002
+
1003
+ @add_start_docstrings_to_model_forward(LLADA2MOE_INPUTS_DOCSTRING)
1004
+ @replace_return_docstrings(
1005
+ output_type=MoeCausalLMOutputWithPast, config_class=_CONFIG_FOR_DOC
1006
+ )
1007
+ def forward(
1008
+ self,
1009
+ input_ids: torch.LongTensor = None,
1010
+ attention_mask: Optional[torch.Tensor] = None,
1011
+ position_ids: Optional[torch.LongTensor] = None,
1012
+ past_key_values: Optional[List[torch.FloatTensor]] = None,
1013
+ inputs_embeds: Optional[torch.FloatTensor] = None,
1014
+ labels: Optional[torch.LongTensor] = None,
1015
+ use_cache: Optional[bool] = None,
1016
+ output_attentions: Optional[bool] = None,
1017
+ output_hidden_states: Optional[bool] = None,
1018
+ output_router_logits: Optional[bool] = None,
1019
+ return_dict: Optional[bool] = None,
1020
+ **kwargs,
1021
+ ) -> Union[Tuple, MoeCausalLMOutputWithPast]:
1022
+ r"""
1023
+ Args:
1024
+ labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
1025
+ Labels for computing the masked language modeling loss. Indices should either be in `[0, ...,
1026
+ config.vocab_size]` or -100 (see `input_ids` docstring). Tokens with indices set to `-100` are ignored
1027
+ (masked), the loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`.
1028
+
1029
+ Returns:
1030
+
1031
+ Example:
1032
+
1033
+ ```python
1034
+ >>> from transformers import AutoTokenizer
1035
+
1036
+ >>> model = LLaDA2MoeForCausalLM.from_pretrained(PATH_TO_CONVERTED_WEIGHTS)
1037
+ >>> tokenizer = AutoTokenizer.from_pretrained(PATH_TO_CONVERTED_TOKENIZER)
1038
+
1039
+ >>> prompt = "Hey, are you conscious? Can you talk to me?"
1040
+ >>> inputs = tokenizer(prompt, return_tensors="pt")
1041
+
1042
+ >>> # Generate
1043
+ >>> generate_ids = model.generate(inputs.input_ids, max_length=30)
1044
+ >>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
1045
+ "Hey, are you conscious? Can you talk to me?\nI'm not conscious, but I can talk to you."
1046
+ ```"""
1047
+ output_attentions = (
1048
+ output_attentions
1049
+ if output_attentions is not None
1050
+ else self.config.output_attentions
1051
+ )
1052
+ output_hidden_states = (
1053
+ output_hidden_states
1054
+ if output_hidden_states is not None
1055
+ else self.config.output_hidden_states
1056
+ )
1057
+ output_router_logits = (
1058
+ output_router_logits
1059
+ if output_router_logits is not None
1060
+ else self.config.output_router_logits
1061
+ )
1062
+ return_dict = (
1063
+ return_dict if return_dict is not None else self.config.use_return_dict
1064
+ )
1065
+ # decoder outputs consists of (dec_features, layer_state, dec_hidden, dec_attn)
1066
+ outputs = self.model(
1067
+ input_ids=input_ids,
1068
+ attention_mask=attention_mask,
1069
+ position_ids=position_ids,
1070
+ past_key_values=past_key_values,
1071
+ inputs_embeds=inputs_embeds,
1072
+ use_cache=use_cache,
1073
+ output_attentions=output_attentions,
1074
+ output_hidden_states=output_hidden_states,
1075
+ output_router_logits=output_router_logits,
1076
+ return_dict=return_dict,
1077
+ **kwargs,
1078
+ )
1079
+
1080
+ loss = None
1081
+ aux_loss = None
1082
+ hidden_states = outputs[0]
1083
+
1084
+ logits = self.lm_head(hidden_states)
1085
+ logits = logits.float()
1086
+
1087
+ if labels is not None:
1088
+ # LLaDA2.0 will use same label position logits
1089
+ shift_logits = logits
1090
+ shift_labels = labels
1091
+ # Flatten the tokens
1092
+ loss_fct = CrossEntropyLoss()
1093
+ shift_logits = shift_logits.view(-1, self.config.vocab_size)
1094
+ shift_labels = shift_labels.view(-1)
1095
+ # Enable model parallelism
1096
+ shift_labels = shift_labels.to(shift_logits.device)
1097
+ loss = loss_fct(shift_logits, shift_labels)
1098
+
1099
+ if not return_dict:
1100
+ output = (logits,) + outputs[1:]
1101
+ if output_router_logits:
1102
+ output = (aux_loss,) + output
1103
+ return (loss,) + output if loss is not None else output
1104
+
1105
+ return MoeCausalLMOutputWithPast(
1106
+ loss=loss,
1107
+ aux_loss=aux_loss,
1108
+ logits=logits,
1109
+ past_key_values=outputs.past_key_values,
1110
+ hidden_states=outputs.hidden_states,
1111
+ attentions=outputs.attentions,
1112
+ router_logits=outputs.router_logits,
1113
+ )
1114
+
1115
+ def prepare_inputs_for_generation(
1116
+ self,
1117
+ input_ids,
1118
+ past_key_values=None,
1119
+ attention_mask=None,
1120
+ inputs_embeds=None,
1121
+ token_type_ids=None,
1122
+ **kwargs,
1123
+ ):
1124
+ if past_key_values is not None:
1125
+ if isinstance(past_key_values, Cache):
1126
+ cache_length = past_key_values.get_seq_length()
1127
+ past_length = past_key_values.seen_tokens
1128
+ max_cache_length = (
1129
+ past_key_values.get_max_length()
1130
+ if hasattr(past_key_values, "get_max_length")
1131
+ else past_key_values.get_max_cache_shape()
1132
+ )
1133
+ else:
1134
+ cache_length = past_length = past_key_values[0][0].shape[2]
1135
+ max_cache_length = None
1136
+
1137
+ # Keep only the unprocessed tokens:
1138
+ # 1 - If the length of the attention_mask exceeds the length of input_ids, then we are in a setting where
1139
+ # some of the inputs are exclusivelly passed as part of the cache (e.g. when passing input_embeds as input)
1140
+ if (
1141
+ attention_mask is not None
1142
+ and attention_mask.shape[1] > input_ids.shape[1]
1143
+ ):
1144
+ input_ids = input_ids[:, -(attention_mask.shape[1] - past_length) :]
1145
+ # 2 - If the past_length is smaller than input_ids', then input_ids holds all input tokens. We can discard
1146
+ # input_ids based on the past_length.
1147
+ elif past_length < input_ids.shape[1]:
1148
+ input_ids = input_ids[:, past_length:]
1149
+ # 3 - Otherwise (past_length >= input_ids.shape[1]), let's assume input_ids only has unprocessed tokens.
1150
+
1151
+ # If we are about to go beyond the maximum cache length, we need to crop the input attention mask.
1152
+ if (
1153
+ max_cache_length is not None
1154
+ and attention_mask is not None
1155
+ and cache_length + input_ids.shape[1] > max_cache_length
1156
+ ):
1157
+ attention_mask = attention_mask[:, -max_cache_length:]
1158
+
1159
+ position_ids = kwargs.get("position_ids", None)
1160
+ if attention_mask is not None and position_ids is None:
1161
+ # create position_ids on the fly for batch generation
1162
+ position_ids = attention_mask.long().cumsum(-1) - 1
1163
+ position_ids.masked_fill_(attention_mask == 0, 1)
1164
+ if past_key_values:
1165
+ position_ids = position_ids[:, -input_ids.shape[1] :]
1166
+
1167
+ # if `inputs_embeds` are passed, we only want to use them in the 1st generation step
1168
+ if inputs_embeds is not None and past_key_values is None:
1169
+ model_inputs = {"inputs_embeds": inputs_embeds}
1170
+ else:
1171
+ model_inputs = {"input_ids": input_ids}
1172
+
1173
+ model_inputs.update(
1174
+ {
1175
+ "position_ids": position_ids,
1176
+ "past_key_values": past_key_values,
1177
+ "use_cache": kwargs.get("use_cache"),
1178
+ "attention_mask": attention_mask,
1179
+ }
1180
+ )
1181
+ return model_inputs
1182
+
1183
+ @staticmethod
1184
+ def _reorder_cache(past_key_values, beam_idx):
1185
+ reordered_past = ()
1186
+ for layer_past in past_key_values:
1187
+ reordered_past += (
1188
+ tuple(
1189
+ past_state.index_select(0, beam_idx.to(past_state.device))
1190
+ for past_state in layer_past
1191
+ ),
1192
+ )
1193
+ return reordered_past
1194
+
1195
+ @staticmethod
1196
+ def _top_k_logits(logits, k):
1197
+ if k is None or k <= 0:
1198
+ return logits
1199
+ else:
1200
+ values, _ = torch.topk(logits, k)
1201
+ min_values = values[..., -1, None]
1202
+ return torch.where(
1203
+ logits < min_values, torch.full_like(logits, float("-inf")), logits
1204
+ )
1205
+
1206
+ @staticmethod
1207
+ def _top_p_logits(logits, p):
1208
+ if p is None or p >= 1.0:
1209
+ return logits
1210
+ sorted_logits, sorted_indices = torch.sort(logits, descending=True)
1211
+ cumulative_probs = torch.cumsum(F.softmax(sorted_logits, dim=-1), dim=-1)
1212
+ sorted_mask = cumulative_probs > p
1213
+ sorted_mask[..., 1:] = sorted_mask[..., :-1].clone()
1214
+ sorted_mask[..., 0] = False
1215
+ mask_indices = torch.scatter(
1216
+ torch.full_like(logits, False, dtype=torch.bool),
1217
+ -1,
1218
+ sorted_indices,
1219
+ sorted_mask,
1220
+ )
1221
+ return logits.masked_fill(mask_indices, float("-inf"))
1222
+
1223
+ def _sample_with_temperature_topk_topp(
1224
+ self, logits, temperature=1.0, top_k=0, top_p=1.0
1225
+ ):
1226
+ orig_shape = logits.shape[:-1]
1227
+ vocab_size = logits.shape[-1]
1228
+ logits = logits.reshape(-1, vocab_size)
1229
+ if temperature > 0 and temperature != 1.0:
1230
+ logits = logits / temperature
1231
+ logits = self._top_k_logits(logits, top_k)
1232
+ logits = self._top_p_logits(logits, top_p)
1233
+ probs = F.softmax(logits, dim=-1)
1234
+ token = torch.multinomial(probs, num_samples=1)
1235
+ token_prob = torch.gather(probs, -1, token)
1236
+ return token.view(*orig_shape), token_prob.view(*orig_shape)
1237
+
1238
+ @staticmethod
1239
+ def _get_num_transfer_tokens(block_length, steps):
1240
+ if steps == 0:
1241
+ return torch.tensor([], dtype=torch.int64)
1242
+ base = block_length // steps
1243
+ remainder = block_length % steps
1244
+ num_transfer_tokens = torch.full((steps,), base, dtype=torch.int64)
1245
+ num_transfer_tokens[:remainder] += 1
1246
+ return num_transfer_tokens
1247
+
1248
+ @staticmethod
1249
+ def _apply_edit_operations_with_tracking(
1250
+ block_tokens,
1251
+ old_block_tokens,
1252
+ is_original_mask_snapshot,
1253
+ mask_id,
1254
+ block_length,
1255
+ delete_token_id,
1256
+ split_token_id,
1257
+ ):
1258
+ """Process DELETE and SPLIT tokens in a block while tracking ``is_original_mask``.
1259
+
1260
+ The block is kept at a fixed ``block_length`` by truncating (when SPLIT grows it) or
1261
+ right-padding with masks (when DELETE shrinks it).
1262
+
1263
+ Args:
1264
+ block_tokens: List of token ids in the block (current state after writes).
1265
+ old_block_tokens: List of token ids before this step (used to restore SPLIT's carried token).
1266
+ is_original_mask_snapshot: Per-position bools marking positions that were original masks.
1267
+ mask_id: The mask token id.
1268
+ block_length: Target (fixed) block length.
1269
+ delete_token_id / split_token_id: Special edit-operation token ids.
1270
+
1271
+ Behaviour:
1272
+ - DELETE: skip the token (and its tracking entry).
1273
+ - SPLIT: token -> [mask_id, old_token], tracking -> [False, snapshot_val].
1274
+ - Kept token: carried through with its snapshot tracking value.
1275
+ - Padding masks (from shrink) are tracked as non-original (False).
1276
+
1277
+ Returns:
1278
+ (result_tokens, result_tracking): both lists of length ``block_length``.
1279
+ """
1280
+ result_tokens = []
1281
+ result_tracking = []
1282
+ for i, token in enumerate(block_tokens):
1283
+ if token == delete_token_id:
1284
+ continue
1285
+ elif token == split_token_id:
1286
+ old_token = old_block_tokens[i] if i < len(old_block_tokens) else mask_id
1287
+ snapshot_val = (
1288
+ is_original_mask_snapshot[i] if i < len(is_original_mask_snapshot) else False
1289
+ )
1290
+ result_tokens.extend([mask_id, old_token])
1291
+ result_tracking.extend([False, snapshot_val])
1292
+ else:
1293
+ snapshot_val = (
1294
+ is_original_mask_snapshot[i] if i < len(is_original_mask_snapshot) else False
1295
+ )
1296
+ result_tokens.append(token)
1297
+ result_tracking.append(snapshot_val)
1298
+
1299
+ if len(result_tokens) > block_length:
1300
+ result_tokens = result_tokens[:block_length]
1301
+ result_tracking = result_tracking[:block_length]
1302
+ elif len(result_tokens) < block_length:
1303
+ pad_count = block_length - len(result_tokens)
1304
+ result_tokens.extend([mask_id] * pad_count)
1305
+ result_tracking.extend([False] * pad_count)
1306
+
1307
+ return result_tokens, result_tracking
1308
+
1309
+ def _diffusion_sample(self, logits, temperature=1.0, top_k=None, top_p=None):
1310
+ """Sample a token id per position and return its (raw-softmax) confidence.
1311
+
1312
+ With ``temperature == 0`` this is greedy (argmax). Otherwise it applies
1313
+ temperature / top-k / top-p filtering and samples. The returned probability is always
1314
+ taken from the *unfiltered* softmax so it can be used directly as a confidence score.
1315
+ """
1316
+ orig_shape = logits.shape[:-1]
1317
+ vocab_size = logits.shape[-1]
1318
+ logits = logits.reshape(-1, vocab_size)
1319
+ probs_full = F.softmax(logits, dim=-1)
1320
+
1321
+ if temperature is None or temperature == 0.0:
1322
+ token = torch.argmax(logits, dim=-1, keepdim=True)
1323
+ else:
1324
+ scaled = logits / temperature if temperature != 1.0 else logits
1325
+ scaled = self._top_k_logits(scaled, top_k or 0)
1326
+ scaled = self._top_p_logits(scaled, top_p if top_p is not None else 1.0)
1327
+ probs = F.softmax(scaled, dim=-1)
1328
+ token = torch.multinomial(probs, num_samples=1)
1329
+
1330
+ token_prob = torch.gather(probs_full, -1, token)
1331
+ return token.view(*orig_shape), token_prob.view(*orig_shape)
1332
+
1333
+ def _resample_to_escape_loop(
1334
+ self,
1335
+ block_ids,
1336
+ old_block_ids,
1337
+ block_logits,
1338
+ mt2_index,
1339
+ t2t_index,
1340
+ seen_block_results,
1341
+ temperature,
1342
+ top_k,
1343
+ top_p,
1344
+ max_iters=5,
1345
+ ):
1346
+ """Escape a decoding loop by resampling one changed position at a time.
1347
+
1348
+ Called after M2T/T2T writes but BEFORE DELETE/SPLIT processing. If the current
1349
+ (pre-edit) block state repeats a previously seen state, repeatedly pick one random
1350
+ changed position (``block_ids != old_block_ids``) and resample it until the block is
1351
+ novel or ``max_iters`` is reached. The currently chosen token is masked out (-inf)
1352
+ before resampling. M2T positions resample with temperature/top-k/top-p; T2T positions
1353
+ resample greedily. Modifies ``block_ids`` in place.
1354
+ """
1355
+ if tuple(block_ids.tolist()) not in seen_block_results:
1356
+ return
1357
+
1358
+ for _ in range(max_iters):
1359
+ changed_positions = (
1360
+ (block_ids != old_block_ids).nonzero(as_tuple=True)[0].tolist()
1361
+ )
1362
+ if not changed_positions:
1363
+ break
1364
+
1365
+ # Use torch's RNG (not the ``random`` module) so the choice honors torch.manual_seed.
1366
+ rand_idx = torch.randint(len(changed_positions), (1,), device=block_ids.device).item()
1367
+ pos = changed_positions[rand_idx]
1368
+ current_token = block_ids[pos].item()
1369
+ pos_logits = block_logits[pos, :].clone()
1370
+ pos_logits[current_token] = float("-inf")
1371
+
1372
+ if bool(mt2_index[pos]):
1373
+ new_token, _ = self._diffusion_sample(
1374
+ pos_logits.unsqueeze(0), temperature=temperature, top_k=top_k, top_p=top_p
1375
+ )
1376
+ elif bool(t2t_index[pos]):
1377
+ new_token, _ = self._diffusion_sample(
1378
+ pos_logits.unsqueeze(0), temperature=0.0, top_k=None, top_p=None
1379
+ )
1380
+ else:
1381
+ # A changed position must be M2T or T2T; skip anything unexpected.
1382
+ continue
1383
+
1384
+ block_ids[pos] = new_token.view(-1)[0]
1385
+ if tuple(block_ids.tolist()) not in seen_block_results:
1386
+ break
1387
+
1388
+ @torch.no_grad()
1389
+ def _joint_decode_block(
1390
+ self,
1391
+ x,
1392
+ block_start,
1393
+ block_end,
1394
+ attention_mask,
1395
+ position_ids,
1396
+ temperature,
1397
+ top_k,
1398
+ top_p,
1399
+ steps,
1400
+ threshold,
1401
+ editing_threshold,
1402
+ max_post_steps,
1403
+ mask_id,
1404
+ delete_token_id,
1405
+ split_token_id,
1406
+ max_steps_per_block,
1407
+ ):
1408
+ """Iteratively refine a single block in place using joint M2T + T2T + edit ops.
1409
+
1410
+ The active block is ``x[0, block_start:block_end]`` (fixed length). Earlier positions
1411
+ of ``x`` provide frozen context via ``attention_mask`` / ``position_ids``. Each step:
1412
+ 1. forward over ``x[:, :block_end]``,
1413
+ 2. M2T: fill masks whose greedy confidence clears ``threshold`` (with a per-step floor
1414
+ from the ``steps`` transfer schedule),
1415
+ 3. T2T: rewrite already-generated tokens whose greedy confidence clears
1416
+ ``editing_threshold`` and whose greedy token differs,
1417
+ 4. anti-loop resample if the block state repeats,
1418
+ 5. consume DELETE/SPLIT edit tokens (block stays fixed length).
1419
+ Once all *original* masks are gone, up to ``max_post_steps`` further refinement steps
1420
+ run; on the final such step DELETE/SPLIT are suppressed so the block can terminate.
1421
+ """
1422
+ device = x.device
1423
+ block_length = block_end - block_start
1424
+
1425
+ # Positions that were NOT masks at block entry are prompt/context tokens: they are never
1426
+ # written and never carry DELETE/SPLIT, so this mask stays aligned across edits.
1427
+ prompt_mask_block = (x[0, block_start:block_end] != mask_id).clone()
1428
+
1429
+ # A prompt/context position normally never holds a reserved edit token. If one does (bad
1430
+ # upstream template, history, or malformed input) it would be silently deleted/expanded by
1431
+ # the edit-op pass. Warn instead of failing silently.
1432
+ block_ids = x[0, block_start:block_end]
1433
+ prompt_edit_tokens = prompt_mask_block & (
1434
+ (block_ids == delete_token_id) | (block_ids == split_token_id)
1435
+ )
1436
+ if prompt_edit_tokens.any():
1437
+ logger.warning_once(
1438
+ "Reserved edit token(s) found in a prompt/context segment of block@%d; "
1439
+ "they will be deleted/expanded by the edit-op pass.",
1440
+ block_start,
1441
+ )
1442
+
1443
+ is_original_mask = (x[0, block_start:block_end] == mask_id).tolist()
1444
+ initial_mask_count = sum(is_original_mask)
1445
+ if initial_mask_count == 0:
1446
+ return # fully prompt/context block, nothing to decode
1447
+
1448
+ # Per-step floor for M2T: spread the block's initial masks over ``steps`` steps. Fewer
1449
+ # steps -> more forced unmaskings per step. The schedule sums to ``initial_mask_count``.
1450
+ transfer_schedule = self._get_num_transfer_tokens(initial_mask_count, steps)
1451
+ seen_block_results = set() # pre-edit block states seen this block, for loop detection
1452
+ post_steps = 0
1453
+ step_id = 0
1454
+
1455
+ while True:
1456
+ blk = x[0, block_start:block_end]
1457
+ old_block = blk.clone()
1458
+ input_key = tuple(old_block.tolist())
1459
+ mask_index = (old_block == mask_id) & (~prompt_mask_block)
1460
+
1461
+ original_mask_count = sum(
1462
+ 1
1463
+ for i, v in enumerate(is_original_mask)
1464
+ if v and old_block[i].item() == mask_id
1465
+ )
1466
+ new_mask_count = mask_index.sum().item() - original_mask_count
1467
+
1468
+ # Track post-mask refinement steps: reset while original masks remain.
1469
+ if original_mask_count == 0:
1470
+ post_steps += 1
1471
+ else:
1472
+ post_steps = 0
1473
+
1474
+ logger.debug(
1475
+ "block@%d step=%d original_masks=%d new_masks=%d post_steps=%d/%d",
1476
+ block_start,
1477
+ step_id,
1478
+ original_mask_count,
1479
+ new_mask_count,
1480
+ post_steps,
1481
+ max_post_steps,
1482
+ )
1483
+
1484
+ # Exit guard: require ZERO remaining masks (original *and* new), not just
1485
+ # original_mask_count == 0. An edit op can leave a fresh mask exactly when the last
1486
+ # original mask is resolved; keying off original masks alone would exit early and
1487
+ # return residual mask_id. The final round (below) force-resolves all masks, so this
1488
+ # normally holds immediately; the total-count guard is the belt-and-suspenders check.
1489
+ if mask_index.sum().item() == 0 and post_steps > max_post_steps:
1490
+ logger.debug(
1491
+ "block@%d terminating: max_post_steps (%d) exceeded after %d steps",
1492
+ block_start,
1493
+ max_post_steps,
1494
+ step_id,
1495
+ )
1496
+ break
1497
+ if step_id >= max_steps_per_block:
1498
+ logger.debug(
1499
+ "block@%d terminating: max_steps_per_block (%d) reached",
1500
+ block_start,
1501
+ max_steps_per_block,
1502
+ )
1503
+ break
1504
+
1505
+ # 1. Forward pass over the current window.
1506
+ logits = self.forward(
1507
+ x[:, :block_end],
1508
+ attention_mask=attention_mask,
1509
+ position_ids=position_ids,
1510
+ ).logits
1511
+ block_logits = logits[0, block_start:block_end, :]
1512
+
1513
+ # 2. Sampled (temperature) result and greedy result + confidences.
1514
+ x_s, p_s = self._diffusion_sample(block_logits, temperature, top_k, top_p)
1515
+ if temperature != 0.0:
1516
+ x0, p0 = self._diffusion_sample(block_logits, 0.0, None, None)
1517
+ else:
1518
+ x0, p0 = x_s, p_s
1519
+
1520
+ neg_inf = torch.full_like(p0, -float("inf"))
1521
+
1522
+ # 3. M2T (mask -> token): threshold-gated with a per-step floor.
1523
+ # The gate uses ``p_s`` -- the confidence of the token that will actually be written
1524
+ # (``x_s``) -- so a position is only unmasked when the sampled token itself is
1525
+ # confident. When temperature == 0, ``p_s == p0``, so this reduces to greedy behavior.
1526
+ mt2_index = torch.zeros(block_length, dtype=torch.bool, device=device)
1527
+ if mask_index.any():
1528
+ if step_id < len(transfer_schedule):
1529
+ num_need = transfer_schedule[step_id].item() + new_mask_count
1530
+ mask_conf = torch.where(mask_index, p_s, neg_inf)
1531
+ high_conf = (mask_conf > threshold) & mask_index
1532
+ if high_conf.sum().item() >= num_need:
1533
+ mt2_index = high_conf
1534
+ else:
1535
+ k_val = min(num_need, mask_index.sum().item())
1536
+ if k_val > 0:
1537
+ _, idx = torch.topk(mask_conf, k=k_val)
1538
+ mt2_index[idx] = True
1539
+ else:
1540
+ mt2_index = mask_index
1541
+
1542
+ # 4. T2T (token -> token edit): high-confidence rewrites of generated tokens.
1543
+ editable_mask = (~mask_index) & (~prompt_mask_block)
1544
+ editing_confidence = torch.where(editable_mask, p0, neg_inf)
1545
+ high_conf_edit = (editing_confidence > editing_threshold) & editable_mask
1546
+ token_changed = old_block != x0
1547
+ t2t_index = high_conf_edit & token_changed
1548
+
1549
+ fill_index_pre = mt2_index | t2t_index
1550
+
1551
+ # Final round = the last refinement step, after which the block terminates. On it we
1552
+ # suppress SPLIT/DELETE (below) so no new masks appear.
1553
+ #
1554
+ # max_post_steps > 0: count-based -- fire once we've spent the post-mask step budget.
1555
+ # max_post_steps == 0: "no post steps" means the step that resolves the LAST original
1556
+ # mask must itself finish the block. post_steps can't detect this (it is still 0 at
1557
+ # the top of that step), so we detect it from mt2_index: this step is final iff its
1558
+ # M2T covers every still-unresolved original mask. Guaranteed to fire eventually --
1559
+ # the transfer schedule forces mt2_index == mask_index by step len(transfer_schedule).
1560
+ if max_post_steps > 0:
1561
+ final_round = post_steps >= max_post_steps
1562
+ else:
1563
+ remaining_original = mask_index & torch.tensor(is_original_mask, device=device)
1564
+ final_round = remaining_original.any() and (remaining_original <= mt2_index).all()
1565
+
1566
+ # 5. On the final round, suppress SPLIT/DELETE so the block can terminate. Only the
1567
+ # positions that are actually written matter: M2T writes x_s, T2T writes x0. Other
1568
+ # positions may still contain S/D harmlessly since they are never written. Resampling
1569
+ # is batched over all offending positions (S/D columns masked to -inf).
1570
+ if final_round:
1571
+ # The final round must leave the block fully unmasked, so resolve EVERY remaining
1572
+ # mask here -- before the D/S suppression below, so these positions also get their
1573
+ # SPLIT/DELETE stripped and no fresh mask survives. For max_post_steps > 0 this is
1574
+ # already implied (once original masks are gone, new_mask_count inflates num_need so
1575
+ # M2T selects all masks anyway), so it is a no-op there; stating it makes the
1576
+ # invariant explicit and robust to changes in the M2T selection above.
1577
+ mt2_index = mask_index
1578
+ fill_index_pre = mt2_index | t2t_index
1579
+
1580
+ m2t_sd = mt2_index & ((x_s == split_token_id) | (x_s == delete_token_id))
1581
+ if m2t_sd.any():
1582
+ sd_logits = block_logits[m2t_sd].clone()
1583
+ sd_logits[:, split_token_id] = float("-inf")
1584
+ sd_logits[:, delete_token_id] = float("-inf")
1585
+ new_tokens, _ = self._diffusion_sample(
1586
+ sd_logits, temperature, top_k, top_p
1587
+ )
1588
+ x_s[m2t_sd] = new_tokens
1589
+
1590
+ t2t_sd = t2t_index & ((x0 == split_token_id) | (x0 == delete_token_id))
1591
+ if t2t_sd.any():
1592
+ sd_logits = block_logits[t2t_sd].clone()
1593
+ sd_logits[:, split_token_id] = float("-inf")
1594
+ sd_logits[:, delete_token_id] = float("-inf")
1595
+ new_tokens, _ = self._diffusion_sample(
1596
+ sd_logits, temperature=0.0, top_k=None, top_p=None
1597
+ )
1598
+ x0[t2t_sd] = new_tokens
1599
+
1600
+ # 6. Apply writes: M2T writes the sampled token, T2T writes the greedy token.
1601
+ is_original_mask_snapshot = list(is_original_mask)
1602
+ if fill_index_pre.any():
1603
+ if mt2_index.any():
1604
+ blk[mt2_index] = x_s[mt2_index]
1605
+ if t2t_index.any():
1606
+ blk[t2t_index] = x0[t2t_index]
1607
+
1608
+ # Anti-loop: escape a repeated pre-edit block state. Skipped on the final round,
1609
+ # where SD suppression already drives termination.
1610
+ if not final_round:
1611
+ self._resample_to_escape_loop(
1612
+ blk,
1613
+ old_block,
1614
+ block_logits,
1615
+ mt2_index,
1616
+ t2t_index,
1617
+ seen_block_results,
1618
+ temperature=temperature,
1619
+ top_k=top_k,
1620
+ top_p=top_p,
1621
+ )
1622
+
1623
+ seen_block_results.add(tuple(blk.tolist()))
1624
+
1625
+ # 7. Consume DELETE/SPLIT edit tokens (block stays fixed length).
1626
+ edited_block, is_original_mask = self._apply_edit_operations_with_tracking(
1627
+ blk.tolist(),
1628
+ old_block.tolist(),
1629
+ is_original_mask_snapshot,
1630
+ mask_id,
1631
+ block_length,
1632
+ delete_token_id=delete_token_id,
1633
+ split_token_id=split_token_id,
1634
+ )
1635
+ x[0, block_start:block_end] = torch.tensor(
1636
+ edited_block, device=device, dtype=x.dtype
1637
+ )
1638
+
1639
+ # 8. Stop when the block is stable and fully unmasked.
1640
+ if x[0, block_start:block_end].tolist() == list(input_key) and (
1641
+ x[0, block_start:block_end] == mask_id
1642
+ ).sum() == 0:
1643
+ step_id += 1
1644
+ break
1645
+
1646
+ step_id += 1
1647
+
1648
+ @torch.no_grad()
1649
+ def generate(
1650
+ self,
1651
+ inputs: Optional[torch.Tensor] = None,
1652
+ temperature: float = 0.0,
1653
+ block_length: int = 32,
1654
+ steps: int = 32,
1655
+ gen_length: int = 2048,
1656
+ top_p: Optional[float] = None,
1657
+ top_k: Optional[int] = None,
1658
+ threshold: float = 0.5,
1659
+ editing_threshold: float = 0.0,
1660
+ max_post_steps: int = 16,
1661
+ eos_early_stop: bool = False,
1662
+ eos_id: int = 156892,
1663
+ mask_id: int = 156895,
1664
+ delete_token_id: int = 156930,
1665
+ split_token_id: int = 156931,
1666
+ max_steps_per_block: int = 1000,
1667
+ ):
1668
+ r"""
1669
+ Generate tokens with a block-wise, edit-based iterative refinement strategy.
1670
+
1671
+ Unlike autoregressive generation, this method lays out a full masked template and
1672
+ refines it block by block. Within each block it jointly performs:
1673
+
1674
+ - **M2T** (mask -> token): converts ``mask_id`` placeholders into concrete tokens once
1675
+ their confidence exceeds ``threshold`` (with a per-step floor so progress is
1676
+ guaranteed).
1677
+ - **T2T** (token -> token): rewrites already-generated tokens whose greedy confidence
1678
+ exceeds ``editing_threshold`` and whose greedy prediction differs from the current
1679
+ token.
1680
+ - **DELETE / SPLIT**: consumes special edit tokens to remove positions or insert new
1681
+ masks, letting the block change its content length (kept fixed by pad/truncate).
1682
+
1683
+ An anti-loop resampler perturbs the block whenever a pre-edit state repeats. After all
1684
+ original masks in a block are resolved, up to ``max_post_steps`` further refinement
1685
+ steps run; the final one suppresses DELETE/SPLIT so the block terminates.
1686
+
1687
+ A block-diagonal causal attention mask lets a block attend to all previous blocks (and
1688
+ bidirectionally within itself) but not to future blocks.
1689
+
1690
+ Parameters:
1691
+ inputs (`torch.Tensor`): Prompt token ids of shape ``(1, prompt_length)``.
1692
+ temperature (`float`, defaults to 0.0): 0.0 is greedy; >0 enables sampling for M2T.
1693
+ block_length (`int`, defaults to 32): Fixed length of each generation block.
1694
+ steps (`int`, defaults to 32): Number of steps the M2T transfer schedule spreads a
1695
+ block's initial masks over (per-step unmasking floor). Fewer steps forces more
1696
+ unmaskings per step. Independent of the actual number of iterations, which is
1697
+ driven by the confidence thresholds and the post-mask refinement phase.
1698
+ gen_length (`int`, defaults to 2048): Number of tokens to generate after the prompt.
1699
+ top_p / top_k (`float`/`int`, *optional*): Nucleus / top-k filtering for sampling.
1700
+ threshold (`float`, defaults to 0.5): Confidence threshold for M2T unmasking.
1701
+ editing_threshold (`float`, defaults to 0.0): Confidence threshold for T2T edits.
1702
+ max_post_steps (`int`, defaults to 16): Max refinement steps after a block's original
1703
+ masks are all resolved.
1704
+ eos_early_stop (`bool`, defaults to False): Stop after a block that produced ``eos_id``.
1705
+ eos_id / mask_id (`int`): End-of-sequence and mask placeholder token ids.
1706
+ delete_token_id / split_token_id (`int`): Special edit-operation token ids.
1707
+ max_steps_per_block (`int`, defaults to 1000): Hard safety cap on steps per block.
1708
+
1709
+ Return:
1710
+ `torch.Tensor`: The generated token ids after the prompt, up to and including the
1711
+ first ``eos_id`` (or ``gen_length`` if none is produced).
1712
+ """
1713
+ input_ids = inputs.to(self.device)
1714
+
1715
+ prompt_length = input_ids.shape[1]
1716
+ num_blocks = (prompt_length + gen_length + block_length - 1) // block_length
1717
+ total_length = num_blocks * block_length
1718
+
1719
+ block_mask = torch.tril(torch.ones(num_blocks, num_blocks, device=self.device))
1720
+ block_diffusion_attention_mask = (
1721
+ (
1722
+ block_mask.repeat_interleave(block_length, dim=0)
1723
+ .repeat_interleave(block_length, dim=1)
1724
+ .unsqueeze(0)
1725
+ .unsqueeze(0)
1726
+ )
1727
+ .log()
1728
+ .to(torch.bfloat16)
1729
+ )
1730
+
1731
+ position_ids = torch.arange(total_length, device=self.device).unsqueeze(0)
1732
+ x = torch.full((1, total_length), mask_id, dtype=torch.long, device=self.device)
1733
+ x[:, :prompt_length] = input_ids.clone()
1734
+
1735
+ prefill_blocks = prompt_length // block_length
1736
+
1737
+ for num_block in range(prefill_blocks, num_blocks):
1738
+ block_start = num_block * block_length
1739
+ block_end = (num_block + 1) * block_length
1740
+ cur_attn_mask = block_diffusion_attention_mask[
1741
+ :, :, :block_end, :block_end
1742
+ ]
1743
+ cur_position_ids = position_ids[:, :block_end]
1744
+
1745
+ self._joint_decode_block(
1746
+ x,
1747
+ block_start,
1748
+ block_end,
1749
+ cur_attn_mask,
1750
+ cur_position_ids,
1751
+ temperature=temperature,
1752
+ top_k=top_k,
1753
+ top_p=top_p,
1754
+ steps=steps,
1755
+ threshold=threshold,
1756
+ editing_threshold=editing_threshold,
1757
+ max_post_steps=max_post_steps,
1758
+ mask_id=mask_id,
1759
+ delete_token_id=delete_token_id,
1760
+ split_token_id=split_token_id,
1761
+ max_steps_per_block=max_steps_per_block,
1762
+ )
1763
+
1764
+ if (
1765
+ eos_early_stop
1766
+ and eos_id is not None
1767
+ and (x[0, prompt_length:block_end] == eos_id).any()
1768
+ ):
1769
+ break
1770
+
1771
+ generated_answer = x[:, : prompt_length + gen_length]
1772
+
1773
+ eos_positions = (generated_answer[0][prompt_length:] == eos_id).nonzero(
1774
+ as_tuple=True
1775
+ )[0]
1776
+ if len(eos_positions) > 0:
1777
+ first_eos_position = eos_positions[0].item()
1778
+ else:
1779
+ first_eos_position = gen_length
1780
+ output = generated_answer[
1781
+ :, prompt_length : prompt_length + first_eos_position + 1
1782
+ ]
1783
+
1784
+ # Safety net: a well-formed decode leaves no mask / edit tokens in the output. If any
1785
+ # survive (e.g. a degenerate config such as max_post_steps=0 that fails to converge, or a
1786
+ # block that hit max_steps_per_block), warn instead of silently returning residual
1787
+ # mask_id / split / delete tokens to the caller.
1788
+ residual = (
1789
+ (output == mask_id)
1790
+ | (output == split_token_id)
1791
+ | (output == delete_token_id)
1792
+ )
1793
+ if residual.any():
1794
+ logger.warning(
1795
+ "Decoding finished with %d residual mask/split/delete token(s) in the output; "
1796
+ "the generation may be malformed.",
1797
+ int(residual.sum().item()),
1798
+ )
1799
+
1800
+ return output
special_tokens_map.json CHANGED
@@ -1,4006 +1,8 @@
1
  {
2
- "additional_special_tokens": [
3
- "<unk>",
4
- "<|startoftext|>",
5
- "<|endoftext|>",
6
- "<|fim_prefix|>",
7
- "<|fim_middle|>",
8
- "<|fim_suffix|>",
9
- "<|special_6|>",
10
- "<|special_7|>",
11
- "<|special_8|>",
12
- "<|special_9|>",
13
- "<|special_10|>",
14
- "<|special_11|>",
15
- "<|special_12|>",
16
- "<|special_13|>",
17
- "<|special_14|>",
18
- "<|special_15|>",
19
- "<|special_16|>",
20
- "<|special_17|>",
21
- "<|special_18|>",
22
- "<|special_19|>",
23
- "<|flush|>",
24
- "<|calls|>",
25
- "<|tools:begin|>",
26
- "<|tools:end|>",
27
- "<|tool:begin|>",
28
- "<|tool:end|>",
29
- "<|tool_response|>",
30
- "<|tool_response:begin|>",
31
- "<|tool_response:end|>",
32
- "<|tool_response:name|>",
33
- "<|tool_response:result|>",
34
- "<|special_40|>",
35
- "<|special_41|>",
36
- "<|special_42|>",
37
- "<|special_43|>",
38
- "<|special_44|>",
39
- "<|special_45|>",
40
- "<|special_46|>",
41
- "<|special_47|>",
42
- "<|special_48|>",
43
- "<|special_49|>",
44
- "<|special_50|>",
45
- "<|special_51|>",
46
- "<|special_52|>",
47
- "<|special_53|>",
48
- "<|special_54|>",
49
- "<|special_55|>",
50
- "<|special_56|>",
51
- "<|special_57|>",
52
- "<|special_58|>",
53
- "<|special_59|>",
54
- "<|special_60|>",
55
- "<|special_61|>",
56
- "<|special_62|>",
57
- "<|special_63|>",
58
- "<|special_64|>",
59
- "<|special_65|>",
60
- "<|special_66|>",
61
- "<|special_67|>",
62
- "<|special_68|>",
63
- "<|special_69|>",
64
- "<|special_70|>",
65
- "<|special_71|>",
66
- "<|special_72|>",
67
- "<|special_73|>",
68
- "<|special_74|>",
69
- "<|special_75|>",
70
- "<|special_76|>",
71
- "<|special_77|>",
72
- "<|special_78|>",
73
- "<|special_79|>",
74
- "<|special_80|>",
75
- "<|special_81|>",
76
- "<|special_82|>",
77
- "<|special_83|>",
78
- "<|special_84|>",
79
- "<|special_85|>",
80
- "<|special_86|>",
81
- "<|special_87|>",
82
- "<|special_88|>",
83
- "<|special_89|>",
84
- "<|special_90|>",
85
- "<|special_91|>",
86
- "<|special_92|>",
87
- "<|special_93|>",
88
- "<|special_94|>",
89
- "<|special_95|>",
90
- "<|special_96|>",
91
- "<|special_97|>",
92
- "<|special_98|>",
93
- "<|special_99|>",
94
- "<|special_100|>",
95
- "<|special_101|>",
96
- "<|special_102|>",
97
- "<|special_103|>",
98
- "<|special_104|>",
99
- "<|special_105|>",
100
- "<|special_106|>",
101
- "<|special_107|>",
102
- "<|special_108|>",
103
- "<|special_109|>",
104
- "<|special_110|>",
105
- "<|special_111|>",
106
- "<|special_112|>",
107
- "<|special_113|>",
108
- "<|special_114|>",
109
- "<|special_115|>",
110
- "<|special_116|>",
111
- "<|special_117|>",
112
- "<|special_118|>",
113
- "<|special_119|>",
114
- "<|special_120|>",
115
- "<|special_121|>",
116
- "<|special_122|>",
117
- "<|special_123|>",
118
- "<|special_124|>",
119
- "<|special_125|>",
120
- "<|special_126|>",
121
- "<|special_127|>",
122
- "<|special_128|>",
123
- "<|special_129|>",
124
- "<|special_130|>",
125
- "<|special_131|>",
126
- "<|special_132|>",
127
- "<|special_133|>",
128
- "<|special_134|>",
129
- "<|special_135|>",
130
- "<|special_136|>",
131
- "<|special_137|>",
132
- "<|special_138|>",
133
- "<|special_139|>",
134
- "<|special_140|>",
135
- "<|special_141|>",
136
- "<|special_142|>",
137
- "<|special_143|>",
138
- "<|special_144|>",
139
- "<|special_145|>",
140
- "<|special_146|>",
141
- "<|special_147|>",
142
- "<|special_148|>",
143
- "<|special_149|>",
144
- "<|special_150|>",
145
- "<|special_151|>",
146
- "<|special_152|>",
147
- "<|special_153|>",
148
- "<|special_154|>",
149
- "<|special_155|>",
150
- "<|special_156|>",
151
- "<|special_157|>",
152
- "<|special_158|>",
153
- "<|special_159|>",
154
- "<|special_160|>",
155
- "<|special_161|>",
156
- "<|special_162|>",
157
- "<|special_163|>",
158
- "<|special_164|>",
159
- "<|special_165|>",
160
- "<|special_166|>",
161
- "<|special_167|>",
162
- "<|special_168|>",
163
- "<|special_169|>",
164
- "<|special_170|>",
165
- "<|special_171|>",
166
- "<|special_172|>",
167
- "<|special_173|>",
168
- "<|special_174|>",
169
- "<|special_175|>",
170
- "<|special_176|>",
171
- "<|special_177|>",
172
- "<|special_178|>",
173
- "<|special_179|>",
174
- "<|special_180|>",
175
- "<|special_181|>",
176
- "<|special_182|>",
177
- "<|special_183|>",
178
- "<|special_184|>",
179
- "<|special_185|>",
180
- "<|special_186|>",
181
- "<|special_187|>",
182
- "<|special_188|>",
183
- "<|special_189|>",
184
- "<|special_190|>",
185
- "<|special_191|>",
186
- "<|special_192|>",
187
- "<|special_193|>",
188
- "<|special_194|>",
189
- "<|special_195|>",
190
- "<|special_196|>",
191
- "<|special_197|>",
192
- "<|special_198|>",
193
- "<|special_199|>",
194
- "<|special_200|>",
195
- "<|special_201|>",
196
- "<|special_202|>",
197
- "<|special_203|>",
198
- "<|special_204|>",
199
- "<|special_205|>",
200
- "<|special_206|>",
201
- "<|special_207|>",
202
- "<|special_208|>",
203
- "<|special_209|>",
204
- "<|special_210|>",
205
- "<|special_211|>",
206
- "<|special_212|>",
207
- "<|special_213|>",
208
- "<|special_214|>",
209
- "<|special_215|>",
210
- "<|special_216|>",
211
- "<|special_217|>",
212
- "<|special_218|>",
213
- "<|special_219|>",
214
- "<|special_220|>",
215
- "<|special_221|>",
216
- "<|special_222|>",
217
- "<|special_223|>",
218
- "<|special_224|>",
219
- "<|special_225|>",
220
- "<|special_226|>",
221
- "<|special_227|>",
222
- "<|special_228|>",
223
- "<|special_229|>",
224
- "<|special_230|>",
225
- "<|special_231|>",
226
- "<|special_232|>",
227
- "<|special_233|>",
228
- "<|special_234|>",
229
- "<|special_235|>",
230
- "<|special_236|>",
231
- "<|special_237|>",
232
- "<|special_238|>",
233
- "<|special_239|>",
234
- "<|special_240|>",
235
- "<|special_241|>",
236
- "<|special_242|>",
237
- "<|special_243|>",
238
- "<|special_244|>",
239
- "<|special_245|>",
240
- "<|special_246|>",
241
- "<|special_247|>",
242
- "<|special_248|>",
243
- "<|special_249|>",
244
- "<|special_250|>",
245
- "<|special_251|>",
246
- "<|special_252|>",
247
- "<|special_253|>",
248
- "<|special_254|>",
249
- "<|special_255|>",
250
- "<|special_256|>",
251
- "<|special_257|>",
252
- "<|special_258|>",
253
- "<|special_259|>",
254
- "<|special_260|>",
255
- "<|special_261|>",
256
- "<|special_262|>",
257
- "<|special_263|>",
258
- "<|special_264|>",
259
- "<|special_265|>",
260
- "<|special_266|>",
261
- "<|special_267|>",
262
- "<|special_268|>",
263
- "<|special_269|>",
264
- "<|special_270|>",
265
- "<|special_271|>",
266
- "<|special_272|>",
267
- "<|special_273|>",
268
- "<|special_274|>",
269
- "<|special_275|>",
270
- "<|special_276|>",
271
- "<|special_277|>",
272
- "<|special_278|>",
273
- "<|special_279|>",
274
- "<|special_280|>",
275
- "<|special_281|>",
276
- "<|special_282|>",
277
- "<|special_283|>",
278
- "<|special_284|>",
279
- "<|special_285|>",
280
- "<|special_286|>",
281
- "<|special_287|>",
282
- "<|special_288|>",
283
- "<|special_289|>",
284
- "<|special_290|>",
285
- "<|special_291|>",
286
- "<|special_292|>",
287
- "<|special_293|>",
288
- "<|special_294|>",
289
- "<|special_295|>",
290
- "<|special_296|>",
291
- "<|special_297|>",
292
- "<|special_298|>",
293
- "<|special_299|>",
294
- "<|special_300|>",
295
- "<|special_301|>",
296
- "<|special_302|>",
297
- "<|special_303|>",
298
- "<|special_304|>",
299
- "<|special_305|>",
300
- "<|special_306|>",
301
- "<|special_307|>",
302
- "<|special_308|>",
303
- "<|special_309|>",
304
- "<|special_310|>",
305
- "<|special_311|>",
306
- "<|special_312|>",
307
- "<|special_313|>",
308
- "<|special_314|>",
309
- "<|special_315|>",
310
- "<|special_316|>",
311
- "<|special_317|>",
312
- "<|special_318|>",
313
- "<|special_319|>",
314
- "<|special_320|>",
315
- "<|special_321|>",
316
- "<|special_322|>",
317
- "<|special_323|>",
318
- "<|special_324|>",
319
- "<|special_325|>",
320
- "<|special_326|>",
321
- "<|special_327|>",
322
- "<|special_328|>",
323
- "<|special_329|>",
324
- "<|special_330|>",
325
- "<|special_331|>",
326
- "<|special_332|>",
327
- "<|special_333|>",
328
- "<|special_334|>",
329
- "<|special_335|>",
330
- "<|special_336|>",
331
- "<|special_337|>",
332
- "<|special_338|>",
333
- "<|special_339|>",
334
- "<|special_340|>",
335
- "<|special_341|>",
336
- "<|special_342|>",
337
- "<|special_343|>",
338
- "<|special_344|>",
339
- "<|special_345|>",
340
- "<|special_346|>",
341
- "<|special_347|>",
342
- "<|special_348|>",
343
- "<|special_349|>",
344
- "<|special_350|>",
345
- "<|special_351|>",
346
- "<|special_352|>",
347
- "<|special_353|>",
348
- "<|special_354|>",
349
- "<|special_355|>",
350
- "<|special_356|>",
351
- "<|special_357|>",
352
- "<|special_358|>",
353
- "<|special_359|>",
354
- "<|special_360|>",
355
- "<|special_361|>",
356
- "<|special_362|>",
357
- "<|special_363|>",
358
- "<|special_364|>",
359
- "<|special_365|>",
360
- "<|special_366|>",
361
- "<|special_367|>",
362
- "<|special_368|>",
363
- "<|special_369|>",
364
- "<|special_370|>",
365
- "<|special_371|>",
366
- "<|special_372|>",
367
- "<|special_373|>",
368
- "<|special_374|>",
369
- "<|special_375|>",
370
- "<|special_376|>",
371
- "<|special_377|>",
372
- "<|special_378|>",
373
- "<|special_379|>",
374
- "<|special_380|>",
375
- "<|special_381|>",
376
- "<|special_382|>",
377
- "<|special_383|>",
378
- "<|special_384|>",
379
- "<|special_385|>",
380
- "<|special_386|>",
381
- "<|special_387|>",
382
- "<|special_388|>",
383
- "<|special_389|>",
384
- "<|special_390|>",
385
- "<|special_391|>",
386
- "<|special_392|>",
387
- "<|special_393|>",
388
- "<|special_394|>",
389
- "<|special_395|>",
390
- "<|special_396|>",
391
- "<|special_397|>",
392
- "<|special_398|>",
393
- "<|special_399|>",
394
- "<|special_400|>",
395
- "<|special_401|>",
396
- "<|special_402|>",
397
- "<|special_403|>",
398
- "<|special_404|>",
399
- "<|special_405|>",
400
- "<|special_406|>",
401
- "<|special_407|>",
402
- "<|special_408|>",
403
- "<|special_409|>",
404
- "<|special_410|>",
405
- "<|special_411|>",
406
- "<|special_412|>",
407
- "<|special_413|>",
408
- "<|special_414|>",
409
- "<|special_415|>",
410
- "<|special_416|>",
411
- "<|special_417|>",
412
- "<|special_418|>",
413
- "<|special_419|>",
414
- "<|special_420|>",
415
- "<|special_421|>",
416
- "<|special_422|>",
417
- "<|special_423|>",
418
- "<|special_424|>",
419
- "<|special_425|>",
420
- "<|special_426|>",
421
- "<|special_427|>",
422
- "<|special_428|>",
423
- "<|special_429|>",
424
- "<|special_430|>",
425
- "<|special_431|>",
426
- "<|special_432|>",
427
- "<|special_433|>",
428
- "<|special_434|>",
429
- "<|special_435|>",
430
- "<|special_436|>",
431
- "<|special_437|>",
432
- "<|special_438|>",
433
- "<|special_439|>",
434
- "<|special_440|>",
435
- "<|special_441|>",
436
- "<|special_442|>",
437
- "<|special_443|>",
438
- "<|special_444|>",
439
- "<|special_445|>",
440
- "<|special_446|>",
441
- "<|special_447|>",
442
- "<|special_448|>",
443
- "<|special_449|>",
444
- "<|special_450|>",
445
- "<|special_451|>",
446
- "<|special_452|>",
447
- "<|special_453|>",
448
- "<|special_454|>",
449
- "<|special_455|>",
450
- "<|special_456|>",
451
- "<|special_457|>",
452
- "<|special_458|>",
453
- "<|special_459|>",
454
- "<|special_460|>",
455
- "<|special_461|>",
456
- "<|special_462|>",
457
- "<|special_463|>",
458
- "<|special_464|>",
459
- "<|special_465|>",
460
- "<|special_466|>",
461
- "<|special_467|>",
462
- "<|special_468|>",
463
- "<|special_469|>",
464
- "<|special_470|>",
465
- "<|special_471|>",
466
- "<|special_472|>",
467
- "<|special_473|>",
468
- "<|special_474|>",
469
- "<|special_475|>",
470
- "<|special_476|>",
471
- "<|special_477|>",
472
- "<|special_478|>",
473
- "<|special_479|>",
474
- "<|special_480|>",
475
- "<|special_481|>",
476
- "<|special_482|>",
477
- "<|special_483|>",
478
- "<|special_484|>",
479
- "<|special_485|>",
480
- "<|special_486|>",
481
- "<|special_487|>",
482
- "<|special_488|>",
483
- "<|special_489|>",
484
- "<|special_490|>",
485
- "<|special_491|>",
486
- "<|special_492|>",
487
- "<|special_493|>",
488
- "<|special_494|>",
489
- "<|special_495|>",
490
- "<|special_496|>",
491
- "<|special_497|>",
492
- "<|special_498|>",
493
- "<|special_499|>",
494
- "<|special_500|>",
495
- "<|special_501|>",
496
- "<|special_502|>",
497
- "<|special_503|>",
498
- "<|special_504|>",
499
- "<|special_505|>",
500
- "<|special_506|>",
501
- "<|special_507|>",
502
- "<|special_508|>",
503
- "<|special_509|>",
504
- "<|special_510|>",
505
- "<|special_511|>",
506
- "<|special_625|>",
507
- "<|special_626|>",
508
- "<|special_627|>",
509
- "<|special_628|>",
510
- "<|special_629|>",
511
- "<|special_630|>",
512
- "<|special_631|>",
513
- "<|special_632|>",
514
- "<|special_633|>",
515
- "<|special_634|>",
516
- "<|special_635|>",
517
- "<|special_636|>",
518
- "<|special_637|>",
519
- "<|special_638|>",
520
- "<|special_639|>",
521
- "<|special_640|>",
522
- "<|special_641|>",
523
- "<|special_642|>",
524
- "<|special_643|>",
525
- "<|special_644|>",
526
- "<|special_645|>",
527
- "<|special_646|>",
528
- "<|special_647|>",
529
- "<|special_648|>",
530
- "<|special_649|>",
531
- "<|special_650|>",
532
- "<|special_651|>",
533
- "<|special_652|>",
534
- "<|special_653|>",
535
- "<|special_654|>",
536
- "<|special_655|>",
537
- "<|special_656|>",
538
- "<|special_657|>",
539
- "<|special_658|>",
540
- "<|special_659|>",
541
- "<|special_660|>",
542
- "<|special_661|>",
543
- "<|special_662|>",
544
- "<|special_663|>",
545
- "<|special_664|>",
546
- "<|special_665|>",
547
- "<|special_666|>",
548
- "<|special_667|>",
549
- "<|special_668|>",
550
- "<|special_669|>",
551
- "<|special_670|>",
552
- "<|special_671|>",
553
- "<|special_672|>",
554
- "<|special_673|>",
555
- "<|special_674|>",
556
- "<|special_675|>",
557
- "<|special_676|>",
558
- "<|special_677|>",
559
- "<|special_678|>",
560
- "<|special_679|>",
561
- "<|special_680|>",
562
- "<|special_681|>",
563
- "<|special_682|>",
564
- "<|special_683|>",
565
- "<|special_684|>",
566
- "<|special_685|>",
567
- "<|special_686|>",
568
- "<|special_687|>",
569
- "<|special_688|>",
570
- "<|special_689|>",
571
- "<|special_690|>",
572
- "<|special_691|>",
573
- "<|special_692|>",
574
- "<|special_693|>",
575
- "<|special_694|>",
576
- "<|special_695|>",
577
- "<|special_696|>",
578
- "<|special_697|>",
579
- "<|special_698|>",
580
- "<|special_699|>",
581
- "<|special_700|>",
582
- "<|special_701|>",
583
- "<|special_702|>",
584
- "<|special_703|>",
585
- "<|special_704|>",
586
- "<|special_705|>",
587
- "<|special_706|>",
588
- "<|special_707|>",
589
- "<|special_708|>",
590
- "<|special_709|>",
591
- "<|special_710|>",
592
- "<|special_711|>",
593
- "<|special_712|>",
594
- "<|special_713|>",
595
- "<|special_714|>",
596
- "<|special_715|>",
597
- "<|special_716|>",
598
- "<|special_717|>",
599
- "<|special_718|>",
600
- "<|special_719|>",
601
- "<|special_720|>",
602
- "<|special_721|>",
603
- "<|special_722|>",
604
- "<|special_723|>",
605
- "<|special_724|>",
606
- "<|special_725|>",
607
- "<|special_726|>",
608
- "<|special_727|>",
609
- "<|special_728|>",
610
- "<|special_729|>",
611
- "<|special_730|>",
612
- "<|special_731|>",
613
- "<|special_732|>",
614
- "<|special_733|>",
615
- "<|special_734|>",
616
- "<|special_735|>",
617
- "<|special_736|>",
618
- "<|special_737|>",
619
- "<|special_738|>",
620
- "<|special_739|>",
621
- "<|special_740|>",
622
- "<|special_741|>",
623
- "<|special_742|>",
624
- "<|special_743|>",
625
- "<|special_744|>",
626
- "<|special_745|>",
627
- "<|special_746|>",
628
- "<|special_747|>",
629
- "<|special_748|>",
630
- "<|special_749|>",
631
- "<|special_750|>",
632
- "<|special_751|>",
633
- "<|special_752|>",
634
- "<|special_753|>",
635
- "<|special_754|>",
636
- "<|special_755|>",
637
- "<|special_756|>",
638
- "<|special_757|>",
639
- "<|special_758|>",
640
- "<|special_759|>",
641
- "<|special_760|>",
642
- "<|special_761|>",
643
- "<|special_762|>",
644
- "<|special_763|>",
645
- "<|special_764|>",
646
- "<|special_765|>",
647
- "<|special_766|>",
648
- "<|special_767|>",
649
- "<|special_768|>",
650
- "<|special_769|>",
651
- "<|special_770|>",
652
- "<|special_771|>",
653
- "<|special_772|>",
654
- "<|special_773|>",
655
- "<|special_774|>",
656
- "<|special_775|>",
657
- "<|special_776|>",
658
- "<|special_777|>",
659
- "<|special_778|>",
660
- "<|special_779|>",
661
- "<|special_780|>",
662
- "<|special_781|>",
663
- "<|special_782|>",
664
- "<|special_783|>",
665
- "<|special_784|>",
666
- "<|special_785|>",
667
- "<|special_786|>",
668
- "<|special_787|>",
669
- "<|special_788|>",
670
- "<|special_789|>",
671
- "<|special_790|>",
672
- "<|special_791|>",
673
- "<|special_792|>",
674
- "<|special_793|>",
675
- "<|special_794|>",
676
- "<|special_795|>",
677
- "<|special_796|>",
678
- "<|special_797|>",
679
- "<|special_798|>",
680
- "<|special_799|>",
681
- "<|special_800|>",
682
- "<|special_801|>",
683
- "<|special_802|>",
684
- "<|special_803|>",
685
- "<|special_804|>",
686
- "<|special_805|>",
687
- "<|special_806|>",
688
- "<|special_807|>",
689
- "<|special_808|>",
690
- "<|special_809|>",
691
- "<|special_810|>",
692
- "<|special_811|>",
693
- "<|special_812|>",
694
- "<|special_813|>",
695
- "<|special_814|>",
696
- "<|special_815|>",
697
- "<|special_816|>",
698
- "<|special_817|>",
699
- "<|special_818|>",
700
- "<|special_819|>",
701
- "<|special_820|>",
702
- "<|special_821|>",
703
- "<|special_822|>",
704
- "<|special_823|>",
705
- "<|special_824|>",
706
- "<|special_825|>",
707
- "<|special_826|>",
708
- "<|special_827|>",
709
- "<|special_828|>",
710
- "<|special_829|>",
711
- "<|special_830|>",
712
- "<|special_831|>",
713
- "<|special_832|>",
714
- "<|special_833|>",
715
- "<|special_834|>",
716
- "<|special_835|>",
717
- "<|special_836|>",
718
- "<|special_837|>",
719
- "<|special_838|>",
720
- "<|special_839|>",
721
- "<|special_840|>",
722
- "<|special_841|>",
723
- "<|special_842|>",
724
- "<|special_843|>",
725
- "<|special_844|>",
726
- "<|special_845|>",
727
- "<|special_846|>",
728
- "<|special_847|>",
729
- "<|special_848|>",
730
- "<|special_849|>",
731
- "<|special_850|>",
732
- "<|special_851|>",
733
- "<|special_852|>",
734
- "<|special_853|>",
735
- "<|special_854|>",
736
- "<|special_855|>",
737
- "<|special_856|>",
738
- "<|special_857|>",
739
- "<|special_858|>",
740
- "<|special_859|>",
741
- "<|special_860|>",
742
- "<|special_861|>",
743
- "<|special_862|>",
744
- "<|special_863|>",
745
- "<|special_864|>",
746
- "<|special_865|>",
747
- "<|special_866|>",
748
- "<|special_867|>",
749
- "<|special_868|>",
750
- "<|special_869|>",
751
- "<|special_870|>",
752
- "<|special_871|>",
753
- "<|special_872|>",
754
- "<|special_873|>",
755
- "<|special_874|>",
756
- "<|special_875|>",
757
- "<|special_876|>",
758
- "<|special_877|>",
759
- "<|special_878|>",
760
- "<|special_879|>",
761
- "<|special_880|>",
762
- "<|special_881|>",
763
- "<|special_882|>",
764
- "<|special_883|>",
765
- "<|special_884|>",
766
- "<|special_885|>",
767
- "<|special_886|>",
768
- "<|special_887|>",
769
- "<|special_888|>",
770
- "<|special_889|>",
771
- "<|special_890|>",
772
- "<|special_891|>",
773
- "<|special_892|>",
774
- "<|special_893|>",
775
- "<|special_894|>",
776
- "<|special_895|>",
777
- "<|special_896|>",
778
- "<|special_897|>",
779
- "<|special_898|>",
780
- "<|special_899|>",
781
- "<|special_900|>",
782
- "<|special_901|>",
783
- "<|special_902|>",
784
- "<|special_903|>",
785
- "<|special_904|>",
786
- "<|special_905|>",
787
- "<|special_906|>",
788
- "<|special_907|>",
789
- "<|special_908|>",
790
- "<|special_909|>",
791
- "<|special_910|>",
792
- "<|special_911|>",
793
- "<|special_912|>",
794
- "<|special_913|>",
795
- "<|special_914|>",
796
- "<|special_915|>",
797
- "<|special_916|>",
798
- "<|special_917|>",
799
- "<|special_918|>",
800
- "<|special_919|>",
801
- "<|special_920|>",
802
- "<|special_921|>",
803
- "<|special_922|>",
804
- "<|special_923|>",
805
- "<|special_924|>",
806
- "<|special_925|>",
807
- "<|special_926|>",
808
- "<|special_927|>",
809
- "<|special_928|>",
810
- "<|special_929|>",
811
- "<|special_930|>",
812
- "<|special_931|>",
813
- "<|special_932|>",
814
- "<|special_933|>",
815
- "<|special_934|>",
816
- "<|special_935|>",
817
- "<|special_936|>",
818
- "<|special_937|>",
819
- "<|special_938|>",
820
- "<|special_939|>",
821
- "<|special_940|>",
822
- "<|special_941|>",
823
- "<|special_942|>",
824
- "<|special_943|>",
825
- "<|special_944|>",
826
- "<|special_945|>",
827
- "<|special_946|>",
828
- "<|special_947|>",
829
- "<|special_948|>",
830
- "<|special_949|>",
831
- "<|special_950|>",
832
- "<|special_951|>",
833
- "<|special_952|>",
834
- "<|special_953|>",
835
- "<|special_954|>",
836
- "<|special_955|>",
837
- "<|special_956|>",
838
- "<|special_957|>",
839
- "<|special_958|>",
840
- "<|special_959|>",
841
- "<|special_960|>",
842
- "<|special_961|>",
843
- "<|special_962|>",
844
- "<|special_963|>",
845
- "<|special_964|>",
846
- "<|special_965|>",
847
- "<|special_966|>",
848
- "<|special_967|>",
849
- "<|special_968|>",
850
- "<|special_969|>",
851
- "<|special_970|>",
852
- "<|special_971|>",
853
- "<|special_972|>",
854
- "<|special_973|>",
855
- "<|special_974|>",
856
- "<|special_975|>",
857
- "<|special_976|>",
858
- "<|special_977|>",
859
- "<|special_978|>",
860
- "<|special_979|>",
861
- "<|special_980|>",
862
- "<|special_981|>",
863
- "<|special_982|>",
864
- "<|special_983|>",
865
- "<|special_984|>",
866
- "<|special_985|>",
867
- "<|special_986|>",
868
- "<|special_987|>",
869
- "<|special_988|>",
870
- "<|special_989|>",
871
- "<|special_990|>",
872
- "<|special_991|>",
873
- "<|special_992|>",
874
- "<|special_993|>",
875
- "<|special_994|>",
876
- "<|special_995|>",
877
- "<|special_996|>",
878
- "<|special_997|>",
879
- "<|special_998|>",
880
- "<|special_999|>",
881
- "<|special_1000|>",
882
- "<|special_1001|>",
883
- "<|special_1002|>",
884
- "<|special_1003|>",
885
- "<|special_1004|>",
886
- "<|special_1005|>",
887
- "<|special_1006|>",
888
- "<|special_1007|>",
889
- "<|special_1008|>",
890
- "<|special_1009|>",
891
- "<|special_1010|>",
892
- "<|special_1011|>",
893
- "<|special_1012|>",
894
- "<|special_1013|>",
895
- "<|special_1014|>",
896
- "<|special_1015|>",
897
- "<|special_1016|>",
898
- "<|special_1017|>",
899
- "<|special_1018|>",
900
- "<|special_1019|>",
901
- "<|special_1020|>",
902
- "<|special_1021|>",
903
- "<|special_1022|>",
904
- "<|special_1023|>",
905
- "<|special_1024|>",
906
- "<|special_1025|>",
907
- "<|special_1026|>",
908
- "<|special_1027|>",
909
- "<|special_1028|>",
910
- "<|special_1029|>",
911
- "<|special_1030|>",
912
- "<|special_1031|>",
913
- "<|special_1032|>",
914
- "<|special_1033|>",
915
- "<|special_1034|>",
916
- "<|special_1035|>",
917
- "<|special_1036|>",
918
- "<|special_1037|>",
919
- "<|special_1038|>",
920
- "<|special_1039|>",
921
- "<|special_1040|>",
922
- "<|special_1041|>",
923
- "<|special_1042|>",
924
- "<|special_1043|>",
925
- "<|special_1044|>",
926
- "<|special_1045|>",
927
- "<|special_1046|>",
928
- "<|special_1047|>",
929
- "<|special_1048|>",
930
- "<|special_1049|>",
931
- "<|special_1050|>",
932
- "<|special_1051|>",
933
- "<|special_1052|>",
934
- "<|special_1053|>",
935
- "<|special_1054|>",
936
- "<|special_1055|>",
937
- "<|special_1056|>",
938
- "<|special_1057|>",
939
- "<|special_1058|>",
940
- "<|special_1059|>",
941
- "<|special_1060|>",
942
- "<|special_1061|>",
943
- "<|special_1062|>",
944
- "<|special_1063|>",
945
- "<|special_1064|>",
946
- "<|special_1065|>",
947
- "<|special_1066|>",
948
- "<|special_1067|>",
949
- "<|special_1068|>",
950
- "<|special_1069|>",
951
- "<|special_1070|>",
952
- "<|special_1071|>",
953
- "<|special_1072|>",
954
- "<|special_1073|>",
955
- "<|special_1074|>",
956
- "<|special_1075|>",
957
- "<|special_1076|>",
958
- "<|special_1077|>",
959
- "<|special_1078|>",
960
- "<|special_1079|>",
961
- "<|special_1080|>",
962
- "<|special_1081|>",
963
- "<|special_1082|>",
964
- "<|special_1083|>",
965
- "<|special_1084|>",
966
- "<|special_1085|>",
967
- "<|special_1086|>",
968
- "<|special_1087|>",
969
- "<|special_1088|>",
970
- "<|special_1089|>",
971
- "<|special_1090|>",
972
- "<|special_1091|>",
973
- "<|special_1092|>",
974
- "<|special_1093|>",
975
- "<|special_1094|>",
976
- "<|special_1095|>",
977
- "<|special_1096|>",
978
- "<|special_1097|>",
979
- "<|special_1098|>",
980
- "<|special_1099|>",
981
- "<|special_1100|>",
982
- "<|special_1101|>",
983
- "<|special_1102|>",
984
- "<|special_1103|>",
985
- "<|special_1104|>",
986
- "<|special_1105|>",
987
- "<|special_1106|>",
988
- "<|special_1107|>",
989
- "<|special_1108|>",
990
- "<|special_1109|>",
991
- "<|special_1110|>",
992
- "<|special_1111|>",
993
- "<|special_1112|>",
994
- "<|special_1113|>",
995
- "<|special_1114|>",
996
- "<|special_1115|>",
997
- "<|special_1116|>",
998
- "<|special_1117|>",
999
- "<|special_1118|>",
1000
- "<|special_1119|>",
1001
- "<|special_1120|>",
1002
- "<|special_1121|>",
1003
- "<|special_1122|>",
1004
- "<|special_1123|>",
1005
- "<|special_1124|>",
1006
- "<|special_1125|>",
1007
- "<|special_1126|>",
1008
- "<|special_1127|>",
1009
- "<|special_1128|>",
1010
- "<|special_1129|>",
1011
- "<|special_1130|>",
1012
- "<|special_1131|>",
1013
- "<|special_1132|>",
1014
- "<|special_1133|>",
1015
- "<|special_1134|>",
1016
- "<|special_1135|>",
1017
- "<|special_1136|>",
1018
- "<|special_1137|>",
1019
- "<|special_1138|>",
1020
- "<|special_1139|>",
1021
- "<|special_1140|>",
1022
- "<|special_1141|>",
1023
- "<|special_1142|>",
1024
- "<|special_1143|>",
1025
- "<|special_1144|>",
1026
- "<|special_1145|>",
1027
- "<|special_1146|>",
1028
- "<|special_1147|>",
1029
- "<|special_1148|>",
1030
- "<|special_1149|>",
1031
- "<|special_1150|>",
1032
- "<|special_1151|>",
1033
- "<|special_1152|>",
1034
- "<|special_1153|>",
1035
- "<|special_1154|>",
1036
- "<|special_1155|>",
1037
- "<|special_1156|>",
1038
- "<|special_1157|>",
1039
- "<|special_1158|>",
1040
- "<|special_1159|>",
1041
- "<|special_1160|>",
1042
- "<|special_1161|>",
1043
- "<|special_1162|>",
1044
- "<|special_1163|>",
1045
- "<|special_1164|>",
1046
- "<|special_1165|>",
1047
- "<|special_1166|>",
1048
- "<|special_1167|>",
1049
- "<|special_1168|>",
1050
- "<|special_1169|>",
1051
- "<|special_1170|>",
1052
- "<|special_1171|>",
1053
- "<|special_1172|>",
1054
- "<|special_1173|>",
1055
- "<|special_1174|>",
1056
- "<|special_1175|>",
1057
- "<|special_1176|>",
1058
- "<|special_1177|>",
1059
- "<|special_1178|>",
1060
- "<|special_1179|>",
1061
- "<|special_1180|>",
1062
- "<|special_1181|>",
1063
- "<|special_1182|>",
1064
- "<|special_1183|>",
1065
- "<|special_1184|>",
1066
- "<|special_1185|>",
1067
- "<|special_1186|>",
1068
- "<|special_1187|>",
1069
- "<|special_1188|>",
1070
- "<|special_1189|>",
1071
- "<|special_1190|>",
1072
- "<|special_1191|>",
1073
- "<|special_1192|>",
1074
- "<|special_1193|>",
1075
- "<|special_1194|>",
1076
- "<|special_1195|>",
1077
- "<|special_1196|>",
1078
- "<|special_1197|>",
1079
- "<|special_1198|>",
1080
- "<|special_1199|>",
1081
- "<|special_1200|>",
1082
- "<|special_1201|>",
1083
- "<|special_1202|>",
1084
- "<|special_1203|>",
1085
- "<|special_1204|>",
1086
- "<|special_1205|>",
1087
- "<|special_1206|>",
1088
- "<|special_1207|>",
1089
- "<|special_1208|>",
1090
- "<|special_1209|>",
1091
- "<|special_1210|>",
1092
- "<|special_1211|>",
1093
- "<|special_1212|>",
1094
- "<|special_1213|>",
1095
- "<|special_1214|>",
1096
- "<|special_1215|>",
1097
- "<|special_1216|>",
1098
- "<|special_1217|>",
1099
- "<|special_1218|>",
1100
- "<|special_1219|>",
1101
- "<|special_1220|>",
1102
- "<|special_1221|>",
1103
- "<|special_1222|>",
1104
- "<|special_1223|>",
1105
- "<|special_1224|>",
1106
- "<|special_1225|>",
1107
- "<|special_1226|>",
1108
- "<|special_1227|>",
1109
- "<|special_1228|>",
1110
- "<|special_1229|>",
1111
- "<|special_1230|>",
1112
- "<|special_1231|>",
1113
- "<|special_1232|>",
1114
- "<|special_1233|>",
1115
- "<|special_1234|>",
1116
- "<|special_1235|>",
1117
- "<|special_1236|>",
1118
- "<|special_1237|>",
1119
- "<|special_1238|>",
1120
- "<|special_1239|>",
1121
- "<|special_1240|>",
1122
- "<|special_1241|>",
1123
- "<|special_1242|>",
1124
- "<|special_1243|>",
1125
- "<|special_1244|>",
1126
- "<|special_1245|>",
1127
- "<|special_1246|>",
1128
- "<|special_1247|>",
1129
- "<|special_1248|>",
1130
- "<|special_1249|>",
1131
- "<|special_1250|>",
1132
- "<|special_1251|>",
1133
- "<|special_1252|>",
1134
- "<|special_1253|>",
1135
- "<|special_1254|>",
1136
- "<|special_1255|>",
1137
- "<|special_1256|>",
1138
- "<|special_1257|>",
1139
- "<|special_1258|>",
1140
- "<|special_1259|>",
1141
- "<|special_1260|>",
1142
- "<|special_1261|>",
1143
- "<|special_1262|>",
1144
- "<|special_1263|>",
1145
- "<|special_1264|>",
1146
- "<|special_1265|>",
1147
- "<|special_1266|>",
1148
- "<|special_1267|>",
1149
- "<|special_1268|>",
1150
- "<|special_1269|>",
1151
- "<|special_1270|>",
1152
- "<|special_1271|>",
1153
- "<|special_1272|>",
1154
- "<|special_1273|>",
1155
- "<|special_1274|>",
1156
- "<|special_1275|>",
1157
- "<|special_1276|>",
1158
- "<|special_1277|>",
1159
- "<|special_1278|>",
1160
- "<|special_1279|>",
1161
- "<|special_1280|>",
1162
- "<|special_1281|>",
1163
- "<|special_1282|>",
1164
- "<|special_1283|>",
1165
- "<|special_1284|>",
1166
- "<|special_1285|>",
1167
- "<|special_1286|>",
1168
- "<|special_1287|>",
1169
- "<|special_1288|>",
1170
- "<|special_1289|>",
1171
- "<|special_1290|>",
1172
- "<|special_1291|>",
1173
- "<|special_1292|>",
1174
- "<|special_1293|>",
1175
- "<|special_1294|>",
1176
- "<|special_1295|>",
1177
- "<|special_1296|>",
1178
- "<|special_1297|>",
1179
- "<|special_1298|>",
1180
- "<|special_1299|>",
1181
- "<|special_1300|>",
1182
- "<|special_1301|>",
1183
- "<|special_1302|>",
1184
- "<|special_1303|>",
1185
- "<|special_1304|>",
1186
- "<|special_1305|>",
1187
- "<|special_1306|>",
1188
- "<|special_1307|>",
1189
- "<|special_1308|>",
1190
- "<|special_1309|>",
1191
- "<|special_1310|>",
1192
- "<|special_1311|>",
1193
- "<|special_1312|>",
1194
- "<|special_1313|>",
1195
- "<|special_1314|>",
1196
- "<|special_1315|>",
1197
- "<|special_1316|>",
1198
- "<|special_1317|>",
1199
- "<|special_1318|>",
1200
- "<|special_1319|>",
1201
- "<|special_1320|>",
1202
- "<|special_1321|>",
1203
- "<|special_1322|>",
1204
- "<|special_1323|>",
1205
- "<|special_1324|>",
1206
- "<|special_1325|>",
1207
- "<|special_1326|>",
1208
- "<|special_1327|>",
1209
- "<|special_1328|>",
1210
- "<|special_1329|>",
1211
- "<|special_1330|>",
1212
- "<|special_1331|>",
1213
- "<|special_1332|>",
1214
- "<|special_1333|>",
1215
- "<|special_1334|>",
1216
- "<|special_1335|>",
1217
- "<|special_1336|>",
1218
- "<|special_1337|>",
1219
- "<|special_1338|>",
1220
- "<|special_1339|>",
1221
- "<|special_1340|>",
1222
- "<|special_1341|>",
1223
- "<|special_1342|>",
1224
- "<|special_1343|>",
1225
- "<|special_1344|>",
1226
- "<|special_1345|>",
1227
- "<|special_1346|>",
1228
- "<|special_1347|>",
1229
- "<|special_1348|>",
1230
- "<|special_1349|>",
1231
- "<|special_1350|>",
1232
- "<|special_1351|>",
1233
- "<|special_1352|>",
1234
- "<|special_1353|>",
1235
- "<|special_1354|>",
1236
- "<|special_1355|>",
1237
- "<|special_1356|>",
1238
- "<|special_1357|>",
1239
- "<|special_1358|>",
1240
- "<|special_1359|>",
1241
- "<|special_1360|>",
1242
- "<|special_1361|>",
1243
- "<|special_1362|>",
1244
- "<|special_1363|>",
1245
- "<|special_1364|>",
1246
- "<|special_1365|>",
1247
- "<|special_1366|>",
1248
- "<|special_1367|>",
1249
- "<|special_1368|>",
1250
- "<|special_1369|>",
1251
- "<|special_1370|>",
1252
- "<|special_1371|>",
1253
- "<|special_1372|>",
1254
- "<|special_1373|>",
1255
- "<|special_1374|>",
1256
- "<|special_1375|>",
1257
- "<|special_1376|>",
1258
- "<|special_1377|>",
1259
- "<|special_1378|>",
1260
- "<|special_1379|>",
1261
- "<|special_1380|>",
1262
- "<|special_1381|>",
1263
- "<|special_1382|>",
1264
- "<|special_1383|>",
1265
- "<|special_1384|>",
1266
- "<|special_1385|>",
1267
- "<|special_1386|>",
1268
- "<|special_1387|>",
1269
- "<|special_1388|>",
1270
- "<|special_1389|>",
1271
- "<|special_1390|>",
1272
- "<|special_1391|>",
1273
- "<|special_1392|>",
1274
- "<|special_1393|>",
1275
- "<|special_1394|>",
1276
- "<|special_1395|>",
1277
- "<|special_1396|>",
1278
- "<|special_1397|>",
1279
- "<|special_1398|>",
1280
- "<|special_1399|>",
1281
- "<|special_1400|>",
1282
- "<|special_1401|>",
1283
- "<|special_1402|>",
1284
- "<|special_1403|>",
1285
- "<|special_1404|>",
1286
- "<|special_1405|>",
1287
- "<|special_1406|>",
1288
- "<|special_1407|>",
1289
- "<|special_1408|>",
1290
- "<|special_1409|>",
1291
- "<|special_1410|>",
1292
- "<|special_1411|>",
1293
- "<|special_1412|>",
1294
- "<|special_1413|>",
1295
- "<|special_1414|>",
1296
- "<|special_1415|>",
1297
- "<|special_1416|>",
1298
- "<|special_1417|>",
1299
- "<|special_1418|>",
1300
- "<|special_1419|>",
1301
- "<|special_1420|>",
1302
- "<|special_1421|>",
1303
- "<|special_1422|>",
1304
- "<|special_1423|>",
1305
- "<|special_1424|>",
1306
- "<|special_1425|>",
1307
- "<|special_1426|>",
1308
- "<|special_1427|>",
1309
- "<|special_1428|>",
1310
- "<|special_1429|>",
1311
- "<|special_1430|>",
1312
- "<|special_1431|>",
1313
- "<|special_1432|>",
1314
- "<|special_1433|>",
1315
- "<|special_1434|>",
1316
- "<|special_1435|>",
1317
- "<|special_1436|>",
1318
- "<|special_1437|>",
1319
- "<|special_1438|>",
1320
- "<|special_1439|>",
1321
- "<|special_1440|>",
1322
- "<|special_1441|>",
1323
- "<|special_1442|>",
1324
- "<|special_1443|>",
1325
- "<|special_1444|>",
1326
- "<|special_1445|>",
1327
- "<|special_1446|>",
1328
- "<|special_1447|>",
1329
- "<|special_1448|>",
1330
- "<|special_1449|>",
1331
- "<|special_1450|>",
1332
- "<|special_1451|>",
1333
- "<|special_1452|>",
1334
- "<|special_1453|>",
1335
- "<|special_1454|>",
1336
- "<|special_1455|>",
1337
- "<|special_1456|>",
1338
- "<|special_1457|>",
1339
- "<|special_1458|>",
1340
- "<|special_1459|>",
1341
- "<|special_1460|>",
1342
- "<|special_1461|>",
1343
- "<|special_1462|>",
1344
- "<|special_1463|>",
1345
- "<|special_1464|>",
1346
- "<|special_1465|>",
1347
- "<|special_1466|>",
1348
- "<|special_1467|>",
1349
- "<|special_1468|>",
1350
- "<|special_1469|>",
1351
- "<|special_1470|>",
1352
- "<|special_1471|>",
1353
- "<|special_1472|>",
1354
- "<|special_1473|>",
1355
- "<|special_1474|>",
1356
- "<|special_1475|>",
1357
- "<|special_1476|>",
1358
- "<|special_1477|>",
1359
- "<|special_1478|>",
1360
- "<|special_1479|>",
1361
- "<|special_1480|>",
1362
- "<|special_1481|>",
1363
- "<|special_1482|>",
1364
- "<|special_1483|>",
1365
- "<|special_1484|>",
1366
- "<|special_1485|>",
1367
- "<|special_1486|>",
1368
- "<|special_1487|>",
1369
- "<|special_1488|>",
1370
- "<|special_1489|>",
1371
- "<|special_1490|>",
1372
- "<|special_1491|>",
1373
- "<|special_1492|>",
1374
- "<|special_1493|>",
1375
- "<|special_1494|>",
1376
- "<|special_1495|>",
1377
- "<|special_1496|>",
1378
- "<|special_1497|>",
1379
- "<|special_1498|>",
1380
- "<|special_1499|>",
1381
- "<|special_1500|>",
1382
- "<|special_1501|>",
1383
- "<|special_1502|>",
1384
- "<|special_1503|>",
1385
- "<|special_1504|>",
1386
- "<|special_1505|>",
1387
- "<|special_1506|>",
1388
- "<|special_1507|>",
1389
- "<|special_1508|>",
1390
- "<|special_1509|>",
1391
- "<|special_1510|>",
1392
- "<|special_1511|>",
1393
- "<|special_1512|>",
1394
- "<|special_1513|>",
1395
- "<|special_1514|>",
1396
- "<|special_1515|>",
1397
- "<|special_1516|>",
1398
- "<|special_1517|>",
1399
- "<|special_1518|>",
1400
- "<|special_1519|>",
1401
- "<|special_1520|>",
1402
- "<|special_1521|>",
1403
- "<|special_1522|>",
1404
- "<|special_1523|>",
1405
- "<|special_1524|>",
1406
- "<|special_1525|>",
1407
- "<|special_1526|>",
1408
- "<|special_1527|>",
1409
- "<|special_1528|>",
1410
- "<|special_1529|>",
1411
- "<|special_1530|>",
1412
- "<|special_1531|>",
1413
- "<|special_1532|>",
1414
- "<|special_1533|>",
1415
- "<|special_1534|>",
1416
- "<|special_1535|>",
1417
- "<|special_1536|>",
1418
- "<|special_1537|>",
1419
- "<|special_1538|>",
1420
- "<|special_1539|>",
1421
- "<|special_1540|>",
1422
- "<|special_1541|>",
1423
- "<|special_1542|>",
1424
- "<|special_1543|>",
1425
- "<|special_1544|>",
1426
- "<|special_1545|>",
1427
- "<|special_1546|>",
1428
- "<|special_1547|>",
1429
- "<|special_1548|>",
1430
- "<|special_1549|>",
1431
- "<|special_1550|>",
1432
- "<|special_1551|>",
1433
- "<|special_1552|>",
1434
- "<|special_1553|>",
1435
- "<|special_1554|>",
1436
- "<|special_1555|>",
1437
- "<|special_1556|>",
1438
- "<|special_1557|>",
1439
- "<|special_1558|>",
1440
- "<|special_1559|>",
1441
- "<|special_1560|>",
1442
- "<|special_1561|>",
1443
- "<|special_1562|>",
1444
- "<|special_1563|>",
1445
- "<|special_1564|>",
1446
- "<|special_1565|>",
1447
- "<|special_1566|>",
1448
- "<|special_1567|>",
1449
- "<|special_1568|>",
1450
- "<|special_1569|>",
1451
- "<|special_1570|>",
1452
- "<|special_1571|>",
1453
- "<|special_1572|>",
1454
- "<|special_1573|>",
1455
- "<|special_1574|>",
1456
- "<|special_1575|>",
1457
- "<|special_1576|>",
1458
- "<|special_1577|>",
1459
- "<|special_1578|>",
1460
- "<|special_1579|>",
1461
- "<|special_1580|>",
1462
- "<|special_1581|>",
1463
- "<|special_1582|>",
1464
- "<|special_1583|>",
1465
- "<|special_1584|>",
1466
- "<|special_1585|>",
1467
- "<|special_1586|>",
1468
- "<|special_1587|>",
1469
- "<|special_1588|>",
1470
- "<|special_1589|>",
1471
- "<|special_1590|>",
1472
- "<|special_1591|>",
1473
- "<|special_1592|>",
1474
- "<|special_1593|>",
1475
- "<|special_1594|>",
1476
- "<|special_1595|>",
1477
- "<|special_1596|>",
1478
- "<|special_1597|>",
1479
- "<|special_1598|>",
1480
- "<|special_1599|>",
1481
- "<|special_1600|>",
1482
- "<|special_1601|>",
1483
- "<|special_1602|>",
1484
- "<|special_1603|>",
1485
- "<|special_1604|>",
1486
- "<|special_1605|>",
1487
- "<|special_1606|>",
1488
- "<|special_1607|>",
1489
- "<|special_1608|>",
1490
- "<|special_1609|>",
1491
- "<|special_1610|>",
1492
- "<|special_1611|>",
1493
- "<|special_1612|>",
1494
- "<|special_1613|>",
1495
- "<|special_1614|>",
1496
- "<|special_1615|>",
1497
- "<|special_1616|>",
1498
- "<|special_1617|>",
1499
- "<|special_1618|>",
1500
- "<|special_1619|>",
1501
- "<|special_1620|>",
1502
- "<|special_1621|>",
1503
- "<|special_1622|>",
1504
- "<|special_1623|>",
1505
- "<|special_1624|>",
1506
- "<|special_1625|>",
1507
- "<|special_1626|>",
1508
- "<|special_1627|>",
1509
- "<|special_1628|>",
1510
- "<|special_1629|>",
1511
- "<|special_1630|>",
1512
- "<|special_1631|>",
1513
- "<|special_1632|>",
1514
- "<|special_1633|>",
1515
- "<|special_1634|>",
1516
- "<|special_1635|>",
1517
- "<|special_1636|>",
1518
- "<|special_1637|>",
1519
- "<|special_1638|>",
1520
- "<|special_1639|>",
1521
- "<|special_1640|>",
1522
- "<|special_1641|>",
1523
- "<|special_1642|>",
1524
- "<|special_1643|>",
1525
- "<|special_1644|>",
1526
- "<|special_1645|>",
1527
- "<|special_1646|>",
1528
- "<|special_1647|>",
1529
- "<|special_1648|>",
1530
- "<|special_1649|>",
1531
- "<|special_1650|>",
1532
- "<|special_1651|>",
1533
- "<|special_1652|>",
1534
- "<|special_1653|>",
1535
- "<|special_1654|>",
1536
- "<|special_1655|>",
1537
- "<|special_1656|>",
1538
- "<|special_1657|>",
1539
- "<|special_1658|>",
1540
- "<|special_1659|>",
1541
- "<|special_1660|>",
1542
- "<|special_1661|>",
1543
- "<|special_1662|>",
1544
- "<|special_1663|>",
1545
- "<|special_1664|>",
1546
- "<|special_1665|>",
1547
- "<|special_1666|>",
1548
- "<|special_1667|>",
1549
- "<|special_1668|>",
1550
- "<|special_1669|>",
1551
- "<|special_1670|>",
1552
- "<|special_1671|>",
1553
- "<|special_1672|>",
1554
- "<|special_1673|>",
1555
- "<|special_1674|>",
1556
- "<|special_1675|>",
1557
- "<|special_1676|>",
1558
- "<|special_1677|>",
1559
- "<|special_1678|>",
1560
- "<|special_1679|>",
1561
- "<|special_1680|>",
1562
- "<|special_1681|>",
1563
- "<|special_1682|>",
1564
- "<|special_1683|>",
1565
- "<|special_1684|>",
1566
- "<|special_1685|>",
1567
- "<|special_1686|>",
1568
- "<|special_1687|>",
1569
- "<|special_1688|>",
1570
- "<|special_1689|>",
1571
- "<|special_1690|>",
1572
- "<|special_1691|>",
1573
- "<|special_1692|>",
1574
- "<|special_1693|>",
1575
- "<|special_1694|>",
1576
- "<|special_1695|>",
1577
- "<|special_1696|>",
1578
- "<|special_1697|>",
1579
- "<|special_1698|>",
1580
- "<|special_1699|>",
1581
- "<|special_1700|>",
1582
- "<|special_1701|>",
1583
- "<|special_1702|>",
1584
- "<|special_1703|>",
1585
- "<|special_1704|>",
1586
- "<|special_1705|>",
1587
- "<|special_1706|>",
1588
- "<|special_1707|>",
1589
- "<|special_1708|>",
1590
- "<|special_1709|>",
1591
- "<|special_1710|>",
1592
- "<|special_1711|>",
1593
- "<|special_1712|>",
1594
- "<|special_1713|>",
1595
- "<|special_1714|>",
1596
- "<|special_1715|>",
1597
- "<|special_1716|>",
1598
- "<|special_1717|>",
1599
- "<|special_1718|>",
1600
- "<|special_1719|>",
1601
- "<|special_1720|>",
1602
- "<|special_1721|>",
1603
- "<|special_1722|>",
1604
- "<|special_1723|>",
1605
- "<|special_1724|>",
1606
- "<|special_1725|>",
1607
- "<|special_1726|>",
1608
- "<|special_1727|>",
1609
- "<|special_1728|>",
1610
- "<|special_1729|>",
1611
- "<|special_1730|>",
1612
- "<|special_1731|>",
1613
- "<|special_1732|>",
1614
- "<|special_1733|>",
1615
- "<|special_1734|>",
1616
- "<|special_1735|>",
1617
- "<|special_1736|>",
1618
- "<|special_1737|>",
1619
- "<|special_1738|>",
1620
- "<|special_1739|>",
1621
- "<|special_1740|>",
1622
- "<|special_1741|>",
1623
- "<|special_1742|>",
1624
- "<|special_1743|>",
1625
- "<|special_1744|>",
1626
- "<|special_1745|>",
1627
- "<|special_1746|>",
1628
- "<|special_1747|>",
1629
- "<|special_1748|>",
1630
- "<|special_1749|>",
1631
- "<|special_1750|>",
1632
- "<|special_1751|>",
1633
- "<|special_1752|>",
1634
- "<|special_1753|>",
1635
- "<|special_1754|>",
1636
- "<|special_1755|>",
1637
- "<|special_1756|>",
1638
- "<|special_1757|>",
1639
- "<|special_1758|>",
1640
- "<|special_1759|>",
1641
- "<|special_1760|>",
1642
- "<|special_1761|>",
1643
- "<|special_1762|>",
1644
- "<|special_1763|>",
1645
- "<|special_1764|>",
1646
- "<|special_1765|>",
1647
- "<|special_1766|>",
1648
- "<|special_1767|>",
1649
- "<|special_1768|>",
1650
- "<|special_1769|>",
1651
- "<|special_1770|>",
1652
- "<|special_1771|>",
1653
- "<|special_1772|>",
1654
- "<|special_1773|>",
1655
- "<|special_1774|>",
1656
- "<|special_1775|>",
1657
- "<|special_1776|>",
1658
- "<|special_1777|>",
1659
- "<|special_1778|>",
1660
- "<|special_1779|>",
1661
- "<|special_1780|>",
1662
- "<|special_1781|>",
1663
- "<|special_1782|>",
1664
- "<|special_1783|>",
1665
- "<|special_1784|>",
1666
- "<|special_1785|>",
1667
- "<|special_1786|>",
1668
- "<|special_1787|>",
1669
- "<|special_1788|>",
1670
- "<|special_1789|>",
1671
- "<|special_1790|>",
1672
- "<|special_1791|>",
1673
- "<|special_1792|>",
1674
- "<|special_1793|>",
1675
- "<|special_1794|>",
1676
- "<|special_1795|>",
1677
- "<|special_1796|>",
1678
- "<|special_1797|>",
1679
- "<|special_1798|>",
1680
- "<|special_1799|>",
1681
- "<|special_1800|>",
1682
- "<|special_1801|>",
1683
- "<|special_1802|>",
1684
- "<|special_1803|>",
1685
- "<|special_1804|>",
1686
- "<|special_1805|>",
1687
- "<|special_1806|>",
1688
- "<|special_1807|>",
1689
- "<|special_1808|>",
1690
- "<|special_1809|>",
1691
- "<|special_1810|>",
1692
- "<|special_1811|>",
1693
- "<|special_1812|>",
1694
- "<|special_1813|>",
1695
- "<|special_1814|>",
1696
- "<|special_1815|>",
1697
- "<|special_1816|>",
1698
- "<|special_1817|>",
1699
- "<|special_1818|>",
1700
- "<|special_1819|>",
1701
- "<|special_1820|>",
1702
- "<|special_1821|>",
1703
- "<|special_1822|>",
1704
- "<|special_1823|>",
1705
- "<|special_1824|>",
1706
- "<|special_1825|>",
1707
- "<|special_1826|>",
1708
- "<|special_1827|>",
1709
- "<|special_1828|>",
1710
- "<|special_1829|>",
1711
- "<|special_1830|>",
1712
- "<|special_1831|>",
1713
- "<|special_1832|>",
1714
- "<|special_1833|>",
1715
- "<|special_1834|>",
1716
- "<|special_1835|>",
1717
- "<|special_1836|>",
1718
- "<|special_1837|>",
1719
- "<|special_1838|>",
1720
- "<|special_1839|>",
1721
- "<|special_1840|>",
1722
- "<|special_1841|>",
1723
- "<|special_1842|>",
1724
- "<|special_1843|>",
1725
- "<|special_1844|>",
1726
- "<|special_1845|>",
1727
- "<|special_1846|>",
1728
- "<|special_1847|>",
1729
- "<|special_1848|>",
1730
- "<|special_1849|>",
1731
- "<|special_1850|>",
1732
- "<|special_1851|>",
1733
- "<|special_1852|>",
1734
- "<|special_1853|>",
1735
- "<|special_1854|>",
1736
- "<|special_1855|>",
1737
- "<|special_1856|>",
1738
- "<|special_1857|>",
1739
- "<|special_1858|>",
1740
- "<|special_1859|>",
1741
- "<|special_1860|>",
1742
- "<|special_1861|>",
1743
- "<|special_1862|>",
1744
- "<|special_1863|>",
1745
- "<|special_1864|>",
1746
- "<|special_1865|>",
1747
- "<|special_1866|>",
1748
- "<|special_1867|>",
1749
- "<|special_1868|>",
1750
- "<|special_1869|>",
1751
- "<|special_1870|>",
1752
- "<|special_1871|>",
1753
- "<|special_1872|>",
1754
- "<|special_1873|>",
1755
- "<|special_1874|>",
1756
- "<|special_1875|>",
1757
- "<|special_1876|>",
1758
- "<|special_1877|>",
1759
- "<|special_1878|>",
1760
- "<|special_1879|>",
1761
- "<|special_1880|>",
1762
- "<|special_1881|>",
1763
- "<|special_1882|>",
1764
- "<|special_1883|>",
1765
- "<|special_1884|>",
1766
- "<|special_1885|>",
1767
- "<|special_1886|>",
1768
- "<|special_1887|>",
1769
- "<|special_1888|>",
1770
- "<|special_1889|>",
1771
- "<|special_1890|>",
1772
- "<|special_1891|>",
1773
- "<|special_1892|>",
1774
- "<|special_1893|>",
1775
- "<|special_1894|>",
1776
- "<|special_1895|>",
1777
- "<|special_1896|>",
1778
- "<|special_1897|>",
1779
- "<|special_1898|>",
1780
- "<|special_1899|>",
1781
- "<|special_1900|>",
1782
- "<|special_1901|>",
1783
- "<|special_1902|>",
1784
- "<|special_1903|>",
1785
- "<|special_1904|>",
1786
- "<|special_1905|>",
1787
- "<|special_1906|>",
1788
- "<|special_1907|>",
1789
- "<|special_1908|>",
1790
- "<|special_1909|>",
1791
- "<|special_1910|>",
1792
- "<|special_1911|>",
1793
- "<|special_1912|>",
1794
- "<|special_1913|>",
1795
- "<|special_1914|>",
1796
- "<|special_1915|>",
1797
- "<|special_1916|>",
1798
- "<|special_1917|>",
1799
- "<|special_1918|>",
1800
- "<|special_1919|>",
1801
- "<|special_1920|>",
1802
- "<|special_1921|>",
1803
- "<|special_1922|>",
1804
- "<|special_1923|>",
1805
- "<|special_1924|>",
1806
- "<|special_1925|>",
1807
- "<|special_1926|>",
1808
- "<|special_1927|>",
1809
- "<|special_1928|>",
1810
- "<|special_1929|>",
1811
- "<|special_1930|>",
1812
- "<|special_1931|>",
1813
- "<|special_1932|>",
1814
- "<|special_1933|>",
1815
- "<|special_1934|>",
1816
- "<|special_1935|>",
1817
- "<|special_1936|>",
1818
- "<|special_1937|>",
1819
- "<|special_1938|>",
1820
- "<|special_1939|>",
1821
- "<|special_1940|>",
1822
- "<|special_1941|>",
1823
- "<|special_1942|>",
1824
- "<|special_1943|>",
1825
- "<|special_1944|>",
1826
- "<|special_1945|>",
1827
- "<|special_1946|>",
1828
- "<|special_1947|>",
1829
- "<|special_1948|>",
1830
- "<|special_1949|>",
1831
- "<|special_1950|>",
1832
- "<|special_1951|>",
1833
- "<|special_1952|>",
1834
- "<|special_1953|>",
1835
- "<|special_1954|>",
1836
- "<|special_1955|>",
1837
- "<|special_1956|>",
1838
- "<|special_1957|>",
1839
- "<|special_1958|>",
1840
- "<|special_1959|>",
1841
- "<|special_1960|>",
1842
- "<|special_1961|>",
1843
- "<|special_1962|>",
1844
- "<|special_1963|>",
1845
- "<|special_1964|>",
1846
- "<|special_1965|>",
1847
- "<|special_1966|>",
1848
- "<|special_1967|>",
1849
- "<|special_1968|>",
1850
- "<|special_1969|>",
1851
- "<|special_1970|>",
1852
- "<|special_1971|>",
1853
- "<|special_1972|>",
1854
- "<|special_1973|>",
1855
- "<|special_1974|>",
1856
- "<|special_1975|>",
1857
- "<|special_1976|>",
1858
- "<|special_1977|>",
1859
- "<|special_1978|>",
1860
- "<|special_1979|>",
1861
- "<|special_1980|>",
1862
- "<|special_1981|>",
1863
- "<|special_1982|>",
1864
- "<|special_1983|>",
1865
- "<|special_1984|>",
1866
- "<|special_1985|>",
1867
- "<|special_1986|>",
1868
- "<|special_1987|>",
1869
- "<|special_1988|>",
1870
- "<|special_1989|>",
1871
- "<|special_1990|>",
1872
- "<|special_1991|>",
1873
- "<|special_1992|>",
1874
- "<|special_1993|>",
1875
- "<|special_1994|>",
1876
- "<|special_1995|>",
1877
- "<|special_1996|>",
1878
- "<|special_1997|>",
1879
- "<|special_1998|>",
1880
- "<|special_1999|>",
1881
- "<|special_2000|>",
1882
- "<|special_2001|>",
1883
- "<|special_2002|>",
1884
- "<|special_2003|>",
1885
- "<|special_2004|>",
1886
- "<|special_2005|>",
1887
- "<|special_2006|>",
1888
- "<|special_2007|>",
1889
- "<|special_2008|>",
1890
- "<|special_2009|>",
1891
- "<|special_2010|>",
1892
- "<|special_2011|>",
1893
- "<|special_2012|>",
1894
- "<|special_2013|>",
1895
- "<|special_2014|>",
1896
- "<|special_2015|>",
1897
- "<|special_2016|>",
1898
- "<|special_2017|>",
1899
- "<|special_2018|>",
1900
- "<|special_2019|>",
1901
- "<|special_2020|>",
1902
- "<|special_2021|>",
1903
- "<|special_2022|>",
1904
- "<|special_2023|>",
1905
- "<|special_2024|>",
1906
- "<|special_2025|>",
1907
- "<|special_2026|>",
1908
- "<|special_2027|>",
1909
- "<|special_2028|>",
1910
- "<|special_2029|>",
1911
- "<|special_2030|>",
1912
- "<|special_2031|>",
1913
- "<|special_2032|>",
1914
- "<|special_2033|>",
1915
- "<|special_2034|>",
1916
- "<|special_2035|>",
1917
- "<|special_2036|>",
1918
- "<|special_2037|>",
1919
- "<|special_2038|>",
1920
- "<|special_2039|>",
1921
- "<|special_2040|>",
1922
- "<|special_2041|>",
1923
- "<|special_2042|>",
1924
- "<|special_2043|>",
1925
- "<|special_2044|>",
1926
- "<|special_2045|>",
1927
- "<|special_2046|>",
1928
- "<|special_2047|>",
1929
- "<|special_2048|>",
1930
- "<|special_2049|>",
1931
- "<|special_2050|>",
1932
- "<|special_2051|>",
1933
- "<|special_2052|>",
1934
- "<|special_2053|>",
1935
- "<|special_2054|>",
1936
- "<|special_2055|>",
1937
- "<|special_2056|>",
1938
- "<|special_2057|>",
1939
- "<|special_2058|>",
1940
- "<|special_2059|>",
1941
- "<|special_2060|>",
1942
- "<|special_2061|>",
1943
- "<|special_2062|>",
1944
- "<|special_2063|>",
1945
- "<|special_2064|>",
1946
- "<|special_2065|>",
1947
- "<|special_2066|>",
1948
- "<|special_2067|>",
1949
- "<|special_2068|>",
1950
- "<|special_2069|>",
1951
- "<|special_2070|>",
1952
- "<|special_2071|>",
1953
- "<|special_2072|>",
1954
- "<|special_2073|>",
1955
- "<|special_2074|>",
1956
- "<|special_2075|>",
1957
- "<|special_2076|>",
1958
- "<|special_2077|>",
1959
- "<|special_2078|>",
1960
- "<|special_2079|>",
1961
- "<|special_2080|>",
1962
- "<|special_2081|>",
1963
- "<|special_2082|>",
1964
- "<|special_2083|>",
1965
- "<|special_2084|>",
1966
- "<|special_2085|>",
1967
- "<|special_2086|>",
1968
- "<|special_2087|>",
1969
- "<|special_2088|>",
1970
- "<|special_2089|>",
1971
- "<|special_2090|>",
1972
- "<|special_2091|>",
1973
- "<|special_2092|>",
1974
- "<|special_2093|>",
1975
- "<|special_2094|>",
1976
- "<|special_2095|>",
1977
- "<|special_2096|>",
1978
- "<|special_2097|>",
1979
- "<|special_2098|>",
1980
- "<|special_2099|>",
1981
- "<|special_2100|>",
1982
- "<|special_2101|>",
1983
- "<|special_2102|>",
1984
- "<|special_2103|>",
1985
- "<|special_2104|>",
1986
- "<|special_2105|>",
1987
- "<|special_2106|>",
1988
- "<|special_2107|>",
1989
- "<|special_2108|>",
1990
- "<|special_2109|>",
1991
- "<|special_2110|>",
1992
- "<|special_2111|>",
1993
- "<|special_2112|>",
1994
- "<|special_2113|>",
1995
- "<|special_2114|>",
1996
- "<|special_2115|>",
1997
- "<|special_2116|>",
1998
- "<|special_2117|>",
1999
- "<|special_2118|>",
2000
- "<|special_2119|>",
2001
- "<|special_2120|>",
2002
- "<|special_2121|>",
2003
- "<|special_2122|>",
2004
- "<|special_2123|>",
2005
- "<|special_2124|>",
2006
- "<|special_2125|>",
2007
- "<|special_2126|>",
2008
- "<|special_2127|>",
2009
- "<|special_2128|>",
2010
- "<|special_2129|>",
2011
- "<|special_2130|>",
2012
- "<|special_2131|>",
2013
- "<|special_2132|>",
2014
- "<|special_2133|>",
2015
- "<|special_2134|>",
2016
- "<|special_2135|>",
2017
- "<|special_2136|>",
2018
- "<|special_2137|>",
2019
- "<|special_2138|>",
2020
- "<|special_2139|>",
2021
- "<|special_2140|>",
2022
- "<|special_2141|>",
2023
- "<|special_2142|>",
2024
- "<|special_2143|>",
2025
- "<|special_2144|>",
2026
- "<|special_2145|>",
2027
- "<|special_2146|>",
2028
- "<|special_2147|>",
2029
- "<|special_2148|>",
2030
- "<|special_2149|>",
2031
- "<|special_2150|>",
2032
- "<|special_2151|>",
2033
- "<|special_2152|>",
2034
- "<|special_2153|>",
2035
- "<|special_2154|>",
2036
- "<|special_2155|>",
2037
- "<|special_2156|>",
2038
- "<|special_2157|>",
2039
- "<|special_2158|>",
2040
- "<|special_2159|>",
2041
- "<|special_2160|>",
2042
- "<|special_2161|>",
2043
- "<|special_2162|>",
2044
- "<|special_2163|>",
2045
- "<|special_2164|>",
2046
- "<|special_2165|>",
2047
- "<|special_2166|>",
2048
- "<|special_2167|>",
2049
- "<|special_2168|>",
2050
- "<|special_2169|>",
2051
- "<|special_2170|>",
2052
- "<|special_2171|>",
2053
- "<|special_2172|>",
2054
- "<|special_2173|>",
2055
- "<|special_2174|>",
2056
- "<|special_2175|>",
2057
- "<|special_2176|>",
2058
- "<|special_2177|>",
2059
- "<|special_2178|>",
2060
- "<|special_2179|>",
2061
- "<|special_2180|>",
2062
- "<|special_2181|>",
2063
- "<|special_2182|>",
2064
- "<|special_2183|>",
2065
- "<|special_2184|>",
2066
- "<|special_2185|>",
2067
- "<|special_2186|>",
2068
- "<|special_2187|>",
2069
- "<|special_2188|>",
2070
- "<|special_2189|>",
2071
- "<|special_2190|>",
2072
- "<|special_2191|>",
2073
- "<|special_2192|>",
2074
- "<|special_2193|>",
2075
- "<|special_2194|>",
2076
- "<|special_2195|>",
2077
- "<|special_2196|>",
2078
- "<|special_2197|>",
2079
- "<|special_2198|>",
2080
- "<|special_2199|>",
2081
- "<|special_2200|>",
2082
- "<|special_2201|>",
2083
- "<|special_2202|>",
2084
- "<|special_2203|>",
2085
- "<|special_2204|>",
2086
- "<|special_2205|>",
2087
- "<|special_2206|>",
2088
- "<|special_2207|>",
2089
- "<|special_2208|>",
2090
- "<|special_2209|>",
2091
- "<|special_2210|>",
2092
- "<|special_2211|>",
2093
- "<|special_2212|>",
2094
- "<|special_2213|>",
2095
- "<|special_2214|>",
2096
- "<|special_2215|>",
2097
- "<|special_2216|>",
2098
- "<|special_2217|>",
2099
- "<|special_2218|>",
2100
- "<|special_2219|>",
2101
- "<|special_2220|>",
2102
- "<|special_2221|>",
2103
- "<|special_2222|>",
2104
- "<|special_2223|>",
2105
- "<|special_2224|>",
2106
- "<|special_2225|>",
2107
- "<|special_2226|>",
2108
- "<|special_2227|>",
2109
- "<|special_2228|>",
2110
- "<|special_2229|>",
2111
- "<|special_2230|>",
2112
- "<|special_2231|>",
2113
- "<|special_2232|>",
2114
- "<|special_2233|>",
2115
- "<|special_2234|>",
2116
- "<|special_2235|>",
2117
- "<|special_2236|>",
2118
- "<|special_2237|>",
2119
- "<|special_2238|>",
2120
- "<|special_2239|>",
2121
- "<|special_2240|>",
2122
- "<|special_2241|>",
2123
- "<|special_2242|>",
2124
- "<|special_2243|>",
2125
- "<|special_2244|>",
2126
- "<|special_2245|>",
2127
- "<|special_2246|>",
2128
- "<|special_2247|>",
2129
- "<|special_2248|>",
2130
- "<|special_2249|>",
2131
- "<|special_2250|>",
2132
- "<|special_2251|>",
2133
- "<|special_2252|>",
2134
- "<|special_2253|>",
2135
- "<|special_2254|>",
2136
- "<|special_2255|>",
2137
- "<|special_2256|>",
2138
- "<|special_2257|>",
2139
- "<|special_2258|>",
2140
- "<|special_2259|>",
2141
- "<|special_2260|>",
2142
- "<|special_2261|>",
2143
- "<|special_2262|>",
2144
- "<|special_2263|>",
2145
- "<|special_2264|>",
2146
- "<|special_2265|>",
2147
- "<|special_2266|>",
2148
- "<|special_2267|>",
2149
- "<|special_2268|>",
2150
- "<|special_2269|>",
2151
- "<|special_2270|>",
2152
- "<|special_2271|>",
2153
- "<|special_2272|>",
2154
- "<|special_2273|>",
2155
- "<|special_2274|>",
2156
- "<|special_2275|>",
2157
- "<|special_2276|>",
2158
- "<|special_2277|>",
2159
- "<|special_2278|>",
2160
- "<|special_2279|>",
2161
- "<|special_2280|>",
2162
- "<|special_2281|>",
2163
- "<|special_2282|>",
2164
- "<|special_2283|>",
2165
- "<|special_2284|>",
2166
- "<|special_2285|>",
2167
- "<|special_2286|>",
2168
- "<|special_2287|>",
2169
- "<|special_2288|>",
2170
- "<|special_2289|>",
2171
- "<|special_2290|>",
2172
- "<|special_2291|>",
2173
- "<|special_2292|>",
2174
- "<|special_2293|>",
2175
- "<|special_2294|>",
2176
- "<|special_2295|>",
2177
- "<|special_2296|>",
2178
- "<|special_2297|>",
2179
- "<|special_2298|>",
2180
- "<|special_2299|>",
2181
- "<|special_2300|>",
2182
- "<|special_2301|>",
2183
- "<|special_2302|>",
2184
- "<|special_2303|>",
2185
- "<|special_2304|>",
2186
- "<|special_2305|>",
2187
- "<|special_2306|>",
2188
- "<|special_2307|>",
2189
- "<|special_2308|>",
2190
- "<|special_2309|>",
2191
- "<|special_2310|>",
2192
- "<|special_2311|>",
2193
- "<|special_2312|>",
2194
- "<|special_2313|>",
2195
- "<|special_2314|>",
2196
- "<|special_2315|>",
2197
- "<|special_2316|>",
2198
- "<|special_2317|>",
2199
- "<|special_2318|>",
2200
- "<|special_2319|>",
2201
- "<|special_2320|>",
2202
- "<|special_2321|>",
2203
- "<|special_2322|>",
2204
- "<|special_2323|>",
2205
- "<|special_2324|>",
2206
- "<|special_2325|>",
2207
- "<|special_2326|>",
2208
- "<|special_2327|>",
2209
- "<|special_2328|>",
2210
- "<|special_2329|>",
2211
- "<|special_2330|>",
2212
- "<|special_2331|>",
2213
- "<|special_2332|>",
2214
- "<|special_2333|>",
2215
- "<|special_2334|>",
2216
- "<|special_2335|>",
2217
- "<|special_2336|>",
2218
- "<|special_2337|>",
2219
- "<|special_2338|>",
2220
- "<|special_2339|>",
2221
- "<|special_2340|>",
2222
- "<|special_2341|>",
2223
- "<|special_2342|>",
2224
- "<|special_2343|>",
2225
- "<|special_2344|>",
2226
- "<|special_2345|>",
2227
- "<|special_2346|>",
2228
- "<|special_2347|>",
2229
- "<|special_2348|>",
2230
- "<|special_2349|>",
2231
- "<|special_2350|>",
2232
- "<|special_2351|>",
2233
- "<|special_2352|>",
2234
- "<|special_2353|>",
2235
- "<|special_2354|>",
2236
- "<|special_2355|>",
2237
- "<|special_2356|>",
2238
- "<|special_2357|>",
2239
- "<|special_2358|>",
2240
- "<|special_2359|>",
2241
- "<|special_2360|>",
2242
- "<|special_2361|>",
2243
- "<|special_2362|>",
2244
- "<|special_2363|>",
2245
- "<|special_2364|>",
2246
- "<|special_2365|>",
2247
- "<|special_2366|>",
2248
- "<|special_2367|>",
2249
- "<|special_2368|>",
2250
- "<|special_2369|>",
2251
- "<|special_2370|>",
2252
- "<|special_2371|>",
2253
- "<|special_2372|>",
2254
- "<|special_2373|>",
2255
- "<|special_2374|>",
2256
- "<|special_2375|>",
2257
- "<|special_2376|>",
2258
- "<|special_2377|>",
2259
- "<|special_2378|>",
2260
- "<|special_2379|>",
2261
- "<|special_2380|>",
2262
- "<|special_2381|>",
2263
- "<|special_2382|>",
2264
- "<|special_2383|>",
2265
- "<|special_2384|>",
2266
- "<|special_2385|>",
2267
- "<|special_2386|>",
2268
- "<|special_2387|>",
2269
- "<|special_2388|>",
2270
- "<|special_2389|>",
2271
- "<|special_2390|>",
2272
- "<|special_2391|>",
2273
- "<|special_2392|>",
2274
- "<|special_2393|>",
2275
- "<|special_2394|>",
2276
- "<|special_2395|>",
2277
- "<|special_2396|>",
2278
- "<|special_2397|>",
2279
- "<|special_2398|>",
2280
- "<|special_2399|>",
2281
- "<|special_2400|>",
2282
- "<|special_2401|>",
2283
- "<|special_2402|>",
2284
- "<|special_2403|>",
2285
- "<|special_2404|>",
2286
- "<|special_2405|>",
2287
- "<|special_2406|>",
2288
- "<|special_2407|>",
2289
- "<|special_2408|>",
2290
- "<|special_2409|>",
2291
- "<|special_2410|>",
2292
- "<|special_2411|>",
2293
- "<|special_2412|>",
2294
- "<|special_2413|>",
2295
- "<|special_2414|>",
2296
- "<|special_2415|>",
2297
- "<|special_2416|>",
2298
- "<|special_2417|>",
2299
- "<|special_2418|>",
2300
- "<|special_2419|>",
2301
- "<|special_2420|>",
2302
- "<|special_2421|>",
2303
- "<|special_2422|>",
2304
- "<|special_2423|>",
2305
- "<|special_2424|>",
2306
- "<|special_2425|>",
2307
- "<|special_2426|>",
2308
- "<|special_2427|>",
2309
- "<|special_2428|>",
2310
- "<|special_2429|>",
2311
- "<|special_2430|>",
2312
- "<|special_2431|>",
2313
- "<|special_2432|>",
2314
- "<|special_2433|>",
2315
- "<|special_2434|>",
2316
- "<|special_2435|>",
2317
- "<|special_2436|>",
2318
- "<|special_2437|>",
2319
- "<|special_2438|>",
2320
- "<|special_2439|>",
2321
- "<|special_2440|>",
2322
- "<|special_2441|>",
2323
- "<|special_2442|>",
2324
- "<|special_2443|>",
2325
- "<|special_2444|>",
2326
- "<|special_2445|>",
2327
- "<|special_2446|>",
2328
- "<|special_2447|>",
2329
- "<|special_2448|>",
2330
- "<|special_2449|>",
2331
- "<|special_2450|>",
2332
- "<|special_2451|>",
2333
- "<|special_2452|>",
2334
- "<|special_2453|>",
2335
- "<|special_2454|>",
2336
- "<|special_2455|>",
2337
- "<|special_2456|>",
2338
- "<|special_2457|>",
2339
- "<|special_2458|>",
2340
- "<|special_2459|>",
2341
- "<|special_2460|>",
2342
- "<|special_2461|>",
2343
- "<|special_2462|>",
2344
- "<|special_2463|>",
2345
- "<|special_2464|>",
2346
- "<|special_2465|>",
2347
- "<|special_2466|>",
2348
- "<|special_2467|>",
2349
- "<|special_2468|>",
2350
- "<|special_2469|>",
2351
- "<|special_2470|>",
2352
- "<|special_2471|>",
2353
- "<|special_2472|>",
2354
- "<|special_2473|>",
2355
- "<|special_2474|>",
2356
- "<|special_2475|>",
2357
- "<|special_2476|>",
2358
- "<|special_2477|>",
2359
- "<|special_2478|>",
2360
- "<|special_2479|>",
2361
- "<|special_2480|>",
2362
- "<|special_2481|>",
2363
- "<|special_2482|>",
2364
- "<|special_2483|>",
2365
- "<|special_2484|>",
2366
- "<|special_2485|>",
2367
- "<|special_2486|>",
2368
- "<|special_2487|>",
2369
- "<|special_2488|>",
2370
- "<|special_2489|>",
2371
- "<|special_2490|>",
2372
- "<|special_2491|>",
2373
- "<|special_2492|>",
2374
- "<|special_2493|>",
2375
- "<|special_2494|>",
2376
- "<|special_2495|>",
2377
- "<|special_2496|>",
2378
- "<|special_2497|>",
2379
- "<|special_2498|>",
2380
- "<|special_2499|>",
2381
- "<|special_2500|>",
2382
- "<|special_2501|>",
2383
- "<|special_2502|>",
2384
- "<|special_2503|>",
2385
- "<|special_2504|>",
2386
- "<|special_2505|>",
2387
- "<|special_2506|>",
2388
- "<|special_2507|>",
2389
- "<|special_2508|>",
2390
- "<|special_2509|>",
2391
- "<|special_2510|>",
2392
- "<|special_2511|>",
2393
- "<|special_2512|>",
2394
- "<|special_2513|>",
2395
- "<|special_2514|>",
2396
- "<|special_2515|>",
2397
- "<|special_2516|>",
2398
- "<|special_2517|>",
2399
- "<|special_2518|>",
2400
- "<|special_2519|>",
2401
- "<|special_2520|>",
2402
- "<|special_2521|>",
2403
- "<|special_2522|>",
2404
- "<|special_2523|>",
2405
- "<|special_2524|>",
2406
- "<|special_2525|>",
2407
- "<|special_2526|>",
2408
- "<|special_2527|>",
2409
- "<|special_2528|>",
2410
- "<|special_2529|>",
2411
- "<|special_2530|>",
2412
- "<|special_2531|>",
2413
- "<|special_2532|>",
2414
- "<|special_2533|>",
2415
- "<|special_2534|>",
2416
- "<|special_2535|>",
2417
- "<|special_2536|>",
2418
- "<|special_2537|>",
2419
- "<|special_2538|>",
2420
- "<|special_2539|>",
2421
- "<|special_2540|>",
2422
- "<|special_2541|>",
2423
- "<|special_2542|>",
2424
- "<|special_2543|>",
2425
- "<|special_2544|>",
2426
- "<|special_2545|>",
2427
- "<|special_2546|>",
2428
- "<|special_2547|>",
2429
- "<|special_2548|>",
2430
- "<|special_2549|>",
2431
- "<|special_2550|>",
2432
- "<|special_2551|>",
2433
- "<|special_2552|>",
2434
- "<|special_2553|>",
2435
- "<|special_2554|>",
2436
- "<|special_2555|>",
2437
- "<|special_2556|>",
2438
- "<|special_2557|>",
2439
- "<|special_2558|>",
2440
- "<|special_2559|>",
2441
- "<|special_2560|>",
2442
- "<|special_2561|>",
2443
- "<|special_2562|>",
2444
- "<|special_2563|>",
2445
- "<|special_2564|>",
2446
- "<|special_2565|>",
2447
- "<|special_2566|>",
2448
- "<|special_2567|>",
2449
- "<|special_2568|>",
2450
- "<|special_2569|>",
2451
- "<|special_2570|>",
2452
- "<|special_2571|>",
2453
- "<|special_2572|>",
2454
- "<|special_2573|>",
2455
- "<|special_2574|>",
2456
- "<|special_2575|>",
2457
- "<|special_2576|>",
2458
- "<|special_2577|>",
2459
- "<|special_2578|>",
2460
- "<|special_2579|>",
2461
- "<|special_2580|>",
2462
- "<|special_2581|>",
2463
- "<|special_2582|>",
2464
- "<|special_2583|>",
2465
- "<|special_2584|>",
2466
- "<|special_2585|>",
2467
- "<|special_2586|>",
2468
- "<|special_2587|>",
2469
- "<|special_2588|>",
2470
- "<|special_2589|>",
2471
- "<|special_2590|>",
2472
- "<|special_2591|>",
2473
- "<|special_2592|>",
2474
- "<|special_2593|>",
2475
- "<|special_2594|>",
2476
- "<|special_2595|>",
2477
- "<|special_2596|>",
2478
- "<|special_2597|>",
2479
- "<|special_2598|>",
2480
- "<|special_2599|>",
2481
- "<|special_2600|>",
2482
- "<|special_2601|>",
2483
- "<|special_2602|>",
2484
- "<|special_2603|>",
2485
- "<|special_2604|>",
2486
- "<|special_2605|>",
2487
- "<|special_2606|>",
2488
- "<|special_2607|>",
2489
- "<|special_2608|>",
2490
- "<|special_2609|>",
2491
- "<|special_2610|>",
2492
- "<|special_2611|>",
2493
- "<|special_2612|>",
2494
- "<|special_2613|>",
2495
- "<|special_2614|>",
2496
- "<|special_2615|>",
2497
- "<|special_2616|>",
2498
- "<|special_2617|>",
2499
- "<|special_2618|>",
2500
- "<|special_2619|>",
2501
- "<|special_2620|>",
2502
- "<|special_2621|>",
2503
- "<|special_2622|>",
2504
- "<|special_2623|>",
2505
- "<|special_2624|>",
2506
- "<|special_2625|>",
2507
- "<|special_2626|>",
2508
- "<|special_2627|>",
2509
- "<|special_2628|>",
2510
- "<|special_2629|>",
2511
- "<|special_2630|>",
2512
- "<|special_2631|>",
2513
- "<|special_2632|>",
2514
- "<|special_2633|>",
2515
- "<|special_2634|>",
2516
- "<|special_2635|>",
2517
- "<|special_2636|>",
2518
- "<|special_2637|>",
2519
- "<|special_2638|>",
2520
- "<|special_2639|>",
2521
- "<|special_2640|>",
2522
- "<|special_2641|>",
2523
- "<|special_2642|>",
2524
- "<|special_2643|>",
2525
- "<|special_2644|>",
2526
- "<|special_2645|>",
2527
- "<|special_2646|>",
2528
- "<|special_2647|>",
2529
- "<|special_2648|>",
2530
- "<|special_2649|>",
2531
- "<|special_2650|>",
2532
- "<|special_2651|>",
2533
- "<|special_2652|>",
2534
- "<|special_2653|>",
2535
- "<|special_2654|>",
2536
- "<|special_2655|>",
2537
- "<|special_2656|>",
2538
- "<|special_2657|>",
2539
- "<|special_2658|>",
2540
- "<|special_2659|>",
2541
- "<|special_2660|>",
2542
- "<|special_2661|>",
2543
- "<|special_2662|>",
2544
- "<|special_2663|>",
2545
- "<|special_2664|>",
2546
- "<|special_2665|>",
2547
- "<|special_2666|>",
2548
- "<|special_2667|>",
2549
- "<|special_2668|>",
2550
- "<|special_2669|>",
2551
- "<|special_2670|>",
2552
- "<|special_2671|>",
2553
- "<|special_2672|>",
2554
- "<|special_2673|>",
2555
- "<|special_2674|>",
2556
- "<|special_2675|>",
2557
- "<|special_2676|>",
2558
- "<|special_2677|>",
2559
- "<|special_2678|>",
2560
- "<|special_2679|>",
2561
- "<|special_2680|>",
2562
- "<|special_2681|>",
2563
- "<|special_2682|>",
2564
- "<|special_2683|>",
2565
- "<|special_2684|>",
2566
- "<|special_2685|>",
2567
- "<|special_2686|>",
2568
- "<|special_2687|>",
2569
- "<|special_2688|>",
2570
- "<|special_2689|>",
2571
- "<|special_2690|>",
2572
- "<|special_2691|>",
2573
- "<|special_2692|>",
2574
- "<|special_2693|>",
2575
- "<|special_2694|>",
2576
- "<|special_2695|>",
2577
- "<|special_2696|>",
2578
- "<|special_2697|>",
2579
- "<|special_2698|>",
2580
- "<|special_2699|>",
2581
- "<|special_2700|>",
2582
- "<|special_2701|>",
2583
- "<|special_2702|>",
2584
- "<|special_2703|>",
2585
- "<|special_2704|>",
2586
- "<|special_2705|>",
2587
- "<|special_2706|>",
2588
- "<|special_2707|>",
2589
- "<|special_2708|>",
2590
- "<|special_2709|>",
2591
- "<|special_2710|>",
2592
- "<|special_2711|>",
2593
- "<|special_2712|>",
2594
- "<|special_2713|>",
2595
- "<|special_2714|>",
2596
- "<|special_2715|>",
2597
- "<|special_2716|>",
2598
- "<|special_2717|>",
2599
- "<|special_2718|>",
2600
- "<|special_2719|>",
2601
- "<|special_2720|>",
2602
- "<|special_2721|>",
2603
- "<|special_2722|>",
2604
- "<|special_2723|>",
2605
- "<|special_2724|>",
2606
- "<|special_2725|>",
2607
- "<|special_2726|>",
2608
- "<|special_2727|>",
2609
- "<|special_2728|>",
2610
- "<|special_2729|>",
2611
- "<|special_2730|>",
2612
- "<|special_2731|>",
2613
- "<|special_2732|>",
2614
- "<|special_2733|>",
2615
- "<|special_2734|>",
2616
- "<|special_2735|>",
2617
- "<|special_2736|>",
2618
- "<|special_2737|>",
2619
- "<|special_2738|>",
2620
- "<|special_2739|>",
2621
- "<|special_2740|>",
2622
- "<|special_2741|>",
2623
- "<|special_2742|>",
2624
- "<|special_2743|>",
2625
- "<|special_2744|>",
2626
- "<|special_2745|>",
2627
- "<|special_2746|>",
2628
- "<|special_2747|>",
2629
- "<|special_2748|>",
2630
- "<|special_2749|>",
2631
- "<|special_2750|>",
2632
- "<|special_2751|>",
2633
- "<|special_2752|>",
2634
- "<|special_2753|>",
2635
- "<|special_2754|>",
2636
- "<|special_2755|>",
2637
- "<|special_2756|>",
2638
- "<|special_2757|>",
2639
- "<|special_2758|>",
2640
- "<|special_2759|>",
2641
- "<|special_2760|>",
2642
- "<|special_2761|>",
2643
- "<|special_2762|>",
2644
- "<|special_2763|>",
2645
- "<|special_2764|>",
2646
- "<|special_2765|>",
2647
- "<|special_2766|>",
2648
- "<|special_2767|>",
2649
- "<|special_2768|>",
2650
- "<|special_2769|>",
2651
- "<|special_2770|>",
2652
- "<|special_2771|>",
2653
- "<|special_2772|>",
2654
- "<|special_2773|>",
2655
- "<|special_2774|>",
2656
- "<|special_2775|>",
2657
- "<|special_2776|>",
2658
- "<|special_2777|>",
2659
- "<|special_2778|>",
2660
- "<|special_2779|>",
2661
- "<|special_2780|>",
2662
- "<|special_2781|>",
2663
- "<|special_2782|>",
2664
- "<|special_2783|>",
2665
- "<|special_2784|>",
2666
- "<|special_2785|>",
2667
- "<|special_2786|>",
2668
- "<|special_2787|>",
2669
- "<|special_2788|>",
2670
- "<|special_2789|>",
2671
- "<|special_2790|>",
2672
- "<|special_2791|>",
2673
- "<|special_2792|>",
2674
- "<|special_2793|>",
2675
- "<|special_2794|>",
2676
- "<|special_2795|>",
2677
- "<|special_2796|>",
2678
- "<|special_2797|>",
2679
- "<|special_2798|>",
2680
- "<|special_2799|>",
2681
- "<|special_2800|>",
2682
- "<|special_2801|>",
2683
- "<|special_2802|>",
2684
- "<|special_2803|>",
2685
- "<|special_2804|>",
2686
- "<|special_2805|>",
2687
- "<|special_2806|>",
2688
- "<|special_2807|>",
2689
- "<|special_2808|>",
2690
- "<|special_2809|>",
2691
- "<|special_2810|>",
2692
- "<|special_2811|>",
2693
- "<|special_2812|>",
2694
- "<|special_2813|>",
2695
- "<|special_2814|>",
2696
- "<|special_2815|>",
2697
- "<|special_2816|>",
2698
- "<|special_2817|>",
2699
- "<|special_2818|>",
2700
- "<|special_2819|>",
2701
- "<|special_2820|>",
2702
- "<|special_2821|>",
2703
- "<|special_2822|>",
2704
- "<|special_2823|>",
2705
- "<|special_2824|>",
2706
- "<|special_2825|>",
2707
- "<|special_2826|>",
2708
- "<|special_2827|>",
2709
- "<|special_2828|>",
2710
- "<|special_2829|>",
2711
- "<|special_2830|>",
2712
- "<|special_2831|>",
2713
- "<|special_2832|>",
2714
- "<|special_2833|>",
2715
- "<|special_2834|>",
2716
- "<|special_2835|>",
2717
- "<|special_2836|>",
2718
- "<|special_2837|>",
2719
- "<|special_2838|>",
2720
- "<|special_2839|>",
2721
- "<|special_2840|>",
2722
- "<|special_2841|>",
2723
- "<|special_2842|>",
2724
- "<|special_2843|>",
2725
- "<|special_2844|>",
2726
- "<|special_2845|>",
2727
- "<|special_2846|>",
2728
- "<|special_2847|>",
2729
- "<|special_2848|>",
2730
- "<|special_2849|>",
2731
- "<|special_2850|>",
2732
- "<|special_2851|>",
2733
- "<|special_2852|>",
2734
- "<|special_2853|>",
2735
- "<|special_2854|>",
2736
- "<|special_2855|>",
2737
- "<|special_2856|>",
2738
- "<|special_2857|>",
2739
- "<|special_2858|>",
2740
- "<|special_2859|>",
2741
- "<|special_2860|>",
2742
- "<|special_2861|>",
2743
- "<|special_2862|>",
2744
- "<|special_2863|>",
2745
- "<|special_2864|>",
2746
- "<|special_2865|>",
2747
- "<|special_2866|>",
2748
- "<|special_2867|>",
2749
- "<|special_2868|>",
2750
- "<|special_2869|>",
2751
- "<|special_2870|>",
2752
- "<|special_2871|>",
2753
- "<|special_2872|>",
2754
- "<|special_2873|>",
2755
- "<|special_2874|>",
2756
- "<|special_2875|>",
2757
- "<|special_2876|>",
2758
- "<|special_2877|>",
2759
- "<|special_2878|>",
2760
- "<|special_2879|>",
2761
- "<|special_2880|>",
2762
- "<|special_2881|>",
2763
- "<|special_2882|>",
2764
- "<|special_2883|>",
2765
- "<|special_2884|>",
2766
- "<|special_2885|>",
2767
- "<|special_2886|>",
2768
- "<|special_2887|>",
2769
- "<|special_2888|>",
2770
- "<|special_2889|>",
2771
- "<|special_2890|>",
2772
- "<|special_2891|>",
2773
- "<|special_2892|>",
2774
- "<|special_2893|>",
2775
- "<|special_2894|>",
2776
- "<|special_2895|>",
2777
- "<|special_2896|>",
2778
- "<|special_2897|>",
2779
- "<|special_2898|>",
2780
- "<|special_2899|>",
2781
- "<|special_2900|>",
2782
- "<|special_2901|>",
2783
- "<|special_2902|>",
2784
- "<|special_2903|>",
2785
- "<|special_2904|>",
2786
- "<|special_2905|>",
2787
- "<|special_2906|>",
2788
- "<|special_2907|>",
2789
- "<|special_2908|>",
2790
- "<|special_2909|>",
2791
- "<|special_2910|>",
2792
- "<|special_2911|>",
2793
- "<|special_2912|>",
2794
- "<|special_2913|>",
2795
- "<|special_2914|>",
2796
- "<|special_2915|>",
2797
- "<|special_2916|>",
2798
- "<|special_2917|>",
2799
- "<|special_2918|>",
2800
- "<|special_2919|>",
2801
- "<|special_2920|>",
2802
- "<|special_2921|>",
2803
- "<|special_2922|>",
2804
- "<|special_2923|>",
2805
- "<|special_2924|>",
2806
- "<|special_2925|>",
2807
- "<|special_2926|>",
2808
- "<|special_2927|>",
2809
- "<|special_2928|>",
2810
- "<|special_2929|>",
2811
- "<|special_2930|>",
2812
- "<|special_2931|>",
2813
- "<|special_2932|>",
2814
- "<|special_2933|>",
2815
- "<|special_2934|>",
2816
- "<|special_2935|>",
2817
- "<|special_2936|>",
2818
- "<|special_2937|>",
2819
- "<|special_2938|>",
2820
- "<|special_2939|>",
2821
- "<|special_2940|>",
2822
- "<|special_2941|>",
2823
- "<|special_2942|>",
2824
- "<|special_2943|>",
2825
- "<|special_2944|>",
2826
- "<|special_2945|>",
2827
- "<|special_2946|>",
2828
- "<|special_2947|>",
2829
- "<|special_2948|>",
2830
- "<|special_2949|>",
2831
- "<|special_2950|>",
2832
- "<|special_2951|>",
2833
- "<|special_2952|>",
2834
- "<|special_2953|>",
2835
- "<|special_2954|>",
2836
- "<|special_2955|>",
2837
- "<|special_2956|>",
2838
- "<|special_2957|>",
2839
- "<|special_2958|>",
2840
- "<|special_2959|>",
2841
- "<|special_2960|>",
2842
- "<|special_2961|>",
2843
- "<|special_2962|>",
2844
- "<|special_2963|>",
2845
- "<|special_2964|>",
2846
- "<|special_2965|>",
2847
- "<|special_2966|>",
2848
- "<|special_2967|>",
2849
- "<|special_2968|>",
2850
- "<|special_2969|>",
2851
- "<|special_2970|>",
2852
- "<|special_2971|>",
2853
- "<|special_2972|>",
2854
- "<|special_2973|>",
2855
- "<|special_2974|>",
2856
- "<|special_2975|>",
2857
- "<|special_2976|>",
2858
- "<|special_2977|>",
2859
- "<|special_2978|>",
2860
- "<|special_2979|>",
2861
- "<|special_2980|>",
2862
- "<|special_2981|>",
2863
- "<|special_2982|>",
2864
- "<|special_2983|>",
2865
- "<|special_2984|>",
2866
- "<|special_2985|>",
2867
- "<|special_2986|>",
2868
- "<|special_2987|>",
2869
- "<|special_2988|>",
2870
- "<|special_2989|>",
2871
- "<|special_2990|>",
2872
- "<|special_2991|>",
2873
- "<|special_2992|>",
2874
- "<|special_2993|>",
2875
- "<|special_2994|>",
2876
- "<|special_2995|>",
2877
- "<|special_2996|>",
2878
- "<|special_2997|>",
2879
- "<|special_2998|>",
2880
- "<|special_2999|>",
2881
- "<|special_3000|>",
2882
- "<|special_3001|>",
2883
- "<|special_3002|>",
2884
- "<|special_3003|>",
2885
- "<|special_3004|>",
2886
- "<|special_3005|>",
2887
- "<|special_3006|>",
2888
- "<|special_3007|>",
2889
- "<|special_3008|>",
2890
- "<|special_3009|>",
2891
- "<|special_3010|>",
2892
- "<|special_3011|>",
2893
- "<|special_3012|>",
2894
- "<|special_3013|>",
2895
- "<|special_3014|>",
2896
- "<|special_3015|>",
2897
- "<|special_3016|>",
2898
- "<|special_3017|>",
2899
- "<|special_3018|>",
2900
- "<|special_3019|>",
2901
- "<|special_3020|>",
2902
- "<|special_3021|>",
2903
- "<|special_3022|>",
2904
- "<|special_3023|>",
2905
- "<|special_3024|>",
2906
- "<|special_3025|>",
2907
- "<|special_3026|>",
2908
- "<|special_3027|>",
2909
- "<|special_3028|>",
2910
- "<|special_3029|>",
2911
- "<|special_3030|>",
2912
- "<|special_3031|>",
2913
- "<|special_3032|>",
2914
- "<|special_3033|>",
2915
- "<|special_3034|>",
2916
- "<|special_3035|>",
2917
- "<|special_3036|>",
2918
- "<|special_3037|>",
2919
- "<|special_3038|>",
2920
- "<|special_3039|>",
2921
- "<|special_3040|>",
2922
- "<|special_3041|>",
2923
- "<|special_3042|>",
2924
- "<|special_3043|>",
2925
- "<|special_3044|>",
2926
- "<|special_3045|>",
2927
- "<|special_3046|>",
2928
- "<|special_3047|>",
2929
- "<|special_3048|>",
2930
- "<|special_3049|>",
2931
- "<|special_3050|>",
2932
- "<|special_3051|>",
2933
- "<|special_3052|>",
2934
- "<|special_3053|>",
2935
- "<|special_3054|>",
2936
- "<|special_3055|>",
2937
- "<|special_3056|>",
2938
- "<|special_3057|>",
2939
- "<|special_3058|>",
2940
- "<|special_3059|>",
2941
- "<|special_3060|>",
2942
- "<|special_3061|>",
2943
- "<|special_3062|>",
2944
- "<|special_3063|>",
2945
- "<|special_3064|>",
2946
- "<|special_3065|>",
2947
- "<|special_3066|>",
2948
- "<|special_3067|>",
2949
- "<|special_3068|>",
2950
- "<|special_3069|>",
2951
- "<|special_3070|>",
2952
- "<|special_3071|>",
2953
- "<|special_3072|>",
2954
- "<|special_3073|>",
2955
- "<|special_3074|>",
2956
- "<|special_3075|>",
2957
- "<|special_3076|>",
2958
- "<|special_3077|>",
2959
- "<|special_3078|>",
2960
- "<|special_3079|>",
2961
- "<|special_3080|>",
2962
- "<|special_3081|>",
2963
- "<|special_3082|>",
2964
- "<|special_3083|>",
2965
- "<|special_3084|>",
2966
- "<|special_3085|>",
2967
- "<|special_3086|>",
2968
- "<|special_3087|>",
2969
- "<|special_3088|>",
2970
- "<|special_3089|>",
2971
- "<|special_3090|>",
2972
- "<|special_3091|>",
2973
- "<|special_3092|>",
2974
- "<|special_3093|>",
2975
- "<|special_3094|>",
2976
- "<|special_3095|>",
2977
- "<|special_3096|>",
2978
- "<|special_3097|>",
2979
- "<|special_3098|>",
2980
- "<|special_3099|>",
2981
- "<|special_3100|>",
2982
- "<|special_3101|>",
2983
- "<|special_3102|>",
2984
- "<|special_3103|>",
2985
- "<|special_3104|>",
2986
- "<|special_3105|>",
2987
- "<|special_3106|>",
2988
- "<|special_3107|>",
2989
- "<|special_3108|>",
2990
- "<|special_3109|>",
2991
- "<|special_3110|>",
2992
- "<|special_3111|>",
2993
- "<|special_3112|>",
2994
- "<|special_3113|>",
2995
- "<|special_3114|>",
2996
- "<|special_3115|>",
2997
- "<|special_3116|>",
2998
- "<|special_3117|>",
2999
- "<|special_3118|>",
3000
- "<|special_3119|>",
3001
- "<|special_3120|>",
3002
- "<|special_3121|>",
3003
- "<|special_3122|>",
3004
- "<|special_3123|>",
3005
- "<|special_3124|>",
3006
- "<|special_3125|>",
3007
- "<|special_3126|>",
3008
- "<|special_3127|>",
3009
- "<|special_3128|>",
3010
- "<|special_3129|>",
3011
- "<|special_3130|>",
3012
- "<|special_3131|>",
3013
- "<|special_3132|>",
3014
- "<|special_3133|>",
3015
- "<|special_3134|>",
3016
- "<|special_3135|>",
3017
- "<|special_3136|>",
3018
- "<|special_3137|>",
3019
- "<|special_3138|>",
3020
- "<|special_3139|>",
3021
- "<|special_3140|>",
3022
- "<|special_3141|>",
3023
- "<|special_3142|>",
3024
- "<|special_3143|>",
3025
- "<|special_3144|>",
3026
- "<|special_3145|>",
3027
- "<|special_3146|>",
3028
- "<|special_3147|>",
3029
- "<|special_3148|>",
3030
- "<|special_3149|>",
3031
- "<|special_3150|>",
3032
- "<|special_3151|>",
3033
- "<|special_3152|>",
3034
- "<|special_3153|>",
3035
- "<|special_3154|>",
3036
- "<|special_3155|>",
3037
- "<|special_3156|>",
3038
- "<|special_3157|>",
3039
- "<|special_3158|>",
3040
- "<|special_3159|>",
3041
- "<|special_3160|>",
3042
- "<|special_3161|>",
3043
- "<|special_3162|>",
3044
- "<|special_3163|>",
3045
- "<|special_3164|>",
3046
- "<|special_3165|>",
3047
- "<|special_3166|>",
3048
- "<|special_3167|>",
3049
- "<|special_3168|>",
3050
- "<|special_3169|>",
3051
- "<|special_3170|>",
3052
- "<|special_3171|>",
3053
- "<|special_3172|>",
3054
- "<|special_3173|>",
3055
- "<|special_3174|>",
3056
- "<|special_3175|>",
3057
- "<|special_3176|>",
3058
- "<|special_3177|>",
3059
- "<|special_3178|>",
3060
- "<|special_3179|>",
3061
- "<|special_3180|>",
3062
- "<|special_3181|>",
3063
- "<|special_3182|>",
3064
- "<|special_3183|>",
3065
- "<|special_3184|>",
3066
- "<|special_3185|>",
3067
- "<|special_3186|>",
3068
- "<|special_3187|>",
3069
- "<|special_3188|>",
3070
- "<|special_3189|>",
3071
- "<|special_3190|>",
3072
- "<|special_3191|>",
3073
- "<|special_3192|>",
3074
- "<|special_3193|>",
3075
- "<|special_3194|>",
3076
- "<|special_3195|>",
3077
- "<|special_3196|>",
3078
- "<|special_3197|>",
3079
- "<|special_3198|>",
3080
- "<|special_3199|>",
3081
- "<|special_3200|>",
3082
- "<|special_3201|>",
3083
- "<|special_3202|>",
3084
- "<|special_3203|>",
3085
- "<|special_3204|>",
3086
- "<|special_3205|>",
3087
- "<|special_3206|>",
3088
- "<|special_3207|>",
3089
- "<|special_3208|>",
3090
- "<|special_3209|>",
3091
- "<|special_3210|>",
3092
- "<|special_3211|>",
3093
- "<|special_3212|>",
3094
- "<|special_3213|>",
3095
- "<|special_3214|>",
3096
- "<|special_3215|>",
3097
- "<|special_3216|>",
3098
- "<|special_3217|>",
3099
- "<|special_3218|>",
3100
- "<|special_3219|>",
3101
- "<|special_3220|>",
3102
- "<|special_3221|>",
3103
- "<|special_3222|>",
3104
- "<|special_3223|>",
3105
- "<|special_3224|>",
3106
- "<|special_3225|>",
3107
- "<|special_3226|>",
3108
- "<|special_3227|>",
3109
- "<|special_3228|>",
3110
- "<|special_3229|>",
3111
- "<|special_3230|>",
3112
- "<|special_3231|>",
3113
- "<|special_3232|>",
3114
- "<|special_3233|>",
3115
- "<|special_3234|>",
3116
- "<|special_3235|>",
3117
- "<|special_3236|>",
3118
- "<|special_3237|>",
3119
- "<|special_3238|>",
3120
- "<|special_3239|>",
3121
- "<|special_3240|>",
3122
- "<|special_3241|>",
3123
- "<|special_3242|>",
3124
- "<|special_3243|>",
3125
- "<|special_3244|>",
3126
- "<|special_3245|>",
3127
- "<|special_3246|>",
3128
- "<|special_3247|>",
3129
- "<|special_3248|>",
3130
- "<|special_3249|>",
3131
- "<|special_3250|>",
3132
- "<|special_3251|>",
3133
- "<|special_3252|>",
3134
- "<|special_3253|>",
3135
- "<|special_3254|>",
3136
- "<|special_3255|>",
3137
- "<|special_3256|>",
3138
- "<|special_3257|>",
3139
- "<|special_3258|>",
3140
- "<|special_3259|>",
3141
- "<|special_3260|>",
3142
- "<|special_3261|>",
3143
- "<|special_3262|>",
3144
- "<|special_3263|>",
3145
- "<|special_3264|>",
3146
- "<|special_3265|>",
3147
- "<|special_3266|>",
3148
- "<|special_3267|>",
3149
- "<|special_3268|>",
3150
- "<|special_3269|>",
3151
- "<|special_3270|>",
3152
- "<|special_3271|>",
3153
- "<|special_3272|>",
3154
- "<|special_3273|>",
3155
- "<|special_3274|>",
3156
- "<|special_3275|>",
3157
- "<|special_3276|>",
3158
- "<|special_3277|>",
3159
- "<|special_3278|>",
3160
- "<|special_3279|>",
3161
- "<|special_3280|>",
3162
- "<|special_3281|>",
3163
- "<|special_3282|>",
3164
- "<|special_3283|>",
3165
- "<|special_3284|>",
3166
- "<|special_3285|>",
3167
- "<|special_3286|>",
3168
- "<|special_3287|>",
3169
- "<|special_3288|>",
3170
- "<|special_3289|>",
3171
- "<|special_3290|>",
3172
- "<|special_3291|>",
3173
- "<|special_3292|>",
3174
- "<|special_3293|>",
3175
- "<|special_3294|>",
3176
- "<|special_3295|>",
3177
- "<|special_3296|>",
3178
- "<|special_3297|>",
3179
- "<|special_3298|>",
3180
- "<|special_3299|>",
3181
- "<|special_3300|>",
3182
- "<|special_3301|>",
3183
- "<|special_3302|>",
3184
- "<|special_3303|>",
3185
- "<|special_3304|>",
3186
- "<|special_3305|>",
3187
- "<|special_3306|>",
3188
- "<|special_3307|>",
3189
- "<|special_3308|>",
3190
- "<|special_3309|>",
3191
- "<|special_3310|>",
3192
- "<|special_3311|>",
3193
- "<|special_3312|>",
3194
- "<|special_3313|>",
3195
- "<|special_3314|>",
3196
- "<|special_3315|>",
3197
- "<|special_3316|>",
3198
- "<|special_3317|>",
3199
- "<|special_3318|>",
3200
- "<|special_3319|>",
3201
- "<|special_3320|>",
3202
- "<|special_3321|>",
3203
- "<|special_3322|>",
3204
- "<|special_3323|>",
3205
- "<|special_3324|>",
3206
- "<|special_3325|>",
3207
- "<|special_3326|>",
3208
- "<|special_3327|>",
3209
- "<|special_3328|>",
3210
- "<|special_3329|>",
3211
- "<|special_3330|>",
3212
- "<|special_3331|>",
3213
- "<|special_3332|>",
3214
- "<|special_3333|>",
3215
- "<|special_3334|>",
3216
- "<|special_3335|>",
3217
- "<|special_3336|>",
3218
- "<|special_3337|>",
3219
- "<|special_3338|>",
3220
- "<|special_3339|>",
3221
- "<|special_3340|>",
3222
- "<|special_3341|>",
3223
- "<|special_3342|>",
3224
- "<|special_3343|>",
3225
- "<|special_3344|>",
3226
- "<|special_3345|>",
3227
- "<|special_3346|>",
3228
- "<|special_3347|>",
3229
- "<|special_3348|>",
3230
- "<|special_3349|>",
3231
- "<|special_3350|>",
3232
- "<|special_3351|>",
3233
- "<|special_3352|>",
3234
- "<|special_3353|>",
3235
- "<|special_3354|>",
3236
- "<|special_3355|>",
3237
- "<|special_3356|>",
3238
- "<|special_3357|>",
3239
- "<|special_3358|>",
3240
- "<|special_3359|>",
3241
- "<|special_3360|>",
3242
- "<|special_3361|>",
3243
- "<|special_3362|>",
3244
- "<|special_3363|>",
3245
- "<|special_3364|>",
3246
- "<|special_3365|>",
3247
- "<|special_3366|>",
3248
- "<|special_3367|>",
3249
- "<|special_3368|>",
3250
- "<|special_3369|>",
3251
- "<|special_3370|>",
3252
- "<|special_3371|>",
3253
- "<|special_3372|>",
3254
- "<|special_3373|>",
3255
- "<|special_3374|>",
3256
- "<|special_3375|>",
3257
- "<|special_3376|>",
3258
- "<|special_3377|>",
3259
- "<|special_3378|>",
3260
- "<|special_3379|>",
3261
- "<|special_3380|>",
3262
- "<|special_3381|>",
3263
- "<|special_3382|>",
3264
- "<|special_3383|>",
3265
- "<|special_3384|>",
3266
- "<|special_3385|>",
3267
- "<|special_3386|>",
3268
- "<|special_3387|>",
3269
- "<|special_3388|>",
3270
- "<|special_3389|>",
3271
- "<|special_3390|>",
3272
- "<|special_3391|>",
3273
- "<|special_3392|>",
3274
- "<|special_3393|>",
3275
- "<|special_3394|>",
3276
- "<|special_3395|>",
3277
- "<|special_3396|>",
3278
- "<|special_3397|>",
3279
- "<|special_3398|>",
3280
- "<|special_3399|>",
3281
- "<|special_3400|>",
3282
- "<|special_3401|>",
3283
- "<|special_3402|>",
3284
- "<|special_3403|>",
3285
- "<|special_3404|>",
3286
- "<|special_3405|>",
3287
- "<|special_3406|>",
3288
- "<|special_3407|>",
3289
- "<|special_3408|>",
3290
- "<|special_3409|>",
3291
- "<|special_3410|>",
3292
- "<|special_3411|>",
3293
- "<|special_3412|>",
3294
- "<|special_3413|>",
3295
- "<|special_3414|>",
3296
- "<|special_3415|>",
3297
- "<|special_3416|>",
3298
- "<|special_3417|>",
3299
- "<|special_3418|>",
3300
- "<|special_3419|>",
3301
- "<|special_3420|>",
3302
- "<|special_3421|>",
3303
- "<|special_3422|>",
3304
- "<|special_3423|>",
3305
- "<|special_3424|>",
3306
- "<|special_3425|>",
3307
- "<|special_3426|>",
3308
- "<|special_3427|>",
3309
- "<|special_3428|>",
3310
- "<|special_3429|>",
3311
- "<|special_3430|>",
3312
- "<|special_3431|>",
3313
- "<|special_3432|>",
3314
- "<|special_3433|>",
3315
- "<|special_3434|>",
3316
- "<|special_3435|>",
3317
- "<|special_3436|>",
3318
- "<|special_3437|>",
3319
- "<|special_3438|>",
3320
- "<|special_3439|>",
3321
- "<|special_3440|>",
3322
- "<|special_3441|>",
3323
- "<|special_3442|>",
3324
- "<|special_3443|>",
3325
- "<|special_3444|>",
3326
- "<|special_3445|>",
3327
- "<|special_3446|>",
3328
- "<|special_3447|>",
3329
- "<|special_3448|>",
3330
- "<|special_3449|>",
3331
- "<|special_3450|>",
3332
- "<|special_3451|>",
3333
- "<|special_3452|>",
3334
- "<|special_3453|>",
3335
- "<|special_3454|>",
3336
- "<|special_3455|>",
3337
- "<|special_3456|>",
3338
- "<|special_3457|>",
3339
- "<|special_3458|>",
3340
- "<|special_3459|>",
3341
- "<|special_3460|>",
3342
- "<|special_3461|>",
3343
- "<|special_3462|>",
3344
- "<|special_3463|>",
3345
- "<|special_3464|>",
3346
- "<|special_3465|>",
3347
- "<|special_3466|>",
3348
- "<|special_3467|>",
3349
- "<|special_3468|>",
3350
- "<|special_3469|>",
3351
- "<|special_3470|>",
3352
- "<|special_3471|>",
3353
- "<|special_3472|>",
3354
- "<|special_3473|>",
3355
- "<|special_3474|>",
3356
- "<|special_3475|>",
3357
- "<|special_3476|>",
3358
- "<|special_3477|>",
3359
- "<|special_3478|>",
3360
- "<|special_3479|>",
3361
- "<|special_3480|>",
3362
- "<|special_3481|>",
3363
- "<|special_3482|>",
3364
- "<|special_3483|>",
3365
- "<|special_3484|>",
3366
- "<|special_3485|>",
3367
- "<|special_3486|>",
3368
- "<|special_3487|>",
3369
- "<|special_3488|>",
3370
- "<|special_3489|>",
3371
- "<|special_3490|>",
3372
- "<|special_3491|>",
3373
- "<|special_3492|>",
3374
- "<|special_3493|>",
3375
- "<|special_3494|>",
3376
- "<|special_3495|>",
3377
- "<|special_3496|>",
3378
- "<|special_3497|>",
3379
- "<|special_3498|>",
3380
- "<|special_3499|>",
3381
- "<|special_3500|>",
3382
- "<|special_3501|>",
3383
- "<|special_3502|>",
3384
- "<|special_3503|>",
3385
- "<|special_3504|>",
3386
- "<|special_3505|>",
3387
- "<|special_3506|>",
3388
- "<|special_3507|>",
3389
- "<|special_3508|>",
3390
- "<|special_3509|>",
3391
- "<|special_3510|>",
3392
- "<|special_3511|>",
3393
- "<|special_3512|>",
3394
- "<|special_3513|>",
3395
- "<|special_3514|>",
3396
- "<|special_3515|>",
3397
- "<|special_3516|>",
3398
- "<|special_3517|>",
3399
- "<|special_3518|>",
3400
- "<|special_3519|>",
3401
- "<|special_3520|>",
3402
- "<|special_3521|>",
3403
- "<|special_3522|>",
3404
- "<|special_3523|>",
3405
- "<|special_3524|>",
3406
- "<|special_3525|>",
3407
- "<|special_3526|>",
3408
- "<|special_3527|>",
3409
- "<|special_3528|>",
3410
- "<|special_3529|>",
3411
- "<|special_3530|>",
3412
- "<|special_3531|>",
3413
- "<|special_3532|>",
3414
- "<|special_3533|>",
3415
- "<|special_3534|>",
3416
- "<|special_3535|>",
3417
- "<|special_3536|>",
3418
- "<|special_3537|>",
3419
- "<|special_3538|>",
3420
- "<|special_3539|>",
3421
- "<|special_3540|>",
3422
- "<|special_3541|>",
3423
- "<|special_3542|>",
3424
- "<|special_3543|>",
3425
- "<|special_3544|>",
3426
- "<|special_3545|>",
3427
- "<|special_3546|>",
3428
- "<|special_3547|>",
3429
- "<|special_3548|>",
3430
- "<|special_3549|>",
3431
- "<|special_3550|>",
3432
- "<|special_3551|>",
3433
- "<|special_3552|>",
3434
- "<|special_3553|>",
3435
- "<|special_3554|>",
3436
- "<|special_3555|>",
3437
- "<|special_3556|>",
3438
- "<|special_3557|>",
3439
- "<|special_3558|>",
3440
- "<|special_3559|>",
3441
- "<|special_3560|>",
3442
- "<|special_3561|>",
3443
- "<|special_3562|>",
3444
- "<|special_3563|>",
3445
- "<|special_3564|>",
3446
- "<|special_3565|>",
3447
- "<|special_3566|>",
3448
- "<|special_3567|>",
3449
- "<|special_3568|>",
3450
- "<|special_3569|>",
3451
- "<|special_3570|>",
3452
- "<|special_3571|>",
3453
- "<|special_3572|>",
3454
- "<|special_3573|>",
3455
- "<|special_3574|>",
3456
- "<|special_3575|>",
3457
- "<|special_3576|>",
3458
- "<|special_3577|>",
3459
- "<|special_3578|>",
3460
- "<|special_3579|>",
3461
- "<|special_3580|>",
3462
- "<|special_3581|>",
3463
- "<|special_3582|>",
3464
- "<|special_3583|>",
3465
- "<|special_3584|>",
3466
- "<|special_3585|>",
3467
- "<|special_3586|>",
3468
- "<|special_3587|>",
3469
- "<|special_3588|>",
3470
- "<|special_3589|>",
3471
- "<|special_3590|>",
3472
- "<|special_3591|>",
3473
- "<|special_3592|>",
3474
- "<|special_3593|>",
3475
- "<|special_3594|>",
3476
- "<|special_3595|>",
3477
- "<|special_3596|>",
3478
- "<|special_3597|>",
3479
- "<|special_3598|>",
3480
- "<|special_3599|>",
3481
- "<|special_3600|>",
3482
- "<|special_3601|>",
3483
- "<|special_3602|>",
3484
- "<|special_3603|>",
3485
- "<|special_3604|>",
3486
- "<|special_3605|>",
3487
- "<|special_3606|>",
3488
- "<|special_3607|>",
3489
- "<|special_3608|>",
3490
- "<|special_3609|>",
3491
- "<|special_3610|>",
3492
- "<|special_3611|>",
3493
- "<|special_3612|>",
3494
- "<|special_3613|>",
3495
- "<|special_3614|>",
3496
- "<|special_3615|>",
3497
- "<|special_3616|>",
3498
- "<|special_3617|>",
3499
- "<|special_3618|>",
3500
- "<|special_3619|>",
3501
- "<|special_3620|>",
3502
- "<|special_3621|>",
3503
- "<|special_3622|>",
3504
- "<|special_3623|>",
3505
- "<|special_3624|>",
3506
- "<|special_3625|>",
3507
- "<|special_3626|>",
3508
- "<|special_3627|>",
3509
- "<|special_3628|>",
3510
- "<|special_3629|>",
3511
- "<|special_3630|>",
3512
- "<|special_3631|>",
3513
- "<|special_3632|>",
3514
- "<|special_3633|>",
3515
- "<|special_3634|>",
3516
- "<|special_3635|>",
3517
- "<|special_3636|>",
3518
- "<|special_3637|>",
3519
- "<|special_3638|>",
3520
- "<|special_3639|>",
3521
- "<|special_3640|>",
3522
- "<|special_3641|>",
3523
- "<|special_3642|>",
3524
- "<|special_3643|>",
3525
- "<|special_3644|>",
3526
- "<|special_3645|>",
3527
- "<|special_3646|>",
3528
- "<|special_3647|>",
3529
- "<|special_3648|>",
3530
- "<|special_3649|>",
3531
- "<|special_3650|>",
3532
- "<|special_3651|>",
3533
- "<|special_3652|>",
3534
- "<|special_3653|>",
3535
- "<|special_3654|>",
3536
- "<|special_3655|>",
3537
- "<|special_3656|>",
3538
- "<|special_3657|>",
3539
- "<|special_3658|>",
3540
- "<|special_3659|>",
3541
- "<|special_3660|>",
3542
- "<|special_3661|>",
3543
- "<|special_3662|>",
3544
- "<|special_3663|>",
3545
- "<|special_3664|>",
3546
- "<|special_3665|>",
3547
- "<|special_3666|>",
3548
- "<|special_3667|>",
3549
- "<|special_3668|>",
3550
- "<|special_3669|>",
3551
- "<|special_3670|>",
3552
- "<|special_3671|>",
3553
- "<|special_3672|>",
3554
- "<|special_3673|>",
3555
- "<|special_3674|>",
3556
- "<|special_3675|>",
3557
- "<|special_3676|>",
3558
- "<|special_3677|>",
3559
- "<|special_3678|>",
3560
- "<|special_3679|>",
3561
- "<|special_3680|>",
3562
- "<|special_3681|>",
3563
- "<|special_3682|>",
3564
- "<|special_3683|>",
3565
- "<|special_3684|>",
3566
- "<|special_3685|>",
3567
- "<|special_3686|>",
3568
- "<|special_3687|>",
3569
- "<|special_3688|>",
3570
- "<|special_3689|>",
3571
- "<|special_3690|>",
3572
- "<|special_3691|>",
3573
- "<|special_3692|>",
3574
- "<|special_3693|>",
3575
- "<|special_3694|>",
3576
- "<|special_3695|>",
3577
- "<|special_3696|>",
3578
- "<|special_3697|>",
3579
- "<|special_3698|>",
3580
- "<|special_3699|>",
3581
- "<|special_3700|>",
3582
- "<|special_3701|>",
3583
- "<|special_3702|>",
3584
- "<|special_3703|>",
3585
- "<|special_3704|>",
3586
- "<|special_3705|>",
3587
- "<|special_3706|>",
3588
- "<|special_3707|>",
3589
- "<|special_3708|>",
3590
- "<|special_3709|>",
3591
- "<|special_3710|>",
3592
- "<|special_3711|>",
3593
- "<|special_3712|>",
3594
- "<|special_3713|>",
3595
- "<|special_3714|>",
3596
- "<|special_3715|>",
3597
- "<|special_3716|>",
3598
- "<|special_3717|>",
3599
- "<|special_3718|>",
3600
- "<|special_3719|>",
3601
- "<|special_3720|>",
3602
- "<|special_3721|>",
3603
- "<|special_3722|>",
3604
- "<|special_3723|>",
3605
- "<|special_3724|>",
3606
- "<|special_3725|>",
3607
- "<|special_3726|>",
3608
- "<|special_3727|>",
3609
- "<|special_3728|>",
3610
- "<|special_3729|>",
3611
- "<|special_3730|>",
3612
- "<|special_3731|>",
3613
- "<|special_3732|>",
3614
- "<|special_3733|>",
3615
- "<|special_3734|>",
3616
- "<|special_3735|>",
3617
- "<|special_3736|>",
3618
- "<|special_3737|>",
3619
- "<|special_3738|>",
3620
- "<|special_3739|>",
3621
- "<|special_3740|>",
3622
- "<|special_3741|>",
3623
- "<|special_3742|>",
3624
- "<|special_3743|>",
3625
- "<|special_3744|>",
3626
- "<|special_3745|>",
3627
- "<|special_3746|>",
3628
- "<|special_3747|>",
3629
- "<|special_3748|>",
3630
- "<|special_3749|>",
3631
- "<|special_3750|>",
3632
- "<|special_3751|>",
3633
- "<|special_3752|>",
3634
- "<|special_3753|>",
3635
- "<|special_3754|>",
3636
- "<|special_3755|>",
3637
- "<|special_3756|>",
3638
- "<|special_3757|>",
3639
- "<|special_3758|>",
3640
- "<|special_3759|>",
3641
- "<|special_3760|>",
3642
- "<|special_3761|>",
3643
- "<|special_3762|>",
3644
- "<|special_3763|>",
3645
- "<|special_3764|>",
3646
- "<|special_3765|>",
3647
- "<|special_3766|>",
3648
- "<|special_3767|>",
3649
- "<|special_3768|>",
3650
- "<|special_3769|>",
3651
- "<|special_3770|>",
3652
- "<|special_3771|>",
3653
- "<|special_3772|>",
3654
- "<|special_3773|>",
3655
- "<|special_3774|>",
3656
- "<|special_3775|>",
3657
- "<|special_3776|>",
3658
- "<|special_3777|>",
3659
- "<|special_3778|>",
3660
- "<|special_3779|>",
3661
- "<|special_3780|>",
3662
- "<|special_3781|>",
3663
- "<|special_3782|>",
3664
- "<|special_3783|>",
3665
- "<|special_3784|>",
3666
- "<|special_3785|>",
3667
- "<|special_3786|>",
3668
- "<|special_3787|>",
3669
- "<|special_3788|>",
3670
- "<|special_3789|>",
3671
- "<|special_3790|>",
3672
- "<|special_3791|>",
3673
- "<|special_3792|>",
3674
- "<|special_3793|>",
3675
- "<|special_3794|>",
3676
- "<|special_3795|>",
3677
- "<|special_3796|>",
3678
- "<|special_3797|>",
3679
- "<|special_3798|>",
3680
- "<|special_3799|>",
3681
- "<|special_3800|>",
3682
- "<|special_3801|>",
3683
- "<|special_3802|>",
3684
- "<|special_3803|>",
3685
- "<|special_3804|>",
3686
- "<|special_3805|>",
3687
- "<|special_3806|>",
3688
- "<|special_3807|>",
3689
- "<|special_3808|>",
3690
- "<|special_3809|>",
3691
- "<|special_3810|>",
3692
- "<|special_3811|>",
3693
- "<|special_3812|>",
3694
- "<|special_3813|>",
3695
- "<|special_3814|>",
3696
- "<|special_3815|>",
3697
- "<|special_3816|>",
3698
- "<|special_3817|>",
3699
- "<|special_3818|>",
3700
- "<|special_3819|>",
3701
- "<|special_3820|>",
3702
- "<|special_3821|>",
3703
- "<|special_3822|>",
3704
- "<|special_3823|>",
3705
- "<|special_3824|>",
3706
- "<|special_3825|>",
3707
- "<|special_3826|>",
3708
- "<|special_3827|>",
3709
- "<|special_3828|>",
3710
- "<|special_3829|>",
3711
- "<|special_3830|>",
3712
- "<|special_3831|>",
3713
- "<|special_3832|>",
3714
- "<|special_3833|>",
3715
- "<|special_3834|>",
3716
- "<|special_3835|>",
3717
- "<|special_3836|>",
3718
- "<|special_3837|>",
3719
- "<|special_3838|>",
3720
- "<|special_3839|>",
3721
- "<|special_3840|>",
3722
- "<|special_3841|>",
3723
- "<|special_3842|>",
3724
- "<|special_3843|>",
3725
- "<|special_3844|>",
3726
- "<|special_3845|>",
3727
- "<|special_3846|>",
3728
- "<|special_3847|>",
3729
- "<|special_3848|>",
3730
- "<|special_3849|>",
3731
- "<|special_3850|>",
3732
- "<|special_3851|>",
3733
- "<|special_3852|>",
3734
- "<|special_3853|>",
3735
- "<|special_3854|>",
3736
- "<|special_3855|>",
3737
- "<|special_3856|>",
3738
- "<|special_3857|>",
3739
- "<|special_3858|>",
3740
- "<|special_3859|>",
3741
- "<|special_3860|>",
3742
- "<|special_3861|>",
3743
- "<|special_3862|>",
3744
- "<|special_3863|>",
3745
- "<|special_3864|>",
3746
- "<|special_3865|>",
3747
- "<|special_3866|>",
3748
- "<|special_3867|>",
3749
- "<|special_3868|>",
3750
- "<|special_3869|>",
3751
- "<|special_3870|>",
3752
- "<|special_3871|>",
3753
- "<|special_3872|>",
3754
- "<|special_3873|>",
3755
- "<|special_3874|>",
3756
- "<|special_3875|>",
3757
- "<|special_3876|>",
3758
- "<|special_3877|>",
3759
- "<|special_3878|>",
3760
- "<|special_3879|>",
3761
- "<|special_3880|>",
3762
- "<|special_3881|>",
3763
- "<|special_3882|>",
3764
- "<|special_3883|>",
3765
- "<|special_3884|>",
3766
- "<|special_3885|>",
3767
- "<|special_3886|>",
3768
- "<|special_3887|>",
3769
- "<|special_3888|>",
3770
- "<|special_3889|>",
3771
- "<|special_3890|>",
3772
- "<|special_3891|>",
3773
- "<|special_3892|>",
3774
- "<|special_3893|>",
3775
- "<|special_3894|>",
3776
- "<|special_3895|>",
3777
- "<|special_3896|>",
3778
- "<|special_3897|>",
3779
- "<|special_3898|>",
3780
- "<|special_3899|>",
3781
- "<|special_3900|>",
3782
- "<|special_3901|>",
3783
- "<|special_3902|>",
3784
- "<|special_3903|>",
3785
- "<|special_3904|>",
3786
- "<|special_3905|>",
3787
- "<|special_3906|>",
3788
- "<|special_3907|>",
3789
- "<|special_3908|>",
3790
- "<|special_3909|>",
3791
- "<|special_3910|>",
3792
- "<|special_3911|>",
3793
- "<|special_3912|>",
3794
- "<|special_3913|>",
3795
- "<|special_3914|>",
3796
- "<|special_3915|>",
3797
- "<|special_3916|>",
3798
- "<|special_3917|>",
3799
- "<|special_3918|>",
3800
- "<|special_3919|>",
3801
- "<|special_3920|>",
3802
- "<|special_3921|>",
3803
- "<|special_3922|>",
3804
- "<|special_3923|>",
3805
- "<|special_3924|>",
3806
- "<|special_3925|>",
3807
- "<|special_3926|>",
3808
- "<|special_3927|>",
3809
- "<|special_3928|>",
3810
- "<|special_3929|>",
3811
- "<|special_3930|>",
3812
- "<|special_3931|>",
3813
- "<|special_3932|>",
3814
- "<|special_3933|>",
3815
- "<|special_3934|>",
3816
- "<|special_3935|>",
3817
- "<|special_3936|>",
3818
- "<|special_3937|>",
3819
- "<|special_3938|>",
3820
- "<|special_3939|>",
3821
- "<|special_3940|>",
3822
- "<|special_3941|>",
3823
- "<|special_3942|>",
3824
- "<|special_3943|>",
3825
- "<|special_3944|>",
3826
- "<|special_3945|>",
3827
- "<|special_3946|>",
3828
- "<|special_3947|>",
3829
- "<|special_3948|>",
3830
- "<|special_3949|>",
3831
- "<|special_3950|>",
3832
- "<|special_3951|>",
3833
- "<|special_3952|>",
3834
- "<|special_3953|>",
3835
- "<|special_3954|>",
3836
- "<|special_3955|>",
3837
- "<|special_3956|>",
3838
- "<|special_3957|>",
3839
- "<|special_3958|>",
3840
- "<|special_3959|>",
3841
- "<|special_3960|>",
3842
- "<|special_3961|>",
3843
- "<|special_3962|>",
3844
- "<|special_3963|>",
3845
- "<|special_3964|>",
3846
- "<|special_3965|>",
3847
- "<|special_3966|>",
3848
- "<|special_3967|>",
3849
- "<|special_3968|>",
3850
- "<|special_3969|>",
3851
- "<|special_3970|>",
3852
- "<|special_3971|>",
3853
- "<|special_3972|>",
3854
- "<|special_3973|>",
3855
- "<|special_3974|>",
3856
- "<|special_3975|>",
3857
- "<|special_3976|>",
3858
- "<|special_3977|>",
3859
- "<|special_3978|>",
3860
- "<|special_3979|>",
3861
- "<|special_3980|>",
3862
- "<|special_3981|>",
3863
- "<|special_3982|>",
3864
- "<|special_3983|>",
3865
- "<|special_3984|>",
3866
- "<|special_3985|>",
3867
- "<|special_3986|>",
3868
- "<|special_3987|>",
3869
- "<|special_3988|>",
3870
- "<|special_3989|>",
3871
- "<|special_3990|>",
3872
- "<|special_3991|>",
3873
- "<|special_3992|>",
3874
- "<|special_3993|>",
3875
- "<|special_3994|>",
3876
- "<|special_3995|>",
3877
- "<|special_3996|>",
3878
- "<|special_3997|>",
3879
- "<|special_3998|>",
3880
- "<|special_3999|>",
3881
- "<|special_4000|>",
3882
- "<|special_4001|>",
3883
- "<|special_4002|>",
3884
- "<|special_4003|>",
3885
- "<|special_4004|>",
3886
- "<|special_4005|>",
3887
- "<|special_4006|>",
3888
- "<|special_4007|>",
3889
- "<|special_4008|>",
3890
- "<|special_4009|>",
3891
- "<|special_4010|>",
3892
- "<|special_4011|>",
3893
- "<|special_4012|>",
3894
- "<|special_4013|>",
3895
- "<|special_4014|>",
3896
- "<|special_4015|>",
3897
- "<|special_4016|>",
3898
- "<|special_4017|>",
3899
- "<|special_4018|>",
3900
- "<|special_4019|>",
3901
- "<|special_4020|>",
3902
- "<|special_4021|>",
3903
- "<|special_4022|>",
3904
- "<|special_4023|>",
3905
- "<|special_4024|>",
3906
- "<|special_4025|>",
3907
- "<|special_4026|>",
3908
- "<|special_4027|>",
3909
- "<|special_4028|>",
3910
- "<|special_4029|>",
3911
- "<|special_4030|>",
3912
- "<|special_4031|>",
3913
- "<|special_4032|>",
3914
- "<|special_4033|>",
3915
- "<|special_4034|>",
3916
- "<|special_4035|>",
3917
- "<|special_4036|>",
3918
- "<|special_4037|>",
3919
- "<|special_4038|>",
3920
- "<|special_4039|>",
3921
- "<|special_4040|>",
3922
- "<|special_4041|>",
3923
- "<|special_4042|>",
3924
- "<|special_4043|>",
3925
- "<|special_4044|>",
3926
- "<|special_4045|>",
3927
- "<|special_4046|>",
3928
- "<|special_4047|>",
3929
- "<|special_4048|>",
3930
- "<|special_4049|>",
3931
- "<|special_4050|>",
3932
- "<|special_4051|>",
3933
- "<|special_4052|>",
3934
- "<|special_4053|>",
3935
- "<|special_4054|>",
3936
- "<|special_4055|>",
3937
- "<|special_4056|>",
3938
- "<|special_4057|>",
3939
- "<|special_4058|>",
3940
- "<|special_4059|>",
3941
- "<|special_4060|>",
3942
- "<|special_4061|>",
3943
- "<|special_4062|>",
3944
- "<|special_4063|>",
3945
- "<|special_4064|>",
3946
- "<|special_4065|>",
3947
- "<|special_4066|>",
3948
- "<|special_4067|>",
3949
- "<|special_4068|>",
3950
- "<|special_4069|>",
3951
- "<|special_4070|>",
3952
- "<|special_4071|>",
3953
- "<|special_4072|>",
3954
- "<|special_4073|>",
3955
- "<|special_4074|>",
3956
- "<|special_4075|>",
3957
- "<|special_4076|>",
3958
- "<|special_4077|>",
3959
- "<|special_4078|>",
3960
- "<|special_4079|>",
3961
- "<|special_4080|>",
3962
- "<|special_4081|>",
3963
- "<|special_4082|>",
3964
- "<|special_4083|>",
3965
- "<|special_4084|>",
3966
- "<|special_4085|>",
3967
- "<|special_4086|>",
3968
- "<|special_4087|>",
3969
- "<|special_4088|>",
3970
- "<|special_4089|>",
3971
- "<|special_4090|>",
3972
- "<|special_4091|>",
3973
- "<|special_4092|>",
3974
- "<|special_4093|>",
3975
- "<|special_4094|>",
3976
- "<|special_4095|>"
3977
- ],
3978
- "bos_token": {
3979
- "content": "<|startoftext|>",
3980
- "lstrip": false,
3981
- "normalized": false,
3982
- "rstrip": false,
3983
- "single_word": false
3984
- },
3985
- "eos_token": {
3986
- "content": "<|endoftext|>",
3987
- "lstrip": false,
3988
- "normalized": false,
3989
- "rstrip": false,
3990
- "single_word": false
3991
- },
3992
- "pad_token": {
3993
- "content": "<|endoftext|>",
3994
- "lstrip": false,
3995
- "normalized": false,
3996
- "rstrip": false,
3997
- "single_word": false
3998
- },
3999
- "unk_token": {
4000
- "content": "<unk>",
4001
- "lstrip": false,
4002
- "normalized": false,
4003
- "rstrip": false,
4004
- "single_word": false
4005
- }
4006
- }
 
1
  {
2
+ "bos_token": "<|startoftext|>",
3
+ "cls_token": "[CLS]",
4
+ "eos_token": "<|endoftext|>",
5
+ "gmask_token": "[gMASK]",
6
+ "pad_token": "<|endoftext|>",
7
+ "mask_token": "<|mask|>"
8
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
tokenization_llada2.py ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ import logging
3
+ from typing import Any, Iterator, Union
4
+ from transformers import PreTrainedTokenizerFast
5
+ from transformers.convert_slow_tokenizer import bytes_to_unicode
6
+
7
+ from .tool_declaration_ts import encode_tools_to_typescript_style
8
+
9
+ logger = logging.getLogger(__name__)
10
+
11
+
12
+ def deep_sort_dict(obj: Any) -> Any:
13
+ """Deep sort dict keys recursively to ensure stable hashing and tokenization."""
14
+ if isinstance(obj, dict):
15
+ return {k: deep_sort_dict(v) for k, v in sorted(obj.items())}
16
+ if isinstance(obj, list):
17
+ return [deep_sort_dict(item) for item in obj]
18
+ return obj
19
+
20
+
21
+ class CustomFastTokenizer(PreTrainedTokenizerFast):
22
+
23
+ def __init__(self, *args, **kwargs):
24
+ super().__init__(*args, **kwargs)
25
+
26
+ # Byte-to-unicode mapping for downstream tasks requiring single-byte decoding
27
+ self.byte_encoder = bytes_to_unicode()
28
+ self.byte_decoder = {v: k for k, v in self.byte_encoder.items()}
29
+
30
+ @staticmethod
31
+ def _split_whitespaces_or_nonwhitespaces(
32
+ s: str, max_consecutive_slice_len: int
33
+ ) -> Iterator[str]:
34
+ current_slice_len = 0
35
+ current_slice_is_space = s[0].isspace() if len(s) > 0 else False
36
+ slice_start = 0
37
+
38
+ for i in range(len(s)):
39
+ is_now_space = s[i].isspace()
40
+ if current_slice_is_space ^ is_now_space:
41
+ current_slice_len = 1
42
+ current_slice_is_space = is_now_space
43
+ else:
44
+ current_slice_len += 1
45
+ if current_slice_len > max_consecutive_slice_len:
46
+ yield s[slice_start:i]
47
+ slice_start = i
48
+ current_slice_len = 1
49
+ yield s[slice_start:]
50
+
51
+ def encode(self, text: Union[str, Any], *args, **kwargs) -> list[int]:
52
+ if not isinstance(text, str) or args or kwargs:
53
+ return super().encode(text, *args, **kwargs)
54
+
55
+ # Chunking thresholds to prevent OOM on very long texts
56
+ MAX_ENCODE_CHARS = 400_000
57
+ MAX_NO_WHITESPACES_CHARS = 25_000
58
+
59
+ all_substrs = []
60
+ for i in range(0, len(text), MAX_ENCODE_CHARS):
61
+ chunk = text[i : i + MAX_ENCODE_CHARS]
62
+ all_substrs.extend(
63
+ self._split_whitespaces_or_nonwhitespaces(
64
+ chunk, MAX_NO_WHITESPACES_CHARS
65
+ )
66
+ )
67
+
68
+ t = []
69
+ for substr in all_substrs:
70
+ t.extend(super().encode(substr, add_special_tokens=False))
71
+
72
+ return t
73
+
74
+ def apply_chat_template(self, conversation, tools=None, **kwargs):
75
+ tools = deep_sort_dict(tools)
76
+
77
+ if tools:
78
+ try:
79
+ tools_ts_str = encode_tools_to_typescript_style(tools)
80
+ kwargs["tools_ts_str"] = tools_ts_str
81
+ except Exception as e:
82
+ logger.error(f"Failed to convert tools to TypeScript style: {e}")
83
+
84
+ return super().apply_chat_template(
85
+ conversation=conversation, tools=tools, **kwargs
86
+ )
tokenizer.json CHANGED
The diff for this file is too large to render. See raw diff
 
tokenizer_config.json CHANGED
The diff for this file is too large to render. See raw diff
 
tool_declaration_ts.py ADDED
@@ -0,0 +1,499 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ Encode structured tool declaration to typescript style string.
3
+ """
4
+
5
+ import dataclasses
6
+ import json
7
+ import logging
8
+ from collections.abc import Sequence
9
+ from typing import Any
10
+
11
+ logger = logging.getLogger(__name__)
12
+
13
+ _TS_INDENT = " "
14
+ _TS_FIELD_DELIMITER = ",\n"
15
+
16
+
17
+ class _SchemaRegistry:
18
+ """Registry for schema definitions to handle $ref resolution"""
19
+
20
+ def __init__(self):
21
+ self.definitions = {}
22
+ self.has_self_ref = False
23
+
24
+ def register_definitions(self, defs: dict[str, Any]):
25
+ """Register schema definitions from $defs section"""
26
+ if not defs:
27
+ return
28
+ for def_name, def_schema in defs.items():
29
+ self.definitions[def_name] = def_schema
30
+
31
+ def resolve_ref(self, ref: str) -> dict[str, Any]:
32
+ """Resolve a reference to its schema definition"""
33
+ if ref == "#":
34
+ self.has_self_ref = True
35
+ return {"$self_ref": True}
36
+ elif ref.startswith("#/$defs/"):
37
+ def_name = ref.split("/")[-1]
38
+ if def_name not in self.definitions:
39
+ raise ValueError(f"Reference not found: {ref}")
40
+ return self.definitions[def_name]
41
+ else:
42
+ raise ValueError(f"Unsupported reference format: {ref}")
43
+
44
+
45
+ def _format_description(description: str, indent: str = "") -> str:
46
+ return "\n".join(
47
+ [f"{indent}// {line}" if line else "" for line in description.split("\n")]
48
+ )
49
+
50
+
51
+ class _BaseType:
52
+ description: str
53
+ constraints: dict[str, Any]
54
+
55
+ def __init__(
56
+ self,
57
+ extra_props: dict[str, Any],
58
+ *,
59
+ allowed_constraint_keys: Sequence[str] = (),
60
+ ):
61
+ self.description = extra_props.get("description", "")
62
+ self.constraints = {
63
+ k: v for k, v in extra_props.items() if k in allowed_constraint_keys
64
+ }
65
+
66
+ def to_typescript_style(self, indent: str = "") -> str:
67
+ raise NotImplementedError
68
+
69
+ def format_docstring(self, indent: str) -> str:
70
+ lines = []
71
+ if self.description:
72
+ lines.append(_format_description(self.description, indent))
73
+ if self.constraints:
74
+ constraints_str = ", ".join(
75
+ f"{k}: {v}"
76
+ for k, v in sorted(self.constraints.items(), key=lambda kv: kv[0])
77
+ )
78
+ lines.append(f"{indent}// {constraints_str}")
79
+
80
+ return "".join(x + "\n" for x in lines)
81
+
82
+
83
+ class _ParameterTypeScalar(_BaseType):
84
+ type: str
85
+
86
+ def __init__(self, type: str, extra_props: dict[str, Any] | None = None):
87
+ self.type = type
88
+
89
+ allowed_constraint_keys: list[str] = []
90
+ if self.type == "string":
91
+ allowed_constraint_keys = ["maxLength", "minLength", "pattern"]
92
+ elif self.type in ("number", "integer"):
93
+ allowed_constraint_keys = ["maximum", "minimum"]
94
+
95
+ super().__init__(
96
+ extra_props or {}, allowed_constraint_keys=allowed_constraint_keys
97
+ )
98
+
99
+ def to_typescript_style(self, indent: str = "") -> str:
100
+ # Map integer to number in TypeScript
101
+ if self.type == "integer":
102
+ return "number"
103
+ return self.type
104
+
105
+
106
+ class _ParameterTypeObject(_BaseType):
107
+ properties: list["_Parameter"]
108
+ additional_properties: Any | None = None
109
+
110
+ def __init__(
111
+ self,
112
+ json_schema_object: dict[str, Any],
113
+ registry: _SchemaRegistry | None = None,
114
+ ):
115
+ super().__init__(json_schema_object)
116
+
117
+ self.properties = []
118
+ self.additional_properties = None
119
+
120
+ if not json_schema_object:
121
+ return
122
+
123
+ if "$defs" in json_schema_object and registry:
124
+ registry.register_definitions(json_schema_object["$defs"])
125
+
126
+ self.additional_properties = json_schema_object.get("additionalProperties")
127
+ if isinstance(self.additional_properties, dict):
128
+ self.additional_properties = _parse_parameter_type(
129
+ self.additional_properties, registry
130
+ )
131
+
132
+ if "properties" not in json_schema_object:
133
+ return
134
+
135
+ required_parameters = json_schema_object.get("required", [])
136
+ optional_parameters = set(json_schema_object["properties"].keys()) - set(
137
+ required_parameters
138
+ )
139
+
140
+ self.properties = [
141
+ _Parameter(
142
+ name=name,
143
+ type=_parse_parameter_type(prop, registry),
144
+ optional=name in optional_parameters,
145
+ default=prop.get("default") if isinstance(prop, dict) else None,
146
+ )
147
+ for name, prop in json_schema_object["properties"].items()
148
+ ]
149
+
150
+ def to_typescript_style(self, indent: str = "") -> str:
151
+ # sort by optional, make the required parameters first
152
+ parameters = [p for p in self.properties if not p.optional]
153
+ opt_params = [p for p in self.properties if p.optional]
154
+
155
+ parameters = sorted(parameters, key=lambda p: p.name)
156
+ parameters.extend(sorted(opt_params, key=lambda p: p.name))
157
+
158
+ param_strs = []
159
+ for p in parameters:
160
+ one = p.to_typescript_style(indent=indent + _TS_INDENT)
161
+ param_strs.append(one)
162
+
163
+ if self.additional_properties is not None:
164
+ ap_type_str = "any"
165
+ if self.additional_properties is True:
166
+ ap_type_str = "any"
167
+ elif self.additional_properties is False:
168
+ ap_type_str = "never"
169
+ elif isinstance(self.additional_properties, _ParameterType):
170
+ ap_type_str = self.additional_properties.to_typescript_style(
171
+ indent=indent + _TS_INDENT
172
+ )
173
+ else:
174
+ raise ValueError(
175
+ f"Unknown additionalProperties: {self.additional_properties}"
176
+ )
177
+ param_strs.append(f"{indent + _TS_INDENT}[k: string]: {ap_type_str}")
178
+
179
+ if not param_strs:
180
+ return "{}"
181
+
182
+ params_str = _TS_FIELD_DELIMITER.join(param_strs)
183
+ if params_str:
184
+ # add new line before and after
185
+ params_str = f"\n{params_str}\n"
186
+ # always wrap with object
187
+ return f"{{{params_str}{indent}}}"
188
+
189
+
190
+ class _ParameterTypeArray(_BaseType):
191
+ item: "_ParameterType"
192
+
193
+ def __init__(
194
+ self,
195
+ json_schema_object: dict[str, Any],
196
+ registry: _SchemaRegistry | None = None,
197
+ ):
198
+ super().__init__(
199
+ json_schema_object, allowed_constraint_keys=("minItems", "maxItems")
200
+ )
201
+ if json_schema_object.get("items"):
202
+ self.item = _parse_parameter_type(json_schema_object["items"], registry)
203
+ else:
204
+ self.item = _ParameterTypeScalar(type="any")
205
+
206
+ def to_typescript_style(self, indent: str = "") -> str:
207
+ item_docstring = self.item.format_docstring(indent + _TS_INDENT)
208
+ if item_docstring:
209
+ return (
210
+ "Array<\n"
211
+ + item_docstring
212
+ + indent
213
+ + _TS_INDENT
214
+ + self.item.to_typescript_style(indent=indent + _TS_INDENT)
215
+ + "\n"
216
+ + indent
217
+ + ">"
218
+ )
219
+ else:
220
+ return f"Array<{self.item.to_typescript_style(indent=indent)}>"
221
+
222
+
223
+ class _ParameterTypeEnum(_BaseType):
224
+ # support scalar types only
225
+ enum: list[str | int | float | bool | None]
226
+
227
+ def __init__(self, json_schema_object: dict[str, Any]):
228
+ super().__init__(json_schema_object)
229
+ self.enum = json_schema_object["enum"]
230
+
231
+ # Validate enum values against declared type if present
232
+ if "type" in json_schema_object:
233
+ typ = json_schema_object["type"]
234
+ if isinstance(typ, list):
235
+ if len(typ) == 1:
236
+ typ = typ[0]
237
+ elif len(typ) == 2:
238
+ if "null" not in typ:
239
+ raise ValueError(f"Enum type {typ} is not supported")
240
+ else:
241
+ typ = typ[0] if typ[0] != "null" else typ[1]
242
+ else:
243
+ raise ValueError(f"Enum type {typ} is not supported")
244
+ for val in self.enum:
245
+ if val is None:
246
+ continue
247
+ if typ == "string" and not isinstance(val, str):
248
+ raise ValueError(f"Enum value {val} is not a string")
249
+ elif typ == "number" and not isinstance(val, (int, float)):
250
+ raise ValueError(f"Enum value {val} is not a number")
251
+ elif typ == "integer" and not isinstance(val, int):
252
+ raise ValueError(f"Enum value {val} is not an integer")
253
+ elif typ == "boolean" and not isinstance(val, bool):
254
+ raise ValueError(f"Enum value {val} is not a boolean")
255
+
256
+ def to_typescript_style(self, indent: str = "") -> str:
257
+ return " | ".join(
258
+ [f'"{e}"' if isinstance(e, str) else str(e) for e in self.enum]
259
+ )
260
+
261
+
262
+ class _ParameterTypeAnyOf(_BaseType):
263
+ types: list["_ParameterType"]
264
+
265
+ def __init__(
266
+ self,
267
+ json_schema_object: dict[str, Any],
268
+ registry: _SchemaRegistry | None = None,
269
+ ):
270
+ super().__init__(json_schema_object)
271
+ self.types = [
272
+ _parse_parameter_type(t, registry) for t in json_schema_object["anyOf"]
273
+ ]
274
+
275
+ def to_typescript_style(self, indent: str = "") -> str:
276
+ return " | ".join([t.to_typescript_style(indent=indent) for t in self.types])
277
+
278
+
279
+ class _ParameterTypeUnion(_BaseType):
280
+ types: list[str]
281
+
282
+ def __init__(self, json_schema_object: dict[str, Any]):
283
+ super().__init__(json_schema_object)
284
+
285
+ mapping = {
286
+ "string": "string",
287
+ "number": "number",
288
+ "integer": "number",
289
+ "boolean": "boolean",
290
+ "null": "null",
291
+ "object": "{}",
292
+ "array": "Array<any>",
293
+ }
294
+ self.types = [mapping[t] for t in json_schema_object["type"]]
295
+
296
+ def to_typescript_style(self, indent: str = "") -> str:
297
+ return " | ".join(self.types)
298
+
299
+
300
+ class _ParameterTypeRef(_BaseType):
301
+ ref_name: str
302
+ is_self_ref: bool = False
303
+
304
+ def __init__(self, json_schema_object: dict[str, Any], registry: _SchemaRegistry):
305
+ super().__init__(json_schema_object)
306
+
307
+ ref = json_schema_object["$ref"]
308
+ resolved_schema = registry.resolve_ref(ref)
309
+
310
+ if resolved_schema.get("$self_ref", False):
311
+ self.ref_name = "parameters"
312
+ self.is_self_ref = True
313
+ else:
314
+ self.ref_name = ref.split("/")[-1]
315
+
316
+ def to_typescript_style(self, indent: str = "") -> str:
317
+ return self.ref_name
318
+
319
+
320
+ _ParameterType = (
321
+ _ParameterTypeScalar
322
+ | _ParameterTypeObject
323
+ | _ParameterTypeArray
324
+ | _ParameterTypeEnum
325
+ | _ParameterTypeAnyOf
326
+ | _ParameterTypeUnion
327
+ | _ParameterTypeRef
328
+ )
329
+
330
+
331
+ @dataclasses.dataclass
332
+ class _Parameter:
333
+ """
334
+ A parameter in a function, or a field in a object.
335
+ It consists of the type as well as the name.
336
+ """
337
+
338
+ type: _ParameterType
339
+ name: str = "_"
340
+ optional: bool = True
341
+ default: Any | None = None
342
+
343
+ @classmethod
344
+ def parse_extended(cls, attributes: dict[str, Any]) -> "_Parameter":
345
+ if not attributes:
346
+ raise ValueError("attributes is empty")
347
+
348
+ return cls(
349
+ name=attributes.get("name", "_"),
350
+ type=_parse_parameter_type(attributes),
351
+ optional=attributes.get("optional", False),
352
+ default=attributes.get("default"),
353
+ )
354
+
355
+ def to_typescript_style(self, indent: str = "") -> str:
356
+ comments = self.type.format_docstring(indent)
357
+
358
+ if self.default is not None:
359
+ default_repr = (
360
+ json.dumps(self.default, ensure_ascii=False)
361
+ if not isinstance(self.default, (int, float, bool))
362
+ else repr(self.default)
363
+ )
364
+ comments += f"{indent}// Default: {default_repr}\n"
365
+
366
+ return (
367
+ comments
368
+ + f"{indent}{self.name}{'?' if self.optional else ''}: {self.type.to_typescript_style(indent=indent)}"
369
+ )
370
+
371
+
372
+ def _parse_parameter_type(
373
+ json_schema_object: dict[str, Any] | bool, registry: _SchemaRegistry | None = None
374
+ ) -> _ParameterType:
375
+ if isinstance(json_schema_object, bool):
376
+ if json_schema_object:
377
+ return _ParameterTypeScalar(type="any")
378
+ else:
379
+ logger.warning(
380
+ f"Warning: Boolean value {json_schema_object} is not supported, use null instead."
381
+ )
382
+ return _ParameterTypeScalar(type="null")
383
+
384
+ if "$ref" in json_schema_object and registry:
385
+ return _ParameterTypeRef(json_schema_object, registry)
386
+
387
+ if "anyOf" in json_schema_object:
388
+ return _ParameterTypeAnyOf(json_schema_object, registry)
389
+ elif "enum" in json_schema_object:
390
+ return _ParameterTypeEnum(json_schema_object)
391
+ elif "type" in json_schema_object:
392
+ typ = json_schema_object["type"]
393
+ if isinstance(typ, list):
394
+ return _ParameterTypeUnion(json_schema_object)
395
+ elif typ == "object":
396
+ return _ParameterTypeObject(json_schema_object, registry)
397
+ elif typ == "array":
398
+ return _ParameterTypeArray(json_schema_object, registry)
399
+ else:
400
+ return _ParameterTypeScalar(typ, json_schema_object)
401
+ elif json_schema_object == {}:
402
+ return _ParameterTypeScalar(type="any")
403
+ else:
404
+ raise ValueError(f"Invalid JSON Schema object: {json_schema_object}")
405
+
406
+
407
+ def _openai_function_to_typescript_style(
408
+ function: dict[str, Any],
409
+ ) -> str:
410
+ """Convert OpenAI function definition (dict) to TypeScript style string."""
411
+ registry = _SchemaRegistry()
412
+ parameters = function.get("parameters") or {}
413
+ parsed = _ParameterTypeObject(parameters, registry)
414
+
415
+ interfaces = []
416
+ root_interface_name = None
417
+ if registry.has_self_ref:
418
+ root_interface_name = "parameters"
419
+ params_str = _TS_FIELD_DELIMITER.join(
420
+ [p.to_typescript_style(indent=_TS_INDENT) for p in parsed.properties]
421
+ )
422
+ params_str = f"\n{params_str}\n" if params_str else ""
423
+ interface_def = f"interface {root_interface_name} {{{params_str}}}"
424
+ interfaces.append(interface_def)
425
+
426
+ definitions_copy = dict(registry.definitions)
427
+ for def_name, def_schema in definitions_copy.items():
428
+ obj_type = _parse_parameter_type(def_schema, registry)
429
+ params_str = obj_type.to_typescript_style()
430
+
431
+ description_part = ""
432
+ if obj_description := def_schema.get("description", ""):
433
+ description_part = _format_description(obj_description) + "\n"
434
+
435
+ interface_def = f"{description_part}interface {def_name} {params_str}"
436
+ interfaces.append(interface_def)
437
+
438
+ interface_str = "\n".join(interfaces)
439
+ function_name = function.get("name", "function")
440
+ if root_interface_name:
441
+ type_def = f"type {function_name} = (_: {root_interface_name}) => any;"
442
+ else:
443
+ params_str = parsed.to_typescript_style()
444
+ type_def = f"type {function_name} = (_: {params_str}) => any;"
445
+
446
+ description = function.get("description")
447
+ return "\n".join(
448
+ filter(
449
+ bool,
450
+ [
451
+ interface_str,
452
+ ((description and _format_description(description)) or ""),
453
+ type_def,
454
+ ],
455
+ )
456
+ )
457
+
458
+
459
+ def encode_tools_to_typescript_style(
460
+ tools: list[dict[str, Any]],
461
+ ) -> str:
462
+ """
463
+ Convert tools (list of dict) to TypeScript style string.
464
+
465
+ Supports OpenAI format: {"type": "function", "function": {...}}
466
+
467
+ Args:
468
+ tools: List of tool definitions in dict format
469
+
470
+ Returns:
471
+ TypeScript style string representation of the tools
472
+ """
473
+ if not tools:
474
+ return ""
475
+
476
+ functions = []
477
+
478
+ for tool in tools:
479
+ tool_type = tool.get("type")
480
+ if tool_type == "function":
481
+ func_def = tool.get("function", {})
482
+ if func_def:
483
+ functions.append(_openai_function_to_typescript_style(func_def))
484
+ else:
485
+ # Skip unsupported tool types (like "_plugin")
486
+ continue
487
+
488
+ if not functions:
489
+ return ""
490
+
491
+ functions_str = "\n".join(functions)
492
+ result = "# Tools\n\n"
493
+
494
+ if functions_str:
495
+ result += "## functions\nnamespace functions {\n"
496
+ result += functions_str + "\n"
497
+ result += "}\n"
498
+
499
+ return result