lvmopt commited on
Commit
2a247be
·
0 Parent(s):

Initial release

Browse files
.gitattributes ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx 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
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ tokenizer.json filter=lfs diff=lfs merge=lfs -text
37
+ assets/flint-logo.png filter=lfs diff=lfs merge=lfs -text
38
+ assets/flint_benchmarks_nvfp4.png filter=lfs diff=lfs merge=lfs -text
LICENSE ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Apache License
2
+ Version 2.0, January 2004
3
+ http://www.apache.org/licenses/
4
+
5
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
6
+
7
+ 1. Definitions.
8
+
9
+ "License" shall mean the terms and conditions for use, reproduction,
10
+ and distribution as defined by Sections 1 through 9 of this document.
11
+
12
+ "Licensor" shall mean the copyright owner or entity authorized by
13
+ the copyright owner that is granting the License.
14
+
15
+ "Legal Entity" shall mean the union of the acting entity and all
16
+ other entities that control, are controlled by, or are under common
17
+ control with that entity. For the purposes of this definition,
18
+ "control" means (i) the power, direct or indirect, to cause the
19
+ direction or management of such entity, whether by contract or
20
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
21
+ outstanding shares, or (iii) beneficial ownership of such entity.
22
+
23
+ "You" (or "Your") shall mean an individual or Legal Entity
24
+ exercising permissions granted by this License.
25
+
26
+ "Source" form shall mean the preferred form for making modifications,
27
+ including but not limited to software source code, documentation
28
+ source, and configuration files.
29
+
30
+ "Object" form shall mean any form resulting from mechanical
31
+ transformation or translation of a Source form, including but
32
+ not limited to compiled object code, generated documentation,
33
+ and conversions to other media types.
34
+
35
+ "Work" shall mean the work of authorship, whether in Source or
36
+ Object form, made available under the License, as indicated by a
37
+ copyright notice that is included in or attached to the work
38
+ (an example is provided in the Appendix below).
39
+
40
+ "Derivative Works" shall mean any work, whether in Source or Object
41
+ form, that is based on (or derived from) the Work and for which the
42
+ editorial revisions, annotations, elaborations, or other modifications
43
+ represent, as a whole, an original work of authorship. For the purposes
44
+ of this License, Derivative Works shall not include works that remain
45
+ separable from, or merely link (or bind by name) to the interfaces of,
46
+ the Work and Derivative Works thereof.
47
+
48
+ "Contribution" shall mean any work of authorship, including
49
+ the original version of the Work and any modifications or additions
50
+ to that Work or Derivative Works thereof, that is intentionally
51
+ submitted to Licensor for inclusion in the Work by the copyright owner
52
+ or by an individual or Legal Entity authorized to submit on behalf of
53
+ the copyright owner. For the purposes of this definition, "submitted"
54
+ means any form of electronic, verbal, or written communication sent
55
+ to the Licensor or its representatives, including but not limited to
56
+ communication on electronic mailing lists, source code control systems,
57
+ and issue tracking systems that are managed by, or on behalf of, the
58
+ Licensor for the purpose of discussing and improving the Work, but
59
+ excluding communication that is conspicuously marked or otherwise
60
+ designated in writing by the copyright owner as "Not a Contribution."
61
+
62
+ "Contributor" shall mean Licensor and any individual or Legal Entity
63
+ on behalf of whom a Contribution has been received by Licensor and
64
+ subsequently incorporated within the Work.
65
+
66
+ 2. Grant of Copyright License. Subject to the terms and conditions of
67
+ this License, each Contributor hereby grants to You a perpetual,
68
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
69
+ copyright license to reproduce, prepare Derivative Works of,
70
+ publicly display, publicly perform, sublicense, and distribute the
71
+ Work and such Derivative Works in Source or Object form.
72
+
73
+ 3. Grant of Patent License. Subject to the terms and conditions of
74
+ this License, each Contributor hereby grants to You a perpetual,
75
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
76
+ (except as stated in this section) patent license to make, have made,
77
+ use, offer to sell, sell, import, and otherwise transfer the Work,
78
+ where such license applies only to those patent claims licensable
79
+ by such Contributor that are necessarily infringed by their
80
+ Contribution(s) alone or by combination of their Contribution(s)
81
+ with the Work to which such Contribution(s) was submitted. If You
82
+ institute patent litigation against any entity (including a
83
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
84
+ or a Contribution incorporated within the Work constitutes direct
85
+ or contributory patent infringement, then any patent licenses
86
+ granted to You under this License for that Work shall terminate
87
+ as of the date such litigation is filed.
88
+
89
+ 4. Redistribution. You may reproduce and distribute copies of the
90
+ Work or Derivative Works thereof in any medium, with or without
91
+ modifications, and in Source or Object form, provided that You
92
+ meet the following conditions:
93
+
94
+ (a) You must give any other recipients of the Work or
95
+ Derivative Works a copy of this License; and
96
+
97
+ (b) You must cause any modified files to carry prominent notices
98
+ stating that You changed the files; and
99
+
100
+ (c) You must retain, in the Source form of any Derivative Works
101
+ that You distribute, all copyright, patent, trademark, and
102
+ attribution notices from the Source form of the Work,
103
+ excluding those notices that do not pertain to any part of
104
+ the Derivative Works; and
105
+
106
+ (d) If the Work includes a "NOTICE" text file as part of its
107
+ distribution, then any Derivative Works that You distribute must
108
+ include a readable copy of the attribution notices contained
109
+ within such NOTICE file, excluding those notices that do not
110
+ pertain to any part of the Derivative Works, in at least one
111
+ of the following places: within a NOTICE text file distributed
112
+ as part of the Derivative Works; within the Source form or
113
+ documentation, if provided along with the Derivative Works; or,
114
+ within a display generated by the Derivative Works, if and
115
+ wherever such third-party notices normally appear. The contents
116
+ of the NOTICE file are for informational purposes only and
117
+ do not modify the License. You may add Your own attribution
118
+ notices within Derivative Works that You distribute, alongside
119
+ or as an addendum to the NOTICE text from the Work, provided
120
+ that such additional attribution notices cannot be construed
121
+ as modifying the License.
122
+
123
+ You may add Your own copyright statement to Your modifications and
124
+ may provide additional or different license terms and conditions
125
+ for use, reproduction, or distribution of Your modifications, or
126
+ for any such Derivative Works as a whole, provided Your use,
127
+ reproduction, and distribution of the Work otherwise complies with
128
+ the conditions stated in this License.
129
+
130
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
131
+ any Contribution intentionally submitted for inclusion in the Work
132
+ by You to the Licensor shall be under the terms and conditions of
133
+ this License, without any additional terms or conditions.
134
+ Notwithstanding the above, nothing herein shall supersede or modify
135
+ the terms of any separate license agreement you may have executed
136
+ with Licensor regarding such Contributions.
137
+
138
+ 6. Trademarks. This License does not grant permission to use the trade
139
+ names, trademarks, service marks, or product names of the Licensor,
140
+ except as required for reasonable and customary use in describing the
141
+ origin of the Work and reproducing the content of the NOTICE file.
142
+
143
+ 7. Disclaimer of Warranty. Unless required by applicable law or
144
+ agreed to in writing, Licensor provides the Work (and each
145
+ Contributor provides its Contributions) on an "AS IS" BASIS,
146
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
147
+ implied, including, without limitation, any warranties or conditions
148
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
149
+ PARTICULAR PURPOSE. You are solely responsible for determining the
150
+ appropriateness of using or redistributing the Work and assume any
151
+ risks associated with Your exercise of permissions under this License.
152
+
153
+ 8. Limitation of Liability. In no event and under no legal theory,
154
+ whether in tort (including negligence), contract, or otherwise,
155
+ unless required by applicable law (such as deliberate and grossly
156
+ negligent acts) or agreed to in writing, shall any Contributor be
157
+ liable to You for damages, including any direct, indirect, special,
158
+ incidental, or consequential damages of any character arising as a
159
+ result of this License or out of the use or inability to use the
160
+ Work (including but not limited to damages for loss of goodwill,
161
+ work stoppage, computer failure or malfunction, or any and all
162
+ other commercial damages or losses), even if such Contributor
163
+ has been advised of the possibility of such damages.
164
+
165
+ 9. Accepting Warranty or Additional Liability. While redistributing
166
+ the Work or Derivative Works thereof, You may choose to offer,
167
+ and charge a fee for, acceptance of support, warranty, indemnity,
168
+ or other liability obligations and/or rights consistent with this
169
+ License. However, in accepting such obligations, You may act only
170
+ on Your own behalf and on Your sole responsibility, not on behalf
171
+ of any other Contributor, and only if You agree to indemnify,
172
+ defend, and hold each Contributor harmless for any liability
173
+ incurred by, or claims asserted against, such Contributor by reason
174
+ of your accepting any such warranty or additional liability.
175
+
176
+ END OF TERMS AND CONDITIONS
177
+
178
+ APPENDIX: How to apply the Apache License to your work.
179
+
180
+ To apply the Apache License to your work, attach the following
181
+ boilerplate notice, with the fields enclosed by brackets "[]"
182
+ replaced with your own identifying information. (Don't include
183
+ the brackets!) The text should be enclosed in the appropriate
184
+ comment syntax for the file format. We also recommend that a
185
+ file or class name and description of purpose be included on the
186
+ same "printed page" as the copyright notice for easier
187
+ identification within third-party archives.
188
+
189
+ Copyright [yyyy] [name of copyright owner]
190
+
191
+ Licensed under the Apache License, Version 2.0 (the "License");
192
+ you may not use this file except in compliance with the License.
193
+ You may obtain a copy of the License at
194
+
195
+ http://www.apache.org/licenses/LICENSE-2.0
196
+
197
+ Unless required by applicable law or agreed to in writing, software
198
+ distributed under the License is distributed on an "AS IS" BASIS,
199
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
200
+ See the License for the specific language governing permissions and
201
+ limitations under the License.
README.md ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ library_name: transformers
4
+ pipeline_tag: text-generation
5
+ ---
6
+
7
+ <p align="center">
8
+ <img src="assets/flint-logo.png" width="160" alt="Flint logo">
9
+ </p>
10
+
11
+ <h1 align="center">Recursive Flint</h1>
12
+
13
+ <p align="center">
14
+ <a href="https://www.recursive.com/updates/introducing-recursive-flint">Blog</a> |
15
+ <a href="https://huggingface.co/RecursiveSI">Hugging Face</a> |
16
+ <a href="https://github.com/recursive-oss/rec">Local engine</a> |
17
+ <a href="https://docs.recursive.com/getting-started">Documentation</a>
18
+ </p>
19
+
20
+ Flint is Recursive’s mixture-of-experts language model for coding agents, with 39.8 billion total parameters and approximately 2.5 billion active per token. It is designed to investigate codebases, fix bugs, implement features, and write tests.
21
+
22
+ Flint supports text input and output, reasoning, and multi-turn tool use. In our release evaluations, it scores 54.9% on Terminal-Bench 2.1, 89.7% on SWE-bench Pro v2, and 74.2% on SWE-bench Verified.
23
+
24
+ This repository contains the BF16 checkpoint, model configuration, tokenizer, chat template, and an SGLang serving kit. Quantized variants are prepared separately for NVIDIA and Apple Silicon runtimes.
25
+
26
+ ## Evaluation
27
+
28
+ ![Flint benchmark performance: BF16 and NVFP4 checkpoints compared with local models that run on similar hardware](assets/flint_benchmarks_nvfp4.png)
29
+
30
+ Flint results use temperature 1.0, top-p 0.95, and top-k 20. Terminal-Bench uses Terminus 2; SWE-bench uses mini-swe-agent. Agentic scores report average pass@1 over at least five attempts. † marks scores measured by Recursive; other comparison scores are developer-reported.
31
+
32
+ Evaluation setups vary across sources. Flint’s Terminal-Bench score counts solutions obtained through web retrieval as unsuccessful; developer-reported scores may not apply the same adjustment.
33
+
34
+ ## Model specifications
35
+
36
+ | Property | Flint |
37
+ | :---- | :---- |
38
+ | Developer | Recursive |
39
+ | Architecture | Decoder-only mixture-of-experts Transformer |
40
+ | Total parameters | 39.8B |
41
+ | Active parameters per token | Approximately 2.5B, including the output head¹ |
42
+ | Layers | 49: 2 dense layers followed by 47 MoE layers |
43
+ | Attention | 35 sliding-window layers and 14 full-attention layers |
44
+ | Sliding window | 513 tokens: the current token and 512 preceding tokens |
45
+ | Attention heads | 32 query heads and 4 key/value heads; head dimension 128 |
46
+ | Attention normalization | Per-head QK RMSNorm and learned per-head attention sinks |
47
+ | Position encoding | RoPE on sliding-window layers; no positional encoding on full-attention layers |
48
+ | Experts per MoE layer | 256 routed experts, with 6 selected per token, plus an always-active shared expert |
49
+ | Documented context configuration | 262,144 tokens, including prompt and generated output |
50
+ | Vocabulary | 150,144 tokens |
51
+ | Input / output | Text / text |
52
+ | Stated knowledge cutoff | June 2026 |
53
+
54
+ ¹ The active-parameter convention includes the output head and excludes the full input embedding matrix. The active body alone is approximately 2.2B parameters. “40B-A2.5B” is the rounded model-size designation.
55
+
56
+ ## Getting started
57
+
58
+ Flint runs on one B300 or H200 GPU per replica with the SGLang kit in `sglang/`. Transformers modeling code is not included yet.
59
+
60
+ ```bash
61
+ pip install -U huggingface_hub openai
62
+ hf download RecursiveSI/flint --local-dir flint && cd flint # about 80 GB
63
+ docker build -t flint-sglang sglang
64
+ docker run -d --name flint --gpus '"device=0"' --ipc=host -p 127.0.0.1:30000:30000 \
65
+ -v "$PWD:/model" -e MODEL=/model flint-sglang bash /model/sglang/serve_b300.sh # H200: serve_h200.sh
66
+ until curl -sf localhost:30000/health_generate >/dev/null; do sleep 15; done # progress: docker logs -f flint
67
+ python3 sglang/example_client.py --base-url http://localhost:30000/v1 # reasoning and a tool call
68
+ ```
69
+
70
+ ```python
71
+ from openai import OpenAI
72
+
73
+ client = OpenAI(base_url="http://localhost:30000/v1", api_key="unused")
74
+ response = client.chat.completions.create(
75
+ model="flint",
76
+ messages=[{"role": "user", "content": "Write a Python function that merges overlapping intervals."}],
77
+ max_tokens=32768,
78
+ )
79
+ print(response.choices[0].message.content)
80
+ ```
81
+
82
+ [`sglang/README.md`](sglang/README.md) covers requirements, serve-script options, multi-GPU deployments, and API details.
83
+
84
+ ### Recommended generation settings
85
+
86
+ | Setting | Value |
87
+ | :---- | :---- |
88
+ | Temperature | 1.0 |
89
+ | Top-p / top-k | 0.95 / 20 |
90
+ | Output budget for hard problems | At least 32768 tokens, including reasoning |
91
+
92
+ The server applies these sampling settings when a request omits them. Flint supports OpenAI-compatible tool calls. Use the checkpoint’s chat template and preserve returned `reasoning_content` in conversation history. Prompt and output share the context window.
93
+
94
+ ## Training
95
+
96
+ Flint was trained from scratch through pretraining, mid-training, supervised fine-tuning, and reinforcement learning. Training includes text and code, instruction following, and agentic tasks.
97
+
98
+ ## Limitations and responsible use
99
+
100
+ Flint’s supervised fine-tuning included safety-oriented examples, but the model can still produce incorrect or harmful content, faulty code, or inappropriate tool calls. Test generated code and review consequential changes before applying them. Tool-using applications should enforce their own permissions and execution boundaries; structured tool-call grammar does not prevent the model from choosing an unsafe or incorrect action.
101
+
102
+ Long reasoning can increase latency and exhaust the output budget before an answer is complete. The context configuration is a capacity limit, not a guarantee of uniform accuracy across all sequence lengths or tasks. Results can vary with checkpoint precision and inference runtime; evaluate the specific checkpoint and runtime you intend to deploy.
103
+
104
+ ## License and reporting
105
+
106
+ Flint is released under the [Apache 2.0 license](LICENSE). Hosted API terms and data practices are separate from the weight license.
107
+
108
+ For model and serving issues, contact support@recursive.com and include the checkpoint revision, runtime version, hardware, launch command, and a minimal reproduction. Report safety concerns or suspected misuse to safety@recursive.com, and security vulnerabilities to security@recursive.com.
assets/flint-logo.png ADDED

Git LFS Details

  • SHA256: b95290bec100def989fd410999f8129d43068900705a0609a78cdbafa930ad61
  • Pointer size: 131 Bytes
  • Size of remote file: 410 kB
assets/flint_benchmarks_nvfp4.png ADDED

Git LFS Details

  • SHA256: 329b7954c7bd5c9181ab94ab840d0b7df270780e694f65179d32742a242020c4
  • Pointer size: 131 Bytes
  • Size of remote file: 690 kB
chat_template.jinja ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {%- macro flint_text(t) -%}
2
+ {%- if t is string -%}
3
+ {{- t | replace("\x00", "") | replace("<think>", "") | replace("</think>", "") | replace("<|begin_of_text|>", "&lt;|begin_of_text|&gt;") | replace("<|end_of_text|>", "&lt;|end_of_text|&gt;") | replace("<|system|>", "&lt;|system|&gt;") | replace("<|developer|>", "&lt;|developer|&gt;") | replace("<|user|>", "&lt;|user|&gt;") | replace("<|assistant|>", "&lt;|assistant|&gt;") | replace("<|observation|>", "&lt;|observation|&gt;") -}}
4
+ {%- else -%}
5
+ {{- t -}}
6
+ {%- endif -%}
7
+ {%- endmacro -%}
8
+ {%- set tool_preamble -%}
9
+ {%- if tools %}<|system|>
10
+ # Tools
11
+
12
+ You may call one or more functions to assist with the user query.
13
+
14
+ You are provided with function signatures within <tools></tools> XML tags:
15
+ <tools>
16
+ {%- for tool in tools %}
17
+ {%- set fn = tool.function if tool.function is defined else tool %}
18
+ {{ fn | tojson(ensure_ascii=False) }}
19
+ {%- endfor %}
20
+ </tools>
21
+
22
+ For each function call, output the function name and arguments within the following XML format:
23
+ <tool_call>{function-name}<arg_key>{arg-key-1}</arg_key><arg_value>{arg-value-1}</arg_value>...</tool_call>
24
+ {% endif -%}
25
+ {%- endset -%}
26
+ {%- set ns = namespace(tools_pending=true) -%}
27
+ {%- for m in messages -%}
28
+ {%- if ns.tools_pending and m.role != 'system' -%}
29
+ {{ tool_preamble }}
30
+ {%- set ns.tools_pending = false -%}
31
+ {%- endif -%}
32
+ {%- if m.role == 'system' -%}
33
+ <|system|>{{ flint_text(m.content) }}
34
+ {%- elif m.role == 'developer' -%}
35
+ <|developer|>{{ flint_text(m.content) }}
36
+ {%- elif m.role == 'user' -%}
37
+ <|user|>{{ flint_text(m.content) }}
38
+ {%- elif m.role == 'assistant' -%}
39
+ <|assistant|>
40
+ {%- if m.reasoning_content %}<think>{{ m.reasoning_content }}</think>{% endif -%}
41
+ {%- if m.content %}{{ m.content }}{% endif -%}
42
+ {%- if m.tool_calls -%}
43
+ {%- for tc in m.tool_calls -%}
44
+ {%- set fn = tc.function if tc.function is defined else tc -%}
45
+ <tool_call>{{ fn.name }}
46
+ {%- for k, v in fn.arguments.items() -%}
47
+ <arg_key>{{ k }}</arg_key><arg_value>{{ v | tojson(ensure_ascii=False) if v is not string else v }}</arg_value>
48
+ {%- endfor -%}
49
+ </tool_call>
50
+ {%- endfor -%}
51
+ {%- endif -%}
52
+ {%- elif m.role == 'tool' -%}
53
+ <|observation|><tool_response>{{ flint_text(m.content) }}</tool_response>
54
+ {%- endif -%}
55
+ {%- endfor -%}
56
+ {%- if ns.tools_pending -%}
57
+ {{ tool_preamble }}
58
+ {%- endif -%}
59
+ {%- if add_generation_prompt -%}
60
+ <|assistant|>
61
+ {%- endif -%}
config.json ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "FlintForCausalLM"
4
+ ],
5
+ "model_type": "flint",
6
+ "attention_bias": false,
7
+ "attention_dropout": 0.0,
8
+ "bos_token_id": 150000,
9
+ "decoder_sparse_step": 1,
10
+ "eos_token_id": [
11
+ 150001,
12
+ 150003,
13
+ 150005,
14
+ 150018
15
+ ],
16
+ "head_dim": 128,
17
+ "hidden_act": "silu",
18
+ "hidden_size": 2048,
19
+ "initializer_range": 0.02,
20
+ "intermediate_size": 6144,
21
+ "layer_types": [
22
+ "full_attention",
23
+ "full_attention",
24
+ "sliding_attention",
25
+ "sliding_attention",
26
+ "sliding_attention",
27
+ "full_attention",
28
+ "sliding_attention",
29
+ "sliding_attention",
30
+ "sliding_attention",
31
+ "full_attention",
32
+ "sliding_attention",
33
+ "sliding_attention",
34
+ "sliding_attention",
35
+ "full_attention",
36
+ "sliding_attention",
37
+ "sliding_attention",
38
+ "sliding_attention",
39
+ "full_attention",
40
+ "sliding_attention",
41
+ "sliding_attention",
42
+ "sliding_attention",
43
+ "full_attention",
44
+ "sliding_attention",
45
+ "sliding_attention",
46
+ "sliding_attention",
47
+ "full_attention",
48
+ "sliding_attention",
49
+ "sliding_attention",
50
+ "sliding_attention",
51
+ "full_attention",
52
+ "sliding_attention",
53
+ "sliding_attention",
54
+ "sliding_attention",
55
+ "full_attention",
56
+ "sliding_attention",
57
+ "sliding_attention",
58
+ "sliding_attention",
59
+ "full_attention",
60
+ "sliding_attention",
61
+ "sliding_attention",
62
+ "sliding_attention",
63
+ "full_attention",
64
+ "sliding_attention",
65
+ "sliding_attention",
66
+ "sliding_attention",
67
+ "full_attention",
68
+ "sliding_attention",
69
+ "sliding_attention",
70
+ "full_attention"
71
+ ],
72
+ "max_position_embeddings": 262144,
73
+ "mlp_only_layers": [
74
+ 0,
75
+ 1
76
+ ],
77
+ "moe_intermediate_size": 512,
78
+ "norm_topk_prob": true,
79
+ "num_attention_heads": 32,
80
+ "num_experts": 256,
81
+ "num_experts_per_tok": 6,
82
+ "num_hidden_layers": 49,
83
+ "num_key_value_heads": 4,
84
+ "no_rope_layer_indices": [
85
+ 0,
86
+ 1,
87
+ 5,
88
+ 9,
89
+ 13,
90
+ 17,
91
+ 21,
92
+ 25,
93
+ 29,
94
+ 33,
95
+ 37,
96
+ 41,
97
+ 45,
98
+ 48
99
+ ],
100
+ "output_router_logits": false,
101
+ "pad_token_id": 150001,
102
+ "rms_norm_eps": 1e-06,
103
+ "rope_theta": 10000.0,
104
+ "router_aux_loss_coef": 0.0005,
105
+ "router_score_function": "sigmoid",
106
+ "shared_expert_intermediate_size": 1024,
107
+ "sliding_window": 513,
108
+ "softmax_type": "learnable",
109
+ "tie_word_embeddings": false,
110
+ "torch_dtype": "bfloat16",
111
+ "use_cache": true,
112
+ "use_sliding_window": true,
113
+ "vocab_size": 150144,
114
+ "transformers_version": "5.12.1"
115
+ }
generation_config.json ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "bos_token_id": 150000,
3
+ "eos_token_id": [
4
+ 150001,
5
+ 150003,
6
+ 150005,
7
+ 150018
8
+ ],
9
+ "pad_token_id": 150001,
10
+ "do_sample": true,
11
+ "temperature": 1.0,
12
+ "top_p": 0.95,
13
+ "top_k": 20
14
+ }
model-00001-of-00015.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:68cd9eaa364a7d72216972f96cde0c308167779e70237e5912ef74aeab758007
3
+ size 5369025064
model-00002-of-00015.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:73c8cab39d0eee3c90bbcf2ed521895434dab3dd624943b3f91507cfabc5c311
3
+ size 5369025168
model-00003-of-00015.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ce22b7f058fdf8911c5a5aa851cd497b6bb804587398b1e3294e427d4bdd1052
3
+ size 5369026736
model-00004-of-00015.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f1d4f30d95f889e7e1a20cfa13ee43745a240b3e80ae60c9464eea3207ca4e51
3
+ size 5369027984
model-00005-of-00015.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:fbf98aef1c1a1b125d49e65b73330f1c00b64f0256edd871d4926f9c73685397
3
+ size 5369027520
model-00006-of-00015.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:842c5070e8fc19b97575b14ec152cca9fd57a248fb0e21c7b53a50f019372ab4
3
+ size 5369027848
model-00007-of-00015.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b41e9e17f6b992b383a171d5a3b32efbb624cb3a8cece1ca925c06c339d7aa17
3
+ size 5369027984
model-00008-of-00015.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:8c791da3f5e8dab4700f76725e6d235f8e7125ea09ce927a11c5261df17a65e6
3
+ size 5369027632
model-00009-of-00015.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:73b01b243634f802f8945717bbebd4df625dd55de3b5ce392469f0b4fe7f15f2
3
+ size 5369027848
model-00010-of-00015.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:bc105215b9a6061bca130fbda3d566b9597eaf5b1bf51316da81e624085460bb
3
+ size 5369027984
model-00011-of-00015.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2105fde6c535b135fc95413279e69016a28569a08e992eb8fea17bad385d9349
3
+ size 5369027632
model-00012-of-00015.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ae1d074ba5ca8b456251eaac9d7b54ab0c7c1121821a4abb4a78cceb2ad9641f
3
+ size 5367976344
model-00013-of-00015.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e91ccbbe2d681c2c128298700595d8c6ac6764ef88b7ff8c6327a6e5cfa5ef8c
3
+ size 5368466032
model-00014-of-00015.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5c6801977bd0bf6822befa658e490cbf37c81ab4190cdcc72839aac72329b2a8
3
+ size 5369027736
model-00015-of-00015.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:58635712b79734cbcad6324157606c674d12303665badc2965955496bb8263bc
3
+ size 4410368544
model.safetensors.index.json ADDED
The diff for this file is too large to render. See raw diff
 
sglang/Dockerfile ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Flint serving image: SGLang v0.5.16 + the flint_sglang model package + the FA4 learned-sink fix.
2
+ # Build from the directory that contains this file, install.sh, the flint_sglang wheel and the patch:
3
+ # docker build -t flint-sglang .
4
+ # Host requirement: NVIDIA driver >= 580 (CUDA 13), or CUDA forward compatibility on older
5
+ # datacenter drivers (the image ships it in /usr/local/cuda/compat).
6
+ # lmsysorg/sglang:v0.5.16-cu130 (multi-arch index digest the kit was validated with)
7
+ FROM lmsysorg/sglang@sha256:7b6a35df9839fd593a94a1eaee82d7777f472225d9f3ad1f8a2e0cb2bd1785d0
8
+
9
+ COPY install.sh fa4-learned-sink-fix.patch flint_sglang-*.whl /tmp/flint-build/
10
+ RUN bash /tmp/flint-build/install.sh /tmp/flint-build && rm -rf /tmp/flint-build
11
+
12
+ ENV FLASHINFER_VERSION=0.6.16.post1 \
13
+ SGLANG_EXTERNAL_MODEL_PACKAGE=flint_sglang \
14
+ FLASHINFER_USE_CUDA_NORM=1
sglang/NOTICE ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ flint_sglang builds on SGLang (https://github.com/sgl-project/sglang).
2
+ Copyright 2023-2024 SGLang Team. Licensed under the Apache License, Version 2.0 (see LICENSE).
3
+ Portions of flint_sglang/model.py are adapted from SGLang and modified.
4
+
5
+ fa4-learned-sink-fix.patch modifies the FlashAttention-4 kernel vendored in SGLang
6
+ (https://github.com/Dao-AILab/flash-attention). It fixes learned-sink normalization and includes
7
+ the TMEM-allocation barrier change from Dao-AILab/flash-attention#2913. That code is distributed
8
+ under the following license:
9
+
10
+ BSD 3-Clause License
11
+
12
+ Copyright (c) 2022, the respective contributors, as shown by the AUTHORS file.
13
+ All rights reserved.
14
+
15
+ Redistribution and use in source and binary forms, with or without
16
+ modification, are permitted provided that the following conditions are met:
17
+
18
+ * Redistributions of source code must retain the above copyright notice, this
19
+ list of conditions and the following disclaimer.
20
+
21
+ * Redistributions in binary form must reproduce the above copyright notice,
22
+ this list of conditions and the following disclaimer in the documentation
23
+ and/or other materials provided with the distribution.
24
+
25
+ * Neither the name of the copyright holder nor the names of its
26
+ contributors may be used to endorse or promote products derived from
27
+ this software without specific prior written permission.
28
+
29
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
30
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
31
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
32
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
33
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
34
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
35
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
36
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
37
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
38
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39
+
40
+ install.sh downloads third-party packages at build time (including nvidia-cutlass-dsl, distributed
41
+ under the NVIDIA Software License Agreement); they are governed by their own licenses.
sglang/README.md ADDED
@@ -0,0 +1,202 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Serving Flint with SGLang
2
+
3
+ This directory is Flint's serving kit for SGLang 0.5.16: the `flint_sglang` model package (a wheel), a
4
+ Dockerfile, `install.sh` for existing containers, the FA4 learned-sink patch, serve scripts and two
5
+ example clients. The commands below pin a commit of this repository.
6
+
7
+ Flint reasons at length on hard problems (see `max_tokens` below).
8
+
9
+ ## Quick start (Docker, one GPU)
10
+
11
+ Requirements:
12
+ - One GPU with ≥141 GB per replica: B300/B200 (Blackwell) or H200 (Hopper). 80 GB GPUs are not supported.
13
+ - NVIDIA driver ≥ 580 (CUDA 13). Older datacenter drivers (e.g. R570) work through the CUDA
14
+ forward-compatibility libraries in the image (`/usr/local/cuda/compat`), which recent NVIDIA
15
+ Container Toolkit and enroot setups pick up automatically. Tested: B300 with 580.126.20, H200 with 570.133.20.
16
+ - Building the image needs access to Docker Hub, pypi.org/files.pythonhosted.org, flashinfer.ai and
17
+ github.com (FlashInfer release assets).
18
+ - About 80 GB of disk for the weights plus about 50 GB for the image.
19
+
20
+ ```bash
21
+ pip install -U huggingface_hub openai
22
+ REV=$(python3 -c "from huggingface_hub import HfApi; print(HfApi().model_info('RecursiveSI/flint').sha)")
23
+ hf download RecursiveSI/flint --revision "$REV" --local-dir "flint-$REV"
24
+ cd "flint-$REV" && hf cache verify RecursiveSI/flint --revision "$REV" --local-dir . # verify the download
25
+ docker build -t "flint-sglang:${REV:0:12}" sglang
26
+ docker run -d --name flint --gpus '"device=0"' --ipc=host -p 127.0.0.1:30000:30000 \
27
+ -v "$PWD:/model" -e MODEL=/model "flint-sglang:${REV:0:12}" \
28
+ bash /model/sglang/serve_b300.sh # on H200: serve_h200.sh
29
+ until curl -sf localhost:30000/health_generate >/dev/null; do sleep 15; done # progress: docker logs -f flint
30
+ python3 sglang/example_client.py --base-url http://localhost:30000/v1
31
+ python3 sglang/example_tools.py --base-url http://localhost:30000/v1 # nested tool arguments, parallel calls
32
+ ```
33
+
34
+ The first start takes about 4 minutes on a B300 with the weights on fast local storage (longer when
35
+ many replicas read the weights from network storage at once; budget up to 15 minutes). The log
36
+ shows `Flint weights loaded: 585 parameters matched the checkpoint.` and then
37
+ `The server is fired up and ready to roll!`. `example_client.py` prints the reasoning, a
38
+ `get_weather` call for Paris, and a final answer that uses the tool result (sunny, 21C).
39
+ `example_tools.py` books a meeting and fills a cart through tools with nested argument schemas
40
+ (enums, patterns, bounds, arrays of objects) and makes three parallel weather calls. It answers each
41
+ call with a canned result, which Flint's final answers report.
42
+
43
+ ## Serve scripts
44
+
45
+ Requests use the model name `flint`. Arguments after the script name are appended to
46
+ `sglang.launch_server`, so a repeated flag overrides the script's value, e.g.
47
+ `bash /model/sglang/serve_b300.sh --mem-fraction-static 0.85`.
48
+
49
+ | Variable | Default | Notes |
50
+ |---|---|---|
51
+ | `MODEL` | `RecursiveSI/flint` | Use the local download (`/model` in Docker). With the Hub id the server downloads 79.6 GB at start-up. |
52
+ | `REVISION` | unset | Hub commit when `MODEL` is a Hub id (ignored for local paths). |
53
+ | `PORT` | `30000` | Replica port. |
54
+ | `CUDA_VISIBLE_DEVICES` | all GPUs | GPU of a single replica (the server uses the first visible GPU). |
55
+ | `FLINT_TRITON_CACHE_BASE` | `$HOME/.triton/cache` | Kernel cache root; each replica uses its own `flint-<host>-<port>` subdirectory. Mount a volume here to keep compiled kernels across container restarts. |
56
+
57
+ The servers listen on 0.0.0.0 without authentication: publish ports only on localhost or a private
58
+ network, or append `--api-key <key>` and give clients the same key.
59
+
60
+ ## Validated configurations
61
+
62
+ One GPU per replica:
63
+ - B300 (x86_64): `serve_b300.sh` (`--attention-backend fa4 --moe-runner-backend flashinfer_trtllm_routed`).
64
+ B200 and GB200/GB300 (arm64) use the same flags but are not validated yet.
65
+ - H200: `serve_h200.sh` (`--attention-backend fa3 --moe-runner-backend triton`).
66
+
67
+ Both use `--enable-fp32-lm-head --context-length 262144`. The other settings are those Flint was
68
+ evaluated with on each GPU type (B300: `--mem-fraction-static 0.8 --swa-full-tokens-ratio 0.05`;
69
+ H200: `0.9` / `0.4`).
70
+
71
+ The model refuses to start with a MoE runner other than `flashinfer_trtllm_routed`, `triton` or
72
+ `auto` (`flashinfer_trtllm` and `triton_kernel` bypass Flint's sigmoid routing), with any
73
+ `--moe-a2a-backend`, with an unpatched FA4 kernel, or if FlashInfer does not use its CUDA RMSNorm
74
+ kernels (`FLASHINFER_USE_CUDA_NORM=1`, which the image and `flint_sglang` set). `--attention-backend
75
+ flashinfer` does not support attention sinks. Tensor, expert or pipeline parallelism, DP attention,
76
+ quantized weights or KV cache (e.g. FP8) and speculative decoding are not validated.
77
+
78
+ ## Several replicas behind a router
79
+
80
+ Replicas are independent single-GPU servers; the router (`sglang_router` 0.3.2, included in the
81
+ image) spreads requests over them.
82
+
83
+ ```bash
84
+ # 8 replicas on one 8-GPU node, ports 30000-30007 (Blackwell; on H200 add -e SERVE_SCRIPT=serve_h200.sh)
85
+ docker run -d --name flint-8x --gpus all --ipc=host -p 30000-30007:30000-30007 \
86
+ -v "$PWD:/model" -e MODEL=/model "flint-sglang:${REV:0:12}" bash /model/sglang/serve_node_8x.sh
87
+ # router on any host that can reach every replica
88
+ docker run -d --name flint-router --network host "flint-sglang:${REV:0:12}" \
89
+ python3 -m sglang_router.launch_router --host 0.0.0.0 --port 8000 --policy cache_aware \
90
+ --worker-urls $(for n in node0 node1; do for p in $(seq 30000 30007); do printf 'http://%s:%d ' $n $p; done; done)
91
+ ```
92
+
93
+ `serve_node_8x.sh` stops all 8 replicas when one exits; for independent restarts run one container
94
+ per GPU instead (`--gpus '"device=N"'`, `-e PORT=3000N`).
95
+
96
+ ## Existing container (no image build), e.g. enroot/pyxis
97
+
98
+ Inside a container of the base image pinned in `sglang/Dockerfile` (`lmsysorg/sglang:v0.5.16-cu130`),
99
+ with network access:
100
+
101
+ ```bash
102
+ bash flint-$REV/sglang/install.sh flint-$REV/sglang # ends with: Flint support installed (flint_sglang-0.1.4-py3-none-any.whl).
103
+ MODEL=$PWD/flint-$REV PORT=30000 bash flint-$REV/sglang/serve_h200.sh # Blackwell: serve_b300.sh
104
+ ```
105
+
106
+ `install.sh` changes the container in place (FlashInfer 0.6.16.post1, CUTLASS DSL 4.6.2, the patched
107
+ FA4 kernel, `flint_sglang`), can be re-run, and works without root if the container's system Python
108
+ is writable (enroot/pyxis containers are). Keep or save that container (pyxis:
109
+ `--container-save=flint-sglang.sqsh`); a fresh copy of the base image has no Flint support. On H200
110
+ the FA4 patch is applied but unused.
111
+
112
+ ## Capacity and tuning
113
+
114
+ - KV cache per token: 28 KiB on the 14 full-attention layers (≈7.5 GB for one 262,144-token
115
+ sequence) plus 70 KiB on the 35 sliding-window layers, which keep only the last 513 tokens of
116
+ each running request.
117
+ - `--mem-fraction-static` is the share of GPU memory for the weights (79.6 GB) plus the KV pools.
118
+ - `--swa-full-tokens-ratio` sizes the sliding-window pool relative to the full-attention pool:
119
+ raise it for many concurrent short requests, lower it for few long ones.
120
+
121
+ ## Chat format and API usage
122
+
123
+ Tool definitions appear after leading system messages, before the first developer or other role.
124
+
125
+ - Use `/v1/chat/completions` with the parsers and grammar backend in the serve scripts
126
+ (`--tool-call-parser flint --reasoning-parser flint --grammar-backend flint`). Flint refuses to
127
+ start without `--grammar-backend flint` and `--reasoning-parser flint`, or with
128
+ `--enable-strict-thinking` or `--constrained-json-disable-any-whitespace`, which that backend
129
+ doesn't support. Without a tool-call parser, tool calls stay as literal `<tool_call>` text in
130
+ `content`.
131
+ - Tool-call grammar: `--tool-call-parser flint` parses Flint's tool calls and constrains every
132
+ request with `tools` (unless `tool_choice` is `none`) with XGrammar to Flint's format: an optional
133
+ `<think>…</think>` (from `--grammar-backend flint`), text without protocol markers, then tool calls
134
+ to the request's tools: any number with `tool_choice` `auto`, at least one with `required`, exactly
135
+ one call of the named function with a named choice. As in OpenAI's API, a tool's arguments must
136
+ match its JSON schema only when the tool is sent with `"strict": true`; they are then also written
137
+ in the order the tool declares its parameters (list optional parameters where they belong). Follow
138
+ OpenAI's strict-mode rules: give every object `properties` or `additionalProperties` and every array
139
+ `items` (otherwise XGrammar accepts no value for the object and only `[]` for the array); a strict
140
+ schema XGrammar can't compile (for example a pattern with a lookahead) fails the request. Other
141
+ tools keep the call format but not their schema.
142
+ `parallel_tool_calls: false` allows a single call. The turn still ends with Flint's stop tokens.
143
+ - Tool-call limits:
144
+ - A strict string value (an enum, `const`, `pattern`, `format` or `maxLength`) written with whitespace
145
+ around it fails its schema: XGrammar allows the whitespace and the parser keeps it. Flint rarely
146
+ does this; it has been seen on a prompt that asks it to print a tool call as text.
147
+ - A string argument can't contain the literal text `</tool_call>`. The format has no escaping, so the
148
+ parser ends the call there and reads the rest as output: text Flint copies into an argument can
149
+ add a call, without arguments, to a listed tool.
150
+ - When streaming, a call whose last argument is a JSON object can arrive without its final `}`.
151
+ SGLang adds it back only for the response's last call.
152
+ - With `tool_choice: "none"` nothing is constrained, so call markup Flint writes can reach `content`.
153
+ - Structured output: `response_format` (`json_schema`, `json_object` or `structural_tag`) and SGLang's
154
+ `regex` and `ebnf` parameters constrain `content`. Flint may first reason in `<think>…</think>`
155
+ (returned in `reasoning_content`), and the constraint applies to the answer after it. A request with
156
+ both `tools` and a response format gets only the response format, and `<tool_call>` text in the
157
+ answer is still read as a tool call. Use `/v1/chat/completions`: `/generate` and `/v1/completions`
158
+ return Flint's raw text, including any `<think>…</think>` written before a constrained answer.
159
+ - Sampling: temperature 1.0, top_p 0.95, top_k 20. These are the `generation_config.json` defaults
160
+ the server applies when a request omits them; OpenAI clients pass `top_k` via `extra_body`.
161
+ Greedy decoding is not validated.
162
+ - Reasoning: the model decides on each turn whether to reason in `<think>…</think>` (there is no
163
+ switch or budget). Reasoning is returned in `reasoning_content` and counts toward `max_tokens`:
164
+ on GPQA-Diamond it used a median of 4.3K tokens (p95 33K, p99 46K; about 5% of answers exceed 32K).
165
+ Use `max_tokens` of at least 32768 for hard problems (Flint was evaluated with up to 81920); `finish_reason: "length"` means the
166
+ turn was cut off, possibly before any content or tool call. Keep `reasoning_content` on assistant
167
+ messages when you send the conversation back. `thinking` / `enable_thinking` in
168
+ `chat_template_kwargs` have no effect: the `flint` reasoning parser reads `<think>…</think>` when
169
+ Flint writes it and never assumes a turn starts in reasoning, so turns without reasoning keep their
170
+ content and their tool-call grammar.
171
+ - Messages: content must be a string (flatten content-part arrays). A `developer` message uses
172
+ its own `<|developer|>` role marker (token ID 150018). There is no default system prompt. As in
173
+ training, the template removes NUL characters and `<think>`/`</think>` from system, developer,
174
+ user and tool text and escapes role markers there (`<|user|>` becomes `&lt;|user|&gt;`). It does
175
+ not escape the tool tags (`<tool_call>`, `<tool_response>`, `<arg_key>`, `<arg_value>`); strip
176
+ those from untrusted tool output.
177
+ - Tools: send `tools` with every request. Each function definition is rendered as the template
178
+ receives it; through the server that is `description`, `name`, `parameters` and `strict` (other
179
+ fields are dropped). Send `function.arguments` back unchanged (the JSON string you received) and
180
+ one `tool` message per call, in the order of `tool_calls`. When calling `apply_chat_template`
181
+ directly, decode argument strings into dictionaries first.
182
+ - Generation stops at `<|end_of_text|>`, `<|user|>`, `<|observation|>` or `<|developer|>`
183
+ (ids 150001, 150003, 150005, 150018). No BOS token is used for chat.
184
+
185
+ ## Versions and verification
186
+
187
+ - Quote the full commit SHA (`$REV`) in results and bug reports. Download each commit into a new
188
+ directory (`hf download` does not delete files removed upstream).
189
+ - Serving kit: SGLang 0.5.16 (base image pinned by digest in `sglang/Dockerfile`; includes
190
+ transformers 5.12.1, torch 2.11.0+cu130, sglang-router 0.3.2), `flint_sglang` 0.1.4, FlashInfer
191
+ 0.6.16.post1, nvidia-cutlass-dsl 4.6.2, quack-kernels 0.6.4, apache-tvm-ffi 0.1.12.
192
+
193
+ When reporting a problem, include the commit SHA, the image ID (`docker inspect --format '{{.Id}}'
194
+ flint-sglang:<tag>`), `nvidia-smi` output, the launch command including extra arguments, the start-up
195
+ log and, for output problems, the request JSON and the raw response.
196
+
197
+ ## Transformers
198
+
199
+ The tokenizer and chat template load with `AutoTokenizer.from_pretrained`; decode each
200
+ `tool_calls[].function.arguments` string into a dict before `apply_chat_template`. Transformers does
201
+ not support Flint yet, so `config.json` loads with `FlintConfig.from_pretrained` from
202
+ `flint_sglang.configuration_flint` (transformers ≥ 5.8, tested with 5.12.1) rather than `AutoConfig`.
sglang/example_client.py ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Minimal OpenAI-compatible client for a Flint SGLang server, with one tool-calling round trip.
2
+
3
+ pip install openai
4
+ python3 example_client.py --base-url http://localhost:30000/v1 [--api-key KEY]
5
+ """
6
+
7
+ import argparse
8
+ import json
9
+ import os
10
+
11
+ from openai import OpenAI
12
+
13
+ SAMPLING = {"temperature": 1.0, "top_p": 0.95, "extra_body": {"top_k": 20}}
14
+ MAX_TOKENS = 32768 # reasoning counts toward max_tokens
15
+
16
+ TOOLS = [
17
+ {
18
+ "type": "function",
19
+ "function": {
20
+ "name": "get_weather",
21
+ "description": "Get the current weather for a city.",
22
+ "parameters": {
23
+ "type": "object",
24
+ "properties": {"city": {"type": "string", "description": "City name"}},
25
+ "required": ["city"],
26
+ },
27
+ },
28
+ }
29
+ ]
30
+
31
+
32
+ def main() -> None:
33
+ parser = argparse.ArgumentParser()
34
+ parser.add_argument("--base-url", default="http://localhost:30000/v1")
35
+ parser.add_argument("--api-key", default=os.environ.get("FLINT_API_KEY", "unused"))
36
+ args = parser.parse_args()
37
+ client = OpenAI(base_url=args.base_url, api_key=args.api_key)
38
+
39
+ messages = [
40
+ {"role": "system", "content": "You are a helpful assistant."},
41
+ {"role": "user", "content": "What's the weather in Paris right now?"},
42
+ ]
43
+ first = client.chat.completions.create(
44
+ model="flint", messages=messages, tools=TOOLS, max_tokens=MAX_TOKENS, **SAMPLING
45
+ )
46
+ choice = first.choices[0]
47
+ reply = choice.message
48
+ print("reasoning:", getattr(reply, "reasoning_content", None))
49
+ print("tool calls:", reply.tool_calls)
50
+ if choice.finish_reason == "length":
51
+ print(f"cut off: the turn used all {MAX_TOKENS} tokens (reasoning counts toward max_tokens)")
52
+ return
53
+ if not reply.tool_calls:
54
+ print("content:", reply.content)
55
+ return
56
+
57
+ # Echo the assistant turn (including reasoning_content) back unchanged, then add tool results.
58
+ messages.append(reply.model_dump(exclude_none=True))
59
+ for call in reply.tool_calls:
60
+ city = json.loads(call.function.arguments)["city"]
61
+ messages.append(
62
+ {"role": "tool", "tool_call_id": call.id, "content": json.dumps({"city": city, "forecast": "sunny, 21C"})}
63
+ )
64
+ second = client.chat.completions.create(
65
+ model="flint", messages=messages, tools=TOOLS, max_tokens=MAX_TOKENS, **SAMPLING
66
+ )
67
+ print("final answer:", second.choices[0].message.content)
68
+
69
+
70
+ if __name__ == "__main__":
71
+ main()
sglang/example_tools.py ADDED
@@ -0,0 +1,178 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Tool calls with nested argument schemas against a Flint SGLang server.
2
+
3
+ pip install openai
4
+ python3 example_tools.py --base-url http://localhost:30000/v1 [--api-key KEY]
5
+
6
+ The serve scripts start SGLang with --tool-call-parser flint, which constrains each assistant turn that
7
+ has tools to Flint's tool-call format: tool names must be ones the request lists, and the arguments of a
8
+ tool sent with "strict": true must match its JSON schema (types, enums, patterns, numeric bounds,
9
+ required fields). The tools below send "strict": true; other tools keep the format but not the schema.
10
+ Each call gets a canned result (tool_result below), which Flint's final answers report.
11
+ """
12
+
13
+ import argparse
14
+ import json
15
+ import os
16
+
17
+ from openai import OpenAI
18
+
19
+ SAMPLING = {"temperature": 1.0, "top_p": 0.95, "extra_body": {"top_k": 20}}
20
+ MAX_TOKENS = 32768 # reasoning counts toward max_tokens
21
+ TIME = {"type": "string", "pattern": "^([01][0-9]|2[0-3]):[0-5][0-9]$"}
22
+ WEATHER = {"paris": ("sunny", 21), "tokyo": ("cloudy", 17), "lima": ("light rain", 19)} # canned (conditions, °C)
23
+
24
+ TOOLS = [
25
+ {
26
+ "type": "function",
27
+ "function": {
28
+ "name": "create_event",
29
+ "strict": True,
30
+ "description": "Create a calendar event.",
31
+ "parameters": {
32
+ "type": "object",
33
+ "properties": {
34
+ "title": {"type": "string"},
35
+ "date": {"type": "string", "pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}$", "description": "YYYY-MM-DD"},
36
+ "start_time": {**TIME, "description": "24-hour HH:MM"},
37
+ "duration_minutes": {"type": "integer", "minimum": 5, "maximum": 480},
38
+ "attendees": {
39
+ "type": "array",
40
+ "minItems": 1,
41
+ "items": {
42
+ "type": "object",
43
+ "properties": {"name": {"type": "string"}, "email": {"type": "string"}},
44
+ "required": ["name", "email"],
45
+ "additionalProperties": False,
46
+ },
47
+ },
48
+ "reminders_minutes": {"type": "array", "items": {"type": "integer", "minimum": 0}},
49
+ "priority": {"type": "string", "enum": ["LOW", "NORMAL", "HIGH_PRIORITY"]},
50
+ },
51
+ "required": ["title", "date", "start_time", "duration_minutes", "attendees", "priority"],
52
+ "additionalProperties": False,
53
+ },
54
+ },
55
+ },
56
+ {
57
+ "type": "function",
58
+ "function": {
59
+ "name": "add_to_cart",
60
+ "strict": True,
61
+ "description": "Add products to the shopping cart.",
62
+ "parameters": {
63
+ "type": "object",
64
+ "properties": {
65
+ "items": {
66
+ "type": "array",
67
+ "minItems": 1,
68
+ "items": {
69
+ "type": "object",
70
+ "properties": {
71
+ "sku": {"type": "string", "pattern": "^[A-Z]{3}-[0-9]{4}$"},
72
+ "quantity": {"type": "integer", "minimum": 1, "maximum": 99},
73
+ "gift_wrap": {"type": "boolean"},
74
+ },
75
+ "required": ["sku", "quantity", "gift_wrap"],
76
+ "additionalProperties": False,
77
+ },
78
+ },
79
+ "coupon": {"type": "string", "description": "Coupon code; omit when there is none"},
80
+ },
81
+ "required": ["items"],
82
+ "additionalProperties": False,
83
+ },
84
+ },
85
+ },
86
+ {
87
+ "type": "function",
88
+ "function": {
89
+ "name": "get_weather",
90
+ "strict": True,
91
+ "description": "Get the current weather for a city.",
92
+ "parameters": {
93
+ "type": "object",
94
+ "properties": {
95
+ "city": {"type": "string"},
96
+ "unit": {"type": "string", "enum": ["celsius", "fahrenheit"]},
97
+ },
98
+ "required": ["city", "unit"],
99
+ "additionalProperties": False,
100
+ },
101
+ },
102
+ },
103
+ ]
104
+
105
+ REQUESTS = [
106
+ "Book 'Q4 planning' on October 21st, 2026 at 2:30 PM for 45 minutes with Ana (ana@example.com) and Bo "
107
+ "(bo@example.com). Remind us 10 minutes and one hour before. It is urgent.",
108
+ "Add two gift-wrapped mugs (SKU MUG-0042) and one notebook (SKU NTB-1001, no gift wrap) to my cart. No coupon.",
109
+ "What's the weather in Paris, Tokyo and Lima? Use celsius.",
110
+ ]
111
+
112
+
113
+ def main() -> None:
114
+ parser = argparse.ArgumentParser()
115
+ parser.add_argument("--base-url", default="http://localhost:30000/v1")
116
+ parser.add_argument("--api-key", default=os.environ.get("FLINT_API_KEY", "unused"))
117
+ args = parser.parse_args()
118
+ client = OpenAI(base_url=args.base_url, api_key=args.api_key)
119
+ for request in REQUESTS:
120
+ run(client, request)
121
+
122
+
123
+ def run(client: OpenAI, request: str) -> None:
124
+ print(f"\n>>> {request}")
125
+ messages = [{"role": "user", "content": request}]
126
+ choice = client.chat.completions.create(
127
+ model="flint", messages=messages, tools=TOOLS, max_tokens=MAX_TOKENS, **SAMPLING
128
+ ).choices[0]
129
+ if choice.finish_reason == "length":
130
+ print(f"cut off: the turn used all {MAX_TOKENS} tokens (reasoning counts toward max_tokens)")
131
+ return
132
+ reply = choice.message
133
+ if not reply.tool_calls:
134
+ print("content:", reply.content)
135
+ return
136
+ for call in reply.tool_calls:
137
+ print(f"{call.function.name}:", json.dumps(json.loads(call.function.arguments), ensure_ascii=False))
138
+
139
+ # Echo the assistant turn back unchanged, answer every call, and let Flint finish the turn.
140
+ messages.append(reply.model_dump(exclude_none=True))
141
+ for call in reply.tool_calls:
142
+ result = tool_result(call.function.name, json.loads(call.function.arguments))
143
+ print(f"{call.function.name} result:", json.dumps(result, ensure_ascii=False))
144
+ messages.append({"role": "tool", "tool_call_id": call.id, "content": json.dumps(result)})
145
+ final = client.chat.completions.create(
146
+ model="flint", messages=messages, tools=TOOLS, max_tokens=MAX_TOKENS, **SAMPLING
147
+ )
148
+ print("final answer:", final.choices[0].message.content)
149
+
150
+
151
+ def tool_result(name: str, arguments: dict) -> dict:
152
+ """Canned result for one call, standing in for a real calendar, shop and weather service."""
153
+ if name == "get_weather":
154
+ conditions, celsius = WEATHER.get(arguments["city"].lower(), ("clear", 20))
155
+ temperature = celsius if arguments["unit"] == "celsius" else round(celsius * 9 / 5 + 32)
156
+ return {
157
+ "city": arguments["city"],
158
+ "conditions": conditions,
159
+ "temperature": temperature,
160
+ "unit": arguments["unit"],
161
+ }
162
+ if name == "create_event":
163
+ return {
164
+ "status": "created",
165
+ "event_id": "evt_1042",
166
+ "title": arguments["title"],
167
+ "date": arguments["date"],
168
+ "start_time": arguments["start_time"],
169
+ }
170
+ return {
171
+ "status": "added",
172
+ "cart_id": "cart_77",
173
+ "items_added": sum(item["quantity"] for item in arguments["items"]),
174
+ }
175
+
176
+
177
+ if __name__ == "__main__":
178
+ main()
sglang/fa4-learned-sink-fix.patch ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ --- a/python/sglang/jit_kernel/flash_attn/cute/flash_fwd_sm100.py
2
+ +++ b/python/sglang/jit_kernel/flash_attn/cute/flash_fwd_sm100.py
3
+ @@ -448,6 +448,12 @@
4
+ self.load_warp_ids = (14, 15)
5
+ self.empty_warp_ids = ()
6
+
7
+ + self.tmem_alloc_warp_ids = (
8
+ + self.mma_warp_id,
9
+ + *self.softmax0_warp_ids,
10
+ + *self.softmax1_warp_ids,
11
+ + *self.correction_warp_ids,
12
+ + )
13
+ if self.use_correction_warps_for_epi:
14
+ self.empty_warp_ids = self.empty_warp_ids + self.epilogue_warp_ids
15
+ self.epilogue_warp_ids = self.correction_warp_ids
16
+ @@ -1732,15 +1738,7 @@
17
+
18
+ tmem_alloc_barrier = pipeline.NamedBarrier(
19
+ barrier_id=int(NamedBarrierFwdSm100.TmemPtr),
20
+ - num_threads=cute.arch.WARP_SIZE
21
+ - * len(
22
+ - (
23
+ - self.mma_warp_id,
24
+ - *self.softmax0_warp_ids,
25
+ - *self.softmax1_warp_ids,
26
+ - *self.correction_warp_ids,
27
+ - )
28
+ - ),
29
+ + num_threads=cute.arch.WARP_SIZE * len(self.tmem_alloc_warp_ids),
30
+ )
31
+ # Tensor memory dealloc barrier init
32
+ tmem = cutlass.utils.TmemAllocator(
33
+ @@ -2207,11 +2205,11 @@
34
+ # ///////////////////////////////////////////////////////////////////////////////
35
+ # MMA
36
+ # ///////////////////////////////////////////////////////////////////////////////
37
+ + tmem.allocate(cute.arch.get_max_tmem_alloc_cols("sm_100"))
38
+ + if warp_idx in self.tmem_alloc_warp_ids:
39
+ + tmem.wait_for_alloc()
40
+ if warp_idx == self.mma_warp_id:
41
+ cute.arch.setmaxregister_decrease(self.num_regs_other)
42
+ - # Alloc tensor memory buffer
43
+ - tmem.allocate(cute.arch.get_max_tmem_alloc_cols("sm_100"))
44
+ - tmem.wait_for_alloc()
45
+ tmem_ptr = tmem.retrieve_ptr(self.qk_acc_dtype)
46
+ self.mma(
47
+ tiled_mma_qk,
48
+ @@ -2278,8 +2276,6 @@
49
+ ) or (const_expr(self.q_stage == 1) and warp_idx <= self.softmax0_warp_ids[-1]):
50
+ # increase register after decreasing
51
+ cute.arch.setmaxregister_increase(self.num_regs_softmax)
52
+ - # sync with mma warp before retrieving tmem ptr
53
+ - tmem.wait_for_alloc()
54
+ tmem_ptr = tmem.retrieve_ptr(self.qk_acc_dtype)
55
+ softmax_loop = partial(
56
+ self.softmax_loop,
57
+ @@ -2335,8 +2331,6 @@
58
+ # ///////////////////////////////////////////////////////////////////////////////
59
+ if warp_idx >= self.correction_warp_ids[0] and warp_idx < self.mma_warp_id:
60
+ cute.arch.setmaxregister_decrease(self.num_regs_correction)
61
+ - # sync with mma warp before retrieving tmem ptr
62
+ - tmem.wait_for_alloc()
63
+ tmem_ptr = tmem.retrieve_ptr(self.qk_acc_dtype)
64
+ self.correction_loop(
65
+ thr_mma_qk,
66
+ @@ -4740,6 +4734,7 @@
67
+ else:
68
+ row_max = None
69
+ pipeline_sm_stats.consumer_release_w_index(stage)
70
+ + sink_rescale = Float32(1.0)
71
+ if const_expr(learnable_sink is not None):
72
+ LOG2_E = math.log2(math.e)
73
+ sink_val = learnable_sink_val[stage]
74
+ @@ -4749,18 +4744,22 @@
75
+ row_max = sink_val * (LOG2_E / softmax_scale_log2_eff)
76
+ row_sum = max_offset_scale
77
+ else:
78
+ - row_sum += cute.math.exp2(
79
+ - sink_val * LOG2_E
80
+ - - row_max * softmax_scale_log2_eff
81
+ - + max_offset,
82
+ + old_max_log2 = row_max * softmax_scale_log2_eff
83
+ + new_max_log2 = max(old_max_log2, sink_val * LOG2_E)
84
+ + sink_rescale = cute.math.exp2(
85
+ + old_max_log2 - new_max_log2, fastmath=True
86
+ + )
87
+ + row_sum = row_sum * sink_rescale + cute.math.exp2(
88
+ + sink_val * LOG2_E - new_max_log2 + max_offset,
89
+ fastmath=True,
90
+ )
91
+ + row_max = new_max_log2 / softmax_scale_log2_eff
92
+ acc_O_mn_row_is_zero_or_nan = row_sum == 0.0 or row_sum != row_sum
93
+ stats[stage] = (row_sum, row_max, acc_O_mn_row_is_zero_or_nan)
94
+ scale = cute.arch.rcp_approx(
95
+ row_sum if not acc_O_mn_row_is_zero_or_nan else 1.0
96
+ )
97
+ - scale = scale * v_descale
98
+ + scale = scale * sink_rescale * v_descale
99
+ # Wait for the last O to be ready from the MMA warp
100
+ pipeline_o_acc.consumer_wait_w_index_phase(
101
+ stage, o_corr_consumer_phase
sglang/flint_sglang-0.1.4-py3-none-any.whl ADDED
Binary file (23 kB). View file
 
sglang/install.sh ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env bash
2
+ # Install Flint support into an lmsysorg/sglang:v0.5.16-cu130 environment.
3
+ # Used by the Dockerfile; can also be run (and re-run, e.g. to upgrade) inside an existing
4
+ # container of that image, as root or not.
5
+ #
6
+ # bash install.sh <dir containing fa4-learned-sink-fix.patch and one flint_sglang-*.whl>
7
+ #
8
+ # Needs network access to pypi.org/files.pythonhosted.org, flashinfer.ai and github.com
9
+ # (FlashInfer release assets). For air-gapped hosts, pre-download the wheels and run with
10
+ # PIP_NO_INDEX=1 PIP_FIND_LINKS=<wheel dir>.
11
+ set -euo pipefail
12
+
13
+ SRC_DIR="${1:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)}"
14
+ # The image installs SGLang into the system Python; allow pip to update it there (PEP 668).
15
+ export PIP_BREAK_SYSTEM_PACKAGES=1 PIP_ROOT_USER_ACTION=ignore PIP_NO_CACHE_DIR=1
16
+
17
+ # flashinfer 0.6.16.post1: the base image's 0.6.14 can hang trtllm MoE kernels on Blackwell.
18
+ # The python, cubin and jit-cache wheels must move together.
19
+ pip install --force-reinstall --no-deps \
20
+ --extra-index-url "https://flashinfer.ai/whl" \
21
+ --extra-index-url "https://flashinfer.ai/whl/cu130" \
22
+ "flashinfer-python==0.6.16.post1" \
23
+ "flashinfer-cubin==0.6.16.post1" \
24
+ "flashinfer-jit-cache==0.6.16.post1"
25
+
26
+ # CuTe-DSL runtime used to JIT-compile the FA4 attention kernels (4.6.0/4.6.1 hang on sm_103).
27
+ pip install --force-reinstall --no-deps \
28
+ "nvidia-cutlass-dsl==4.6.2" \
29
+ "nvidia-cutlass-dsl-libs-base==4.6.2" \
30
+ "nvidia-cutlass-dsl-libs-core==4.6.2" \
31
+ "nvidia-cutlass-dsl-libs-cu12==4.6.2" \
32
+ "nvidia-cutlass-dsl-libs-cu13==4.6.2" \
33
+ "quack-kernels==0.6.4" \
34
+ "apache-tvm-ffi==0.1.12"
35
+
36
+ python3 - <<'EOF'
37
+ from importlib.metadata import version as v
38
+ expected = {
39
+ "flashinfer-python": "0.6.16.post1", "flashinfer-cubin": "0.6.16.post1", "flashinfer-jit-cache": "0.6.16.post1",
40
+ "nvidia-cutlass-dsl": "4.6.2", "nvidia-cutlass-dsl-libs-base": "4.6.2", "nvidia-cutlass-dsl-libs-core": "4.6.2",
41
+ "nvidia-cutlass-dsl-libs-cu12": "4.6.2", "nvidia-cutlass-dsl-libs-cu13": "4.6.2",
42
+ "quack-kernels": "0.6.4", "apache-tvm-ffi": "0.1.12",
43
+ }
44
+ bad = {p: v(p) for p, want in expected.items() if not v(p).startswith(want)}
45
+ assert not bad, f"unexpected package versions: {bad}"
46
+ EOF
47
+
48
+ # FA4 learned-sink normalization and TMEM-allocation barrier fix for SGLang's vendored
49
+ # FlashAttention-4 SM100 forward kernel. Required for --attention-backend fa4.
50
+ SGL_DIR="$(python3 -c "import pathlib, sglang; print(pathlib.Path(sglang.__file__).parent)")"
51
+ KERNEL="$SGL_DIR/jit_kernel/flash_attn/cute/flash_fwd_sm100.py"
52
+ PATCHED_SHA=6ead08491135efdf2bf40d649a0f5ad732542287c530240ea1726a5c64f8ade3
53
+ if echo "$PATCHED_SHA $KERNEL" | sha256sum -c --status -; then
54
+ echo "FA4 learned-sink fix already applied."
55
+ else
56
+ echo "9b27db3b1d1b64bcd6e15bd47648bb3f22fe5614f79794f850c3808612efd949 $KERNEL" | sha256sum -c -
57
+ patch -p3 -d "$SGL_DIR" < "$SRC_DIR/fa4-learned-sink-fix.patch"
58
+ echo "$PATCHED_SHA $KERNEL" | sha256sum -c -
59
+ fi
60
+
61
+ shopt -s nullglob
62
+ wheels=("$SRC_DIR"/flint_sglang-*.whl)
63
+ if [[ ${#wheels[@]} -ne 1 ]]; then
64
+ echo "expected exactly one flint_sglang-*.whl in $SRC_DIR, found ${#wheels[@]}" >&2
65
+ exit 1
66
+ fi
67
+ pip install --force-reinstall --no-deps "${wheels[0]}"
68
+ python3 -c "from importlib.metadata import entry_points; assert any(e.name == 'flint' for e in entry_points(group='sglang.srt.plugins'))"
69
+ echo "Flint support installed ($(basename "${wheels[0]}"))."
sglang/serve_b300.sh ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env bash
2
+ # One Flint replica on one Blackwell GPU. Validated on B300 (x86_64); B200 and GB200/GB300
3
+ # (arm64 image) use the same flags but are not yet validated.
4
+ #
5
+ # MODEL=/path/to/flint CUDA_VISIBLE_DEVICES=0 PORT=30000 bash serve_b300.sh
6
+ #
7
+ # Extra arguments are passed through to sglang.launch_server.
8
+ set -euo pipefail
9
+
10
+ MODEL="${MODEL:-RecursiveSI/flint}"
11
+ PORT="${PORT:-30000}"
12
+ revision_args=()
13
+ if [[ -n "${REVISION:-}" ]]; then
14
+ revision_args=(--revision "$REVISION")
15
+ fi
16
+
17
+ export SGLANG_EXTERNAL_MODEL_PACKAGE="${SGLANG_EXTERNAL_MODEL_PACKAGE:-flint_sglang}"
18
+ export FLASHINFER_USE_CUDA_NORM="${FLASHINFER_USE_CUDA_NORM:-1}"
19
+ # One Triton cache per replica: replicas compiling the same kernels into one cache directory can race.
20
+ export TRITON_CACHE_DIR="${FLINT_TRITON_CACHE_BASE:-${HOME:-/tmp}/.triton/cache}/flint-$(hostname)-${PORT}"
21
+
22
+ exec python3 -m sglang.launch_server \
23
+ --model-path "$MODEL" "${revision_args[@]}" \
24
+ --served-model-name flint \
25
+ --host 0.0.0.0 --port "$PORT" \
26
+ --tp-size 1 \
27
+ --attention-backend fa4 \
28
+ --moe-runner-backend flashinfer_trtllm_routed \
29
+ --enable-fp32-lm-head \
30
+ --context-length 262144 \
31
+ --chunked-prefill-size 4096 \
32
+ --swa-full-tokens-ratio 0.05 \
33
+ --mem-fraction-static 0.8 \
34
+ --disable-piecewise-cuda-graph \
35
+ --disable-flashinfer-autotune \
36
+ --tool-call-parser flint \
37
+ --reasoning-parser flint \
38
+ --grammar-backend flint \
39
+ "$@"
sglang/serve_h200.sh ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env bash
2
+ # One Flint replica on one Hopper H200 GPU (141 GB). FA4 and the trtllm MoE kernels are
3
+ # Blackwell-only, so this uses FA3 attention and Triton MoE. 80 GB H100s cannot hold the BF16
4
+ # weights on one GPU.
5
+ #
6
+ # MODEL=/path/to/flint CUDA_VISIBLE_DEVICES=0 PORT=30000 bash serve_h200.sh
7
+ #
8
+ # Extra arguments are passed through to sglang.launch_server.
9
+ set -euo pipefail
10
+
11
+ MODEL="${MODEL:-RecursiveSI/flint}"
12
+ PORT="${PORT:-30000}"
13
+ revision_args=()
14
+ if [[ -n "${REVISION:-}" ]]; then
15
+ revision_args=(--revision "$REVISION")
16
+ fi
17
+
18
+ export SGLANG_EXTERNAL_MODEL_PACKAGE="${SGLANG_EXTERNAL_MODEL_PACKAGE:-flint_sglang}"
19
+ export FLASHINFER_USE_CUDA_NORM="${FLASHINFER_USE_CUDA_NORM:-1}"
20
+ # One Triton cache per replica: replicas compiling the same kernels into one cache directory can race.
21
+ export TRITON_CACHE_DIR="${FLINT_TRITON_CACHE_BASE:-${HOME:-/tmp}/.triton/cache}/flint-$(hostname)-${PORT}"
22
+
23
+ exec python3 -m sglang.launch_server \
24
+ --model-path "$MODEL" "${revision_args[@]}" \
25
+ --served-model-name flint \
26
+ --host 0.0.0.0 --port "$PORT" \
27
+ --tp-size 1 \
28
+ --attention-backend fa3 \
29
+ --moe-runner-backend triton \
30
+ --enable-fp32-lm-head \
31
+ --context-length 262144 \
32
+ --chunked-prefill-size 4096 \
33
+ --swa-full-tokens-ratio 0.4 \
34
+ --mem-fraction-static 0.9 \
35
+ --tool-call-parser flint \
36
+ --reasoning-parser flint \
37
+ --grammar-backend flint \
38
+ "$@"
sglang/serve_node_8x.sh ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env bash
2
+ # Eight Flint replicas on one 8-GPU node, one GPU each, on ports BASE_PORT..BASE_PORT+7.
3
+ # If one replica exits, all are stopped. Put a router in front of all replicas across nodes (on a
4
+ # port outside those ranges), e.g. for 2 nodes:
5
+ #
6
+ # python3 -m sglang_router.launch_router --host 0.0.0.0 --port 8000 --policy cache_aware \
7
+ # --worker-urls http://node0:30000 ... http://node0:30007 http://node1:30000 ... http://node1:30007
8
+ #
9
+ # MODEL=/path/to/flint BASE_PORT=30000 bash serve_node_8x.sh # Blackwell
10
+ # MODEL=/path/to/flint SERVE_SCRIPT=serve_h200.sh bash serve_node_8x.sh # H200
11
+ #
12
+ # Extra arguments are passed through to every replica's sglang.launch_server.
13
+ set -euo pipefail
14
+
15
+ BASE_PORT="${BASE_PORT:-30000}"
16
+ SERVE_SCRIPT="${SERVE_SCRIPT:-serve_b300.sh}"
17
+ here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
18
+
19
+ pids=()
20
+ for gpu in 0 1 2 3 4 5 6 7; do
21
+ CUDA_VISIBLE_DEVICES="$gpu" PORT="$((BASE_PORT + gpu))" bash "$here/$SERVE_SCRIPT" "$@" &
22
+ pids+=("$!")
23
+ done
24
+ trap 'kill "${pids[@]}" 2>/dev/null; wait' EXIT INT TERM
25
+ wait -n "${pids[@]}"
tokenizer.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a263cce0b7e2b03f7ee07ce809783ef4b47f160c3f268a4ea1524f638da45b68
3
+ size 10879128
tokenizer_config.json ADDED
@@ -0,0 +1,1295 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_bos_token": false,
3
+ "add_eos_token": false,
4
+ "added_tokens_decoder": {
5
+ "150000": {
6
+ "content": "<|begin_of_text|>",
7
+ "single_word": false,
8
+ "lstrip": false,
9
+ "rstrip": false,
10
+ "normalized": false,
11
+ "special": true
12
+ },
13
+ "150001": {
14
+ "content": "<|end_of_text|>",
15
+ "single_word": false,
16
+ "lstrip": false,
17
+ "rstrip": false,
18
+ "normalized": false,
19
+ "special": true
20
+ },
21
+ "150002": {
22
+ "content": "<|system|>",
23
+ "single_word": false,
24
+ "lstrip": false,
25
+ "rstrip": false,
26
+ "normalized": false,
27
+ "special": true
28
+ },
29
+ "150003": {
30
+ "content": "<|user|>",
31
+ "single_word": false,
32
+ "lstrip": false,
33
+ "rstrip": false,
34
+ "normalized": false,
35
+ "special": true
36
+ },
37
+ "150004": {
38
+ "content": "<|assistant|>",
39
+ "single_word": false,
40
+ "lstrip": false,
41
+ "rstrip": false,
42
+ "normalized": false,
43
+ "special": true
44
+ },
45
+ "150005": {
46
+ "content": "<|observation|>",
47
+ "single_word": false,
48
+ "lstrip": false,
49
+ "rstrip": false,
50
+ "normalized": false,
51
+ "special": true
52
+ },
53
+ "150006": {
54
+ "content": "<think>",
55
+ "single_word": false,
56
+ "lstrip": false,
57
+ "rstrip": false,
58
+ "normalized": false,
59
+ "special": false
60
+ },
61
+ "150007": {
62
+ "content": "</think>",
63
+ "single_word": false,
64
+ "lstrip": false,
65
+ "rstrip": false,
66
+ "normalized": false,
67
+ "special": false
68
+ },
69
+ "150008": {
70
+ "content": "<tools>",
71
+ "single_word": false,
72
+ "lstrip": false,
73
+ "rstrip": false,
74
+ "normalized": false,
75
+ "special": false
76
+ },
77
+ "150009": {
78
+ "content": "</tools>",
79
+ "single_word": false,
80
+ "lstrip": false,
81
+ "rstrip": false,
82
+ "normalized": false,
83
+ "special": false
84
+ },
85
+ "150010": {
86
+ "content": "<tool_call>",
87
+ "single_word": false,
88
+ "lstrip": false,
89
+ "rstrip": false,
90
+ "normalized": false,
91
+ "special": false
92
+ },
93
+ "150011": {
94
+ "content": "</tool_call>",
95
+ "single_word": false,
96
+ "lstrip": false,
97
+ "rstrip": false,
98
+ "normalized": false,
99
+ "special": false
100
+ },
101
+ "150012": {
102
+ "content": "<arg_key>",
103
+ "single_word": false,
104
+ "lstrip": false,
105
+ "rstrip": false,
106
+ "normalized": false,
107
+ "special": false
108
+ },
109
+ "150013": {
110
+ "content": "</arg_key>",
111
+ "single_word": false,
112
+ "lstrip": false,
113
+ "rstrip": false,
114
+ "normalized": false,
115
+ "special": false
116
+ },
117
+ "150014": {
118
+ "content": "<arg_value>",
119
+ "single_word": false,
120
+ "lstrip": false,
121
+ "rstrip": false,
122
+ "normalized": false,
123
+ "special": false
124
+ },
125
+ "150015": {
126
+ "content": "</arg_value>",
127
+ "single_word": false,
128
+ "lstrip": false,
129
+ "rstrip": false,
130
+ "normalized": false,
131
+ "special": false
132
+ },
133
+ "150016": {
134
+ "content": "<tool_response>",
135
+ "single_word": false,
136
+ "lstrip": false,
137
+ "rstrip": false,
138
+ "normalized": false,
139
+ "special": false
140
+ },
141
+ "150017": {
142
+ "content": "</tool_response>",
143
+ "single_word": false,
144
+ "lstrip": false,
145
+ "rstrip": false,
146
+ "normalized": false,
147
+ "special": false
148
+ },
149
+ "150018": {
150
+ "content": "<|developer|>",
151
+ "single_word": false,
152
+ "lstrip": false,
153
+ "rstrip": false,
154
+ "normalized": false,
155
+ "special": true
156
+ },
157
+ "150019": {
158
+ "content": "<|reserved_150019|>",
159
+ "single_word": false,
160
+ "lstrip": false,
161
+ "rstrip": false,
162
+ "normalized": false,
163
+ "special": true
164
+ },
165
+ "150020": {
166
+ "content": "<|reserved_150020|>",
167
+ "single_word": false,
168
+ "lstrip": false,
169
+ "rstrip": false,
170
+ "normalized": false,
171
+ "special": true
172
+ },
173
+ "150021": {
174
+ "content": "<|reserved_150021|>",
175
+ "single_word": false,
176
+ "lstrip": false,
177
+ "rstrip": false,
178
+ "normalized": false,
179
+ "special": true
180
+ },
181
+ "150022": {
182
+ "content": "<|reserved_150022|>",
183
+ "single_word": false,
184
+ "lstrip": false,
185
+ "rstrip": false,
186
+ "normalized": false,
187
+ "special": true
188
+ },
189
+ "150023": {
190
+ "content": "<|reserved_150023|>",
191
+ "single_word": false,
192
+ "lstrip": false,
193
+ "rstrip": false,
194
+ "normalized": false,
195
+ "special": true
196
+ },
197
+ "150024": {
198
+ "content": "<|reserved_150024|>",
199
+ "single_word": false,
200
+ "lstrip": false,
201
+ "rstrip": false,
202
+ "normalized": false,
203
+ "special": true
204
+ },
205
+ "150025": {
206
+ "content": "<|reserved_150025|>",
207
+ "single_word": false,
208
+ "lstrip": false,
209
+ "rstrip": false,
210
+ "normalized": false,
211
+ "special": true
212
+ },
213
+ "150026": {
214
+ "content": "<|reserved_150026|>",
215
+ "single_word": false,
216
+ "lstrip": false,
217
+ "rstrip": false,
218
+ "normalized": false,
219
+ "special": true
220
+ },
221
+ "150027": {
222
+ "content": "<|reserved_150027|>",
223
+ "single_word": false,
224
+ "lstrip": false,
225
+ "rstrip": false,
226
+ "normalized": false,
227
+ "special": true
228
+ },
229
+ "150028": {
230
+ "content": "<|reserved_150028|>",
231
+ "single_word": false,
232
+ "lstrip": false,
233
+ "rstrip": false,
234
+ "normalized": false,
235
+ "special": true
236
+ },
237
+ "150029": {
238
+ "content": "<|reserved_150029|>",
239
+ "single_word": false,
240
+ "lstrip": false,
241
+ "rstrip": false,
242
+ "normalized": false,
243
+ "special": true
244
+ },
245
+ "150030": {
246
+ "content": "<|reserved_150030|>",
247
+ "single_word": false,
248
+ "lstrip": false,
249
+ "rstrip": false,
250
+ "normalized": false,
251
+ "special": true
252
+ },
253
+ "150031": {
254
+ "content": "<|reserved_150031|>",
255
+ "single_word": false,
256
+ "lstrip": false,
257
+ "rstrip": false,
258
+ "normalized": false,
259
+ "special": true
260
+ },
261
+ "150032": {
262
+ "content": "<|reserved_150032|>",
263
+ "single_word": false,
264
+ "lstrip": false,
265
+ "rstrip": false,
266
+ "normalized": false,
267
+ "special": true
268
+ },
269
+ "150033": {
270
+ "content": "<|reserved_150033|>",
271
+ "single_word": false,
272
+ "lstrip": false,
273
+ "rstrip": false,
274
+ "normalized": false,
275
+ "special": true
276
+ },
277
+ "150034": {
278
+ "content": "<|reserved_150034|>",
279
+ "single_word": false,
280
+ "lstrip": false,
281
+ "rstrip": false,
282
+ "normalized": false,
283
+ "special": true
284
+ },
285
+ "150035": {
286
+ "content": "<|reserved_150035|>",
287
+ "single_word": false,
288
+ "lstrip": false,
289
+ "rstrip": false,
290
+ "normalized": false,
291
+ "special": true
292
+ },
293
+ "150036": {
294
+ "content": "<|reserved_150036|>",
295
+ "single_word": false,
296
+ "lstrip": false,
297
+ "rstrip": false,
298
+ "normalized": false,
299
+ "special": true
300
+ },
301
+ "150037": {
302
+ "content": "<|reserved_150037|>",
303
+ "single_word": false,
304
+ "lstrip": false,
305
+ "rstrip": false,
306
+ "normalized": false,
307
+ "special": true
308
+ },
309
+ "150038": {
310
+ "content": "<|reserved_150038|>",
311
+ "single_word": false,
312
+ "lstrip": false,
313
+ "rstrip": false,
314
+ "normalized": false,
315
+ "special": true
316
+ },
317
+ "150039": {
318
+ "content": "<|reserved_150039|>",
319
+ "single_word": false,
320
+ "lstrip": false,
321
+ "rstrip": false,
322
+ "normalized": false,
323
+ "special": true
324
+ },
325
+ "150040": {
326
+ "content": "<|reserved_150040|>",
327
+ "single_word": false,
328
+ "lstrip": false,
329
+ "rstrip": false,
330
+ "normalized": false,
331
+ "special": true
332
+ },
333
+ "150041": {
334
+ "content": "<|reserved_150041|>",
335
+ "single_word": false,
336
+ "lstrip": false,
337
+ "rstrip": false,
338
+ "normalized": false,
339
+ "special": true
340
+ },
341
+ "150042": {
342
+ "content": "<|reserved_150042|>",
343
+ "single_word": false,
344
+ "lstrip": false,
345
+ "rstrip": false,
346
+ "normalized": false,
347
+ "special": true
348
+ },
349
+ "150043": {
350
+ "content": "<|reserved_150043|>",
351
+ "single_word": false,
352
+ "lstrip": false,
353
+ "rstrip": false,
354
+ "normalized": false,
355
+ "special": true
356
+ },
357
+ "150044": {
358
+ "content": "<|reserved_150044|>",
359
+ "single_word": false,
360
+ "lstrip": false,
361
+ "rstrip": false,
362
+ "normalized": false,
363
+ "special": true
364
+ },
365
+ "150045": {
366
+ "content": "<|reserved_150045|>",
367
+ "single_word": false,
368
+ "lstrip": false,
369
+ "rstrip": false,
370
+ "normalized": false,
371
+ "special": true
372
+ },
373
+ "150046": {
374
+ "content": "<|reserved_150046|>",
375
+ "single_word": false,
376
+ "lstrip": false,
377
+ "rstrip": false,
378
+ "normalized": false,
379
+ "special": true
380
+ },
381
+ "150047": {
382
+ "content": "<|reserved_150047|>",
383
+ "single_word": false,
384
+ "lstrip": false,
385
+ "rstrip": false,
386
+ "normalized": false,
387
+ "special": true
388
+ },
389
+ "150048": {
390
+ "content": "<|reserved_150048|>",
391
+ "single_word": false,
392
+ "lstrip": false,
393
+ "rstrip": false,
394
+ "normalized": false,
395
+ "special": true
396
+ },
397
+ "150049": {
398
+ "content": "<|reserved_150049|>",
399
+ "single_word": false,
400
+ "lstrip": false,
401
+ "rstrip": false,
402
+ "normalized": false,
403
+ "special": true
404
+ },
405
+ "150050": {
406
+ "content": "<|reserved_150050|>",
407
+ "single_word": false,
408
+ "lstrip": false,
409
+ "rstrip": false,
410
+ "normalized": false,
411
+ "special": true
412
+ },
413
+ "150051": {
414
+ "content": "<|reserved_150051|>",
415
+ "single_word": false,
416
+ "lstrip": false,
417
+ "rstrip": false,
418
+ "normalized": false,
419
+ "special": true
420
+ },
421
+ "150052": {
422
+ "content": "<|reserved_150052|>",
423
+ "single_word": false,
424
+ "lstrip": false,
425
+ "rstrip": false,
426
+ "normalized": false,
427
+ "special": true
428
+ },
429
+ "150053": {
430
+ "content": "<|reserved_150053|>",
431
+ "single_word": false,
432
+ "lstrip": false,
433
+ "rstrip": false,
434
+ "normalized": false,
435
+ "special": true
436
+ },
437
+ "150054": {
438
+ "content": "<|reserved_150054|>",
439
+ "single_word": false,
440
+ "lstrip": false,
441
+ "rstrip": false,
442
+ "normalized": false,
443
+ "special": true
444
+ },
445
+ "150055": {
446
+ "content": "<|reserved_150055|>",
447
+ "single_word": false,
448
+ "lstrip": false,
449
+ "rstrip": false,
450
+ "normalized": false,
451
+ "special": true
452
+ },
453
+ "150056": {
454
+ "content": "<|reserved_150056|>",
455
+ "single_word": false,
456
+ "lstrip": false,
457
+ "rstrip": false,
458
+ "normalized": false,
459
+ "special": true
460
+ },
461
+ "150057": {
462
+ "content": "<|reserved_150057|>",
463
+ "single_word": false,
464
+ "lstrip": false,
465
+ "rstrip": false,
466
+ "normalized": false,
467
+ "special": true
468
+ },
469
+ "150058": {
470
+ "content": "<|reserved_150058|>",
471
+ "single_word": false,
472
+ "lstrip": false,
473
+ "rstrip": false,
474
+ "normalized": false,
475
+ "special": true
476
+ },
477
+ "150059": {
478
+ "content": "<|reserved_150059|>",
479
+ "single_word": false,
480
+ "lstrip": false,
481
+ "rstrip": false,
482
+ "normalized": false,
483
+ "special": true
484
+ },
485
+ "150060": {
486
+ "content": "<|reserved_150060|>",
487
+ "single_word": false,
488
+ "lstrip": false,
489
+ "rstrip": false,
490
+ "normalized": false,
491
+ "special": true
492
+ },
493
+ "150061": {
494
+ "content": "<|reserved_150061|>",
495
+ "single_word": false,
496
+ "lstrip": false,
497
+ "rstrip": false,
498
+ "normalized": false,
499
+ "special": true
500
+ },
501
+ "150062": {
502
+ "content": "<|reserved_150062|>",
503
+ "single_word": false,
504
+ "lstrip": false,
505
+ "rstrip": false,
506
+ "normalized": false,
507
+ "special": true
508
+ },
509
+ "150063": {
510
+ "content": "<|reserved_150063|>",
511
+ "single_word": false,
512
+ "lstrip": false,
513
+ "rstrip": false,
514
+ "normalized": false,
515
+ "special": true
516
+ },
517
+ "150064": {
518
+ "content": "<|reserved_150064|>",
519
+ "single_word": false,
520
+ "lstrip": false,
521
+ "rstrip": false,
522
+ "normalized": false,
523
+ "special": true
524
+ },
525
+ "150065": {
526
+ "content": "<|reserved_150065|>",
527
+ "single_word": false,
528
+ "lstrip": false,
529
+ "rstrip": false,
530
+ "normalized": false,
531
+ "special": true
532
+ },
533
+ "150066": {
534
+ "content": "<|reserved_150066|>",
535
+ "single_word": false,
536
+ "lstrip": false,
537
+ "rstrip": false,
538
+ "normalized": false,
539
+ "special": true
540
+ },
541
+ "150067": {
542
+ "content": "<|reserved_150067|>",
543
+ "single_word": false,
544
+ "lstrip": false,
545
+ "rstrip": false,
546
+ "normalized": false,
547
+ "special": true
548
+ },
549
+ "150068": {
550
+ "content": "<|reserved_150068|>",
551
+ "single_word": false,
552
+ "lstrip": false,
553
+ "rstrip": false,
554
+ "normalized": false,
555
+ "special": true
556
+ },
557
+ "150069": {
558
+ "content": "<|reserved_150069|>",
559
+ "single_word": false,
560
+ "lstrip": false,
561
+ "rstrip": false,
562
+ "normalized": false,
563
+ "special": true
564
+ },
565
+ "150070": {
566
+ "content": "<|reserved_150070|>",
567
+ "single_word": false,
568
+ "lstrip": false,
569
+ "rstrip": false,
570
+ "normalized": false,
571
+ "special": true
572
+ },
573
+ "150071": {
574
+ "content": "<|reserved_150071|>",
575
+ "single_word": false,
576
+ "lstrip": false,
577
+ "rstrip": false,
578
+ "normalized": false,
579
+ "special": true
580
+ },
581
+ "150072": {
582
+ "content": "<|reserved_150072|>",
583
+ "single_word": false,
584
+ "lstrip": false,
585
+ "rstrip": false,
586
+ "normalized": false,
587
+ "special": true
588
+ },
589
+ "150073": {
590
+ "content": "<|reserved_150073|>",
591
+ "single_word": false,
592
+ "lstrip": false,
593
+ "rstrip": false,
594
+ "normalized": false,
595
+ "special": true
596
+ },
597
+ "150074": {
598
+ "content": "<|reserved_150074|>",
599
+ "single_word": false,
600
+ "lstrip": false,
601
+ "rstrip": false,
602
+ "normalized": false,
603
+ "special": true
604
+ },
605
+ "150075": {
606
+ "content": "<|reserved_150075|>",
607
+ "single_word": false,
608
+ "lstrip": false,
609
+ "rstrip": false,
610
+ "normalized": false,
611
+ "special": true
612
+ },
613
+ "150076": {
614
+ "content": "<|reserved_150076|>",
615
+ "single_word": false,
616
+ "lstrip": false,
617
+ "rstrip": false,
618
+ "normalized": false,
619
+ "special": true
620
+ },
621
+ "150077": {
622
+ "content": "<|reserved_150077|>",
623
+ "single_word": false,
624
+ "lstrip": false,
625
+ "rstrip": false,
626
+ "normalized": false,
627
+ "special": true
628
+ },
629
+ "150078": {
630
+ "content": "<|reserved_150078|>",
631
+ "single_word": false,
632
+ "lstrip": false,
633
+ "rstrip": false,
634
+ "normalized": false,
635
+ "special": true
636
+ },
637
+ "150079": {
638
+ "content": "<|reserved_150079|>",
639
+ "single_word": false,
640
+ "lstrip": false,
641
+ "rstrip": false,
642
+ "normalized": false,
643
+ "special": true
644
+ },
645
+ "150080": {
646
+ "content": "<|reserved_150080|>",
647
+ "single_word": false,
648
+ "lstrip": false,
649
+ "rstrip": false,
650
+ "normalized": false,
651
+ "special": true
652
+ },
653
+ "150081": {
654
+ "content": "<|reserved_150081|>",
655
+ "single_word": false,
656
+ "lstrip": false,
657
+ "rstrip": false,
658
+ "normalized": false,
659
+ "special": true
660
+ },
661
+ "150082": {
662
+ "content": "<|reserved_150082|>",
663
+ "single_word": false,
664
+ "lstrip": false,
665
+ "rstrip": false,
666
+ "normalized": false,
667
+ "special": true
668
+ },
669
+ "150083": {
670
+ "content": "<|reserved_150083|>",
671
+ "single_word": false,
672
+ "lstrip": false,
673
+ "rstrip": false,
674
+ "normalized": false,
675
+ "special": true
676
+ },
677
+ "150084": {
678
+ "content": "<|reserved_150084|>",
679
+ "single_word": false,
680
+ "lstrip": false,
681
+ "rstrip": false,
682
+ "normalized": false,
683
+ "special": true
684
+ },
685
+ "150085": {
686
+ "content": "<|reserved_150085|>",
687
+ "single_word": false,
688
+ "lstrip": false,
689
+ "rstrip": false,
690
+ "normalized": false,
691
+ "special": true
692
+ },
693
+ "150086": {
694
+ "content": "<|reserved_150086|>",
695
+ "single_word": false,
696
+ "lstrip": false,
697
+ "rstrip": false,
698
+ "normalized": false,
699
+ "special": true
700
+ },
701
+ "150087": {
702
+ "content": "<|reserved_150087|>",
703
+ "single_word": false,
704
+ "lstrip": false,
705
+ "rstrip": false,
706
+ "normalized": false,
707
+ "special": true
708
+ },
709
+ "150088": {
710
+ "content": "<|reserved_150088|>",
711
+ "single_word": false,
712
+ "lstrip": false,
713
+ "rstrip": false,
714
+ "normalized": false,
715
+ "special": true
716
+ },
717
+ "150089": {
718
+ "content": "<|reserved_150089|>",
719
+ "single_word": false,
720
+ "lstrip": false,
721
+ "rstrip": false,
722
+ "normalized": false,
723
+ "special": true
724
+ },
725
+ "150090": {
726
+ "content": "<|reserved_150090|>",
727
+ "single_word": false,
728
+ "lstrip": false,
729
+ "rstrip": false,
730
+ "normalized": false,
731
+ "special": true
732
+ },
733
+ "150091": {
734
+ "content": "<|reserved_150091|>",
735
+ "single_word": false,
736
+ "lstrip": false,
737
+ "rstrip": false,
738
+ "normalized": false,
739
+ "special": true
740
+ },
741
+ "150092": {
742
+ "content": "<|reserved_150092|>",
743
+ "single_word": false,
744
+ "lstrip": false,
745
+ "rstrip": false,
746
+ "normalized": false,
747
+ "special": true
748
+ },
749
+ "150093": {
750
+ "content": "<|reserved_150093|>",
751
+ "single_word": false,
752
+ "lstrip": false,
753
+ "rstrip": false,
754
+ "normalized": false,
755
+ "special": true
756
+ },
757
+ "150094": {
758
+ "content": "<|reserved_150094|>",
759
+ "single_word": false,
760
+ "lstrip": false,
761
+ "rstrip": false,
762
+ "normalized": false,
763
+ "special": true
764
+ },
765
+ "150095": {
766
+ "content": "<|reserved_150095|>",
767
+ "single_word": false,
768
+ "lstrip": false,
769
+ "rstrip": false,
770
+ "normalized": false,
771
+ "special": true
772
+ },
773
+ "150096": {
774
+ "content": "<|reserved_150096|>",
775
+ "single_word": false,
776
+ "lstrip": false,
777
+ "rstrip": false,
778
+ "normalized": false,
779
+ "special": true
780
+ },
781
+ "150097": {
782
+ "content": "<|reserved_150097|>",
783
+ "single_word": false,
784
+ "lstrip": false,
785
+ "rstrip": false,
786
+ "normalized": false,
787
+ "special": true
788
+ },
789
+ "150098": {
790
+ "content": "<|reserved_150098|>",
791
+ "single_word": false,
792
+ "lstrip": false,
793
+ "rstrip": false,
794
+ "normalized": false,
795
+ "special": true
796
+ },
797
+ "150099": {
798
+ "content": "<|reserved_150099|>",
799
+ "single_word": false,
800
+ "lstrip": false,
801
+ "rstrip": false,
802
+ "normalized": false,
803
+ "special": true
804
+ },
805
+ "150100": {
806
+ "content": "<|reserved_150100|>",
807
+ "single_word": false,
808
+ "lstrip": false,
809
+ "rstrip": false,
810
+ "normalized": false,
811
+ "special": true
812
+ },
813
+ "150101": {
814
+ "content": "<|reserved_150101|>",
815
+ "single_word": false,
816
+ "lstrip": false,
817
+ "rstrip": false,
818
+ "normalized": false,
819
+ "special": true
820
+ },
821
+ "150102": {
822
+ "content": "<|reserved_150102|>",
823
+ "single_word": false,
824
+ "lstrip": false,
825
+ "rstrip": false,
826
+ "normalized": false,
827
+ "special": true
828
+ },
829
+ "150103": {
830
+ "content": "<|reserved_150103|>",
831
+ "single_word": false,
832
+ "lstrip": false,
833
+ "rstrip": false,
834
+ "normalized": false,
835
+ "special": true
836
+ },
837
+ "150104": {
838
+ "content": "<|reserved_150104|>",
839
+ "single_word": false,
840
+ "lstrip": false,
841
+ "rstrip": false,
842
+ "normalized": false,
843
+ "special": true
844
+ },
845
+ "150105": {
846
+ "content": "<|reserved_150105|>",
847
+ "single_word": false,
848
+ "lstrip": false,
849
+ "rstrip": false,
850
+ "normalized": false,
851
+ "special": true
852
+ },
853
+ "150106": {
854
+ "content": "<|reserved_150106|>",
855
+ "single_word": false,
856
+ "lstrip": false,
857
+ "rstrip": false,
858
+ "normalized": false,
859
+ "special": true
860
+ },
861
+ "150107": {
862
+ "content": "<|reserved_150107|>",
863
+ "single_word": false,
864
+ "lstrip": false,
865
+ "rstrip": false,
866
+ "normalized": false,
867
+ "special": true
868
+ },
869
+ "150108": {
870
+ "content": "<|reserved_150108|>",
871
+ "single_word": false,
872
+ "lstrip": false,
873
+ "rstrip": false,
874
+ "normalized": false,
875
+ "special": true
876
+ },
877
+ "150109": {
878
+ "content": "<|reserved_150109|>",
879
+ "single_word": false,
880
+ "lstrip": false,
881
+ "rstrip": false,
882
+ "normalized": false,
883
+ "special": true
884
+ },
885
+ "150110": {
886
+ "content": "<|reserved_150110|>",
887
+ "single_word": false,
888
+ "lstrip": false,
889
+ "rstrip": false,
890
+ "normalized": false,
891
+ "special": true
892
+ },
893
+ "150111": {
894
+ "content": "<|reserved_150111|>",
895
+ "single_word": false,
896
+ "lstrip": false,
897
+ "rstrip": false,
898
+ "normalized": false,
899
+ "special": true
900
+ },
901
+ "150112": {
902
+ "content": "<|reserved_150112|>",
903
+ "single_word": false,
904
+ "lstrip": false,
905
+ "rstrip": false,
906
+ "normalized": false,
907
+ "special": true
908
+ },
909
+ "150113": {
910
+ "content": "<|reserved_150113|>",
911
+ "single_word": false,
912
+ "lstrip": false,
913
+ "rstrip": false,
914
+ "normalized": false,
915
+ "special": true
916
+ },
917
+ "150114": {
918
+ "content": "<|reserved_150114|>",
919
+ "single_word": false,
920
+ "lstrip": false,
921
+ "rstrip": false,
922
+ "normalized": false,
923
+ "special": true
924
+ },
925
+ "150115": {
926
+ "content": "<|reserved_150115|>",
927
+ "single_word": false,
928
+ "lstrip": false,
929
+ "rstrip": false,
930
+ "normalized": false,
931
+ "special": true
932
+ },
933
+ "150116": {
934
+ "content": "<|reserved_150116|>",
935
+ "single_word": false,
936
+ "lstrip": false,
937
+ "rstrip": false,
938
+ "normalized": false,
939
+ "special": true
940
+ },
941
+ "150117": {
942
+ "content": "<|reserved_150117|>",
943
+ "single_word": false,
944
+ "lstrip": false,
945
+ "rstrip": false,
946
+ "normalized": false,
947
+ "special": true
948
+ },
949
+ "150118": {
950
+ "content": "<|reserved_150118|>",
951
+ "single_word": false,
952
+ "lstrip": false,
953
+ "rstrip": false,
954
+ "normalized": false,
955
+ "special": true
956
+ },
957
+ "150119": {
958
+ "content": "<|reserved_150119|>",
959
+ "single_word": false,
960
+ "lstrip": false,
961
+ "rstrip": false,
962
+ "normalized": false,
963
+ "special": true
964
+ },
965
+ "150120": {
966
+ "content": "<|reserved_150120|>",
967
+ "single_word": false,
968
+ "lstrip": false,
969
+ "rstrip": false,
970
+ "normalized": false,
971
+ "special": true
972
+ },
973
+ "150121": {
974
+ "content": "<|reserved_150121|>",
975
+ "single_word": false,
976
+ "lstrip": false,
977
+ "rstrip": false,
978
+ "normalized": false,
979
+ "special": true
980
+ },
981
+ "150122": {
982
+ "content": "<|reserved_150122|>",
983
+ "single_word": false,
984
+ "lstrip": false,
985
+ "rstrip": false,
986
+ "normalized": false,
987
+ "special": true
988
+ },
989
+ "150123": {
990
+ "content": "<|reserved_150123|>",
991
+ "single_word": false,
992
+ "lstrip": false,
993
+ "rstrip": false,
994
+ "normalized": false,
995
+ "special": true
996
+ },
997
+ "150124": {
998
+ "content": "<|reserved_150124|>",
999
+ "single_word": false,
1000
+ "lstrip": false,
1001
+ "rstrip": false,
1002
+ "normalized": false,
1003
+ "special": true
1004
+ },
1005
+ "150125": {
1006
+ "content": "<|reserved_150125|>",
1007
+ "single_word": false,
1008
+ "lstrip": false,
1009
+ "rstrip": false,
1010
+ "normalized": false,
1011
+ "special": true
1012
+ },
1013
+ "150126": {
1014
+ "content": "<|reserved_150126|>",
1015
+ "single_word": false,
1016
+ "lstrip": false,
1017
+ "rstrip": false,
1018
+ "normalized": false,
1019
+ "special": true
1020
+ },
1021
+ "150127": {
1022
+ "content": "<|reserved_150127|>",
1023
+ "single_word": false,
1024
+ "lstrip": false,
1025
+ "rstrip": false,
1026
+ "normalized": false,
1027
+ "special": true
1028
+ },
1029
+ "150128": {
1030
+ "content": "<|reserved_150128|>",
1031
+ "single_word": false,
1032
+ "lstrip": false,
1033
+ "rstrip": false,
1034
+ "normalized": false,
1035
+ "special": true
1036
+ },
1037
+ "150129": {
1038
+ "content": "<|reserved_150129|>",
1039
+ "single_word": false,
1040
+ "lstrip": false,
1041
+ "rstrip": false,
1042
+ "normalized": false,
1043
+ "special": true
1044
+ },
1045
+ "150130": {
1046
+ "content": "<|reserved_150130|>",
1047
+ "single_word": false,
1048
+ "lstrip": false,
1049
+ "rstrip": false,
1050
+ "normalized": false,
1051
+ "special": true
1052
+ },
1053
+ "150131": {
1054
+ "content": "<|reserved_150131|>",
1055
+ "single_word": false,
1056
+ "lstrip": false,
1057
+ "rstrip": false,
1058
+ "normalized": false,
1059
+ "special": true
1060
+ },
1061
+ "150132": {
1062
+ "content": "<|reserved_150132|>",
1063
+ "single_word": false,
1064
+ "lstrip": false,
1065
+ "rstrip": false,
1066
+ "normalized": false,
1067
+ "special": true
1068
+ },
1069
+ "150133": {
1070
+ "content": "<|reserved_150133|>",
1071
+ "single_word": false,
1072
+ "lstrip": false,
1073
+ "rstrip": false,
1074
+ "normalized": false,
1075
+ "special": true
1076
+ },
1077
+ "150134": {
1078
+ "content": "<|reserved_150134|>",
1079
+ "single_word": false,
1080
+ "lstrip": false,
1081
+ "rstrip": false,
1082
+ "normalized": false,
1083
+ "special": true
1084
+ },
1085
+ "150135": {
1086
+ "content": "<|reserved_150135|>",
1087
+ "single_word": false,
1088
+ "lstrip": false,
1089
+ "rstrip": false,
1090
+ "normalized": false,
1091
+ "special": true
1092
+ },
1093
+ "150136": {
1094
+ "content": "<|reserved_150136|>",
1095
+ "single_word": false,
1096
+ "lstrip": false,
1097
+ "rstrip": false,
1098
+ "normalized": false,
1099
+ "special": true
1100
+ },
1101
+ "150137": {
1102
+ "content": "<|reserved_150137|>",
1103
+ "single_word": false,
1104
+ "lstrip": false,
1105
+ "rstrip": false,
1106
+ "normalized": false,
1107
+ "special": true
1108
+ },
1109
+ "150138": {
1110
+ "content": "<|reserved_150138|>",
1111
+ "single_word": false,
1112
+ "lstrip": false,
1113
+ "rstrip": false,
1114
+ "normalized": false,
1115
+ "special": true
1116
+ },
1117
+ "150139": {
1118
+ "content": "<|reserved_150139|>",
1119
+ "single_word": false,
1120
+ "lstrip": false,
1121
+ "rstrip": false,
1122
+ "normalized": false,
1123
+ "special": true
1124
+ },
1125
+ "150140": {
1126
+ "content": "<|reserved_150140|>",
1127
+ "single_word": false,
1128
+ "lstrip": false,
1129
+ "rstrip": false,
1130
+ "normalized": false,
1131
+ "special": true
1132
+ },
1133
+ "150141": {
1134
+ "content": "<|reserved_150141|>",
1135
+ "single_word": false,
1136
+ "lstrip": false,
1137
+ "rstrip": false,
1138
+ "normalized": false,
1139
+ "special": true
1140
+ },
1141
+ "150142": {
1142
+ "content": "<|reserved_150142|>",
1143
+ "single_word": false,
1144
+ "lstrip": false,
1145
+ "rstrip": false,
1146
+ "normalized": false,
1147
+ "special": true
1148
+ },
1149
+ "150143": {
1150
+ "content": "<|reserved_150143|>",
1151
+ "single_word": false,
1152
+ "lstrip": false,
1153
+ "rstrip": false,
1154
+ "normalized": false,
1155
+ "special": true
1156
+ }
1157
+ },
1158
+ "additional_special_tokens": [
1159
+ "<|system|>",
1160
+ "<|user|>",
1161
+ "<|assistant|>",
1162
+ "<|observation|>",
1163
+ "<|developer|>",
1164
+ "<|reserved_150019|>",
1165
+ "<|reserved_150020|>",
1166
+ "<|reserved_150021|>",
1167
+ "<|reserved_150022|>",
1168
+ "<|reserved_150023|>",
1169
+ "<|reserved_150024|>",
1170
+ "<|reserved_150025|>",
1171
+ "<|reserved_150026|>",
1172
+ "<|reserved_150027|>",
1173
+ "<|reserved_150028|>",
1174
+ "<|reserved_150029|>",
1175
+ "<|reserved_150030|>",
1176
+ "<|reserved_150031|>",
1177
+ "<|reserved_150032|>",
1178
+ "<|reserved_150033|>",
1179
+ "<|reserved_150034|>",
1180
+ "<|reserved_150035|>",
1181
+ "<|reserved_150036|>",
1182
+ "<|reserved_150037|>",
1183
+ "<|reserved_150038|>",
1184
+ "<|reserved_150039|>",
1185
+ "<|reserved_150040|>",
1186
+ "<|reserved_150041|>",
1187
+ "<|reserved_150042|>",
1188
+ "<|reserved_150043|>",
1189
+ "<|reserved_150044|>",
1190
+ "<|reserved_150045|>",
1191
+ "<|reserved_150046|>",
1192
+ "<|reserved_150047|>",
1193
+ "<|reserved_150048|>",
1194
+ "<|reserved_150049|>",
1195
+ "<|reserved_150050|>",
1196
+ "<|reserved_150051|>",
1197
+ "<|reserved_150052|>",
1198
+ "<|reserved_150053|>",
1199
+ "<|reserved_150054|>",
1200
+ "<|reserved_150055|>",
1201
+ "<|reserved_150056|>",
1202
+ "<|reserved_150057|>",
1203
+ "<|reserved_150058|>",
1204
+ "<|reserved_150059|>",
1205
+ "<|reserved_150060|>",
1206
+ "<|reserved_150061|>",
1207
+ "<|reserved_150062|>",
1208
+ "<|reserved_150063|>",
1209
+ "<|reserved_150064|>",
1210
+ "<|reserved_150065|>",
1211
+ "<|reserved_150066|>",
1212
+ "<|reserved_150067|>",
1213
+ "<|reserved_150068|>",
1214
+ "<|reserved_150069|>",
1215
+ "<|reserved_150070|>",
1216
+ "<|reserved_150071|>",
1217
+ "<|reserved_150072|>",
1218
+ "<|reserved_150073|>",
1219
+ "<|reserved_150074|>",
1220
+ "<|reserved_150075|>",
1221
+ "<|reserved_150076|>",
1222
+ "<|reserved_150077|>",
1223
+ "<|reserved_150078|>",
1224
+ "<|reserved_150079|>",
1225
+ "<|reserved_150080|>",
1226
+ "<|reserved_150081|>",
1227
+ "<|reserved_150082|>",
1228
+ "<|reserved_150083|>",
1229
+ "<|reserved_150084|>",
1230
+ "<|reserved_150085|>",
1231
+ "<|reserved_150086|>",
1232
+ "<|reserved_150087|>",
1233
+ "<|reserved_150088|>",
1234
+ "<|reserved_150089|>",
1235
+ "<|reserved_150090|>",
1236
+ "<|reserved_150091|>",
1237
+ "<|reserved_150092|>",
1238
+ "<|reserved_150093|>",
1239
+ "<|reserved_150094|>",
1240
+ "<|reserved_150095|>",
1241
+ "<|reserved_150096|>",
1242
+ "<|reserved_150097|>",
1243
+ "<|reserved_150098|>",
1244
+ "<|reserved_150099|>",
1245
+ "<|reserved_150100|>",
1246
+ "<|reserved_150101|>",
1247
+ "<|reserved_150102|>",
1248
+ "<|reserved_150103|>",
1249
+ "<|reserved_150104|>",
1250
+ "<|reserved_150105|>",
1251
+ "<|reserved_150106|>",
1252
+ "<|reserved_150107|>",
1253
+ "<|reserved_150108|>",
1254
+ "<|reserved_150109|>",
1255
+ "<|reserved_150110|>",
1256
+ "<|reserved_150111|>",
1257
+ "<|reserved_150112|>",
1258
+ "<|reserved_150113|>",
1259
+ "<|reserved_150114|>",
1260
+ "<|reserved_150115|>",
1261
+ "<|reserved_150116|>",
1262
+ "<|reserved_150117|>",
1263
+ "<|reserved_150118|>",
1264
+ "<|reserved_150119|>",
1265
+ "<|reserved_150120|>",
1266
+ "<|reserved_150121|>",
1267
+ "<|reserved_150122|>",
1268
+ "<|reserved_150123|>",
1269
+ "<|reserved_150124|>",
1270
+ "<|reserved_150125|>",
1271
+ "<|reserved_150126|>",
1272
+ "<|reserved_150127|>",
1273
+ "<|reserved_150128|>",
1274
+ "<|reserved_150129|>",
1275
+ "<|reserved_150130|>",
1276
+ "<|reserved_150131|>",
1277
+ "<|reserved_150132|>",
1278
+ "<|reserved_150133|>",
1279
+ "<|reserved_150134|>",
1280
+ "<|reserved_150135|>",
1281
+ "<|reserved_150136|>",
1282
+ "<|reserved_150137|>",
1283
+ "<|reserved_150138|>",
1284
+ "<|reserved_150139|>",
1285
+ "<|reserved_150140|>",
1286
+ "<|reserved_150141|>",
1287
+ "<|reserved_150142|>",
1288
+ "<|reserved_150143|>"
1289
+ ],
1290
+ "bos_token": "<|begin_of_text|>",
1291
+ "clean_up_tokenization_spaces": false,
1292
+ "eos_token": "<|end_of_text|>",
1293
+ "model_max_length": 262144,
1294
+ "tokenizer_class": "PreTrainedTokenizerFast"
1295
+ }