Instructions to use ukisai/Swift-1.5-5bit-MLX with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- MLX
How to use ukisai/Swift-1.5-5bit-MLX with MLX:
# Make sure mlx-lm is installed # pip install --upgrade mlx-lm # Generate text with mlx-lm from mlx_lm import load, generate model, tokenizer = load("ukisai/Swift-1.5-5bit-MLX") prompt = "Write a story about Einstein" messages = [{"role": "user", "content": prompt}] prompt = tokenizer.apply_chat_template( messages, add_generation_prompt=True ) text = generate(model, tokenizer, prompt=prompt, verbose=True) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- LM Studio
- Pi
How to use ukisai/Swift-1.5-5bit-MLX with Pi:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "ukisai/Swift-1.5-5bit-MLX"
Configure the model in Pi
# Install Pi: npm install -g @earendil-works/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "mlx-lm": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "ukisai/Swift-1.5-5bit-MLX" } ] } } }Run Pi
# Start Pi in your project directory: pi
- MLX LM
How to use ukisai/Swift-1.5-5bit-MLX with MLX LM:
Generate or start a chat session
# Install MLX LM uv tool install mlx-lm # Interactive chat REPL mlx_lm.chat --model "ukisai/Swift-1.5-5bit-MLX"
Run an OpenAI-compatible server
# Install MLX LM uv tool install mlx-lm # Start the server mlx_lm.server --model "ukisai/Swift-1.5-5bit-MLX" # Calling the OpenAI-compatible server with curl curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "ukisai/Swift-1.5-5bit-MLX", "messages": [ {"role": "user", "content": "Hello"} ] }' - Hermes Agent
How to use ukisai/Swift-1.5-5bit-MLX with Hermes Agent:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "ukisai/Swift-1.5-5bit-MLX"
Configure Hermes
# Install Hermes: curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash hermes setup # Point Hermes at the local server: hermes config set model.provider custom hermes config set model.base_url http://127.0.0.1:8080/v1 hermes config set model.default ukisai/Swift-1.5-5bit-MLX
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use ukisai/Swift-1.5-5bit-MLX with OpenClaw:
Start the MLX server
# Install MLX LM: uv tool install mlx-lm # Start a local OpenAI-compatible server: mlx_lm.server --model "ukisai/Swift-1.5-5bit-MLX"
Configure OpenClaw
# Install OpenClaw: npm install -g openclaw@latest # Register the local server and set it as the default model: openclaw onboard --non-interactive --mode local \ --auth-choice custom-api-key \ --custom-base-url http://127.0.0.1:8080/v1 \ --custom-model-id "ukisai/Swift-1.5-5bit-MLX" \ --custom-provider-id mlx-lm \ --custom-compatibility openai \ --custom-text-input \ --accept-risk \ --skip-health
Run OpenClaw
openclaw agent --local --agent main --message "Hello from Hugging Face"
Commit ·
e476358
0
Parent(s):
initial release
Browse files- .gitattributes +38 -0
- LICENSE +233 -0
- LICENSE-APACHE-2.0 +202 -0
- NOTICE +24 -0
- QUANTIZATION_MANIFEST.json +95 -0
- README.md +135 -0
- UPLOAD_MANIFEST.json +210 -0
- USAGE.md +100 -0
- chat_template.jinja +170 -0
- compatibility/LICENSE-MLX-LM-MIT +21 -0
- compatibility/conversion-result.json +28 -0
- compatibility/enable-5bit.patch +47 -0
- compatibility/environment-linux.json +13 -0
- compatibility/macos-quantized-matmul-diagnostic.json +189 -0
- compatibility/package-checks.json +2088 -0
- compatibility/patch-manifest.json +13 -0
- compatibility/quant-validation-results.json +103 -0
- compatibility/source-structural-results.json +55 -0
- compatibility/source-verification.json +0 -0
- compatibility/swift15-mlx-lm.patch +962 -0
- config.json +154 -0
- generation_config.json +12 -0
- merges.txt +0 -0
- model-00001-of-00004.safetensors +3 -0
- model-00002-of-00004.safetensors +3 -0
- model-00003-of-00004.safetensors +3 -0
- model-00004-of-00004.safetensors +3 -0
- model.safetensors.index.json +0 -0
- preprocessor_config.json +21 -0
- swift-1.5-planet-demo.mp4 +3 -0
- tokenizer.json +3 -0
- tokenizer_config.json +305 -0
- ukisai-banner.png +3 -0
- verify_release.py +152 -0
- video_preprocessor_config.json +21 -0
- vocab.json +0 -0
.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 |
+
ukisai-banner.png filter=lfs diff=lfs merge=lfs -text
|
| 38 |
+
swift-1.5-planet-demo.mp4 filter=lfs diff=lfs merge=lfs -text
|
LICENSE
ADDED
|
@@ -0,0 +1,233 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Swift Open License v1.0
|
| 2 |
+
|
| 3 |
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
| 4 |
+
|
| 5 |
+
1. Definitions.
|
| 6 |
+
|
| 7 |
+
"License" shall mean the terms and conditions for use, reproduction, and
|
| 8 |
+
distribution as defined by this document.
|
| 9 |
+
|
| 10 |
+
"Licensor" shall mean UkisAI.
|
| 11 |
+
|
| 12 |
+
"Legal Entity" shall mean the union of the acting entity and all other entities
|
| 13 |
+
that control, are controlled by, or are under common control with that entity.
|
| 14 |
+
For the purposes of this definition, "control" means (i) the power, direct or
|
| 15 |
+
indirect, to cause the direction or management of such entity, whether by
|
| 16 |
+
contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
| 17 |
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
| 18 |
+
|
| 19 |
+
"You" (or "Your") shall mean an individual or Legal Entity exercising
|
| 20 |
+
permissions granted by this License.
|
| 21 |
+
|
| 22 |
+
"Source" form shall mean the preferred form for making modifications,
|
| 23 |
+
including but not limited to software source code, documentation source,
|
| 24 |
+
configuration files, and model weights in an unquantized, trainable format.
|
| 25 |
+
|
| 26 |
+
"Object" form shall mean any form resulting from mechanical transformation or
|
| 27 |
+
translation of a Source form, including but not limited to compiled object
|
| 28 |
+
code, generated documentation, quantized or otherwise converted model weights,
|
| 29 |
+
and conversions to other media types or file formats.
|
| 30 |
+
|
| 31 |
+
"Base Model" shall mean the Qwen3.8-27B model, Copyright 2026 Alibaba Cloud,
|
| 32 |
+
made available at https://huggingface.co/Qwen/Qwen3.8-27B, including its
|
| 33 |
+
weights, configuration, tokenizer, and chat template, in any form.
|
| 34 |
+
|
| 35 |
+
"Base Model License" shall mean the Apache License, Version 2.0, under which
|
| 36 |
+
the Base Model is made available. A copy is distributed with the Work in the
|
| 37 |
+
file LICENSE-APACHE-2.0.
|
| 38 |
+
|
| 39 |
+
"Swift Contribution" shall mean the modifications to the Base Model authored
|
| 40 |
+
by Licensor, in any form, including without limitation adapted model weights,
|
| 41 |
+
weight deltas, model weights to the extent they differ from the Base Model, and
|
| 42 |
+
any configuration, documentation, and evaluation materials created by Licensor
|
| 43 |
+
and distributed with the Work.
|
| 44 |
+
|
| 45 |
+
"Work" shall mean the Swift Contribution together with, to the extent of
|
| 46 |
+
Licensor's rights therein, the Derivative Work of the Base Model made available
|
| 47 |
+
by Licensor under this License (as indicated by a copyright notice that is
|
| 48 |
+
included in or attached to the work), in any format made available by Licensor.
|
| 49 |
+
|
| 50 |
+
"Derivative Works" shall mean any work, whether in Source or Object form, that
|
| 51 |
+
is based on (or derived from) the Work and for which the editorial revisions,
|
| 52 |
+
annotations, elaborations, or other modifications represent, as a whole, an
|
| 53 |
+
original work of authorship. For the purposes of this License, Derivative Works
|
| 54 |
+
shall not include works that remain separable from, or merely link (or bind by
|
| 55 |
+
name) to the interfaces of, the Work and Derivative Works thereof.
|
| 56 |
+
|
| 57 |
+
"Contribution" shall mean any work of authorship, including the original
|
| 58 |
+
version of the Work and any modifications or additions to that Work or
|
| 59 |
+
Derivative Works thereof, that is intentionally submitted to Licensor for
|
| 60 |
+
inclusion in the Work by the copyright owner or by an individual or Legal
|
| 61 |
+
Entity authorized to submit on behalf of the copyright owner. For the purposes
|
| 62 |
+
of this definition, "submitted" means any form of electronic, verbal, or
|
| 63 |
+
written communication sent to the Licensor or its representatives, including
|
| 64 |
+
but not limited to communication on electronic mailing lists, source code
|
| 65 |
+
control systems, and issue tracking systems that are managed by, or on behalf
|
| 66 |
+
of, the Licensor for the purpose of discussing and improving the Work, but
|
| 67 |
+
excluding communication that is conspicuously marked or otherwise designated in
|
| 68 |
+
writing by the copyright owner as "Not a Contribution."
|
| 69 |
+
|
| 70 |
+
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf
|
| 71 |
+
of whom a Contribution has been received by Licensor and subsequently
|
| 72 |
+
incorporated within the Work.
|
| 73 |
+
|
| 74 |
+
"Commercial Use" shall mean any use of the Work or a Derivative Work for direct
|
| 75 |
+
or indirect commercial advantage or monetary compensation.
|
| 76 |
+
|
| 77 |
+
"Qualified Non-Profit Organization" shall mean a Legal Entity that is organized
|
| 78 |
+
and operated exclusively for religious, charitable, scientific, testing for
|
| 79 |
+
public safety, literary, or educational purposes, and which is exempt from
|
| 80 |
+
federal income tax under Section 501(c)(3) of the United States Internal
|
| 81 |
+
Revenue Code of 1986, as amended, or any equivalent non-profit or charitable
|
| 82 |
+
organization in a foreign jurisdiction.
|
| 83 |
+
|
| 84 |
+
"Non-Commercial or Research Purposes" shall mean purposes that do not involve
|
| 85 |
+
any use of the Work or a Derivative Work for Commercial Use.
|
| 86 |
+
|
| 87 |
+
"Threshold" shall mean gross revenue of one million United States dollars
|
| 88 |
+
(US$1,000,000) or more, measured over the most recently completed fiscal year
|
| 89 |
+
of You together with every Legal Entity that controls, is controlled by, or is
|
| 90 |
+
under common control with You.
|
| 91 |
+
|
| 92 |
+
2. Grant of Copyright License. Subject to the terms and conditions of this
|
| 93 |
+
License, including the Commercial Use limitation set forth in Section 5, each
|
| 94 |
+
Contributor hereby grants to You a perpetual, worldwide, non-exclusive,
|
| 95 |
+
no-charge, royalty-free, irrevocable copyright license to reproduce, prepare
|
| 96 |
+
Derivative Works of, publicly display, publicly perform, sublicense, and
|
| 97 |
+
distribute the Work and such Derivative Works in Source or Object form.
|
| 98 |
+
|
| 99 |
+
3. Grant of Patent License. Subject to the terms and conditions of this
|
| 100 |
+
License, including the Commercial Use limitation set forth in Section 5, each
|
| 101 |
+
Contributor hereby grants to You a perpetual, worldwide, non-exclusive,
|
| 102 |
+
no-charge, royalty-free, irrevocable (except as stated in this section) patent
|
| 103 |
+
license to make, have made, use, offer to sell, sell, import, and otherwise
|
| 104 |
+
transfer the Work, where such license applies only to those patent claims
|
| 105 |
+
licensable by such Contributor that are necessarily infringed by their
|
| 106 |
+
Contribution(s) alone or by combination of their Contribution(s) with the Work
|
| 107 |
+
to which such Contribution(s) was submitted. If You institute patent litigation
|
| 108 |
+
against any entity (including a cross-claim or counterclaim in a lawsuit)
|
| 109 |
+
alleging that the Work or a Contribution incorporated within the Work
|
| 110 |
+
constitutes direct or contributory patent infringement, then any patent
|
| 111 |
+
licenses granted to You under this License for that Work shall terminate as of
|
| 112 |
+
the date such litigation is filed.
|
| 113 |
+
|
| 114 |
+
4. Redistribution. You may reproduce and distribute copies of the Work or
|
| 115 |
+
Derivative Works thereof in any medium, with or without modifications, and in
|
| 116 |
+
Source or Object form, provided that You meet the following conditions:
|
| 117 |
+
|
| 118 |
+
(a) You must give any other recipients of the Work or Derivative Works a copy
|
| 119 |
+
of this License; and
|
| 120 |
+
|
| 121 |
+
(b) You must cause any modified files to carry prominent notices stating that
|
| 122 |
+
You changed the files; and
|
| 123 |
+
|
| 124 |
+
(c) You must retain, in the Source form of any Derivative Works that You
|
| 125 |
+
distribute, all copyright, patent, trademark, and attribution notices from the
|
| 126 |
+
Source form of the Work, excluding those notices that do not pertain to any
|
| 127 |
+
part of the Derivative Works; and
|
| 128 |
+
|
| 129 |
+
(d) If the Work includes a "NOTICE" text file as part of its distribution, then
|
| 130 |
+
any Derivative Works that You distribute must include a readable copy of the
|
| 131 |
+
attribution notices contained within such NOTICE file, excluding those notices
|
| 132 |
+
that do not pertain to any part of the Derivative Works, in at least one of the
|
| 133 |
+
following places: within a NOTICE text file distributed as part of the
|
| 134 |
+
Derivative Works; within the Source form or documentation, if provided along
|
| 135 |
+
with the Derivative Works; or, within a display generated by the Derivative
|
| 136 |
+
Works, if and wherever such third-party notices normally appear. The contents
|
| 137 |
+
of the NOTICE file are for informational purposes only and do not modify the
|
| 138 |
+
License. You may add Your own attribution notices within Derivative Works that
|
| 139 |
+
You distribute, alongside or as an addendum to the NOTICE text from the Work,
|
| 140 |
+
provided that such additional attribution notices cannot be construed as
|
| 141 |
+
modifying the License; and
|
| 142 |
+
|
| 143 |
+
(e) If the copy You distribute contains any portion of the Base Model
|
| 144 |
+
(including merged, quantized, or otherwise converted weights that incorporate
|
| 145 |
+
the Base Model), You must also give recipients a copy of the Base Model License
|
| 146 |
+
and must comply with the Base Model License with respect to the Base Model.
|
| 147 |
+
|
| 148 |
+
You may add Your own copyright statement to Your modifications and may provide
|
| 149 |
+
additional or different license terms and conditions for use, reproduction, or
|
| 150 |
+
distribution of Your modifications, or for any such Derivative Works as a
|
| 151 |
+
whole, provided Your use, reproduction, and distribution of the Work otherwise
|
| 152 |
+
complies with the conditions stated in this License, and provided that Section
|
| 153 |
+
5 continues to apply to the Swift Contribution contained in any such
|
| 154 |
+
Derivative Works.
|
| 155 |
+
|
| 156 |
+
5. Commercial Use Limitation.
|
| 157 |
+
|
| 158 |
+
(a) The rights granted under this License for Commercial Use are conditioned
|
| 159 |
+
upon You or Your Legal Entity not exceeding the Threshold.
|
| 160 |
+
|
| 161 |
+
(b) Any Commercial Use of the Work or a Derivative Work by a Legal Entity that
|
| 162 |
+
exceeds the Threshold is not licensed under this License.
|
| 163 |
+
|
| 164 |
+
(c) The Threshold shall not apply to a Qualified Non-Profit Organization's use
|
| 165 |
+
of the Work or a Derivative Work for Non-Commercial or Research Purposes.
|
| 166 |
+
|
| 167 |
+
(d) A Legal Entity that exceeds the Threshold may obtain a separate written
|
| 168 |
+
license for Commercial Use from Licensor (the "Swift Enterprise License").
|
| 169 |
+
Contact: https://ukisai.com/contact.
|
| 170 |
+
|
| 171 |
+
6. Base Model Rights. The Work incorporates the Base Model. Nothing in this
|
| 172 |
+
License limits, restricts, conditions, or modifies any rights You have in the
|
| 173 |
+
Base Model under the Base Model License, and the Base Model remains available
|
| 174 |
+
to You from its licensor under the Base Model License. Sections 5 and 12 of
|
| 175 |
+
this License apply solely to the Swift Contribution and to the Work or any
|
| 176 |
+
Derivative Work to the extent it contains, incorporates, or is derived from the
|
| 177 |
+
Swift Contribution.
|
| 178 |
+
|
| 179 |
+
7. Submission of Contributions. Unless You explicitly state otherwise, any
|
| 180 |
+
Contribution intentionally submitted for inclusion in the Work by You to the
|
| 181 |
+
Licensor shall be under the terms and conditions of this License, without any
|
| 182 |
+
additional terms or conditions. Notwithstanding the above, nothing herein shall
|
| 183 |
+
supersede or modify the terms of any separate license agreement you may have
|
| 184 |
+
executed with Licensor regarding such Contributions.
|
| 185 |
+
|
| 186 |
+
8. Trademarks. This License does not grant permission to use the trade names,
|
| 187 |
+
trademarks, service marks, or product names of the Licensor (including "UkisAI"
|
| 188 |
+
and "Swift"), except for the reasonable and customary use in describing the
|
| 189 |
+
origin of the Work and reproducing the content of the NOTICE file.
|
| 190 |
+
|
| 191 |
+
9. Disclaimer of Warranty. Unless required by applicable law or agreed to in
|
| 192 |
+
writing, Licensor provides the Work (and each Contributor provides its
|
| 193 |
+
Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
| 194 |
+
KIND, either express or implied, including, without limitation, any warranties
|
| 195 |
+
or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
| 196 |
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
| 197 |
+
appropriateness of using or redistributing the Work and assume any risks
|
| 198 |
+
associated with Your exercise of permissions under this License.
|
| 199 |
+
|
| 200 |
+
10. Limitation of Liability. In no event and under no legal theory, whether in
|
| 201 |
+
tort (including negligence), contract, or otherwise, unless required by
|
| 202 |
+
applicable law (such as deliberate and grossly negligent acts) or agreed to in
|
| 203 |
+
writing, shall any Contributor be liable to You for damages, including any
|
| 204 |
+
direct, indirect, special, incidental, or consequential damages of any
|
| 205 |
+
character arising as a result of this License or out of the use or inability to
|
| 206 |
+
use the Work (including but not limited to damages for loss of goodwill, work
|
| 207 |
+
stoppage, computer failure or malfunction, or any and all other commercial
|
| 208 |
+
damages or losses), even if such Contributor has been advised of the
|
| 209 |
+
possibility of such damages.
|
| 210 |
+
|
| 211 |
+
11. Accepting Warranty or Additional Liability. While redistributing the Work
|
| 212 |
+
or Derivative Works thereof, You may choose to offer, and charge a fee for,
|
| 213 |
+
acceptance of support, warranty, indemnity, or other liability obligations
|
| 214 |
+
and/or rights consistent with this License. However, in accepting such
|
| 215 |
+
obligations, You may act only on Your own behalf and on Your sole
|
| 216 |
+
responsibility, not on behalf of any other Contributor, and only if You agree
|
| 217 |
+
to indemnify, defend, and hold each Contributor harmless for any liability
|
| 218 |
+
incurred by, or claims asserted against, such Contributor by reason of your
|
| 219 |
+
accepting any such warranty or additional liability.
|
| 220 |
+
|
| 221 |
+
12. Termination. This License will terminate automatically and immediately if
|
| 222 |
+
You fail to comply with any of its terms and conditions. Upon termination, You
|
| 223 |
+
must cease all use of the Swift Contribution and of any Work or Derivative
|
| 224 |
+
Works containing it, and delete all copies in Your possession. Termination does
|
| 225 |
+
not affect Your rights in the Base Model under the Base Model License.
|
| 226 |
+
|
| 227 |
+
END OF TERMS AND CONDITIONS
|
| 228 |
+
|
| 229 |
+
APPENDIX: Notice for redistributors (quantizations, conversions, merges).
|
| 230 |
+
|
| 231 |
+
Copyright 2026 UkisAI. Swift Contribution licensed under the Swift Open
|
| 232 |
+
License v1.0 (https://huggingface.co/ukisai/Swift-1.5-Qwen3.8-27b/blob/main/LICENSE).
|
| 233 |
+
Derivative of Qwen3.8-27B, Copyright 2026 Alibaba Cloud, Apache License 2.0.
|
LICENSE-APACHE-2.0
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
|
| 2 |
+
Apache License
|
| 3 |
+
Version 2.0, January 2004
|
| 4 |
+
http://www.apache.org/licenses/
|
| 5 |
+
|
| 6 |
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
| 7 |
+
|
| 8 |
+
1. Definitions.
|
| 9 |
+
|
| 10 |
+
"License" shall mean the terms and conditions for use, reproduction,
|
| 11 |
+
and distribution as defined by Sections 1 through 9 of this document.
|
| 12 |
+
|
| 13 |
+
"Licensor" shall mean the copyright owner or entity authorized by
|
| 14 |
+
the copyright owner that is granting the License.
|
| 15 |
+
|
| 16 |
+
"Legal Entity" shall mean the union of the acting entity and all
|
| 17 |
+
other entities that control, are controlled by, or are under common
|
| 18 |
+
control with that entity. For the purposes of this definition,
|
| 19 |
+
"control" means (i) the power, direct or indirect, to cause the
|
| 20 |
+
direction or management of such entity, whether by contract or
|
| 21 |
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
| 22 |
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
| 23 |
+
|
| 24 |
+
"You" (or "Your") shall mean an individual or Legal Entity
|
| 25 |
+
exercising permissions granted by this License.
|
| 26 |
+
|
| 27 |
+
"Source" form shall mean the preferred form for making modifications,
|
| 28 |
+
including but not limited to software source code, documentation
|
| 29 |
+
source, and configuration files.
|
| 30 |
+
|
| 31 |
+
"Object" form shall mean any form resulting from mechanical
|
| 32 |
+
transformation or translation of a Source form, including but
|
| 33 |
+
not limited to compiled object code, generated documentation,
|
| 34 |
+
and conversions to other media types.
|
| 35 |
+
|
| 36 |
+
"Work" shall mean the work of authorship, whether in Source or
|
| 37 |
+
Object form, made available under the License, as indicated by a
|
| 38 |
+
copyright notice that is included in or attached to the work
|
| 39 |
+
(an example is provided in the Appendix below).
|
| 40 |
+
|
| 41 |
+
"Derivative Works" shall mean any work, whether in Source or Object
|
| 42 |
+
form, that is based on (or derived from) the Work and for which the
|
| 43 |
+
editorial revisions, annotations, elaborations, or other modifications
|
| 44 |
+
represent, as a whole, an original work of authorship. For the purposes
|
| 45 |
+
of this License, Derivative Works shall not include works that remain
|
| 46 |
+
separable from, or merely link (or bind by name) to the interfaces of,
|
| 47 |
+
the Work and Derivative Works thereof.
|
| 48 |
+
|
| 49 |
+
"Contribution" shall mean any work of authorship, including
|
| 50 |
+
the original version of the Work and any modifications or additions
|
| 51 |
+
to that Work or Derivative Works thereof, that is intentionally
|
| 52 |
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
| 53 |
+
or by an individual or Legal Entity authorized to submit on behalf of
|
| 54 |
+
the copyright owner. For the purposes of this definition, "submitted"
|
| 55 |
+
means any form of electronic, verbal, or written communication sent
|
| 56 |
+
to the Licensor or its representatives, including but not limited to
|
| 57 |
+
communication on electronic mailing lists, source code control systems,
|
| 58 |
+
and issue tracking systems that are managed by, or on behalf of, the
|
| 59 |
+
Licensor for the purpose of discussing and improving the Work, but
|
| 60 |
+
excluding communication that is conspicuously marked or otherwise
|
| 61 |
+
designated in writing by the copyright owner as "Not a Contribution."
|
| 62 |
+
|
| 63 |
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
| 64 |
+
on behalf of whom a Contribution has been received by Licensor and
|
| 65 |
+
subsequently incorporated within the Work.
|
| 66 |
+
|
| 67 |
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
| 68 |
+
this License, each Contributor hereby grants to You a perpetual,
|
| 69 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
| 70 |
+
copyright license to reproduce, prepare Derivative Works of,
|
| 71 |
+
publicly display, publicly perform, sublicense, and distribute the
|
| 72 |
+
Work and such Derivative Works in Source or Object form.
|
| 73 |
+
|
| 74 |
+
3. Grant of Patent License. Subject to the terms and conditions of
|
| 75 |
+
this License, each Contributor hereby grants to You a perpetual,
|
| 76 |
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
| 77 |
+
(except as stated in this section) patent license to make, have made,
|
| 78 |
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
| 79 |
+
where such license applies only to those patent claims licensable
|
| 80 |
+
by such Contributor that are necessarily infringed by their
|
| 81 |
+
Contribution(s) alone or by combination of their Contribution(s)
|
| 82 |
+
with the Work to which such Contribution(s) was submitted. If You
|
| 83 |
+
institute patent litigation against any entity (including a
|
| 84 |
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
| 85 |
+
or a Contribution incorporated within the Work constitutes direct
|
| 86 |
+
or contributory patent infringement, then any patent licenses
|
| 87 |
+
granted to You under this License for that Work shall terminate
|
| 88 |
+
as of the date such litigation is filed.
|
| 89 |
+
|
| 90 |
+
4. Redistribution. You may reproduce and distribute copies of the
|
| 91 |
+
Work or Derivative Works thereof in any medium, with or without
|
| 92 |
+
modifications, and in Source or Object form, provided that You
|
| 93 |
+
meet the following conditions:
|
| 94 |
+
|
| 95 |
+
(a) You must give any other recipients of the Work or
|
| 96 |
+
Derivative Works a copy of this License; and
|
| 97 |
+
|
| 98 |
+
(b) You must cause any modified files to carry prominent notices
|
| 99 |
+
stating that You changed the files; and
|
| 100 |
+
|
| 101 |
+
(c) You must retain, in the Source form of any Derivative Works
|
| 102 |
+
that You distribute, all copyright, patent, trademark, and
|
| 103 |
+
attribution notices from the Source form of the Work,
|
| 104 |
+
excluding those notices that do not pertain to any part of
|
| 105 |
+
the Derivative Works; and
|
| 106 |
+
|
| 107 |
+
(d) If the Work includes a "NOTICE" text file as part of its
|
| 108 |
+
distribution, then any Derivative Works that You distribute must
|
| 109 |
+
include a readable copy of the attribution notices contained
|
| 110 |
+
within such NOTICE file, excluding those notices that do not
|
| 111 |
+
pertain to any part of the Derivative Works, in at least one
|
| 112 |
+
of the following places: within a NOTICE text file distributed
|
| 113 |
+
as part of the Derivative Works; within the Source form or
|
| 114 |
+
documentation, if provided along with the Derivative Works; or,
|
| 115 |
+
within a display generated by the Derivative Works, if and
|
| 116 |
+
wherever such third-party notices normally appear. The contents
|
| 117 |
+
of the NOTICE file are for informational purposes only and
|
| 118 |
+
do not modify the License. You may add Your own attribution
|
| 119 |
+
notices within Derivative Works that You distribute, alongside
|
| 120 |
+
or as an addendum to the NOTICE text from the Work, provided
|
| 121 |
+
that such additional attribution notices cannot be construed
|
| 122 |
+
as modifying the License.
|
| 123 |
+
|
| 124 |
+
You may add Your own copyright statement to Your modifications and
|
| 125 |
+
may provide additional or different license terms and conditions
|
| 126 |
+
for use, reproduction, or distribution of Your modifications, or
|
| 127 |
+
for any such Derivative Works as a whole, provided Your use,
|
| 128 |
+
reproduction, and distribution of the Work otherwise complies with
|
| 129 |
+
the conditions stated in this License.
|
| 130 |
+
|
| 131 |
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
| 132 |
+
any Contribution intentionally submitted for inclusion in the Work
|
| 133 |
+
by You to the Licensor shall be under the terms and conditions of
|
| 134 |
+
this License, without any additional terms or conditions.
|
| 135 |
+
Notwithstanding the above, nothing herein shall supersede or modify
|
| 136 |
+
the terms of any separate license agreement you may have executed
|
| 137 |
+
with Licensor regarding such Contributions.
|
| 138 |
+
|
| 139 |
+
6. Trademarks. This License does not grant permission to use the trade
|
| 140 |
+
names, trademarks, service marks, or product names of the Licensor,
|
| 141 |
+
except as required for reasonable and customary use in describing the
|
| 142 |
+
origin of the Work and reproducing the content of the NOTICE file.
|
| 143 |
+
|
| 144 |
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
| 145 |
+
agreed to in writing, Licensor provides the Work (and each
|
| 146 |
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
| 147 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
| 148 |
+
implied, including, without limitation, any warranties or conditions
|
| 149 |
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
| 150 |
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
| 151 |
+
appropriateness of using or redistributing the Work and assume any
|
| 152 |
+
risks associated with Your exercise of permissions under this License.
|
| 153 |
+
|
| 154 |
+
8. Limitation of Liability. In no event and under no legal theory,
|
| 155 |
+
whether in tort (including negligence), contract, or otherwise,
|
| 156 |
+
unless required by applicable law (such as deliberate and grossly
|
| 157 |
+
negligent acts) or agreed to in writing, shall any Contributor be
|
| 158 |
+
liable to You for damages, including any direct, indirect, special,
|
| 159 |
+
incidental, or consequential damages of any character arising as a
|
| 160 |
+
result of this License or out of the use or inability to use the
|
| 161 |
+
Work (including but not limited to damages for loss of goodwill,
|
| 162 |
+
work stoppage, computer failure or malfunction, or any and all
|
| 163 |
+
other commercial damages or losses), even if such Contributor
|
| 164 |
+
has been advised of the possibility of such damages.
|
| 165 |
+
|
| 166 |
+
9. Accepting Warranty or Additional Liability. While redistributing
|
| 167 |
+
the Work or Derivative Works thereof, You may choose to offer,
|
| 168 |
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
| 169 |
+
or other liability obligations and/or rights consistent with this
|
| 170 |
+
License. However, in accepting such obligations, You may act only
|
| 171 |
+
on Your own behalf and on Your sole responsibility, not on behalf
|
| 172 |
+
of any other Contributor, and only if You agree to indemnify,
|
| 173 |
+
defend, and hold each Contributor harmless for any liability
|
| 174 |
+
incurred by, or claims asserted against, such Contributor by reason
|
| 175 |
+
of your accepting any such warranty or additional liability.
|
| 176 |
+
|
| 177 |
+
END OF TERMS AND CONDITIONS
|
| 178 |
+
|
| 179 |
+
APPENDIX: How to apply the Apache License to your work.
|
| 180 |
+
|
| 181 |
+
To apply the Apache License to your work, attach the following
|
| 182 |
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
| 183 |
+
replaced with your own identifying information. (Don't include
|
| 184 |
+
the brackets!) The text should be enclosed in the appropriate
|
| 185 |
+
comment syntax for the file format. We also recommend that a
|
| 186 |
+
file or class name and description of purpose be included on the
|
| 187 |
+
same "printed page" as the copyright notice for easier
|
| 188 |
+
identification within third-party archives.
|
| 189 |
+
|
| 190 |
+
Copyright 2026 Alibaba Cloud
|
| 191 |
+
|
| 192 |
+
Licensed under the Apache License, Version 2.0 (the "License");
|
| 193 |
+
you may not use this file except in compliance with the License.
|
| 194 |
+
You may obtain a copy of the License at
|
| 195 |
+
|
| 196 |
+
http://www.apache.org/licenses/LICENSE-2.0
|
| 197 |
+
|
| 198 |
+
Unless required by applicable law or agreed to in writing, software
|
| 199 |
+
distributed under the License is distributed on an "AS IS" BASIS,
|
| 200 |
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| 201 |
+
See the License for the specific language governing permissions and
|
| 202 |
+
limitations under the License.
|
NOTICE
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
Swift 1.5 Qwen3.8-27B
|
| 2 |
+
Copyright 2026 UkisAI
|
| 3 |
+
|
| 4 |
+
UkisAI's contribution (the "Swift Contribution") is licensed under the
|
| 5 |
+
Swift Open License v1.0. See LICENSE.
|
| 6 |
+
|
| 7 |
+
This model is a Derivative Work of Qwen3.8-27B
|
| 8 |
+
https://huggingface.co/Qwen/Qwen3.8-27B
|
| 9 |
+
Copyright 2026 Alibaba Cloud
|
| 10 |
+
Licensed under the Apache License, Version 2.0. See LICENSE-APACHE-2.0.
|
| 11 |
+
|
| 12 |
+
Swift 1.5 continues UkisAI's Swift 1.0 model, itself a Qwen3.8-27B
|
| 13 |
+
derivative. The full release incorporates the Qwen3.8-27B Base Model and
|
| 14 |
+
UkisAI's Swift 1.0 and Swift 1.5 contributions.
|
| 15 |
+
|
| 16 |
+
Changes made by UkisAI (Apache License 2.0, Section 4(b) change notice):
|
| 17 |
+
- model-*.safetensors, model.safetensors.index.json: the model weights from
|
| 18 |
+
Swift 1.0 were further adapted by UkisAI using additional post-training
|
| 19 |
+
methods.
|
| 20 |
+
- README.md: replaced. LICENSE and NOTICE added.
|
| 21 |
+
- All other files (config.json, generation_config.json, chat_template.jinja,
|
| 22 |
+
tokenizer.json, tokenizer_config.json, vocab.json, merges.txt,
|
| 23 |
+
preprocessor_config.json, video_preprocessor_config.json) are retained from
|
| 24 |
+
the parent model and remain available under Apache License, Version 2.0.
|
QUANTIZATION_MANIFEST.json
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"checkpoint": {
|
| 3 |
+
"exact_unquantized_tensors": 609,
|
| 4 |
+
"quantized_modules": 590,
|
| 5 |
+
"saved_tensors": 2379,
|
| 6 |
+
"tensor_bytes": 19281804384,
|
| 7 |
+
"weight_shard_names": [
|
| 8 |
+
"model-00001-of-00004.safetensors",
|
| 9 |
+
"model-00002-of-00004.safetensors",
|
| 10 |
+
"model-00003-of-00004.safetensors",
|
| 11 |
+
"model-00004-of-00004.safetensors"
|
| 12 |
+
],
|
| 13 |
+
"weight_shards": 4
|
| 14 |
+
},
|
| 15 |
+
"limitations": {
|
| 16 |
+
"broad_accuracy_benchmark": "NOT_RUN",
|
| 17 |
+
"full_apple_silicon_generation": "NOT_RUN",
|
| 18 |
+
"integrated_mtp_speculative_generation": "NOT_IMPLEMENTED_BY_PATCH",
|
| 19 |
+
"integrated_multimodal_generation": "NOT_IMPLEMENTED_BY_PATCH",
|
| 20 |
+
"long_context_benchmark": "NOT_RUN"
|
| 21 |
+
},
|
| 22 |
+
"mlx_lm_revision": "c69d1288440a0dc4e6401fc417098b07598dccd5",
|
| 23 |
+
"patches": [
|
| 24 |
+
{
|
| 25 |
+
"path": "compatibility/swift15-mlx-lm.patch",
|
| 26 |
+
"sha256": "f6f1d0bdafa45863bfbf93dac0398c481c993ea04fdf38b9bae98c643f89eaec"
|
| 27 |
+
},
|
| 28 |
+
{
|
| 29 |
+
"path": "compatibility/enable-5bit.patch",
|
| 30 |
+
"sha256": "b985961eac3035e05ca4c9f3a8b283c26e6dd69bab4d113997fc04fe2a4f99cc"
|
| 31 |
+
}
|
| 32 |
+
],
|
| 33 |
+
"quantization": {
|
| 34 |
+
"bits": 5,
|
| 35 |
+
"group_size": 64,
|
| 36 |
+
"method": "official MLX-LM affine round-to-nearest conversion",
|
| 37 |
+
"mode": "affine"
|
| 38 |
+
},
|
| 39 |
+
"source_manifest_sha256": "0a00065b88ab003281853a7fb9bd5ce0086bc3781b36136d8c39da19933923ae",
|
| 40 |
+
"source_repository": "ukisai/Swift-1.5-Qwen3.8-27b",
|
| 41 |
+
"source_revision": "5ad04445d2686f525e9fbe5c077e6fa0c7df4200",
|
| 42 |
+
"source_revision_url": "https://huggingface.co/ukisai/Swift-1.5-Qwen3.8-27b/tree/5ad04445d2686f525e9fbe5c077e6fa0c7df4200",
|
| 43 |
+
"source_tensors": 1199,
|
| 44 |
+
"source_weight_bytes": 55563006776,
|
| 45 |
+
"source_weight_shards": 18,
|
| 46 |
+
"status": "VALIDATED",
|
| 47 |
+
"validation": {
|
| 48 |
+
"all_floating_tensors_finite": true,
|
| 49 |
+
"all_source_tensors_accounted_for": 1199,
|
| 50 |
+
"load_memory_bytes": 19281804392,
|
| 51 |
+
"mtp": {
|
| 52 |
+
"path": "Explicit MTP step with real text hidden states and shared LM head; speculative generation is not integrated",
|
| 53 |
+
"shape": [
|
| 54 |
+
1,
|
| 55 |
+
1,
|
| 56 |
+
248320
|
| 57 |
+
],
|
| 58 |
+
"status": "PASS"
|
| 59 |
+
},
|
| 60 |
+
"process_peak_rss_bytes": 24964259840,
|
| 61 |
+
"status": "PASS",
|
| 62 |
+
"text_generation": {
|
| 63 |
+
"elapsed_seconds": 495.4394222159999,
|
| 64 |
+
"finish_reason": "stop",
|
| 65 |
+
"prompt": "<|im_start|>user\nReply with exactly: Hello from Swift.<|im_end|>\n<|im_start|>assistant\n<think>\n\n</think>\n\n",
|
| 66 |
+
"prompt_tokens_per_second": 0.04886516458777248,
|
| 67 |
+
"text": "Hello from Swift.",
|
| 68 |
+
"token_ids": [
|
| 69 |
+
9419,
|
| 70 |
+
494,
|
| 71 |
+
22929,
|
| 72 |
+
13,
|
| 73 |
+
248046
|
| 74 |
+
],
|
| 75 |
+
"tokens": 5,
|
| 76 |
+
"tokens_per_second": 0.05894060179705689
|
| 77 |
+
},
|
| 78 |
+
"total_validation_seconds": 609.2779944080003,
|
| 79 |
+
"vision": {
|
| 80 |
+
"grid": [
|
| 81 |
+
[
|
| 82 |
+
1,
|
| 83 |
+
16,
|
| 84 |
+
16
|
| 85 |
+
]
|
| 86 |
+
],
|
| 87 |
+
"path": "Vision encoder only; image/video insertion and multimodal text generation are not implemented",
|
| 88 |
+
"shape": [
|
| 89 |
+
64,
|
| 90 |
+
5120
|
| 91 |
+
],
|
| 92 |
+
"status": "PASS"
|
| 93 |
+
}
|
| 94 |
+
}
|
| 95 |
+
}
|
README.md
ADDED
|
@@ -0,0 +1,135 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
license: other
|
| 3 |
+
license_name: swift-open-license-1.0
|
| 4 |
+
license_link: https://huggingface.co/ukisai/Swift-1.5-5bit-MLX/blob/main/LICENSE
|
| 5 |
+
base_model: ukisai/Swift-1.5-Qwen3.8-27b
|
| 6 |
+
base_model_relation: quantized
|
| 7 |
+
library_name: mlx
|
| 8 |
+
pipeline_tag: text-generation
|
| 9 |
+
tags:
|
| 10 |
+
- mlx
|
| 11 |
+
- quantized
|
| 12 |
+
- 5-bit
|
| 13 |
+
- affine
|
| 14 |
+
- qwen3_8
|
| 15 |
+
---
|
| 16 |
+
|
| 17 |
+
<div align="center">
|
| 18 |
+
<a href="https://ukisai.com"><img src="ukisai-banner.png" alt="UkisAI" style="width:100%;max-width:100%;height:auto;display:block;margin-bottom:0.6em;" /></a>
|
| 19 |
+
<a href="https://ukisai.com">Website</a> •
|
| 20 |
+
<a href="https://ukisai.com/products/swift">Learn more</a> •
|
| 21 |
+
<a href="https://huggingface.co/ukisai/Swift-1.5-Qwen3.8-27b">BF16 model</a> •
|
| 22 |
+
<a href="https://huggingface.co/ukisai/Swift-1.5-Qwen3.8-27B-GGUF">GGUF</a> •
|
| 23 |
+
<a href="https://huggingface.co/ukisai/Swift-1.5-Qwen3.8-27B-GSQ-RCO-GGUF">GSQ-RCO GGUF</a> •
|
| 24 |
+
<a href="#evaluation">Evaluation</a> •
|
| 25 |
+
<a href="#license-and-access">Enterprise licensing</a>
|
| 26 |
+
</div>
|
| 27 |
+
|
| 28 |
+
# Swift 1.5 Qwen3.8-27B — 5-bit MLX
|
| 29 |
+
|
| 30 |
+
**MLX affine 5-bit quantization, group size 64.** Swift 1.5 is UkisAI's
|
| 31 |
+
reasoning-efficient Qwen3.8-27B derivative, focused on long-horizon, agentic and
|
| 32 |
+
coding tasks. This export preserves the text, vision and MTP parameter tree;
|
| 33 |
+
its supported generation interface is text-only with the included MLX-LM patches.
|
| 34 |
+
|
| 35 |
+
Swift 1.5 uses **58.5% fewer thinking tokens** than base Qwen3.8-27B while scoring **0.35% higher**, for a **9.18× speed-up** on several tasks.
|
| 36 |
+
|
| 37 |
+
> [!CAUTION]
|
| 38 |
+
> Use only a complete snapshot whose files match `UPLOAD_MANIFEST.json`.
|
| 39 |
+
> Historical build tests are not certification of an incomplete Hub snapshot.
|
| 40 |
+
> Full independent Apple Silicon generation and quality evaluation remain **NOT_RUN**.
|
| 41 |
+
> The 19.28 GB tensor payload must not be forced onto a 16 GiB Mac.
|
| 42 |
+
|
| 43 |
+
## Demo
|
| 44 |
+
|
| 45 |
+
We gave base Qwen3.8-27B and Swift 1.5 27B the same prompt:
|
| 46 |
+
|
| 47 |
+
> create a 3d little planet globe where I (player can walk around) and it has all these biomes to explore, the globe doesn't have to be too big, but still fun to go around. It's about a boy scout who is camping and goes around exploring.
|
| 48 |
+
|
| 49 |
+
<video src="https://huggingface.co/ukisai/Swift-1.5-5bit-MLX/resolve/main/swift-1.5-planet-demo.mp4" controls autoplay muted loop playsinline style="width:100%;height:auto;border-radius:12px;"></video>
|
| 50 |
+
|
| 51 |
+
Try the game yourself here: [https://ukisai.com/swift-games/27b](https://ukisai.com/swift-games/27b)
|
| 52 |
+
|
| 53 |
+
Base Qwen3.8-27B took 104.6 minutes to build its game. Swift 1.5 took 11.39 minutes.
|
| 54 |
+
|
| 55 |
+
## Source and quantization
|
| 56 |
+
|
| 57 |
+
The recorded source is the complete customized Swift BF16 export at
|
| 58 |
+
[`5ad04445d2686f525e9fbe5c077e6fa0c7df4200`](https://huggingface.co/ukisai/Swift-1.5-Qwen3.8-27b/tree/5ad04445d2686f525e9fbe5c077e6fa0c7df4200),
|
| 59 |
+
not base Qwen or another quantized model. The converter uses official MLX-LM
|
| 60 |
+
commit `c69d1288440a0dc4e6401fc417098b07598dccd5` with the included architecture
|
| 61 |
+
patch followed by the 5-bit extension.
|
| 62 |
+
|
| 63 |
+
The original build report accounts for 1,199 source tensors, including 333 vision
|
| 64 |
+
and 15 MTP tensors, and records 590 quantized modules plus 609 unquantized BF16
|
| 65 |
+
tensors after layout mapping. Its four shards contain 2,379 saved tensors and
|
| 66 |
+
19,281,804,384 bytes of tensor data. Independent recovery checks verified full
|
| 67 |
+
SHA-256 hashes and header/index consistency of the original build. They did not
|
| 68 |
+
repeat the complete source-value equality, finite-value or model-generation tests.
|
| 69 |
+
|
| 70 |
+
The original tokenizer, template, configs, processors and quantized bytes are
|
| 71 |
+
preserved. [QUANTIZATION_MANIFEST.json](QUANTIZATION_MANIFEST.json) and the
|
| 72 |
+
existing `compatibility/` reports are historical build evidence. The current
|
| 73 |
+
[upload manifest](UPLOAD_MANIFEST.json) identifies the intended complete file set.
|
| 74 |
+
|
| 75 |
+
## Evaluation
|
| 76 |
+
|
| 77 |
+
See the [Swift BF16 source evaluation](https://huggingface.co/ukisai/Swift-1.5-Qwen3.8-27b#evaluation)
|
| 78 |
+
for source benchmarks and methodology. They were not rerun on this MLX export.
|
| 79 |
+
No new broad accuracy, stability, long-context or BF16 quality-parity result is claimed.
|
| 80 |
+
|
| 81 |
+
## Validation and use
|
| 82 |
+
|
| 83 |
+
**Both supplied MLX-LM patches are required, in order.** [USAGE.md](USAGE.md)
|
| 84 |
+
contains the pinned install, full-file integrity check and generation example.
|
| 85 |
+
The preserved source architecture is `Qwen3_5ForConditionalGeneration` / `qwen3_5`.
|
| 86 |
+
|
| 87 |
+
The historical Linux build reports strict reload of 2,379 tensors, finite floating
|
| 88 |
+
values, exact unquantized BF16 preservation, processor/tokenizer loading, and a short
|
| 89 |
+
CPU generation returning `Hello from Swift.`. It also reports a real-weight vision
|
| 90 |
+
encoder check and one explicit MTP step. These are historical results, not new
|
| 91 |
+
independent inference results for the uploaded release.
|
| 92 |
+
|
| 93 |
+
The CPU example promotes in-memory floating values to FP32 while retaining packed
|
| 94 |
+
5-bit UINT32 weights. A new synthetic macOS CPU/Metal diagnostic reproduces an MLX
|
| 95 |
+
0.32.2 CPU BF16 accumulation issue; it is not a Linux or full-model test. See
|
| 96 |
+
[diagnostic](compatibility/macos-quantized-matmul-diagnostic.json) and
|
| 97 |
+
[package checks](compatibility/package-checks.json).
|
| 98 |
+
|
| 99 |
+
Full 27B Apple Silicon generation is unverified. Integrated image/video chat and
|
| 100 |
+
speculative MTP generation are **not implemented** by the patch. Vision/MTP weights
|
| 101 |
+
and component checks do not establish those end-to-end capabilities. Runtime/cache
|
| 102 |
+
and OS memory must be budgeted in addition to the tensor payload.
|
| 103 |
+
|
| 104 |
+
## License and access
|
| 105 |
+
|
| 106 |
+
Swift 1.5 derives from [Qwen3.8-27B](https://huggingface.co/Qwen/Qwen3.8-27B)
|
| 107 |
+
(Copyright 2026 Alibaba Cloud, [Apache License 2.0](https://huggingface.co/ukisai/Swift-1.5-5bit-MLX/blob/main/LICENSE-APACHE-2.0)).
|
| 108 |
+
UkisAI's adapted weights are licensed under the [Swift Open License v1.0](https://huggingface.co/ukisai/Swift-1.5-5bit-MLX/blob/main/LICENSE).
|
| 109 |
+
See [NOTICE](https://huggingface.co/ukisai/Swift-1.5-5bit-MLX/blob/main/NOTICE) for attribution and change notices.
|
| 110 |
+
|
| 111 |
+
Personal, research, educational, evaluation and commercial use are free for
|
| 112 |
+
individuals and organizations with gross annual revenue, including affiliates,
|
| 113 |
+
of up to US$1,000,000. Above that threshold, commercial use requires a separate
|
| 114 |
+
Swift Enterprise License. Contact [UkisAI](https://ukisai.com/contact) for terms.
|
| 115 |
+
Nothing in the Swift Open License limits the Apache 2.0 rights in Qwen3.8-27B itself.
|
| 116 |
+
The accompanying Apple MLX-LM code has a separate upstream
|
| 117 |
+
[MIT notice](compatibility/LICENSE-MLX-LM-MIT).
|
| 118 |
+
|
| 119 |
+
## Citation
|
| 120 |
+
|
| 121 |
+
```bibtex
|
| 122 |
+
@misc{swift-1.5-qwen3.8-27b,
|
| 123 |
+
title = {Swift 1.5 Qwen3.8-27B},
|
| 124 |
+
author = {UkisAI},
|
| 125 |
+
year = {2026},
|
| 126 |
+
url = {https://huggingface.co/ukisai/Swift-1.5-Qwen3.8-27b}
|
| 127 |
+
}
|
| 128 |
+
```
|
| 129 |
+
|
| 130 |
+
## Acknowledgements
|
| 131 |
+
|
| 132 |
+
We acknowledge the [NVIDIA Innovation Lab](https://www.nvidia.com/en-us/data-center/innovation-lab/),
|
| 133 |
+
[Amazon Web Services](https://aws.amazon.com/), and [Google Cloud](https://cloud.google.com/)
|
| 134 |
+
for compute credits and infrastructure support for Swift's development, training
|
| 135 |
+
and evaluation.
|
UPLOAD_MANIFEST.json
ADDED
|
@@ -0,0 +1,210 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"files": [
|
| 3 |
+
{
|
| 4 |
+
"path": ".gitattributes",
|
| 5 |
+
"bytes": 1686,
|
| 6 |
+
"sha256": "8a9fd1f95733fb82a6cba50f5ea2b1e26ca7578bea7a7cc21b4301ff83b1ce3b",
|
| 7 |
+
"git_blob_sha1": "3727b14f485a05787b6cda82f0346eaeaa2e751b"
|
| 8 |
+
},
|
| 9 |
+
{
|
| 10 |
+
"path": "LICENSE",
|
| 11 |
+
"bytes": 13306,
|
| 12 |
+
"sha256": "1367057bf17041aa1d69286a1400be5f464d2f8b8f54f600088b209eac1850be",
|
| 13 |
+
"git_blob_sha1": "209a5720f7e4a747e658b49808a933309eeecceb"
|
| 14 |
+
},
|
| 15 |
+
{
|
| 16 |
+
"path": "LICENSE-APACHE-2.0",
|
| 17 |
+
"bytes": 11544,
|
| 18 |
+
"sha256": "bbedc3fda3305820b977265f01b8619d87570a6739de3a5582c3464840f1e57a",
|
| 19 |
+
"git_blob_sha1": "f938136e3adacfd92be087f6e113b5d6d97f678f"
|
| 20 |
+
},
|
| 21 |
+
{
|
| 22 |
+
"path": "NOTICE",
|
| 23 |
+
"bytes": 1133,
|
| 24 |
+
"sha256": "be30f3d464974990e40e9833bc6f356fd89fe16733c6c1a581d97106b8ae741d",
|
| 25 |
+
"git_blob_sha1": "c4ad1a7188a4191cb5efd0f5109bf6e9ba8caee8"
|
| 26 |
+
},
|
| 27 |
+
{
|
| 28 |
+
"path": "QUANTIZATION_MANIFEST.json",
|
| 29 |
+
"bytes": 2946,
|
| 30 |
+
"sha256": "7bbc577963403dd60e93e994a8aeb12142558031d985489aea27708a97ada4cf",
|
| 31 |
+
"git_blob_sha1": "b25e2206cf43c5b85231da234a5014e1ea2e1e99"
|
| 32 |
+
},
|
| 33 |
+
{
|
| 34 |
+
"path": "README.md",
|
| 35 |
+
"bytes": 6283,
|
| 36 |
+
"sha256": "77bebdc893764e1ddb8499b4dd614856a33a39689ca03c46623c11f7a6480722",
|
| 37 |
+
"git_blob_sha1": "91d0f0da8a67b2a793ccb1fc16e54d6e14b67729"
|
| 38 |
+
},
|
| 39 |
+
{
|
| 40 |
+
"path": "USAGE.md",
|
| 41 |
+
"bytes": 4963,
|
| 42 |
+
"sha256": "8d9aeb9c1a86a8e23bc4daf4c7b38b3f8af7a7e0b8b74616e411346469b3cc0e",
|
| 43 |
+
"git_blob_sha1": "816e5c09652657535d15d4d8fddfb59b2253cd43"
|
| 44 |
+
},
|
| 45 |
+
{
|
| 46 |
+
"path": "chat_template.jinja",
|
| 47 |
+
"bytes": 8952,
|
| 48 |
+
"sha256": "c3cf9e34abf4f9e36c2d72165aa9c132d3e2a725b6c2586aaa3a8af9d7a81041",
|
| 49 |
+
"git_blob_sha1": "c0c686f9c38d70d179fb7b5f5aa7530bc913dda3"
|
| 50 |
+
},
|
| 51 |
+
{
|
| 52 |
+
"path": "compatibility/LICENSE-MLX-LM-MIT",
|
| 53 |
+
"bytes": 1066,
|
| 54 |
+
"sha256": "ccfab7ccb2ea306f71531c8ca77bb55507606cd90768b1e32b8b52ab5b48cf01",
|
| 55 |
+
"git_blob_sha1": "98ff47b9ef9d4ac9f1a4bde3db13dd27456c5ea1"
|
| 56 |
+
},
|
| 57 |
+
{
|
| 58 |
+
"path": "compatibility/conversion-result.json",
|
| 59 |
+
"bytes": 694,
|
| 60 |
+
"sha256": "46d5f5abfae73b29c2b65ec5a6d05decd8e4d5b50eb0dd0df90f94edae040986",
|
| 61 |
+
"git_blob_sha1": "7b9848cd983f8f7df81116454907e733543fed82"
|
| 62 |
+
},
|
| 63 |
+
{
|
| 64 |
+
"path": "compatibility/enable-5bit.patch",
|
| 65 |
+
"bytes": 2227,
|
| 66 |
+
"sha256": "b985961eac3035e05ca4c9f3a8b283c26e6dd69bab4d113997fc04fe2a4f99cc",
|
| 67 |
+
"git_blob_sha1": "c577d5a2b6ea8fe634076ebd1387ecf7575d5d27"
|
| 68 |
+
},
|
| 69 |
+
{
|
| 70 |
+
"path": "compatibility/environment-linux.json",
|
| 71 |
+
"bytes": 274,
|
| 72 |
+
"sha256": "29646417ed15e6c1d08602b5832287abd44aabf4da624ea06f7e0b617bccbb48",
|
| 73 |
+
"git_blob_sha1": "0bca526431ce202cd367b40381cbdd041e02028e"
|
| 74 |
+
},
|
| 75 |
+
{
|
| 76 |
+
"path": "compatibility/macos-quantized-matmul-diagnostic.json",
|
| 77 |
+
"bytes": 4399,
|
| 78 |
+
"sha256": "90b992aa7535dde1ecbdcca93d6c8df78397689f4456e095abbae7c112d1754c",
|
| 79 |
+
"git_blob_sha1": "d9475a8bb176a03cf7e3b6fd686e56b59e93e297"
|
| 80 |
+
},
|
| 81 |
+
{
|
| 82 |
+
"path": "compatibility/package-checks.json",
|
| 83 |
+
"bytes": 77429,
|
| 84 |
+
"sha256": "016ebd02e676cdecebb27c9049bd53bff0f803a219b81ad364ca1d769d7bedc8",
|
| 85 |
+
"git_blob_sha1": "599f4e1d3b0e3c2d8032bc68d67b46a279490983"
|
| 86 |
+
},
|
| 87 |
+
{
|
| 88 |
+
"path": "compatibility/patch-manifest.json",
|
| 89 |
+
"bytes": 380,
|
| 90 |
+
"sha256": "c862249f212d4f94113a85336db22a24f3128014c034cdf9878fb9e44b103a95",
|
| 91 |
+
"git_blob_sha1": "955f2d916e47bab3292448d9db7681808053df02"
|
| 92 |
+
},
|
| 93 |
+
{
|
| 94 |
+
"path": "compatibility/quant-validation-results.json",
|
| 95 |
+
"bytes": 3784,
|
| 96 |
+
"sha256": "5a2bdbaa7ffa5616b2edf4817953369c694596c6d41aca2ba458a48b651ebab2",
|
| 97 |
+
"git_blob_sha1": "89c26ee2aabe9ce7717a0d91b217717af4d27b3f"
|
| 98 |
+
},
|
| 99 |
+
{
|
| 100 |
+
"path": "compatibility/source-structural-results.json",
|
| 101 |
+
"bytes": 2503,
|
| 102 |
+
"sha256": "cb9ccedd803a6cd336e7412de3da6809f89c30e567d3300e1c14af7f90e05fbf",
|
| 103 |
+
"git_blob_sha1": "b2641ec35a9f4810da73f8d439ec4603147d15a8"
|
| 104 |
+
},
|
| 105 |
+
{
|
| 106 |
+
"path": "compatibility/source-verification.json",
|
| 107 |
+
"bytes": 380649,
|
| 108 |
+
"sha256": "27d87d8d5209c6559643efdd7d7b468b0138ebfb3a7d5771b29be79214bffe75",
|
| 109 |
+
"git_blob_sha1": "c807fa472c01946b5ad47e1438f57e5980f01d38"
|
| 110 |
+
},
|
| 111 |
+
{
|
| 112 |
+
"path": "compatibility/swift15-mlx-lm.patch",
|
| 113 |
+
"bytes": 38976,
|
| 114 |
+
"sha256": "f6f1d0bdafa45863bfbf93dac0398c481c993ea04fdf38b9bae98c643f89eaec",
|
| 115 |
+
"git_blob_sha1": "b739acc2e3b4cb82f073b7280255bcb898bb2a33"
|
| 116 |
+
},
|
| 117 |
+
{
|
| 118 |
+
"path": "config.json",
|
| 119 |
+
"bytes": 4577,
|
| 120 |
+
"sha256": "77eaf6b1ee9e2ca06a9a3119f218853ec16c6f9f558e6b492a7e9a1be8d2ac43",
|
| 121 |
+
"git_blob_sha1": "3b9f5cd48042e788592ec30c3e153ffe794e45c7"
|
| 122 |
+
},
|
| 123 |
+
{
|
| 124 |
+
"path": "generation_config.json",
|
| 125 |
+
"bytes": 202,
|
| 126 |
+
"sha256": "e70c136c1b78ddc1fb0905bac8e733a4dc448d4f852a5dd75143fffc70be550e",
|
| 127 |
+
"git_blob_sha1": "023756cfadf88e5bf69eefeee3e172f38c448d64"
|
| 128 |
+
},
|
| 129 |
+
{
|
| 130 |
+
"path": "merges.txt",
|
| 131 |
+
"bytes": 3353259,
|
| 132 |
+
"sha256": "a9d356d7bdf1ef4949e3e748e95b8e10ad9d4e2e838eddc38a0a7b6b94d1db8d",
|
| 133 |
+
"git_blob_sha1": "a494e019ca1502219fd0128658b979e5f05ae8e8"
|
| 134 |
+
},
|
| 135 |
+
{
|
| 136 |
+
"path": "model-00001-of-00004.safetensors",
|
| 137 |
+
"bytes": 5360417859,
|
| 138 |
+
"sha256": "9da8750595ec42d8c5d2ff0ae0b695e387cbcb3c0beac40f262e6d9a7196b59d"
|
| 139 |
+
},
|
| 140 |
+
{
|
| 141 |
+
"path": "model-00002-of-00004.safetensors",
|
| 142 |
+
"bytes": 5338181777,
|
| 143 |
+
"sha256": "b592723bd4e9f01344335cd7d4b4f41a7c8cde98e2e074ad1d943cdb951a6835"
|
| 144 |
+
},
|
| 145 |
+
{
|
| 146 |
+
"path": "model-00003-of-00004.safetensors",
|
| 147 |
+
"bytes": 5355925620,
|
| 148 |
+
"sha256": "0027e7fe05310d5b2d960414221ed0872de9b511aa7e6b1c3a8f0e4647558412"
|
| 149 |
+
},
|
| 150 |
+
{
|
| 151 |
+
"path": "model-00004-of-00004.safetensors",
|
| 152 |
+
"bytes": 3227578201,
|
| 153 |
+
"sha256": "afec577f16805b327471561d6841662eb4acf7d866ad5e761c5ef8cd3149d8f4"
|
| 154 |
+
},
|
| 155 |
+
{
|
| 156 |
+
"path": "model.safetensors.index.json",
|
| 157 |
+
"bytes": 232537,
|
| 158 |
+
"sha256": "83526f2e7856d41145f3599146a4a574ea2b258c4abe09302617243f13abec62",
|
| 159 |
+
"git_blob_sha1": "936e7dc269c4155002581e4c5620f085ab1d64f0"
|
| 160 |
+
},
|
| 161 |
+
{
|
| 162 |
+
"path": "preprocessor_config.json",
|
| 163 |
+
"bytes": 390,
|
| 164 |
+
"sha256": "27225450ac9c6529872ee1924fcb0962ff5634834f817040f444118116f4e516",
|
| 165 |
+
"git_blob_sha1": "2ea84a437d448ff71b08df68fdd949d5cc4ebb64"
|
| 166 |
+
},
|
| 167 |
+
{
|
| 168 |
+
"path": "swift-1.5-planet-demo.mp4",
|
| 169 |
+
"bytes": 4738825,
|
| 170 |
+
"sha256": "1cda6924169e8b83e5d6d7299baf8329ed1b1a182a481aa0e06344e0f5c00111"
|
| 171 |
+
},
|
| 172 |
+
{
|
| 173 |
+
"path": "tokenizer.json",
|
| 174 |
+
"bytes": 12809320,
|
| 175 |
+
"sha256": "0997f410c57a1f4e53b09e4be8f4a172d90edd9564368fb0847030937229b9f3"
|
| 176 |
+
},
|
| 177 |
+
{
|
| 178 |
+
"path": "tokenizer_config.json",
|
| 179 |
+
"bytes": 17928,
|
| 180 |
+
"sha256": "b11349aafa7cdc6a320767cf7ceb29ed82f7eda5d65e8e0819e76f0ce947bf27",
|
| 181 |
+
"git_blob_sha1": "5de744b3fca2129d7186979ae47c06be33903243"
|
| 182 |
+
},
|
| 183 |
+
{
|
| 184 |
+
"path": "ukisai-banner.png",
|
| 185 |
+
"bytes": 307739,
|
| 186 |
+
"sha256": "8577252b8b37e331f06f7ddecdf3bfa1c497e164f9eb36d78c37232d1b8492ca"
|
| 187 |
+
},
|
| 188 |
+
{
|
| 189 |
+
"path": "verify_release.py",
|
| 190 |
+
"bytes": 6662,
|
| 191 |
+
"sha256": "02ac6ed751c4dd915d1673f2d501f3322d27039c3a32a5bc3c0264861e4d0982",
|
| 192 |
+
"git_blob_sha1": "7e235791f8cfadb8321321231b3ea6359565db89"
|
| 193 |
+
},
|
| 194 |
+
{
|
| 195 |
+
"path": "video_preprocessor_config.json",
|
| 196 |
+
"bytes": 385,
|
| 197 |
+
"sha256": "7768af27c1fafa9cc9011c1dc20067e03f8915e03b63504550e11d5066986d13",
|
| 198 |
+
"git_blob_sha1": "3ba673a5ad7d4d13f54155ecd38b2a94a6dac8fe"
|
| 199 |
+
},
|
| 200 |
+
{
|
| 201 |
+
"path": "vocab.json",
|
| 202 |
+
"bytes": 6722759,
|
| 203 |
+
"sha256": "ce99b4cb2983d118806ce0a8b777a35b093e2000a503ebde25853284c9dfa003",
|
| 204 |
+
"git_blob_sha1": "0aa0ce0658d60ac4a5d609f4eadb0e8e43514176"
|
| 205 |
+
}
|
| 206 |
+
],
|
| 207 |
+
"file_count": 35,
|
| 208 |
+
"total_bytes": 19310861234,
|
| 209 |
+
"self_excluded": true
|
| 210 |
+
}
|
USAGE.md
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Swift 1.5 5-bit — complete MLX architecture
|
| 2 |
+
|
| 3 |
+
Use only a complete snapshot: all four shards, original index, tokenizer and
|
| 4 |
+
processor/runtime files are required. The 19.28 GB tensor payload plus runtime,
|
| 5 |
+
cache and OS must fit available memory. Do not load this full model on a 16 GiB Mac
|
| 6 |
+
or raise system memory limits to conceal insufficient hardware.
|
| 7 |
+
|
| 8 |
+
## Pin the snapshot and verify it
|
| 9 |
+
|
| 10 |
+
Use a new working directory. After installing the HF CLI, run `hf auth login`
|
| 11 |
+
interactively if not already signed in with access to this private repository.
|
| 12 |
+
The command below resolves current main once to a full commit and then uses
|
| 13 |
+
only that pinned snapshot. For a repeat run, reuse the recorded commit.
|
| 14 |
+
Do not use an incomplete historical upload or proceed after verification failure.
|
| 15 |
+
|
| 16 |
+
```bash
|
| 17 |
+
python3.12 -m venv .venv-swift5
|
| 18 |
+
source .venv-swift5/bin/activate
|
| 19 |
+
python -m pip install 'huggingface_hub==1.31.0'
|
| 20 |
+
SWIFT_MLX_REVISION="$(python -c 'from huggingface_hub import HfApi; print(HfApi().model_info("ukisai/Swift-1.5-5bit-MLX").sha)')"
|
| 21 |
+
printf 'Pinned model revision: %s\n' "$SWIFT_MLX_REVISION"
|
| 22 |
+
hf download ukisai/Swift-1.5-5bit-MLX --revision "$SWIFT_MLX_REVISION" --local-dir Swift-1.5-5bit-MLX
|
| 23 |
+
hf cache verify ukisai/Swift-1.5-5bit-MLX --revision "$SWIFT_MLX_REVISION" --local-dir Swift-1.5-5bit-MLX --fail-on-missing-files
|
| 24 |
+
python Swift-1.5-5bit-MLX/verify_release.py Swift-1.5-5bit-MLX
|
| 25 |
+
```
|
| 26 |
+
|
| 27 |
+
The included checker has no network or model-loading code. Supply its optional
|
| 28 |
+
`--manifest-sha256` argument from a trusted release plan to pin the manifest too.
|
| 29 |
+
Without that trusted digest it checks consistency, not source authenticity.
|
| 30 |
+
Stop if any file, checksum, index entry or payload-boundary check fails.
|
| 31 |
+
|
| 32 |
+
## Install the patches in this order
|
| 33 |
+
|
| 34 |
+
```bash
|
| 35 |
+
git clone https://github.com/ml-explore/mlx-lm.git swift5-mlx-lm
|
| 36 |
+
git -C swift5-mlx-lm checkout --detach c69d1288440a0dc4e6401fc417098b07598dccd5
|
| 37 |
+
git -C swift5-mlx-lm apply --check ../Swift-1.5-5bit-MLX/compatibility/swift15-mlx-lm.patch
|
| 38 |
+
git -C swift5-mlx-lm apply ../Swift-1.5-5bit-MLX/compatibility/swift15-mlx-lm.patch
|
| 39 |
+
git -C swift5-mlx-lm apply --check ../Swift-1.5-5bit-MLX/compatibility/enable-5bit.patch
|
| 40 |
+
git -C swift5-mlx-lm apply ../Swift-1.5-5bit-MLX/compatibility/enable-5bit.patch
|
| 41 |
+
```
|
| 42 |
+
|
| 43 |
+
Apple Silicon:
|
| 44 |
+
|
| 45 |
+
```bash
|
| 46 |
+
python -m pip install 'mlx==0.32.2' 'transformers==5.14.1' 'huggingface_hub==1.31.0' 'pillow==12.3.0'
|
| 47 |
+
python -m pip install -e ./swift5-mlx-lm
|
| 48 |
+
```
|
| 49 |
+
|
| 50 |
+
Linux CPU, Python 3.12, glibc 2.35 or newer:
|
| 51 |
+
|
| 52 |
+
```bash
|
| 53 |
+
python -m pip install 'mlx[cpu]==0.32.2' 'transformers==5.14.1' 'huggingface_hub==1.31.0' 'pillow==12.3.0'
|
| 54 |
+
python -m pip install -e ./swift5-mlx-lm
|
| 55 |
+
```
|
| 56 |
+
|
| 57 |
+
The historical [Linux environment](compatibility/environment-linux.json) records
|
| 58 |
+
Hub 1.32.0. The 1.31.0 pin above was separately installed in the independent macOS
|
| 59 |
+
audit, where 18 synthetic patch tests passed. These environments are not identical
|
| 60 |
+
and the tests did not load the full 27B model. The upstream code
|
| 61 |
+
[MIT notice](compatibility/LICENSE-MLX-LM-MIT) is included separately from weight licenses.
|
| 62 |
+
|
| 63 |
+
## Text generation
|
| 64 |
+
|
| 65 |
+
```python
|
| 66 |
+
import mlx.core as mx
|
| 67 |
+
from mlx_lm import generate, load
|
| 68 |
+
from mlx_lm.sample_utils import make_sampler
|
| 69 |
+
|
| 70 |
+
model, tokenizer = load("Swift-1.5-5bit-MLX")
|
| 71 |
+
if mx.default_device() == mx.cpu:
|
| 72 |
+
model.apply(lambda x: x.astype(mx.float32) if mx.issubdtype(x.dtype, mx.floating) else x)
|
| 73 |
+
prompt = tokenizer.apply_chat_template(
|
| 74 |
+
[{"role": "user", "content": "Reply with exactly: Hello from Swift."}],
|
| 75 |
+
tokenize=False, add_generation_prompt=True, enable_thinking=False,
|
| 76 |
+
)
|
| 77 |
+
mx.random.seed(20260922)
|
| 78 |
+
print(generate(model, tokenizer, prompt=prompt, max_tokens=32, sampler=make_sampler(temp=0)))
|
| 79 |
+
```
|
| 80 |
+
|
| 81 |
+
The CPU branch changes only in-memory floating types; packed UINT32 weights and
|
| 82 |
+
files are unchanged. The historical build reported a Linux BF16 accumulation issue.
|
| 83 |
+
Its original diagnostic file was not published. The separately executed
|
| 84 |
+
[macOS CPU/Metal diagnostic](compatibility/macos-quantized-matmul-diagnostic.json)
|
| 85 |
+
uses synthetic tensors: summing 8,192 ones gives 256 on CPU BF16 and 8,192 with FP32;
|
| 86 |
+
Metal BF16/FP32 also give 8,192. It is not a new Linux or full-model generation test.
|
| 87 |
+
|
| 88 |
+
The template supports `reasoning_effort="low"`, `"medium"`, and `"xhigh"`.
|
| 89 |
+
Template support does not establish generated quality for those modes.
|
| 90 |
+
The explicit `model.mtp_logits` step and `model.visual` encoder have historical
|
| 91 |
+
component evidence. Integrated image/video chat and speculative generation are
|
| 92 |
+
not implemented; unsupported multimodal generation must not be reported as working.
|
| 93 |
+
|
| 94 |
+
## Conversion provenance
|
| 95 |
+
|
| 96 |
+
Conversion is not part of installation. If separately authorized, use only the
|
| 97 |
+
complete customized Swift BF16 source identified in `QUANTIZATION_MANIFEST.json`,
|
| 98 |
+
with its 18 shards verified before conversion, the pinned patched converter, and
|
| 99 |
+
affine / 5-bit / group size 64. Do not fill missing weights with base Qwen or another
|
| 100 |
+
quantization. Existing quantized weights are unchanged by these packaging repairs.
|
chat_template.jinja
ADDED
|
@@ -0,0 +1,170 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{%- set image_count = namespace(value=0) %}
|
| 2 |
+
{%- set video_count = namespace(value=0) %}
|
| 3 |
+
{%- macro render_content(content, do_vision_count, is_system_content=false) %}
|
| 4 |
+
{%- if content is string %}
|
| 5 |
+
{{- content }}
|
| 6 |
+
{%- elif content is iterable and content is not mapping %}
|
| 7 |
+
{%- for item in content %}
|
| 8 |
+
{%- if 'image' in item or 'image_url' in item or item.type == 'image' %}
|
| 9 |
+
{%- if is_system_content %}
|
| 10 |
+
{{- raise_exception('System message cannot contain images.') }}
|
| 11 |
+
{%- endif %}
|
| 12 |
+
{%- if do_vision_count %}
|
| 13 |
+
{%- set image_count.value = image_count.value + 1 %}
|
| 14 |
+
{%- endif %}
|
| 15 |
+
{%- if add_vision_id %}
|
| 16 |
+
{{- 'Picture ' ~ image_count.value ~ ': ' }}
|
| 17 |
+
{%- endif %}
|
| 18 |
+
{{- '<|vision_start|><|image_pad|><|vision_end|>' }}
|
| 19 |
+
{%- elif 'video' in item or item.type == 'video' %}
|
| 20 |
+
{%- if is_system_content %}
|
| 21 |
+
{{- raise_exception('System message cannot contain videos.') }}
|
| 22 |
+
{%- endif %}
|
| 23 |
+
{%- if do_vision_count %}
|
| 24 |
+
{%- set video_count.value = video_count.value + 1 %}
|
| 25 |
+
{%- endif %}
|
| 26 |
+
{%- if add_vision_id %}
|
| 27 |
+
{{- 'Video ' ~ video_count.value ~ ': ' }}
|
| 28 |
+
{%- endif %}
|
| 29 |
+
{{- '<|vision_start|><|video_pad|><|vision_end|>' }}
|
| 30 |
+
{%- elif 'text' in item %}
|
| 31 |
+
{{- item.text }}
|
| 32 |
+
{%- else %}
|
| 33 |
+
{{- raise_exception('Unexpected item type in content.') }}
|
| 34 |
+
{%- endif %}
|
| 35 |
+
{%- endfor %}
|
| 36 |
+
{%- elif content is none or content is undefined %}
|
| 37 |
+
{{- '' }}
|
| 38 |
+
{%- else %}
|
| 39 |
+
{{- raise_exception('Unexpected content type.') }}
|
| 40 |
+
{%- endif %}
|
| 41 |
+
{%- endmacro %}
|
| 42 |
+
{%- if not messages %}
|
| 43 |
+
{{- raise_exception('No messages provided.') }}
|
| 44 |
+
{%- endif %}
|
| 45 |
+
{%- set reasoning_instructions = '' %}
|
| 46 |
+
{%- if enable_thinking is undefined or enable_thinking is true %}
|
| 47 |
+
{%- set resolved_reasoning_effort = reasoning_effort|default('xhigh') %}
|
| 48 |
+
{%- if resolved_reasoning_effort not in ('xhigh', 'medium', 'low') %}
|
| 49 |
+
{{- raise_exception('Unexpected reasoning effort ' ~ reasoning_effort ~ '. Supported types are xhigh (default), medium, and low.') }}
|
| 50 |
+
{%- endif %}
|
| 51 |
+
{%- if resolved_reasoning_effort == 'xhigh' %}
|
| 52 |
+
{%- set reasoning_instructions = 'Reasoning effort is set to xhigh. Please think carefully through the task, validate key assumptions, consider plausible alternatives, and prioritize correctness, consistency, and clarity in the final answer.' %}
|
| 53 |
+
{%- elif resolved_reasoning_effort == 'low' %}
|
| 54 |
+
{%- set reasoning_instructions = 'Reasoning effort is set to low. Keep your thinking brief and focused, moving directly to the conclusion without unnecessary elaboration.' %}
|
| 55 |
+
{%- endif %}
|
| 56 |
+
{%- endif %}
|
| 57 |
+
{%- if tools and tools is iterable and tools is not mapping %}
|
| 58 |
+
{{- '<|im_start|>system\n' }}
|
| 59 |
+
{%- if reasoning_instructions %}
|
| 60 |
+
{{- reasoning_instructions + '\n\n' }}
|
| 61 |
+
{%- endif %}
|
| 62 |
+
{{- "# Tools\n\nYou have access to the following functions:\n\n<tools>" }}
|
| 63 |
+
{%- for tool in tools %}
|
| 64 |
+
{{- "\n" }}
|
| 65 |
+
{{- tool | tojson }}
|
| 66 |
+
{%- endfor %}
|
| 67 |
+
{{- "\n</tools>" }}
|
| 68 |
+
{{- '\n\nIf you choose to call a function ONLY reply in the following format with NO suffix:\n\n<tool_call>\n<function=example_function_name>\n<parameter=example_parameter_1>\nvalue_1\n</parameter>\n<parameter=example_parameter_2>\nThis is the value for the second parameter\nthat can span\nmultiple lines\n</parameter>\n</function>\n</tool_call>\n\n<IMPORTANT>\nReminder:\n- Function calls MUST follow the specified format: an inner <function=...></function> block must be nested within <tool_call></tool_call> XML tags\n- Required parameters MUST be specified\n- You may provide optional reasoning for your function call in natural language BEFORE the function call, but NOT after\n- If there is no function call available, answer the question like normal with your current knowledge and do not tell the user about function calls\n</IMPORTANT>' }}
|
| 69 |
+
{%- if messages[0].role == 'system' %}
|
| 70 |
+
{%- set content = render_content(messages[0].content, false, true)|trim %}
|
| 71 |
+
{%- if content %}
|
| 72 |
+
{{- '\n\n' + content }}
|
| 73 |
+
{%- endif %}
|
| 74 |
+
{%- endif %}
|
| 75 |
+
{{- '<|im_end|>\n' }}
|
| 76 |
+
{%- else %}
|
| 77 |
+
{%- if messages[0].role == 'system' %}
|
| 78 |
+
{%- set content = render_content(messages[0].content, false, true)|trim %}
|
| 79 |
+
{%- if content %}
|
| 80 |
+
{{- '<|im_start|>system\n' + (reasoning_instructions + '\n\n' if reasoning_instructions else '') + content + '<|im_end|>\n' }}
|
| 81 |
+
{%- elif reasoning_instructions %}
|
| 82 |
+
{{- '<|im_start|>system\n' + reasoning_instructions + '<|im_end|>\n' }}
|
| 83 |
+
{%- endif %}
|
| 84 |
+
{%- elif reasoning_instructions %}
|
| 85 |
+
{{- '<|im_start|>system\n' + reasoning_instructions + '<|im_end|>\n' }}
|
| 86 |
+
{%- endif %}
|
| 87 |
+
{%- endif %}
|
| 88 |
+
{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}
|
| 89 |
+
{%- for message in messages[::-1] %}
|
| 90 |
+
{%- set index = (messages|length - 1) - loop.index0 %}
|
| 91 |
+
{%- if ns.multi_step_tool and message.role == "user" %}
|
| 92 |
+
{%- set content = render_content(message.content, false)|trim %}
|
| 93 |
+
{%- if not(content.startswith('<tool_response>') and content.endswith('</tool_response>')) %}
|
| 94 |
+
{%- set ns.multi_step_tool = false %}
|
| 95 |
+
{%- set ns.last_query_index = index %}
|
| 96 |
+
{%- endif %}
|
| 97 |
+
{%- endif %}
|
| 98 |
+
{%- endfor %}
|
| 99 |
+
{%- if ns.multi_step_tool %}
|
| 100 |
+
{{- raise_exception('No user query found in messages.') }}
|
| 101 |
+
{%- endif %}
|
| 102 |
+
{%- for message in messages %}
|
| 103 |
+
{%- set content = render_content(message.content, true)|trim %}
|
| 104 |
+
{%- if message.role == "system" %}
|
| 105 |
+
{%- if not loop.first %}
|
| 106 |
+
{{- raise_exception('System message must be at the beginning.') }}
|
| 107 |
+
{%- endif %}
|
| 108 |
+
{%- elif message.role == "user" %}
|
| 109 |
+
{{- '<|im_start|>' + message.role + '\n' + content + '<|im_end|>' + '\n' }}
|
| 110 |
+
{%- elif message.role == "assistant" %}
|
| 111 |
+
{%- set reasoning_content = '' %}
|
| 112 |
+
{%- if message.reasoning_content is string %}
|
| 113 |
+
{%- set reasoning_content = message.reasoning_content %}
|
| 114 |
+
{%- endif %}
|
| 115 |
+
{%- set reasoning_content = reasoning_content|trim %}
|
| 116 |
+
{%- if preserve_thinking is undefined or preserve_thinking is true or loop.index0 > ns.last_query_index %}
|
| 117 |
+
{{- '<|im_start|>' + message.role + '\n<think>\n' + reasoning_content + '\n</think>\n\n' + content }}
|
| 118 |
+
{%- else %}
|
| 119 |
+
{{- '<|im_start|>' + message.role + '\n' + content }}
|
| 120 |
+
{%- endif %}
|
| 121 |
+
{%- if message.tool_calls and message.tool_calls is iterable and message.tool_calls is not mapping %}
|
| 122 |
+
{%- for tool_call in message.tool_calls %}
|
| 123 |
+
{%- if tool_call.function is defined %}
|
| 124 |
+
{%- set tool_call = tool_call.function %}
|
| 125 |
+
{%- endif %}
|
| 126 |
+
{%- if loop.first %}
|
| 127 |
+
{%- if content|trim %}
|
| 128 |
+
{{- '\n\n<tool_call>\n<function=' + tool_call.name + '>\n' }}
|
| 129 |
+
{%- else %}
|
| 130 |
+
{{- '<tool_call>\n<function=' + tool_call.name + '>\n' }}
|
| 131 |
+
{%- endif %}
|
| 132 |
+
{%- else %}
|
| 133 |
+
{{- '\n<tool_call>\n<function=' + tool_call.name + '>\n' }}
|
| 134 |
+
{%- endif %}
|
| 135 |
+
{%- if tool_call.arguments is defined and tool_call.arguments != '' %}
|
| 136 |
+
{%- for args_name, args_value in tool_call.arguments|items %}
|
| 137 |
+
{{- '<parameter=' + args_name + '>\n' }}
|
| 138 |
+
{%- set args_value = args_value | string if args_value is string else args_value | tojson | safe %}
|
| 139 |
+
{{- args_value }}
|
| 140 |
+
{{- '\n</parameter>\n' }}
|
| 141 |
+
{%- endfor %}
|
| 142 |
+
{%- endif %}
|
| 143 |
+
{{- '</function>\n</tool_call>' }}
|
| 144 |
+
{%- endfor %}
|
| 145 |
+
{%- endif %}
|
| 146 |
+
{{- '<|im_end|>\n' }}
|
| 147 |
+
{%- elif message.role == "tool" %}
|
| 148 |
+
{%- if loop.previtem and loop.previtem.role != "tool" %}
|
| 149 |
+
{{- '<|im_start|>user' }}
|
| 150 |
+
{%- endif %}
|
| 151 |
+
{{- '\n<tool_response>\n' }}
|
| 152 |
+
{{- content }}
|
| 153 |
+
{{- '\n</tool_response>' }}
|
| 154 |
+
{%- if not loop.last and loop.nextitem.role != "tool" %}
|
| 155 |
+
{{- '<|im_end|>\n' }}
|
| 156 |
+
{%- elif loop.last %}
|
| 157 |
+
{{- '<|im_end|>\n' }}
|
| 158 |
+
{%- endif %}
|
| 159 |
+
{%- else %}
|
| 160 |
+
{{- raise_exception('Unexpected message role.') }}
|
| 161 |
+
{%- endif %}
|
| 162 |
+
{%- endfor %}
|
| 163 |
+
{%- if add_generation_prompt %}
|
| 164 |
+
{{- '<|im_start|>assistant\n' }}
|
| 165 |
+
{%- if enable_thinking is defined and enable_thinking is false %}
|
| 166 |
+
{{- '<think>\n\n</think>\n\n' }}
|
| 167 |
+
{%- else %}
|
| 168 |
+
{{- '<think>\n' }}
|
| 169 |
+
{%- endif %}
|
| 170 |
+
{%- endif %}
|
compatibility/LICENSE-MLX-LM-MIT
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
MIT License
|
| 2 |
+
|
| 3 |
+
Copyright © 2023 Apple Inc.
|
| 4 |
+
|
| 5 |
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
| 6 |
+
of this software and associated documentation files (the "Software"), to deal
|
| 7 |
+
in the Software without restriction, including without limitation the rights
|
| 8 |
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
| 9 |
+
copies of the Software, and to permit persons to whom the Software is
|
| 10 |
+
furnished to do so, subject to the following conditions:
|
| 11 |
+
|
| 12 |
+
The above copyright notice and this permission notice shall be included in all
|
| 13 |
+
copies or substantial portions of the Software.
|
| 14 |
+
|
| 15 |
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
| 16 |
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
| 17 |
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
| 18 |
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
| 19 |
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
| 20 |
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
| 21 |
+
SOFTWARE.
|
compatibility/conversion-result.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"command": [
|
| 3 |
+
"mlx_lm.convert",
|
| 4 |
+
"--hf-path",
|
| 5 |
+
"<SOURCE_MODEL_DIR>",
|
| 6 |
+
"--mlx-path",
|
| 7 |
+
"<OUTPUT_MODEL_DIR>",
|
| 8 |
+
"--quantize",
|
| 9 |
+
"--q-mode",
|
| 10 |
+
"affine",
|
| 11 |
+
"--q-bits",
|
| 12 |
+
"5",
|
| 13 |
+
"--q-group-size",
|
| 14 |
+
"64"
|
| 15 |
+
],
|
| 16 |
+
"elapsed_seconds": 130.01374627799942,
|
| 17 |
+
"finished_at": "2026-09-22T12:05:47.557129+00:00",
|
| 18 |
+
"quantization": {
|
| 19 |
+
"bits": 5,
|
| 20 |
+
"group_size": 64,
|
| 21 |
+
"mode": "affine"
|
| 22 |
+
},
|
| 23 |
+
"returncode": 0,
|
| 24 |
+
"source_manifest_sha256": "0a00065b88ab003281853a7fb9bd5ce0086bc3781b36136d8c39da19933923ae",
|
| 25 |
+
"source_repo": "ukisai/Swift-1.5-Qwen3.8-27b",
|
| 26 |
+
"source_revision": "5ad04445d2686f525e9fbe5c077e6fa0c7df4200",
|
| 27 |
+
"started_at": "2026-09-22T12:03:37.543218+00:00"
|
| 28 |
+
}
|
compatibility/enable-5bit.patch
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
diff --git a/mlx_lm/models/qwen3_5_full.py b/mlx_lm/models/qwen3_5_full.py
|
| 2 |
+
--- a/mlx_lm/models/qwen3_5_full.py
|
| 3 |
+
+++ b/mlx_lm/models/qwen3_5_full.py
|
| 4 |
+
@@ -459,9 +459,9 @@ class Model(nn.Module):
|
| 5 |
+
settings.get("group_size"),
|
| 6 |
+
settings.get("mode", "affine"),
|
| 7 |
+
)
|
| 8 |
+
- if (bits, group, mode) != (4, 64, "affine"):
|
| 9 |
+
+ if bits not in (4, 5) or group != 64 or mode != "affine":
|
| 10 |
+
raise ValueError(
|
| 11 |
+
- "This extension only prepares affine/4-bit/group-64 native checkpoints"
|
| 12 |
+
+ "This extension only prepares affine/4-or-5-bit/group-64 native checkpoints"
|
| 13 |
+
)
|
| 14 |
+
original = shapes[f"{path}.weight"]
|
| 15 |
+
if original[-1] % group:
|
| 16 |
+
diff --git a/tests/test_qwen3_5_full.py b/tests/test_qwen3_5_full.py
|
| 17 |
+
--- a/tests/test_qwen3_5_full.py
|
| 18 |
+
+++ b/tests/test_qwen3_5_full.py
|
| 19 |
+
@@ -340,14 +340,17 @@ def test_official_nonquantized_convert_and_reload_preserve_all_tensors(
|
| 20 |
+
load_model(output, lazy=True)
|
| 21 |
+
|
| 22 |
+
|
| 23 |
+
-def test_fixed_affine_quantized_roundtrip_preserves_component_tree(reference, tmp_path):
|
| 24 |
+
+@pytest.mark.parametrize("bits", [4, 5])
|
| 25 |
+
+def test_fixed_affine_quantized_roundtrip_preserves_component_tree(
|
| 26 |
+
+ reference, tmp_path, bits
|
| 27 |
+
+):
|
| 28 |
+
from mlx_lm.utils import quantize_model, save_model
|
| 29 |
+
|
| 30 |
+
config, _, _, state, _ = reference
|
| 31 |
+
model = Model(ModelArgs.from_dict(config))
|
| 32 |
+
model.load_weights(list(model.sanitize(state).items()), strict=True)
|
| 33 |
+
original_names = set(dict(tree_flatten(model.parameters())))
|
| 34 |
+
- model, quantized_config = quantize_model(model, config, 64, 4, mode="affine")
|
| 35 |
+
+ model, quantized_config = quantize_model(model, config, 64, bits, mode="affine")
|
| 36 |
+
save_model(tmp_path, model)
|
| 37 |
+
save_config(quantized_config, tmp_path / "config.json")
|
| 38 |
+
loaded, saved_config = load_model(tmp_path, lazy=False, strict=True)
|
| 39 |
+
@@ -355,7 +358,7 @@ def test_fixed_affine_quantized_roundtrip_preserves_component_tree(reference, tm
|
| 40 |
+
assert set(actual) == set(expected)
|
| 41 |
+
assert original_names <= set(actual)
|
| 42 |
+
assert saved_config["quantization"] == {
|
| 43 |
+
- "bits": 4,
|
| 44 |
+
+ "bits": bits,
|
| 45 |
+
"group_size": 64,
|
| 46 |
+
"mode": "affine",
|
| 47 |
+
}
|
compatibility/environment-linux.json
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"packages": {
|
| 3 |
+
"huggingface-hub": "1.32.0",
|
| 4 |
+
"mlx": "0.32.2",
|
| 5 |
+
"mlx-cpu": "0.32.2",
|
| 6 |
+
"mlx-lm": "0.32.0",
|
| 7 |
+
"pillow": "12.3.0",
|
| 8 |
+
"safetensors": "0.8.0",
|
| 9 |
+
"transformers": "5.14.1"
|
| 10 |
+
},
|
| 11 |
+
"platform": "Linux x86_64",
|
| 12 |
+
"runtime": "CPU validation only"
|
| 13 |
+
}
|
compatibility/macos-quantized-matmul-diagnostic.json
ADDED
|
@@ -0,0 +1,189 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"scope": "Synthetic kernel probe on macOS, not Linux and not real model inference",
|
| 3 |
+
"results": [
|
| 4 |
+
{
|
| 5 |
+
"device": "DeviceType.gpu",
|
| 6 |
+
"bits": 3,
|
| 7 |
+
"group_size": 64,
|
| 8 |
+
"floating_dtype": "mlx.core.bfloat16",
|
| 9 |
+
"expected": 8192,
|
| 10 |
+
"actual": [
|
| 11 |
+
[
|
| 12 |
+
8192.0,
|
| 13 |
+
8192.0,
|
| 14 |
+
8192.0,
|
| 15 |
+
8192.0,
|
| 16 |
+
8192.0,
|
| 17 |
+
8192.0,
|
| 18 |
+
8192.0,
|
| 19 |
+
8192.0
|
| 20 |
+
]
|
| 21 |
+
],
|
| 22 |
+
"exact": true,
|
| 23 |
+
"packed_sha256": "de676bae28a480011d3d012db14bef539324e62a841a9627863c689bea168af3",
|
| 24 |
+
"packed_dtype": "mlx.core.uint32",
|
| 25 |
+
"seconds": 0.02095266600008472
|
| 26 |
+
},
|
| 27 |
+
{
|
| 28 |
+
"device": "DeviceType.gpu",
|
| 29 |
+
"bits": 3,
|
| 30 |
+
"group_size": 64,
|
| 31 |
+
"floating_dtype": "mlx.core.float32",
|
| 32 |
+
"expected": 8192,
|
| 33 |
+
"actual": [
|
| 34 |
+
[
|
| 35 |
+
8192.0,
|
| 36 |
+
8192.0,
|
| 37 |
+
8192.0,
|
| 38 |
+
8192.0,
|
| 39 |
+
8192.0,
|
| 40 |
+
8192.0,
|
| 41 |
+
8192.0,
|
| 42 |
+
8192.0
|
| 43 |
+
]
|
| 44 |
+
],
|
| 45 |
+
"exact": true,
|
| 46 |
+
"packed_sha256": "de676bae28a480011d3d012db14bef539324e62a841a9627863c689bea168af3",
|
| 47 |
+
"packed_dtype": "mlx.core.uint32",
|
| 48 |
+
"seconds": 0.014540874999511288
|
| 49 |
+
},
|
| 50 |
+
{
|
| 51 |
+
"device": "DeviceType.gpu",
|
| 52 |
+
"bits": 5,
|
| 53 |
+
"group_size": 64,
|
| 54 |
+
"floating_dtype": "mlx.core.bfloat16",
|
| 55 |
+
"expected": 8192,
|
| 56 |
+
"actual": [
|
| 57 |
+
[
|
| 58 |
+
8192.0,
|
| 59 |
+
8192.0,
|
| 60 |
+
8192.0,
|
| 61 |
+
8192.0,
|
| 62 |
+
8192.0,
|
| 63 |
+
8192.0,
|
| 64 |
+
8192.0,
|
| 65 |
+
8192.0
|
| 66 |
+
]
|
| 67 |
+
],
|
| 68 |
+
"exact": true,
|
| 69 |
+
"packed_sha256": "02b1c2234680617802901a77eae606ad02e4ddb4282ccbc60061eac5b2d90bba",
|
| 70 |
+
"packed_dtype": "mlx.core.uint32",
|
| 71 |
+
"seconds": 0.017056000000593485
|
| 72 |
+
},
|
| 73 |
+
{
|
| 74 |
+
"device": "DeviceType.gpu",
|
| 75 |
+
"bits": 5,
|
| 76 |
+
"group_size": 64,
|
| 77 |
+
"floating_dtype": "mlx.core.float32",
|
| 78 |
+
"expected": 8192,
|
| 79 |
+
"actual": [
|
| 80 |
+
[
|
| 81 |
+
8192.0,
|
| 82 |
+
8192.0,
|
| 83 |
+
8192.0,
|
| 84 |
+
8192.0,
|
| 85 |
+
8192.0,
|
| 86 |
+
8192.0,
|
| 87 |
+
8192.0,
|
| 88 |
+
8192.0
|
| 89 |
+
]
|
| 90 |
+
],
|
| 91 |
+
"exact": true,
|
| 92 |
+
"packed_sha256": "02b1c2234680617802901a77eae606ad02e4ddb4282ccbc60061eac5b2d90bba",
|
| 93 |
+
"packed_dtype": "mlx.core.uint32",
|
| 94 |
+
"seconds": 0.021967042001051595
|
| 95 |
+
},
|
| 96 |
+
{
|
| 97 |
+
"device": "DeviceType.cpu",
|
| 98 |
+
"bits": 3,
|
| 99 |
+
"group_size": 64,
|
| 100 |
+
"floating_dtype": "mlx.core.bfloat16",
|
| 101 |
+
"expected": 8192,
|
| 102 |
+
"actual": [
|
| 103 |
+
[
|
| 104 |
+
256.0,
|
| 105 |
+
256.0,
|
| 106 |
+
256.0,
|
| 107 |
+
256.0,
|
| 108 |
+
256.0,
|
| 109 |
+
256.0,
|
| 110 |
+
256.0,
|
| 111 |
+
256.0
|
| 112 |
+
]
|
| 113 |
+
],
|
| 114 |
+
"exact": false,
|
| 115 |
+
"packed_sha256": "de676bae28a480011d3d012db14bef539324e62a841a9627863c689bea168af3",
|
| 116 |
+
"packed_dtype": "mlx.core.uint32",
|
| 117 |
+
"seconds": 0.00037379100103862584
|
| 118 |
+
},
|
| 119 |
+
{
|
| 120 |
+
"device": "DeviceType.cpu",
|
| 121 |
+
"bits": 3,
|
| 122 |
+
"group_size": 64,
|
| 123 |
+
"floating_dtype": "mlx.core.float32",
|
| 124 |
+
"expected": 8192,
|
| 125 |
+
"actual": [
|
| 126 |
+
[
|
| 127 |
+
8192.0,
|
| 128 |
+
8192.0,
|
| 129 |
+
8192.0,
|
| 130 |
+
8192.0,
|
| 131 |
+
8192.0,
|
| 132 |
+
8192.0,
|
| 133 |
+
8192.0,
|
| 134 |
+
8192.0
|
| 135 |
+
]
|
| 136 |
+
],
|
| 137 |
+
"exact": true,
|
| 138 |
+
"packed_sha256": "de676bae28a480011d3d012db14bef539324e62a841a9627863c689bea168af3",
|
| 139 |
+
"packed_dtype": "mlx.core.uint32",
|
| 140 |
+
"seconds": 0.00011829099821625277
|
| 141 |
+
},
|
| 142 |
+
{
|
| 143 |
+
"device": "DeviceType.cpu",
|
| 144 |
+
"bits": 5,
|
| 145 |
+
"group_size": 64,
|
| 146 |
+
"floating_dtype": "mlx.core.bfloat16",
|
| 147 |
+
"expected": 8192,
|
| 148 |
+
"actual": [
|
| 149 |
+
[
|
| 150 |
+
256.0,
|
| 151 |
+
256.0,
|
| 152 |
+
256.0,
|
| 153 |
+
256.0,
|
| 154 |
+
256.0,
|
| 155 |
+
256.0,
|
| 156 |
+
256.0,
|
| 157 |
+
256.0
|
| 158 |
+
]
|
| 159 |
+
],
|
| 160 |
+
"exact": false,
|
| 161 |
+
"packed_sha256": "02b1c2234680617802901a77eae606ad02e4ddb4282ccbc60061eac5b2d90bba",
|
| 162 |
+
"packed_dtype": "mlx.core.uint32",
|
| 163 |
+
"seconds": 0.0003301249998912681
|
| 164 |
+
},
|
| 165 |
+
{
|
| 166 |
+
"device": "DeviceType.cpu",
|
| 167 |
+
"bits": 5,
|
| 168 |
+
"group_size": 64,
|
| 169 |
+
"floating_dtype": "mlx.core.float32",
|
| 170 |
+
"expected": 8192,
|
| 171 |
+
"actual": [
|
| 172 |
+
[
|
| 173 |
+
8192.0,
|
| 174 |
+
8192.0,
|
| 175 |
+
8192.0,
|
| 176 |
+
8192.0,
|
| 177 |
+
8192.0,
|
| 178 |
+
8192.0,
|
| 179 |
+
8192.0,
|
| 180 |
+
8192.0
|
| 181 |
+
]
|
| 182 |
+
],
|
| 183 |
+
"exact": true,
|
| 184 |
+
"packed_sha256": "02b1c2234680617802901a77eae606ad02e4ddb4282ccbc60061eac5b2d90bba",
|
| 185 |
+
"packed_dtype": "mlx.core.uint32",
|
| 186 |
+
"seconds": 8.200000229408033e-05
|
| 187 |
+
}
|
| 188 |
+
]
|
| 189 |
+
}
|
compatibility/package-checks.json
ADDED
|
@@ -0,0 +1,2088 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"observed_at": "2026-09-22T14:48:11.669625+00:00",
|
| 3 |
+
"source": "Independent local packaging audit",
|
| 4 |
+
"scope": "Original-build file integrity and runtime assets; no full model generation",
|
| 5 |
+
"original_build_integrity": {
|
| 6 |
+
"model": "mlx5",
|
| 7 |
+
"event": "SUMMARY",
|
| 8 |
+
"file_count": 29,
|
| 9 |
+
"tensor_count": 2379,
|
| 10 |
+
"manifest_sha256": "1e0d5730ef70b67f8dbbe6c2b2ced6115f74658b7a30c73948fa5497c226935a",
|
| 11 |
+
"manifest_mismatches": [],
|
| 12 |
+
"header_index_status": "PASS",
|
| 13 |
+
"elapsed_seconds": 147.257588171,
|
| 14 |
+
"scope": "Original build; NOT HF upload validation"
|
| 15 |
+
},
|
| 16 |
+
"original_small_file_matches": [
|
| 17 |
+
{
|
| 18 |
+
"file": "LICENSE",
|
| 19 |
+
"sha256": "1367057bf17041aa1d69286a1400be5f464d2f8b8f54f600088b209eac1850be",
|
| 20 |
+
"matches_original_build": true
|
| 21 |
+
},
|
| 22 |
+
{
|
| 23 |
+
"file": "LICENSE-APACHE-2.0",
|
| 24 |
+
"sha256": "bbedc3fda3305820b977265f01b8619d87570a6739de3a5582c3464840f1e57a",
|
| 25 |
+
"matches_original_build": true
|
| 26 |
+
},
|
| 27 |
+
{
|
| 28 |
+
"file": "NOTICE",
|
| 29 |
+
"sha256": "be30f3d464974990e40e9833bc6f356fd89fe16733c6c1a581d97106b8ae741d",
|
| 30 |
+
"matches_original_build": true
|
| 31 |
+
},
|
| 32 |
+
{
|
| 33 |
+
"file": "QUANTIZATION_MANIFEST.json",
|
| 34 |
+
"sha256": "7bbc577963403dd60e93e994a8aeb12142558031d985489aea27708a97ada4cf",
|
| 35 |
+
"matches_original_build": true
|
| 36 |
+
},
|
| 37 |
+
{
|
| 38 |
+
"file": "README.md",
|
| 39 |
+
"sha256": "22ec5682ebce0fd3f576d70c87fc8bba81589ebdb6370f59bf664f36bf9bc694",
|
| 40 |
+
"matches_original_build": true
|
| 41 |
+
},
|
| 42 |
+
{
|
| 43 |
+
"file": "USAGE.md",
|
| 44 |
+
"sha256": "15e984ebae2115a54d86282ce7e04ebac6e78eb1e2ca4f55191d5a9a908b47a2",
|
| 45 |
+
"matches_original_build": true
|
| 46 |
+
},
|
| 47 |
+
{
|
| 48 |
+
"file": "chat_template.jinja",
|
| 49 |
+
"sha256": "c3cf9e34abf4f9e36c2d72165aa9c132d3e2a725b6c2586aaa3a8af9d7a81041",
|
| 50 |
+
"matches_original_build": true
|
| 51 |
+
},
|
| 52 |
+
{
|
| 53 |
+
"file": "compatibility/conversion-result.json",
|
| 54 |
+
"sha256": "46d5f5abfae73b29c2b65ec5a6d05decd8e4d5b50eb0dd0df90f94edae040986",
|
| 55 |
+
"matches_original_build": true
|
| 56 |
+
},
|
| 57 |
+
{
|
| 58 |
+
"file": "compatibility/enable-5bit.patch",
|
| 59 |
+
"sha256": "b985961eac3035e05ca4c9f3a8b283c26e6dd69bab4d113997fc04fe2a4f99cc",
|
| 60 |
+
"matches_original_build": true
|
| 61 |
+
},
|
| 62 |
+
{
|
| 63 |
+
"file": "compatibility/environment-linux.json",
|
| 64 |
+
"sha256": "29646417ed15e6c1d08602b5832287abd44aabf4da624ea06f7e0b617bccbb48",
|
| 65 |
+
"matches_original_build": true
|
| 66 |
+
},
|
| 67 |
+
{
|
| 68 |
+
"file": "compatibility/patch-manifest.json",
|
| 69 |
+
"sha256": "c862249f212d4f94113a85336db22a24f3128014c034cdf9878fb9e44b103a95",
|
| 70 |
+
"matches_original_build": true
|
| 71 |
+
},
|
| 72 |
+
{
|
| 73 |
+
"file": "compatibility/quant-validation-results.json",
|
| 74 |
+
"sha256": "5a2bdbaa7ffa5616b2edf4817953369c694596c6d41aca2ba458a48b651ebab2",
|
| 75 |
+
"matches_original_build": true
|
| 76 |
+
},
|
| 77 |
+
{
|
| 78 |
+
"file": "compatibility/source-structural-results.json",
|
| 79 |
+
"sha256": "2c07ba0d068c3cf8059b3cf31578c9e98540fb08140a2623d79a1eb9737e12e4",
|
| 80 |
+
"matches_original_build": true
|
| 81 |
+
},
|
| 82 |
+
{
|
| 83 |
+
"file": "compatibility/source-verification.json",
|
| 84 |
+
"sha256": "27d87d8d5209c6559643efdd7d7b468b0138ebfb3a7d5771b29be79214bffe75",
|
| 85 |
+
"matches_original_build": true
|
| 86 |
+
},
|
| 87 |
+
{
|
| 88 |
+
"file": "compatibility/swift15-mlx-lm.patch",
|
| 89 |
+
"sha256": "f6f1d0bdafa45863bfbf93dac0398c481c993ea04fdf38b9bae98c643f89eaec",
|
| 90 |
+
"matches_original_build": true
|
| 91 |
+
},
|
| 92 |
+
{
|
| 93 |
+
"file": "config.json",
|
| 94 |
+
"sha256": "77eaf6b1ee9e2ca06a9a3119f218853ec16c6f9f558e6b492a7e9a1be8d2ac43",
|
| 95 |
+
"matches_original_build": true
|
| 96 |
+
},
|
| 97 |
+
{
|
| 98 |
+
"file": "generation_config.json",
|
| 99 |
+
"sha256": "e70c136c1b78ddc1fb0905bac8e733a4dc448d4f852a5dd75143fffc70be550e",
|
| 100 |
+
"matches_original_build": true
|
| 101 |
+
},
|
| 102 |
+
{
|
| 103 |
+
"file": "merges.txt",
|
| 104 |
+
"sha256": "a9d356d7bdf1ef4949e3e748e95b8e10ad9d4e2e838eddc38a0a7b6b94d1db8d",
|
| 105 |
+
"matches_original_build": true
|
| 106 |
+
},
|
| 107 |
+
{
|
| 108 |
+
"file": "preprocessor_config.json",
|
| 109 |
+
"sha256": "27225450ac9c6529872ee1924fcb0962ff5634834f817040f444118116f4e516",
|
| 110 |
+
"matches_original_build": true
|
| 111 |
+
},
|
| 112 |
+
{
|
| 113 |
+
"file": "tokenizer.json",
|
| 114 |
+
"sha256": "0997f410c57a1f4e53b09e4be8f4a172d90edd9564368fb0847030937229b9f3",
|
| 115 |
+
"matches_original_build": true
|
| 116 |
+
},
|
| 117 |
+
{
|
| 118 |
+
"file": "tokenizer_config.json",
|
| 119 |
+
"sha256": "b11349aafa7cdc6a320767cf7ceb29ed82f7eda5d65e8e0819e76f0ce947bf27",
|
| 120 |
+
"matches_original_build": true
|
| 121 |
+
},
|
| 122 |
+
{
|
| 123 |
+
"file": "ukisai-banner.png",
|
| 124 |
+
"sha256": "8577252b8b37e331f06f7ddecdf3bfa1c497e164f9eb36d78c37232d1b8492ca",
|
| 125 |
+
"matches_original_build": true
|
| 126 |
+
},
|
| 127 |
+
{
|
| 128 |
+
"file": "video_preprocessor_config.json",
|
| 129 |
+
"sha256": "7768af27c1fafa9cc9011c1dc20067e03f8915e03b63504550e11d5066986d13",
|
| 130 |
+
"matches_original_build": true
|
| 131 |
+
},
|
| 132 |
+
{
|
| 133 |
+
"file": "vocab.json",
|
| 134 |
+
"sha256": "ce99b4cb2983d118806ce0a8b777a35b093e2000a503ebde25853284c9dfa003",
|
| 135 |
+
"matches_original_build": true
|
| 136 |
+
}
|
| 137 |
+
],
|
| 138 |
+
"original_small_file_matches_scope": "Verified inputs before the documented documentation overlay; current file digests are in UPLOAD_MANIFEST.json.",
|
| 139 |
+
"tokenizer_comparison": {
|
| 140 |
+
"status": "PASS",
|
| 141 |
+
"cases": [
|
| 142 |
+
{
|
| 143 |
+
"case": "copy-01",
|
| 144 |
+
"options": {},
|
| 145 |
+
"rendered_equal": true,
|
| 146 |
+
"tokens_equal": true,
|
| 147 |
+
"rendered_sha256": "4c818d1bec319bdcb9f9ae6fb165958cc228993b88271d074717a54da892a12c",
|
| 148 |
+
"token_ids_sha256": "a92b1c7a4f0c7046a5d8adfa819d3d92870cce145b5316398b467f77267b467b"
|
| 149 |
+
},
|
| 150 |
+
{
|
| 151 |
+
"case": "copy-01",
|
| 152 |
+
"options": {
|
| 153 |
+
"enable_thinking": false
|
| 154 |
+
},
|
| 155 |
+
"rendered_equal": true,
|
| 156 |
+
"tokens_equal": true,
|
| 157 |
+
"rendered_sha256": "65d21c471e0404dd574585906ea708c25e143644e26d6f6da38a963c89d95353",
|
| 158 |
+
"token_ids_sha256": "2f2ea6c38bd950ee61cab76d0e0a2719b90793c129881f4653665f6f32e83f37"
|
| 159 |
+
},
|
| 160 |
+
{
|
| 161 |
+
"case": "copy-01",
|
| 162 |
+
"options": {
|
| 163 |
+
"reasoning_effort": "low"
|
| 164 |
+
},
|
| 165 |
+
"rendered_equal": true,
|
| 166 |
+
"tokens_equal": true,
|
| 167 |
+
"rendered_sha256": "18150302804516ca9bde6d9f4859e35de3047beb7f3f42db2c709f9f659f7d97",
|
| 168 |
+
"token_ids_sha256": "99796b2eb8cb5ea634506794c13de258c6a4381ef2ff617a4952a2e81100a773"
|
| 169 |
+
},
|
| 170 |
+
{
|
| 171 |
+
"case": "copy-01",
|
| 172 |
+
"options": {
|
| 173 |
+
"reasoning_effort": "medium"
|
| 174 |
+
},
|
| 175 |
+
"rendered_equal": true,
|
| 176 |
+
"tokens_equal": true,
|
| 177 |
+
"rendered_sha256": "cc38501bdf707099ff6a0e337475ea7df68417bfc4012dbeff043f22d9d671ef",
|
| 178 |
+
"token_ids_sha256": "628de4373c94835dfb58149eb1f3a6cc7de44019ecff368687b61a6271501263"
|
| 179 |
+
},
|
| 180 |
+
{
|
| 181 |
+
"case": "copy-01",
|
| 182 |
+
"options": {
|
| 183 |
+
"reasoning_effort": "xhigh"
|
| 184 |
+
},
|
| 185 |
+
"rendered_equal": true,
|
| 186 |
+
"tokens_equal": true,
|
| 187 |
+
"rendered_sha256": "4c818d1bec319bdcb9f9ae6fb165958cc228993b88271d074717a54da892a12c",
|
| 188 |
+
"token_ids_sha256": "a92b1c7a4f0c7046a5d8adfa819d3d92870cce145b5316398b467f77267b467b"
|
| 189 |
+
},
|
| 190 |
+
{
|
| 191 |
+
"case": "copy-02",
|
| 192 |
+
"options": {},
|
| 193 |
+
"rendered_equal": true,
|
| 194 |
+
"tokens_equal": true,
|
| 195 |
+
"rendered_sha256": "c899009f64185c1cf610481f00667851c613755d9992bbea2782f63a23aeab50",
|
| 196 |
+
"token_ids_sha256": "a2c44489d2864ff48ab7c3c4ed23786132dba628a7160d29d49538eb7754232d"
|
| 197 |
+
},
|
| 198 |
+
{
|
| 199 |
+
"case": "copy-02",
|
| 200 |
+
"options": {
|
| 201 |
+
"enable_thinking": false
|
| 202 |
+
},
|
| 203 |
+
"rendered_equal": true,
|
| 204 |
+
"tokens_equal": true,
|
| 205 |
+
"rendered_sha256": "0dce1e6a9eae5b1630ac76c0d094e90b3d51252fe393b03eee6678564e29f43a",
|
| 206 |
+
"token_ids_sha256": "ca5fbed68bb860caa55ef73136f045a99917c48c8897883c60f8c71646f03e4f"
|
| 207 |
+
},
|
| 208 |
+
{
|
| 209 |
+
"case": "copy-02",
|
| 210 |
+
"options": {
|
| 211 |
+
"reasoning_effort": "low"
|
| 212 |
+
},
|
| 213 |
+
"rendered_equal": true,
|
| 214 |
+
"tokens_equal": true,
|
| 215 |
+
"rendered_sha256": "398a9d6fee34ee4123220a2a2902f597f4313c8511d97f6793d6b546466c0421",
|
| 216 |
+
"token_ids_sha256": "d2a89478a168aa84c857b0a92a02e92d72827dafe25d4b295a85cb6e4ae62451"
|
| 217 |
+
},
|
| 218 |
+
{
|
| 219 |
+
"case": "copy-02",
|
| 220 |
+
"options": {
|
| 221 |
+
"reasoning_effort": "medium"
|
| 222 |
+
},
|
| 223 |
+
"rendered_equal": true,
|
| 224 |
+
"tokens_equal": true,
|
| 225 |
+
"rendered_sha256": "34206e0e86b7b48b6e4a90b432c00dfecd7e215379355ddf16616a891ec15a5f",
|
| 226 |
+
"token_ids_sha256": "f6d035e18f6cce3a81e364b17997f04a6e373fda9ffd2c803957a0b67a91f3b3"
|
| 227 |
+
},
|
| 228 |
+
{
|
| 229 |
+
"case": "copy-02",
|
| 230 |
+
"options": {
|
| 231 |
+
"reasoning_effort": "xhigh"
|
| 232 |
+
},
|
| 233 |
+
"rendered_equal": true,
|
| 234 |
+
"tokens_equal": true,
|
| 235 |
+
"rendered_sha256": "c899009f64185c1cf610481f00667851c613755d9992bbea2782f63a23aeab50",
|
| 236 |
+
"token_ids_sha256": "a2c44489d2864ff48ab7c3c4ed23786132dba628a7160d29d49538eb7754232d"
|
| 237 |
+
},
|
| 238 |
+
{
|
| 239 |
+
"case": "copy-03",
|
| 240 |
+
"options": {},
|
| 241 |
+
"rendered_equal": true,
|
| 242 |
+
"tokens_equal": true,
|
| 243 |
+
"rendered_sha256": "7546d15c056af8aa4c0c90d23aabb5b1ca726609ba850c3b1b6185a613837c92",
|
| 244 |
+
"token_ids_sha256": "ddbc030acb515ce5e2d03db0a169b6f68905c4827af8a329fed19bec400f985f"
|
| 245 |
+
},
|
| 246 |
+
{
|
| 247 |
+
"case": "copy-03",
|
| 248 |
+
"options": {
|
| 249 |
+
"enable_thinking": false
|
| 250 |
+
},
|
| 251 |
+
"rendered_equal": true,
|
| 252 |
+
"tokens_equal": true,
|
| 253 |
+
"rendered_sha256": "941b6b40fb0afa04dcb3cbeb3d703e1362bfab8aff0c223fe723ad68fb0f1c8c",
|
| 254 |
+
"token_ids_sha256": "1ae80f7895f4296112ee802500c9650fbba344adbd43ea18f6ec38ee5fc1c5ab"
|
| 255 |
+
},
|
| 256 |
+
{
|
| 257 |
+
"case": "copy-03",
|
| 258 |
+
"options": {
|
| 259 |
+
"reasoning_effort": "low"
|
| 260 |
+
},
|
| 261 |
+
"rendered_equal": true,
|
| 262 |
+
"tokens_equal": true,
|
| 263 |
+
"rendered_sha256": "fff8cb95ccca437354811f847c4803f4db097acb3e25741571dc0bc3125275d9",
|
| 264 |
+
"token_ids_sha256": "e2d2fbfdef377e1dc40cc011dd75adf8484f8ad6f2769241207f1070e4b4101f"
|
| 265 |
+
},
|
| 266 |
+
{
|
| 267 |
+
"case": "copy-03",
|
| 268 |
+
"options": {
|
| 269 |
+
"reasoning_effort": "medium"
|
| 270 |
+
},
|
| 271 |
+
"rendered_equal": true,
|
| 272 |
+
"tokens_equal": true,
|
| 273 |
+
"rendered_sha256": "b5b000a062e3a761951c5b319766cec522bfb6d922409fcabfc3d0ddb1a4359d",
|
| 274 |
+
"token_ids_sha256": "262b04aaeff8bf09922edc2a45504750fd9fc9c3f3055b403a9f68b871c6d1c9"
|
| 275 |
+
},
|
| 276 |
+
{
|
| 277 |
+
"case": "copy-03",
|
| 278 |
+
"options": {
|
| 279 |
+
"reasoning_effort": "xhigh"
|
| 280 |
+
},
|
| 281 |
+
"rendered_equal": true,
|
| 282 |
+
"tokens_equal": true,
|
| 283 |
+
"rendered_sha256": "7546d15c056af8aa4c0c90d23aabb5b1ca726609ba850c3b1b6185a613837c92",
|
| 284 |
+
"token_ids_sha256": "ddbc030acb515ce5e2d03db0a169b6f68905c4827af8a329fed19bec400f985f"
|
| 285 |
+
},
|
| 286 |
+
{
|
| 287 |
+
"case": "copy-04",
|
| 288 |
+
"options": {},
|
| 289 |
+
"rendered_equal": true,
|
| 290 |
+
"tokens_equal": true,
|
| 291 |
+
"rendered_sha256": "93cd159f2fb657d1616693847e4f5c43af88edb03234c0b2dcc0181ff408b6ed",
|
| 292 |
+
"token_ids_sha256": "9cca472a04965a233f1a5e45043c6f112b9ee441dd9b26aa23de8b4ca61a626c"
|
| 293 |
+
},
|
| 294 |
+
{
|
| 295 |
+
"case": "copy-04",
|
| 296 |
+
"options": {
|
| 297 |
+
"enable_thinking": false
|
| 298 |
+
},
|
| 299 |
+
"rendered_equal": true,
|
| 300 |
+
"tokens_equal": true,
|
| 301 |
+
"rendered_sha256": "0d7641637466c7079c2bc3e9e79a92397c06d7622bb8472c475f0fe452654c83",
|
| 302 |
+
"token_ids_sha256": "f283875df94548c1657a5550db42828ce955ec3b20fa148e646bbf042f6f0d2b"
|
| 303 |
+
},
|
| 304 |
+
{
|
| 305 |
+
"case": "copy-04",
|
| 306 |
+
"options": {
|
| 307 |
+
"reasoning_effort": "low"
|
| 308 |
+
},
|
| 309 |
+
"rendered_equal": true,
|
| 310 |
+
"tokens_equal": true,
|
| 311 |
+
"rendered_sha256": "05353d7dc1f61ff121bf6598e0936277bd9ca84fbc19fd91e286d6e4b45bc059",
|
| 312 |
+
"token_ids_sha256": "2f715ed2fb5ec71a98be5bd3ed990a1e70d0678f168da4306a5f27dddc0b6856"
|
| 313 |
+
},
|
| 314 |
+
{
|
| 315 |
+
"case": "copy-04",
|
| 316 |
+
"options": {
|
| 317 |
+
"reasoning_effort": "medium"
|
| 318 |
+
},
|
| 319 |
+
"rendered_equal": true,
|
| 320 |
+
"tokens_equal": true,
|
| 321 |
+
"rendered_sha256": "f1a18e28b7392715dc638885ae8d79244fbd278f43e7c13f69fe8fb2b93da608",
|
| 322 |
+
"token_ids_sha256": "433b7e2976986230f0a2e200c658f3a7f00f0e38fe8906970aaedddc66fa59d9"
|
| 323 |
+
},
|
| 324 |
+
{
|
| 325 |
+
"case": "copy-04",
|
| 326 |
+
"options": {
|
| 327 |
+
"reasoning_effort": "xhigh"
|
| 328 |
+
},
|
| 329 |
+
"rendered_equal": true,
|
| 330 |
+
"tokens_equal": true,
|
| 331 |
+
"rendered_sha256": "93cd159f2fb657d1616693847e4f5c43af88edb03234c0b2dcc0181ff408b6ed",
|
| 332 |
+
"token_ids_sha256": "9cca472a04965a233f1a5e45043c6f112b9ee441dd9b26aa23de8b4ca61a626c"
|
| 333 |
+
},
|
| 334 |
+
{
|
| 335 |
+
"case": "copy-05",
|
| 336 |
+
"options": {},
|
| 337 |
+
"rendered_equal": true,
|
| 338 |
+
"tokens_equal": true,
|
| 339 |
+
"rendered_sha256": "fb61ba28f75ad7405020c6d3241f3728b010b8633fdc1642e129b81523e87ad3",
|
| 340 |
+
"token_ids_sha256": "c0337ac4d3e6f3afd6fb5313d1ae35c3fba5fdc1d3b32c615ea1a9d469b23426"
|
| 341 |
+
},
|
| 342 |
+
{
|
| 343 |
+
"case": "copy-05",
|
| 344 |
+
"options": {
|
| 345 |
+
"enable_thinking": false
|
| 346 |
+
},
|
| 347 |
+
"rendered_equal": true,
|
| 348 |
+
"tokens_equal": true,
|
| 349 |
+
"rendered_sha256": "a6bf42558b20071884725645d2ff092639c819386f92af80f95cf87951eceb25",
|
| 350 |
+
"token_ids_sha256": "c1f030f36157b04cdd7a5599f05578720ef484f3300982179014968be81ea065"
|
| 351 |
+
},
|
| 352 |
+
{
|
| 353 |
+
"case": "copy-05",
|
| 354 |
+
"options": {
|
| 355 |
+
"reasoning_effort": "low"
|
| 356 |
+
},
|
| 357 |
+
"rendered_equal": true,
|
| 358 |
+
"tokens_equal": true,
|
| 359 |
+
"rendered_sha256": "ef76dafe530370c7baa9a57c590899bfd62f6814b9c6c36735e28002e382a072",
|
| 360 |
+
"token_ids_sha256": "587c1d346c730fdf014d7e27e58f57344dc0d1e2c3a95a80dce943a16b5d21a6"
|
| 361 |
+
},
|
| 362 |
+
{
|
| 363 |
+
"case": "copy-05",
|
| 364 |
+
"options": {
|
| 365 |
+
"reasoning_effort": "medium"
|
| 366 |
+
},
|
| 367 |
+
"rendered_equal": true,
|
| 368 |
+
"tokens_equal": true,
|
| 369 |
+
"rendered_sha256": "96eaf3b174a72fcabbd9115c37f1a8c180a2ed19340a0cab757c80887a7b06dd",
|
| 370 |
+
"token_ids_sha256": "99598ba689281150a6a056699b14f24b499fc7c0a882ef22e4b2a2a682ff0057"
|
| 371 |
+
},
|
| 372 |
+
{
|
| 373 |
+
"case": "copy-05",
|
| 374 |
+
"options": {
|
| 375 |
+
"reasoning_effort": "xhigh"
|
| 376 |
+
},
|
| 377 |
+
"rendered_equal": true,
|
| 378 |
+
"tokens_equal": true,
|
| 379 |
+
"rendered_sha256": "fb61ba28f75ad7405020c6d3241f3728b010b8633fdc1642e129b81523e87ad3",
|
| 380 |
+
"token_ids_sha256": "c0337ac4d3e6f3afd6fb5313d1ae35c3fba5fdc1d3b32c615ea1a9d469b23426"
|
| 381 |
+
},
|
| 382 |
+
{
|
| 383 |
+
"case": "arithmetic-01",
|
| 384 |
+
"options": {},
|
| 385 |
+
"rendered_equal": true,
|
| 386 |
+
"tokens_equal": true,
|
| 387 |
+
"rendered_sha256": "2a3e217d73ae1cdf4118b870a9ec322dc88de707843c83f0f5481f813faa99a4",
|
| 388 |
+
"token_ids_sha256": "56a79c0ee7bb6e52c284a19a16146c231142c47b22bfd0a27dac2330822afb49"
|
| 389 |
+
},
|
| 390 |
+
{
|
| 391 |
+
"case": "arithmetic-01",
|
| 392 |
+
"options": {
|
| 393 |
+
"enable_thinking": false
|
| 394 |
+
},
|
| 395 |
+
"rendered_equal": true,
|
| 396 |
+
"tokens_equal": true,
|
| 397 |
+
"rendered_sha256": "ee9178c74035beb407c016586ef958578e5be4041b572aa2bf5409dcddf07739",
|
| 398 |
+
"token_ids_sha256": "b520feeac9ab433d35a057c9dc8e2a169254fa0db38e76955d042a2f91c774a7"
|
| 399 |
+
},
|
| 400 |
+
{
|
| 401 |
+
"case": "arithmetic-01",
|
| 402 |
+
"options": {
|
| 403 |
+
"reasoning_effort": "low"
|
| 404 |
+
},
|
| 405 |
+
"rendered_equal": true,
|
| 406 |
+
"tokens_equal": true,
|
| 407 |
+
"rendered_sha256": "3c43b55f9ffffff2dcf76e9b6ae04a1311b330b2c0757ed1fe664cd64c469506",
|
| 408 |
+
"token_ids_sha256": "3b9b091b00ae6093fb726ab7fa7c5e5bdaf6aa87238eb14291bf52a439e178cb"
|
| 409 |
+
},
|
| 410 |
+
{
|
| 411 |
+
"case": "arithmetic-01",
|
| 412 |
+
"options": {
|
| 413 |
+
"reasoning_effort": "medium"
|
| 414 |
+
},
|
| 415 |
+
"rendered_equal": true,
|
| 416 |
+
"tokens_equal": true,
|
| 417 |
+
"rendered_sha256": "39e3c8c4b7c6b8352df4c942933b289007e0e9ac3c7d3dfa172203f0891ad801",
|
| 418 |
+
"token_ids_sha256": "17ca2fe9b641d0b785ef902f06a0fb4463f8b144e85903dcd0dbf7dea82f54be"
|
| 419 |
+
},
|
| 420 |
+
{
|
| 421 |
+
"case": "arithmetic-01",
|
| 422 |
+
"options": {
|
| 423 |
+
"reasoning_effort": "xhigh"
|
| 424 |
+
},
|
| 425 |
+
"rendered_equal": true,
|
| 426 |
+
"tokens_equal": true,
|
| 427 |
+
"rendered_sha256": "2a3e217d73ae1cdf4118b870a9ec322dc88de707843c83f0f5481f813faa99a4",
|
| 428 |
+
"token_ids_sha256": "56a79c0ee7bb6e52c284a19a16146c231142c47b22bfd0a27dac2330822afb49"
|
| 429 |
+
},
|
| 430 |
+
{
|
| 431 |
+
"case": "arithmetic-02",
|
| 432 |
+
"options": {},
|
| 433 |
+
"rendered_equal": true,
|
| 434 |
+
"tokens_equal": true,
|
| 435 |
+
"rendered_sha256": "1580424514af0e654467483640add4ab4c970be8278db0a7dc51a6634160fafe",
|
| 436 |
+
"token_ids_sha256": "bc696d41dda4cfadb0539d3e6b16bba3012ff8adfd9eeba7f192b3fb020bd1ba"
|
| 437 |
+
},
|
| 438 |
+
{
|
| 439 |
+
"case": "arithmetic-02",
|
| 440 |
+
"options": {
|
| 441 |
+
"enable_thinking": false
|
| 442 |
+
},
|
| 443 |
+
"rendered_equal": true,
|
| 444 |
+
"tokens_equal": true,
|
| 445 |
+
"rendered_sha256": "ed261285116d3895ef5f2209e9cdc6c9abd475a551b8ec212ba201303c02de65",
|
| 446 |
+
"token_ids_sha256": "6440d6812569b88a93b4fb5877d6a13138a10c627b39cd54adee08ddefe19eec"
|
| 447 |
+
},
|
| 448 |
+
{
|
| 449 |
+
"case": "arithmetic-02",
|
| 450 |
+
"options": {
|
| 451 |
+
"reasoning_effort": "low"
|
| 452 |
+
},
|
| 453 |
+
"rendered_equal": true,
|
| 454 |
+
"tokens_equal": true,
|
| 455 |
+
"rendered_sha256": "3956026c853805d5dd053f1cb259f44626617e1c4946148db45c2561fea505ec",
|
| 456 |
+
"token_ids_sha256": "248a53a76b3082f4ca13c376452d9fa450cc372b27ee74681776106bf62f75dc"
|
| 457 |
+
},
|
| 458 |
+
{
|
| 459 |
+
"case": "arithmetic-02",
|
| 460 |
+
"options": {
|
| 461 |
+
"reasoning_effort": "medium"
|
| 462 |
+
},
|
| 463 |
+
"rendered_equal": true,
|
| 464 |
+
"tokens_equal": true,
|
| 465 |
+
"rendered_sha256": "b186fa6f03caeb78d03459674e39e7a017d68a025cb578ad0b68ebd10d082f31",
|
| 466 |
+
"token_ids_sha256": "d436f86318f7c2911a841f3dd3310ee76feffd7eecb427f87addbc87eb8c2607"
|
| 467 |
+
},
|
| 468 |
+
{
|
| 469 |
+
"case": "arithmetic-02",
|
| 470 |
+
"options": {
|
| 471 |
+
"reasoning_effort": "xhigh"
|
| 472 |
+
},
|
| 473 |
+
"rendered_equal": true,
|
| 474 |
+
"tokens_equal": true,
|
| 475 |
+
"rendered_sha256": "1580424514af0e654467483640add4ab4c970be8278db0a7dc51a6634160fafe",
|
| 476 |
+
"token_ids_sha256": "bc696d41dda4cfadb0539d3e6b16bba3012ff8adfd9eeba7f192b3fb020bd1ba"
|
| 477 |
+
},
|
| 478 |
+
{
|
| 479 |
+
"case": "arithmetic-03",
|
| 480 |
+
"options": {},
|
| 481 |
+
"rendered_equal": true,
|
| 482 |
+
"tokens_equal": true,
|
| 483 |
+
"rendered_sha256": "758590c0e51a33e06f51fbffc5bbe0e3f777b0f7bf88ad708b58ebd6faccb390",
|
| 484 |
+
"token_ids_sha256": "bebe998965694a6a237aaa57377f49b2edab3815b787bd14a880e37433951748"
|
| 485 |
+
},
|
| 486 |
+
{
|
| 487 |
+
"case": "arithmetic-03",
|
| 488 |
+
"options": {
|
| 489 |
+
"enable_thinking": false
|
| 490 |
+
},
|
| 491 |
+
"rendered_equal": true,
|
| 492 |
+
"tokens_equal": true,
|
| 493 |
+
"rendered_sha256": "ee6e110a809b16af00e88c49f620155ce1c738fd11950af79743146491eb0200",
|
| 494 |
+
"token_ids_sha256": "ece7b34196ccd3cee4f4533466992cc6819660af56bd1bb4c1e4a2efbd09d1aa"
|
| 495 |
+
},
|
| 496 |
+
{
|
| 497 |
+
"case": "arithmetic-03",
|
| 498 |
+
"options": {
|
| 499 |
+
"reasoning_effort": "low"
|
| 500 |
+
},
|
| 501 |
+
"rendered_equal": true,
|
| 502 |
+
"tokens_equal": true,
|
| 503 |
+
"rendered_sha256": "69fdc96534e7e6c2b009822cfbe68f1b164bd8cc28a38396ac6532c9e3717627",
|
| 504 |
+
"token_ids_sha256": "290d3d9286cc2fa631a68f8d7d7c21e79b101dd6f9d47d2e5fed68cae8dfa9f1"
|
| 505 |
+
},
|
| 506 |
+
{
|
| 507 |
+
"case": "arithmetic-03",
|
| 508 |
+
"options": {
|
| 509 |
+
"reasoning_effort": "medium"
|
| 510 |
+
},
|
| 511 |
+
"rendered_equal": true,
|
| 512 |
+
"tokens_equal": true,
|
| 513 |
+
"rendered_sha256": "4fc7455c07e88c95e3e4b9789d219e4bda857bbd8e75099da123855c41c93a9b",
|
| 514 |
+
"token_ids_sha256": "15384731525c414b4dd4496505a9d1c10db7b09e191ecc1ca1324ce51740b9c8"
|
| 515 |
+
},
|
| 516 |
+
{
|
| 517 |
+
"case": "arithmetic-03",
|
| 518 |
+
"options": {
|
| 519 |
+
"reasoning_effort": "xhigh"
|
| 520 |
+
},
|
| 521 |
+
"rendered_equal": true,
|
| 522 |
+
"tokens_equal": true,
|
| 523 |
+
"rendered_sha256": "758590c0e51a33e06f51fbffc5bbe0e3f777b0f7bf88ad708b58ebd6faccb390",
|
| 524 |
+
"token_ids_sha256": "bebe998965694a6a237aaa57377f49b2edab3815b787bd14a880e37433951748"
|
| 525 |
+
},
|
| 526 |
+
{
|
| 527 |
+
"case": "arithmetic-04",
|
| 528 |
+
"options": {},
|
| 529 |
+
"rendered_equal": true,
|
| 530 |
+
"tokens_equal": true,
|
| 531 |
+
"rendered_sha256": "c91b90926ba37c04a16a7e51163ed88366f6ad1f91eb7a4c40a8213b986f6f2d",
|
| 532 |
+
"token_ids_sha256": "e1706e27836de214be0261eff95fe8145f2945effdc517a7e9115ded3148a67a"
|
| 533 |
+
},
|
| 534 |
+
{
|
| 535 |
+
"case": "arithmetic-04",
|
| 536 |
+
"options": {
|
| 537 |
+
"enable_thinking": false
|
| 538 |
+
},
|
| 539 |
+
"rendered_equal": true,
|
| 540 |
+
"tokens_equal": true,
|
| 541 |
+
"rendered_sha256": "bce2488b1645bb08cb2a157697c4dbc6d634da4e9b1949a9f77e3e987d4ac3e4",
|
| 542 |
+
"token_ids_sha256": "52455a3c634132dfcc0673da9ab990c3def7dac61376fdc9614160b1172b10bc"
|
| 543 |
+
},
|
| 544 |
+
{
|
| 545 |
+
"case": "arithmetic-04",
|
| 546 |
+
"options": {
|
| 547 |
+
"reasoning_effort": "low"
|
| 548 |
+
},
|
| 549 |
+
"rendered_equal": true,
|
| 550 |
+
"tokens_equal": true,
|
| 551 |
+
"rendered_sha256": "9823550d5e522b6cf480c9d82a1726e3b6530437570093e24bf7a82920827c1b",
|
| 552 |
+
"token_ids_sha256": "1aa3c00b507cfb0fda234a8759b649edad21c2e167c4fa77e4632cad6837ed9e"
|
| 553 |
+
},
|
| 554 |
+
{
|
| 555 |
+
"case": "arithmetic-04",
|
| 556 |
+
"options": {
|
| 557 |
+
"reasoning_effort": "medium"
|
| 558 |
+
},
|
| 559 |
+
"rendered_equal": true,
|
| 560 |
+
"tokens_equal": true,
|
| 561 |
+
"rendered_sha256": "60d7fc3ef5d976266dfbe9fa89c6f82bd990fbf2c751aff527871070001fa549",
|
| 562 |
+
"token_ids_sha256": "9115c65f6cc99cbcf2ceccf86f3a62ef18d39afaa429b74cc9297894a6ffe1cb"
|
| 563 |
+
},
|
| 564 |
+
{
|
| 565 |
+
"case": "arithmetic-04",
|
| 566 |
+
"options": {
|
| 567 |
+
"reasoning_effort": "xhigh"
|
| 568 |
+
},
|
| 569 |
+
"rendered_equal": true,
|
| 570 |
+
"tokens_equal": true,
|
| 571 |
+
"rendered_sha256": "c91b90926ba37c04a16a7e51163ed88366f6ad1f91eb7a4c40a8213b986f6f2d",
|
| 572 |
+
"token_ids_sha256": "e1706e27836de214be0261eff95fe8145f2945effdc517a7e9115ded3148a67a"
|
| 573 |
+
},
|
| 574 |
+
{
|
| 575 |
+
"case": "arithmetic-05",
|
| 576 |
+
"options": {},
|
| 577 |
+
"rendered_equal": true,
|
| 578 |
+
"tokens_equal": true,
|
| 579 |
+
"rendered_sha256": "ff43ba2decea43f8543fdd36dd6c5c536c8bb97a54e5890131890fbf0c66c869",
|
| 580 |
+
"token_ids_sha256": "c93f056f94513cd2779bf1ce8f298d406ef3b027cb9f3a7db4a09dd7592ba85b"
|
| 581 |
+
},
|
| 582 |
+
{
|
| 583 |
+
"case": "arithmetic-05",
|
| 584 |
+
"options": {
|
| 585 |
+
"enable_thinking": false
|
| 586 |
+
},
|
| 587 |
+
"rendered_equal": true,
|
| 588 |
+
"tokens_equal": true,
|
| 589 |
+
"rendered_sha256": "3c2c2497661577a7357fa67b079db6b11ff395265a222b0a32b9d1b8bef02b6c",
|
| 590 |
+
"token_ids_sha256": "82acbe5edfb07831dc3d554b178ded8e7bf7f53ff8e743c4a1907b4447f6894f"
|
| 591 |
+
},
|
| 592 |
+
{
|
| 593 |
+
"case": "arithmetic-05",
|
| 594 |
+
"options": {
|
| 595 |
+
"reasoning_effort": "low"
|
| 596 |
+
},
|
| 597 |
+
"rendered_equal": true,
|
| 598 |
+
"tokens_equal": true,
|
| 599 |
+
"rendered_sha256": "81a352decd47f903266075bf8d7d21980e0d39b7f19befdc4ef2565d9ab27760",
|
| 600 |
+
"token_ids_sha256": "3abdcb06a624fcc9f3dc6593e04e92ada7b0666f675fac2a07fabddeebc2d7b4"
|
| 601 |
+
},
|
| 602 |
+
{
|
| 603 |
+
"case": "arithmetic-05",
|
| 604 |
+
"options": {
|
| 605 |
+
"reasoning_effort": "medium"
|
| 606 |
+
},
|
| 607 |
+
"rendered_equal": true,
|
| 608 |
+
"tokens_equal": true,
|
| 609 |
+
"rendered_sha256": "0a9271c8cb020e0a54ed4cc1c04eb582c81d4cafa9eae887b06fcc44d4b44653",
|
| 610 |
+
"token_ids_sha256": "37341803c1c617340a309634f0e56d48636b27377a3b4c254086439a753500a6"
|
| 611 |
+
},
|
| 612 |
+
{
|
| 613 |
+
"case": "arithmetic-05",
|
| 614 |
+
"options": {
|
| 615 |
+
"reasoning_effort": "xhigh"
|
| 616 |
+
},
|
| 617 |
+
"rendered_equal": true,
|
| 618 |
+
"tokens_equal": true,
|
| 619 |
+
"rendered_sha256": "ff43ba2decea43f8543fdd36dd6c5c536c8bb97a54e5890131890fbf0c66c869",
|
| 620 |
+
"token_ids_sha256": "c93f056f94513cd2779bf1ce8f298d406ef3b027cb9f3a7db4a09dd7592ba85b"
|
| 621 |
+
},
|
| 622 |
+
{
|
| 623 |
+
"case": "arithmetic-06",
|
| 624 |
+
"options": {},
|
| 625 |
+
"rendered_equal": true,
|
| 626 |
+
"tokens_equal": true,
|
| 627 |
+
"rendered_sha256": "d9d7029346d3fc3e6f37173c76ec3db19e8668a82698b1345e71b56ec802ce28",
|
| 628 |
+
"token_ids_sha256": "3b45ede402669923581a4b9464a66bded91059bf64aa29c0006bdd81990e01f8"
|
| 629 |
+
},
|
| 630 |
+
{
|
| 631 |
+
"case": "arithmetic-06",
|
| 632 |
+
"options": {
|
| 633 |
+
"enable_thinking": false
|
| 634 |
+
},
|
| 635 |
+
"rendered_equal": true,
|
| 636 |
+
"tokens_equal": true,
|
| 637 |
+
"rendered_sha256": "fe48fab3c6ca13c7db6caa901b0961f231160d5ebac912fe33187ac662b0d3cb",
|
| 638 |
+
"token_ids_sha256": "8f92b0168bc1370747e0e92234e3e472b1d84ee4ac7936c9c58faae6e9f48e50"
|
| 639 |
+
},
|
| 640 |
+
{
|
| 641 |
+
"case": "arithmetic-06",
|
| 642 |
+
"options": {
|
| 643 |
+
"reasoning_effort": "low"
|
| 644 |
+
},
|
| 645 |
+
"rendered_equal": true,
|
| 646 |
+
"tokens_equal": true,
|
| 647 |
+
"rendered_sha256": "5d8e4b8ae6957fa3c0fd3c6243db43414cd8117cb3498cb40d077c1283bfeaaf",
|
| 648 |
+
"token_ids_sha256": "bd4d6941e778d63fe01e72f236a70078db1d5438d9d6b0dea085cf5a2d78b7ca"
|
| 649 |
+
},
|
| 650 |
+
{
|
| 651 |
+
"case": "arithmetic-06",
|
| 652 |
+
"options": {
|
| 653 |
+
"reasoning_effort": "medium"
|
| 654 |
+
},
|
| 655 |
+
"rendered_equal": true,
|
| 656 |
+
"tokens_equal": true,
|
| 657 |
+
"rendered_sha256": "50e45800a302d26ba7ae81e3301201636685303bd7161f4713d8620fc847d504",
|
| 658 |
+
"token_ids_sha256": "a3798779d6db6bb5aeeaa5faa0060644926b9e489488ae7e9318c23351717b50"
|
| 659 |
+
},
|
| 660 |
+
{
|
| 661 |
+
"case": "arithmetic-06",
|
| 662 |
+
"options": {
|
| 663 |
+
"reasoning_effort": "xhigh"
|
| 664 |
+
},
|
| 665 |
+
"rendered_equal": true,
|
| 666 |
+
"tokens_equal": true,
|
| 667 |
+
"rendered_sha256": "d9d7029346d3fc3e6f37173c76ec3db19e8668a82698b1345e71b56ec802ce28",
|
| 668 |
+
"token_ids_sha256": "3b45ede402669923581a4b9464a66bded91059bf64aa29c0006bdd81990e01f8"
|
| 669 |
+
},
|
| 670 |
+
{
|
| 671 |
+
"case": "arithmetic-07",
|
| 672 |
+
"options": {},
|
| 673 |
+
"rendered_equal": true,
|
| 674 |
+
"tokens_equal": true,
|
| 675 |
+
"rendered_sha256": "d4abab4ea9a54502aacc0cc037e6a3d2392eb4f00620de2842db7fcabbb5c6ff",
|
| 676 |
+
"token_ids_sha256": "d4555520da558d82c23f683d6d8bfc85b3662713180da8e247f4db6c6b9a94c1"
|
| 677 |
+
},
|
| 678 |
+
{
|
| 679 |
+
"case": "arithmetic-07",
|
| 680 |
+
"options": {
|
| 681 |
+
"enable_thinking": false
|
| 682 |
+
},
|
| 683 |
+
"rendered_equal": true,
|
| 684 |
+
"tokens_equal": true,
|
| 685 |
+
"rendered_sha256": "4634f6ef7ab3216baa6ae0839b583c8c493bddf057c97228292e1c6493febbe4",
|
| 686 |
+
"token_ids_sha256": "b20040ab0deeea513aeee03ff9e7eadc1af6dfb0c53cc32100297911de879bc7"
|
| 687 |
+
},
|
| 688 |
+
{
|
| 689 |
+
"case": "arithmetic-07",
|
| 690 |
+
"options": {
|
| 691 |
+
"reasoning_effort": "low"
|
| 692 |
+
},
|
| 693 |
+
"rendered_equal": true,
|
| 694 |
+
"tokens_equal": true,
|
| 695 |
+
"rendered_sha256": "9da13b3584b88529d3d4d3afdf40f9dedc2e3259a3575ff617c6fb3eb0279cca",
|
| 696 |
+
"token_ids_sha256": "666ba3da90ecdd0822ff3f0bd76faf857abd0464d497dde69be343644b84f6c9"
|
| 697 |
+
},
|
| 698 |
+
{
|
| 699 |
+
"case": "arithmetic-07",
|
| 700 |
+
"options": {
|
| 701 |
+
"reasoning_effort": "medium"
|
| 702 |
+
},
|
| 703 |
+
"rendered_equal": true,
|
| 704 |
+
"tokens_equal": true,
|
| 705 |
+
"rendered_sha256": "4e3d704c3f85473c586455d9a99d16f244bb2dd8337b78319296b0a36ebe479f",
|
| 706 |
+
"token_ids_sha256": "09095dae80f1f9451b2a58c2aaba62d236e5c6edae31f9d592eea9f3a177f2a1"
|
| 707 |
+
},
|
| 708 |
+
{
|
| 709 |
+
"case": "arithmetic-07",
|
| 710 |
+
"options": {
|
| 711 |
+
"reasoning_effort": "xhigh"
|
| 712 |
+
},
|
| 713 |
+
"rendered_equal": true,
|
| 714 |
+
"tokens_equal": true,
|
| 715 |
+
"rendered_sha256": "d4abab4ea9a54502aacc0cc037e6a3d2392eb4f00620de2842db7fcabbb5c6ff",
|
| 716 |
+
"token_ids_sha256": "d4555520da558d82c23f683d6d8bfc85b3662713180da8e247f4db6c6b9a94c1"
|
| 717 |
+
},
|
| 718 |
+
{
|
| 719 |
+
"case": "arithmetic-08",
|
| 720 |
+
"options": {},
|
| 721 |
+
"rendered_equal": true,
|
| 722 |
+
"tokens_equal": true,
|
| 723 |
+
"rendered_sha256": "f7d3036cc3bc0141cca89e9879ad1a822638eafdd067d0502bf748d895fdbe71",
|
| 724 |
+
"token_ids_sha256": "e980911b51a3c2dc5739a7c33f3f003e083ebbfabf6f60e75791c7825f1e2a95"
|
| 725 |
+
},
|
| 726 |
+
{
|
| 727 |
+
"case": "arithmetic-08",
|
| 728 |
+
"options": {
|
| 729 |
+
"enable_thinking": false
|
| 730 |
+
},
|
| 731 |
+
"rendered_equal": true,
|
| 732 |
+
"tokens_equal": true,
|
| 733 |
+
"rendered_sha256": "84ee45d869045b2f96a220c89040a27c4340529b2f10ba5a362125d9b99255ca",
|
| 734 |
+
"token_ids_sha256": "629913233bfa1e8693053fb398886818deb1c269b49a30ff12d752326dfea49f"
|
| 735 |
+
},
|
| 736 |
+
{
|
| 737 |
+
"case": "arithmetic-08",
|
| 738 |
+
"options": {
|
| 739 |
+
"reasoning_effort": "low"
|
| 740 |
+
},
|
| 741 |
+
"rendered_equal": true,
|
| 742 |
+
"tokens_equal": true,
|
| 743 |
+
"rendered_sha256": "10b71fafeee6fb4c5250eaca77c8d848e0377898e8c4e31e3610fcb31a4bbf95",
|
| 744 |
+
"token_ids_sha256": "c776b00461042b3c38e18d8dff79d402a4ecced8c64c67d622058041ef04cbc6"
|
| 745 |
+
},
|
| 746 |
+
{
|
| 747 |
+
"case": "arithmetic-08",
|
| 748 |
+
"options": {
|
| 749 |
+
"reasoning_effort": "medium"
|
| 750 |
+
},
|
| 751 |
+
"rendered_equal": true,
|
| 752 |
+
"tokens_equal": true,
|
| 753 |
+
"rendered_sha256": "537f1753a07185b06875abe3a1ebb3ea40cd514794ce71f4a6a083f2e0d11fb3",
|
| 754 |
+
"token_ids_sha256": "a5f82822b6d6af6c83758f5e173128bca3c3d50d290cacb42309156672ab606c"
|
| 755 |
+
},
|
| 756 |
+
{
|
| 757 |
+
"case": "arithmetic-08",
|
| 758 |
+
"options": {
|
| 759 |
+
"reasoning_effort": "xhigh"
|
| 760 |
+
},
|
| 761 |
+
"rendered_equal": true,
|
| 762 |
+
"tokens_equal": true,
|
| 763 |
+
"rendered_sha256": "f7d3036cc3bc0141cca89e9879ad1a822638eafdd067d0502bf748d895fdbe71",
|
| 764 |
+
"token_ids_sha256": "e980911b51a3c2dc5739a7c33f3f003e083ebbfabf6f60e75791c7825f1e2a95"
|
| 765 |
+
},
|
| 766 |
+
{
|
| 767 |
+
"case": "arithmetic-09",
|
| 768 |
+
"options": {},
|
| 769 |
+
"rendered_equal": true,
|
| 770 |
+
"tokens_equal": true,
|
| 771 |
+
"rendered_sha256": "bc7d34da11dd014cb41eac5b8ed8758a7a88dcafccb274866a6812b62fef30ec",
|
| 772 |
+
"token_ids_sha256": "62c6cfebfddf285cd89ff58d1833e6e535fb72484b68251bb0d92fe37aa593e3"
|
| 773 |
+
},
|
| 774 |
+
{
|
| 775 |
+
"case": "arithmetic-09",
|
| 776 |
+
"options": {
|
| 777 |
+
"enable_thinking": false
|
| 778 |
+
},
|
| 779 |
+
"rendered_equal": true,
|
| 780 |
+
"tokens_equal": true,
|
| 781 |
+
"rendered_sha256": "0bf19f315da38c20699e3eaebf5f02d9ed76193aa99eaf0bc9167dc210416d12",
|
| 782 |
+
"token_ids_sha256": "0bf26e146c4373d1613d6c9ec028b465601dd2173c8c874cd48e405c35abe5e9"
|
| 783 |
+
},
|
| 784 |
+
{
|
| 785 |
+
"case": "arithmetic-09",
|
| 786 |
+
"options": {
|
| 787 |
+
"reasoning_effort": "low"
|
| 788 |
+
},
|
| 789 |
+
"rendered_equal": true,
|
| 790 |
+
"tokens_equal": true,
|
| 791 |
+
"rendered_sha256": "2a4aed936eaa1a57af5f4e11d45f1c93becbceed7bebf4349e2f5c21965cb183",
|
| 792 |
+
"token_ids_sha256": "cc54e72fe17312e9865a641818fdfc7e78ebe03daf8c53c2096f650d5cda29ad"
|
| 793 |
+
},
|
| 794 |
+
{
|
| 795 |
+
"case": "arithmetic-09",
|
| 796 |
+
"options": {
|
| 797 |
+
"reasoning_effort": "medium"
|
| 798 |
+
},
|
| 799 |
+
"rendered_equal": true,
|
| 800 |
+
"tokens_equal": true,
|
| 801 |
+
"rendered_sha256": "439ed4db5d4c179b66f0d507be08cd06fff0c5017d15f945c53127da81cab47f",
|
| 802 |
+
"token_ids_sha256": "40c23ec4db2ea5e8b6ed8a8591cdd74339f986c05f5474bcd4f928c8ba95fc74"
|
| 803 |
+
},
|
| 804 |
+
{
|
| 805 |
+
"case": "arithmetic-09",
|
| 806 |
+
"options": {
|
| 807 |
+
"reasoning_effort": "xhigh"
|
| 808 |
+
},
|
| 809 |
+
"rendered_equal": true,
|
| 810 |
+
"tokens_equal": true,
|
| 811 |
+
"rendered_sha256": "bc7d34da11dd014cb41eac5b8ed8758a7a88dcafccb274866a6812b62fef30ec",
|
| 812 |
+
"token_ids_sha256": "62c6cfebfddf285cd89ff58d1833e6e535fb72484b68251bb0d92fe37aa593e3"
|
| 813 |
+
},
|
| 814 |
+
{
|
| 815 |
+
"case": "arithmetic-10",
|
| 816 |
+
"options": {},
|
| 817 |
+
"rendered_equal": true,
|
| 818 |
+
"tokens_equal": true,
|
| 819 |
+
"rendered_sha256": "0b724f38e7bd9051ec7c968b1663b1b3635ec23c3b94c91e10aa9222fa7eadd9",
|
| 820 |
+
"token_ids_sha256": "31ef5951966d506a875595669d28381adb7f3eb8ca36e728f849aa0d8458b0cd"
|
| 821 |
+
},
|
| 822 |
+
{
|
| 823 |
+
"case": "arithmetic-10",
|
| 824 |
+
"options": {
|
| 825 |
+
"enable_thinking": false
|
| 826 |
+
},
|
| 827 |
+
"rendered_equal": true,
|
| 828 |
+
"tokens_equal": true,
|
| 829 |
+
"rendered_sha256": "6062a96149481c62ced98da104245bb90e591cb34292c12eadfc3d9fb67299a2",
|
| 830 |
+
"token_ids_sha256": "80b76dc69c7844e058fe435e5c28373408aaf2b9f5dc24f6aafc735cf75b4b61"
|
| 831 |
+
},
|
| 832 |
+
{
|
| 833 |
+
"case": "arithmetic-10",
|
| 834 |
+
"options": {
|
| 835 |
+
"reasoning_effort": "low"
|
| 836 |
+
},
|
| 837 |
+
"rendered_equal": true,
|
| 838 |
+
"tokens_equal": true,
|
| 839 |
+
"rendered_sha256": "884f8cf268a54b70f40569b1a039037963471f5ece48c681f117920ccae1fdea",
|
| 840 |
+
"token_ids_sha256": "b6fabf136f2e5a33c007f475cbd3b7f87bdce0cc1da9196ea00b679d62ce151c"
|
| 841 |
+
},
|
| 842 |
+
{
|
| 843 |
+
"case": "arithmetic-10",
|
| 844 |
+
"options": {
|
| 845 |
+
"reasoning_effort": "medium"
|
| 846 |
+
},
|
| 847 |
+
"rendered_equal": true,
|
| 848 |
+
"tokens_equal": true,
|
| 849 |
+
"rendered_sha256": "0dc637f9d7ed2ed1fca6922a413f5c47ebf3ab6579aa31b4ce3bff07af300ab9",
|
| 850 |
+
"token_ids_sha256": "4363a2a13106c422c12752f4b87b3581eef342b6a2340ada93f635851c45f37d"
|
| 851 |
+
},
|
| 852 |
+
{
|
| 853 |
+
"case": "arithmetic-10",
|
| 854 |
+
"options": {
|
| 855 |
+
"reasoning_effort": "xhigh"
|
| 856 |
+
},
|
| 857 |
+
"rendered_equal": true,
|
| 858 |
+
"tokens_equal": true,
|
| 859 |
+
"rendered_sha256": "0b724f38e7bd9051ec7c968b1663b1b3635ec23c3b94c91e10aa9222fa7eadd9",
|
| 860 |
+
"token_ids_sha256": "31ef5951966d506a875595669d28381adb7f3eb8ca36e728f849aa0d8458b0cd"
|
| 861 |
+
},
|
| 862 |
+
{
|
| 863 |
+
"case": "json-01",
|
| 864 |
+
"options": {},
|
| 865 |
+
"rendered_equal": true,
|
| 866 |
+
"tokens_equal": true,
|
| 867 |
+
"rendered_sha256": "4de0442df7ac09fc61d43b9ffa738f4f2d3573f71ac77dcec22aba786bc0342e",
|
| 868 |
+
"token_ids_sha256": "e4b144f0c08aa87b573f59f54bf96d10641d30ddfb373ad355bb3938075682c0"
|
| 869 |
+
},
|
| 870 |
+
{
|
| 871 |
+
"case": "json-01",
|
| 872 |
+
"options": {
|
| 873 |
+
"enable_thinking": false
|
| 874 |
+
},
|
| 875 |
+
"rendered_equal": true,
|
| 876 |
+
"tokens_equal": true,
|
| 877 |
+
"rendered_sha256": "5f50a83fafc47f078151ce396bbc1ba2fb64795e38165ab27adb8513a9aae264",
|
| 878 |
+
"token_ids_sha256": "bbbfd4ba0e5b27f3914e50c9be5a2bbf8c7cbedc83bd8ee3ffccf36090b042e6"
|
| 879 |
+
},
|
| 880 |
+
{
|
| 881 |
+
"case": "json-01",
|
| 882 |
+
"options": {
|
| 883 |
+
"reasoning_effort": "low"
|
| 884 |
+
},
|
| 885 |
+
"rendered_equal": true,
|
| 886 |
+
"tokens_equal": true,
|
| 887 |
+
"rendered_sha256": "31a143c5a416e7f3a93ba3739fd66634ca3a728482405636c7048ec40161619d",
|
| 888 |
+
"token_ids_sha256": "13a83c0266c974090ef5736aa8cade8685638d64637e2787534440dab7152c6e"
|
| 889 |
+
},
|
| 890 |
+
{
|
| 891 |
+
"case": "json-01",
|
| 892 |
+
"options": {
|
| 893 |
+
"reasoning_effort": "medium"
|
| 894 |
+
},
|
| 895 |
+
"rendered_equal": true,
|
| 896 |
+
"tokens_equal": true,
|
| 897 |
+
"rendered_sha256": "9dcf381dbeb544ab3054db3afdc5ff7d33833027519c5c03d98d59de2d76b9c8",
|
| 898 |
+
"token_ids_sha256": "7debf297e3e6f800a92cccece7deecb3f1edcdd30c80ca6beaf3194c66c267da"
|
| 899 |
+
},
|
| 900 |
+
{
|
| 901 |
+
"case": "json-01",
|
| 902 |
+
"options": {
|
| 903 |
+
"reasoning_effort": "xhigh"
|
| 904 |
+
},
|
| 905 |
+
"rendered_equal": true,
|
| 906 |
+
"tokens_equal": true,
|
| 907 |
+
"rendered_sha256": "4de0442df7ac09fc61d43b9ffa738f4f2d3573f71ac77dcec22aba786bc0342e",
|
| 908 |
+
"token_ids_sha256": "e4b144f0c08aa87b573f59f54bf96d10641d30ddfb373ad355bb3938075682c0"
|
| 909 |
+
},
|
| 910 |
+
{
|
| 911 |
+
"case": "json-02",
|
| 912 |
+
"options": {},
|
| 913 |
+
"rendered_equal": true,
|
| 914 |
+
"tokens_equal": true,
|
| 915 |
+
"rendered_sha256": "f52a34ad0f6b545d6d81c4ccd7ec54604a733c172a8f4f13e51fa28ef276d803",
|
| 916 |
+
"token_ids_sha256": "1eb009c158c67adfb279a1d55cfc67b2559b54a9ee95b6771952fde76795ad6b"
|
| 917 |
+
},
|
| 918 |
+
{
|
| 919 |
+
"case": "json-02",
|
| 920 |
+
"options": {
|
| 921 |
+
"enable_thinking": false
|
| 922 |
+
},
|
| 923 |
+
"rendered_equal": true,
|
| 924 |
+
"tokens_equal": true,
|
| 925 |
+
"rendered_sha256": "1a2f1c8bb1b3286ab8a957f85f575a0d4d5a0f1bb971b742e69c4990fec9577f",
|
| 926 |
+
"token_ids_sha256": "09f7a63ef1188c209d80f1a7cc6ccf071e931b268cd115601c98ae083609b5b9"
|
| 927 |
+
},
|
| 928 |
+
{
|
| 929 |
+
"case": "json-02",
|
| 930 |
+
"options": {
|
| 931 |
+
"reasoning_effort": "low"
|
| 932 |
+
},
|
| 933 |
+
"rendered_equal": true,
|
| 934 |
+
"tokens_equal": true,
|
| 935 |
+
"rendered_sha256": "0fa5d71515f9c8233ad41e135dc72cf6cca670d4a56253727155ec1071ce271b",
|
| 936 |
+
"token_ids_sha256": "a630c470d9a5e52e1e429dd2b3c84cadbfbbf02803317d58008c99d1fe4c51e2"
|
| 937 |
+
},
|
| 938 |
+
{
|
| 939 |
+
"case": "json-02",
|
| 940 |
+
"options": {
|
| 941 |
+
"reasoning_effort": "medium"
|
| 942 |
+
},
|
| 943 |
+
"rendered_equal": true,
|
| 944 |
+
"tokens_equal": true,
|
| 945 |
+
"rendered_sha256": "ea329dcbf37dc55489fd11c37d464c2bc3ac63e0e9a81b8c56d3d875fcec3a74",
|
| 946 |
+
"token_ids_sha256": "e940fea90dfa2c71564f797a50cb8dad160f993fe006bc1a4b25b1f27f603a9c"
|
| 947 |
+
},
|
| 948 |
+
{
|
| 949 |
+
"case": "json-02",
|
| 950 |
+
"options": {
|
| 951 |
+
"reasoning_effort": "xhigh"
|
| 952 |
+
},
|
| 953 |
+
"rendered_equal": true,
|
| 954 |
+
"tokens_equal": true,
|
| 955 |
+
"rendered_sha256": "f52a34ad0f6b545d6d81c4ccd7ec54604a733c172a8f4f13e51fa28ef276d803",
|
| 956 |
+
"token_ids_sha256": "1eb009c158c67adfb279a1d55cfc67b2559b54a9ee95b6771952fde76795ad6b"
|
| 957 |
+
},
|
| 958 |
+
{
|
| 959 |
+
"case": "json-03",
|
| 960 |
+
"options": {},
|
| 961 |
+
"rendered_equal": true,
|
| 962 |
+
"tokens_equal": true,
|
| 963 |
+
"rendered_sha256": "8a3dbb38d2827e057168fb8a3d6a2de8e032ec6852a8e87c0b361543f8f6056f",
|
| 964 |
+
"token_ids_sha256": "b34856c2e771c03911bab8353efb901ca50653e99bb8fa22c52970ca9437387f"
|
| 965 |
+
},
|
| 966 |
+
{
|
| 967 |
+
"case": "json-03",
|
| 968 |
+
"options": {
|
| 969 |
+
"enable_thinking": false
|
| 970 |
+
},
|
| 971 |
+
"rendered_equal": true,
|
| 972 |
+
"tokens_equal": true,
|
| 973 |
+
"rendered_sha256": "37bd9133255a681630a15fbf5f902a6c60689d4b6cb7a7fe1631eac26bda9142",
|
| 974 |
+
"token_ids_sha256": "6ca400f3330a08f46318460cafd0f658af05cb80994f132a306a291dcc6e3aea"
|
| 975 |
+
},
|
| 976 |
+
{
|
| 977 |
+
"case": "json-03",
|
| 978 |
+
"options": {
|
| 979 |
+
"reasoning_effort": "low"
|
| 980 |
+
},
|
| 981 |
+
"rendered_equal": true,
|
| 982 |
+
"tokens_equal": true,
|
| 983 |
+
"rendered_sha256": "15eda6413cbfe554fd979fe671f9b29d3460190424f4fad532170efd3eed6fee",
|
| 984 |
+
"token_ids_sha256": "d8bb4ed4c951d432251f174077cf19e53716afd602d49e5fa3a561cd9c7e0324"
|
| 985 |
+
},
|
| 986 |
+
{
|
| 987 |
+
"case": "json-03",
|
| 988 |
+
"options": {
|
| 989 |
+
"reasoning_effort": "medium"
|
| 990 |
+
},
|
| 991 |
+
"rendered_equal": true,
|
| 992 |
+
"tokens_equal": true,
|
| 993 |
+
"rendered_sha256": "e13d3dcfb7025ae479066fa806518c2e558c8f3c154d0c907c6263e67349ca95",
|
| 994 |
+
"token_ids_sha256": "1e5cfb4792450de79b24f3850daec9b92b2aaeaf090e31c9c2d0ec65db03f1a1"
|
| 995 |
+
},
|
| 996 |
+
{
|
| 997 |
+
"case": "json-03",
|
| 998 |
+
"options": {
|
| 999 |
+
"reasoning_effort": "xhigh"
|
| 1000 |
+
},
|
| 1001 |
+
"rendered_equal": true,
|
| 1002 |
+
"tokens_equal": true,
|
| 1003 |
+
"rendered_sha256": "8a3dbb38d2827e057168fb8a3d6a2de8e032ec6852a8e87c0b361543f8f6056f",
|
| 1004 |
+
"token_ids_sha256": "b34856c2e771c03911bab8353efb901ca50653e99bb8fa22c52970ca9437387f"
|
| 1005 |
+
},
|
| 1006 |
+
{
|
| 1007 |
+
"case": "json-04",
|
| 1008 |
+
"options": {},
|
| 1009 |
+
"rendered_equal": true,
|
| 1010 |
+
"tokens_equal": true,
|
| 1011 |
+
"rendered_sha256": "1f303eab286c8e0b2dfd1e037488ced9ec2ad631c83baa367f2e7ce84c0d754b",
|
| 1012 |
+
"token_ids_sha256": "7ba01d3705a9a2fc2c44adebb589fe7c4cc55d32f4f34b4c171b0e004c68cfeb"
|
| 1013 |
+
},
|
| 1014 |
+
{
|
| 1015 |
+
"case": "json-04",
|
| 1016 |
+
"options": {
|
| 1017 |
+
"enable_thinking": false
|
| 1018 |
+
},
|
| 1019 |
+
"rendered_equal": true,
|
| 1020 |
+
"tokens_equal": true,
|
| 1021 |
+
"rendered_sha256": "8653dbe405bebf2ae11a4e03ce412656fe2c8edac19590eddd7683ff0a161a41",
|
| 1022 |
+
"token_ids_sha256": "12c6581c2d8aca475d83a32e06a2c4c13acaebe759c2559bb9d0b0072bd01eea"
|
| 1023 |
+
},
|
| 1024 |
+
{
|
| 1025 |
+
"case": "json-04",
|
| 1026 |
+
"options": {
|
| 1027 |
+
"reasoning_effort": "low"
|
| 1028 |
+
},
|
| 1029 |
+
"rendered_equal": true,
|
| 1030 |
+
"tokens_equal": true,
|
| 1031 |
+
"rendered_sha256": "390532466ee5550aeeab6067168146cfc47eaffb3423ff6758df6d6733a4d59a",
|
| 1032 |
+
"token_ids_sha256": "9ae37ad8259608f3968e7aecd6ae80cca934d185231a2b18ab6dfd0ff50dab36"
|
| 1033 |
+
},
|
| 1034 |
+
{
|
| 1035 |
+
"case": "json-04",
|
| 1036 |
+
"options": {
|
| 1037 |
+
"reasoning_effort": "medium"
|
| 1038 |
+
},
|
| 1039 |
+
"rendered_equal": true,
|
| 1040 |
+
"tokens_equal": true,
|
| 1041 |
+
"rendered_sha256": "33f30604fafeb5471321edce74a26ec52381f03eabfd6acfa4a79784124d9855",
|
| 1042 |
+
"token_ids_sha256": "9fb15ad820d73935b93d25cc15c9277639804a93d7fca097cfaa1704ff4862e0"
|
| 1043 |
+
},
|
| 1044 |
+
{
|
| 1045 |
+
"case": "json-04",
|
| 1046 |
+
"options": {
|
| 1047 |
+
"reasoning_effort": "xhigh"
|
| 1048 |
+
},
|
| 1049 |
+
"rendered_equal": true,
|
| 1050 |
+
"tokens_equal": true,
|
| 1051 |
+
"rendered_sha256": "1f303eab286c8e0b2dfd1e037488ced9ec2ad631c83baa367f2e7ce84c0d754b",
|
| 1052 |
+
"token_ids_sha256": "7ba01d3705a9a2fc2c44adebb589fe7c4cc55d32f4f34b4c171b0e004c68cfeb"
|
| 1053 |
+
},
|
| 1054 |
+
{
|
| 1055 |
+
"case": "json-05",
|
| 1056 |
+
"options": {},
|
| 1057 |
+
"rendered_equal": true,
|
| 1058 |
+
"tokens_equal": true,
|
| 1059 |
+
"rendered_sha256": "8ed29d2b59a460fa3e6dbee839a9635edbbaf50eea80b88bff5eacdc78e73fc1",
|
| 1060 |
+
"token_ids_sha256": "4139c153e92d79a41aea986199662c5f31289a0f8b774855c7c4f66dc6b8db17"
|
| 1061 |
+
},
|
| 1062 |
+
{
|
| 1063 |
+
"case": "json-05",
|
| 1064 |
+
"options": {
|
| 1065 |
+
"enable_thinking": false
|
| 1066 |
+
},
|
| 1067 |
+
"rendered_equal": true,
|
| 1068 |
+
"tokens_equal": true,
|
| 1069 |
+
"rendered_sha256": "a3818397f7583a07006ca0feefadf46f8f09f4f14123cb7e61e2eed7b3549b5e",
|
| 1070 |
+
"token_ids_sha256": "8184a5cc8b187c66285b51417a2655460c534ae8a98581f6abbeea0db3d9d7fc"
|
| 1071 |
+
},
|
| 1072 |
+
{
|
| 1073 |
+
"case": "json-05",
|
| 1074 |
+
"options": {
|
| 1075 |
+
"reasoning_effort": "low"
|
| 1076 |
+
},
|
| 1077 |
+
"rendered_equal": true,
|
| 1078 |
+
"tokens_equal": true,
|
| 1079 |
+
"rendered_sha256": "54972f2f1eef05bb9bb6905aac8573dc4e6074740cf6e74633295c307d00e256",
|
| 1080 |
+
"token_ids_sha256": "331548692bf3d1c450ffe65bafac49565037ecb0bc078b03b794d88e3a55395f"
|
| 1081 |
+
},
|
| 1082 |
+
{
|
| 1083 |
+
"case": "json-05",
|
| 1084 |
+
"options": {
|
| 1085 |
+
"reasoning_effort": "medium"
|
| 1086 |
+
},
|
| 1087 |
+
"rendered_equal": true,
|
| 1088 |
+
"tokens_equal": true,
|
| 1089 |
+
"rendered_sha256": "9cb233dad0e7c052b679c8abcbd1c37f806f8771ddef95a255739e1aadbbeb30",
|
| 1090 |
+
"token_ids_sha256": "d9a08463d3373938a3b098b85182894715e811c42f08dea12d3b3c699d65696d"
|
| 1091 |
+
},
|
| 1092 |
+
{
|
| 1093 |
+
"case": "json-05",
|
| 1094 |
+
"options": {
|
| 1095 |
+
"reasoning_effort": "xhigh"
|
| 1096 |
+
},
|
| 1097 |
+
"rendered_equal": true,
|
| 1098 |
+
"tokens_equal": true,
|
| 1099 |
+
"rendered_sha256": "8ed29d2b59a460fa3e6dbee839a9635edbbaf50eea80b88bff5eacdc78e73fc1",
|
| 1100 |
+
"token_ids_sha256": "4139c153e92d79a41aea986199662c5f31289a0f8b774855c7c4f66dc6b8db17"
|
| 1101 |
+
},
|
| 1102 |
+
{
|
| 1103 |
+
"case": "unicode-01",
|
| 1104 |
+
"options": {},
|
| 1105 |
+
"rendered_equal": true,
|
| 1106 |
+
"tokens_equal": true,
|
| 1107 |
+
"rendered_sha256": "873831a91e22b06c76fc5f676cf413eb134887725518f0915bb5e84d7f06b2b5",
|
| 1108 |
+
"token_ids_sha256": "f3baf0dc6982eaece8c4cdd4c4671b1ad756619ae32530bd08481c691a4986c8"
|
| 1109 |
+
},
|
| 1110 |
+
{
|
| 1111 |
+
"case": "unicode-01",
|
| 1112 |
+
"options": {
|
| 1113 |
+
"enable_thinking": false
|
| 1114 |
+
},
|
| 1115 |
+
"rendered_equal": true,
|
| 1116 |
+
"tokens_equal": true,
|
| 1117 |
+
"rendered_sha256": "e73da63a506d2412fe58c20add9e44337afcc80e82ea3f8149529b0a5be5c989",
|
| 1118 |
+
"token_ids_sha256": "b556477b09485ca4d3c36829cd8f61f1145fae0b1eb1efef0aeab02853ceae18"
|
| 1119 |
+
},
|
| 1120 |
+
{
|
| 1121 |
+
"case": "unicode-01",
|
| 1122 |
+
"options": {
|
| 1123 |
+
"reasoning_effort": "low"
|
| 1124 |
+
},
|
| 1125 |
+
"rendered_equal": true,
|
| 1126 |
+
"tokens_equal": true,
|
| 1127 |
+
"rendered_sha256": "749b9ab5744f103026bc7b97cb021f820aec8a708ef3117ed9ffb3c82dc727a6",
|
| 1128 |
+
"token_ids_sha256": "c04c84f9c01ef219732a2a5a12df123c7596e297e5c286aa0929648a7e3f4a71"
|
| 1129 |
+
},
|
| 1130 |
+
{
|
| 1131 |
+
"case": "unicode-01",
|
| 1132 |
+
"options": {
|
| 1133 |
+
"reasoning_effort": "medium"
|
| 1134 |
+
},
|
| 1135 |
+
"rendered_equal": true,
|
| 1136 |
+
"tokens_equal": true,
|
| 1137 |
+
"rendered_sha256": "7222991af7ce9ca6c332f1004b1447347009c19ad2c6e305872c9b885e58ee6e",
|
| 1138 |
+
"token_ids_sha256": "c4e35e4934451ebe9cdff2d460d661d4c2f4d2b10cfc3885a233d1aca0671af3"
|
| 1139 |
+
},
|
| 1140 |
+
{
|
| 1141 |
+
"case": "unicode-01",
|
| 1142 |
+
"options": {
|
| 1143 |
+
"reasoning_effort": "xhigh"
|
| 1144 |
+
},
|
| 1145 |
+
"rendered_equal": true,
|
| 1146 |
+
"tokens_equal": true,
|
| 1147 |
+
"rendered_sha256": "873831a91e22b06c76fc5f676cf413eb134887725518f0915bb5e84d7f06b2b5",
|
| 1148 |
+
"token_ids_sha256": "f3baf0dc6982eaece8c4cdd4c4671b1ad756619ae32530bd08481c691a4986c8"
|
| 1149 |
+
},
|
| 1150 |
+
{
|
| 1151 |
+
"case": "unicode-02",
|
| 1152 |
+
"options": {},
|
| 1153 |
+
"rendered_equal": true,
|
| 1154 |
+
"tokens_equal": true,
|
| 1155 |
+
"rendered_sha256": "7d29c826bee76e345dcad80d469e0c238f48af54819f1912de0f6038169538c7",
|
| 1156 |
+
"token_ids_sha256": "4a3f23fdbd290986351a2d30596196a47868493013f89a206e7a94d6ada39ad4"
|
| 1157 |
+
},
|
| 1158 |
+
{
|
| 1159 |
+
"case": "unicode-02",
|
| 1160 |
+
"options": {
|
| 1161 |
+
"enable_thinking": false
|
| 1162 |
+
},
|
| 1163 |
+
"rendered_equal": true,
|
| 1164 |
+
"tokens_equal": true,
|
| 1165 |
+
"rendered_sha256": "2941f77f6d53b2f4123fedbb77ecfc009e7da0970021af7cbdbf5ff5d5e27749",
|
| 1166 |
+
"token_ids_sha256": "08c986d3979914a9a4ccc7205f9acb2969db0063df8ed2eddf8850891b3b2ae8"
|
| 1167 |
+
},
|
| 1168 |
+
{
|
| 1169 |
+
"case": "unicode-02",
|
| 1170 |
+
"options": {
|
| 1171 |
+
"reasoning_effort": "low"
|
| 1172 |
+
},
|
| 1173 |
+
"rendered_equal": true,
|
| 1174 |
+
"tokens_equal": true,
|
| 1175 |
+
"rendered_sha256": "abf48e9b182940d04cd3ae1b89bbe6d2558044551682fc80660e82b6cf7270d8",
|
| 1176 |
+
"token_ids_sha256": "662cc9514c92de9469ecb2c47fedfcf0f1468d481445cbb5fa73950e6ca8310d"
|
| 1177 |
+
},
|
| 1178 |
+
{
|
| 1179 |
+
"case": "unicode-02",
|
| 1180 |
+
"options": {
|
| 1181 |
+
"reasoning_effort": "medium"
|
| 1182 |
+
},
|
| 1183 |
+
"rendered_equal": true,
|
| 1184 |
+
"tokens_equal": true,
|
| 1185 |
+
"rendered_sha256": "998ab000c7531bd04a91be93ebbae3b10bf0128784a4dcbfad895249f02de0dc",
|
| 1186 |
+
"token_ids_sha256": "306a80c5aeb1708c537527547590859a3adcfa5951fb9937ffd177b0349a5199"
|
| 1187 |
+
},
|
| 1188 |
+
{
|
| 1189 |
+
"case": "unicode-02",
|
| 1190 |
+
"options": {
|
| 1191 |
+
"reasoning_effort": "xhigh"
|
| 1192 |
+
},
|
| 1193 |
+
"rendered_equal": true,
|
| 1194 |
+
"tokens_equal": true,
|
| 1195 |
+
"rendered_sha256": "7d29c826bee76e345dcad80d469e0c238f48af54819f1912de0f6038169538c7",
|
| 1196 |
+
"token_ids_sha256": "4a3f23fdbd290986351a2d30596196a47868493013f89a206e7a94d6ada39ad4"
|
| 1197 |
+
},
|
| 1198 |
+
{
|
| 1199 |
+
"case": "unicode-03",
|
| 1200 |
+
"options": {},
|
| 1201 |
+
"rendered_equal": true,
|
| 1202 |
+
"tokens_equal": true,
|
| 1203 |
+
"rendered_sha256": "bf4b5f71c04f51824c51cc1426cfcd0c437171656133c7c369c23c357223b486",
|
| 1204 |
+
"token_ids_sha256": "e00642a1e34a12ef656d09970b2324751d6af2271b01c433d7d1b16e56740d9f"
|
| 1205 |
+
},
|
| 1206 |
+
{
|
| 1207 |
+
"case": "unicode-03",
|
| 1208 |
+
"options": {
|
| 1209 |
+
"enable_thinking": false
|
| 1210 |
+
},
|
| 1211 |
+
"rendered_equal": true,
|
| 1212 |
+
"tokens_equal": true,
|
| 1213 |
+
"rendered_sha256": "12fbc9a75e8f80f90e604940aec261dce857bd6a9a29b44155c780b7da72da34",
|
| 1214 |
+
"token_ids_sha256": "a2974c301f5ce702b9c5c3046d5f83c4c435d41bed622d4c48874b40a580861f"
|
| 1215 |
+
},
|
| 1216 |
+
{
|
| 1217 |
+
"case": "unicode-03",
|
| 1218 |
+
"options": {
|
| 1219 |
+
"reasoning_effort": "low"
|
| 1220 |
+
},
|
| 1221 |
+
"rendered_equal": true,
|
| 1222 |
+
"tokens_equal": true,
|
| 1223 |
+
"rendered_sha256": "6add51b230cd93bf48a49f4db9373b3ec1e551d2ec96a3b4dbea5a7d015b144f",
|
| 1224 |
+
"token_ids_sha256": "8416686c5324dacd87e006bae5782e6bbf64b80d63173dab546e2e9818d3f641"
|
| 1225 |
+
},
|
| 1226 |
+
{
|
| 1227 |
+
"case": "unicode-03",
|
| 1228 |
+
"options": {
|
| 1229 |
+
"reasoning_effort": "medium"
|
| 1230 |
+
},
|
| 1231 |
+
"rendered_equal": true,
|
| 1232 |
+
"tokens_equal": true,
|
| 1233 |
+
"rendered_sha256": "fb1f80d916cbd5dfb8280688956eadd738271c2bc2337b80815bb9fc51731c32",
|
| 1234 |
+
"token_ids_sha256": "b81d42ed82db2354b3340df6024f1231000a5325ccbb914db8358283a0532e62"
|
| 1235 |
+
},
|
| 1236 |
+
{
|
| 1237 |
+
"case": "unicode-03",
|
| 1238 |
+
"options": {
|
| 1239 |
+
"reasoning_effort": "xhigh"
|
| 1240 |
+
},
|
| 1241 |
+
"rendered_equal": true,
|
| 1242 |
+
"tokens_equal": true,
|
| 1243 |
+
"rendered_sha256": "bf4b5f71c04f51824c51cc1426cfcd0c437171656133c7c369c23c357223b486",
|
| 1244 |
+
"token_ids_sha256": "e00642a1e34a12ef656d09970b2324751d6af2271b01c433d7d1b16e56740d9f"
|
| 1245 |
+
},
|
| 1246 |
+
{
|
| 1247 |
+
"case": "unicode-04",
|
| 1248 |
+
"options": {},
|
| 1249 |
+
"rendered_equal": true,
|
| 1250 |
+
"tokens_equal": true,
|
| 1251 |
+
"rendered_sha256": "d7142c4d4ade7ba1b87072e8aacf73c17f08e255dea6eb1b06a621353211c5a1",
|
| 1252 |
+
"token_ids_sha256": "4ed5ff2c7b6a2f8ae5c264e871a1d758a316b2f28f5870331b4458bfe1d8caf0"
|
| 1253 |
+
},
|
| 1254 |
+
{
|
| 1255 |
+
"case": "unicode-04",
|
| 1256 |
+
"options": {
|
| 1257 |
+
"enable_thinking": false
|
| 1258 |
+
},
|
| 1259 |
+
"rendered_equal": true,
|
| 1260 |
+
"tokens_equal": true,
|
| 1261 |
+
"rendered_sha256": "cc557c74d6c9a5c41b9ec54c4924315e2976080858c08f18c03110223f8aead6",
|
| 1262 |
+
"token_ids_sha256": "f0309c2a3ee2ca5a83c54e5b1c23482a075686d5e997824788a572193bce952f"
|
| 1263 |
+
},
|
| 1264 |
+
{
|
| 1265 |
+
"case": "unicode-04",
|
| 1266 |
+
"options": {
|
| 1267 |
+
"reasoning_effort": "low"
|
| 1268 |
+
},
|
| 1269 |
+
"rendered_equal": true,
|
| 1270 |
+
"tokens_equal": true,
|
| 1271 |
+
"rendered_sha256": "0f4e07bf9c8129f5ecfe3c815adff8d78d3013cf8157d85f113f6035966762cb",
|
| 1272 |
+
"token_ids_sha256": "f0c31548432c48ba755043292d19a9dcc64e81677e3a0c4129b663d664df1fe8"
|
| 1273 |
+
},
|
| 1274 |
+
{
|
| 1275 |
+
"case": "unicode-04",
|
| 1276 |
+
"options": {
|
| 1277 |
+
"reasoning_effort": "medium"
|
| 1278 |
+
},
|
| 1279 |
+
"rendered_equal": true,
|
| 1280 |
+
"tokens_equal": true,
|
| 1281 |
+
"rendered_sha256": "515d47b9366bdbff3c4da92f763fcdd382487ae4dbc97c88dc4f677e600ffdd7",
|
| 1282 |
+
"token_ids_sha256": "14f6bce785b2517a53fc15d776f89d688fac43e4b11d434a63903fb451628e3d"
|
| 1283 |
+
},
|
| 1284 |
+
{
|
| 1285 |
+
"case": "unicode-04",
|
| 1286 |
+
"options": {
|
| 1287 |
+
"reasoning_effort": "xhigh"
|
| 1288 |
+
},
|
| 1289 |
+
"rendered_equal": true,
|
| 1290 |
+
"tokens_equal": true,
|
| 1291 |
+
"rendered_sha256": "d7142c4d4ade7ba1b87072e8aacf73c17f08e255dea6eb1b06a621353211c5a1",
|
| 1292 |
+
"token_ids_sha256": "4ed5ff2c7b6a2f8ae5c264e871a1d758a316b2f28f5870331b4458bfe1d8caf0"
|
| 1293 |
+
},
|
| 1294 |
+
{
|
| 1295 |
+
"case": "unicode-05",
|
| 1296 |
+
"options": {},
|
| 1297 |
+
"rendered_equal": true,
|
| 1298 |
+
"tokens_equal": true,
|
| 1299 |
+
"rendered_sha256": "c29c6cf2be9160e98648fa8dc071fece6ea6660cf69f08e1f7b0aa54fe316b7e",
|
| 1300 |
+
"token_ids_sha256": "25632625ac135dc1d449c78798e64ada84f0ae48804aafbc09914e8b026d3146"
|
| 1301 |
+
},
|
| 1302 |
+
{
|
| 1303 |
+
"case": "unicode-05",
|
| 1304 |
+
"options": {
|
| 1305 |
+
"enable_thinking": false
|
| 1306 |
+
},
|
| 1307 |
+
"rendered_equal": true,
|
| 1308 |
+
"tokens_equal": true,
|
| 1309 |
+
"rendered_sha256": "44b83f63cdda91288fca02c6155eea41a474b6cb2fcdad68ff9587cc055a2fab",
|
| 1310 |
+
"token_ids_sha256": "1fd9dc706e9b32b1af44b066e7abe40afa5f6636a645a3c9879f9dd0d6cccf6d"
|
| 1311 |
+
},
|
| 1312 |
+
{
|
| 1313 |
+
"case": "unicode-05",
|
| 1314 |
+
"options": {
|
| 1315 |
+
"reasoning_effort": "low"
|
| 1316 |
+
},
|
| 1317 |
+
"rendered_equal": true,
|
| 1318 |
+
"tokens_equal": true,
|
| 1319 |
+
"rendered_sha256": "54513566862c2e37446c1bf5d746b65b4c32e938f68764673ee100ab40c0f71d",
|
| 1320 |
+
"token_ids_sha256": "c7871f918bec46deeddf3630e2fe8a1b39970eb5b8efb50c135b2ea9801c82c3"
|
| 1321 |
+
},
|
| 1322 |
+
{
|
| 1323 |
+
"case": "unicode-05",
|
| 1324 |
+
"options": {
|
| 1325 |
+
"reasoning_effort": "medium"
|
| 1326 |
+
},
|
| 1327 |
+
"rendered_equal": true,
|
| 1328 |
+
"tokens_equal": true,
|
| 1329 |
+
"rendered_sha256": "0857bea7133e43b4ef19f718421ae2a03622f96d921ab05042503fd15895d2dc",
|
| 1330 |
+
"token_ids_sha256": "ebf3da501675389d42d06b41329a53a3f90650cc2ec38c8319c9ae9088ffc866"
|
| 1331 |
+
},
|
| 1332 |
+
{
|
| 1333 |
+
"case": "unicode-05",
|
| 1334 |
+
"options": {
|
| 1335 |
+
"reasoning_effort": "xhigh"
|
| 1336 |
+
},
|
| 1337 |
+
"rendered_equal": true,
|
| 1338 |
+
"tokens_equal": true,
|
| 1339 |
+
"rendered_sha256": "c29c6cf2be9160e98648fa8dc071fece6ea6660cf69f08e1f7b0aa54fe316b7e",
|
| 1340 |
+
"token_ids_sha256": "25632625ac135dc1d449c78798e64ada84f0ae48804aafbc09914e8b026d3146"
|
| 1341 |
+
},
|
| 1342 |
+
{
|
| 1343 |
+
"case": "roles-01",
|
| 1344 |
+
"options": {},
|
| 1345 |
+
"rendered_equal": true,
|
| 1346 |
+
"tokens_equal": true,
|
| 1347 |
+
"rendered_sha256": "69197243135d48e4810d294922e7cf658a4be3dee7774ef4c990645dda560c23",
|
| 1348 |
+
"token_ids_sha256": "678d6c1d5b98f94c37677b7eccaf46dd0cad48028bf1da9d26ca95b8bbb5c07c"
|
| 1349 |
+
},
|
| 1350 |
+
{
|
| 1351 |
+
"case": "roles-01",
|
| 1352 |
+
"options": {
|
| 1353 |
+
"enable_thinking": false
|
| 1354 |
+
},
|
| 1355 |
+
"rendered_equal": true,
|
| 1356 |
+
"tokens_equal": true,
|
| 1357 |
+
"rendered_sha256": "be4e59de4ee724c6ad88fa7bd5ba7e3b720d10007ddb784bf816c159a5177638",
|
| 1358 |
+
"token_ids_sha256": "dedb5f6a296d441e6ae9f0800da3ff20185aa7679704d810bee4f7e4cb688866"
|
| 1359 |
+
},
|
| 1360 |
+
{
|
| 1361 |
+
"case": "roles-01",
|
| 1362 |
+
"options": {
|
| 1363 |
+
"reasoning_effort": "low"
|
| 1364 |
+
},
|
| 1365 |
+
"rendered_equal": true,
|
| 1366 |
+
"tokens_equal": true,
|
| 1367 |
+
"rendered_sha256": "b18660722791b356c87ecaca8b311901c0c1c7998c333b9f1fb4a30e4db71cdb",
|
| 1368 |
+
"token_ids_sha256": "d814d754001623d861b248019f7b6217520c75b930e0e35bba3c17e58cb7d5fb"
|
| 1369 |
+
},
|
| 1370 |
+
{
|
| 1371 |
+
"case": "roles-01",
|
| 1372 |
+
"options": {
|
| 1373 |
+
"reasoning_effort": "medium"
|
| 1374 |
+
},
|
| 1375 |
+
"rendered_equal": true,
|
| 1376 |
+
"tokens_equal": true,
|
| 1377 |
+
"rendered_sha256": "eee7dec1e6469d438b5d21989ef21095f287efd1eae13b4734fb56cfb84f1959",
|
| 1378 |
+
"token_ids_sha256": "ceeb56c216d9df66e9942193cc03ad169bfa40959d8d381188443e2006f8ebda"
|
| 1379 |
+
},
|
| 1380 |
+
{
|
| 1381 |
+
"case": "roles-01",
|
| 1382 |
+
"options": {
|
| 1383 |
+
"reasoning_effort": "xhigh"
|
| 1384 |
+
},
|
| 1385 |
+
"rendered_equal": true,
|
| 1386 |
+
"tokens_equal": true,
|
| 1387 |
+
"rendered_sha256": "69197243135d48e4810d294922e7cf658a4be3dee7774ef4c990645dda560c23",
|
| 1388 |
+
"token_ids_sha256": "678d6c1d5b98f94c37677b7eccaf46dd0cad48028bf1da9d26ca95b8bbb5c07c"
|
| 1389 |
+
},
|
| 1390 |
+
{
|
| 1391 |
+
"case": "roles-02",
|
| 1392 |
+
"options": {},
|
| 1393 |
+
"rendered_equal": true,
|
| 1394 |
+
"tokens_equal": true,
|
| 1395 |
+
"rendered_sha256": "712d00c38b9e83916c4835a7fd39282d23ac9320c9f19bc16c16eb4a4f040011",
|
| 1396 |
+
"token_ids_sha256": "e2bf0f7a3aae6e78f914021f4402fea5d91d6c707ce5a4cbf620829cf3c0764e"
|
| 1397 |
+
},
|
| 1398 |
+
{
|
| 1399 |
+
"case": "roles-02",
|
| 1400 |
+
"options": {
|
| 1401 |
+
"enable_thinking": false
|
| 1402 |
+
},
|
| 1403 |
+
"rendered_equal": true,
|
| 1404 |
+
"tokens_equal": true,
|
| 1405 |
+
"rendered_sha256": "7fa28a820c16c0cdb7bd520ce67584863bc2621963b5ca86b0ff9b31bb4e595c",
|
| 1406 |
+
"token_ids_sha256": "2cd4c83c774cd9f5d4cd6cb831fc524e56177ada3fe18441cb5dc90c9ed40a91"
|
| 1407 |
+
},
|
| 1408 |
+
{
|
| 1409 |
+
"case": "roles-02",
|
| 1410 |
+
"options": {
|
| 1411 |
+
"reasoning_effort": "low"
|
| 1412 |
+
},
|
| 1413 |
+
"rendered_equal": true,
|
| 1414 |
+
"tokens_equal": true,
|
| 1415 |
+
"rendered_sha256": "13e1946a670a1e3fb4f611341760b334e9a0e451ae65eccf52b2a6d03e4fbe61",
|
| 1416 |
+
"token_ids_sha256": "6ee01320aa8b8230d8d9fce35bdf2cf5379524e389f2fcaef27b4a8c1d8360bd"
|
| 1417 |
+
},
|
| 1418 |
+
{
|
| 1419 |
+
"case": "roles-02",
|
| 1420 |
+
"options": {
|
| 1421 |
+
"reasoning_effort": "medium"
|
| 1422 |
+
},
|
| 1423 |
+
"rendered_equal": true,
|
| 1424 |
+
"tokens_equal": true,
|
| 1425 |
+
"rendered_sha256": "040d17c8416b169af8829d4ac474fb2f59b4df2c3a1e05b97798f97b702f5d85",
|
| 1426 |
+
"token_ids_sha256": "bfad556e9b5da0ccd563f009ee1b2b332165bf7e740db9118d0b3293d34227b9"
|
| 1427 |
+
},
|
| 1428 |
+
{
|
| 1429 |
+
"case": "roles-02",
|
| 1430 |
+
"options": {
|
| 1431 |
+
"reasoning_effort": "xhigh"
|
| 1432 |
+
},
|
| 1433 |
+
"rendered_equal": true,
|
| 1434 |
+
"tokens_equal": true,
|
| 1435 |
+
"rendered_sha256": "712d00c38b9e83916c4835a7fd39282d23ac9320c9f19bc16c16eb4a4f040011",
|
| 1436 |
+
"token_ids_sha256": "e2bf0f7a3aae6e78f914021f4402fea5d91d6c707ce5a4cbf620829cf3c0764e"
|
| 1437 |
+
},
|
| 1438 |
+
{
|
| 1439 |
+
"case": "roles-03",
|
| 1440 |
+
"options": {},
|
| 1441 |
+
"rendered_equal": true,
|
| 1442 |
+
"tokens_equal": true,
|
| 1443 |
+
"rendered_sha256": "3b85188652babd19a119f9bb6970d704077a93af91a2b0d16f24a787188a4068",
|
| 1444 |
+
"token_ids_sha256": "d94af0af1c092b4782cba4ad4b25b38414db15ee002a375a2fd0c75ba6d05dd8"
|
| 1445 |
+
},
|
| 1446 |
+
{
|
| 1447 |
+
"case": "roles-03",
|
| 1448 |
+
"options": {
|
| 1449 |
+
"enable_thinking": false
|
| 1450 |
+
},
|
| 1451 |
+
"rendered_equal": true,
|
| 1452 |
+
"tokens_equal": true,
|
| 1453 |
+
"rendered_sha256": "ce4853f4464de61b59ff75e37680c4dd1ae59aedddebcbea809f3a2c4f1affca",
|
| 1454 |
+
"token_ids_sha256": "12248951e0fdecd25101bc14b252df89f96b821450e55e896c8f6e12615206a8"
|
| 1455 |
+
},
|
| 1456 |
+
{
|
| 1457 |
+
"case": "roles-03",
|
| 1458 |
+
"options": {
|
| 1459 |
+
"reasoning_effort": "low"
|
| 1460 |
+
},
|
| 1461 |
+
"rendered_equal": true,
|
| 1462 |
+
"tokens_equal": true,
|
| 1463 |
+
"rendered_sha256": "dfb78b9b5145697a1185231bc1af8f91785880221c5da5154fb7f91459ebd927",
|
| 1464 |
+
"token_ids_sha256": "a61aacd7a56e3427d13f7c06794de7b3903885140d063a8a9373ed2d21507c3f"
|
| 1465 |
+
},
|
| 1466 |
+
{
|
| 1467 |
+
"case": "roles-03",
|
| 1468 |
+
"options": {
|
| 1469 |
+
"reasoning_effort": "medium"
|
| 1470 |
+
},
|
| 1471 |
+
"rendered_equal": true,
|
| 1472 |
+
"tokens_equal": true,
|
| 1473 |
+
"rendered_sha256": "d9381db20bf9a23be308fc95f4ff07b7af74b610c2c2c3daeb886c545bc647fc",
|
| 1474 |
+
"token_ids_sha256": "42408fa09b988dd65ee60fe0f098d82323f1a9a3c60e2067263549573d9e8a8a"
|
| 1475 |
+
},
|
| 1476 |
+
{
|
| 1477 |
+
"case": "roles-03",
|
| 1478 |
+
"options": {
|
| 1479 |
+
"reasoning_effort": "xhigh"
|
| 1480 |
+
},
|
| 1481 |
+
"rendered_equal": true,
|
| 1482 |
+
"tokens_equal": true,
|
| 1483 |
+
"rendered_sha256": "3b85188652babd19a119f9bb6970d704077a93af91a2b0d16f24a787188a4068",
|
| 1484 |
+
"token_ids_sha256": "d94af0af1c092b4782cba4ad4b25b38414db15ee002a375a2fd0c75ba6d05dd8"
|
| 1485 |
+
},
|
| 1486 |
+
{
|
| 1487 |
+
"case": "roles-04",
|
| 1488 |
+
"options": {},
|
| 1489 |
+
"rendered_equal": true,
|
| 1490 |
+
"tokens_equal": true,
|
| 1491 |
+
"rendered_sha256": "9cebda0d117eae0f377f38014a909a8ff59a7c9813803ab4be09faae59f3edff",
|
| 1492 |
+
"token_ids_sha256": "00ab1f28e66ffa06478fa3d42dbe05c1b7b243e73cc1324147361bc2e71fcf27"
|
| 1493 |
+
},
|
| 1494 |
+
{
|
| 1495 |
+
"case": "roles-04",
|
| 1496 |
+
"options": {
|
| 1497 |
+
"enable_thinking": false
|
| 1498 |
+
},
|
| 1499 |
+
"rendered_equal": true,
|
| 1500 |
+
"tokens_equal": true,
|
| 1501 |
+
"rendered_sha256": "78fb14a7cf8badcc8b7c4b2dc1deb5f18d49d1c2e08f682b3508982f9274d5f1",
|
| 1502 |
+
"token_ids_sha256": "395aca8a9be097ba2cdd5e11bcf9fb67928fb9ec72fc39e9097414249f120f56"
|
| 1503 |
+
},
|
| 1504 |
+
{
|
| 1505 |
+
"case": "roles-04",
|
| 1506 |
+
"options": {
|
| 1507 |
+
"reasoning_effort": "low"
|
| 1508 |
+
},
|
| 1509 |
+
"rendered_equal": true,
|
| 1510 |
+
"tokens_equal": true,
|
| 1511 |
+
"rendered_sha256": "580a0ed251e3ae771fe6d9dc098cc46198d1512615318b3c360c0ad93c7f0b37",
|
| 1512 |
+
"token_ids_sha256": "d03a56676074998e963716039d4fbeee0404bff282283e3eba2bcdc534e48527"
|
| 1513 |
+
},
|
| 1514 |
+
{
|
| 1515 |
+
"case": "roles-04",
|
| 1516 |
+
"options": {
|
| 1517 |
+
"reasoning_effort": "medium"
|
| 1518 |
+
},
|
| 1519 |
+
"rendered_equal": true,
|
| 1520 |
+
"tokens_equal": true,
|
| 1521 |
+
"rendered_sha256": "43603f71f3d781afd5495449e11ddbcfb123e4bbfcb91d49127b8f3d38c1d525",
|
| 1522 |
+
"token_ids_sha256": "e0ef1daabe4baf72ddcaf1569e2896647a3170e7eeabb5bfcf56df297a19f300"
|
| 1523 |
+
},
|
| 1524 |
+
{
|
| 1525 |
+
"case": "roles-04",
|
| 1526 |
+
"options": {
|
| 1527 |
+
"reasoning_effort": "xhigh"
|
| 1528 |
+
},
|
| 1529 |
+
"rendered_equal": true,
|
| 1530 |
+
"tokens_equal": true,
|
| 1531 |
+
"rendered_sha256": "9cebda0d117eae0f377f38014a909a8ff59a7c9813803ab4be09faae59f3edff",
|
| 1532 |
+
"token_ids_sha256": "00ab1f28e66ffa06478fa3d42dbe05c1b7b243e73cc1324147361bc2e71fcf27"
|
| 1533 |
+
},
|
| 1534 |
+
{
|
| 1535 |
+
"case": "roles-05",
|
| 1536 |
+
"options": {},
|
| 1537 |
+
"rendered_equal": true,
|
| 1538 |
+
"tokens_equal": true,
|
| 1539 |
+
"rendered_sha256": "221adbad330129783e9a8df3a43fa0f498b8bcbfb3812c655de79639ec91790b",
|
| 1540 |
+
"token_ids_sha256": "d7a18d6d1252cb2703786b18e1d3eaa16a9648eea36b93a1ded2006f85a37091"
|
| 1541 |
+
},
|
| 1542 |
+
{
|
| 1543 |
+
"case": "roles-05",
|
| 1544 |
+
"options": {
|
| 1545 |
+
"enable_thinking": false
|
| 1546 |
+
},
|
| 1547 |
+
"rendered_equal": true,
|
| 1548 |
+
"tokens_equal": true,
|
| 1549 |
+
"rendered_sha256": "12516193a253ae877876f64b85f7e4b494e26eea096266af085340cb58053c64",
|
| 1550 |
+
"token_ids_sha256": "e2cccb2f8693bc68d97b17c93bd70a633deaa59bce1000d60277300e8bec630a"
|
| 1551 |
+
},
|
| 1552 |
+
{
|
| 1553 |
+
"case": "roles-05",
|
| 1554 |
+
"options": {
|
| 1555 |
+
"reasoning_effort": "low"
|
| 1556 |
+
},
|
| 1557 |
+
"rendered_equal": true,
|
| 1558 |
+
"tokens_equal": true,
|
| 1559 |
+
"rendered_sha256": "accba5632f386b18f07a489f2533b56bf288f4dacc67092747c164c02c8d1410",
|
| 1560 |
+
"token_ids_sha256": "320f0dae8da2a7da89b861a88cbdb0681c059aa2c32becbfd1ca61cd1d51118c"
|
| 1561 |
+
},
|
| 1562 |
+
{
|
| 1563 |
+
"case": "roles-05",
|
| 1564 |
+
"options": {
|
| 1565 |
+
"reasoning_effort": "medium"
|
| 1566 |
+
},
|
| 1567 |
+
"rendered_equal": true,
|
| 1568 |
+
"tokens_equal": true,
|
| 1569 |
+
"rendered_sha256": "cb560837a0396a76b67755d82e2f085f3579679fee20d2439cd3091e12c021f3",
|
| 1570 |
+
"token_ids_sha256": "ef56d5a979147ce65ac1fdd78283b8f25c0a80d8321e1d41b92c512712cd7506"
|
| 1571 |
+
},
|
| 1572 |
+
{
|
| 1573 |
+
"case": "roles-05",
|
| 1574 |
+
"options": {
|
| 1575 |
+
"reasoning_effort": "xhigh"
|
| 1576 |
+
},
|
| 1577 |
+
"rendered_equal": true,
|
| 1578 |
+
"tokens_equal": true,
|
| 1579 |
+
"rendered_sha256": "221adbad330129783e9a8df3a43fa0f498b8bcbfb3812c655de79639ec91790b",
|
| 1580 |
+
"token_ids_sha256": "d7a18d6d1252cb2703786b18e1d3eaa16a9648eea36b93a1ded2006f85a37091"
|
| 1581 |
+
},
|
| 1582 |
+
{
|
| 1583 |
+
"case": "coding-01",
|
| 1584 |
+
"options": {},
|
| 1585 |
+
"rendered_equal": true,
|
| 1586 |
+
"tokens_equal": true,
|
| 1587 |
+
"rendered_sha256": "051b7aa8df5fde373f9f96fca41c7d670d7b11fcd2ddb142a390bea76999b5f8",
|
| 1588 |
+
"token_ids_sha256": "b1ad5965c18fb4f6e2b2fa341dae0f025c989df9bf0e3283189e551a7b96da82"
|
| 1589 |
+
},
|
| 1590 |
+
{
|
| 1591 |
+
"case": "coding-01",
|
| 1592 |
+
"options": {
|
| 1593 |
+
"enable_thinking": false
|
| 1594 |
+
},
|
| 1595 |
+
"rendered_equal": true,
|
| 1596 |
+
"tokens_equal": true,
|
| 1597 |
+
"rendered_sha256": "c6fc7d3512acc9d7d7bd3c0788be368e86ddf7cee0036b70e86e293a10e89596",
|
| 1598 |
+
"token_ids_sha256": "d095663e2e962f0090c4e595ae1454d546a5528db6aeb791bc4c90ef35117d40"
|
| 1599 |
+
},
|
| 1600 |
+
{
|
| 1601 |
+
"case": "coding-01",
|
| 1602 |
+
"options": {
|
| 1603 |
+
"reasoning_effort": "low"
|
| 1604 |
+
},
|
| 1605 |
+
"rendered_equal": true,
|
| 1606 |
+
"tokens_equal": true,
|
| 1607 |
+
"rendered_sha256": "04300fbdce4d473786e1ad0f4fcc7e198d4bcdef5f266c1ad05fff21cd456200",
|
| 1608 |
+
"token_ids_sha256": "c62e1d77b8b548ea85c60177e753441b267e5935ce5a017139594a0cf104d456"
|
| 1609 |
+
},
|
| 1610 |
+
{
|
| 1611 |
+
"case": "coding-01",
|
| 1612 |
+
"options": {
|
| 1613 |
+
"reasoning_effort": "medium"
|
| 1614 |
+
},
|
| 1615 |
+
"rendered_equal": true,
|
| 1616 |
+
"tokens_equal": true,
|
| 1617 |
+
"rendered_sha256": "712e6076d40ff56ab6beb8b543193f01de8ff494109f916e79e351e9051c2bcd",
|
| 1618 |
+
"token_ids_sha256": "0722a8a5fb8124f7a028af8507b238963d8bc82429a6726fed54c4694a8cce04"
|
| 1619 |
+
},
|
| 1620 |
+
{
|
| 1621 |
+
"case": "coding-01",
|
| 1622 |
+
"options": {
|
| 1623 |
+
"reasoning_effort": "xhigh"
|
| 1624 |
+
},
|
| 1625 |
+
"rendered_equal": true,
|
| 1626 |
+
"tokens_equal": true,
|
| 1627 |
+
"rendered_sha256": "051b7aa8df5fde373f9f96fca41c7d670d7b11fcd2ddb142a390bea76999b5f8",
|
| 1628 |
+
"token_ids_sha256": "b1ad5965c18fb4f6e2b2fa341dae0f025c989df9bf0e3283189e551a7b96da82"
|
| 1629 |
+
},
|
| 1630 |
+
{
|
| 1631 |
+
"case": "coding-02",
|
| 1632 |
+
"options": {},
|
| 1633 |
+
"rendered_equal": true,
|
| 1634 |
+
"tokens_equal": true,
|
| 1635 |
+
"rendered_sha256": "411d173959d148e172d44867aef97f6367f1208c5086c1c656b8c61bdaa1ad97",
|
| 1636 |
+
"token_ids_sha256": "c21a74da2b8d69aa0a51e372ee4bb83480a380d34c8a5e5c8e9cbd437ffd456c"
|
| 1637 |
+
},
|
| 1638 |
+
{
|
| 1639 |
+
"case": "coding-02",
|
| 1640 |
+
"options": {
|
| 1641 |
+
"enable_thinking": false
|
| 1642 |
+
},
|
| 1643 |
+
"rendered_equal": true,
|
| 1644 |
+
"tokens_equal": true,
|
| 1645 |
+
"rendered_sha256": "580edec3aba6a11165ebf4fdf0740108cc3d7b0382cd1e4aeb46b4ba749cfc8a",
|
| 1646 |
+
"token_ids_sha256": "e6a92c6cf675c02b37b416cfb3e7dffa09e52a2260cbc79165a2073f6a09ec13"
|
| 1647 |
+
},
|
| 1648 |
+
{
|
| 1649 |
+
"case": "coding-02",
|
| 1650 |
+
"options": {
|
| 1651 |
+
"reasoning_effort": "low"
|
| 1652 |
+
},
|
| 1653 |
+
"rendered_equal": true,
|
| 1654 |
+
"tokens_equal": true,
|
| 1655 |
+
"rendered_sha256": "7e86786de23289534a245e624822a9e0de18e1e9fafdb381cd7a833d840b474b",
|
| 1656 |
+
"token_ids_sha256": "f69df4a17b6dac41f1b470bd58a9b05b5c396b5b763f0d658b26b5fd9ab2f2f9"
|
| 1657 |
+
},
|
| 1658 |
+
{
|
| 1659 |
+
"case": "coding-02",
|
| 1660 |
+
"options": {
|
| 1661 |
+
"reasoning_effort": "medium"
|
| 1662 |
+
},
|
| 1663 |
+
"rendered_equal": true,
|
| 1664 |
+
"tokens_equal": true,
|
| 1665 |
+
"rendered_sha256": "bbcc8f29071b25d8fb0b525aa9fcdbfa344f77559069b617a5883ceefac21dc9",
|
| 1666 |
+
"token_ids_sha256": "29a24edf2946e8334424a9eb1c654efbd861c71def8c72e9cbd43cd3f25e282e"
|
| 1667 |
+
},
|
| 1668 |
+
{
|
| 1669 |
+
"case": "coding-02",
|
| 1670 |
+
"options": {
|
| 1671 |
+
"reasoning_effort": "xhigh"
|
| 1672 |
+
},
|
| 1673 |
+
"rendered_equal": true,
|
| 1674 |
+
"tokens_equal": true,
|
| 1675 |
+
"rendered_sha256": "411d173959d148e172d44867aef97f6367f1208c5086c1c656b8c61bdaa1ad97",
|
| 1676 |
+
"token_ids_sha256": "c21a74da2b8d69aa0a51e372ee4bb83480a380d34c8a5e5c8e9cbd437ffd456c"
|
| 1677 |
+
},
|
| 1678 |
+
{
|
| 1679 |
+
"case": "coding-03",
|
| 1680 |
+
"options": {},
|
| 1681 |
+
"rendered_equal": true,
|
| 1682 |
+
"tokens_equal": true,
|
| 1683 |
+
"rendered_sha256": "c8b31bcbabdc40e027ff96975825c9e8e1c707b34ad353efa4349d1eeb105e43",
|
| 1684 |
+
"token_ids_sha256": "a0c8029475104f3da2c240b437c2611571e30faa137278d9dbb144ae8a69d719"
|
| 1685 |
+
},
|
| 1686 |
+
{
|
| 1687 |
+
"case": "coding-03",
|
| 1688 |
+
"options": {
|
| 1689 |
+
"enable_thinking": false
|
| 1690 |
+
},
|
| 1691 |
+
"rendered_equal": true,
|
| 1692 |
+
"tokens_equal": true,
|
| 1693 |
+
"rendered_sha256": "6a2ced8824a9a8b8f5198c6a05c27504fa89fc64fbec2ecb6ad7dc60945c3f01",
|
| 1694 |
+
"token_ids_sha256": "40e5461c319001a2e97fb9bbafd7cb867634caaecdc07b65c941415002402daf"
|
| 1695 |
+
},
|
| 1696 |
+
{
|
| 1697 |
+
"case": "coding-03",
|
| 1698 |
+
"options": {
|
| 1699 |
+
"reasoning_effort": "low"
|
| 1700 |
+
},
|
| 1701 |
+
"rendered_equal": true,
|
| 1702 |
+
"tokens_equal": true,
|
| 1703 |
+
"rendered_sha256": "3830b62bb1d8d8bb3ae2632340987db3c294e516bb169422217377831e816b4a",
|
| 1704 |
+
"token_ids_sha256": "de27378bdd6efb851642482fa6dfe3f11d39c52265218c6fec331890b0945b55"
|
| 1705 |
+
},
|
| 1706 |
+
{
|
| 1707 |
+
"case": "coding-03",
|
| 1708 |
+
"options": {
|
| 1709 |
+
"reasoning_effort": "medium"
|
| 1710 |
+
},
|
| 1711 |
+
"rendered_equal": true,
|
| 1712 |
+
"tokens_equal": true,
|
| 1713 |
+
"rendered_sha256": "dff5aa85158115d29350b91444084fac347e49f1f8286ecd3ffa1875e66a7594",
|
| 1714 |
+
"token_ids_sha256": "3349f46bfc31fc3682bfc4c96ddaaa3738c886eb37c61e7464f5887f74a2efc1"
|
| 1715 |
+
},
|
| 1716 |
+
{
|
| 1717 |
+
"case": "coding-03",
|
| 1718 |
+
"options": {
|
| 1719 |
+
"reasoning_effort": "xhigh"
|
| 1720 |
+
},
|
| 1721 |
+
"rendered_equal": true,
|
| 1722 |
+
"tokens_equal": true,
|
| 1723 |
+
"rendered_sha256": "c8b31bcbabdc40e027ff96975825c9e8e1c707b34ad353efa4349d1eeb105e43",
|
| 1724 |
+
"token_ids_sha256": "a0c8029475104f3da2c240b437c2611571e30faa137278d9dbb144ae8a69d719"
|
| 1725 |
+
},
|
| 1726 |
+
{
|
| 1727 |
+
"case": "coding-04",
|
| 1728 |
+
"options": {},
|
| 1729 |
+
"rendered_equal": true,
|
| 1730 |
+
"tokens_equal": true,
|
| 1731 |
+
"rendered_sha256": "525527a25652337c7b127cc17ef22ff8ab41b8624bc5231067ae32d9f7a83f39",
|
| 1732 |
+
"token_ids_sha256": "fc9272e512c52fb5862355801f76a9f0e1fa8612c04397f30b63b85bc0edd39d"
|
| 1733 |
+
},
|
| 1734 |
+
{
|
| 1735 |
+
"case": "coding-04",
|
| 1736 |
+
"options": {
|
| 1737 |
+
"enable_thinking": false
|
| 1738 |
+
},
|
| 1739 |
+
"rendered_equal": true,
|
| 1740 |
+
"tokens_equal": true,
|
| 1741 |
+
"rendered_sha256": "072168df13573a942e2940693badc6bafa7f11669572d6fc2f229001b4469653",
|
| 1742 |
+
"token_ids_sha256": "a66ea75e01bfc1615c9f537012258e3f087b634feb08fa4ffd8d8ba340e0f305"
|
| 1743 |
+
},
|
| 1744 |
+
{
|
| 1745 |
+
"case": "coding-04",
|
| 1746 |
+
"options": {
|
| 1747 |
+
"reasoning_effort": "low"
|
| 1748 |
+
},
|
| 1749 |
+
"rendered_equal": true,
|
| 1750 |
+
"tokens_equal": true,
|
| 1751 |
+
"rendered_sha256": "208f77c8f98b9ee4f04a355793762383877e67d6aaa289b2dfcf1bd75fbddebd",
|
| 1752 |
+
"token_ids_sha256": "40c119c2ad05ffe426d8e69e5b341ca118babdcf8b7818b236d0d352d1d58741"
|
| 1753 |
+
},
|
| 1754 |
+
{
|
| 1755 |
+
"case": "coding-04",
|
| 1756 |
+
"options": {
|
| 1757 |
+
"reasoning_effort": "medium"
|
| 1758 |
+
},
|
| 1759 |
+
"rendered_equal": true,
|
| 1760 |
+
"tokens_equal": true,
|
| 1761 |
+
"rendered_sha256": "6e7390f1ec457eda8db0918223dc25c095c8f4172ea6b09b831437185f02c427",
|
| 1762 |
+
"token_ids_sha256": "0499243975895f7c92a2d18281d1f17e2c36c5846b221d289fe34306c39df9e2"
|
| 1763 |
+
},
|
| 1764 |
+
{
|
| 1765 |
+
"case": "coding-04",
|
| 1766 |
+
"options": {
|
| 1767 |
+
"reasoning_effort": "xhigh"
|
| 1768 |
+
},
|
| 1769 |
+
"rendered_equal": true,
|
| 1770 |
+
"tokens_equal": true,
|
| 1771 |
+
"rendered_sha256": "525527a25652337c7b127cc17ef22ff8ab41b8624bc5231067ae32d9f7a83f39",
|
| 1772 |
+
"token_ids_sha256": "fc9272e512c52fb5862355801f76a9f0e1fa8612c04397f30b63b85bc0edd39d"
|
| 1773 |
+
},
|
| 1774 |
+
{
|
| 1775 |
+
"case": "coding-05",
|
| 1776 |
+
"options": {},
|
| 1777 |
+
"rendered_equal": true,
|
| 1778 |
+
"tokens_equal": true,
|
| 1779 |
+
"rendered_sha256": "9f2ad75fb0b84ce9efd65a3efb8010b701fcf92941cde2ba6a6ef20940bc8ccf",
|
| 1780 |
+
"token_ids_sha256": "4bd80bdd05badf800ad6c69d84e685cb702dd393a4409cffded2e4579467560b"
|
| 1781 |
+
},
|
| 1782 |
+
{
|
| 1783 |
+
"case": "coding-05",
|
| 1784 |
+
"options": {
|
| 1785 |
+
"enable_thinking": false
|
| 1786 |
+
},
|
| 1787 |
+
"rendered_equal": true,
|
| 1788 |
+
"tokens_equal": true,
|
| 1789 |
+
"rendered_sha256": "cd8d48627da73de9ab073e5d0622f81210cac59854b54da2bf2aae54bf55370b",
|
| 1790 |
+
"token_ids_sha256": "eaae104ce5b9c9eb5a26f34ce473f160fd29f32830097ac8d142f51f2e5827cf"
|
| 1791 |
+
},
|
| 1792 |
+
{
|
| 1793 |
+
"case": "coding-05",
|
| 1794 |
+
"options": {
|
| 1795 |
+
"reasoning_effort": "low"
|
| 1796 |
+
},
|
| 1797 |
+
"rendered_equal": true,
|
| 1798 |
+
"tokens_equal": true,
|
| 1799 |
+
"rendered_sha256": "4e769996021bd0ea7f66d57b712c999869e42e96463efa83e93369b6b60fc86e",
|
| 1800 |
+
"token_ids_sha256": "a7586d4d012fb8954d08416f41f08b3cf130aa756497f3f20cebbb7ace39f2b1"
|
| 1801 |
+
},
|
| 1802 |
+
{
|
| 1803 |
+
"case": "coding-05",
|
| 1804 |
+
"options": {
|
| 1805 |
+
"reasoning_effort": "medium"
|
| 1806 |
+
},
|
| 1807 |
+
"rendered_equal": true,
|
| 1808 |
+
"tokens_equal": true,
|
| 1809 |
+
"rendered_sha256": "50912990af564be675422742d3f8d089638d94c8816fec6c89cbe50e289247a8",
|
| 1810 |
+
"token_ids_sha256": "33732ad475a97239de800bf23cff2107361231851a056386d34492ad51bdcbcd"
|
| 1811 |
+
},
|
| 1812 |
+
{
|
| 1813 |
+
"case": "coding-05",
|
| 1814 |
+
"options": {
|
| 1815 |
+
"reasoning_effort": "xhigh"
|
| 1816 |
+
},
|
| 1817 |
+
"rendered_equal": true,
|
| 1818 |
+
"tokens_equal": true,
|
| 1819 |
+
"rendered_sha256": "9f2ad75fb0b84ce9efd65a3efb8010b701fcf92941cde2ba6a6ef20940bc8ccf",
|
| 1820 |
+
"token_ids_sha256": "4bd80bdd05badf800ad6c69d84e685cb702dd393a4409cffded2e4579467560b"
|
| 1821 |
+
},
|
| 1822 |
+
{
|
| 1823 |
+
"case": "coding-06",
|
| 1824 |
+
"options": {},
|
| 1825 |
+
"rendered_equal": true,
|
| 1826 |
+
"tokens_equal": true,
|
| 1827 |
+
"rendered_sha256": "82b4aa32308ea9227904a64f15d1e6d04c19de98e6ac96c29e48c9b128ec06fd",
|
| 1828 |
+
"token_ids_sha256": "267b2aa4000603afed98cede64f743b1d7595e2b821e8a3fcd3ff4e508ddaedd"
|
| 1829 |
+
},
|
| 1830 |
+
{
|
| 1831 |
+
"case": "coding-06",
|
| 1832 |
+
"options": {
|
| 1833 |
+
"enable_thinking": false
|
| 1834 |
+
},
|
| 1835 |
+
"rendered_equal": true,
|
| 1836 |
+
"tokens_equal": true,
|
| 1837 |
+
"rendered_sha256": "81fcfdfd7d5fcb963098331741f221d85160d3282b0ec492a8b12e3bd21a574d",
|
| 1838 |
+
"token_ids_sha256": "bfe93c4c4646449437207262ad6b630c0f47d7099de75dc72f39834928f9ea12"
|
| 1839 |
+
},
|
| 1840 |
+
{
|
| 1841 |
+
"case": "coding-06",
|
| 1842 |
+
"options": {
|
| 1843 |
+
"reasoning_effort": "low"
|
| 1844 |
+
},
|
| 1845 |
+
"rendered_equal": true,
|
| 1846 |
+
"tokens_equal": true,
|
| 1847 |
+
"rendered_sha256": "4d5147f44a60a4825fd8a217b46811224cf80183f9d53f5ce6c8cb9788aae7bc",
|
| 1848 |
+
"token_ids_sha256": "0dd4cd614a3f9d968a52cfbff7d2db4d8e8efebc9d91d8bb48a6f3753c253ea6"
|
| 1849 |
+
},
|
| 1850 |
+
{
|
| 1851 |
+
"case": "coding-06",
|
| 1852 |
+
"options": {
|
| 1853 |
+
"reasoning_effort": "medium"
|
| 1854 |
+
},
|
| 1855 |
+
"rendered_equal": true,
|
| 1856 |
+
"tokens_equal": true,
|
| 1857 |
+
"rendered_sha256": "06189fca5fb668321f952582429ceb9d88c42c9636b4b355d5d3a3e553f091be",
|
| 1858 |
+
"token_ids_sha256": "f707a9bf1f7e54764c1d9d85b6249e4476477f0dd2740e0d79ce1c9743dc063c"
|
| 1859 |
+
},
|
| 1860 |
+
{
|
| 1861 |
+
"case": "coding-06",
|
| 1862 |
+
"options": {
|
| 1863 |
+
"reasoning_effort": "xhigh"
|
| 1864 |
+
},
|
| 1865 |
+
"rendered_equal": true,
|
| 1866 |
+
"tokens_equal": true,
|
| 1867 |
+
"rendered_sha256": "82b4aa32308ea9227904a64f15d1e6d04c19de98e6ac96c29e48c9b128ec06fd",
|
| 1868 |
+
"token_ids_sha256": "267b2aa4000603afed98cede64f743b1d7595e2b821e8a3fcd3ff4e508ddaedd"
|
| 1869 |
+
},
|
| 1870 |
+
{
|
| 1871 |
+
"case": "coding-07",
|
| 1872 |
+
"options": {},
|
| 1873 |
+
"rendered_equal": true,
|
| 1874 |
+
"tokens_equal": true,
|
| 1875 |
+
"rendered_sha256": "b0d7e700a9fac7b48229de675455ed2940caa11f4b1cc49c209a37301a6c2b8f",
|
| 1876 |
+
"token_ids_sha256": "c71180eb108ca429cb4ca6dffcab936a64ab26f63badea18129a4ab6c940d1e5"
|
| 1877 |
+
},
|
| 1878 |
+
{
|
| 1879 |
+
"case": "coding-07",
|
| 1880 |
+
"options": {
|
| 1881 |
+
"enable_thinking": false
|
| 1882 |
+
},
|
| 1883 |
+
"rendered_equal": true,
|
| 1884 |
+
"tokens_equal": true,
|
| 1885 |
+
"rendered_sha256": "e4bcb00c59182c545871cd2c67195403005b03152d8796bf0beae9c047dcd617",
|
| 1886 |
+
"token_ids_sha256": "c56e5386106e5377b9e81ee81fa50c575d4088c26b9971cdd59f76fb6e85cb5a"
|
| 1887 |
+
},
|
| 1888 |
+
{
|
| 1889 |
+
"case": "coding-07",
|
| 1890 |
+
"options": {
|
| 1891 |
+
"reasoning_effort": "low"
|
| 1892 |
+
},
|
| 1893 |
+
"rendered_equal": true,
|
| 1894 |
+
"tokens_equal": true,
|
| 1895 |
+
"rendered_sha256": "5caae3bccbe931fe69c7b7fe5005227be953a288044615e8314a64c6955200a1",
|
| 1896 |
+
"token_ids_sha256": "db7915bbe12598651b963d0cf689f970021965a932800c1b982695c305803c32"
|
| 1897 |
+
},
|
| 1898 |
+
{
|
| 1899 |
+
"case": "coding-07",
|
| 1900 |
+
"options": {
|
| 1901 |
+
"reasoning_effort": "medium"
|
| 1902 |
+
},
|
| 1903 |
+
"rendered_equal": true,
|
| 1904 |
+
"tokens_equal": true,
|
| 1905 |
+
"rendered_sha256": "8a6a197dceef434429c6436feced1f1e6d1d9bd8365c1b701164c25b7ad1019c",
|
| 1906 |
+
"token_ids_sha256": "d18ff1d4baf16bb9fc113e3880da3d144bfe41318982afc841747d1e1fa210cf"
|
| 1907 |
+
},
|
| 1908 |
+
{
|
| 1909 |
+
"case": "coding-07",
|
| 1910 |
+
"options": {
|
| 1911 |
+
"reasoning_effort": "xhigh"
|
| 1912 |
+
},
|
| 1913 |
+
"rendered_equal": true,
|
| 1914 |
+
"tokens_equal": true,
|
| 1915 |
+
"rendered_sha256": "b0d7e700a9fac7b48229de675455ed2940caa11f4b1cc49c209a37301a6c2b8f",
|
| 1916 |
+
"token_ids_sha256": "c71180eb108ca429cb4ca6dffcab936a64ab26f63badea18129a4ab6c940d1e5"
|
| 1917 |
+
},
|
| 1918 |
+
{
|
| 1919 |
+
"case": "coding-08",
|
| 1920 |
+
"options": {},
|
| 1921 |
+
"rendered_equal": true,
|
| 1922 |
+
"tokens_equal": true,
|
| 1923 |
+
"rendered_sha256": "6450b7356a6c99f5fa6ee088f4cd053ea337b1a2acc88f8e02f9b3cd5d55e0dc",
|
| 1924 |
+
"token_ids_sha256": "3c5750c4c0067dfc14491dcb8fcece2fd17c0b7803757705ffa9e148b5448df0"
|
| 1925 |
+
},
|
| 1926 |
+
{
|
| 1927 |
+
"case": "coding-08",
|
| 1928 |
+
"options": {
|
| 1929 |
+
"enable_thinking": false
|
| 1930 |
+
},
|
| 1931 |
+
"rendered_equal": true,
|
| 1932 |
+
"tokens_equal": true,
|
| 1933 |
+
"rendered_sha256": "f8c20776c7229a2a1f91e51a268039b936f8146a12f2b6db1d8dc69d06655a88",
|
| 1934 |
+
"token_ids_sha256": "567bd1194c16fb99264033311094691bb98e2682faf3cf9a3c2fd205b6f123c4"
|
| 1935 |
+
},
|
| 1936 |
+
{
|
| 1937 |
+
"case": "coding-08",
|
| 1938 |
+
"options": {
|
| 1939 |
+
"reasoning_effort": "low"
|
| 1940 |
+
},
|
| 1941 |
+
"rendered_equal": true,
|
| 1942 |
+
"tokens_equal": true,
|
| 1943 |
+
"rendered_sha256": "be22db21ec1ad4e3462089e8a95c744b8b9e0f759efebbaf1da7cecd4f47c2d6",
|
| 1944 |
+
"token_ids_sha256": "de26d7e88adda3545ad0dbeb5bd563c07df82e0e33e2a16e3d7a510d8a64f36b"
|
| 1945 |
+
},
|
| 1946 |
+
{
|
| 1947 |
+
"case": "coding-08",
|
| 1948 |
+
"options": {
|
| 1949 |
+
"reasoning_effort": "medium"
|
| 1950 |
+
},
|
| 1951 |
+
"rendered_equal": true,
|
| 1952 |
+
"tokens_equal": true,
|
| 1953 |
+
"rendered_sha256": "393e28f2aabec5fbd8eadbae4c2143d4bc31bba3810ade122b069dab5a3348a9",
|
| 1954 |
+
"token_ids_sha256": "0660e04b0b6c1a679a7aa1ba2a8d25aed5bce7953a4e808628020fa9e78377f1"
|
| 1955 |
+
},
|
| 1956 |
+
{
|
| 1957 |
+
"case": "coding-08",
|
| 1958 |
+
"options": {
|
| 1959 |
+
"reasoning_effort": "xhigh"
|
| 1960 |
+
},
|
| 1961 |
+
"rendered_equal": true,
|
| 1962 |
+
"tokens_equal": true,
|
| 1963 |
+
"rendered_sha256": "6450b7356a6c99f5fa6ee088f4cd053ea337b1a2acc88f8e02f9b3cd5d55e0dc",
|
| 1964 |
+
"token_ids_sha256": "3c5750c4c0067dfc14491dcb8fcece2fd17c0b7803757705ffa9e148b5448df0"
|
| 1965 |
+
},
|
| 1966 |
+
{
|
| 1967 |
+
"case": "coding-09",
|
| 1968 |
+
"options": {},
|
| 1969 |
+
"rendered_equal": true,
|
| 1970 |
+
"tokens_equal": true,
|
| 1971 |
+
"rendered_sha256": "8087587422b7ee2873c562eb9c4e06eac2a07978ccf0b937a29c02fc3b4c2356",
|
| 1972 |
+
"token_ids_sha256": "bcfe76e47c160f14ab2d450be69d2323d7937287d3f5f9c1f534dc8a9d7efdb6"
|
| 1973 |
+
},
|
| 1974 |
+
{
|
| 1975 |
+
"case": "coding-09",
|
| 1976 |
+
"options": {
|
| 1977 |
+
"enable_thinking": false
|
| 1978 |
+
},
|
| 1979 |
+
"rendered_equal": true,
|
| 1980 |
+
"tokens_equal": true,
|
| 1981 |
+
"rendered_sha256": "e18a2c027cdedd8cda071243f4be301285a09f18a3369d6ede946a304d930aae",
|
| 1982 |
+
"token_ids_sha256": "dc1b5e6e60fdd50123ad7e05ec4cf7b82469e54b47bc00b123eb4f1de8cf1e82"
|
| 1983 |
+
},
|
| 1984 |
+
{
|
| 1985 |
+
"case": "coding-09",
|
| 1986 |
+
"options": {
|
| 1987 |
+
"reasoning_effort": "low"
|
| 1988 |
+
},
|
| 1989 |
+
"rendered_equal": true,
|
| 1990 |
+
"tokens_equal": true,
|
| 1991 |
+
"rendered_sha256": "8d8bdcc536f5c82c277280b4a64e08d1d326a7c073a5255304f0c6de30da5e65",
|
| 1992 |
+
"token_ids_sha256": "cd8a8a5bc78a2f006d9feea1d4a338d567a851dfe999e89326a65aac3dfe7486"
|
| 1993 |
+
},
|
| 1994 |
+
{
|
| 1995 |
+
"case": "coding-09",
|
| 1996 |
+
"options": {
|
| 1997 |
+
"reasoning_effort": "medium"
|
| 1998 |
+
},
|
| 1999 |
+
"rendered_equal": true,
|
| 2000 |
+
"tokens_equal": true,
|
| 2001 |
+
"rendered_sha256": "897bc62dc9b88b47342347d094c357b25197a7686e3931356184f20228a0be89",
|
| 2002 |
+
"token_ids_sha256": "449614cdc8ddbe692df31591b26e4cbb9f97ff69ebcdbe2785fcbc76c74a52ef"
|
| 2003 |
+
},
|
| 2004 |
+
{
|
| 2005 |
+
"case": "coding-09",
|
| 2006 |
+
"options": {
|
| 2007 |
+
"reasoning_effort": "xhigh"
|
| 2008 |
+
},
|
| 2009 |
+
"rendered_equal": true,
|
| 2010 |
+
"tokens_equal": true,
|
| 2011 |
+
"rendered_sha256": "8087587422b7ee2873c562eb9c4e06eac2a07978ccf0b937a29c02fc3b4c2356",
|
| 2012 |
+
"token_ids_sha256": "bcfe76e47c160f14ab2d450be69d2323d7937287d3f5f9c1f534dc8a9d7efdb6"
|
| 2013 |
+
},
|
| 2014 |
+
{
|
| 2015 |
+
"case": "coding-10",
|
| 2016 |
+
"options": {},
|
| 2017 |
+
"rendered_equal": true,
|
| 2018 |
+
"tokens_equal": true,
|
| 2019 |
+
"rendered_sha256": "94354515b7bcb3d0493082d7a923fc6a3f828576f84c7851187462d32e08b4ce",
|
| 2020 |
+
"token_ids_sha256": "d1006418b971215d68426eca0929c46e7e55c66c36e5bfb8f1b125297ee415ad"
|
| 2021 |
+
},
|
| 2022 |
+
{
|
| 2023 |
+
"case": "coding-10",
|
| 2024 |
+
"options": {
|
| 2025 |
+
"enable_thinking": false
|
| 2026 |
+
},
|
| 2027 |
+
"rendered_equal": true,
|
| 2028 |
+
"tokens_equal": true,
|
| 2029 |
+
"rendered_sha256": "425363c857a6ab7ece15aae285272fb08356c01fe91e2e85809a337a8f7007ed",
|
| 2030 |
+
"token_ids_sha256": "276077d7b9ded956051ce9ab980fefa8c761f423d570286b49defa34d1e71f92"
|
| 2031 |
+
},
|
| 2032 |
+
{
|
| 2033 |
+
"case": "coding-10",
|
| 2034 |
+
"options": {
|
| 2035 |
+
"reasoning_effort": "low"
|
| 2036 |
+
},
|
| 2037 |
+
"rendered_equal": true,
|
| 2038 |
+
"tokens_equal": true,
|
| 2039 |
+
"rendered_sha256": "a78a50f74c7edbdc09efa5c1ae67361be98cffdaa4836461445c57feb5bd901d",
|
| 2040 |
+
"token_ids_sha256": "c6e9c7e1d58b531f655fadfa24efdd5580004bf88258d5fd93be5429873869be"
|
| 2041 |
+
},
|
| 2042 |
+
{
|
| 2043 |
+
"case": "coding-10",
|
| 2044 |
+
"options": {
|
| 2045 |
+
"reasoning_effort": "medium"
|
| 2046 |
+
},
|
| 2047 |
+
"rendered_equal": true,
|
| 2048 |
+
"tokens_equal": true,
|
| 2049 |
+
"rendered_sha256": "87d4ff617dfc4d3b7389dd945a6244a020ef8751963faab8d1e11eb69772eda3",
|
| 2050 |
+
"token_ids_sha256": "eeb894ad3f8837c9d0cfb00d24e654f6d489b991cd4dda621e9619fa452fc2ab"
|
| 2051 |
+
},
|
| 2052 |
+
{
|
| 2053 |
+
"case": "coding-10",
|
| 2054 |
+
"options": {
|
| 2055 |
+
"reasoning_effort": "xhigh"
|
| 2056 |
+
},
|
| 2057 |
+
"rendered_equal": true,
|
| 2058 |
+
"tokens_equal": true,
|
| 2059 |
+
"rendered_sha256": "94354515b7bcb3d0493082d7a923fc6a3f828576f84c7851187462d32e08b4ce",
|
| 2060 |
+
"token_ids_sha256": "d1006418b971215d68426eca0929c46e7e55c66c36e5bfb8f1b125297ee415ad"
|
| 2061 |
+
}
|
| 2062 |
+
],
|
| 2063 |
+
"special_token_ids": {
|
| 2064 |
+
"bos_token_id": {
|
| 2065 |
+
"reference": null,
|
| 2066 |
+
"candidate": null
|
| 2067 |
+
},
|
| 2068 |
+
"eos_token_id": {
|
| 2069 |
+
"reference": 248046,
|
| 2070 |
+
"candidate": 248046
|
| 2071 |
+
},
|
| 2072 |
+
"pad_token_id": {
|
| 2073 |
+
"reference": 248044,
|
| 2074 |
+
"candidate": 248044
|
| 2075 |
+
},
|
| 2076 |
+
"unk_token_id": {
|
| 2077 |
+
"reference": null,
|
| 2078 |
+
"candidate": null
|
| 2079 |
+
}
|
| 2080 |
+
},
|
| 2081 |
+
"reference_commit": "5ad04445d2686f525e9fbe5c077e6fa0c7df4200",
|
| 2082 |
+
"scope": "Actual tokenizer/template comparison only, no model generation"
|
| 2083 |
+
},
|
| 2084 |
+
"full_generation": "NOT_RUN",
|
| 2085 |
+
"weight_value_equivalence_to_source": "NOT_RUN",
|
| 2086 |
+
"model_quality": "NOT_RUN",
|
| 2087 |
+
"script_sha256": "59470d94d54adef20c6413a9fbabdb0c19cdc6cbe225dfd760507cb28a6e906f"
|
| 2088 |
+
}
|
compatibility/patch-manifest.json
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"mlx_lm_revision": "c69d1288440a0dc4e6401fc417098b07598dccd5",
|
| 3 |
+
"patches": [
|
| 4 |
+
{
|
| 5 |
+
"path": "compatibility/swift15-mlx-lm.patch",
|
| 6 |
+
"sha256": "f6f1d0bdafa45863bfbf93dac0398c481c993ea04fdf38b9bae98c643f89eaec"
|
| 7 |
+
},
|
| 8 |
+
{
|
| 9 |
+
"path": "compatibility/enable-5bit.patch",
|
| 10 |
+
"sha256": "b985961eac3035e05ca4c9f3a8b283c26e6dd69bab4d113997fc04fe2a4f99cc"
|
| 11 |
+
}
|
| 12 |
+
]
|
| 13 |
+
}
|
compatibility/quant-validation-results.json
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"all_floating_tensors_finite": true,
|
| 3 |
+
"assets_sha256": {
|
| 4 |
+
"chat_template.jinja": "c3cf9e34abf4f9e36c2d72165aa9c132d3e2a725b6c2586aaa3a8af9d7a81041",
|
| 5 |
+
"generation_config.json": "e70c136c1b78ddc1fb0905bac8e733a4dc448d4f852a5dd75143fffc70be550e",
|
| 6 |
+
"merges.txt": "a9d356d7bdf1ef4949e3e748e95b8e10ad9d4e2e838eddc38a0a7b6b94d1db8d",
|
| 7 |
+
"preprocessor_config.json": "27225450ac9c6529872ee1924fcb0962ff5634834f817040f444118116f4e516",
|
| 8 |
+
"tokenizer.json": "0997f410c57a1f4e53b09e4be8f4a172d90edd9564368fb0847030937229b9f3",
|
| 9 |
+
"tokenizer_config.json": "b11349aafa7cdc6a320767cf7ceb29ed82f7eda5d65e8e0819e76f0ce947bf27",
|
| 10 |
+
"video_preprocessor_config.json": "7768af27c1fafa9cc9011c1dc20067e03f8915e03b63504550e11d5066986d13",
|
| 11 |
+
"vocab.json": "ce99b4cb2983d118806ce0a8b777a35b093e2000a503ebde25853284c9dfa003"
|
| 12 |
+
},
|
| 13 |
+
"categories": {
|
| 14 |
+
"MTP": 15,
|
| 15 |
+
"text": 851,
|
| 16 |
+
"vision": 333
|
| 17 |
+
},
|
| 18 |
+
"chat_templates": [
|
| 19 |
+
{
|
| 20 |
+
"options": {
|
| 21 |
+
"enable_thinking": false
|
| 22 |
+
},
|
| 23 |
+
"rendered": "<|im_start|>user\nSay hello.<|im_end|>\n<|im_start|>assistant\n<think>\n\n</think>\n\n"
|
| 24 |
+
},
|
| 25 |
+
{
|
| 26 |
+
"options": {
|
| 27 |
+
"reasoning_effort": "low"
|
| 28 |
+
},
|
| 29 |
+
"rendered": "<|im_start|>system\nReasoning effort is set to low. Keep your thinking brief and focused, moving directly to the conclusion without unnecessary elaboration.<|im_end|>\n<|im_start|>user\nSay hello.<|im_end|>\n<|im_start|>assistant\n<think>\n"
|
| 30 |
+
},
|
| 31 |
+
{
|
| 32 |
+
"options": {
|
| 33 |
+
"reasoning_effort": "xhigh"
|
| 34 |
+
},
|
| 35 |
+
"rendered": "<|im_start|>system\nReasoning effort is set to xhigh. Please think carefully through the task, validate key assumptions, consider plausible alternatives, and prioritize correctness, consistency, and clarity in the final answer.<|im_end|>\n<|im_start|>user\nSay hello.<|im_end|>\n<|im_start|>assistant\n<think>\n"
|
| 36 |
+
}
|
| 37 |
+
],
|
| 38 |
+
"exact_unquantized_tensors": 609,
|
| 39 |
+
"generation": {
|
| 40 |
+
"elapsed_seconds": 495.4394222159999,
|
| 41 |
+
"finish_reason": "stop",
|
| 42 |
+
"prompt": "<|im_start|>user\nReply with exactly: Hello from Swift.<|im_end|>\n<|im_start|>assistant\n<think>\n\n</think>\n\n",
|
| 43 |
+
"prompt_tokens_per_second": 0.04886516458777248,
|
| 44 |
+
"text": "Hello from Swift.",
|
| 45 |
+
"token_ids": [
|
| 46 |
+
9419,
|
| 47 |
+
494,
|
| 48 |
+
22929,
|
| 49 |
+
13,
|
| 50 |
+
248046
|
| 51 |
+
],
|
| 52 |
+
"tokens": 5,
|
| 53 |
+
"tokens_per_second": 0.05894060179705689
|
| 54 |
+
},
|
| 55 |
+
"ignored_tensors": 0,
|
| 56 |
+
"inference_floating_dtype": "float32, CPU runtime only; stored floating tensors remain BF16",
|
| 57 |
+
"load_memory_bytes": 19281804392,
|
| 58 |
+
"load_seconds": 3.1353140849996635,
|
| 59 |
+
"mapped_source_tensors": 1199,
|
| 60 |
+
"mtp": {
|
| 61 |
+
"path": "Explicit MTP step with real text hidden states and shared LM head; speculative generation is not integrated",
|
| 62 |
+
"shape": [
|
| 63 |
+
1,
|
| 64 |
+
1,
|
| 65 |
+
248320
|
| 66 |
+
],
|
| 67 |
+
"status": "PASS"
|
| 68 |
+
},
|
| 69 |
+
"native_bf16_cpu_inference": "Aborted after reproducing incorrect accumulation in the official Linux BF16 quantized matmul. See cpu-quantized-matmul-diagnostic.json.",
|
| 70 |
+
"process_peak_rss_bytes": 24964259840,
|
| 71 |
+
"processor": "Qwen3VLProcessor",
|
| 72 |
+
"quantization": {
|
| 73 |
+
"bits": 5,
|
| 74 |
+
"group_size": 64,
|
| 75 |
+
"mode": "affine"
|
| 76 |
+
},
|
| 77 |
+
"recorded_at": "2026-09-22T12:17:07.052752+00:00",
|
| 78 |
+
"saved_tensors": 2379,
|
| 79 |
+
"source_repo": "ukisai/Swift-1.5-Qwen3.8-27b",
|
| 80 |
+
"source_revision": "5ad04445d2686f525e9fbe5c077e6fa0c7df4200",
|
| 81 |
+
"source_shard_bytes": 55563006776,
|
| 82 |
+
"source_shards": 18,
|
| 83 |
+
"source_tensors": 1199,
|
| 84 |
+
"status": "PASS",
|
| 85 |
+
"tokenizer": "Qwen2Tokenizer",
|
| 86 |
+
"total_validation_seconds": 609.2779944080003,
|
| 87 |
+
"unexplained_tensors": 0,
|
| 88 |
+
"vision": {
|
| 89 |
+
"grid": [
|
| 90 |
+
[
|
| 91 |
+
1,
|
| 92 |
+
16,
|
| 93 |
+
16
|
| 94 |
+
]
|
| 95 |
+
],
|
| 96 |
+
"path": "Vision encoder only; image/video insertion and multimodal text generation are not implemented",
|
| 97 |
+
"shape": [
|
| 98 |
+
64,
|
| 99 |
+
5120
|
| 100 |
+
],
|
| 101 |
+
"status": "PASS"
|
| 102 |
+
}
|
| 103 |
+
}
|
compatibility/source-structural-results.json
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"categories": {
|
| 3 |
+
"MTP": 15,
|
| 4 |
+
"text": 851,
|
| 5 |
+
"vision": 333
|
| 6 |
+
},
|
| 7 |
+
"chat_templates": [
|
| 8 |
+
{
|
| 9 |
+
"options": {
|
| 10 |
+
"enable_thinking": false
|
| 11 |
+
},
|
| 12 |
+
"rendered": "<|im_start|>user\nSay hello.<|im_end|>\n<|im_start|>assistant\n<think>\n\n</think>\n\n",
|
| 13 |
+
"tokens": 15
|
| 14 |
+
},
|
| 15 |
+
{
|
| 16 |
+
"options": {
|
| 17 |
+
"reasoning_effort": "low"
|
| 18 |
+
},
|
| 19 |
+
"rendered": "<|im_start|>system\nReasoning effort is set to low. Keep your thinking brief and focused, moving directly to the conclusion without unnecessary elaboration.<|im_end|>\n<|im_start|>user\nSay hello.<|im_end|>\n<|im_start|>assistant\n<think>\n",
|
| 20 |
+
"tokens": 43
|
| 21 |
+
},
|
| 22 |
+
{
|
| 23 |
+
"options": {
|
| 24 |
+
"reasoning_effort": "xhigh"
|
| 25 |
+
},
|
| 26 |
+
"rendered": "<|im_start|>system\nReasoning effort is set to xhigh. Please think carefully through the task, validate key assumptions, consider plausible alternatives, and prioritize correctness, consistency, and clarity in the final answer.<|im_end|>\n<|im_start|>user\nSay hello.<|im_end|>\n<|im_start|>assistant\n<think>\n",
|
| 27 |
+
"tokens": 55
|
| 28 |
+
}
|
| 29 |
+
],
|
| 30 |
+
"elapsed_seconds": 1.0959153320000041,
|
| 31 |
+
"full_parameter_evaluation": false,
|
| 32 |
+
"generation": "NOT_RUN",
|
| 33 |
+
"ignored_tensors": 0,
|
| 34 |
+
"mapped_tensors": 1199,
|
| 35 |
+
"mlx_active_memory_bytes": 8,
|
| 36 |
+
"mtp_runtime": "component-only; no integrated speculative decoding",
|
| 37 |
+
"platform": "Linux x86_64",
|
| 38 |
+
"process_peak_rss_bytes": 1180291072,
|
| 39 |
+
"processor": "Qwen3VLProcessor",
|
| 40 |
+
"quantization_executed": false,
|
| 41 |
+
"recorded_at": "2026-09-22T12:03:20.905145+00:00",
|
| 42 |
+
"source": "<SOURCE_MODEL_DIR>",
|
| 43 |
+
"source_repo": "ukisai/Swift-1.5-Qwen3.8-27b",
|
| 44 |
+
"source_revision": "5ad04445d2686f525e9fbe5c077e6fa0c7df4200",
|
| 45 |
+
"source_tensors": 1199,
|
| 46 |
+
"source_verification": "compatibility/source-verification.json",
|
| 47 |
+
"previous_recorded_source_verification_sha256_unverified": "1e6e65ed808f3dbc08766bc141706f2d30349d28608f6aba6884b419c3849ef3",
|
| 48 |
+
"source_verification_sha256": "27d87d8d5209c6559643efdd7d7b468b0138ebfb3a7d5771b29be79214bffe75",
|
| 49 |
+
"reference_update_note": "Current hash identifies the published redacted document. The previous recorded hash is retained for provenance but was not reproduced. This reference correction does not rerun the historical validation.",
|
| 50 |
+
"status": "PASS_ACTUAL_SOURCE_LAZY_STRUCTURAL_LOAD",
|
| 51 |
+
"tokenizer": "Qwen2Tokenizer",
|
| 52 |
+
"unexplained_tensors": 0,
|
| 53 |
+
"vision_runtime": "encoder-only; no integrated multimodal generation",
|
| 54 |
+
"weight_backing": "actual verified source safetensors; lazy loading"
|
| 55 |
+
}
|
compatibility/source-verification.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
compatibility/swift15-mlx-lm.patch
ADDED
|
@@ -0,0 +1,962 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
diff --git a/mlx_lm/models/qwen3_5_full.py b/mlx_lm/models/qwen3_5_full.py
|
| 2 |
+
new file mode 100644
|
| 3 |
+
index 0000000..eb3d09b
|
| 4 |
+
--- /dev/null
|
| 5 |
+
+++ b/mlx_lm/models/qwen3_5_full.py
|
| 6 |
+
@@ -0,0 +1,485 @@
|
| 7 |
+
+# Copyright © 2026 Apple Inc.
|
| 8 |
+
+
|
| 9 |
+
+"""Complete Qwen3.5 parameter model, including the vision encoder and MTP.
|
| 10 |
+
+
|
| 11 |
+
+Text generation, the vision encoder, and explicit MTP steps are separate APIs.
|
| 12 |
+
+Image/video token insertion, multimodal text positions, and speculative decoding
|
| 13 |
+
+are not implemented here. Unsupported multimodal calls raise an error.
|
| 14 |
+
+"""
|
| 15 |
+
+
|
| 16 |
+
+import copy
|
| 17 |
+
+from dataclasses import dataclass
|
| 18 |
+
+from typing import Optional
|
| 19 |
+
+
|
| 20 |
+
+import mlx.core as mx
|
| 21 |
+
+import mlx.nn as nn
|
| 22 |
+
+import numpy as np
|
| 23 |
+
+from mlx.utils import tree_flatten, tree_unflatten
|
| 24 |
+
+
|
| 25 |
+
+from . import qwen3_5
|
| 26 |
+
+from .base import BaseModelArgs, create_attention_mask
|
| 27 |
+
+from .cache import KVCache
|
| 28 |
+
+
|
| 29 |
+
+
|
| 30 |
+
+class OffsetRMSNorm(nn.Module):
|
| 31 |
+
+ """Keep HF's zero-centered weights without rounding weight + 1 to BF16."""
|
| 32 |
+
+
|
| 33 |
+
+ def __init__(self, dims, eps=1e-6):
|
| 34 |
+
+ super().__init__()
|
| 35 |
+
+ self.weight = mx.zeros((dims,))
|
| 36 |
+
+ self.eps = eps
|
| 37 |
+
+
|
| 38 |
+
+ def __call__(self, x):
|
| 39 |
+
+ y = x.astype(mx.float32)
|
| 40 |
+
+ y = y * mx.rsqrt(mx.mean(y * y, axis=-1, keepdims=True) + self.eps)
|
| 41 |
+
+ return (y * (1 + self.weight.astype(mx.float32))).astype(x.dtype)
|
| 42 |
+
+
|
| 43 |
+
+
|
| 44 |
+
+def _use_offset_norms(module):
|
| 45 |
+
+ replacements = [
|
| 46 |
+
+ (name, OffsetRMSNorm(norm.weight.shape[0], norm.eps))
|
| 47 |
+
+ for name, norm in module.named_modules()
|
| 48 |
+
+ if isinstance(norm, nn.RMSNorm)
|
| 49 |
+
+ ]
|
| 50 |
+
+ module.update_modules(tree_unflatten(replacements))
|
| 51 |
+
+
|
| 52 |
+
+
|
| 53 |
+
+@dataclass
|
| 54 |
+
+class VisionArgs(BaseModelArgs):
|
| 55 |
+
+ depth: int
|
| 56 |
+
+ hidden_size: int
|
| 57 |
+
+ intermediate_size: int
|
| 58 |
+
+ num_heads: int
|
| 59 |
+
+ out_hidden_size: int
|
| 60 |
+
+ num_position_embeddings: int
|
| 61 |
+
+ patch_size: int = 16
|
| 62 |
+
+ temporal_patch_size: int = 2
|
| 63 |
+
+ spatial_merge_size: int = 2
|
| 64 |
+
+ in_channels: int = 3
|
| 65 |
+
+ hidden_act: str = "gelu_pytorch_tanh"
|
| 66 |
+
+ deepstack_visual_indexes: Optional[list] = None
|
| 67 |
+
+
|
| 68 |
+
+ def __post_init__(self):
|
| 69 |
+
+ if self.deepstack_visual_indexes:
|
| 70 |
+
+ raise ValueError("DeepStack vision features are not supported")
|
| 71 |
+
+ if self.hidden_act != "gelu_pytorch_tanh":
|
| 72 |
+
+ raise ValueError(f"Unsupported vision activation: {self.hidden_act}")
|
| 73 |
+
+ if self.hidden_size % self.num_heads or self.hidden_size // self.num_heads % 4:
|
| 74 |
+
+ raise ValueError("Vision head dimension must be divisible by four")
|
| 75 |
+
+ if int(self.num_position_embeddings**0.5) ** 2 != self.num_position_embeddings:
|
| 76 |
+
+ raise ValueError("Vision position table must be square")
|
| 77 |
+
+
|
| 78 |
+
+
|
| 79 |
+
+class VisionPatchEmbed(nn.Module):
|
| 80 |
+
+ def __init__(self, args):
|
| 81 |
+
+ super().__init__()
|
| 82 |
+
+ self.args = args
|
| 83 |
+
+ kernel = (args.temporal_patch_size, args.patch_size, args.patch_size)
|
| 84 |
+
+ self.proj = nn.Conv3d(
|
| 85 |
+
+ args.in_channels, args.hidden_size, kernel, stride=kernel, bias=True
|
| 86 |
+
+ )
|
| 87 |
+
+
|
| 88 |
+
+ def __call__(self, pixels):
|
| 89 |
+
+ a = self.args
|
| 90 |
+
+ x = pixels.reshape(
|
| 91 |
+
+ -1, a.in_channels, a.temporal_patch_size, a.patch_size, a.patch_size
|
| 92 |
+
+ )
|
| 93 |
+
+ x = x.transpose(0, 2, 3, 4, 1).astype(self.proj.weight.dtype)
|
| 94 |
+
+ return self.proj(x).reshape(-1, a.hidden_size)
|
| 95 |
+
+
|
| 96 |
+
+
|
| 97 |
+
+class VisionAttention(nn.Module):
|
| 98 |
+
+ def __init__(self, args):
|
| 99 |
+
+ super().__init__()
|
| 100 |
+
+ self.num_heads = args.num_heads
|
| 101 |
+
+ self.head_dim = args.hidden_size // args.num_heads
|
| 102 |
+
+ self.qkv = nn.Linear(args.hidden_size, 3 * args.hidden_size)
|
| 103 |
+
+ self.proj = nn.Linear(args.hidden_size, args.hidden_size)
|
| 104 |
+
+
|
| 105 |
+
+ def __call__(self, x, cos, sin, boundaries):
|
| 106 |
+
+ qkv = self.qkv(x).reshape(x.shape[0], 3, self.num_heads, self.head_dim)
|
| 107 |
+
+ q, k, v = qkv.transpose(1, 0, 2, 3)
|
| 108 |
+
+
|
| 109 |
+
+ def rotate(y):
|
| 110 |
+
+ z = y.astype(mx.float32)
|
| 111 |
+
+ half = self.head_dim // 2
|
| 112 |
+
+ rotated = mx.concatenate([-z[..., half:], z[..., :half]], axis=-1)
|
| 113 |
+
+ return (z * cos[:, None] + rotated * sin[:, None]).astype(y.dtype)
|
| 114 |
+
+
|
| 115 |
+
+ q, k = rotate(q), rotate(k)
|
| 116 |
+
+ outputs = []
|
| 117 |
+
+ for start, end in zip(boundaries, boundaries[1:]):
|
| 118 |
+
+ out = mx.fast.scaled_dot_product_attention(
|
| 119 |
+
+ q[start:end].transpose(1, 0, 2)[None],
|
| 120 |
+
+ k[start:end].transpose(1, 0, 2)[None],
|
| 121 |
+
+ v[start:end].transpose(1, 0, 2)[None],
|
| 122 |
+
+ scale=self.head_dim**-0.5,
|
| 123 |
+
+ )
|
| 124 |
+
+ outputs.append(out[0].transpose(1, 0, 2).reshape(end - start, -1))
|
| 125 |
+
+ return self.proj(mx.concatenate(outputs, axis=0))
|
| 126 |
+
+
|
| 127 |
+
+
|
| 128 |
+
+class VisionMLP(nn.Module):
|
| 129 |
+
+ def __init__(self, args):
|
| 130 |
+
+ super().__init__()
|
| 131 |
+
+ self.linear_fc1 = nn.Linear(args.hidden_size, args.intermediate_size)
|
| 132 |
+
+ self.linear_fc2 = nn.Linear(args.intermediate_size, args.hidden_size)
|
| 133 |
+
+
|
| 134 |
+
+ def __call__(self, x):
|
| 135 |
+
+ return self.linear_fc2(nn.gelu_approx(self.linear_fc1(x)))
|
| 136 |
+
+
|
| 137 |
+
+
|
| 138 |
+
+class VisionBlock(nn.Module):
|
| 139 |
+
+ def __init__(self, args):
|
| 140 |
+
+ super().__init__()
|
| 141 |
+
+ self.norm1 = nn.LayerNorm(args.hidden_size, eps=1e-6)
|
| 142 |
+
+ self.norm2 = nn.LayerNorm(args.hidden_size, eps=1e-6)
|
| 143 |
+
+ self.attn = VisionAttention(args)
|
| 144 |
+
+ self.mlp = VisionMLP(args)
|
| 145 |
+
+
|
| 146 |
+
+ def __call__(self, x, cos, sin, boundaries):
|
| 147 |
+
+ x = x + self.attn(self.norm1(x), cos, sin, boundaries)
|
| 148 |
+
+ return x + self.mlp(self.norm2(x))
|
| 149 |
+
+
|
| 150 |
+
+
|
| 151 |
+
+class VisionMerger(nn.Module):
|
| 152 |
+
+ def __init__(self, args):
|
| 153 |
+
+ super().__init__()
|
| 154 |
+
+ self.hidden_size = args.hidden_size * args.spatial_merge_size**2
|
| 155 |
+
+ self.norm = nn.LayerNorm(args.hidden_size, eps=1e-6)
|
| 156 |
+
+ self.linear_fc1 = nn.Linear(self.hidden_size, self.hidden_size)
|
| 157 |
+
+ self.linear_fc2 = nn.Linear(self.hidden_size, args.out_hidden_size)
|
| 158 |
+
+
|
| 159 |
+
+ def __call__(self, x):
|
| 160 |
+
+ x = self.norm(x).reshape(-1, self.hidden_size)
|
| 161 |
+
+ return self.linear_fc2(nn.gelu(self.linear_fc1(x)))
|
| 162 |
+
+
|
| 163 |
+
+
|
| 164 |
+
+class VisionModel(nn.Module):
|
| 165 |
+
+ def __init__(self, args):
|
| 166 |
+
+ super().__init__()
|
| 167 |
+
+ self.args = args
|
| 168 |
+
+ self.patch_embed = VisionPatchEmbed(args)
|
| 169 |
+
+ self.pos_embed = nn.Embedding(args.num_position_embeddings, args.hidden_size)
|
| 170 |
+
+ self.blocks = [VisionBlock(args) for _ in range(args.depth)]
|
| 171 |
+
+ self.merger = VisionMerger(args)
|
| 172 |
+
+
|
| 173 |
+
+ def _positions(self, grid_thw):
|
| 174 |
+
+ grid = np.asarray(
|
| 175 |
+
+ grid_thw.tolist() if hasattr(grid_thw, "tolist") else grid_thw
|
| 176 |
+
+ )
|
| 177 |
+
+ if (
|
| 178 |
+
+ grid.ndim != 2
|
| 179 |
+
+ or grid.shape[1] != 3
|
| 180 |
+
+ or not np.issubdtype(grid.dtype, np.integer)
|
| 181 |
+
+ ):
|
| 182 |
+
+ raise ValueError("grid_thw must be an integer array with shape (N, 3)")
|
| 183 |
+
+ merge = self.args.spatial_merge_size
|
| 184 |
+
+ side = int(self.args.num_position_embeddings**0.5)
|
| 185 |
+
+ positions, indices, weights, boundaries = [], [], [], [0]
|
| 186 |
+
+ for t, h, w in grid.tolist():
|
| 187 |
+
+ if min(t, h, w) <= 0 or h % merge or w % merge:
|
| 188 |
+
+ raise ValueError("Invalid vision grid or spatial merge dimensions")
|
| 189 |
+
+ hp, wp = np.indices((h, w))
|
| 190 |
+
+ block = (h // merge, merge, w // merge, merge)
|
| 191 |
+
+ hp = hp.reshape(block).transpose(0, 2, 1, 3).reshape(-1)
|
| 192 |
+
+ wp = wp.reshape(block).transpose(0, 2, 1, 3).reshape(-1)
|
| 193 |
+
+ positions.append(np.tile(np.stack([hp, wp], axis=-1), (t, 1)))
|
| 194 |
+
+ reorder = np.tile(hp * w + wp, t)
|
| 195 |
+
+ hs = np.linspace(0, side - 1, h, dtype=np.float32)
|
| 196 |
+
+ ws = np.linspace(0, side - 1, w, dtype=np.float32)
|
| 197 |
+
+ hf, wf = hs.astype(np.int32), ws.astype(np.int32)
|
| 198 |
+
+ hc, wc = np.minimum(hf + 1, side - 1), np.minimum(wf + 1, side - 1)
|
| 199 |
+
+ dh, dw = hs - hf, ws - wf
|
| 200 |
+
+ idx = [
|
| 201 |
+
+ (a[:, None] * side + b[None]).reshape(-1)
|
| 202 |
+
+ for a, b in [(hf, wf), (hf, wc), (hc, wf), (hc, wc)]
|
| 203 |
+
+ ]
|
| 204 |
+
+ coeff = [
|
| 205 |
+
+ (a[:, None] * b[None]).reshape(-1)
|
| 206 |
+
+ for a, b in [(1 - dh, 1 - dw), (1 - dh, dw), (dh, 1 - dw), (dh, dw)]
|
| 207 |
+
+ ]
|
| 208 |
+
+ indices.append(np.stack(idx)[:, reorder])
|
| 209 |
+
+ weights.append(np.stack(coeff)[:, reorder])
|
| 210 |
+
+ offset = boundaries[-1]
|
| 211 |
+
+ boundaries.extend(offset + (i + 1) * h * w for i in range(t))
|
| 212 |
+
+ if not positions:
|
| 213 |
+
+ raise ValueError("At least one vision grid is required")
|
| 214 |
+
+ return (
|
| 215 |
+
+ mx.array(np.concatenate(positions), dtype=mx.float32),
|
| 216 |
+
+ mx.array(np.concatenate(indices, axis=1), dtype=mx.int32),
|
| 217 |
+
+ mx.array(np.concatenate(weights, axis=1), dtype=mx.float32),
|
| 218 |
+
+ boundaries,
|
| 219 |
+
+ )
|
| 220 |
+
+
|
| 221 |
+
+ def __call__(self, pixels, grid_thw, return_hidden_states=False):
|
| 222 |
+
+ positions, indices, weights, boundaries = self._positions(grid_thw)
|
| 223 |
+
+ x = self.patch_embed(pixels)
|
| 224 |
+
+ if x.shape[0] != boundaries[-1]:
|
| 225 |
+
+ raise ValueError("Pixel patch count does not match grid_thw")
|
| 226 |
+
+ pos = (self.pos_embed(indices) * weights[..., None]).sum(axis=0)
|
| 227 |
+
+ x = x + pos.astype(x.dtype)
|
| 228 |
+
+ dim = self.args.hidden_size // self.args.num_heads // 2
|
| 229 |
+
+ inv_freq = 1.0 / (10000 ** (mx.arange(0, dim, 2, dtype=mx.float32) / dim))
|
| 230 |
+
+ angles = (positions[..., None] * inv_freq).reshape(x.shape[0], -1)
|
| 231 |
+
+ angles = mx.concatenate([angles, angles], axis=-1)
|
| 232 |
+
+ cos, sin = mx.cos(angles), mx.sin(angles)
|
| 233 |
+
+ for block in self.blocks:
|
| 234 |
+
+ x = block(x, cos, sin, boundaries)
|
| 235 |
+
+ merged = self.merger(x)
|
| 236 |
+
+ return (x, merged) if return_hidden_states else merged
|
| 237 |
+
+
|
| 238 |
+
+
|
| 239 |
+
+class MultiTokenPredictor(nn.Module):
|
| 240 |
+
+ """An explicit MTP step; embeddings and the output head belong to the LM."""
|
| 241 |
+
+
|
| 242 |
+
+ def __init__(self, args, num_layers):
|
| 243 |
+
+ super().__init__()
|
| 244 |
+
+ self.fc = nn.Linear(2 * args.hidden_size, args.hidden_size, bias=False)
|
| 245 |
+
+ self.pre_fc_norm_embedding = OffsetRMSNorm(args.hidden_size, args.rms_norm_eps)
|
| 246 |
+
+ self.pre_fc_norm_hidden = OffsetRMSNorm(args.hidden_size, args.rms_norm_eps)
|
| 247 |
+
+ self.layers = [
|
| 248 |
+
+ qwen3_5.DecoderLayer(args, args.full_attention_interval - 1)
|
| 249 |
+
+ for _ in range(num_layers)
|
| 250 |
+
+ ]
|
| 251 |
+
+ self.norm = OffsetRMSNorm(args.hidden_size, args.rms_norm_eps)
|
| 252 |
+
+ _use_offset_norms(self)
|
| 253 |
+
+
|
| 254 |
+
+ def __call__(self, hidden_states, next_token_embeddings, cache=None, step=0):
|
| 255 |
+
+ if hidden_states.shape != next_token_embeddings.shape:
|
| 256 |
+
+ raise ValueError("MTP hidden states and next-token embeddings must align")
|
| 257 |
+
+ if step < 0:
|
| 258 |
+
+ raise ValueError("MTP step must be non-negative")
|
| 259 |
+
+ x = mx.concatenate(
|
| 260 |
+
+ [
|
| 261 |
+
+ self.pre_fc_norm_embedding(next_token_embeddings),
|
| 262 |
+
+ self.pre_fc_norm_hidden(hidden_states),
|
| 263 |
+
+ ],
|
| 264 |
+
+ axis=-1,
|
| 265 |
+
+ )
|
| 266 |
+
+ x = self.fc(x)
|
| 267 |
+
+ layer = step % len(self.layers)
|
| 268 |
+
+ if cache is not None and len(cache) != len(self.layers):
|
| 269 |
+
+ raise ValueError("MTP requires one KV cache per MTP layer")
|
| 270 |
+
+ c = cache[layer] if cache is not None else None
|
| 271 |
+
+ return self.norm(self.layers[layer](x, create_attention_mask(x, c), c))
|
| 272 |
+
+
|
| 273 |
+
+ def make_cache(self):
|
| 274 |
+
+ return [KVCache() for _ in self.layers]
|
| 275 |
+
+
|
| 276 |
+
+
|
| 277 |
+
+@dataclass
|
| 278 |
+
+class ModelArgs(BaseModelArgs):
|
| 279 |
+
+ model_type: str
|
| 280 |
+
+ text_config: dict
|
| 281 |
+
+ vision_config: dict
|
| 282 |
+
+ language_model_only: bool = False
|
| 283 |
+
+ image_token_id: Optional[int] = None
|
| 284 |
+
+ video_token_id: Optional[int] = None
|
| 285 |
+
+ vision_start_token_id: Optional[int] = None
|
| 286 |
+
+ tie_word_embeddings: bool = False
|
| 287 |
+
+ quantization: Optional[dict] = None
|
| 288 |
+
+
|
| 289 |
+
+ @classmethod
|
| 290 |
+
+ def from_dict(cls, params):
|
| 291 |
+
+ return super().from_dict(copy.deepcopy(params))
|
| 292 |
+
+
|
| 293 |
+
+
|
| 294 |
+
+class Model(nn.Module):
|
| 295 |
+
+ extra_save_files = (
|
| 296 |
+
+ "preprocessor_config.json",
|
| 297 |
+
+ "video_preprocessor_config.json",
|
| 298 |
+
+ "processor_config.json",
|
| 299 |
+
+ "tokenizer.json",
|
| 300 |
+
+ "tokenizer_config.json",
|
| 301 |
+
+ "special_tokens_map.json",
|
| 302 |
+
+ "vocab.json",
|
| 303 |
+
+ "merges.txt",
|
| 304 |
+
+ "chat_template.jinja",
|
| 305 |
+
+ )
|
| 306 |
+
+
|
| 307 |
+
+ def __init__(self, args):
|
| 308 |
+
+ super().__init__()
|
| 309 |
+
+ self.args = args
|
| 310 |
+
+ self.model_type = args.model_type
|
| 311 |
+
+ text = args.text_config
|
| 312 |
+
+ if args.language_model_only:
|
| 313 |
+
+ raise ValueError("The complete model requires language_model_only=false")
|
| 314 |
+
+ if text.get("hidden_act", "silu") not in ("silu", "swish"):
|
| 315 |
+
+ raise ValueError("Unsupported text MLP activation")
|
| 316 |
+
+ if text.get("attn_output_gate", True) is not True:
|
| 317 |
+
+ raise ValueError("Ungated attention is not supported")
|
| 318 |
+
+ if text.get("output_gate_type", "swish") not in ("swish", "sigmoid"):
|
| 319 |
+
+ raise ValueError("Unknown attention gate declaration")
|
| 320 |
+
+ if text.get("mtp_use_dedicated_embeddings", False):
|
| 321 |
+
+ raise ValueError("Dedicated MTP embeddings are not supported")
|
| 322 |
+
+ if args.tie_word_embeddings != text.get("tie_word_embeddings", False):
|
| 323 |
+
+ raise ValueError("Conflicting text and top-level weight tying settings")
|
| 324 |
+
+ self._text_args = qwen3_5.TextModelArgs.from_dict(copy.deepcopy(text))
|
| 325 |
+
+ expected_layers = [
|
| 326 |
+
+ (
|
| 327 |
+
+ "full_attention"
|
| 328 |
+
+ if (i + 1) % self._text_args.full_attention_interval == 0
|
| 329 |
+
+ else "linear_attention"
|
| 330 |
+
+ )
|
| 331 |
+
+ for i in range(self._text_args.num_hidden_layers)
|
| 332 |
+
+ ]
|
| 333 |
+
+ if text.get("layer_types", expected_layers) != expected_layers:
|
| 334 |
+
+ raise ValueError("Layer schedule differs from the supported architecture")
|
| 335 |
+
+ if self._text_args.num_experts:
|
| 336 |
+
+ raise ValueError("This complete model supports the dense architecture")
|
| 337 |
+
+ self.language_model = qwen3_5.TextModel(self._text_args)
|
| 338 |
+
+ _use_offset_norms(self.language_model)
|
| 339 |
+
+ self.visual = VisionModel(VisionArgs.from_dict(args.vision_config))
|
| 340 |
+
+ if self.visual.args.out_hidden_size != self._text_args.hidden_size:
|
| 341 |
+
+ raise ValueError("Vision output size does not match text hidden size")
|
| 342 |
+
+ num_mtp = text.get("mtp_num_hidden_layers", 0)
|
| 343 |
+
+ if num_mtp < 0:
|
| 344 |
+
+ raise ValueError("Invalid MTP layer count")
|
| 345 |
+
+ if num_mtp:
|
| 346 |
+
+ self.mtp = MultiTokenPredictor(self._text_args, num_mtp)
|
| 347 |
+
+ self._parameter_shapes = {
|
| 348 |
+
+ k: tuple(v.shape) for k, v in tree_flatten(self.parameters())
|
| 349 |
+
+ }
|
| 350 |
+
+
|
| 351 |
+
+ @property
|
| 352 |
+
+ def model(self):
|
| 353 |
+
+ return self.language_model.model
|
| 354 |
+
+
|
| 355 |
+
+ @property
|
| 356 |
+
+ def layers(self):
|
| 357 |
+
+ return self.language_model.layers
|
| 358 |
+
+
|
| 359 |
+
+ def make_cache(self):
|
| 360 |
+
+ return self.language_model.make_cache()
|
| 361 |
+
+
|
| 362 |
+
+ def __call__(self, inputs, cache=None, input_embeddings=None, **kwargs):
|
| 363 |
+
+ if kwargs:
|
| 364 |
+
+ raise NotImplementedError(
|
| 365 |
+
+ "Multimodal text integration is not implemented; use visual() for encoder features"
|
| 366 |
+
+ )
|
| 367 |
+
+ for token in (
|
| 368 |
+
+ self.args.image_token_id,
|
| 369 |
+
+ self.args.video_token_id,
|
| 370 |
+
+ self.args.vision_start_token_id,
|
| 371 |
+
+ ):
|
| 372 |
+
+ if (
|
| 373 |
+
+ token is not None
|
| 374 |
+
+ and inputs is not None
|
| 375 |
+
+ and bool(mx.any(inputs == token))
|
| 376 |
+
+ ):
|
| 377 |
+
+ raise NotImplementedError(
|
| 378 |
+
+ "Multimodal token positions require a multimodal text runtime"
|
| 379 |
+
+ )
|
| 380 |
+
+ return self.language_model(inputs, cache, input_embeddings)
|
| 381 |
+
+
|
| 382 |
+
+ def mtp_logits(self, next_token_ids, previous_hidden_states, cache=None, step=0):
|
| 383 |
+
+ if not hasattr(self, "mtp"):
|
| 384 |
+
+ raise ValueError("This checkpoint has no MTP layers")
|
| 385 |
+
+ embeddings = self.model.embed_tokens(next_token_ids)
|
| 386 |
+
+ hidden = self.mtp(previous_hidden_states, embeddings, cache, step)
|
| 387 |
+
+ if self._text_args.tie_word_embeddings:
|
| 388 |
+
+ return self.model.embed_tokens.as_linear(hidden)
|
| 389 |
+
+ return self.language_model.lm_head(hidden)
|
| 390 |
+
+
|
| 391 |
+
+ def weight_mapping(self):
|
| 392 |
+
+ rows = []
|
| 393 |
+
+ for name, shape in sorted(self._parameter_shapes.items()):
|
| 394 |
+
+ source, source_shape, transform = name, shape, "identity"
|
| 395 |
+
+ if name.startswith("language_model.model."):
|
| 396 |
+
+ source = "model.language_model." + name[len("language_model.model.") :]
|
| 397 |
+
+ elif name.startswith("language_model.lm_head."):
|
| 398 |
+
+ source = name[len("language_model.") :]
|
| 399 |
+
+ elif name.startswith("visual."):
|
| 400 |
+
+ source = "model." + name
|
| 401 |
+
+ if name.endswith(".conv1d.weight"):
|
| 402 |
+
+ source_shape = (shape[0], shape[2], shape[1])
|
| 403 |
+
+ transform = "transpose(0,2,1)"
|
| 404 |
+
+ elif name == "visual.patch_embed.proj.weight":
|
| 405 |
+
+ source_shape = (shape[0], shape[4], shape[1], shape[2], shape[3])
|
| 406 |
+
+ transform = "transpose(0,2,3,4,1)"
|
| 407 |
+
+ category = (
|
| 408 |
+
+ "vision"
|
| 409 |
+
+ if name.startswith("visual.")
|
| 410 |
+
+ else "MTP" if name.startswith("mtp.") else "text"
|
| 411 |
+
+ )
|
| 412 |
+
+ rows.append(
|
| 413 |
+
+ dict(
|
| 414 |
+
+ source=source,
|
| 415 |
+
+ source_shape=source_shape,
|
| 416 |
+
+ destination=name,
|
| 417 |
+
+ destination_shape=shape,
|
| 418 |
+
+ category=category,
|
| 419 |
+
+ transform=transform,
|
| 420 |
+
+ )
|
| 421 |
+
+ )
|
| 422 |
+
+ return rows
|
| 423 |
+
+
|
| 424 |
+
+ def sanitize(self, weights):
|
| 425 |
+
+ rows = self.weight_mapping()
|
| 426 |
+
+ hf_names = {r["source"] for r in rows}
|
| 427 |
+
+ native_names = set(self._parameter_shapes)
|
| 428 |
+
+ is_hf = any(k.startswith("model.language_model.") for k in weights)
|
| 429 |
+
+ expected = hf_names if is_hf else native_names
|
| 430 |
+
+ if self.args.quantization:
|
| 431 |
+
+ if is_hf:
|
| 432 |
+
+ raise ValueError("Only original unquantized HF weights can be mapped")
|
| 433 |
+
+ return self._check_native_quantized(weights)
|
| 434 |
+
+ missing, unexpected = expected - set(weights), set(weights) - expected
|
| 435 |
+
+ if missing or unexpected:
|
| 436 |
+
+ raise ValueError(
|
| 437 |
+
+ f"Incomplete weight mapping: missing={sorted(missing)}, unexpected={sorted(unexpected)}"
|
| 438 |
+
+ )
|
| 439 |
+
+ mapped = {}
|
| 440 |
+
+ for row in rows:
|
| 441 |
+
+ key = row["source"] if is_hf else row["destination"]
|
| 442 |
+
+ value = weights[key]
|
| 443 |
+
+ shape = row["source_shape"] if is_hf else row["destination_shape"]
|
| 444 |
+
+ if tuple(value.shape) != shape:
|
| 445 |
+
+ raise ValueError(f"Shape mismatch for {key}: {value.shape} != {shape}")
|
| 446 |
+
+ if is_hf and row["transform"] == "transpose(0,2,1)":
|
| 447 |
+
+ value = value.transpose(0, 2, 1)
|
| 448 |
+
+ elif is_hf and row["transform"] == "transpose(0,2,3,4,1)":
|
| 449 |
+
+ value = value.transpose(0, 2, 3, 4, 1)
|
| 450 |
+
+ mapped[row["destination"]] = value
|
| 451 |
+
+ return mapped
|
| 452 |
+
+
|
| 453 |
+
+ def _check_native_quantized(self, weights):
|
| 454 |
+
+ shapes = dict(self._parameter_shapes)
|
| 455 |
+
+ q = self.args.quantization
|
| 456 |
+
+ for path, module in self.named_modules():
|
| 457 |
+
+ if not hasattr(module, "to_quantized"):
|
| 458 |
+
+ continue
|
| 459 |
+
+ settings = q.get(path, q)
|
| 460 |
+
+ if settings is False:
|
| 461 |
+
+ continue
|
| 462 |
+
+ if not isinstance(settings, dict):
|
| 463 |
+
+ raise ValueError(f"Invalid native quantization metadata for {path}")
|
| 464 |
+
+ bits, group, mode = (
|
| 465 |
+
+ settings.get("bits"),
|
| 466 |
+
+ settings.get("group_size"),
|
| 467 |
+
+ settings.get("mode", "affine"),
|
| 468 |
+
+ )
|
| 469 |
+
+ if (bits, group, mode) != (4, 64, "affine"):
|
| 470 |
+
+ raise ValueError(
|
| 471 |
+
+ "This extension only prepares affine/4-bit/group-64 native checkpoints"
|
| 472 |
+
+ )
|
| 473 |
+
+ original = shapes[f"{path}.weight"]
|
| 474 |
+
+ if original[-1] % group:
|
| 475 |
+
+ continue
|
| 476 |
+
+ shapes[f"{path}.weight"] = (*original[:-1], original[-1] * bits // 32)
|
| 477 |
+
+ shapes[f"{path}.scales"] = (*original[:-1], original[-1] // group)
|
| 478 |
+
+ shapes[f"{path}.biases"] = shapes[f"{path}.scales"]
|
| 479 |
+
+ missing, unexpected = set(shapes) - set(weights), set(weights) - set(shapes)
|
| 480 |
+
+ if missing or unexpected:
|
| 481 |
+
+ raise ValueError(
|
| 482 |
+
+ f"Incomplete native checkpoint: missing={sorted(missing)}, unexpected={sorted(unexpected)}"
|
| 483 |
+
+ )
|
| 484 |
+
+ for name, shape in shapes.items():
|
| 485 |
+
+ if tuple(weights[name].shape) != shape:
|
| 486 |
+
+ raise ValueError(f"Native checkpoint shape mismatch: {name}")
|
| 487 |
+
+ return weights
|
| 488 |
+
+
|
| 489 |
+
+ @property
|
| 490 |
+
+ def cast_predicate(self):
|
| 491 |
+
+ return self.language_model.cast_predicate
|
| 492 |
+
diff --git a/mlx_lm/utils.py b/mlx_lm/utils.py
|
| 493 |
+
index a00fed8..6a751a2 100644
|
| 494 |
+
--- a/mlx_lm/utils.py
|
| 495 |
+
+++ b/mlx_lm/utils.py
|
| 496 |
+
@@ -195,6 +195,13 @@ def _transform_awq_weights(
|
| 497 |
+
return new_weights, mlx_quantization
|
| 498 |
+
|
| 499 |
+
|
| 500 |
+
+def _is_complete_qwen3_5(config: dict) -> bool:
|
| 501 |
+
+ return (
|
| 502 |
+
+ config.get("model_type") == "qwen3_5"
|
| 503 |
+
+ and config.get("language_model_only") is False
|
| 504 |
+
+ )
|
| 505 |
+
+
|
| 506 |
+
+
|
| 507 |
+
def _get_classes(config: dict):
|
| 508 |
+
"""
|
| 509 |
+
Retrieve the model and model args classes based on the configuration.
|
| 510 |
+
@@ -216,6 +223,8 @@ def _get_classes(config: dict):
|
| 511 |
+
break
|
| 512 |
+
else:
|
| 513 |
+
model_type = MODEL_REMAPPING.get(model_type, model_type)
|
| 514 |
+
+ if _is_complete_qwen3_5(config):
|
| 515 |
+
+ model_type = "qwen3_5_full"
|
| 516 |
+
try:
|
| 517 |
+
arch = importlib.import_module(f"mlx_lm.models.{model_type}")
|
| 518 |
+
except ImportError as e:
|
| 519 |
+
@@ -446,12 +455,35 @@ def load_model(
|
| 520 |
+
|
| 521 |
+
weight_files = glob.glob(str(model_path / "model*.safetensors"))
|
| 522 |
+
|
| 523 |
+
+ complete_qwen = _is_complete_qwen3_5(config)
|
| 524 |
+
+ if complete_qwen:
|
| 525 |
+
+ with open(model_path / "model.safetensors.index.json") as stream:
|
| 526 |
+
+ index = json.load(stream)
|
| 527 |
+
+ expected_files = set(index["weight_map"].values())
|
| 528 |
+
+ actual_files = {Path(file).name for file in weight_files}
|
| 529 |
+
+ if actual_files != expected_files:
|
| 530 |
+
+ raise ValueError(
|
| 531 |
+
+ "Incomplete full-model checkpoint: "
|
| 532 |
+
+ f"missing shards={sorted(expected_files - actual_files)}, "
|
| 533 |
+
+ f"unexpected shards={sorted(actual_files - expected_files)}"
|
| 534 |
+
+ )
|
| 535 |
+
+
|
| 536 |
+
if not weight_files and strict:
|
| 537 |
+
raise FileNotFoundError(f"No safetensors found in {model_path}")
|
| 538 |
+
|
| 539 |
+
weights = {}
|
| 540 |
+
for wf in weight_files:
|
| 541 |
+
- weights.update(mx.load(wf))
|
| 542 |
+
+ shard = mx.load(wf)
|
| 543 |
+
+ if complete_qwen:
|
| 544 |
+
+ duplicates = weights.keys() & shard.keys()
|
| 545 |
+
+ if duplicates:
|
| 546 |
+
+ raise ValueError(f"Duplicate checkpoint tensors: {sorted(duplicates)}")
|
| 547 |
+
+ for name in shard:
|
| 548 |
+
+ if index["weight_map"].get(name) != Path(wf).name:
|
| 549 |
+
+ raise ValueError(f"Checkpoint index mismatch: {name}")
|
| 550 |
+
+ weights.update(shard)
|
| 551 |
+
+ if complete_qwen and weights.keys() != index["weight_map"].keys():
|
| 552 |
+
+ raise ValueError("Checkpoint tensor set does not match its index")
|
| 553 |
+
|
| 554 |
+
if (model_file := config.get("model_file")) is not None:
|
| 555 |
+
if not trust_remote_code:
|
| 556 |
+
@@ -1064,9 +1096,11 @@ def save_config(
|
| 557 |
+
config (dict): The model configuration.
|
| 558 |
+
config_path (Union[str, Path]): Model configuration file path.
|
| 559 |
+
"""
|
| 560 |
+
- # Clean unused keys
|
| 561 |
+
+ config = copy.deepcopy(config)
|
| 562 |
+
+ # Complete multimodal checkpoints need the vision architecture on reload.
|
| 563 |
+
config.pop("_name_or_path", None)
|
| 564 |
+
- config.pop("vision_config", None)
|
| 565 |
+
+ if not _is_complete_qwen3_5(config):
|
| 566 |
+
+ config.pop("vision_config", None)
|
| 567 |
+
if "quantization" in config:
|
| 568 |
+
config["quantization_config"] = config["quantization"]
|
| 569 |
+
|
| 570 |
+
@@ -1099,7 +1133,8 @@ def save(
|
| 571 |
+
save_config(config, config_path=dst_path / "config.json")
|
| 572 |
+
tokenizer.save_pretrained(dst_path)
|
| 573 |
+
|
| 574 |
+
- for p in ["*.py", "generation_config.json"]:
|
| 575 |
+
+ extra_files = getattr(model, "extra_save_files", ())
|
| 576 |
+
+ for p in ["*.py", "generation_config.json", *extra_files]:
|
| 577 |
+
for file in glob.glob(str(src_path / p)):
|
| 578 |
+
shutil.copy(file, dst_path)
|
| 579 |
+
|
| 580 |
+
diff --git a/tests/test_qwen3_5_full.py b/tests/test_qwen3_5_full.py
|
| 581 |
+
new file mode 100644
|
| 582 |
+
index 0000000..2b3e5ae
|
| 583 |
+
--- /dev/null
|
| 584 |
+
+++ b/tests/test_qwen3_5_full.py
|
| 585 |
+
@@ -0,0 +1,377 @@
|
| 586 |
+
+# Copyright © 2026 Apple Inc.
|
| 587 |
+
+
|
| 588 |
+
+"""Small synthetic fixtures test architecture code, not Swift model quality."""
|
| 589 |
+
+
|
| 590 |
+
+import copy
|
| 591 |
+
+import json
|
| 592 |
+
+from pathlib import Path
|
| 593 |
+
+from unittest.mock import patch
|
| 594 |
+
+
|
| 595 |
+
+import mlx.core as mx
|
| 596 |
+
+import numpy as np
|
| 597 |
+
+import pytest
|
| 598 |
+
+import torch
|
| 599 |
+
+from mlx.utils import tree_flatten
|
| 600 |
+
+from mlx_lm.convert import convert
|
| 601 |
+
+from mlx_lm.models.qwen3_5_full import Model, ModelArgs, OffsetRMSNorm
|
| 602 |
+
+from mlx_lm.utils import _get_classes, load_model, save_config
|
| 603 |
+
+from transformers import Qwen3_5Config, Qwen3_5ForConditionalGeneration
|
| 604 |
+
+from transformers.models.qwen3_5.modeling_qwen3_5 import (
|
| 605 |
+
+ Qwen3_5DecoderLayer,
|
| 606 |
+
+ Qwen3_5RMSNorm,
|
| 607 |
+
+ Qwen3_5TextRotaryEmbedding,
|
| 608 |
+
+)
|
| 609 |
+
+
|
| 610 |
+
+
|
| 611 |
+
+def small_config():
|
| 612 |
+
+ return {
|
| 613 |
+
+ "model_type": "qwen3_5",
|
| 614 |
+
+ "architectures": ["Qwen3_5ForConditionalGeneration"],
|
| 615 |
+
+ "language_model_only": False,
|
| 616 |
+
+ "tie_word_embeddings": False,
|
| 617 |
+
+ "image_token_id": 125,
|
| 618 |
+
+ "video_token_id": 126,
|
| 619 |
+
+ "vision_start_token_id": 127,
|
| 620 |
+
+ "text_config": {
|
| 621 |
+
+ "model_type": "qwen3_5_text",
|
| 622 |
+
+ "hidden_size": 128,
|
| 623 |
+
+ "intermediate_size": 256,
|
| 624 |
+
+ "num_hidden_layers": 4,
|
| 625 |
+
+ "num_attention_heads": 4,
|
| 626 |
+
+ "num_key_value_heads": 2,
|
| 627 |
+
+ "head_dim": 32,
|
| 628 |
+
+ "vocab_size": 128,
|
| 629 |
+
+ "full_attention_interval": 4,
|
| 630 |
+
+ "layer_types": ["linear_attention"] * 3 + ["full_attention"],
|
| 631 |
+
+ "linear_num_key_heads": 2,
|
| 632 |
+
+ "linear_num_value_heads": 4,
|
| 633 |
+
+ "linear_key_head_dim": 32,
|
| 634 |
+
+ "linear_value_head_dim": 32,
|
| 635 |
+
+ "linear_conv_kernel_dim": 4,
|
| 636 |
+
+ "hidden_act": "silu",
|
| 637 |
+
+ "attn_output_gate": True,
|
| 638 |
+
+ "output_gate_type": "swish",
|
| 639 |
+
+ "mamba_ssm_dtype": "float32",
|
| 640 |
+
+ "rms_norm_eps": 1e-6,
|
| 641 |
+
+ "max_position_embeddings": 256,
|
| 642 |
+
+ "tie_word_embeddings": False,
|
| 643 |
+
+ "attention_bias": False,
|
| 644 |
+
+ "attention_dropout": 0.0,
|
| 645 |
+
+ "mtp_num_hidden_layers": 1,
|
| 646 |
+
+ "mtp_use_dedicated_embeddings": False,
|
| 647 |
+
+ "rope_parameters": {
|
| 648 |
+
+ "rope_type": "default",
|
| 649 |
+
+ "rope_theta": 10000000,
|
| 650 |
+
+ "partial_rotary_factor": 0.5,
|
| 651 |
+
+ "mrope_interleaved": True,
|
| 652 |
+
+ "mrope_section": [3, 3, 2],
|
| 653 |
+
+ },
|
| 654 |
+
+ },
|
| 655 |
+
+ "vision_config": {
|
| 656 |
+
+ "model_type": "qwen3_5",
|
| 657 |
+
+ "depth": 2,
|
| 658 |
+
+ "hidden_size": 32,
|
| 659 |
+
+ "intermediate_size": 48,
|
| 660 |
+
+ "num_heads": 4,
|
| 661 |
+
+ "out_hidden_size": 128,
|
| 662 |
+
+ "num_position_embeddings": 16,
|
| 663 |
+
+ "patch_size": 2,
|
| 664 |
+
+ "temporal_patch_size": 2,
|
| 665 |
+
+ "spatial_merge_size": 2,
|
| 666 |
+
+ "in_channels": 3,
|
| 667 |
+
+ "hidden_act": "gelu_pytorch_tanh",
|
| 668 |
+
+ "deepstack_visual_indexes": [],
|
| 669 |
+
+ },
|
| 670 |
+
+ }
|
| 671 |
+
+
|
| 672 |
+
+
|
| 673 |
+
+class ReferenceMTP(torch.nn.Module):
|
| 674 |
+
+ """Single-step composition used by the source vLLM MTP implementation."""
|
| 675 |
+
+
|
| 676 |
+
+ def __init__(self, args):
|
| 677 |
+
+ super().__init__()
|
| 678 |
+
+ h = args.hidden_size
|
| 679 |
+
+ self.fc = torch.nn.Linear(2 * h, h, bias=False)
|
| 680 |
+
+ self.pre_fc_norm_embedding = Qwen3_5RMSNorm(h, args.rms_norm_eps)
|
| 681 |
+
+ self.pre_fc_norm_hidden = Qwen3_5RMSNorm(h, args.rms_norm_eps)
|
| 682 |
+
+ self.layers = torch.nn.ModuleList([Qwen3_5DecoderLayer(args, 3)])
|
| 683 |
+
+ self.norm = Qwen3_5RMSNorm(h, args.rms_norm_eps)
|
| 684 |
+
+ self.rotary = Qwen3_5TextRotaryEmbedding(args)
|
| 685 |
+
+
|
| 686 |
+
+ def forward(self, hidden, embeds):
|
| 687 |
+
+ x = self.fc(
|
| 688 |
+
+ torch.cat(
|
| 689 |
+
+ [self.pre_fc_norm_embedding(embeds), self.pre_fc_norm_hidden(hidden)],
|
| 690 |
+
+ dim=-1,
|
| 691 |
+
+ )
|
| 692 |
+
+ )
|
| 693 |
+
+ positions = torch.arange(x.shape[1])[None, None].expand(3, x.shape[0], -1)
|
| 694 |
+
+ rotary = self.rotary(x, positions)
|
| 695 |
+
+ mask = torch.triu(
|
| 696 |
+
+ torch.full((x.shape[0], 1, x.shape[1], x.shape[1]), float("-inf")),
|
| 697 |
+
+ diagonal=1,
|
| 698 |
+
+ )
|
| 699 |
+
+ return self.norm(
|
| 700 |
+
+ self.layers[0](x, position_embeddings=rotary, attention_mask=mask)
|
| 701 |
+
+ )
|
| 702 |
+
+
|
| 703 |
+
+
|
| 704 |
+
+@pytest.fixture(scope="module")
|
| 705 |
+
+def reference():
|
| 706 |
+
+ torch.set_num_threads(2)
|
| 707 |
+
+ torch.manual_seed(71)
|
| 708 |
+
+ config = small_config()
|
| 709 |
+
+ hf_config = Qwen3_5Config(**copy.deepcopy(config))
|
| 710 |
+
+ hf_config._attn_implementation = "eager"
|
| 711 |
+
+ hf_config.text_config._attn_implementation = "eager"
|
| 712 |
+
+ hf_config.vision_config._attn_implementation = "eager"
|
| 713 |
+
+ hf = Qwen3_5ForConditionalGeneration(hf_config).eval()
|
| 714 |
+
+ mtp = ReferenceMTP(hf_config.text_config).eval()
|
| 715 |
+
+ with torch.no_grad():
|
| 716 |
+
+ for module in (hf, mtp):
|
| 717 |
+
+ for name, value in module.named_parameters():
|
| 718 |
+
+ if "norm" in name and value.ndim == 1 and "model.visual" not in name:
|
| 719 |
+
+ value.uniform_(-0.15, 0.15)
|
| 720 |
+
+ state = {k: mx.array(v.detach().numpy()) for k, v in hf.state_dict().items()}
|
| 721 |
+
+ state.update(
|
| 722 |
+
+ {"mtp." + k: mx.array(v.detach().numpy()) for k, v in mtp.state_dict().items()}
|
| 723 |
+
+ )
|
| 724 |
+
+ model = Model(ModelArgs.from_dict(config))
|
| 725 |
+
+ model.load_weights(list(model.sanitize(state).items()), strict=True)
|
| 726 |
+
+ model.eval()
|
| 727 |
+
+ return config, hf, mtp, state, model
|
| 728 |
+
+
|
| 729 |
+
+
|
| 730 |
+
+def assert_close(mlx_value, torch_value, atol=3e-5, rtol=3e-5):
|
| 731 |
+
+ np.testing.assert_allclose(
|
| 732 |
+
+ np.array(mlx_value), torch_value.detach().numpy(), atol=atol, rtol=rtol
|
| 733 |
+
+ )
|
| 734 |
+
+
|
| 735 |
+
+
|
| 736 |
+
+def test_dispatch_and_mapping_preserve_every_component(reference):
|
| 737 |
+
+ config, _, _, state, model = reference
|
| 738 |
+
+ before = copy.deepcopy(config)
|
| 739 |
+
+ cls, args = _get_classes(config)
|
| 740 |
+
+ fresh = cls(args.from_dict(config))
|
| 741 |
+
+ assert cls is Model
|
| 742 |
+
+ assert config == before
|
| 743 |
+
+ rows = fresh.weight_mapping()
|
| 744 |
+
+ assert {r["source"] for r in rows} == set(state)
|
| 745 |
+
+ assert len(rows) == len(dict(tree_flatten(model.parameters())))
|
| 746 |
+
+ assert sum(r["category"] == "MTP" for r in rows) == 15
|
| 747 |
+
+ assert sum(r["category"] == "vision" for r in rows) == 33
|
| 748 |
+
+ assert model.language_model.lm_head is not model.model.embed_tokens
|
| 749 |
+
+ assert not any("mtp.embed" in r["destination"] for r in rows)
|
| 750 |
+
+
|
| 751 |
+
+
|
| 752 |
+
+@pytest.mark.parametrize("prefix", ["model.language_model.", "model.visual.", "mtp."])
|
| 753 |
+
+def test_missing_critical_tensor_is_rejected(reference, prefix):
|
| 754 |
+
+ _, _, _, state, model = reference
|
| 755 |
+
+ missing = dict(state)
|
| 756 |
+
+ missing.pop(next(k for k in state if k.startswith(prefix)))
|
| 757 |
+
+ with pytest.raises(ValueError, match="missing="):
|
| 758 |
+
+ model.sanitize(missing)
|
| 759 |
+
+
|
| 760 |
+
+
|
| 761 |
+
+def test_unexpected_and_misshaped_tensors_are_rejected(reference):
|
| 762 |
+
+ _, _, _, state, model = reference
|
| 763 |
+
+ with pytest.raises(ValueError, match="unexpected="):
|
| 764 |
+
+ model.sanitize(dict(state, **{"mtp.unknown.weight": mx.zeros((1,))}))
|
| 765 |
+
+ wrong = dict(state)
|
| 766 |
+
+ wrong["mtp.fc.weight"] = mx.zeros((1,))
|
| 767 |
+
+ with pytest.raises(ValueError, match="Shape mismatch"):
|
| 768 |
+
+ model.sanitize(wrong)
|
| 769 |
+
+
|
| 770 |
+
+
|
| 771 |
+
+def test_native_mapping_is_idempotent_and_norm_values_are_exact(reference):
|
| 772 |
+
+ _, _, _, state, model = reference
|
| 773 |
+
+ once = model.sanitize(state)
|
| 774 |
+
+ twice = model.sanitize(once)
|
| 775 |
+
+ for key in once:
|
| 776 |
+
+ np.testing.assert_array_equal(np.array(once[key]), np.array(twice[key]))
|
| 777 |
+
+ for row in model.weight_mapping():
|
| 778 |
+
+ if "norm" in row["source"]:
|
| 779 |
+
+ np.testing.assert_array_equal(
|
| 780 |
+
+ np.array(state[row["source"]]), np.array(once[row["destination"]])
|
| 781 |
+
+ )
|
| 782 |
+
+
|
| 783 |
+
+
|
| 784 |
+
+def test_offset_norm_preserves_small_bf16_deltas():
|
| 785 |
+
+ layer = OffsetRMSNorm(4)
|
| 786 |
+
+ raw = mx.array([0.0001, -0.0002, 0.0003, -0.0004], dtype=mx.bfloat16)
|
| 787 |
+
+ layer.weight = raw
|
| 788 |
+
+ x = mx.array([[0.8, -1.2, 0.4, 2.0]], dtype=mx.bfloat16)
|
| 789 |
+
+ torch_layer = Qwen3_5RMSNorm(4)
|
| 790 |
+
+ torch_layer.weight.data.copy_(torch.tensor(np.array(raw.astype(mx.float32))))
|
| 791 |
+
+ expected = torch_layer(
|
| 792 |
+
+ torch.tensor(np.array(x.astype(mx.float32))).to(torch.bfloat16)
|
| 793 |
+
+ ).float()
|
| 794 |
+
+ assert_close(layer(x).astype(mx.float32), expected, atol=0, rtol=0)
|
| 795 |
+
+ np.testing.assert_array_equal(
|
| 796 |
+
+ np.array(layer.weight.astype(mx.float32)), np.array(raw.astype(mx.float32))
|
| 797 |
+
+ )
|
| 798 |
+
+
|
| 799 |
+
+
|
| 800 |
+
+def test_text_forward_matches_transformers(reference):
|
| 801 |
+
+ _, hf, _, _, model = reference
|
| 802 |
+
+ ids = torch.tensor([[3, 19, 8, 21, 11]])
|
| 803 |
+
+ with torch.no_grad():
|
| 804 |
+
+ expected = hf(input_ids=ids, use_cache=False).logits
|
| 805 |
+
+ actual = model(mx.array(ids.numpy()))
|
| 806 |
+
+ assert_close(actual, expected)
|
| 807 |
+
+
|
| 808 |
+
+
|
| 809 |
+
+def test_text_decode_cache_matches_full_forward(reference):
|
| 810 |
+
+ _, _, _, _, model = reference
|
| 811 |
+
+ ids = mx.array([[3, 19, 8, 21, 11]])
|
| 812 |
+
+ full = model(ids)
|
| 813 |
+
+ cache = model.make_cache()
|
| 814 |
+
+ parts = [model(ids[:, :3], cache)]
|
| 815 |
+
+ parts.extend(model(ids[:, i : i + 1], cache) for i in range(3, 5))
|
| 816 |
+
+ np.testing.assert_allclose(
|
| 817 |
+
+ np.array(mx.concatenate(parts, axis=1)), np.array(full), atol=3e-5, rtol=3e-5
|
| 818 |
+
+ )
|
| 819 |
+
+
|
| 820 |
+
+
|
| 821 |
+
+@pytest.mark.parametrize("grid", [[[1, 4, 4]], [[2, 2, 4], [1, 4, 2]], [[1, 6, 4]]])
|
| 822 |
+
+def test_vision_encoder_matches_transformers(reference, grid):
|
| 823 |
+
+ _, hf, _, _, model = reference
|
| 824 |
+
+ torch.manual_seed(11)
|
| 825 |
+
+ count = sum(t * h * w for t, h, w in grid)
|
| 826 |
+
+ pixels = torch.randn(count, 3 * 2 * 2 * 2)
|
| 827 |
+
+ with torch.no_grad():
|
| 828 |
+
+ expected = hf.model.visual(pixels, torch.tensor(grid))
|
| 829 |
+
+ hidden, pooled = model.visual(
|
| 830 |
+
+ mx.array(pixels.numpy()), grid, return_hidden_states=True
|
| 831 |
+
+ )
|
| 832 |
+
+ assert_close(hidden, expected.last_hidden_state)
|
| 833 |
+
+ assert_close(pooled, expected.pooler_output)
|
| 834 |
+
+
|
| 835 |
+
+
|
| 836 |
+
+def test_mtp_forward_and_shared_head_match_reference(reference):
|
| 837 |
+
+ _, hf, mtp, _, model = reference
|
| 838 |
+
+ torch.manual_seed(9)
|
| 839 |
+
+ hidden = torch.randn(1, 4, 128)
|
| 840 |
+
+ ids = torch.tensor([[9, 8, 7, 6]])
|
| 841 |
+
+ with torch.no_grad():
|
| 842 |
+
+ embeds = hf.model.language_model.embed_tokens(ids)
|
| 843 |
+
+ expected = mtp(hidden, embeds)
|
| 844 |
+
+ expected_logits = hf.lm_head(expected)
|
| 845 |
+
+ assert_close(
|
| 846 |
+
+ model.mtp(mx.array(hidden.numpy()), mx.array(embeds.numpy())), expected
|
| 847 |
+
+ )
|
| 848 |
+
+ assert_close(
|
| 849 |
+
+ model.mtp_logits(mx.array(ids.numpy()), mx.array(hidden.numpy())),
|
| 850 |
+
+ expected_logits,
|
| 851 |
+
+ )
|
| 852 |
+
+ cache = model.mtp.make_cache()
|
| 853 |
+
+ cached = mx.concatenate(
|
| 854 |
+
+ [
|
| 855 |
+
+ model.mtp(
|
| 856 |
+
+ mx.array(hidden[:, i : i + 1].numpy()),
|
| 857 |
+
+ mx.array(embeds[:, i : i + 1].numpy()),
|
| 858 |
+
+ cache,
|
| 859 |
+
+ )
|
| 860 |
+
+ for i in range(4)
|
| 861 |
+
+ ],
|
| 862 |
+
+ axis=1,
|
| 863 |
+
+ )
|
| 864 |
+
+ assert_close(cached, expected)
|
| 865 |
+
+
|
| 866 |
+
+
|
| 867 |
+
+def test_unsupported_multimodal_generation_fails_explicitly(reference):
|
| 868 |
+
+ _, _, _, _, model = reference
|
| 869 |
+
+ with pytest.raises(NotImplementedError, match="Multimodal"):
|
| 870 |
+
+ model(mx.array([[1, 2]]), pixel_values=mx.zeros((1, 24)))
|
| 871 |
+
+ with pytest.raises(NotImplementedError, match="Multimodal"):
|
| 872 |
+
+ model(mx.array([[1, 125]]))
|
| 873 |
+
+
|
| 874 |
+
+
|
| 875 |
+
+def test_save_config_keeps_vision_and_does_not_mutate_input(tmp_path):
|
| 876 |
+
+ config = small_config()
|
| 877 |
+
+ before = copy.deepcopy(config)
|
| 878 |
+
+ save_config(config, tmp_path / "config.json")
|
| 879 |
+
+ assert config == before
|
| 880 |
+
+ assert json.loads((tmp_path / "config.json").read_text()) == before
|
| 881 |
+
+
|
| 882 |
+
+
|
| 883 |
+
+def test_official_nonquantized_convert_and_reload_preserve_all_tensors(
|
| 884 |
+
+ reference, tmp_path
|
| 885 |
+
+):
|
| 886 |
+
+ config, _, _, state, model = reference
|
| 887 |
+
+ source, output = tmp_path / "hf", tmp_path / "mlx"
|
| 888 |
+
+ source.mkdir()
|
| 889 |
+
+ (source / "config.json").write_text(json.dumps(config))
|
| 890 |
+
+ mx.save_safetensors(str(source / "model.safetensors"), state)
|
| 891 |
+
+ (source / "model.safetensors.index.json").write_text(
|
| 892 |
+
+ json.dumps({"weight_map": {k: "model.safetensors" for k in state}})
|
| 893 |
+
+ )
|
| 894 |
+
+ assets = ["generation_config.json", *model.extra_save_files]
|
| 895 |
+
+ for name in assets:
|
| 896 |
+
+ (source / name).write_text("original synthetic asset: " + name)
|
| 897 |
+
+ (source / "generation_config.json").write_text('{"eos_token_id": 2}')
|
| 898 |
+
+
|
| 899 |
+
+ class FixtureTokenizer:
|
| 900 |
+
+ def save_pretrained(self, target):
|
| 901 |
+
+ Path(target, "tokenizer_config.json").write_text("rewritten")
|
| 902 |
+
+
|
| 903 |
+
+ def fixture_load(path, **kwargs):
|
| 904 |
+
+ loaded, loaded_config = load_model(Path(path), lazy=True, strict=True)
|
| 905 |
+
+ return loaded, FixtureTokenizer(), loaded_config
|
| 906 |
+
+
|
| 907 |
+
+ with patch("mlx_lm.convert.load", side_effect=fixture_load):
|
| 908 |
+
+ convert(str(source), str(output), quantize=False)
|
| 909 |
+
+ loaded, saved_config = load_model(output, lazy=False, strict=True)
|
| 910 |
+
+ expected = model.sanitize(state)
|
| 911 |
+
+ actual = dict(tree_flatten(loaded.parameters()))
|
| 912 |
+
+ assert set(actual) == set(expected)
|
| 913 |
+
+ for name in actual:
|
| 914 |
+
+ np.testing.assert_array_equal(np.array(actual[name]), np.array(expected[name]))
|
| 915 |
+
+ assert saved_config["vision_config"] == config["vision_config"]
|
| 916 |
+
+ assert saved_config["text_config"] == config["text_config"]
|
| 917 |
+
+ assert "quantization" not in saved_config
|
| 918 |
+
+ for name in assets:
|
| 919 |
+
+ assert (source / name).read_bytes() == (output / name).read_bytes()
|
| 920 |
+
+ ids = mx.array([[3, 19, 8]])
|
| 921 |
+
+ np.testing.assert_array_equal(np.array(model(ids)), np.array(loaded(ids)))
|
| 922 |
+
+ (output / "model.safetensors.index.json").write_text(
|
| 923 |
+
+ json.dumps(
|
| 924 |
+
+ {
|
| 925 |
+
+ "weight_map": {
|
| 926 |
+
+ **{k: "model.safetensors" for k in actual},
|
| 927 |
+
+ "mtp.missing.weight": "missing.safetensors",
|
| 928 |
+
+ }
|
| 929 |
+
+ }
|
| 930 |
+
+ )
|
| 931 |
+
+ )
|
| 932 |
+
+ with pytest.raises(ValueError, match="missing shards"):
|
| 933 |
+
+ load_model(output, lazy=True)
|
| 934 |
+
+
|
| 935 |
+
+
|
| 936 |
+
+def test_fixed_affine_quantized_roundtrip_preserves_component_tree(reference, tmp_path):
|
| 937 |
+
+ from mlx_lm.utils import quantize_model, save_model
|
| 938 |
+
+
|
| 939 |
+
+ config, _, _, state, _ = reference
|
| 940 |
+
+ model = Model(ModelArgs.from_dict(config))
|
| 941 |
+
+ model.load_weights(list(model.sanitize(state).items()), strict=True)
|
| 942 |
+
+ original_names = set(dict(tree_flatten(model.parameters())))
|
| 943 |
+
+ model, quantized_config = quantize_model(model, config, 64, 4, mode="affine")
|
| 944 |
+
+ save_model(tmp_path, model)
|
| 945 |
+
+ save_config(quantized_config, tmp_path / "config.json")
|
| 946 |
+
+ loaded, saved_config = load_model(tmp_path, lazy=False, strict=True)
|
| 947 |
+
+ actual = dict(tree_flatten(loaded.parameters()))
|
| 948 |
+
+ expected = dict(tree_flatten(model.parameters()))
|
| 949 |
+
+ assert set(actual) == set(expected)
|
| 950 |
+
+ assert original_names <= set(actual)
|
| 951 |
+
+ assert saved_config["quantization"] == {
|
| 952 |
+
+ "bits": 4,
|
| 953 |
+
+ "group_size": 64,
|
| 954 |
+
+ "mode": "affine",
|
| 955 |
+
+ }
|
| 956 |
+
+ for name in actual:
|
| 957 |
+
+ np.testing.assert_array_equal(np.array(actual[name]), np.array(expected[name]))
|
| 958 |
+
+ assert bool(mx.all(mx.isfinite(loaded(mx.array([[3, 19, 8]])))))
|
| 959 |
+
+ missing = dict(actual)
|
| 960 |
+
+ missing.pop("mtp.fc.scales")
|
| 961 |
+
+ with pytest.raises(ValueError, match="Incomplete native checkpoint"):
|
| 962 |
+
+ loaded.sanitize(missing)
|
config.json
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"architectures": [
|
| 3 |
+
"Qwen3_5ForConditionalGeneration"
|
| 4 |
+
],
|
| 5 |
+
"eos_token_id": [
|
| 6 |
+
248046,
|
| 7 |
+
248044
|
| 8 |
+
],
|
| 9 |
+
"image_token_id": 248056,
|
| 10 |
+
"language_model_only": false,
|
| 11 |
+
"model_type": "qwen3_5",
|
| 12 |
+
"quantization": {
|
| 13 |
+
"group_size": 64,
|
| 14 |
+
"bits": 5,
|
| 15 |
+
"mode": "affine"
|
| 16 |
+
},
|
| 17 |
+
"quantization_config": {
|
| 18 |
+
"group_size": 64,
|
| 19 |
+
"bits": 5,
|
| 20 |
+
"mode": "affine"
|
| 21 |
+
},
|
| 22 |
+
"text_config": {
|
| 23 |
+
"attention_bias": false,
|
| 24 |
+
"attention_dropout": 0.0,
|
| 25 |
+
"attn_output_gate": true,
|
| 26 |
+
"bos_token_id": 248044,
|
| 27 |
+
"dtype": "bfloat16",
|
| 28 |
+
"eos_token_id": 248044,
|
| 29 |
+
"full_attention_interval": 4,
|
| 30 |
+
"head_dim": 256,
|
| 31 |
+
"hidden_act": "silu",
|
| 32 |
+
"hidden_size": 5120,
|
| 33 |
+
"initializer_range": 0.02,
|
| 34 |
+
"intermediate_size": 17408,
|
| 35 |
+
"layer_types": [
|
| 36 |
+
"linear_attention",
|
| 37 |
+
"linear_attention",
|
| 38 |
+
"linear_attention",
|
| 39 |
+
"full_attention",
|
| 40 |
+
"linear_attention",
|
| 41 |
+
"linear_attention",
|
| 42 |
+
"linear_attention",
|
| 43 |
+
"full_attention",
|
| 44 |
+
"linear_attention",
|
| 45 |
+
"linear_attention",
|
| 46 |
+
"linear_attention",
|
| 47 |
+
"full_attention",
|
| 48 |
+
"linear_attention",
|
| 49 |
+
"linear_attention",
|
| 50 |
+
"linear_attention",
|
| 51 |
+
"full_attention",
|
| 52 |
+
"linear_attention",
|
| 53 |
+
"linear_attention",
|
| 54 |
+
"linear_attention",
|
| 55 |
+
"full_attention",
|
| 56 |
+
"linear_attention",
|
| 57 |
+
"linear_attention",
|
| 58 |
+
"linear_attention",
|
| 59 |
+
"full_attention",
|
| 60 |
+
"linear_attention",
|
| 61 |
+
"linear_attention",
|
| 62 |
+
"linear_attention",
|
| 63 |
+
"full_attention",
|
| 64 |
+
"linear_attention",
|
| 65 |
+
"linear_attention",
|
| 66 |
+
"linear_attention",
|
| 67 |
+
"full_attention",
|
| 68 |
+
"linear_attention",
|
| 69 |
+
"linear_attention",
|
| 70 |
+
"linear_attention",
|
| 71 |
+
"full_attention",
|
| 72 |
+
"linear_attention",
|
| 73 |
+
"linear_attention",
|
| 74 |
+
"linear_attention",
|
| 75 |
+
"full_attention",
|
| 76 |
+
"linear_attention",
|
| 77 |
+
"linear_attention",
|
| 78 |
+
"linear_attention",
|
| 79 |
+
"full_attention",
|
| 80 |
+
"linear_attention",
|
| 81 |
+
"linear_attention",
|
| 82 |
+
"linear_attention",
|
| 83 |
+
"full_attention",
|
| 84 |
+
"linear_attention",
|
| 85 |
+
"linear_attention",
|
| 86 |
+
"linear_attention",
|
| 87 |
+
"full_attention",
|
| 88 |
+
"linear_attention",
|
| 89 |
+
"linear_attention",
|
| 90 |
+
"linear_attention",
|
| 91 |
+
"full_attention",
|
| 92 |
+
"linear_attention",
|
| 93 |
+
"linear_attention",
|
| 94 |
+
"linear_attention",
|
| 95 |
+
"full_attention",
|
| 96 |
+
"linear_attention",
|
| 97 |
+
"linear_attention",
|
| 98 |
+
"linear_attention",
|
| 99 |
+
"full_attention"
|
| 100 |
+
],
|
| 101 |
+
"linear_conv_kernel_dim": 4,
|
| 102 |
+
"linear_key_head_dim": 128,
|
| 103 |
+
"linear_num_key_heads": 16,
|
| 104 |
+
"linear_num_value_heads": 48,
|
| 105 |
+
"linear_value_head_dim": 128,
|
| 106 |
+
"mamba_ssm_dtype": "float32",
|
| 107 |
+
"max_position_embeddings": 262144,
|
| 108 |
+
"model_type": "qwen3_5_text",
|
| 109 |
+
"mtp_num_hidden_layers": 1,
|
| 110 |
+
"mtp_use_dedicated_embeddings": false,
|
| 111 |
+
"num_attention_heads": 24,
|
| 112 |
+
"num_hidden_layers": 64,
|
| 113 |
+
"num_key_value_heads": 4,
|
| 114 |
+
"output_gate_type": "swish",
|
| 115 |
+
"pad_token_id": null,
|
| 116 |
+
"partial_rotary_factor": 0.25,
|
| 117 |
+
"rms_norm_eps": 1e-06,
|
| 118 |
+
"rope_parameters": {
|
| 119 |
+
"mrope_interleaved": true,
|
| 120 |
+
"mrope_section": [
|
| 121 |
+
11,
|
| 122 |
+
11,
|
| 123 |
+
10
|
| 124 |
+
],
|
| 125 |
+
"partial_rotary_factor": 0.25,
|
| 126 |
+
"rope_theta": 10000000,
|
| 127 |
+
"rope_type": "default"
|
| 128 |
+
},
|
| 129 |
+
"tie_word_embeddings": false,
|
| 130 |
+
"use_cache": true,
|
| 131 |
+
"vocab_size": 248320
|
| 132 |
+
},
|
| 133 |
+
"tie_word_embeddings": false,
|
| 134 |
+
"transformers_version": "5.8.0.dev0",
|
| 135 |
+
"video_token_id": 248057,
|
| 136 |
+
"vision_config": {
|
| 137 |
+
"deepstack_visual_indexes": [],
|
| 138 |
+
"depth": 27,
|
| 139 |
+
"hidden_act": "gelu_pytorch_tanh",
|
| 140 |
+
"hidden_size": 1152,
|
| 141 |
+
"in_channels": 3,
|
| 142 |
+
"initializer_range": 0.02,
|
| 143 |
+
"intermediate_size": 4304,
|
| 144 |
+
"model_type": "qwen3_5",
|
| 145 |
+
"num_heads": 16,
|
| 146 |
+
"num_position_embeddings": 2304,
|
| 147 |
+
"out_hidden_size": 5120,
|
| 148 |
+
"patch_size": 16,
|
| 149 |
+
"spatial_merge_size": 2,
|
| 150 |
+
"temporal_patch_size": 2
|
| 151 |
+
},
|
| 152 |
+
"vision_end_token_id": 248054,
|
| 153 |
+
"vision_start_token_id": 248053
|
| 154 |
+
}
|
generation_config.json
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"bos_token_id": 248044,
|
| 3 |
+
"do_sample": true,
|
| 4 |
+
"eos_token_id": [
|
| 5 |
+
248046,
|
| 6 |
+
248044
|
| 7 |
+
],
|
| 8 |
+
"pad_token_id": 248044,
|
| 9 |
+
"temperature": 1.0,
|
| 10 |
+
"top_k": 20,
|
| 11 |
+
"top_p": 0.95
|
| 12 |
+
}
|
merges.txt
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
model-00001-of-00004.safetensors
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:9da8750595ec42d8c5d2ff0ae0b695e387cbcb3c0beac40f262e6d9a7196b59d
|
| 3 |
+
size 5360417859
|
model-00002-of-00004.safetensors
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:b592723bd4e9f01344335cd7d4b4f41a7c8cde98e2e074ad1d943cdb951a6835
|
| 3 |
+
size 5338181777
|
model-00003-of-00004.safetensors
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:0027e7fe05310d5b2d960414221ed0872de9b511aa7e6b1c3a8f0e4647558412
|
| 3 |
+
size 5355925620
|
model-00004-of-00004.safetensors
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:afec577f16805b327471561d6841662eb4acf7d866ad5e761c5ef8cd3149d8f4
|
| 3 |
+
size 3227578201
|
model.safetensors.index.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
preprocessor_config.json
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"size": {
|
| 3 |
+
"longest_edge": 16777216,
|
| 4 |
+
"shortest_edge": 65536
|
| 5 |
+
},
|
| 6 |
+
"patch_size": 16,
|
| 7 |
+
"temporal_patch_size": 2,
|
| 8 |
+
"merge_size": 2,
|
| 9 |
+
"image_mean": [
|
| 10 |
+
0.5,
|
| 11 |
+
0.5,
|
| 12 |
+
0.5
|
| 13 |
+
],
|
| 14 |
+
"image_std": [
|
| 15 |
+
0.5,
|
| 16 |
+
0.5,
|
| 17 |
+
0.5
|
| 18 |
+
],
|
| 19 |
+
"processor_class": "Qwen3VLProcessor",
|
| 20 |
+
"image_processor_type": "Qwen2VLImageProcessorFast"
|
| 21 |
+
}
|
swift-1.5-planet-demo.mp4
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:1cda6924169e8b83e5d6d7299baf8329ed1b1a182a481aa0e06344e0f5c00111
|
| 3 |
+
size 4738825
|
tokenizer.json
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:0997f410c57a1f4e53b09e4be8f4a172d90edd9564368fb0847030937229b9f3
|
| 3 |
+
size 12809320
|
tokenizer_config.json
ADDED
|
@@ -0,0 +1,305 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"add_prefix_space": false,
|
| 3 |
+
"added_tokens_decoder": {
|
| 4 |
+
"248044": {
|
| 5 |
+
"content": "<|endoftext|>",
|
| 6 |
+
"lstrip": false,
|
| 7 |
+
"normalized": false,
|
| 8 |
+
"rstrip": false,
|
| 9 |
+
"single_word": false,
|
| 10 |
+
"special": true
|
| 11 |
+
},
|
| 12 |
+
"248045": {
|
| 13 |
+
"content": "<|im_start|>",
|
| 14 |
+
"lstrip": false,
|
| 15 |
+
"normalized": false,
|
| 16 |
+
"rstrip": false,
|
| 17 |
+
"single_word": false,
|
| 18 |
+
"special": true
|
| 19 |
+
},
|
| 20 |
+
"248046": {
|
| 21 |
+
"content": "<|im_end|>",
|
| 22 |
+
"lstrip": false,
|
| 23 |
+
"normalized": false,
|
| 24 |
+
"rstrip": false,
|
| 25 |
+
"single_word": false,
|
| 26 |
+
"special": true
|
| 27 |
+
},
|
| 28 |
+
"248047": {
|
| 29 |
+
"content": "<|object_ref_start|>",
|
| 30 |
+
"lstrip": false,
|
| 31 |
+
"normalized": false,
|
| 32 |
+
"rstrip": false,
|
| 33 |
+
"single_word": false,
|
| 34 |
+
"special": true
|
| 35 |
+
},
|
| 36 |
+
"248048": {
|
| 37 |
+
"content": "<|object_ref_end|>",
|
| 38 |
+
"lstrip": false,
|
| 39 |
+
"normalized": false,
|
| 40 |
+
"rstrip": false,
|
| 41 |
+
"single_word": false,
|
| 42 |
+
"special": true
|
| 43 |
+
},
|
| 44 |
+
"248049": {
|
| 45 |
+
"content": "<|box_start|>",
|
| 46 |
+
"lstrip": false,
|
| 47 |
+
"normalized": false,
|
| 48 |
+
"rstrip": false,
|
| 49 |
+
"single_word": false,
|
| 50 |
+
"special": true
|
| 51 |
+
},
|
| 52 |
+
"248050": {
|
| 53 |
+
"content": "<|box_end|>",
|
| 54 |
+
"lstrip": false,
|
| 55 |
+
"normalized": false,
|
| 56 |
+
"rstrip": false,
|
| 57 |
+
"single_word": false,
|
| 58 |
+
"special": true
|
| 59 |
+
},
|
| 60 |
+
"248051": {
|
| 61 |
+
"content": "<|quad_start|>",
|
| 62 |
+
"lstrip": false,
|
| 63 |
+
"normalized": false,
|
| 64 |
+
"rstrip": false,
|
| 65 |
+
"single_word": false,
|
| 66 |
+
"special": true
|
| 67 |
+
},
|
| 68 |
+
"248052": {
|
| 69 |
+
"content": "<|quad_end|>",
|
| 70 |
+
"lstrip": false,
|
| 71 |
+
"normalized": false,
|
| 72 |
+
"rstrip": false,
|
| 73 |
+
"single_word": false,
|
| 74 |
+
"special": true
|
| 75 |
+
},
|
| 76 |
+
"248053": {
|
| 77 |
+
"content": "<|vision_start|>",
|
| 78 |
+
"lstrip": false,
|
| 79 |
+
"normalized": false,
|
| 80 |
+
"rstrip": false,
|
| 81 |
+
"single_word": false,
|
| 82 |
+
"special": true
|
| 83 |
+
},
|
| 84 |
+
"248054": {
|
| 85 |
+
"content": "<|vision_end|>",
|
| 86 |
+
"lstrip": false,
|
| 87 |
+
"normalized": false,
|
| 88 |
+
"rstrip": false,
|
| 89 |
+
"single_word": false,
|
| 90 |
+
"special": true
|
| 91 |
+
},
|
| 92 |
+
"248055": {
|
| 93 |
+
"content": "<|vision_pad|>",
|
| 94 |
+
"lstrip": false,
|
| 95 |
+
"normalized": false,
|
| 96 |
+
"rstrip": false,
|
| 97 |
+
"single_word": false,
|
| 98 |
+
"special": true
|
| 99 |
+
},
|
| 100 |
+
"248056": {
|
| 101 |
+
"content": "<|image_pad|>",
|
| 102 |
+
"lstrip": false,
|
| 103 |
+
"normalized": false,
|
| 104 |
+
"rstrip": false,
|
| 105 |
+
"single_word": false,
|
| 106 |
+
"special": true
|
| 107 |
+
},
|
| 108 |
+
"248057": {
|
| 109 |
+
"content": "<|video_pad|>",
|
| 110 |
+
"lstrip": false,
|
| 111 |
+
"normalized": false,
|
| 112 |
+
"rstrip": false,
|
| 113 |
+
"single_word": false,
|
| 114 |
+
"special": true
|
| 115 |
+
},
|
| 116 |
+
"248058": {
|
| 117 |
+
"content": "<tool_call>",
|
| 118 |
+
"lstrip": false,
|
| 119 |
+
"normalized": false,
|
| 120 |
+
"rstrip": false,
|
| 121 |
+
"single_word": false,
|
| 122 |
+
"special": false
|
| 123 |
+
},
|
| 124 |
+
"248059": {
|
| 125 |
+
"content": "</tool_call>",
|
| 126 |
+
"lstrip": false,
|
| 127 |
+
"normalized": false,
|
| 128 |
+
"rstrip": false,
|
| 129 |
+
"single_word": false,
|
| 130 |
+
"special": false
|
| 131 |
+
},
|
| 132 |
+
"248060": {
|
| 133 |
+
"content": "<|fim_prefix|>",
|
| 134 |
+
"lstrip": false,
|
| 135 |
+
"normalized": false,
|
| 136 |
+
"rstrip": false,
|
| 137 |
+
"single_word": false,
|
| 138 |
+
"special": false
|
| 139 |
+
},
|
| 140 |
+
"248061": {
|
| 141 |
+
"content": "<|fim_middle|>",
|
| 142 |
+
"lstrip": false,
|
| 143 |
+
"normalized": false,
|
| 144 |
+
"rstrip": false,
|
| 145 |
+
"single_word": false,
|
| 146 |
+
"special": false
|
| 147 |
+
},
|
| 148 |
+
"248062": {
|
| 149 |
+
"content": "<|fim_suffix|>",
|
| 150 |
+
"lstrip": false,
|
| 151 |
+
"normalized": false,
|
| 152 |
+
"rstrip": false,
|
| 153 |
+
"single_word": false,
|
| 154 |
+
"special": false
|
| 155 |
+
},
|
| 156 |
+
"248063": {
|
| 157 |
+
"content": "<|fim_pad|>",
|
| 158 |
+
"lstrip": false,
|
| 159 |
+
"normalized": false,
|
| 160 |
+
"rstrip": false,
|
| 161 |
+
"single_word": false,
|
| 162 |
+
"special": false
|
| 163 |
+
},
|
| 164 |
+
"248064": {
|
| 165 |
+
"content": "<|repo_name|>",
|
| 166 |
+
"lstrip": false,
|
| 167 |
+
"normalized": false,
|
| 168 |
+
"rstrip": false,
|
| 169 |
+
"single_word": false,
|
| 170 |
+
"special": false
|
| 171 |
+
},
|
| 172 |
+
"248065": {
|
| 173 |
+
"content": "<|file_sep|>",
|
| 174 |
+
"lstrip": false,
|
| 175 |
+
"normalized": false,
|
| 176 |
+
"rstrip": false,
|
| 177 |
+
"single_word": false,
|
| 178 |
+
"special": false
|
| 179 |
+
},
|
| 180 |
+
"248066": {
|
| 181 |
+
"content": "<tool_response>",
|
| 182 |
+
"lstrip": false,
|
| 183 |
+
"normalized": false,
|
| 184 |
+
"rstrip": false,
|
| 185 |
+
"single_word": false,
|
| 186 |
+
"special": false
|
| 187 |
+
},
|
| 188 |
+
"248067": {
|
| 189 |
+
"content": "</tool_response>",
|
| 190 |
+
"lstrip": false,
|
| 191 |
+
"normalized": false,
|
| 192 |
+
"rstrip": false,
|
| 193 |
+
"single_word": false,
|
| 194 |
+
"special": false
|
| 195 |
+
},
|
| 196 |
+
"248068": {
|
| 197 |
+
"content": "<think>",
|
| 198 |
+
"lstrip": false,
|
| 199 |
+
"normalized": false,
|
| 200 |
+
"rstrip": false,
|
| 201 |
+
"single_word": false,
|
| 202 |
+
"special": false
|
| 203 |
+
},
|
| 204 |
+
"248069": {
|
| 205 |
+
"content": "</think>",
|
| 206 |
+
"lstrip": false,
|
| 207 |
+
"normalized": false,
|
| 208 |
+
"rstrip": false,
|
| 209 |
+
"single_word": false,
|
| 210 |
+
"special": false
|
| 211 |
+
},
|
| 212 |
+
"248070": {
|
| 213 |
+
"content": "<|audio_start|>",
|
| 214 |
+
"lstrip": false,
|
| 215 |
+
"normalized": false,
|
| 216 |
+
"rstrip": false,
|
| 217 |
+
"single_word": false,
|
| 218 |
+
"special": true
|
| 219 |
+
},
|
| 220 |
+
"248071": {
|
| 221 |
+
"content": "<|audio_end|>",
|
| 222 |
+
"lstrip": false,
|
| 223 |
+
"normalized": false,
|
| 224 |
+
"rstrip": false,
|
| 225 |
+
"single_word": false,
|
| 226 |
+
"special": true
|
| 227 |
+
},
|
| 228 |
+
"248072": {
|
| 229 |
+
"content": "<tts_pad>",
|
| 230 |
+
"lstrip": false,
|
| 231 |
+
"normalized": false,
|
| 232 |
+
"rstrip": false,
|
| 233 |
+
"single_word": false,
|
| 234 |
+
"special": true
|
| 235 |
+
},
|
| 236 |
+
"248073": {
|
| 237 |
+
"content": "<tts_text_bos>",
|
| 238 |
+
"lstrip": false,
|
| 239 |
+
"normalized": false,
|
| 240 |
+
"rstrip": false,
|
| 241 |
+
"single_word": false,
|
| 242 |
+
"special": true
|
| 243 |
+
},
|
| 244 |
+
"248074": {
|
| 245 |
+
"content": "<tts_text_eod>",
|
| 246 |
+
"lstrip": false,
|
| 247 |
+
"normalized": false,
|
| 248 |
+
"rstrip": false,
|
| 249 |
+
"single_word": false,
|
| 250 |
+
"special": true
|
| 251 |
+
},
|
| 252 |
+
"248075": {
|
| 253 |
+
"content": "<tts_text_bos_single>",
|
| 254 |
+
"lstrip": false,
|
| 255 |
+
"normalized": false,
|
| 256 |
+
"rstrip": false,
|
| 257 |
+
"single_word": false,
|
| 258 |
+
"special": true
|
| 259 |
+
},
|
| 260 |
+
"248076": {
|
| 261 |
+
"content": "<|audio_pad|>",
|
| 262 |
+
"lstrip": false,
|
| 263 |
+
"normalized": false,
|
| 264 |
+
"rstrip": false,
|
| 265 |
+
"single_word": false,
|
| 266 |
+
"special": true
|
| 267 |
+
}
|
| 268 |
+
},
|
| 269 |
+
"additional_special_tokens": [
|
| 270 |
+
"<|im_start|>",
|
| 271 |
+
"<|im_end|>",
|
| 272 |
+
"<|object_ref_start|>",
|
| 273 |
+
"<|object_ref_end|>",
|
| 274 |
+
"<|box_start|>",
|
| 275 |
+
"<|box_end|>",
|
| 276 |
+
"<|quad_start|>",
|
| 277 |
+
"<|quad_end|>",
|
| 278 |
+
"<|vision_start|>",
|
| 279 |
+
"<|vision_end|>",
|
| 280 |
+
"<|vision_pad|>",
|
| 281 |
+
"<|image_pad|>",
|
| 282 |
+
"<|video_pad|>"
|
| 283 |
+
],
|
| 284 |
+
"bos_token": null,
|
| 285 |
+
"chat_template": "{%- set image_count = namespace(value=0) %}\n{%- set video_count = namespace(value=0) %}\n{%- macro render_content(content, do_vision_count, is_system_content=false) %}\n {%- if content is string %}\n {{- content }}\n {%- elif content is iterable and content is not mapping %}\n {%- for item in content %}\n {%- if 'image' in item or 'image_url' in item or item.type == 'image' %}\n {%- if is_system_content %}\n {{- raise_exception('System message cannot contain images.') }}\n {%- endif %}\n {%- if do_vision_count %}\n {%- set image_count.value = image_count.value + 1 %}\n {%- endif %}\n {%- if add_vision_id %}\n {{- 'Picture ' ~ image_count.value ~ ': ' }}\n {%- endif %}\n {{- '<|vision_start|><|image_pad|><|vision_end|>' }}\n {%- elif 'video' in item or item.type == 'video' %}\n {%- if is_system_content %}\n {{- raise_exception('System message cannot contain videos.') }}\n {%- endif %}\n {%- if do_vision_count %}\n {%- set video_count.value = video_count.value + 1 %}\n {%- endif %}\n {%- if add_vision_id %}\n {{- 'Video ' ~ video_count.value ~ ': ' }}\n {%- endif %}\n {{- '<|vision_start|><|video_pad|><|vision_end|>' }}\n {%- elif 'text' in item %}\n {{- item.text }}\n {%- else %}\n {{- raise_exception('Unexpected item type in content.') }}\n {%- endif %}\n {%- endfor %}\n {%- elif content is none or content is undefined %}\n {{- '' }}\n {%- else %}\n {{- raise_exception('Unexpected content type.') }}\n {%- endif %}\n{%- endmacro %}\n{%- if not messages %}\n {{- raise_exception('No messages provided.') }}\n{%- endif %}\n{%- set reasoning_instructions = '' %}\n{%- if enable_thinking is undefined or enable_thinking is true %}\n {%- set resolved_reasoning_effort = reasoning_effort|default('xhigh') %}\n {%- if resolved_reasoning_effort not in ('xhigh', 'medium', 'low') %}\n {{- raise_exception('Unexpected reasoning effort ' ~ reasoning_effort ~ '. Supported types are xhigh (default), medium, and low.') }}\n {%- endif %}\n {%- if resolved_reasoning_effort == 'xhigh' %}\n {%- set reasoning_instructions = 'Reasoning effort is set to xhigh. Please think carefully through the task, validate key assumptions, consider plausible alternatives, and prioritize correctness, consistency, and clarity in the final answer.' %}\n {%- elif resolved_reasoning_effort == 'low' %}\n {%- set reasoning_instructions = 'Reasoning effort is set to low. Keep your thinking brief and focused, moving directly to the conclusion without unnecessary elaboration.' %}\n {%- endif %}\n{%- endif %}\n{%- if tools and tools is iterable and tools is not mapping %}\n {{- '<|im_start|>system\\n' }}\n {%- if reasoning_instructions %}\n {{- reasoning_instructions + '\\n\\n' }}\n {%- endif %}\n {{- \"# Tools\\n\\nYou have access to the following functions:\\n\\n<tools>\" }}\n {%- for tool in tools %}\n {{- \"\\n\" }}\n {{- tool | tojson }}\n {%- endfor %}\n {{- \"\\n</tools>\" }}\n {{- '\\n\\nIf you choose to call a function ONLY reply in the following format with NO suffix:\\n\\n<tool_call>\\n<function=example_function_name>\\n<parameter=example_parameter_1>\\nvalue_1\\n</parameter>\\n<parameter=example_parameter_2>\\nThis is the value for the second parameter\\nthat can span\\nmultiple lines\\n</parameter>\\n</function>\\n</tool_call>\\n\\n<IMPORTANT>\\nReminder:\\n- Function calls MUST follow the specified format: an inner <function=...></function> block must be nested within <tool_call></tool_call> XML tags\\n- Required parameters MUST be specified\\n- You may provide optional reasoning for your function call in natural language BEFORE the function call, but NOT after\\n- If there is no function call available, answer the question like normal with your current knowledge and do not tell the user about function calls\\n</IMPORTANT>' }}\n {%- if messages[0].role == 'system' %}\n {%- set content = render_content(messages[0].content, false, true)|trim %}\n {%- if content %}\n {{- '\\n\\n' + content }}\n {%- endif %}\n {%- endif %}\n {{- '<|im_end|>\\n' }}\n{%- else %}\n {%- if messages[0].role == 'system' %}\n {%- set content = render_content(messages[0].content, false, true)|trim %}\n {%- if content %}\n {{- '<|im_start|>system\\n' + (reasoning_instructions + '\\n\\n' if reasoning_instructions else '') + content + '<|im_end|>\\n' }}\n {%- elif reasoning_instructions %}\n {{- '<|im_start|>system\\n' + reasoning_instructions + '<|im_end|>\\n' }}\n {%- endif %}\n {%- elif reasoning_instructions %}\n {{- '<|im_start|>system\\n' + reasoning_instructions + '<|im_end|>\\n' }}\n {%- endif %}\n{%- endif %}\n{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}\n{%- for message in messages[::-1] %}\n {%- set index = (messages|length - 1) - loop.index0 %}\n {%- if ns.multi_step_tool and message.role == \"user\" %}\n {%- set content = render_content(message.content, false)|trim %}\n {%- if not(content.startswith('<tool_response>') and content.endswith('</tool_response>')) %}\n {%- set ns.multi_step_tool = false %}\n {%- set ns.last_query_index = index %}\n {%- endif %}\n {%- endif %}\n{%- endfor %}\n{%- if ns.multi_step_tool %}\n {{- raise_exception('No user query found in messages.') }}\n{%- endif %}\n{%- for message in messages %}\n {%- set content = render_content(message.content, true)|trim %}\n {%- if message.role == \"system\" %}\n {%- if not loop.first %}\n {{- raise_exception('System message must be at the beginning.') }}\n {%- endif %}\n {%- elif message.role == \"user\" %}\n {{- '<|im_start|>' + message.role + '\\n' + content + '<|im_end|>' + '\\n' }}\n {%- elif message.role == \"assistant\" %}\n {%- set reasoning_content = '' %}\n {%- if message.reasoning_content is string %}\n {%- set reasoning_content = message.reasoning_content %}\n {%- endif %}\n {%- set reasoning_content = reasoning_content|trim %}\n {%- if preserve_thinking is undefined or preserve_thinking is true or loop.index0 > ns.last_query_index %}\n {{- '<|im_start|>' + message.role + '\\n<think>\\n' + reasoning_content + '\\n</think>\\n\\n' + content }}\n {%- else %}\n {{- '<|im_start|>' + message.role + '\\n' + content }}\n {%- endif %}\n {%- if message.tool_calls and message.tool_calls is iterable and message.tool_calls is not mapping %}\n {%- for tool_call in message.tool_calls %}\n {%- if tool_call.function is defined %}\n {%- set tool_call = tool_call.function %}\n {%- endif %}\n {%- if loop.first %}\n {%- if content|trim %}\n {{- '\\n\\n<tool_call>\\n<function=' + tool_call.name + '>\\n' }}\n {%- else %}\n {{- '<tool_call>\\n<function=' + tool_call.name + '>\\n' }}\n {%- endif %}\n {%- else %}\n {{- '\\n<tool_call>\\n<function=' + tool_call.name + '>\\n' }}\n {%- endif %}\n {%- if tool_call.arguments is defined and tool_call.arguments != '' %}\n {%- for args_name, args_value in tool_call.arguments|items %}\n {{- '<parameter=' + args_name + '>\\n' }}\n {%- set args_value = args_value | string if args_value is string else args_value | tojson | safe %}\n {{- args_value }}\n {{- '\\n</parameter>\\n' }}\n {%- endfor %}\n {%- endif %}\n {{- '</function>\\n</tool_call>' }}\n {%- endfor %}\n {%- endif %}\n {{- '<|im_end|>\\n' }}\n {%- elif message.role == \"tool\" %}\n {%- if loop.previtem and loop.previtem.role != \"tool\" %}\n {{- '<|im_start|>user' }}\n {%- endif %}\n {{- '\\n<tool_response>\\n' }}\n {{- content }}\n {{- '\\n</tool_response>' }}\n {%- if not loop.last and loop.nextitem.role != \"tool\" %}\n {{- '<|im_end|>\\n' }}\n {%- elif loop.last %}\n {{- '<|im_end|>\\n' }}\n {%- endif %}\n {%- else %}\n {{- raise_exception('Unexpected message role.') }}\n {%- endif %}\n{%- endfor %}\n{%- if add_generation_prompt %}\n {{- '<|im_start|>assistant\\n' }}\n {%- if enable_thinking is defined and enable_thinking is false %}\n {{- '<think>\\n\\n</think>\\n\\n' }}\n {%- else %}\n {{- '<think>\\n' }}\n {%- endif %}\n{%- endif %}",
|
| 286 |
+
"clean_up_tokenization_spaces": false,
|
| 287 |
+
"eos_token": "<|im_end|>",
|
| 288 |
+
"errors": "replace",
|
| 289 |
+
"model_max_length": 262144,
|
| 290 |
+
"pad_token": "<|endoftext|>",
|
| 291 |
+
"split_special_tokens": false,
|
| 292 |
+
"tokenizer_class": "Qwen2Tokenizer",
|
| 293 |
+
"unk_token": null,
|
| 294 |
+
"add_bos_token": false,
|
| 295 |
+
"pretokenize_regex": "(?i:'s|'t|'re|'ve|'m|'ll|'d)|[^\\r\\n\\p{L}\\p{N}]?[\\p{L}\\p{M}]+|\\p{N}| ?[^\\s\\p{L}\\p{M}\\p{N}]+[\\r\\n]*|\\s*[\\r\\n]+|\\s+(?!\\S)|\\s+",
|
| 296 |
+
"extra_special_tokens": {
|
| 297 |
+
"audio_bos_token": "<|audio_start|>",
|
| 298 |
+
"audio_eos_token": "<|audio_end|>",
|
| 299 |
+
"audio_token": "<|audio_pad|>",
|
| 300 |
+
"image_token": "<|image_pad|>",
|
| 301 |
+
"video_token": "<|video_pad|>",
|
| 302 |
+
"vision_bos_token": "<|vision_start|>",
|
| 303 |
+
"vision_eos_token": "<|vision_end|>"
|
| 304 |
+
}
|
| 305 |
+
}
|
ukisai-banner.png
ADDED
|
Git LFS Details
|
verify_release.py
ADDED
|
@@ -0,0 +1,152 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
"""Offline, bounded-memory file/index integrity check. Does not execute model code."""
|
| 2 |
+
import argparse
|
| 3 |
+
import hashlib
|
| 4 |
+
import json
|
| 5 |
+
import math
|
| 6 |
+
from pathlib import Path, PurePosixPath
|
| 7 |
+
import re
|
| 8 |
+
import struct
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
def unique(pairs):
|
| 12 |
+
result = {}
|
| 13 |
+
for key, value in pairs:
|
| 14 |
+
if key in result:
|
| 15 |
+
raise ValueError('duplicate JSON key')
|
| 16 |
+
result[key] = value
|
| 17 |
+
return result
|
| 18 |
+
|
| 19 |
+
|
| 20 |
+
def read_json(path):
|
| 21 |
+
return json.loads(path.read_text(encoding='utf-8'), object_pairs_hook=unique)
|
| 22 |
+
|
| 23 |
+
|
| 24 |
+
def safe_path(root, name):
|
| 25 |
+
if not isinstance(name, str) or not name or '\\' in name:
|
| 26 |
+
raise ValueError('unsafe file path')
|
| 27 |
+
p = PurePosixPath(name)
|
| 28 |
+
if p.is_absolute() or '..' in p.parts or str(p) != name:
|
| 29 |
+
raise ValueError('unsafe file path')
|
| 30 |
+
target = root.joinpath(*p.parts)
|
| 31 |
+
if any(parent.is_symlink() for parent in (target, *target.parents) if parent != root.parent):
|
| 32 |
+
raise ValueError('symlink path not allowed')
|
| 33 |
+
target.resolve().relative_to(root.resolve())
|
| 34 |
+
return target
|
| 35 |
+
|
| 36 |
+
|
| 37 |
+
def file_hashes(path):
|
| 38 |
+
size = path.stat().st_size
|
| 39 |
+
sha = hashlib.sha256()
|
| 40 |
+
blob = hashlib.sha1(f'blob {size}\0'.encode())
|
| 41 |
+
with path.open('rb') as stream:
|
| 42 |
+
for chunk in iter(lambda: stream.read(8 * 1024**2), b''):
|
| 43 |
+
sha.update(chunk)
|
| 44 |
+
blob.update(chunk)
|
| 45 |
+
return size, sha.hexdigest(), blob.hexdigest()
|
| 46 |
+
|
| 47 |
+
|
| 48 |
+
def tensor_header(path):
|
| 49 |
+
size = path.stat().st_size
|
| 50 |
+
with path.open('rb') as stream:
|
| 51 |
+
prefix = stream.read(8)
|
| 52 |
+
if len(prefix) != 8:
|
| 53 |
+
raise ValueError('short safetensors prefix')
|
| 54 |
+
n = struct.unpack('<Q', prefix)[0]
|
| 55 |
+
if n > 16 * 1024**2 or 8+n > size:
|
| 56 |
+
raise ValueError('invalid header boundary')
|
| 57 |
+
header = json.loads(stream.read(n), object_pairs_hook=unique)
|
| 58 |
+
widths = {'BF16': 2, 'F16': 2, 'F32': 4, 'F64': 8, 'U32': 4, 'I32': 4,
|
| 59 |
+
'U8': 1, 'I8': 1, 'U16': 2, 'I16': 2, 'U64': 8, 'I64': 8, 'BOOL': 1}
|
| 60 |
+
spans, names = [], set()
|
| 61 |
+
for name, value in header.items():
|
| 62 |
+
if name == '__metadata__':
|
| 63 |
+
continue
|
| 64 |
+
shape = value['shape']
|
| 65 |
+
if not isinstance(shape, list) or any(type(x) is not int or x < 0 for x in shape):
|
| 66 |
+
raise ValueError('invalid tensor shape')
|
| 67 |
+
start, end = value['data_offsets']
|
| 68 |
+
if type(start) is not int or type(end) is not int or not 0 <= start <= end <= size-8-n:
|
| 69 |
+
raise ValueError('invalid tensor payload boundary')
|
| 70 |
+
if end-start != math.prod(shape)*widths[value['dtype']]:
|
| 71 |
+
raise ValueError('dtype/shape byte count mismatch')
|
| 72 |
+
spans.append((start, end))
|
| 73 |
+
names.add(name)
|
| 74 |
+
cursor = 0
|
| 75 |
+
for start, end in sorted(spans):
|
| 76 |
+
if start != cursor:
|
| 77 |
+
raise ValueError('payload gap or overlap')
|
| 78 |
+
cursor = end
|
| 79 |
+
if cursor != size-8-n:
|
| 80 |
+
raise ValueError('unreferenced or truncated payload')
|
| 81 |
+
return names
|
| 82 |
+
|
| 83 |
+
|
| 84 |
+
def verify(root, expected_manifest_sha256=None):
|
| 85 |
+
root = Path(root).absolute()
|
| 86 |
+
errors, checked = [], []
|
| 87 |
+
try:
|
| 88 |
+
manifest_path = safe_path(root, 'UPLOAD_MANIFEST.json')
|
| 89 |
+
_, manifest_sha, _ = file_hashes(manifest_path)
|
| 90 |
+
if expected_manifest_sha256 and expected_manifest_sha256 != manifest_sha:
|
| 91 |
+
raise ValueError('trusted manifest hash mismatch')
|
| 92 |
+
manifest = read_json(manifest_path)
|
| 93 |
+
entries = manifest['files']
|
| 94 |
+
names = [e['path'] for e in entries]
|
| 95 |
+
if len(names) != len(set(names)):
|
| 96 |
+
raise ValueError('duplicate manifest file')
|
| 97 |
+
if any(type(e['bytes']) is not int or e['bytes'] < 0 for e in entries):
|
| 98 |
+
raise ValueError('invalid manifest size')
|
| 99 |
+
if len(entries) != manifest['file_count'] or sum(e['bytes'] for e in entries) != manifest['total_bytes']:
|
| 100 |
+
raise ValueError('manifest aggregates mismatch')
|
| 101 |
+
for e in entries:
|
| 102 |
+
if e['path'] == 'UPLOAD_MANIFEST.json' or not re.fullmatch('[a-f0-9]{64}', e['sha256']):
|
| 103 |
+
raise ValueError('invalid manifest entry')
|
| 104 |
+
p = safe_path(root, e['path'])
|
| 105 |
+
if not p.is_file():
|
| 106 |
+
errors.append({'file': e['path'], 'reason': 'missing file'})
|
| 107 |
+
continue
|
| 108 |
+
size, sha, blob = file_hashes(p)
|
| 109 |
+
if size != e['bytes'] or sha != e['sha256'] or (e.get('git_blob_sha1') and blob != e['git_blob_sha1']):
|
| 110 |
+
errors.append({'file': e['path'], 'reason': 'size or full-file hash mismatch'})
|
| 111 |
+
continue
|
| 112 |
+
if p.suffix == '.json':
|
| 113 |
+
read_json(p)
|
| 114 |
+
checked.append(e['path'])
|
| 115 |
+
index_name = 'model.safetensors.index.json'
|
| 116 |
+
if index_name not in names:
|
| 117 |
+
errors.append({'file': index_name, 'reason': 'required index not in manifest'})
|
| 118 |
+
elif index_name in checked:
|
| 119 |
+
index = read_json(root/index_name)['weight_map']
|
| 120 |
+
if not isinstance(index, dict) or not index:
|
| 121 |
+
raise ValueError('invalid weight map')
|
| 122 |
+
shards = set(index.values())
|
| 123 |
+
expected_shards = {n for n in names if n.endswith('.safetensors')}
|
| 124 |
+
if shards != expected_shards:
|
| 125 |
+
errors.append({'reason': 'index/manifest shard set mismatch'})
|
| 126 |
+
actual = {}
|
| 127 |
+
for shard in sorted(shards):
|
| 128 |
+
safe_path(root, shard)
|
| 129 |
+
if shard not in checked:
|
| 130 |
+
errors.append({'file': shard, 'reason': 'referenced shard missing or not hash-verified'})
|
| 131 |
+
continue
|
| 132 |
+
for tensor in tensor_header(root/shard):
|
| 133 |
+
if tensor in actual:
|
| 134 |
+
raise ValueError('duplicate tensor across shards')
|
| 135 |
+
actual[tensor] = shard
|
| 136 |
+
if actual != index:
|
| 137 |
+
errors.append({'reason': 'actual tensor inventory differs from weight map'})
|
| 138 |
+
except (OSError, ValueError, TypeError, KeyError, AttributeError) as exc:
|
| 139 |
+
errors.append({'reason': 'invalid or incomplete package', 'exception_type': type(exc).__name__})
|
| 140 |
+
return {'status': 'FAIL' if errors else 'PASS', 'errors': errors,
|
| 141 |
+
'fully_hashed_files': len(checked), 'manifest_pinned': bool(expected_manifest_sha256),
|
| 142 |
+
'scope': 'File integrity and tensor index only; not generation, finite-value or quality validation'}
|
| 143 |
+
|
| 144 |
+
|
| 145 |
+
if __name__ == '__main__':
|
| 146 |
+
parser = argparse.ArgumentParser(description=__doc__)
|
| 147 |
+
parser.add_argument('snapshot', type=Path)
|
| 148 |
+
parser.add_argument('--manifest-sha256')
|
| 149 |
+
args = parser.parse_args()
|
| 150 |
+
result = verify(args.snapshot, args.manifest_sha256)
|
| 151 |
+
print(json.dumps(result, indent=2))
|
| 152 |
+
raise SystemExit(0 if result['status'] == 'PASS' else 1)
|
video_preprocessor_config.json
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"size": {
|
| 3 |
+
"longest_edge": 25165824,
|
| 4 |
+
"shortest_edge": 4096
|
| 5 |
+
},
|
| 6 |
+
"patch_size": 16,
|
| 7 |
+
"temporal_patch_size": 2,
|
| 8 |
+
"merge_size": 2,
|
| 9 |
+
"image_mean": [
|
| 10 |
+
0.5,
|
| 11 |
+
0.5,
|
| 12 |
+
0.5
|
| 13 |
+
],
|
| 14 |
+
"image_std": [
|
| 15 |
+
0.5,
|
| 16 |
+
0.5,
|
| 17 |
+
0.5
|
| 18 |
+
],
|
| 19 |
+
"processor_class": "Qwen3VLProcessor",
|
| 20 |
+
"video_processor_type": "Qwen3VLVideoProcessor"
|
| 21 |
+
}
|
vocab.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|