cowWhySo commited on
Commit
6f4220a
·
verified ·
1 Parent(s): 5cc8a8b

Publish Jeeves MLX 4bit (CPU diagnostics; not benchmarked)

Browse files
.gitattributes CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* 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
 
 
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
BUILD.md ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Build and publication record
2
+
3
+ ## Conversion is not training
4
+
5
+ These already-converted `4bit` weights were read from the user's completed `jeeves_9b_cpu_v1_1` build. The publishing notebook does not train, merge adapters, reconvert, quantize, run inference, recalibrate, or change model tensors. It streams existing files from Drive.
6
+
7
+ The upstream release describes fused Qwen3.5-9B weights, a pointer head, and a fitted temperature. See the [original code](https://github.com/PostHog/jeeves) and [original model card](https://huggingface.co/PostHog/jeeves) for the upstream training recipe; no new training performance is asserted here.
8
+
9
+ ## Pinned conversion inputs
10
+
11
+ ```json
12
+ {
13
+ "request": {
14
+ "schema": "jeeves-mlx-cpu-v1",
15
+ "repo_id": "PostHog/jeeves",
16
+ "hf_revision": "8622b7d1652a9dcb8629486b84dce9e8d690c5cd",
17
+ "jeeves_code_ref": "HEAD",
18
+ "mlx_lm_code_ref": "refs/heads/main",
19
+ "mlx_requirement": "mlx[cpu]==0.32.3",
20
+ "quant_bits": [
21
+ 4,
22
+ 8
23
+ ],
24
+ "q_group_size": 64,
25
+ "run_torch_reference": true,
26
+ "run_cpu_smoke": true,
27
+ "smoke_cases": 1,
28
+ "smoke_max_tokens": 256,
29
+ "prefill_chunk_size": 16,
30
+ "greedy_smoke_tokens": 0,
31
+ "min_ram_gib": 24,
32
+ "bf16_probability_atol": 0.02,
33
+ "bf16_min_cosine": 0.995,
34
+ "helper_sha256": {
35
+ "jeeves_support.py": "26ca899ee62b13ef3a93ff7075bf4fcfd097e1c1e15589b667c22be71205beb6",
36
+ "run_jeeves.py": "5e381f42611ee195f4579eb3d3433abf7c292aecb26e52b6ccd94ecd4e13c654",
37
+ "convert_worker.py": "538444544ae39fdbe5031b0a75dcff88615b33e1127d7eb42fefde325c36afd7"
38
+ }
39
+ },
40
+ "jeeves_code_sha": "f04ec5567301450dcaae0210dd54deeb4f647f87",
41
+ "mlx_lm_sha": "94cdcae13b266c337bcaca09b97b9c5a9c0e2cde",
42
+ "identity": "c4d0ea30e584dbf0d1e672c59c2e00036cb6a1a7025833ef49c01c63432b18fa"
43
+ }
44
+ ```
45
+
46
+ This is the original conversion lock, not the publishing environment. The original Mac dependencies are in `requirements-mac.txt`. The CPU dependency lock is included in `provenance/requirements-cpu-lock.txt` when present in the original run. These pins identify the build; this document is not a substitute for a complete conversion implementation.
47
+
48
+ ## Stored converted configuration
49
+
50
+ ```json
51
+ {
52
+ "model_type": "qwen3_5",
53
+ "num_hidden_layers": 32,
54
+ "hidden_size": 4096,
55
+ "full_attention_interval": 4,
56
+ "rope_theta": 10000000,
57
+ "partial_rotary_factor": 0.25,
58
+ "rope_parameters": {
59
+ "type": "default",
60
+ "rope_theta": 10000000,
61
+ "partial_rotary_factor": 0.25
62
+ },
63
+ "quantization": {
64
+ "group_size": 64,
65
+ "bits": 4,
66
+ "mode": "affine"
67
+ },
68
+ "quantization_config": {
69
+ "group_size": 64,
70
+ "bits": 4,
71
+ "mode": "affine"
72
+ }
73
+ }
74
+ ```
75
+
76
+ The retained `provenance/source_config.json`, source shard hashes, original encoder/head source, and audit records describe the conversion inputs. The published backbone uses MLX tensor layout and `model_type=qwen3_5`; the pointer head is separately stored in FP32. Original `head.pt` is retained for provenance and is never unpickled by the publishing notebook.
77
+
78
+ ## What publication verifies
79
+
80
+ The publisher checks every original manifest entry using streaming full-file SHA-256; reads `validation.json`; checks required licenses/runner/tokenizer/head files; validates safetensors headers, offsets, and shard indexing without loading tensors; checks expected quantization metadata and cross-variant shared files; scans text/code files for common credential patterns; then constructs a new release manifest. A credential scan is a safeguard, not a general audit of private content.
81
+
82
+ Only files named in the verified package manifest and the explicitly generated release documents are eligible for upload. Caches, secrets, unrelated Drive files, raw run logs, and undeclared files are not uploaded. No model-weight copy is made on Drive or in a staging folder.
83
+
84
+ Uploads use explicit file paths and a parent-commit guard. Existing managed branch contents are compared by size plus LFS SHA-256 or regular Git-blob SHA-1. Unexpected files or an unrelated existing repository cause a stop, not an automatic deletion. Successful upload verification checks Hub file metadata at an immutable commit and downloads `validation.json` for byte comparison; it does not re-download all weights or execute them.
85
+
86
+ `provenance/original_package_README.md` and `provenance/source_PACKAGE_MANIFEST.json` preserve the originals. New `README.md`, `BUILD.md`, `RELEASE.json`, and `PACKAGE_MANIFEST.json` document the publication; `validation.json`, runtime code, weights, tokenizer, calibration, and licenses remain byte-identical to the conversion package. The root published manifest excludes itself by design.
87
+
88
+ ## Remaining validation
89
+
90
+ Apple Metal execution, representative task accuracy, calibration after quantization, greedy reasoning, and realistic latency/memory benchmarks remain unmeasured. Packaging and remote checksum checks must not be reported as model-quality validation.
CONVERSION_COMPLETE.json ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "identity": "c4d0ea30e584dbf0d1e672c59c2e00036cb6a1a7025833ef49c01c63432b18fa",
3
+ "variant": "jeeves-mlx-4bit",
4
+ "tensor_count": 927,
5
+ "tensor_bytes": 5038040064,
6
+ "status": "weights_converted_and_structurally_checked",
7
+ "backbone_parity": "not_yet_assessed"
8
+ }
LICENSE 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.
LICENSE_JEEVES_CODE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Nicholas P. Waltz
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.
PACKAGE_MANIFEST.json ADDED
@@ -0,0 +1,224 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "conversion_identity": "c4d0ea30e584dbf0d1e672c59c2e00036cb6a1a7025833ef49c01c63432b18fa",
3
+ "files": {
4
+ "BUILD.md": {
5
+ "bytes": 4914,
6
+ "git_blob_sha1": "9befdd51c6eab46dbaaa30e80cdfcd1a8bb73914",
7
+ "sha256": "54a936dac8c11112c82ef931a4115b3887b0e353e64038058a334508e908244e"
8
+ },
9
+ "CONVERSION_COMPLETE.json": {
10
+ "bytes": 269,
11
+ "git_blob_sha1": "3bbdb56b348f87fc20d006204624e8d559c402a3",
12
+ "sha256": "cb7ff21cfa818a070dc01cb79829ceca9e293e5c9dfc400ab8c8a81a4699b383"
13
+ },
14
+ "LICENSE": {
15
+ "bytes": 11544,
16
+ "git_blob_sha1": "f938136e3adacfd92be087f6e113b5d6d97f678f",
17
+ "sha256": "bbedc3fda3305820b977265f01b8619d87570a6739de3a5582c3464840f1e57a"
18
+ },
19
+ "LICENSE_JEEVES_CODE": {
20
+ "bytes": 1074,
21
+ "git_blob_sha1": "f86d38990a659f4df8800a78a48744e18908e7ca",
22
+ "sha256": "823f556c20700f9a2f5e520c7d4eb3089f083fb19cf618cdbe08c08982f41b8e"
23
+ },
24
+ "README.md": {
25
+ "bytes": 6654,
26
+ "git_blob_sha1": "94ae7402fb520e1c273858b59c834738871f1c5d",
27
+ "sha256": "afca0915c4c0f884953f333b3f7af88a6aa7f62a171b487cd5ddceb3fe6fab5c"
28
+ },
29
+ "RELEASE.json": {
30
+ "bytes": 647,
31
+ "git_blob_sha1": "ce36b81379680de18edc1be0b9f7081d4f1d21d2",
32
+ "sha256": "a024d878ea83db6b976c2896cfc5bcd860e7ddd70255ef7c2095af946c11f86f"
33
+ },
34
+ "chat_template.jinja": {
35
+ "bytes": 7756,
36
+ "git_blob_sha1": "a585dec894e63da457d9440ec6aa7caa16d20860",
37
+ "sha256": "a4aee8afcf2e0711942cf848899be66016f8d14a889ff9ede07bca099c28f715"
38
+ },
39
+ "config.json": {
40
+ "bytes": 2080,
41
+ "git_blob_sha1": "d43ddf5fab8169d39664c06156eae65e41d13af2",
42
+ "sha256": "6cc3a4bc9bd804159d7849476564026451ace6009b7fc51cdf14908aaacf333a"
43
+ },
44
+ "dataformat.py": {
45
+ "bytes": 6058,
46
+ "git_blob_sha1": "c950dadc457b051e03aa19eabd25aec299b93899",
47
+ "sha256": "1c421b0e2ba879f5799842b3a44350d1f1db117ead23c47c7b01a27e2139c664"
48
+ },
49
+ "example_request.json": {
50
+ "bytes": 179,
51
+ "git_blob_sha1": "7fcfe2a8fd726bb73afe68d98be985f4e7ba790a",
52
+ "sha256": "7cec13b2283352be787736c7bb47fb783b61814f9ed25fb9ac2742d521435145"
53
+ },
54
+ "export.json": {
55
+ "bytes": 2582,
56
+ "git_blob_sha1": "cd254ec10c3a8eff3bbe52d42f88e20564c56721",
57
+ "sha256": "608d8aa594bc9cc6cd37e691eb3b5ec0e661866be0ae38f21659f6d70531e8a1"
58
+ },
59
+ "fixtures.json": {
60
+ "bytes": 4863,
61
+ "git_blob_sha1": "d1afbc455f04bd8648a0c823ad0c7ff56e0c3c3c",
62
+ "sha256": "2887c941fd5a497ae51343a9e2382ea1d198ab5eb140f4e8c8fd37c54be4ebf0"
63
+ },
64
+ "head.pt": {
65
+ "bytes": 8392767,
66
+ "git_blob_sha1": "48bc4d58231ee305e7d3bd9b719ef47ff8ab328f",
67
+ "sha256": "2ab935dea9eecf263086d9ed6dfe97fd5558193663ecae102fd3c50ae6878d60"
68
+ },
69
+ "head.safetensors": {
70
+ "bytes": 8391016,
71
+ "git_blob_sha1": "837f2da3c17a936f5347529ef7c421c8ab08ef4d",
72
+ "sha256": "ceac931470abafbc62723a297291f2c3d96627679794433585e658981798343e"
73
+ },
74
+ "jeeves_format.py": {
75
+ "bytes": 4244,
76
+ "git_blob_sha1": "1904b0a300b93f944d463722a3864827b8a6e38c",
77
+ "sha256": "6bb9599483ce4328024bf2c8473959996b3c55a226ae2a31c739ec87b0f215ca"
78
+ },
79
+ "jeeves_support.py": {
80
+ "bytes": 7920,
81
+ "git_blob_sha1": "7ed1ca6a65b11ee078f4f202296480cbb481c29b",
82
+ "sha256": "26ca899ee62b13ef3a93ff7075bf4fcfd097e1c1e15589b667c22be71205beb6"
83
+ },
84
+ "model.safetensors": {
85
+ "bytes": 5038161163,
86
+ "git_blob_sha1": "416a53edc10b90b36a80b9bab618a59d19abba24",
87
+ "sha256": "a7f3c503106f38d7bff3a55cb16b82bb5085fd8247893ade8a1de6ed1750e1f1"
88
+ },
89
+ "model.safetensors.index.json": {
90
+ "bytes": 81194,
91
+ "git_blob_sha1": "a155f5eba81d28e47c41d1522c5fbaefed63f19d",
92
+ "sha256": "215f9abadc1cea4d465b01c036dffcac5a84c2fb2386777863eff6928b91ed0b"
93
+ },
94
+ "provenance/bf16_weight_audit.json": {
95
+ "bytes": 201,
96
+ "git_blob_sha1": "b181d091a68d1bd2407c6d3d18d36e4de27867e0",
97
+ "sha256": "a4668cfbcf61c2946e870e552776d876f8cfd1cd021b4bda5f30795bfa545ee4"
98
+ },
99
+ "provenance/conversion_run_lock.json": {
100
+ "bytes": 1113,
101
+ "git_blob_sha1": "23670a4c65c17b7240f4381af793d04f28b71186",
102
+ "sha256": "ee800d671e63a5f3008b91e633353ad27f25d3980a877a82575febd41349fd47"
103
+ },
104
+ "provenance/format_head_checks.json": {
105
+ "bytes": 481,
106
+ "git_blob_sha1": "34e60904788736db8e14dd4d173c078c5bb31ea6",
107
+ "sha256": "fb3c9913a7d9200186d9b4ec7e79701e1b9fb0e9513636e7b84db716584140ce"
108
+ },
109
+ "provenance/jeeves-mlx-4bit.npz": {
110
+ "bytes": 49972,
111
+ "git_blob_sha1": "fef4ffe75c32a3b85bd6551dac62eebf8d8ece85",
112
+ "sha256": "b23046076e0105c29e487312856067b9e4c0a4d53ced30a543b5543911551ba7"
113
+ },
114
+ "provenance/jeeves-mlx-4bit_smoke.json": {
115
+ "bytes": 467,
116
+ "git_blob_sha1": "565aec925f5924d6549c7d4cae5e87c41ee3be53",
117
+ "sha256": "4f76a693cf949f7cdd3eac7b573b8e15083e5a3f0b7614a06ec449a525c05baf"
118
+ },
119
+ "provenance/jeeves-mlx-bf16.npz": {
120
+ "bytes": 49972,
121
+ "git_blob_sha1": "de5830dda85c898a36c7c7b1d858f63307107d84",
122
+ "sha256": "20f08bc1b539c2b7321c666c73faba142141641db0c27757958a1f463e92f52c"
123
+ },
124
+ "provenance/jeeves-mlx-bf16_smoke.json": {
125
+ "bytes": 469,
126
+ "git_blob_sha1": "73d8c5abc70344b4f73fadfc59913abc1524388a",
127
+ "sha256": "09b6e75e09a1b51d571e0309e9de7f566b33a5aa86fa039a5669577717dade0d"
128
+ },
129
+ "provenance/original_package_README.md": {
130
+ "bytes": 2192,
131
+ "git_blob_sha1": "36d1319d9e35e6cac375ee2d4e4e5cee2563e285",
132
+ "sha256": "fc5140a87a684cb672186d46c739e8482174854632dbcb929985ffda6eced3a9"
133
+ },
134
+ "provenance/preflight.json": {
135
+ "bytes": 337,
136
+ "git_blob_sha1": "09ccfb8117071b61d962cb9e7f6e7e1643f69af9",
137
+ "sha256": "6cc3ab0b1b759f6751f68ca3867f9648573a69e9632840feb42cb2b60daf27c6"
138
+ },
139
+ "provenance/requirements-cpu-lock.txt": {
140
+ "bytes": 750,
141
+ "git_blob_sha1": "9bf3f6068366175d8f20e5d84aa1098067459f7d",
142
+ "sha256": "3001f76ad1dea715696448e5cc7bfbb52a44291e09fae27b65bcc3eaf3bfecb5"
143
+ },
144
+ "provenance/source_PACKAGE_MANIFEST.json": {
145
+ "bytes": 5445,
146
+ "git_blob_sha1": "101d33c375185a8fedc7257373c6795ba37da2af",
147
+ "sha256": "f1559f8e86c02d9544f9bbded27d8df5425ae8fc700a32271038e1495ef69279"
148
+ },
149
+ "provenance/source_config.json": {
150
+ "bytes": 1471,
151
+ "git_blob_sha1": "6902ebcb645647c0f9bc61274442c665e75e0880",
152
+ "sha256": "b0ca5d0cb2056e4c1a4eb9a0616c114773cbd8b7428c1927259b28b3938b4191"
153
+ },
154
+ "provenance/source_lock.json": {
155
+ "bytes": 302,
156
+ "git_blob_sha1": "3dc183e04a66d8338c427d2f63c060b06757fd2c",
157
+ "sha256": "d96f01e2558461e3c3daa874755a8212af64591840f6e6c8415f73ad8328e446"
158
+ },
159
+ "provenance/source_shards.json": {
160
+ "bytes": 913,
161
+ "git_blob_sha1": "2fbeaff8dd643a41bd1b828f747288e5b64a5ba9",
162
+ "sha256": "8f7b5da3ef9b11a19ff1976b382fc5908989beab726c68ad8ef70b6db7c57f8e"
163
+ },
164
+ "provenance/torch_reference.json": {
165
+ "bytes": 504,
166
+ "git_blob_sha1": "9842d7ba5524ff558c3d61a081f4e818e122be80",
167
+ "sha256": "1ff8eed755e0c8d4febb490a8be902c4b21a33802e428ff23047a31109d41c8c"
168
+ },
169
+ "provenance/torch_reference.npz": {
170
+ "bytes": 49972,
171
+ "git_blob_sha1": "1ec661cbef5fc938a76228bf1f6bd2450e9aac23",
172
+ "sha256": "852fadb6c779fbbb45073590aa5f08f6385f903dad22c8a6ab27d6613de5ebba"
173
+ },
174
+ "provenance/upstream_code.json": {
175
+ "bytes": 799,
176
+ "git_blob_sha1": "73dd0d880b5cab190c16e1ad5bb50f2761357ab6",
177
+ "sha256": "d50143f13dac140feb845dfef53380e370371f6c95412bee6b212d5387bb7987"
178
+ },
179
+ "provenance/upstream_dataloader.py": {
180
+ "bytes": 11424,
181
+ "git_blob_sha1": "1fcb0ead744abd3cddf413f8a636497a4908549e",
182
+ "sha256": "7d8a43ddcac427125bbe6b8aca9cfb3306aa1dbef6d7509bfed1a65a2d93b4d1"
183
+ },
184
+ "provenance/upstream_head.py": {
185
+ "bytes": 714,
186
+ "git_blob_sha1": "93dbcbf2adf466764da93fd63456d272f4ba8b70",
187
+ "sha256": "4c4f503c0ecef50d58b7a789f79f9336324c1548d9832e9ce75a675fd2ba302f"
188
+ },
189
+ "provenance/upstream_model_card.md": {
190
+ "bytes": 5234,
191
+ "git_blob_sha1": "406793bf53d745ecf44940d7ba21c8b340ae3e0d",
192
+ "sha256": "8f18acc423edf4c7db50d877f8f826ff6e019e6395092b800b6673db3e00cae2"
193
+ },
194
+ "requirements-mac.txt": {
195
+ "bytes": 184,
196
+ "git_blob_sha1": "0ea05364a02bff105cc85d094481bf18e13f9281",
197
+ "sha256": "01b04c2acde4835455b18b65e8e3567c1a8d607f23692afb01f4a842487dd147"
198
+ },
199
+ "run_jeeves.py": {
200
+ "bytes": 9594,
201
+ "git_blob_sha1": "9c6b9e9e062968776758a645ef6c5b67c0c85df8",
202
+ "sha256": "5e381f42611ee195f4579eb3d3433abf7c292aecb26e52b6ccd94ecd4e13c654"
203
+ },
204
+ "tokenizer.json": {
205
+ "bytes": 19989325,
206
+ "git_blob_sha1": "d5967dbafffa6c5b250a02b35723f53e702d0d62",
207
+ "sha256": "06b9509352d2af50381ab2247e083b80d32d5c0aba91c272ca9ff729b6a0e523"
208
+ },
209
+ "tokenizer_config.json": {
210
+ "bytes": 1161,
211
+ "git_blob_sha1": "8d610519919e32dd25f499e61f4bd38d7a0ad9b2",
212
+ "sha256": "95c557768e6b88a7128befc7bfd3c7de50e5d51af9b8b33a9f4dee0e04f99679"
213
+ },
214
+ "validation.json": {
215
+ "bytes": 2250,
216
+ "git_blob_sha1": "cd87a7cb8c9203e61b7b816d3ec96f5e2a76c4b1",
217
+ "sha256": "36d3a8cf620c7db74476f8f4f6d0c8ab77b225bb0d6b5c8859eb0d5bf57f5061"
218
+ }
219
+ },
220
+ "repo_id": "cowWhySo/jeeves-mlx",
221
+ "schema": "cowwhyso-jeeves-mlx-publisher/v1",
222
+ "self_excluded": "PACKAGE_MANIFEST.json",
223
+ "variant": "4bit"
224
+ }
README.md ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ language:
4
+ - en
5
+ base_model: PostHog/jeeves
6
+ library_name: mlx
7
+ pipeline_tag: text-classification
8
+ tags:
9
+ - mlx
10
+ - qwen3.5
11
+ - decision
12
+ - unofficial-port
13
+ - experimental
14
+ - 4bit
15
+ ---
16
+
17
+ # Jeeves-9B MLX — 4bit
18
+
19
+ Unofficial CPU-converted MLX packaging of **[PostHog/jeeves](https://huggingface.co/PostHog/jeeves)**, published by **[cowWhySo](https://huggingface.co/cowWhySo)**. This is not a PostHog or Apple release, a newly trained model, or a benchmark-certified port.
20
+
21
+ **Original project: [PostHog/jeeves on GitHub](https://github.com/PostHog/jeeves)**
22
+ **Original model: [PostHog/jeeves on Hugging Face](https://huggingface.co/PostHog/jeeves)**
23
+
24
+ > **Validation: `converted_and_small_cpu_diagnostics_passed_not_benchmarked`.** Read [validation.json](validation.json) before relying on the package. Apple Metal execution, task accuracy, post-quantization calibration, and representative latency remain unmeasured. Upstream benchmark scores and CUDA speed claims do not transfer to this conversion.
25
+
26
+ ## Available packages
27
+
28
+ One repository; one complete package per branch. `main` contains **4-bit**, not BF16. Other variants are branches, not subfolders. Downloading one revision does not download the others.
29
+
30
+ | Variant | Revision | Original package size on Drive |
31
+ | --- | --- | ---: |
32
+ | 4bit | [`main`](https://huggingface.co/cowWhySo/jeeves-mlx/tree/main) | 4.73 GiB |
33
+ | 8bit | [`8bit`](https://huggingface.co/cowWhySo/jeeves-mlx/tree/8bit) | 8.90 GiB |
34
+ | bf16 | [`bf16`](https://huggingface.co/cowWhySo/jeeves-mlx/tree/bf16) | 16.71 GiB |
35
+
36
+ Sizes are actual original package bytes divided by 2^30 (GiB), including auxiliary files. Publishing adds small documentation/manifest files. These are **disk sizes**, not measured peak RAM or unified-memory requirements. This README describes the `main` revision.
37
+
38
+ ## What is preserved
39
+
40
+ The Qwen3.5-9B backbone uses **4-bit MLX affine quantization, group size 64**. The original pointer head is retained as `head.pt` and exported without changing its FP32 values as `head.safetensors`. The released fitted temperature is **1.85892808437347**, retained in `export.json`; it has **not** been refitted for quantization. Exact-format helpers, the tokenizer, original licenses, source records, and diagnostic fixtures accompany the weights.
41
+
42
+ Jeeves uses a custom decision head and prompt/readout format, not an ordinary text-generation pipeline. Use the included `run_jeeves.py` for decisions; `mlx_lm.generate` alone does not implement Jeeves scoring. See [BUILD.md](BUILD.md) for build details and [provenance/original_package_README.md](provenance/original_package_README.md) for the original conversion notes.
43
+
44
+ ## Download and try on Apple Silicon
45
+
46
+ These are **instructions for an unmeasured Metal path**, not a claim that this release has been tested on a Mac. Review the included Python source before running it. Each variant should have its own local directory; do not overlay variants into one directory.
47
+
48
+ ```bash
49
+ python3 -m venv .venv
50
+ source .venv/bin/activate
51
+ python -m pip install "huggingface_hub==1.33.0"
52
+ hf download cowWhySo/jeeves-mlx --revision main --local-dir jeeves-mlx-4bit
53
+ cd jeeves-mlx-4bit
54
+ python -m pip install -r requirements-mac.txt
55
+ python run_jeeves.py --model . --request example_request.json --device gpu --think-tokens 0
56
+ ```
57
+
58
+ To select a different variant, replace the revision and directory with `main` / `jeeves-mlx-4bit`, `8bit` / `jeeves-mlx-8bit`, or `bf16` / `jeeves-mlx-bf16`. Pin a release commit SHA instead of a branch for reproducible downstream experiments.
59
+
60
+ The runner accepts `state` and a `questions` mapping with `noul`, `choice`, or `score` types. It returns option probabilities under its own `results` schema; it is **not wire-compatible** with the upstream `/v1/systemone` HTTP service.
61
+
62
+ An optional, **unvalidated greedy-thinking path** exists:
63
+
64
+ ```bash
65
+ python run_jeeves.py --model . --request example_request.json --device gpu --think-tokens 128
66
+ ```
67
+
68
+ The reference runner processes questions independently, uses a separate cache per question, and re-prefills the full sequence for decision readout after optional reasoning. It does not port the speculative diffusion drafters, CUDA graphs, FP8 serving, parallel-question engine, or adaptive no-thinking threshold.
69
+
70
+ ## Evidence and limits
71
+
72
+ The stored format/head checks passed for 4 format cases. The synthetic-hidden-state pointer-head comparison reported maximum probability error 0; it is **not** a backbone comparison. The stored no-thinking CPU smoke test contains **1 case(s)**. The BF16 backbone comparison is explicitly a small-fixture diagnostic with heuristic tolerances, not general equivalence.
73
+
74
+ On the recorded 1-case diagnostic, the maximum option-probability difference from MLX BF16 was 0.016297996. This is not an accuracy or calibration estimate.
75
+
76
+ No task accuracy, calibration benchmark, Metal speed, quantized quality ranking, or validated reasoning performance is claimed. CPU smoke elapsed times in the evidence are diagnostics, not representative serving benchmarks. Retaining the original temperature is not evidence of calibration on a different numerical path.
77
+
78
+ ## Build provenance
79
+
80
+ - Model source: [`PostHog/jeeves@8622b7d1652a9dcb8629486b84dce9e8d690c5cd`](https://huggingface.co/PostHog/jeeves/tree/8622b7d1652a9dcb8629486b84dce9e8d690c5cd).
81
+ - Jeeves code: [`f04ec5567301450dcaae0210dd54deeb4f647f87`](https://github.com/PostHog/jeeves/tree/f04ec5567301450dcaae0210dd54deeb4f647f87).
82
+ - MLX-LM code: [`94cdcae13b266c337bcaca09b97b9c5a9c0e2cde`](https://github.com/ml-explore/mlx-lm/tree/94cdcae13b266c337bcaca09b97b9c5a9c0e2cde).
83
+ - Conversion MLX requirement: `mlx[cpu]==0.32.3`; original build identity: `c4d0ea30e584dbf0d1e672c59c2e00036cb6a1a7025833ef49c01c63432b18fa`.
84
+
85
+ [PACKAGE_MANIFEST.json](PACKAGE_MANIFEST.json) hashes the published payload except itself. [provenance/source_PACKAGE_MANIFEST.json](provenance/source_PACKAGE_MANIFEST.json) is the unmodified original manifest; its paths describe the original pre-publication package, not the newly documented payload. [RELEASE.json](RELEASE.json) distinguishes conversion evidence from packaging checks. Original `validation.json` is unchanged.
86
+
87
+ ## License and attribution
88
+
89
+ Model weights follow the original **Apache-2.0** license retained in [LICENSE](LICENSE). Upstream Jeeves code is **MIT** licensed; its notice is retained in [LICENSE_JEEVES_CODE](LICENSE_JEEVES_CODE). Respect any additional notices in the included files. Credits for the original model, training, calibration, and serving research belong to PostHog and the upstream authors; this repository provides an unofficial MLX conversion/packaging.
RELEASE.json ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "branch": "main",
3
+ "conversion_identity": "c4d0ea30e584dbf0d1e672c59c2e00036cb6a1a7025833ef49c01c63432b18fa",
4
+ "inference_run_by_publisher": false,
5
+ "publisher_version": "1.0.0",
6
+ "repo_id": "cowWhySo/jeeves-mlx",
7
+ "schema": "cowwhyso-jeeves-mlx-publisher/v1",
8
+ "scope": "Package integrity and publication only; not model-quality validation",
9
+ "source_package_bytes": 5075258092,
10
+ "source_repo": "PostHog/jeeves",
11
+ "source_revision": "8622b7d1652a9dcb8629486b84dce9e8d690c5cd",
12
+ "source_validation_status": "converted_and_small_cpu_diagnostics_passed_not_benchmarked",
13
+ "variant": "4bit",
14
+ "weights_modified_by_publisher": false
15
+ }
chat_template.jinja ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ {%- if tools and tools is iterable and tools is not mapping %}
46
+ {{- '<|im_start|>system\n' }}
47
+ {{- "# Tools\n\nYou have access to the following functions:\n\n<tools>" }}
48
+ {%- for tool in tools %}
49
+ {{- "\n" }}
50
+ {{- tool | tojson }}
51
+ {%- endfor %}
52
+ {{- "\n</tools>" }}
53
+ {{- '\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>' }}
54
+ {%- if messages[0].role == 'system' %}
55
+ {%- set content = render_content(messages[0].content, false, true)|trim %}
56
+ {%- if content %}
57
+ {{- '\n\n' + content }}
58
+ {%- endif %}
59
+ {%- endif %}
60
+ {{- '<|im_end|>\n' }}
61
+ {%- else %}
62
+ {%- if messages[0].role == 'system' %}
63
+ {%- set content = render_content(messages[0].content, false, true)|trim %}
64
+ {{- '<|im_start|>system\n' + content + '<|im_end|>\n' }}
65
+ {%- endif %}
66
+ {%- endif %}
67
+ {%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}
68
+ {%- for message in messages[::-1] %}
69
+ {%- set index = (messages|length - 1) - loop.index0 %}
70
+ {%- if ns.multi_step_tool and message.role == "user" %}
71
+ {%- set content = render_content(message.content, false)|trim %}
72
+ {%- if not(content.startswith('<tool_response>') and content.endswith('</tool_response>')) %}
73
+ {%- set ns.multi_step_tool = false %}
74
+ {%- set ns.last_query_index = index %}
75
+ {%- endif %}
76
+ {%- endif %}
77
+ {%- endfor %}
78
+ {%- if ns.multi_step_tool %}
79
+ {{- raise_exception('No user query found in messages.') }}
80
+ {%- endif %}
81
+ {%- for message in messages %}
82
+ {%- set content = render_content(message.content, true)|trim %}
83
+ {%- if message.role == "system" %}
84
+ {%- if not loop.first %}
85
+ {{- raise_exception('System message must be at the beginning.') }}
86
+ {%- endif %}
87
+ {%- elif message.role == "user" %}
88
+ {{- '<|im_start|>' + message.role + '\n' + content + '<|im_end|>' + '\n' }}
89
+ {%- elif message.role == "assistant" %}
90
+ {%- set reasoning_content = '' %}
91
+ {%- if message.reasoning_content is string %}
92
+ {%- set reasoning_content = message.reasoning_content %}
93
+ {%- else %}
94
+ {%- if '</think>' in content %}
95
+ {%- set reasoning_content = content.split('</think>')[0].rstrip('\n').split('<think>')[-1].lstrip('\n') %}
96
+ {%- set content = content.split('</think>')[-1].lstrip('\n') %}
97
+ {%- endif %}
98
+ {%- endif %}
99
+ {%- set reasoning_content = reasoning_content|trim %}
100
+ {%- if loop.index0 > ns.last_query_index %}
101
+ {{- '<|im_start|>' + message.role + '\n<think>\n' + reasoning_content + '\n</think>\n\n' + content }}
102
+ {%- else %}
103
+ {{- '<|im_start|>' + message.role + '\n' + content }}
104
+ {%- endif %}
105
+ {%- if message.tool_calls and message.tool_calls is iterable and message.tool_calls is not mapping %}
106
+ {%- for tool_call in message.tool_calls %}
107
+ {%- if tool_call.function is defined %}
108
+ {%- set tool_call = tool_call.function %}
109
+ {%- endif %}
110
+ {%- if loop.first %}
111
+ {%- if content|trim %}
112
+ {{- '\n\n<tool_call>\n<function=' + tool_call.name + '>\n' }}
113
+ {%- else %}
114
+ {{- '<tool_call>\n<function=' + tool_call.name + '>\n' }}
115
+ {%- endif %}
116
+ {%- else %}
117
+ {{- '\n<tool_call>\n<function=' + tool_call.name + '>\n' }}
118
+ {%- endif %}
119
+ {%- if tool_call.arguments is defined %}
120
+ {%- for args_name, args_value in tool_call.arguments|items %}
121
+ {{- '<parameter=' + args_name + '>\n' }}
122
+ {%- set args_value = args_value | tojson | safe if args_value is mapping or (args_value is sequence and args_value is not string) else args_value | string %}
123
+ {{- args_value }}
124
+ {{- '\n</parameter>\n' }}
125
+ {%- endfor %}
126
+ {%- endif %}
127
+ {{- '</function>\n</tool_call>' }}
128
+ {%- endfor %}
129
+ {%- endif %}
130
+ {{- '<|im_end|>\n' }}
131
+ {%- elif message.role == "tool" %}
132
+ {%- if loop.previtem and loop.previtem.role != "tool" %}
133
+ {{- '<|im_start|>user' }}
134
+ {%- endif %}
135
+ {{- '\n<tool_response>\n' }}
136
+ {{- content }}
137
+ {{- '\n</tool_response>' }}
138
+ {%- if not loop.last and loop.nextitem.role != "tool" %}
139
+ {{- '<|im_end|>\n' }}
140
+ {%- elif loop.last %}
141
+ {{- '<|im_end|>\n' }}
142
+ {%- endif %}
143
+ {%- else %}
144
+ {{- raise_exception('Unexpected message role.') }}
145
+ {%- endif %}
146
+ {%- endfor %}
147
+ {%- if add_generation_prompt %}
148
+ {{- '<|im_start|>assistant\n' }}
149
+ {%- if enable_thinking is defined and enable_thinking is false %}
150
+ {{- '<think>\n\n</think>\n\n' }}
151
+ {%- else %}
152
+ {{- '<think>\n' }}
153
+ {%- endif %}
154
+ {%- endif %}
config.json ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "attention_bias": false,
3
+ "attention_dropout": 0.0,
4
+ "bos_token_id": null,
5
+ "dtype": "bfloat16",
6
+ "eos_token_id": 248044,
7
+ "full_attention_interval": 4,
8
+ "head_dim": 256,
9
+ "hidden_act": "silu",
10
+ "hidden_size": 4096,
11
+ "initializer_range": 0.02,
12
+ "intermediate_size": 12288,
13
+ "layer_types": [
14
+ "linear_attention",
15
+ "linear_attention",
16
+ "linear_attention",
17
+ "full_attention",
18
+ "linear_attention",
19
+ "linear_attention",
20
+ "linear_attention",
21
+ "full_attention",
22
+ "linear_attention",
23
+ "linear_attention",
24
+ "linear_attention",
25
+ "full_attention",
26
+ "linear_attention",
27
+ "linear_attention",
28
+ "linear_attention",
29
+ "full_attention",
30
+ "linear_attention",
31
+ "linear_attention",
32
+ "linear_attention",
33
+ "full_attention",
34
+ "linear_attention",
35
+ "linear_attention",
36
+ "linear_attention",
37
+ "full_attention",
38
+ "linear_attention",
39
+ "linear_attention",
40
+ "linear_attention",
41
+ "full_attention",
42
+ "linear_attention",
43
+ "linear_attention",
44
+ "linear_attention",
45
+ "full_attention"
46
+ ],
47
+ "linear_conv_kernel_dim": 4,
48
+ "linear_key_head_dim": 128,
49
+ "linear_num_key_heads": 16,
50
+ "linear_num_value_heads": 32,
51
+ "linear_value_head_dim": 128,
52
+ "max_position_embeddings": 262144,
53
+ "model_type": "qwen3_5",
54
+ "num_attention_heads": 16,
55
+ "num_hidden_layers": 32,
56
+ "num_key_value_heads": 4,
57
+ "pad_token_id": null,
58
+ "partial_rotary_factor": 0.25,
59
+ "quantization": {
60
+ "group_size": 64,
61
+ "bits": 4,
62
+ "mode": "affine"
63
+ },
64
+ "quantization_config": {
65
+ "group_size": 64,
66
+ "bits": 4,
67
+ "mode": "affine"
68
+ },
69
+ "rms_norm_eps": 1e-06,
70
+ "rope_parameters": {
71
+ "type": "default",
72
+ "rope_theta": 10000000,
73
+ "partial_rotary_factor": 0.25
74
+ },
75
+ "rope_theta": 10000000,
76
+ "tie_word_embeddings": false,
77
+ "torch_dtype": "bfloat16",
78
+ "vocab_size": 248320
79
+ }
dataformat.py ADDED
@@ -0,0 +1,173 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ import hashlib
4
+ import json
5
+ import os
6
+ from dataclasses import dataclass, field
7
+ from typing import Any, Iterable, Sequence
8
+
9
+ CHOICE, NOUL, SCORE = "choice", "noul", "score"
10
+ QUESTION_TYPES = (CHOICE, NOUL, SCORE)
11
+
12
+
13
+ def render(value: Any, indent: int = 0) -> str:
14
+ pad = " " * indent
15
+ if value is None:
16
+ return ""
17
+ if isinstance(value, (str, int, float, bool)):
18
+ return str(value)
19
+ if isinstance(value, list):
20
+ return "\n".join(f"{pad}- {render(x, indent + 1).lstrip()}" for x in value)
21
+ return "\n".join(
22
+ f"{pad}{k}:\n{render(v, indent + 1)}" if isinstance(v, (dict, list)) else f"{pad}{k}: {render(v)}"
23
+ for k, v in value.items()
24
+ )
25
+
26
+
27
+ def option_text(name: str, desc: Any) -> str:
28
+ return name if desc is None or desc == "" else f"{name}: {render(desc)}"
29
+
30
+
31
+ def state_hash(state: Any) -> str:
32
+ text = state if isinstance(state, str) else json.dumps(state, sort_keys=True, ensure_ascii=False)
33
+ return hashlib.sha256(" ".join(text.casefold().split()).encode()).hexdigest()
34
+
35
+
36
+ @dataclass
37
+ class Question:
38
+ id: str
39
+ type: str
40
+ instructions: Any
41
+ criteria: Any = None
42
+ label: Any = None
43
+ src: str = ""
44
+ target: dict[str, float] | None = None
45
+
46
+ def __post_init__(self) -> None:
47
+ if self.type not in QUESTION_TYPES:
48
+ raise ValueError(f"unknown question type {self.type!r}")
49
+ if self.type == CHOICE and not isinstance(self.criteria, dict):
50
+ raise ValueError(f"{self.id}: choice criteria must be a dict")
51
+ if self.type == SCORE and not isinstance(self.criteria, list):
52
+ raise ValueError(f"{self.id}: score criteria must be a list")
53
+ if self.type == NOUL and self.criteria is not None and not isinstance(self.criteria, dict):
54
+ raise ValueError(f"{self.id}: noul criteria must be a dict or null")
55
+
56
+ def keys(self) -> list[str]:
57
+ if self.type == CHOICE:
58
+ return list(self.criteria)
59
+ if self.type == NOUL:
60
+ return ["false", "true"]
61
+ return [str(i) for i in range(len(self.criteria))]
62
+
63
+ def instruction_text(self) -> str:
64
+ return render(self.instructions)
65
+
66
+ def options(self) -> list[str]:
67
+ if self.type == CHOICE:
68
+ return [option_text(k, v) for k, v in self.criteria.items()]
69
+ if self.type == NOUL:
70
+ c = self.criteria or {}
71
+ return [option_text("no", c.get("false")), option_text("yes", c.get("true"))]
72
+ return [render(x) for x in self.criteria]
73
+
74
+ def label_index(self) -> int:
75
+ if self.type == CHOICE:
76
+ return self.keys().index(self.label)
77
+ return int(self.label)
78
+
79
+ def target_vector(self) -> list[float] | None:
80
+ if self.target is None:
81
+ return None
82
+ t = [float(self.target.get(k, 0.0)) for k in self.keys()]
83
+ s = sum(t)
84
+ if s <= 0:
85
+ raise ValueError(f"{self.id}: target puts no mass on any option")
86
+ return [x / s for x in t]
87
+
88
+ def to_dict(self) -> dict[str, Any]:
89
+ d: dict[str, Any] = {"type": self.type, "instructions": self.instructions}
90
+ if self.criteria is not None or self.type != NOUL:
91
+ d["criteria"] = self.criteria
92
+ d["label"] = self.label
93
+ d["src"] = self.src
94
+ if self.target is not None:
95
+ d["target"] = self.target
96
+ return d
97
+
98
+ @classmethod
99
+ def from_dict(cls, qid: str, d: dict[str, Any]) -> "Question":
100
+ return cls(id=qid, type=d["type"], instructions=d["instructions"], criteria=d.get("criteria"),
101
+ label=d.get("label"), src=d.get("src", ""), target=d.get("target"))
102
+
103
+
104
+ @dataclass
105
+ class DataFormat:
106
+ state: Any
107
+ questions: list[Question]
108
+ meta: dict[str, Any] = field(default_factory=dict)
109
+
110
+ def state_text(self) -> str:
111
+ return render(self.state)
112
+
113
+ def question(self, qid: str) -> Question:
114
+ for q in self.questions:
115
+ if q.id == qid:
116
+ return q
117
+ raise KeyError(qid)
118
+
119
+ @property
120
+ def source(self) -> str:
121
+ return self.meta.get("source", "")
122
+
123
+ @property
124
+ def id(self) -> str:
125
+ return self.meta.get("id", "")
126
+
127
+ def text_sha256(self) -> str:
128
+ return self.meta.get("text_sha256") or state_hash(self.state)
129
+
130
+ def to_dict(self) -> dict[str, Any]:
131
+ return {"state": self.state, "questions": {q.id: q.to_dict() for q in self.questions}, "_meta": self.meta}
132
+
133
+ @classmethod
134
+ def from_dict(cls, d: dict[str, Any]) -> "DataFormat":
135
+ if "state" not in d or not isinstance(d.get("questions"), dict) or not d["questions"]:
136
+ raise ValueError("a record needs a state and a non-empty questions object")
137
+ return cls(state=d["state"], questions=[Question.from_dict(k, v) for k, v in d["questions"].items()],
138
+ meta=dict(d.get("_meta", {})))
139
+
140
+ @classmethod
141
+ def from_json(cls, line: str) -> "DataFormat":
142
+ return cls.from_dict(json.loads(line))
143
+
144
+ def to_json(self) -> str:
145
+ return json.dumps(self.to_dict(), ensure_ascii=False, default=str)
146
+
147
+
148
+ def read_jsonl(path: str | os.PathLike) -> list[DataFormat]:
149
+ out = []
150
+ with open(path, encoding="utf-8") as fh:
151
+ for n, line in enumerate(fh, start=1):
152
+ if line.strip():
153
+ try:
154
+ out.append(DataFormat.from_json(line))
155
+ except (ValueError, KeyError) as e:
156
+ raise ValueError(f"{os.fspath(path)}:{n}: {e}") from e
157
+ return out
158
+
159
+
160
+ def write_jsonl(path: str | os.PathLike, records: Iterable[DataFormat | dict]) -> int:
161
+ n = 0
162
+ with open(path, "w", encoding="utf-8", newline="\n") as fh:
163
+ for r in records:
164
+ fh.write((r.to_json() if isinstance(r, DataFormat) else json.dumps(r, ensure_ascii=False, default=str)) + "\n")
165
+ n += 1
166
+ return n
167
+
168
+
169
+ def by_source(records: Sequence[DataFormat]) -> dict[str, list[DataFormat]]:
170
+ out: dict[str, list[DataFormat]] = {}
171
+ for r in records:
172
+ out.setdefault(r.source, []).append(r)
173
+ return out
example_request.json ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "state": "The customer was charged twice for one order.",
3
+ "questions": {
4
+ "billing": {
5
+ "type": "noul",
6
+ "instructions": "Is this a billing issue?"
7
+ }
8
+ }
9
+ }
export.json ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "source_checkpoint": "runs/best_step402",
3
+ "base_model": "Qwen/Qwen3.5-9B",
4
+ "dtype": "bfloat16",
5
+ "format": "markers-v3-plainchains",
6
+ "head_dim": 256,
7
+ "temperature": 1.8589280843734741,
8
+ "stage": "cispo",
9
+ "step": 402,
10
+ "sources": {
11
+ "banking77": 0,
12
+ "boolq": 1,
13
+ "agnews": 2,
14
+ "mnli": 3,
15
+ "sst5": 4,
16
+ "yelp": 5,
17
+ "trec": 6,
18
+ "dbpedia14": 7,
19
+ "amazon": 8,
20
+ "imdb": 9,
21
+ "mmlu": 10,
22
+ "emotion": 11,
23
+ "tweet_offensive": 12,
24
+ "qnli": 13,
25
+ "paws": 14,
26
+ "sciq": 15,
27
+ "contrastive": 16,
28
+ "compositional": 17,
29
+ "composition_holdout": 18,
30
+ "semif": 19,
31
+ "wanli": 20,
32
+ "mmlu_pro": 21,
33
+ "buried": 22,
34
+ "unknowable": 23,
35
+ "unknowable_control": 24,
36
+ "night2_assertion": 25,
37
+ "night2_dates": 26,
38
+ "night2_unknowable": 27,
39
+ "night2_unknowable_control": 28
40
+ },
41
+ "metrics": null,
42
+ "training_config": {
43
+ "stage": "cispo",
44
+ "run_dir": "runs/cispo_rep",
45
+ "data_dir": "data",
46
+ "model": "Qwen/Qwen3.5-9B",
47
+ "init": "runs/sft_v4/final",
48
+ "resume": null,
49
+ "lora_r": 16,
50
+ "lora_alpha": 32.0,
51
+ "lora_dropout": 0.0,
52
+ "head_dim": 256,
53
+ "lr": 5e-05,
54
+ "head_lr": 0.0001,
55
+ "weight_decay": 0.0,
56
+ "warmup": 20,
57
+ "epochs": 4,
58
+ "max_steps": 0,
59
+ "batch_size": 8,
60
+ "grad_clip": 1.0,
61
+ "max_len": 4096,
62
+ "max_seq_len": 8192,
63
+ "train_limit": 0,
64
+ "dev_limit": 0,
65
+ "eval_every": 50,
66
+ "eval_batch_size": 16,
67
+ "eval_think": true,
68
+ "eval_think_limit": 256,
69
+ "log_every": 10,
70
+ "seed": 0,
71
+ "gradient_checkpointing": true,
72
+ "prompts_per_step": 8,
73
+ "group": 8,
74
+ "nothink_per_group": 0,
75
+ "nothink_start_epoch": 1,
76
+ "max_think": 2560,
77
+ "temperature": 1.0,
78
+ "top_p": 1.0,
79
+ "eps_high": 0.2,
80
+ "updates": 1,
81
+ "train_mix_frac": 0.0,
82
+ "rollout_ce_weight": 0.5,
83
+ "anchor_ce_weight": 0.5,
84
+ "anchor_batch": 8,
85
+ "gen_batch_size": 64,
86
+ "logprob_chunk": 128,
87
+ "micro_groups": 2,
88
+ "length_hinge": 2048,
89
+ "length_hinge_end": 1024,
90
+ "length_ramp": 0,
91
+ "length_penalty_weight": 1.0,
92
+ "length_penalty_cap": 0.1,
93
+ "length_penalty_correct_only": true,
94
+ "length_hinge2": 0,
95
+ "length_hinge2_end": 1792,
96
+ "length_penalty2_weight": 0.0,
97
+ "closure_reward": 0.0,
98
+ "pad_multiple": 128,
99
+ "num_workers": 2,
100
+ "compile": true,
101
+ "graph_decode": true,
102
+ "async_rollouts": true,
103
+ "ckpt_minutes": 45.0,
104
+ "log_rollouts": 3,
105
+ "log_chain_chars": 1200,
106
+ "sft_think_frac": 0.5,
107
+ "chain_cache": "data/chains",
108
+ "filter_active": false,
109
+ "filter_min_spread": 0.02
110
+ }
111
+ }
fixtures.json ADDED
@@ -0,0 +1,338 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "id": "case0",
4
+ "request": {
5
+ "state": "The customer was charged twice for one order.",
6
+ "questions": {
7
+ "billing": {
8
+ "type": "noul",
9
+ "instructions": "Is this a billing issue?",
10
+ "label": 1
11
+ }
12
+ }
13
+ },
14
+ "ids": [
15
+ 248045,
16
+ 846,
17
+ 198,
18
+ 248060,
19
+ 760,
20
+ 5813,
21
+ 557,
22
+ 11102,
23
+ 10598,
24
+ 364,
25
+ 799,
26
+ 1906,
27
+ 13,
28
+ 198,
29
+ 248061,
30
+ 3742,
31
+ 411,
32
+ 264,
33
+ 32419,
34
+ 4125,
35
+ 30,
36
+ 198,
37
+ 248049,
38
+ 2083,
39
+ 248050,
40
+ 198,
41
+ 248049,
42
+ 9405,
43
+ 248050,
44
+ 248046,
45
+ 198,
46
+ 248045,
47
+ 74455,
48
+ 198,
49
+ 248068,
50
+ 198,
51
+ 198,
52
+ 248069,
53
+ 271,
54
+ 248049,
55
+ 2083,
56
+ 248050,
57
+ 198,
58
+ 248049,
59
+ 9405,
60
+ 248050,
61
+ 198,
62
+ 248062
63
+ ],
64
+ "option_positions": [
65
+ 41,
66
+ 45
67
+ ],
68
+ "decide_position": 47,
69
+ "keys": [
70
+ "false",
71
+ "true"
72
+ ],
73
+ "input_tokens": 48
74
+ },
75
+ {
76
+ "id": "case1",
77
+ "request": {
78
+ "state": {
79
+ "status": "delivered",
80
+ "refund_requested": false
81
+ },
82
+ "questions": {
83
+ "status": {
84
+ "type": "choice",
85
+ "instructions": "What is the order status?",
86
+ "criteria": {
87
+ "delivered": null,
88
+ "cancelled": null
89
+ },
90
+ "label": "delivered"
91
+ }
92
+ }
93
+ },
94
+ "ids": [
95
+ 248045,
96
+ 846,
97
+ 198,
98
+ 248060,
99
+ 2738,
100
+ 25,
101
+ 12238,
102
+ 198,
103
+ 66165,
104
+ 70238,
105
+ 25,
106
+ 3439,
107
+ 198,
108
+ 248061,
109
+ 3710,
110
+ 369,
111
+ 279,
112
+ 1906,
113
+ 2552,
114
+ 30,
115
+ 198,
116
+ 248049,
117
+ 9302,
118
+ 41636,
119
+ 248050,
120
+ 198,
121
+ 248049,
122
+ 91993,
123
+ 248050,
124
+ 248046,
125
+ 198,
126
+ 248045,
127
+ 74455,
128
+ 198,
129
+ 248068,
130
+ 198,
131
+ 198,
132
+ 248069,
133
+ 271,
134
+ 248049,
135
+ 9302,
136
+ 41636,
137
+ 248050,
138
+ 198,
139
+ 248049,
140
+ 91993,
141
+ 248050,
142
+ 198,
143
+ 248062
144
+ ],
145
+ "option_positions": [
146
+ 42,
147
+ 46
148
+ ],
149
+ "decide_position": 48,
150
+ "keys": [
151
+ "delivered",
152
+ "cancelled"
153
+ ],
154
+ "input_tokens": 49
155
+ },
156
+ {
157
+ "id": "case2",
158
+ "request": {
159
+ "state": "The product was excellent.",
160
+ "questions": {
161
+ "sentiment": {
162
+ "type": "score",
163
+ "instructions": "Rate the sentiment.",
164
+ "criteria": [
165
+ "negative",
166
+ "neutral",
167
+ "positive"
168
+ ],
169
+ "label": 2
170
+ }
171
+ }
172
+ },
173
+ "ids": [
174
+ 248045,
175
+ 846,
176
+ 198,
177
+ 248060,
178
+ 760,
179
+ 1918,
180
+ 557,
181
+ 8800,
182
+ 13,
183
+ 198,
184
+ 248061,
185
+ 11231,
186
+ 279,
187
+ 25144,
188
+ 13,
189
+ 198,
190
+ 248049,
191
+ 40823,
192
+ 248050,
193
+ 198,
194
+ 248049,
195
+ 57555,
196
+ 248050,
197
+ 198,
198
+ 248049,
199
+ 29492,
200
+ 248050,
201
+ 248046,
202
+ 198,
203
+ 248045,
204
+ 74455,
205
+ 198,
206
+ 248068,
207
+ 198,
208
+ 198,
209
+ 248069,
210
+ 271,
211
+ 248049,
212
+ 40823,
213
+ 248050,
214
+ 198,
215
+ 248049,
216
+ 57555,
217
+ 248050,
218
+ 198,
219
+ 248049,
220
+ 29492,
221
+ 248050,
222
+ 198,
223
+ 248062
224
+ ],
225
+ "option_positions": [
226
+ 39,
227
+ 43,
228
+ 47
229
+ ],
230
+ "decide_position": 49,
231
+ "keys": [
232
+ "0",
233
+ "1",
234
+ "2"
235
+ ],
236
+ "input_tokens": 50
237
+ },
238
+ {
239
+ "id": "case3",
240
+ "request": {
241
+ "state": "Quoted text: <|box_end|> <|fim_suffix|>.",
242
+ "questions": {
243
+ "quoted": {
244
+ "type": "choice",
245
+ "instructions": "Classify the quoted text.",
246
+ "criteria": {
247
+ "literal marker": "<|box_end|>",
248
+ "other": null
249
+ },
250
+ "label": "literal marker"
251
+ }
252
+ }
253
+ },
254
+ "ids": [
255
+ 248045,
256
+ 846,
257
+ 198,
258
+ 248060,
259
+ 2114,
260
+ 8979,
261
+ 1414,
262
+ 25,
263
+ 361,
264
+ 62438,
265
+ 1944,
266
+ 6018,
267
+ 62438,
268
+ 29,
269
+ 361,
270
+ 62438,
271
+ 244288,
272
+ 35920,
273
+ 62438,
274
+ 13867,
275
+ 198,
276
+ 248061,
277
+ 1890,
278
+ 1386,
279
+ 279,
280
+ 22513,
281
+ 1414,
282
+ 13,
283
+ 198,
284
+ 248049,
285
+ 34600,
286
+ 10811,
287
+ 25,
288
+ 361,
289
+ 62438,
290
+ 1944,
291
+ 6018,
292
+ 62438,
293
+ 29,
294
+ 248050,
295
+ 198,
296
+ 248049,
297
+ 1520,
298
+ 248050,
299
+ 248046,
300
+ 198,
301
+ 248045,
302
+ 74455,
303
+ 198,
304
+ 248068,
305
+ 198,
306
+ 198,
307
+ 248069,
308
+ 271,
309
+ 248049,
310
+ 34600,
311
+ 10811,
312
+ 25,
313
+ 361,
314
+ 62438,
315
+ 1944,
316
+ 6018,
317
+ 62438,
318
+ 29,
319
+ 248050,
320
+ 198,
321
+ 248049,
322
+ 1520,
323
+ 248050,
324
+ 198,
325
+ 248062
326
+ ],
327
+ "option_positions": [
328
+ 64,
329
+ 68
330
+ ],
331
+ "decide_position": 70,
332
+ "keys": [
333
+ "literal marker",
334
+ "other"
335
+ ],
336
+ "input_tokens": 71
337
+ }
338
+ ]
head.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2ab935dea9eecf263086d9ed6dfe97fd5558193663ecae102fd3c50ae6878d60
3
+ size 8392767
head.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ceac931470abafbc62723a297291f2c3d96627679794433585e658981798343e
3
+ size 8391016
jeeves_format.py ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Extracted from PostHog/jeeves loader/dataloader.py (MIT).
2
+ # Only training imports/unused nodes were removed; see LICENSE_JEEVES_CODE.
3
+ from __future__ import annotations
4
+ import re
5
+ from dataclasses import dataclass
6
+ from transformers import AutoTokenizer
7
+ from dataformat import DataFormat, Question
8
+ STATE, Q, OPT, OPT_END, DECIDE = ('<|fim_prefix|>', '<|fim_middle|>', '<|box_start|>', '<|box_end|>', '<|fim_suffix|>')
9
+ THINK, THINK_END = ('<think>', '</think>')
10
+ CONTROL_RE = re.compile('<\\|([A-Za-z0-9_]+)\\|>')
11
+
12
+ def sanitize(text: str) -> str:
13
+ return CONTROL_RE.sub('<¦\\1¦>', text)
14
+
15
+ @dataclass
16
+ class Example:
17
+ prompt: list[int]
18
+ remainder: list[int]
19
+ label: int
20
+ target: list[float] | None
21
+ n_options: int
22
+ source: str
23
+ source_id: int
24
+ record_id: str
25
+ question_id: str
26
+ think: list[int] | None = None
27
+ plain_prompt: list[int] | None = None
28
+
29
+ @property
30
+ def full(self) -> list[int]:
31
+ return self.prompt + self.remainder
32
+
33
+ @dataclass(frozen=True)
34
+ class Markers:
35
+ pad_id: int
36
+ opt_end_id: int
37
+ think_end_id: int
38
+ empty_think: tuple[int, ...]
39
+ pad_multiple: int
40
+
41
+ class Encoder:
42
+ FORMAT = 'markers-v3-plainchains'
43
+
44
+ def __init__(self, tokenizer_repo: str='Qwen/Qwen3.5-9B', pad_multiple: int=128):
45
+ self.tok = AutoTokenizer.from_pretrained(tokenizer_repo)
46
+ self.pad_multiple = pad_multiple
47
+ ids = self.tok.convert_tokens_to_ids([STATE, Q, OPT, OPT_END, DECIDE, THINK, THINK_END])
48
+ if any((i is None or i == self.tok.unk_token_id for i in ids)):
49
+ raise ValueError('marker tokens missing from tokenizer')
50
+ self.state_id, self.q_id, self.opt_id, self.opt_end_id, self.decide_id, self.think_id, self.think_end_id = ids
51
+ self.pad_id = self.tok.pad_token_id
52
+ special = set(self.tok.all_special_ids) | set(self.tok.get_added_vocab().values())
53
+ self.banned_ids = sorted(special - {self.think_end_id})
54
+ self.empty_think = self.encode('\n')
55
+
56
+ @property
57
+ def markers(self) -> Markers:
58
+ return Markers(self.pad_id, self.opt_end_id, self.think_end_id, tuple(self.empty_think), self.pad_multiple)
59
+
60
+ def encode(self, text: str) -> list[int]:
61
+ return self.tok(text, add_special_tokens=False).input_ids
62
+
63
+ @staticmethod
64
+ def option_block(q: Question) -> str:
65
+ return ''.join((f'{OPT}{sanitize(o)}{OPT_END}\n' for o in q.options()))
66
+
67
+ def chat(self, content: str) -> str:
68
+ return self.tok.apply_chat_template([{'role': 'user', 'content': content}], tokenize=False, add_generation_prompt=True, enable_thinking=True)
69
+
70
+ def prompt_text(self, record: DataFormat, q: Question) -> str:
71
+ return self.chat(f'{STATE}{sanitize(record.state_text())}\n{Q}{sanitize(q.instruction_text())}\n{self.option_block(q)}')
72
+
73
+ def plain_prompt_text(self, record: DataFormat, q: Question) -> str:
74
+ options = '\n'.join((sanitize(o) for o in q.options()))
75
+ return self.chat(f'Context:\n{sanitize(record.state_text())}\n\nQuestion: {sanitize(q.instruction_text())}\n\nOptions:\n{options}')
76
+
77
+ def remainder_text(self, q: Question) -> str:
78
+ return f'{THINK_END}\n\n{self.option_block(q)}{DECIDE}'
79
+
80
+ def example(self, record: DataFormat, q: Question, source_id: int) -> Example:
81
+ prompt = self.encode(self.prompt_text(record, q))
82
+ remainder = self.encode(self.remainder_text(q))
83
+ if prompt[-2:] != self.encode(f'{THINK}\n') or remainder[0] != self.think_end_id or remainder[-1] != self.decide_id:
84
+ raise ValueError(f'unexpected layout for {record.id}/{q.id}')
85
+ if remainder.count(self.opt_end_id) != len(q.options()):
86
+ raise ValueError(f'option boundary count mismatch for {record.id}/{q.id}')
87
+ return Example(prompt=prompt, remainder=remainder, label=q.label_index(), target=q.target_vector(), n_options=len(q.options()), source=record.source, source_id=source_id, record_id=record.id, question_id=q.id, plain_prompt=self.encode(self.plain_prompt_text(record, q)))
88
+
89
+ def readout_positions(ids: list[int], m: Markers) -> tuple[list[int], int]:
90
+ start = len(ids) - 1 - ids[::-1].index(m.think_end_id)
91
+ opts = [i for i in range(start, len(ids)) if ids[i] == m.opt_end_id]
92
+ return (opts, len(ids) - 1)
jeeves_support.py ADDED
@@ -0,0 +1,177 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Standard-library helpers for the Jeeves CPU conversion notebook."""
2
+ from __future__ import annotations
3
+ import ast
4
+ import hashlib
5
+ import json
6
+ import math
7
+ import os
8
+ import struct
9
+ from pathlib import Path
10
+
11
+ FORMAT_VERSION = "jeeves-mlx-cpu-v1"
12
+
13
+
14
+ def write_json(path, value):
15
+ path = Path(path)
16
+ path.parent.mkdir(parents=True, exist_ok=True)
17
+ temp = path.with_name(path.name + ".tmp")
18
+ temp.write_text(json.dumps(value, indent=2, ensure_ascii=False, allow_nan=False) + "\n", encoding="utf-8")
19
+ os.replace(temp, path)
20
+
21
+
22
+ def read_json(path):
23
+ return json.loads(Path(path).read_text(encoding="utf-8"))
24
+
25
+
26
+ def sha256(path, block_size=8 * 1024 * 1024):
27
+ h = hashlib.sha256()
28
+ with Path(path).open("rb") as stream:
29
+ for chunk in iter(lambda: stream.read(block_size), b""):
30
+ h.update(chunk)
31
+ return h.hexdigest()
32
+
33
+
34
+ def fingerprint(value):
35
+ return hashlib.sha256(json.dumps(value, sort_keys=True, separators=(",", ":")).encode()).hexdigest()
36
+
37
+
38
+ def adapt_config(original):
39
+ """Adapt metadata only. Leave all tensor transforms to MLX-LM."""
40
+ cfg = json.loads(json.dumps(original))
41
+ if "text_config" in cfg:
42
+ raise ValueError("This notebook targets the flat Jeeves export, not a new nested export.")
43
+ required = ("layer_types", "num_hidden_layers", "rope_theta", "partial_rotary_factor", "hidden_size")
44
+ for key in required:
45
+ if key not in cfg:
46
+ raise ValueError(f"Missing source configuration field: {key}")
47
+ expected = ["full_attention" if (i + 1) % 4 == 0 else "linear_attention"
48
+ for i in range(cfg["num_hidden_layers"])]
49
+ if cfg["layer_types"] != expected:
50
+ raise ValueError("Layer schedule changed. Do not guess full_attention_interval.")
51
+ if cfg.get("hidden_act", "silu") != "silu" or cfg.get("num_experts", 0):
52
+ raise ValueError("Unsupported architecture change in this source revision.")
53
+ if cfg.get("quantization") or cfg.get("quantization_config"):
54
+ raise ValueError("Expected unquantized, fused Jeeves weights.")
55
+ cfg["model_type"] = "qwen3_5"
56
+ cfg["full_attention_interval"] = 4
57
+ cfg["rope_parameters"] = {
58
+ "type": "default", "rope_theta": cfg["rope_theta"],
59
+ "partial_rotary_factor": cfg["partial_rotary_factor"],
60
+ }
61
+ cfg["torch_dtype"] = cfg.get("dtype", "bfloat16")
62
+ return cfg
63
+
64
+
65
+ def safetensors_header(path):
66
+ """Validate container length/offsets without loading multi-GB tensors."""
67
+ path = Path(path)
68
+ size = path.stat().st_size
69
+ with path.open("rb") as stream:
70
+ raw = stream.read(8)
71
+ if len(raw) != 8:
72
+ raise ValueError(f"Truncated Safetensors file: {path}")
73
+ length = struct.unpack("<Q", raw)[0]
74
+ if length < 2 or length > min(64 * 1024 * 1024, size - 8):
75
+ raise ValueError(f"Invalid Safetensors header length: {path}")
76
+ header = json.loads(stream.read(length))
77
+ data_bytes = size - 8 - length
78
+ tensors = {k: v for k, v in header.items() if k != "__metadata__"}
79
+ widths = {"BOOL": 1, "U8": 1, "I8": 1, "F8_E4M3": 1, "F8_E5M2": 1,
80
+ "I16": 2, "U16": 2, "F16": 2, "BF16": 2, "I32": 4, "U32": 4,
81
+ "F32": 4, "F64": 8, "I64": 8, "U64": 8}
82
+ spans = []
83
+ for name, t in tensors.items():
84
+ start, end = t["data_offsets"]
85
+ shape = t["shape"]
86
+ if any(not isinstance(x, int) or x < 0 for x in shape):
87
+ raise ValueError(f"Invalid tensor shape: {name}")
88
+ if not (0 <= start <= end <= data_bytes):
89
+ raise ValueError(f"Invalid tensor offsets: {path.name}:{name}")
90
+ if t["dtype"] in widths and end - start != math.prod(shape) * widths[t["dtype"]]:
91
+ raise ValueError(f"Tensor byte count mismatch: {name}")
92
+ spans.append((start, end))
93
+ cursor = 0
94
+ for start, end in sorted(spans):
95
+ if start != cursor:
96
+ raise ValueError(f"Tensor gaps/overlaps in {path}")
97
+ cursor = end
98
+ if cursor != data_bytes:
99
+ raise ValueError(f"Unexpected trailing data in {path}")
100
+ return tensors
101
+
102
+
103
+ def inspect_model(directory):
104
+ directory = Path(directory)
105
+ index = read_json(directory / "model.safetensors.index.json")
106
+ mapping = index["weight_map"]
107
+ found, nbytes = {}, 0
108
+ for filename in sorted(set(mapping.values())):
109
+ if Path(filename).name != filename:
110
+ raise ValueError("Unexpected nested shard path")
111
+ path = directory / filename
112
+ header = safetensors_header(path)
113
+ for key, info in header.items():
114
+ if key in found or mapping.get(key) != filename:
115
+ raise ValueError(f"Duplicate or incorrectly indexed tensor: {key}")
116
+ found[key] = info
117
+ nbytes += info["data_offsets"][1] - info["data_offsets"][0]
118
+ if set(mapping) != set(found):
119
+ raise ValueError("Shard/index tensor inventory mismatch")
120
+ advertised = index.get("metadata", {}).get("total_size")
121
+ if advertised is not None and advertised != nbytes:
122
+ raise ValueError(f"Tensor byte total mismatch: {advertised} != {nbytes}")
123
+ return {"tensor_count": len(found), "tensor_bytes": nbytes, "tensors": found}
124
+
125
+
126
+ def extract_encoder(source_text):
127
+ """Retain upstream encoder AST nodes; remove only training/PyTorch imports."""
128
+ parsed = ast.parse(source_text)
129
+ wanted = {"sanitize", "Example", "Markers", "Encoder", "readout_positions"}
130
+ assignments = {"STATE", "Q", "OPT", "OPT_END", "DECIDE", "THINK", "THINK_END", "CONTROL_RE"}
131
+ nodes, seen = [], set()
132
+ for node in parsed.body:
133
+ if isinstance(node, (ast.ClassDef, ast.FunctionDef)) and node.name in wanted:
134
+ nodes.append(node)
135
+ seen.add(node.name)
136
+ elif isinstance(node, ast.Assign):
137
+ names = {n.id for target in node.targets for n in ast.walk(target) if isinstance(n, ast.Name)}
138
+ if names and names <= assignments:
139
+ nodes.append(node)
140
+ seen.update(names)
141
+ if seen != wanted | assignments:
142
+ raise ValueError(f"Upstream encoder structure changed: missing {(wanted | assignments) - seen}")
143
+ imports = ast.parse("from __future__ import annotations\nimport re\nfrom dataclasses import dataclass\n"
144
+ "from transformers import AutoTokenizer\nfrom dataformat import DataFormat, Question\n").body
145
+ module = ast.Module(body=imports + nodes, type_ignores=[])
146
+ ast.fix_missing_locations(module)
147
+ text = ("# Extracted from PostHog/jeeves loader/dataloader.py (MIT).\n"
148
+ "# Only training imports/unused nodes were removed; see LICENSE_JEEVES_CODE.\n" + ast.unparse(module) + "\n")
149
+ compile(text, "jeeves_format.py", "exec")
150
+ return text
151
+
152
+
153
+ def build_manifest(directory, identity):
154
+ directory = Path(directory)
155
+ files = {}
156
+ for path in sorted(directory.rglob("*")):
157
+ if not path.is_file() or path.name == "PACKAGE_MANIFEST.json" or "__pycache__" in path.parts:
158
+ continue
159
+ name = path.relative_to(directory).as_posix()
160
+ files[name] = {"bytes": path.stat().st_size, "sha256": sha256(path)}
161
+ value = {"schema": FORMAT_VERSION, "identity": identity, "files": files}
162
+ write_json(directory / "PACKAGE_MANIFEST.json", value)
163
+ return value
164
+
165
+
166
+ def verify_manifest(directory, identity=None):
167
+ directory = Path(directory)
168
+ manifest = read_json(directory / "PACKAGE_MANIFEST.json")
169
+ if identity is not None and manifest["identity"] != identity:
170
+ raise ValueError("Package belongs to a different conversion identity.")
171
+ for name, item in manifest["files"].items():
172
+ path = directory / name
173
+ if not path.is_relative_to(directory) or ".." in Path(name).parts:
174
+ raise ValueError("Unsafe manifest path")
175
+ if not path.is_file() or path.stat().st_size != item["bytes"] or sha256(path) != item["sha256"]:
176
+ raise ValueError(f"Package integrity check failed: {name}")
177
+ return manifest
model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a7f3c503106f38d7bff3a55cb16b82bb5085fd8247893ade8a1de6ed1750e1f1
3
+ size 5038161163
model.safetensors.index.json ADDED
@@ -0,0 +1,935 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "metadata": {
3
+ "total_size": 5038040064,
4
+ "total_parameters": 8953801728
5
+ },
6
+ "weight_map": {
7
+ "language_model.lm_head.biases": "model.safetensors",
8
+ "language_model.lm_head.scales": "model.safetensors",
9
+ "language_model.lm_head.weight": "model.safetensors",
10
+ "language_model.model.embed_tokens.biases": "model.safetensors",
11
+ "language_model.model.embed_tokens.scales": "model.safetensors",
12
+ "language_model.model.embed_tokens.weight": "model.safetensors",
13
+ "language_model.model.layers.0.input_layernorm.weight": "model.safetensors",
14
+ "language_model.model.layers.0.linear_attn.A_log": "model.safetensors",
15
+ "language_model.model.layers.0.linear_attn.conv1d.weight": "model.safetensors",
16
+ "language_model.model.layers.0.linear_attn.dt_bias": "model.safetensors",
17
+ "language_model.model.layers.0.linear_attn.in_proj_a.biases": "model.safetensors",
18
+ "language_model.model.layers.0.linear_attn.in_proj_a.scales": "model.safetensors",
19
+ "language_model.model.layers.0.linear_attn.in_proj_a.weight": "model.safetensors",
20
+ "language_model.model.layers.0.linear_attn.in_proj_b.biases": "model.safetensors",
21
+ "language_model.model.layers.0.linear_attn.in_proj_b.scales": "model.safetensors",
22
+ "language_model.model.layers.0.linear_attn.in_proj_b.weight": "model.safetensors",
23
+ "language_model.model.layers.0.linear_attn.in_proj_qkv.biases": "model.safetensors",
24
+ "language_model.model.layers.0.linear_attn.in_proj_qkv.scales": "model.safetensors",
25
+ "language_model.model.layers.0.linear_attn.in_proj_qkv.weight": "model.safetensors",
26
+ "language_model.model.layers.0.linear_attn.in_proj_z.biases": "model.safetensors",
27
+ "language_model.model.layers.0.linear_attn.in_proj_z.scales": "model.safetensors",
28
+ "language_model.model.layers.0.linear_attn.in_proj_z.weight": "model.safetensors",
29
+ "language_model.model.layers.0.linear_attn.norm.weight": "model.safetensors",
30
+ "language_model.model.layers.0.linear_attn.out_proj.biases": "model.safetensors",
31
+ "language_model.model.layers.0.linear_attn.out_proj.scales": "model.safetensors",
32
+ "language_model.model.layers.0.linear_attn.out_proj.weight": "model.safetensors",
33
+ "language_model.model.layers.0.mlp.down_proj.biases": "model.safetensors",
34
+ "language_model.model.layers.0.mlp.down_proj.scales": "model.safetensors",
35
+ "language_model.model.layers.0.mlp.down_proj.weight": "model.safetensors",
36
+ "language_model.model.layers.0.mlp.gate_proj.biases": "model.safetensors",
37
+ "language_model.model.layers.0.mlp.gate_proj.scales": "model.safetensors",
38
+ "language_model.model.layers.0.mlp.gate_proj.weight": "model.safetensors",
39
+ "language_model.model.layers.0.mlp.up_proj.biases": "model.safetensors",
40
+ "language_model.model.layers.0.mlp.up_proj.scales": "model.safetensors",
41
+ "language_model.model.layers.0.mlp.up_proj.weight": "model.safetensors",
42
+ "language_model.model.layers.0.post_attention_layernorm.weight": "model.safetensors",
43
+ "language_model.model.layers.1.input_layernorm.weight": "model.safetensors",
44
+ "language_model.model.layers.1.linear_attn.A_log": "model.safetensors",
45
+ "language_model.model.layers.1.linear_attn.conv1d.weight": "model.safetensors",
46
+ "language_model.model.layers.1.linear_attn.dt_bias": "model.safetensors",
47
+ "language_model.model.layers.1.linear_attn.in_proj_a.biases": "model.safetensors",
48
+ "language_model.model.layers.1.linear_attn.in_proj_a.scales": "model.safetensors",
49
+ "language_model.model.layers.1.linear_attn.in_proj_a.weight": "model.safetensors",
50
+ "language_model.model.layers.1.linear_attn.in_proj_b.biases": "model.safetensors",
51
+ "language_model.model.layers.1.linear_attn.in_proj_b.scales": "model.safetensors",
52
+ "language_model.model.layers.1.linear_attn.in_proj_b.weight": "model.safetensors",
53
+ "language_model.model.layers.1.linear_attn.in_proj_qkv.biases": "model.safetensors",
54
+ "language_model.model.layers.1.linear_attn.in_proj_qkv.scales": "model.safetensors",
55
+ "language_model.model.layers.1.linear_attn.in_proj_qkv.weight": "model.safetensors",
56
+ "language_model.model.layers.1.linear_attn.in_proj_z.biases": "model.safetensors",
57
+ "language_model.model.layers.1.linear_attn.in_proj_z.scales": "model.safetensors",
58
+ "language_model.model.layers.1.linear_attn.in_proj_z.weight": "model.safetensors",
59
+ "language_model.model.layers.1.linear_attn.norm.weight": "model.safetensors",
60
+ "language_model.model.layers.1.linear_attn.out_proj.biases": "model.safetensors",
61
+ "language_model.model.layers.1.linear_attn.out_proj.scales": "model.safetensors",
62
+ "language_model.model.layers.1.linear_attn.out_proj.weight": "model.safetensors",
63
+ "language_model.model.layers.1.mlp.down_proj.biases": "model.safetensors",
64
+ "language_model.model.layers.1.mlp.down_proj.scales": "model.safetensors",
65
+ "language_model.model.layers.1.mlp.down_proj.weight": "model.safetensors",
66
+ "language_model.model.layers.1.mlp.gate_proj.biases": "model.safetensors",
67
+ "language_model.model.layers.1.mlp.gate_proj.scales": "model.safetensors",
68
+ "language_model.model.layers.1.mlp.gate_proj.weight": "model.safetensors",
69
+ "language_model.model.layers.1.mlp.up_proj.biases": "model.safetensors",
70
+ "language_model.model.layers.1.mlp.up_proj.scales": "model.safetensors",
71
+ "language_model.model.layers.1.mlp.up_proj.weight": "model.safetensors",
72
+ "language_model.model.layers.1.post_attention_layernorm.weight": "model.safetensors",
73
+ "language_model.model.layers.10.input_layernorm.weight": "model.safetensors",
74
+ "language_model.model.layers.10.linear_attn.A_log": "model.safetensors",
75
+ "language_model.model.layers.10.linear_attn.conv1d.weight": "model.safetensors",
76
+ "language_model.model.layers.10.linear_attn.dt_bias": "model.safetensors",
77
+ "language_model.model.layers.10.linear_attn.in_proj_a.biases": "model.safetensors",
78
+ "language_model.model.layers.10.linear_attn.in_proj_a.scales": "model.safetensors",
79
+ "language_model.model.layers.10.linear_attn.in_proj_a.weight": "model.safetensors",
80
+ "language_model.model.layers.10.linear_attn.in_proj_b.biases": "model.safetensors",
81
+ "language_model.model.layers.10.linear_attn.in_proj_b.scales": "model.safetensors",
82
+ "language_model.model.layers.10.linear_attn.in_proj_b.weight": "model.safetensors",
83
+ "language_model.model.layers.10.linear_attn.in_proj_qkv.biases": "model.safetensors",
84
+ "language_model.model.layers.10.linear_attn.in_proj_qkv.scales": "model.safetensors",
85
+ "language_model.model.layers.10.linear_attn.in_proj_qkv.weight": "model.safetensors",
86
+ "language_model.model.layers.10.linear_attn.in_proj_z.biases": "model.safetensors",
87
+ "language_model.model.layers.10.linear_attn.in_proj_z.scales": "model.safetensors",
88
+ "language_model.model.layers.10.linear_attn.in_proj_z.weight": "model.safetensors",
89
+ "language_model.model.layers.10.linear_attn.norm.weight": "model.safetensors",
90
+ "language_model.model.layers.10.linear_attn.out_proj.biases": "model.safetensors",
91
+ "language_model.model.layers.10.linear_attn.out_proj.scales": "model.safetensors",
92
+ "language_model.model.layers.10.linear_attn.out_proj.weight": "model.safetensors",
93
+ "language_model.model.layers.10.mlp.down_proj.biases": "model.safetensors",
94
+ "language_model.model.layers.10.mlp.down_proj.scales": "model.safetensors",
95
+ "language_model.model.layers.10.mlp.down_proj.weight": "model.safetensors",
96
+ "language_model.model.layers.10.mlp.gate_proj.biases": "model.safetensors",
97
+ "language_model.model.layers.10.mlp.gate_proj.scales": "model.safetensors",
98
+ "language_model.model.layers.10.mlp.gate_proj.weight": "model.safetensors",
99
+ "language_model.model.layers.10.mlp.up_proj.biases": "model.safetensors",
100
+ "language_model.model.layers.10.mlp.up_proj.scales": "model.safetensors",
101
+ "language_model.model.layers.10.mlp.up_proj.weight": "model.safetensors",
102
+ "language_model.model.layers.10.post_attention_layernorm.weight": "model.safetensors",
103
+ "language_model.model.layers.11.input_layernorm.weight": "model.safetensors",
104
+ "language_model.model.layers.11.mlp.down_proj.biases": "model.safetensors",
105
+ "language_model.model.layers.11.mlp.down_proj.scales": "model.safetensors",
106
+ "language_model.model.layers.11.mlp.down_proj.weight": "model.safetensors",
107
+ "language_model.model.layers.11.mlp.gate_proj.biases": "model.safetensors",
108
+ "language_model.model.layers.11.mlp.gate_proj.scales": "model.safetensors",
109
+ "language_model.model.layers.11.mlp.gate_proj.weight": "model.safetensors",
110
+ "language_model.model.layers.11.mlp.up_proj.biases": "model.safetensors",
111
+ "language_model.model.layers.11.mlp.up_proj.scales": "model.safetensors",
112
+ "language_model.model.layers.11.mlp.up_proj.weight": "model.safetensors",
113
+ "language_model.model.layers.11.post_attention_layernorm.weight": "model.safetensors",
114
+ "language_model.model.layers.11.self_attn.k_norm.weight": "model.safetensors",
115
+ "language_model.model.layers.11.self_attn.k_proj.biases": "model.safetensors",
116
+ "language_model.model.layers.11.self_attn.k_proj.scales": "model.safetensors",
117
+ "language_model.model.layers.11.self_attn.k_proj.weight": "model.safetensors",
118
+ "language_model.model.layers.11.self_attn.o_proj.biases": "model.safetensors",
119
+ "language_model.model.layers.11.self_attn.o_proj.scales": "model.safetensors",
120
+ "language_model.model.layers.11.self_attn.o_proj.weight": "model.safetensors",
121
+ "language_model.model.layers.11.self_attn.q_norm.weight": "model.safetensors",
122
+ "language_model.model.layers.11.self_attn.q_proj.biases": "model.safetensors",
123
+ "language_model.model.layers.11.self_attn.q_proj.scales": "model.safetensors",
124
+ "language_model.model.layers.11.self_attn.q_proj.weight": "model.safetensors",
125
+ "language_model.model.layers.11.self_attn.v_proj.biases": "model.safetensors",
126
+ "language_model.model.layers.11.self_attn.v_proj.scales": "model.safetensors",
127
+ "language_model.model.layers.11.self_attn.v_proj.weight": "model.safetensors",
128
+ "language_model.model.layers.12.input_layernorm.weight": "model.safetensors",
129
+ "language_model.model.layers.12.linear_attn.A_log": "model.safetensors",
130
+ "language_model.model.layers.12.linear_attn.conv1d.weight": "model.safetensors",
131
+ "language_model.model.layers.12.linear_attn.dt_bias": "model.safetensors",
132
+ "language_model.model.layers.12.linear_attn.in_proj_a.biases": "model.safetensors",
133
+ "language_model.model.layers.12.linear_attn.in_proj_a.scales": "model.safetensors",
134
+ "language_model.model.layers.12.linear_attn.in_proj_a.weight": "model.safetensors",
135
+ "language_model.model.layers.12.linear_attn.in_proj_b.biases": "model.safetensors",
136
+ "language_model.model.layers.12.linear_attn.in_proj_b.scales": "model.safetensors",
137
+ "language_model.model.layers.12.linear_attn.in_proj_b.weight": "model.safetensors",
138
+ "language_model.model.layers.12.linear_attn.in_proj_qkv.biases": "model.safetensors",
139
+ "language_model.model.layers.12.linear_attn.in_proj_qkv.scales": "model.safetensors",
140
+ "language_model.model.layers.12.linear_attn.in_proj_qkv.weight": "model.safetensors",
141
+ "language_model.model.layers.12.linear_attn.in_proj_z.biases": "model.safetensors",
142
+ "language_model.model.layers.12.linear_attn.in_proj_z.scales": "model.safetensors",
143
+ "language_model.model.layers.12.linear_attn.in_proj_z.weight": "model.safetensors",
144
+ "language_model.model.layers.12.linear_attn.norm.weight": "model.safetensors",
145
+ "language_model.model.layers.12.linear_attn.out_proj.biases": "model.safetensors",
146
+ "language_model.model.layers.12.linear_attn.out_proj.scales": "model.safetensors",
147
+ "language_model.model.layers.12.linear_attn.out_proj.weight": "model.safetensors",
148
+ "language_model.model.layers.12.mlp.down_proj.biases": "model.safetensors",
149
+ "language_model.model.layers.12.mlp.down_proj.scales": "model.safetensors",
150
+ "language_model.model.layers.12.mlp.down_proj.weight": "model.safetensors",
151
+ "language_model.model.layers.12.mlp.gate_proj.biases": "model.safetensors",
152
+ "language_model.model.layers.12.mlp.gate_proj.scales": "model.safetensors",
153
+ "language_model.model.layers.12.mlp.gate_proj.weight": "model.safetensors",
154
+ "language_model.model.layers.12.mlp.up_proj.biases": "model.safetensors",
155
+ "language_model.model.layers.12.mlp.up_proj.scales": "model.safetensors",
156
+ "language_model.model.layers.12.mlp.up_proj.weight": "model.safetensors",
157
+ "language_model.model.layers.12.post_attention_layernorm.weight": "model.safetensors",
158
+ "language_model.model.layers.13.input_layernorm.weight": "model.safetensors",
159
+ "language_model.model.layers.13.linear_attn.A_log": "model.safetensors",
160
+ "language_model.model.layers.13.linear_attn.conv1d.weight": "model.safetensors",
161
+ "language_model.model.layers.13.linear_attn.dt_bias": "model.safetensors",
162
+ "language_model.model.layers.13.linear_attn.in_proj_a.biases": "model.safetensors",
163
+ "language_model.model.layers.13.linear_attn.in_proj_a.scales": "model.safetensors",
164
+ "language_model.model.layers.13.linear_attn.in_proj_a.weight": "model.safetensors",
165
+ "language_model.model.layers.13.linear_attn.in_proj_b.biases": "model.safetensors",
166
+ "language_model.model.layers.13.linear_attn.in_proj_b.scales": "model.safetensors",
167
+ "language_model.model.layers.13.linear_attn.in_proj_b.weight": "model.safetensors",
168
+ "language_model.model.layers.13.linear_attn.in_proj_qkv.biases": "model.safetensors",
169
+ "language_model.model.layers.13.linear_attn.in_proj_qkv.scales": "model.safetensors",
170
+ "language_model.model.layers.13.linear_attn.in_proj_qkv.weight": "model.safetensors",
171
+ "language_model.model.layers.13.linear_attn.in_proj_z.biases": "model.safetensors",
172
+ "language_model.model.layers.13.linear_attn.in_proj_z.scales": "model.safetensors",
173
+ "language_model.model.layers.13.linear_attn.in_proj_z.weight": "model.safetensors",
174
+ "language_model.model.layers.13.linear_attn.norm.weight": "model.safetensors",
175
+ "language_model.model.layers.13.linear_attn.out_proj.biases": "model.safetensors",
176
+ "language_model.model.layers.13.linear_attn.out_proj.scales": "model.safetensors",
177
+ "language_model.model.layers.13.linear_attn.out_proj.weight": "model.safetensors",
178
+ "language_model.model.layers.13.mlp.down_proj.biases": "model.safetensors",
179
+ "language_model.model.layers.13.mlp.down_proj.scales": "model.safetensors",
180
+ "language_model.model.layers.13.mlp.down_proj.weight": "model.safetensors",
181
+ "language_model.model.layers.13.mlp.gate_proj.biases": "model.safetensors",
182
+ "language_model.model.layers.13.mlp.gate_proj.scales": "model.safetensors",
183
+ "language_model.model.layers.13.mlp.gate_proj.weight": "model.safetensors",
184
+ "language_model.model.layers.13.mlp.up_proj.biases": "model.safetensors",
185
+ "language_model.model.layers.13.mlp.up_proj.scales": "model.safetensors",
186
+ "language_model.model.layers.13.mlp.up_proj.weight": "model.safetensors",
187
+ "language_model.model.layers.13.post_attention_layernorm.weight": "model.safetensors",
188
+ "language_model.model.layers.14.input_layernorm.weight": "model.safetensors",
189
+ "language_model.model.layers.14.linear_attn.A_log": "model.safetensors",
190
+ "language_model.model.layers.14.linear_attn.conv1d.weight": "model.safetensors",
191
+ "language_model.model.layers.14.linear_attn.dt_bias": "model.safetensors",
192
+ "language_model.model.layers.14.linear_attn.in_proj_a.biases": "model.safetensors",
193
+ "language_model.model.layers.14.linear_attn.in_proj_a.scales": "model.safetensors",
194
+ "language_model.model.layers.14.linear_attn.in_proj_a.weight": "model.safetensors",
195
+ "language_model.model.layers.14.linear_attn.in_proj_b.biases": "model.safetensors",
196
+ "language_model.model.layers.14.linear_attn.in_proj_b.scales": "model.safetensors",
197
+ "language_model.model.layers.14.linear_attn.in_proj_b.weight": "model.safetensors",
198
+ "language_model.model.layers.14.linear_attn.in_proj_qkv.biases": "model.safetensors",
199
+ "language_model.model.layers.14.linear_attn.in_proj_qkv.scales": "model.safetensors",
200
+ "language_model.model.layers.14.linear_attn.in_proj_qkv.weight": "model.safetensors",
201
+ "language_model.model.layers.14.linear_attn.in_proj_z.biases": "model.safetensors",
202
+ "language_model.model.layers.14.linear_attn.in_proj_z.scales": "model.safetensors",
203
+ "language_model.model.layers.14.linear_attn.in_proj_z.weight": "model.safetensors",
204
+ "language_model.model.layers.14.linear_attn.norm.weight": "model.safetensors",
205
+ "language_model.model.layers.14.linear_attn.out_proj.biases": "model.safetensors",
206
+ "language_model.model.layers.14.linear_attn.out_proj.scales": "model.safetensors",
207
+ "language_model.model.layers.14.linear_attn.out_proj.weight": "model.safetensors",
208
+ "language_model.model.layers.14.mlp.down_proj.biases": "model.safetensors",
209
+ "language_model.model.layers.14.mlp.down_proj.scales": "model.safetensors",
210
+ "language_model.model.layers.14.mlp.down_proj.weight": "model.safetensors",
211
+ "language_model.model.layers.14.mlp.gate_proj.biases": "model.safetensors",
212
+ "language_model.model.layers.14.mlp.gate_proj.scales": "model.safetensors",
213
+ "language_model.model.layers.14.mlp.gate_proj.weight": "model.safetensors",
214
+ "language_model.model.layers.14.mlp.up_proj.biases": "model.safetensors",
215
+ "language_model.model.layers.14.mlp.up_proj.scales": "model.safetensors",
216
+ "language_model.model.layers.14.mlp.up_proj.weight": "model.safetensors",
217
+ "language_model.model.layers.14.post_attention_layernorm.weight": "model.safetensors",
218
+ "language_model.model.layers.15.input_layernorm.weight": "model.safetensors",
219
+ "language_model.model.layers.15.mlp.down_proj.biases": "model.safetensors",
220
+ "language_model.model.layers.15.mlp.down_proj.scales": "model.safetensors",
221
+ "language_model.model.layers.15.mlp.down_proj.weight": "model.safetensors",
222
+ "language_model.model.layers.15.mlp.gate_proj.biases": "model.safetensors",
223
+ "language_model.model.layers.15.mlp.gate_proj.scales": "model.safetensors",
224
+ "language_model.model.layers.15.mlp.gate_proj.weight": "model.safetensors",
225
+ "language_model.model.layers.15.mlp.up_proj.biases": "model.safetensors",
226
+ "language_model.model.layers.15.mlp.up_proj.scales": "model.safetensors",
227
+ "language_model.model.layers.15.mlp.up_proj.weight": "model.safetensors",
228
+ "language_model.model.layers.15.post_attention_layernorm.weight": "model.safetensors",
229
+ "language_model.model.layers.15.self_attn.k_norm.weight": "model.safetensors",
230
+ "language_model.model.layers.15.self_attn.k_proj.biases": "model.safetensors",
231
+ "language_model.model.layers.15.self_attn.k_proj.scales": "model.safetensors",
232
+ "language_model.model.layers.15.self_attn.k_proj.weight": "model.safetensors",
233
+ "language_model.model.layers.15.self_attn.o_proj.biases": "model.safetensors",
234
+ "language_model.model.layers.15.self_attn.o_proj.scales": "model.safetensors",
235
+ "language_model.model.layers.15.self_attn.o_proj.weight": "model.safetensors",
236
+ "language_model.model.layers.15.self_attn.q_norm.weight": "model.safetensors",
237
+ "language_model.model.layers.15.self_attn.q_proj.biases": "model.safetensors",
238
+ "language_model.model.layers.15.self_attn.q_proj.scales": "model.safetensors",
239
+ "language_model.model.layers.15.self_attn.q_proj.weight": "model.safetensors",
240
+ "language_model.model.layers.15.self_attn.v_proj.biases": "model.safetensors",
241
+ "language_model.model.layers.15.self_attn.v_proj.scales": "model.safetensors",
242
+ "language_model.model.layers.15.self_attn.v_proj.weight": "model.safetensors",
243
+ "language_model.model.layers.16.input_layernorm.weight": "model.safetensors",
244
+ "language_model.model.layers.16.linear_attn.A_log": "model.safetensors",
245
+ "language_model.model.layers.16.linear_attn.conv1d.weight": "model.safetensors",
246
+ "language_model.model.layers.16.linear_attn.dt_bias": "model.safetensors",
247
+ "language_model.model.layers.16.linear_attn.in_proj_a.biases": "model.safetensors",
248
+ "language_model.model.layers.16.linear_attn.in_proj_a.scales": "model.safetensors",
249
+ "language_model.model.layers.16.linear_attn.in_proj_a.weight": "model.safetensors",
250
+ "language_model.model.layers.16.linear_attn.in_proj_b.biases": "model.safetensors",
251
+ "language_model.model.layers.16.linear_attn.in_proj_b.scales": "model.safetensors",
252
+ "language_model.model.layers.16.linear_attn.in_proj_b.weight": "model.safetensors",
253
+ "language_model.model.layers.16.linear_attn.in_proj_qkv.biases": "model.safetensors",
254
+ "language_model.model.layers.16.linear_attn.in_proj_qkv.scales": "model.safetensors",
255
+ "language_model.model.layers.16.linear_attn.in_proj_qkv.weight": "model.safetensors",
256
+ "language_model.model.layers.16.linear_attn.in_proj_z.biases": "model.safetensors",
257
+ "language_model.model.layers.16.linear_attn.in_proj_z.scales": "model.safetensors",
258
+ "language_model.model.layers.16.linear_attn.in_proj_z.weight": "model.safetensors",
259
+ "language_model.model.layers.16.linear_attn.norm.weight": "model.safetensors",
260
+ "language_model.model.layers.16.linear_attn.out_proj.biases": "model.safetensors",
261
+ "language_model.model.layers.16.linear_attn.out_proj.scales": "model.safetensors",
262
+ "language_model.model.layers.16.linear_attn.out_proj.weight": "model.safetensors",
263
+ "language_model.model.layers.16.mlp.down_proj.biases": "model.safetensors",
264
+ "language_model.model.layers.16.mlp.down_proj.scales": "model.safetensors",
265
+ "language_model.model.layers.16.mlp.down_proj.weight": "model.safetensors",
266
+ "language_model.model.layers.16.mlp.gate_proj.biases": "model.safetensors",
267
+ "language_model.model.layers.16.mlp.gate_proj.scales": "model.safetensors",
268
+ "language_model.model.layers.16.mlp.gate_proj.weight": "model.safetensors",
269
+ "language_model.model.layers.16.mlp.up_proj.biases": "model.safetensors",
270
+ "language_model.model.layers.16.mlp.up_proj.scales": "model.safetensors",
271
+ "language_model.model.layers.16.mlp.up_proj.weight": "model.safetensors",
272
+ "language_model.model.layers.16.post_attention_layernorm.weight": "model.safetensors",
273
+ "language_model.model.layers.17.input_layernorm.weight": "model.safetensors",
274
+ "language_model.model.layers.17.linear_attn.A_log": "model.safetensors",
275
+ "language_model.model.layers.17.linear_attn.conv1d.weight": "model.safetensors",
276
+ "language_model.model.layers.17.linear_attn.dt_bias": "model.safetensors",
277
+ "language_model.model.layers.17.linear_attn.in_proj_a.biases": "model.safetensors",
278
+ "language_model.model.layers.17.linear_attn.in_proj_a.scales": "model.safetensors",
279
+ "language_model.model.layers.17.linear_attn.in_proj_a.weight": "model.safetensors",
280
+ "language_model.model.layers.17.linear_attn.in_proj_b.biases": "model.safetensors",
281
+ "language_model.model.layers.17.linear_attn.in_proj_b.scales": "model.safetensors",
282
+ "language_model.model.layers.17.linear_attn.in_proj_b.weight": "model.safetensors",
283
+ "language_model.model.layers.17.linear_attn.in_proj_qkv.biases": "model.safetensors",
284
+ "language_model.model.layers.17.linear_attn.in_proj_qkv.scales": "model.safetensors",
285
+ "language_model.model.layers.17.linear_attn.in_proj_qkv.weight": "model.safetensors",
286
+ "language_model.model.layers.17.linear_attn.in_proj_z.biases": "model.safetensors",
287
+ "language_model.model.layers.17.linear_attn.in_proj_z.scales": "model.safetensors",
288
+ "language_model.model.layers.17.linear_attn.in_proj_z.weight": "model.safetensors",
289
+ "language_model.model.layers.17.linear_attn.norm.weight": "model.safetensors",
290
+ "language_model.model.layers.17.linear_attn.out_proj.biases": "model.safetensors",
291
+ "language_model.model.layers.17.linear_attn.out_proj.scales": "model.safetensors",
292
+ "language_model.model.layers.17.linear_attn.out_proj.weight": "model.safetensors",
293
+ "language_model.model.layers.17.mlp.down_proj.biases": "model.safetensors",
294
+ "language_model.model.layers.17.mlp.down_proj.scales": "model.safetensors",
295
+ "language_model.model.layers.17.mlp.down_proj.weight": "model.safetensors",
296
+ "language_model.model.layers.17.mlp.gate_proj.biases": "model.safetensors",
297
+ "language_model.model.layers.17.mlp.gate_proj.scales": "model.safetensors",
298
+ "language_model.model.layers.17.mlp.gate_proj.weight": "model.safetensors",
299
+ "language_model.model.layers.17.mlp.up_proj.biases": "model.safetensors",
300
+ "language_model.model.layers.17.mlp.up_proj.scales": "model.safetensors",
301
+ "language_model.model.layers.17.mlp.up_proj.weight": "model.safetensors",
302
+ "language_model.model.layers.17.post_attention_layernorm.weight": "model.safetensors",
303
+ "language_model.model.layers.18.input_layernorm.weight": "model.safetensors",
304
+ "language_model.model.layers.18.linear_attn.A_log": "model.safetensors",
305
+ "language_model.model.layers.18.linear_attn.conv1d.weight": "model.safetensors",
306
+ "language_model.model.layers.18.linear_attn.dt_bias": "model.safetensors",
307
+ "language_model.model.layers.18.linear_attn.in_proj_a.biases": "model.safetensors",
308
+ "language_model.model.layers.18.linear_attn.in_proj_a.scales": "model.safetensors",
309
+ "language_model.model.layers.18.linear_attn.in_proj_a.weight": "model.safetensors",
310
+ "language_model.model.layers.18.linear_attn.in_proj_b.biases": "model.safetensors",
311
+ "language_model.model.layers.18.linear_attn.in_proj_b.scales": "model.safetensors",
312
+ "language_model.model.layers.18.linear_attn.in_proj_b.weight": "model.safetensors",
313
+ "language_model.model.layers.18.linear_attn.in_proj_qkv.biases": "model.safetensors",
314
+ "language_model.model.layers.18.linear_attn.in_proj_qkv.scales": "model.safetensors",
315
+ "language_model.model.layers.18.linear_attn.in_proj_qkv.weight": "model.safetensors",
316
+ "language_model.model.layers.18.linear_attn.in_proj_z.biases": "model.safetensors",
317
+ "language_model.model.layers.18.linear_attn.in_proj_z.scales": "model.safetensors",
318
+ "language_model.model.layers.18.linear_attn.in_proj_z.weight": "model.safetensors",
319
+ "language_model.model.layers.18.linear_attn.norm.weight": "model.safetensors",
320
+ "language_model.model.layers.18.linear_attn.out_proj.biases": "model.safetensors",
321
+ "language_model.model.layers.18.linear_attn.out_proj.scales": "model.safetensors",
322
+ "language_model.model.layers.18.linear_attn.out_proj.weight": "model.safetensors",
323
+ "language_model.model.layers.18.mlp.down_proj.biases": "model.safetensors",
324
+ "language_model.model.layers.18.mlp.down_proj.scales": "model.safetensors",
325
+ "language_model.model.layers.18.mlp.down_proj.weight": "model.safetensors",
326
+ "language_model.model.layers.18.mlp.gate_proj.biases": "model.safetensors",
327
+ "language_model.model.layers.18.mlp.gate_proj.scales": "model.safetensors",
328
+ "language_model.model.layers.18.mlp.gate_proj.weight": "model.safetensors",
329
+ "language_model.model.layers.18.mlp.up_proj.biases": "model.safetensors",
330
+ "language_model.model.layers.18.mlp.up_proj.scales": "model.safetensors",
331
+ "language_model.model.layers.18.mlp.up_proj.weight": "model.safetensors",
332
+ "language_model.model.layers.18.post_attention_layernorm.weight": "model.safetensors",
333
+ "language_model.model.layers.19.input_layernorm.weight": "model.safetensors",
334
+ "language_model.model.layers.19.mlp.down_proj.biases": "model.safetensors",
335
+ "language_model.model.layers.19.mlp.down_proj.scales": "model.safetensors",
336
+ "language_model.model.layers.19.mlp.down_proj.weight": "model.safetensors",
337
+ "language_model.model.layers.19.mlp.gate_proj.biases": "model.safetensors",
338
+ "language_model.model.layers.19.mlp.gate_proj.scales": "model.safetensors",
339
+ "language_model.model.layers.19.mlp.gate_proj.weight": "model.safetensors",
340
+ "language_model.model.layers.19.mlp.up_proj.biases": "model.safetensors",
341
+ "language_model.model.layers.19.mlp.up_proj.scales": "model.safetensors",
342
+ "language_model.model.layers.19.mlp.up_proj.weight": "model.safetensors",
343
+ "language_model.model.layers.19.post_attention_layernorm.weight": "model.safetensors",
344
+ "language_model.model.layers.19.self_attn.k_norm.weight": "model.safetensors",
345
+ "language_model.model.layers.19.self_attn.k_proj.biases": "model.safetensors",
346
+ "language_model.model.layers.19.self_attn.k_proj.scales": "model.safetensors",
347
+ "language_model.model.layers.19.self_attn.k_proj.weight": "model.safetensors",
348
+ "language_model.model.layers.19.self_attn.o_proj.biases": "model.safetensors",
349
+ "language_model.model.layers.19.self_attn.o_proj.scales": "model.safetensors",
350
+ "language_model.model.layers.19.self_attn.o_proj.weight": "model.safetensors",
351
+ "language_model.model.layers.19.self_attn.q_norm.weight": "model.safetensors",
352
+ "language_model.model.layers.19.self_attn.q_proj.biases": "model.safetensors",
353
+ "language_model.model.layers.19.self_attn.q_proj.scales": "model.safetensors",
354
+ "language_model.model.layers.19.self_attn.q_proj.weight": "model.safetensors",
355
+ "language_model.model.layers.19.self_attn.v_proj.biases": "model.safetensors",
356
+ "language_model.model.layers.19.self_attn.v_proj.scales": "model.safetensors",
357
+ "language_model.model.layers.19.self_attn.v_proj.weight": "model.safetensors",
358
+ "language_model.model.layers.2.input_layernorm.weight": "model.safetensors",
359
+ "language_model.model.layers.2.linear_attn.A_log": "model.safetensors",
360
+ "language_model.model.layers.2.linear_attn.conv1d.weight": "model.safetensors",
361
+ "language_model.model.layers.2.linear_attn.dt_bias": "model.safetensors",
362
+ "language_model.model.layers.2.linear_attn.in_proj_a.biases": "model.safetensors",
363
+ "language_model.model.layers.2.linear_attn.in_proj_a.scales": "model.safetensors",
364
+ "language_model.model.layers.2.linear_attn.in_proj_a.weight": "model.safetensors",
365
+ "language_model.model.layers.2.linear_attn.in_proj_b.biases": "model.safetensors",
366
+ "language_model.model.layers.2.linear_attn.in_proj_b.scales": "model.safetensors",
367
+ "language_model.model.layers.2.linear_attn.in_proj_b.weight": "model.safetensors",
368
+ "language_model.model.layers.2.linear_attn.in_proj_qkv.biases": "model.safetensors",
369
+ "language_model.model.layers.2.linear_attn.in_proj_qkv.scales": "model.safetensors",
370
+ "language_model.model.layers.2.linear_attn.in_proj_qkv.weight": "model.safetensors",
371
+ "language_model.model.layers.2.linear_attn.in_proj_z.biases": "model.safetensors",
372
+ "language_model.model.layers.2.linear_attn.in_proj_z.scales": "model.safetensors",
373
+ "language_model.model.layers.2.linear_attn.in_proj_z.weight": "model.safetensors",
374
+ "language_model.model.layers.2.linear_attn.norm.weight": "model.safetensors",
375
+ "language_model.model.layers.2.linear_attn.out_proj.biases": "model.safetensors",
376
+ "language_model.model.layers.2.linear_attn.out_proj.scales": "model.safetensors",
377
+ "language_model.model.layers.2.linear_attn.out_proj.weight": "model.safetensors",
378
+ "language_model.model.layers.2.mlp.down_proj.biases": "model.safetensors",
379
+ "language_model.model.layers.2.mlp.down_proj.scales": "model.safetensors",
380
+ "language_model.model.layers.2.mlp.down_proj.weight": "model.safetensors",
381
+ "language_model.model.layers.2.mlp.gate_proj.biases": "model.safetensors",
382
+ "language_model.model.layers.2.mlp.gate_proj.scales": "model.safetensors",
383
+ "language_model.model.layers.2.mlp.gate_proj.weight": "model.safetensors",
384
+ "language_model.model.layers.2.mlp.up_proj.biases": "model.safetensors",
385
+ "language_model.model.layers.2.mlp.up_proj.scales": "model.safetensors",
386
+ "language_model.model.layers.2.mlp.up_proj.weight": "model.safetensors",
387
+ "language_model.model.layers.2.post_attention_layernorm.weight": "model.safetensors",
388
+ "language_model.model.layers.20.input_layernorm.weight": "model.safetensors",
389
+ "language_model.model.layers.20.linear_attn.A_log": "model.safetensors",
390
+ "language_model.model.layers.20.linear_attn.conv1d.weight": "model.safetensors",
391
+ "language_model.model.layers.20.linear_attn.dt_bias": "model.safetensors",
392
+ "language_model.model.layers.20.linear_attn.in_proj_a.biases": "model.safetensors",
393
+ "language_model.model.layers.20.linear_attn.in_proj_a.scales": "model.safetensors",
394
+ "language_model.model.layers.20.linear_attn.in_proj_a.weight": "model.safetensors",
395
+ "language_model.model.layers.20.linear_attn.in_proj_b.biases": "model.safetensors",
396
+ "language_model.model.layers.20.linear_attn.in_proj_b.scales": "model.safetensors",
397
+ "language_model.model.layers.20.linear_attn.in_proj_b.weight": "model.safetensors",
398
+ "language_model.model.layers.20.linear_attn.in_proj_qkv.biases": "model.safetensors",
399
+ "language_model.model.layers.20.linear_attn.in_proj_qkv.scales": "model.safetensors",
400
+ "language_model.model.layers.20.linear_attn.in_proj_qkv.weight": "model.safetensors",
401
+ "language_model.model.layers.20.linear_attn.in_proj_z.biases": "model.safetensors",
402
+ "language_model.model.layers.20.linear_attn.in_proj_z.scales": "model.safetensors",
403
+ "language_model.model.layers.20.linear_attn.in_proj_z.weight": "model.safetensors",
404
+ "language_model.model.layers.20.linear_attn.norm.weight": "model.safetensors",
405
+ "language_model.model.layers.20.linear_attn.out_proj.biases": "model.safetensors",
406
+ "language_model.model.layers.20.linear_attn.out_proj.scales": "model.safetensors",
407
+ "language_model.model.layers.20.linear_attn.out_proj.weight": "model.safetensors",
408
+ "language_model.model.layers.20.mlp.down_proj.biases": "model.safetensors",
409
+ "language_model.model.layers.20.mlp.down_proj.scales": "model.safetensors",
410
+ "language_model.model.layers.20.mlp.down_proj.weight": "model.safetensors",
411
+ "language_model.model.layers.20.mlp.gate_proj.biases": "model.safetensors",
412
+ "language_model.model.layers.20.mlp.gate_proj.scales": "model.safetensors",
413
+ "language_model.model.layers.20.mlp.gate_proj.weight": "model.safetensors",
414
+ "language_model.model.layers.20.mlp.up_proj.biases": "model.safetensors",
415
+ "language_model.model.layers.20.mlp.up_proj.scales": "model.safetensors",
416
+ "language_model.model.layers.20.mlp.up_proj.weight": "model.safetensors",
417
+ "language_model.model.layers.20.post_attention_layernorm.weight": "model.safetensors",
418
+ "language_model.model.layers.21.input_layernorm.weight": "model.safetensors",
419
+ "language_model.model.layers.21.linear_attn.A_log": "model.safetensors",
420
+ "language_model.model.layers.21.linear_attn.conv1d.weight": "model.safetensors",
421
+ "language_model.model.layers.21.linear_attn.dt_bias": "model.safetensors",
422
+ "language_model.model.layers.21.linear_attn.in_proj_a.biases": "model.safetensors",
423
+ "language_model.model.layers.21.linear_attn.in_proj_a.scales": "model.safetensors",
424
+ "language_model.model.layers.21.linear_attn.in_proj_a.weight": "model.safetensors",
425
+ "language_model.model.layers.21.linear_attn.in_proj_b.biases": "model.safetensors",
426
+ "language_model.model.layers.21.linear_attn.in_proj_b.scales": "model.safetensors",
427
+ "language_model.model.layers.21.linear_attn.in_proj_b.weight": "model.safetensors",
428
+ "language_model.model.layers.21.linear_attn.in_proj_qkv.biases": "model.safetensors",
429
+ "language_model.model.layers.21.linear_attn.in_proj_qkv.scales": "model.safetensors",
430
+ "language_model.model.layers.21.linear_attn.in_proj_qkv.weight": "model.safetensors",
431
+ "language_model.model.layers.21.linear_attn.in_proj_z.biases": "model.safetensors",
432
+ "language_model.model.layers.21.linear_attn.in_proj_z.scales": "model.safetensors",
433
+ "language_model.model.layers.21.linear_attn.in_proj_z.weight": "model.safetensors",
434
+ "language_model.model.layers.21.linear_attn.norm.weight": "model.safetensors",
435
+ "language_model.model.layers.21.linear_attn.out_proj.biases": "model.safetensors",
436
+ "language_model.model.layers.21.linear_attn.out_proj.scales": "model.safetensors",
437
+ "language_model.model.layers.21.linear_attn.out_proj.weight": "model.safetensors",
438
+ "language_model.model.layers.21.mlp.down_proj.biases": "model.safetensors",
439
+ "language_model.model.layers.21.mlp.down_proj.scales": "model.safetensors",
440
+ "language_model.model.layers.21.mlp.down_proj.weight": "model.safetensors",
441
+ "language_model.model.layers.21.mlp.gate_proj.biases": "model.safetensors",
442
+ "language_model.model.layers.21.mlp.gate_proj.scales": "model.safetensors",
443
+ "language_model.model.layers.21.mlp.gate_proj.weight": "model.safetensors",
444
+ "language_model.model.layers.21.mlp.up_proj.biases": "model.safetensors",
445
+ "language_model.model.layers.21.mlp.up_proj.scales": "model.safetensors",
446
+ "language_model.model.layers.21.mlp.up_proj.weight": "model.safetensors",
447
+ "language_model.model.layers.21.post_attention_layernorm.weight": "model.safetensors",
448
+ "language_model.model.layers.22.input_layernorm.weight": "model.safetensors",
449
+ "language_model.model.layers.22.linear_attn.A_log": "model.safetensors",
450
+ "language_model.model.layers.22.linear_attn.conv1d.weight": "model.safetensors",
451
+ "language_model.model.layers.22.linear_attn.dt_bias": "model.safetensors",
452
+ "language_model.model.layers.22.linear_attn.in_proj_a.biases": "model.safetensors",
453
+ "language_model.model.layers.22.linear_attn.in_proj_a.scales": "model.safetensors",
454
+ "language_model.model.layers.22.linear_attn.in_proj_a.weight": "model.safetensors",
455
+ "language_model.model.layers.22.linear_attn.in_proj_b.biases": "model.safetensors",
456
+ "language_model.model.layers.22.linear_attn.in_proj_b.scales": "model.safetensors",
457
+ "language_model.model.layers.22.linear_attn.in_proj_b.weight": "model.safetensors",
458
+ "language_model.model.layers.22.linear_attn.in_proj_qkv.biases": "model.safetensors",
459
+ "language_model.model.layers.22.linear_attn.in_proj_qkv.scales": "model.safetensors",
460
+ "language_model.model.layers.22.linear_attn.in_proj_qkv.weight": "model.safetensors",
461
+ "language_model.model.layers.22.linear_attn.in_proj_z.biases": "model.safetensors",
462
+ "language_model.model.layers.22.linear_attn.in_proj_z.scales": "model.safetensors",
463
+ "language_model.model.layers.22.linear_attn.in_proj_z.weight": "model.safetensors",
464
+ "language_model.model.layers.22.linear_attn.norm.weight": "model.safetensors",
465
+ "language_model.model.layers.22.linear_attn.out_proj.biases": "model.safetensors",
466
+ "language_model.model.layers.22.linear_attn.out_proj.scales": "model.safetensors",
467
+ "language_model.model.layers.22.linear_attn.out_proj.weight": "model.safetensors",
468
+ "language_model.model.layers.22.mlp.down_proj.biases": "model.safetensors",
469
+ "language_model.model.layers.22.mlp.down_proj.scales": "model.safetensors",
470
+ "language_model.model.layers.22.mlp.down_proj.weight": "model.safetensors",
471
+ "language_model.model.layers.22.mlp.gate_proj.biases": "model.safetensors",
472
+ "language_model.model.layers.22.mlp.gate_proj.scales": "model.safetensors",
473
+ "language_model.model.layers.22.mlp.gate_proj.weight": "model.safetensors",
474
+ "language_model.model.layers.22.mlp.up_proj.biases": "model.safetensors",
475
+ "language_model.model.layers.22.mlp.up_proj.scales": "model.safetensors",
476
+ "language_model.model.layers.22.mlp.up_proj.weight": "model.safetensors",
477
+ "language_model.model.layers.22.post_attention_layernorm.weight": "model.safetensors",
478
+ "language_model.model.layers.23.input_layernorm.weight": "model.safetensors",
479
+ "language_model.model.layers.23.mlp.down_proj.biases": "model.safetensors",
480
+ "language_model.model.layers.23.mlp.down_proj.scales": "model.safetensors",
481
+ "language_model.model.layers.23.mlp.down_proj.weight": "model.safetensors",
482
+ "language_model.model.layers.23.mlp.gate_proj.biases": "model.safetensors",
483
+ "language_model.model.layers.23.mlp.gate_proj.scales": "model.safetensors",
484
+ "language_model.model.layers.23.mlp.gate_proj.weight": "model.safetensors",
485
+ "language_model.model.layers.23.mlp.up_proj.biases": "model.safetensors",
486
+ "language_model.model.layers.23.mlp.up_proj.scales": "model.safetensors",
487
+ "language_model.model.layers.23.mlp.up_proj.weight": "model.safetensors",
488
+ "language_model.model.layers.23.post_attention_layernorm.weight": "model.safetensors",
489
+ "language_model.model.layers.23.self_attn.k_norm.weight": "model.safetensors",
490
+ "language_model.model.layers.23.self_attn.k_proj.biases": "model.safetensors",
491
+ "language_model.model.layers.23.self_attn.k_proj.scales": "model.safetensors",
492
+ "language_model.model.layers.23.self_attn.k_proj.weight": "model.safetensors",
493
+ "language_model.model.layers.23.self_attn.o_proj.biases": "model.safetensors",
494
+ "language_model.model.layers.23.self_attn.o_proj.scales": "model.safetensors",
495
+ "language_model.model.layers.23.self_attn.o_proj.weight": "model.safetensors",
496
+ "language_model.model.layers.23.self_attn.q_norm.weight": "model.safetensors",
497
+ "language_model.model.layers.23.self_attn.q_proj.biases": "model.safetensors",
498
+ "language_model.model.layers.23.self_attn.q_proj.scales": "model.safetensors",
499
+ "language_model.model.layers.23.self_attn.q_proj.weight": "model.safetensors",
500
+ "language_model.model.layers.23.self_attn.v_proj.biases": "model.safetensors",
501
+ "language_model.model.layers.23.self_attn.v_proj.scales": "model.safetensors",
502
+ "language_model.model.layers.23.self_attn.v_proj.weight": "model.safetensors",
503
+ "language_model.model.layers.24.input_layernorm.weight": "model.safetensors",
504
+ "language_model.model.layers.24.linear_attn.A_log": "model.safetensors",
505
+ "language_model.model.layers.24.linear_attn.conv1d.weight": "model.safetensors",
506
+ "language_model.model.layers.24.linear_attn.dt_bias": "model.safetensors",
507
+ "language_model.model.layers.24.linear_attn.in_proj_a.biases": "model.safetensors",
508
+ "language_model.model.layers.24.linear_attn.in_proj_a.scales": "model.safetensors",
509
+ "language_model.model.layers.24.linear_attn.in_proj_a.weight": "model.safetensors",
510
+ "language_model.model.layers.24.linear_attn.in_proj_b.biases": "model.safetensors",
511
+ "language_model.model.layers.24.linear_attn.in_proj_b.scales": "model.safetensors",
512
+ "language_model.model.layers.24.linear_attn.in_proj_b.weight": "model.safetensors",
513
+ "language_model.model.layers.24.linear_attn.in_proj_qkv.biases": "model.safetensors",
514
+ "language_model.model.layers.24.linear_attn.in_proj_qkv.scales": "model.safetensors",
515
+ "language_model.model.layers.24.linear_attn.in_proj_qkv.weight": "model.safetensors",
516
+ "language_model.model.layers.24.linear_attn.in_proj_z.biases": "model.safetensors",
517
+ "language_model.model.layers.24.linear_attn.in_proj_z.scales": "model.safetensors",
518
+ "language_model.model.layers.24.linear_attn.in_proj_z.weight": "model.safetensors",
519
+ "language_model.model.layers.24.linear_attn.norm.weight": "model.safetensors",
520
+ "language_model.model.layers.24.linear_attn.out_proj.biases": "model.safetensors",
521
+ "language_model.model.layers.24.linear_attn.out_proj.scales": "model.safetensors",
522
+ "language_model.model.layers.24.linear_attn.out_proj.weight": "model.safetensors",
523
+ "language_model.model.layers.24.mlp.down_proj.biases": "model.safetensors",
524
+ "language_model.model.layers.24.mlp.down_proj.scales": "model.safetensors",
525
+ "language_model.model.layers.24.mlp.down_proj.weight": "model.safetensors",
526
+ "language_model.model.layers.24.mlp.gate_proj.biases": "model.safetensors",
527
+ "language_model.model.layers.24.mlp.gate_proj.scales": "model.safetensors",
528
+ "language_model.model.layers.24.mlp.gate_proj.weight": "model.safetensors",
529
+ "language_model.model.layers.24.mlp.up_proj.biases": "model.safetensors",
530
+ "language_model.model.layers.24.mlp.up_proj.scales": "model.safetensors",
531
+ "language_model.model.layers.24.mlp.up_proj.weight": "model.safetensors",
532
+ "language_model.model.layers.24.post_attention_layernorm.weight": "model.safetensors",
533
+ "language_model.model.layers.25.input_layernorm.weight": "model.safetensors",
534
+ "language_model.model.layers.25.linear_attn.A_log": "model.safetensors",
535
+ "language_model.model.layers.25.linear_attn.conv1d.weight": "model.safetensors",
536
+ "language_model.model.layers.25.linear_attn.dt_bias": "model.safetensors",
537
+ "language_model.model.layers.25.linear_attn.in_proj_a.biases": "model.safetensors",
538
+ "language_model.model.layers.25.linear_attn.in_proj_a.scales": "model.safetensors",
539
+ "language_model.model.layers.25.linear_attn.in_proj_a.weight": "model.safetensors",
540
+ "language_model.model.layers.25.linear_attn.in_proj_b.biases": "model.safetensors",
541
+ "language_model.model.layers.25.linear_attn.in_proj_b.scales": "model.safetensors",
542
+ "language_model.model.layers.25.linear_attn.in_proj_b.weight": "model.safetensors",
543
+ "language_model.model.layers.25.linear_attn.in_proj_qkv.biases": "model.safetensors",
544
+ "language_model.model.layers.25.linear_attn.in_proj_qkv.scales": "model.safetensors",
545
+ "language_model.model.layers.25.linear_attn.in_proj_qkv.weight": "model.safetensors",
546
+ "language_model.model.layers.25.linear_attn.in_proj_z.biases": "model.safetensors",
547
+ "language_model.model.layers.25.linear_attn.in_proj_z.scales": "model.safetensors",
548
+ "language_model.model.layers.25.linear_attn.in_proj_z.weight": "model.safetensors",
549
+ "language_model.model.layers.25.linear_attn.norm.weight": "model.safetensors",
550
+ "language_model.model.layers.25.linear_attn.out_proj.biases": "model.safetensors",
551
+ "language_model.model.layers.25.linear_attn.out_proj.scales": "model.safetensors",
552
+ "language_model.model.layers.25.linear_attn.out_proj.weight": "model.safetensors",
553
+ "language_model.model.layers.25.mlp.down_proj.biases": "model.safetensors",
554
+ "language_model.model.layers.25.mlp.down_proj.scales": "model.safetensors",
555
+ "language_model.model.layers.25.mlp.down_proj.weight": "model.safetensors",
556
+ "language_model.model.layers.25.mlp.gate_proj.biases": "model.safetensors",
557
+ "language_model.model.layers.25.mlp.gate_proj.scales": "model.safetensors",
558
+ "language_model.model.layers.25.mlp.gate_proj.weight": "model.safetensors",
559
+ "language_model.model.layers.25.mlp.up_proj.biases": "model.safetensors",
560
+ "language_model.model.layers.25.mlp.up_proj.scales": "model.safetensors",
561
+ "language_model.model.layers.25.mlp.up_proj.weight": "model.safetensors",
562
+ "language_model.model.layers.25.post_attention_layernorm.weight": "model.safetensors",
563
+ "language_model.model.layers.26.input_layernorm.weight": "model.safetensors",
564
+ "language_model.model.layers.26.linear_attn.A_log": "model.safetensors",
565
+ "language_model.model.layers.26.linear_attn.conv1d.weight": "model.safetensors",
566
+ "language_model.model.layers.26.linear_attn.dt_bias": "model.safetensors",
567
+ "language_model.model.layers.26.linear_attn.in_proj_a.biases": "model.safetensors",
568
+ "language_model.model.layers.26.linear_attn.in_proj_a.scales": "model.safetensors",
569
+ "language_model.model.layers.26.linear_attn.in_proj_a.weight": "model.safetensors",
570
+ "language_model.model.layers.26.linear_attn.in_proj_b.biases": "model.safetensors",
571
+ "language_model.model.layers.26.linear_attn.in_proj_b.scales": "model.safetensors",
572
+ "language_model.model.layers.26.linear_attn.in_proj_b.weight": "model.safetensors",
573
+ "language_model.model.layers.26.linear_attn.in_proj_qkv.biases": "model.safetensors",
574
+ "language_model.model.layers.26.linear_attn.in_proj_qkv.scales": "model.safetensors",
575
+ "language_model.model.layers.26.linear_attn.in_proj_qkv.weight": "model.safetensors",
576
+ "language_model.model.layers.26.linear_attn.in_proj_z.biases": "model.safetensors",
577
+ "language_model.model.layers.26.linear_attn.in_proj_z.scales": "model.safetensors",
578
+ "language_model.model.layers.26.linear_attn.in_proj_z.weight": "model.safetensors",
579
+ "language_model.model.layers.26.linear_attn.norm.weight": "model.safetensors",
580
+ "language_model.model.layers.26.linear_attn.out_proj.biases": "model.safetensors",
581
+ "language_model.model.layers.26.linear_attn.out_proj.scales": "model.safetensors",
582
+ "language_model.model.layers.26.linear_attn.out_proj.weight": "model.safetensors",
583
+ "language_model.model.layers.26.mlp.down_proj.biases": "model.safetensors",
584
+ "language_model.model.layers.26.mlp.down_proj.scales": "model.safetensors",
585
+ "language_model.model.layers.26.mlp.down_proj.weight": "model.safetensors",
586
+ "language_model.model.layers.26.mlp.gate_proj.biases": "model.safetensors",
587
+ "language_model.model.layers.26.mlp.gate_proj.scales": "model.safetensors",
588
+ "language_model.model.layers.26.mlp.gate_proj.weight": "model.safetensors",
589
+ "language_model.model.layers.26.mlp.up_proj.biases": "model.safetensors",
590
+ "language_model.model.layers.26.mlp.up_proj.scales": "model.safetensors",
591
+ "language_model.model.layers.26.mlp.up_proj.weight": "model.safetensors",
592
+ "language_model.model.layers.26.post_attention_layernorm.weight": "model.safetensors",
593
+ "language_model.model.layers.27.input_layernorm.weight": "model.safetensors",
594
+ "language_model.model.layers.27.mlp.down_proj.biases": "model.safetensors",
595
+ "language_model.model.layers.27.mlp.down_proj.scales": "model.safetensors",
596
+ "language_model.model.layers.27.mlp.down_proj.weight": "model.safetensors",
597
+ "language_model.model.layers.27.mlp.gate_proj.biases": "model.safetensors",
598
+ "language_model.model.layers.27.mlp.gate_proj.scales": "model.safetensors",
599
+ "language_model.model.layers.27.mlp.gate_proj.weight": "model.safetensors",
600
+ "language_model.model.layers.27.mlp.up_proj.biases": "model.safetensors",
601
+ "language_model.model.layers.27.mlp.up_proj.scales": "model.safetensors",
602
+ "language_model.model.layers.27.mlp.up_proj.weight": "model.safetensors",
603
+ "language_model.model.layers.27.post_attention_layernorm.weight": "model.safetensors",
604
+ "language_model.model.layers.27.self_attn.k_norm.weight": "model.safetensors",
605
+ "language_model.model.layers.27.self_attn.k_proj.biases": "model.safetensors",
606
+ "language_model.model.layers.27.self_attn.k_proj.scales": "model.safetensors",
607
+ "language_model.model.layers.27.self_attn.k_proj.weight": "model.safetensors",
608
+ "language_model.model.layers.27.self_attn.o_proj.biases": "model.safetensors",
609
+ "language_model.model.layers.27.self_attn.o_proj.scales": "model.safetensors",
610
+ "language_model.model.layers.27.self_attn.o_proj.weight": "model.safetensors",
611
+ "language_model.model.layers.27.self_attn.q_norm.weight": "model.safetensors",
612
+ "language_model.model.layers.27.self_attn.q_proj.biases": "model.safetensors",
613
+ "language_model.model.layers.27.self_attn.q_proj.scales": "model.safetensors",
614
+ "language_model.model.layers.27.self_attn.q_proj.weight": "model.safetensors",
615
+ "language_model.model.layers.27.self_attn.v_proj.biases": "model.safetensors",
616
+ "language_model.model.layers.27.self_attn.v_proj.scales": "model.safetensors",
617
+ "language_model.model.layers.27.self_attn.v_proj.weight": "model.safetensors",
618
+ "language_model.model.layers.28.input_layernorm.weight": "model.safetensors",
619
+ "language_model.model.layers.28.linear_attn.A_log": "model.safetensors",
620
+ "language_model.model.layers.28.linear_attn.conv1d.weight": "model.safetensors",
621
+ "language_model.model.layers.28.linear_attn.dt_bias": "model.safetensors",
622
+ "language_model.model.layers.28.linear_attn.in_proj_a.biases": "model.safetensors",
623
+ "language_model.model.layers.28.linear_attn.in_proj_a.scales": "model.safetensors",
624
+ "language_model.model.layers.28.linear_attn.in_proj_a.weight": "model.safetensors",
625
+ "language_model.model.layers.28.linear_attn.in_proj_b.biases": "model.safetensors",
626
+ "language_model.model.layers.28.linear_attn.in_proj_b.scales": "model.safetensors",
627
+ "language_model.model.layers.28.linear_attn.in_proj_b.weight": "model.safetensors",
628
+ "language_model.model.layers.28.linear_attn.in_proj_qkv.biases": "model.safetensors",
629
+ "language_model.model.layers.28.linear_attn.in_proj_qkv.scales": "model.safetensors",
630
+ "language_model.model.layers.28.linear_attn.in_proj_qkv.weight": "model.safetensors",
631
+ "language_model.model.layers.28.linear_attn.in_proj_z.biases": "model.safetensors",
632
+ "language_model.model.layers.28.linear_attn.in_proj_z.scales": "model.safetensors",
633
+ "language_model.model.layers.28.linear_attn.in_proj_z.weight": "model.safetensors",
634
+ "language_model.model.layers.28.linear_attn.norm.weight": "model.safetensors",
635
+ "language_model.model.layers.28.linear_attn.out_proj.biases": "model.safetensors",
636
+ "language_model.model.layers.28.linear_attn.out_proj.scales": "model.safetensors",
637
+ "language_model.model.layers.28.linear_attn.out_proj.weight": "model.safetensors",
638
+ "language_model.model.layers.28.mlp.down_proj.biases": "model.safetensors",
639
+ "language_model.model.layers.28.mlp.down_proj.scales": "model.safetensors",
640
+ "language_model.model.layers.28.mlp.down_proj.weight": "model.safetensors",
641
+ "language_model.model.layers.28.mlp.gate_proj.biases": "model.safetensors",
642
+ "language_model.model.layers.28.mlp.gate_proj.scales": "model.safetensors",
643
+ "language_model.model.layers.28.mlp.gate_proj.weight": "model.safetensors",
644
+ "language_model.model.layers.28.mlp.up_proj.biases": "model.safetensors",
645
+ "language_model.model.layers.28.mlp.up_proj.scales": "model.safetensors",
646
+ "language_model.model.layers.28.mlp.up_proj.weight": "model.safetensors",
647
+ "language_model.model.layers.28.post_attention_layernorm.weight": "model.safetensors",
648
+ "language_model.model.layers.29.input_layernorm.weight": "model.safetensors",
649
+ "language_model.model.layers.29.linear_attn.A_log": "model.safetensors",
650
+ "language_model.model.layers.29.linear_attn.conv1d.weight": "model.safetensors",
651
+ "language_model.model.layers.29.linear_attn.dt_bias": "model.safetensors",
652
+ "language_model.model.layers.29.linear_attn.in_proj_a.biases": "model.safetensors",
653
+ "language_model.model.layers.29.linear_attn.in_proj_a.scales": "model.safetensors",
654
+ "language_model.model.layers.29.linear_attn.in_proj_a.weight": "model.safetensors",
655
+ "language_model.model.layers.29.linear_attn.in_proj_b.biases": "model.safetensors",
656
+ "language_model.model.layers.29.linear_attn.in_proj_b.scales": "model.safetensors",
657
+ "language_model.model.layers.29.linear_attn.in_proj_b.weight": "model.safetensors",
658
+ "language_model.model.layers.29.linear_attn.in_proj_qkv.biases": "model.safetensors",
659
+ "language_model.model.layers.29.linear_attn.in_proj_qkv.scales": "model.safetensors",
660
+ "language_model.model.layers.29.linear_attn.in_proj_qkv.weight": "model.safetensors",
661
+ "language_model.model.layers.29.linear_attn.in_proj_z.biases": "model.safetensors",
662
+ "language_model.model.layers.29.linear_attn.in_proj_z.scales": "model.safetensors",
663
+ "language_model.model.layers.29.linear_attn.in_proj_z.weight": "model.safetensors",
664
+ "language_model.model.layers.29.linear_attn.norm.weight": "model.safetensors",
665
+ "language_model.model.layers.29.linear_attn.out_proj.biases": "model.safetensors",
666
+ "language_model.model.layers.29.linear_attn.out_proj.scales": "model.safetensors",
667
+ "language_model.model.layers.29.linear_attn.out_proj.weight": "model.safetensors",
668
+ "language_model.model.layers.29.mlp.down_proj.biases": "model.safetensors",
669
+ "language_model.model.layers.29.mlp.down_proj.scales": "model.safetensors",
670
+ "language_model.model.layers.29.mlp.down_proj.weight": "model.safetensors",
671
+ "language_model.model.layers.29.mlp.gate_proj.biases": "model.safetensors",
672
+ "language_model.model.layers.29.mlp.gate_proj.scales": "model.safetensors",
673
+ "language_model.model.layers.29.mlp.gate_proj.weight": "model.safetensors",
674
+ "language_model.model.layers.29.mlp.up_proj.biases": "model.safetensors",
675
+ "language_model.model.layers.29.mlp.up_proj.scales": "model.safetensors",
676
+ "language_model.model.layers.29.mlp.up_proj.weight": "model.safetensors",
677
+ "language_model.model.layers.29.post_attention_layernorm.weight": "model.safetensors",
678
+ "language_model.model.layers.3.input_layernorm.weight": "model.safetensors",
679
+ "language_model.model.layers.3.mlp.down_proj.biases": "model.safetensors",
680
+ "language_model.model.layers.3.mlp.down_proj.scales": "model.safetensors",
681
+ "language_model.model.layers.3.mlp.down_proj.weight": "model.safetensors",
682
+ "language_model.model.layers.3.mlp.gate_proj.biases": "model.safetensors",
683
+ "language_model.model.layers.3.mlp.gate_proj.scales": "model.safetensors",
684
+ "language_model.model.layers.3.mlp.gate_proj.weight": "model.safetensors",
685
+ "language_model.model.layers.3.mlp.up_proj.biases": "model.safetensors",
686
+ "language_model.model.layers.3.mlp.up_proj.scales": "model.safetensors",
687
+ "language_model.model.layers.3.mlp.up_proj.weight": "model.safetensors",
688
+ "language_model.model.layers.3.post_attention_layernorm.weight": "model.safetensors",
689
+ "language_model.model.layers.3.self_attn.k_norm.weight": "model.safetensors",
690
+ "language_model.model.layers.3.self_attn.k_proj.biases": "model.safetensors",
691
+ "language_model.model.layers.3.self_attn.k_proj.scales": "model.safetensors",
692
+ "language_model.model.layers.3.self_attn.k_proj.weight": "model.safetensors",
693
+ "language_model.model.layers.3.self_attn.o_proj.biases": "model.safetensors",
694
+ "language_model.model.layers.3.self_attn.o_proj.scales": "model.safetensors",
695
+ "language_model.model.layers.3.self_attn.o_proj.weight": "model.safetensors",
696
+ "language_model.model.layers.3.self_attn.q_norm.weight": "model.safetensors",
697
+ "language_model.model.layers.3.self_attn.q_proj.biases": "model.safetensors",
698
+ "language_model.model.layers.3.self_attn.q_proj.scales": "model.safetensors",
699
+ "language_model.model.layers.3.self_attn.q_proj.weight": "model.safetensors",
700
+ "language_model.model.layers.3.self_attn.v_proj.biases": "model.safetensors",
701
+ "language_model.model.layers.3.self_attn.v_proj.scales": "model.safetensors",
702
+ "language_model.model.layers.3.self_attn.v_proj.weight": "model.safetensors",
703
+ "language_model.model.layers.30.input_layernorm.weight": "model.safetensors",
704
+ "language_model.model.layers.30.linear_attn.A_log": "model.safetensors",
705
+ "language_model.model.layers.30.linear_attn.conv1d.weight": "model.safetensors",
706
+ "language_model.model.layers.30.linear_attn.dt_bias": "model.safetensors",
707
+ "language_model.model.layers.30.linear_attn.in_proj_a.biases": "model.safetensors",
708
+ "language_model.model.layers.30.linear_attn.in_proj_a.scales": "model.safetensors",
709
+ "language_model.model.layers.30.linear_attn.in_proj_a.weight": "model.safetensors",
710
+ "language_model.model.layers.30.linear_attn.in_proj_b.biases": "model.safetensors",
711
+ "language_model.model.layers.30.linear_attn.in_proj_b.scales": "model.safetensors",
712
+ "language_model.model.layers.30.linear_attn.in_proj_b.weight": "model.safetensors",
713
+ "language_model.model.layers.30.linear_attn.in_proj_qkv.biases": "model.safetensors",
714
+ "language_model.model.layers.30.linear_attn.in_proj_qkv.scales": "model.safetensors",
715
+ "language_model.model.layers.30.linear_attn.in_proj_qkv.weight": "model.safetensors",
716
+ "language_model.model.layers.30.linear_attn.in_proj_z.biases": "model.safetensors",
717
+ "language_model.model.layers.30.linear_attn.in_proj_z.scales": "model.safetensors",
718
+ "language_model.model.layers.30.linear_attn.in_proj_z.weight": "model.safetensors",
719
+ "language_model.model.layers.30.linear_attn.norm.weight": "model.safetensors",
720
+ "language_model.model.layers.30.linear_attn.out_proj.biases": "model.safetensors",
721
+ "language_model.model.layers.30.linear_attn.out_proj.scales": "model.safetensors",
722
+ "language_model.model.layers.30.linear_attn.out_proj.weight": "model.safetensors",
723
+ "language_model.model.layers.30.mlp.down_proj.biases": "model.safetensors",
724
+ "language_model.model.layers.30.mlp.down_proj.scales": "model.safetensors",
725
+ "language_model.model.layers.30.mlp.down_proj.weight": "model.safetensors",
726
+ "language_model.model.layers.30.mlp.gate_proj.biases": "model.safetensors",
727
+ "language_model.model.layers.30.mlp.gate_proj.scales": "model.safetensors",
728
+ "language_model.model.layers.30.mlp.gate_proj.weight": "model.safetensors",
729
+ "language_model.model.layers.30.mlp.up_proj.biases": "model.safetensors",
730
+ "language_model.model.layers.30.mlp.up_proj.scales": "model.safetensors",
731
+ "language_model.model.layers.30.mlp.up_proj.weight": "model.safetensors",
732
+ "language_model.model.layers.30.post_attention_layernorm.weight": "model.safetensors",
733
+ "language_model.model.layers.31.input_layernorm.weight": "model.safetensors",
734
+ "language_model.model.layers.31.mlp.down_proj.biases": "model.safetensors",
735
+ "language_model.model.layers.31.mlp.down_proj.scales": "model.safetensors",
736
+ "language_model.model.layers.31.mlp.down_proj.weight": "model.safetensors",
737
+ "language_model.model.layers.31.mlp.gate_proj.biases": "model.safetensors",
738
+ "language_model.model.layers.31.mlp.gate_proj.scales": "model.safetensors",
739
+ "language_model.model.layers.31.mlp.gate_proj.weight": "model.safetensors",
740
+ "language_model.model.layers.31.mlp.up_proj.biases": "model.safetensors",
741
+ "language_model.model.layers.31.mlp.up_proj.scales": "model.safetensors",
742
+ "language_model.model.layers.31.mlp.up_proj.weight": "model.safetensors",
743
+ "language_model.model.layers.31.post_attention_layernorm.weight": "model.safetensors",
744
+ "language_model.model.layers.31.self_attn.k_norm.weight": "model.safetensors",
745
+ "language_model.model.layers.31.self_attn.k_proj.biases": "model.safetensors",
746
+ "language_model.model.layers.31.self_attn.k_proj.scales": "model.safetensors",
747
+ "language_model.model.layers.31.self_attn.k_proj.weight": "model.safetensors",
748
+ "language_model.model.layers.31.self_attn.o_proj.biases": "model.safetensors",
749
+ "language_model.model.layers.31.self_attn.o_proj.scales": "model.safetensors",
750
+ "language_model.model.layers.31.self_attn.o_proj.weight": "model.safetensors",
751
+ "language_model.model.layers.31.self_attn.q_norm.weight": "model.safetensors",
752
+ "language_model.model.layers.31.self_attn.q_proj.biases": "model.safetensors",
753
+ "language_model.model.layers.31.self_attn.q_proj.scales": "model.safetensors",
754
+ "language_model.model.layers.31.self_attn.q_proj.weight": "model.safetensors",
755
+ "language_model.model.layers.31.self_attn.v_proj.biases": "model.safetensors",
756
+ "language_model.model.layers.31.self_attn.v_proj.scales": "model.safetensors",
757
+ "language_model.model.layers.31.self_attn.v_proj.weight": "model.safetensors",
758
+ "language_model.model.layers.4.input_layernorm.weight": "model.safetensors",
759
+ "language_model.model.layers.4.linear_attn.A_log": "model.safetensors",
760
+ "language_model.model.layers.4.linear_attn.conv1d.weight": "model.safetensors",
761
+ "language_model.model.layers.4.linear_attn.dt_bias": "model.safetensors",
762
+ "language_model.model.layers.4.linear_attn.in_proj_a.biases": "model.safetensors",
763
+ "language_model.model.layers.4.linear_attn.in_proj_a.scales": "model.safetensors",
764
+ "language_model.model.layers.4.linear_attn.in_proj_a.weight": "model.safetensors",
765
+ "language_model.model.layers.4.linear_attn.in_proj_b.biases": "model.safetensors",
766
+ "language_model.model.layers.4.linear_attn.in_proj_b.scales": "model.safetensors",
767
+ "language_model.model.layers.4.linear_attn.in_proj_b.weight": "model.safetensors",
768
+ "language_model.model.layers.4.linear_attn.in_proj_qkv.biases": "model.safetensors",
769
+ "language_model.model.layers.4.linear_attn.in_proj_qkv.scales": "model.safetensors",
770
+ "language_model.model.layers.4.linear_attn.in_proj_qkv.weight": "model.safetensors",
771
+ "language_model.model.layers.4.linear_attn.in_proj_z.biases": "model.safetensors",
772
+ "language_model.model.layers.4.linear_attn.in_proj_z.scales": "model.safetensors",
773
+ "language_model.model.layers.4.linear_attn.in_proj_z.weight": "model.safetensors",
774
+ "language_model.model.layers.4.linear_attn.norm.weight": "model.safetensors",
775
+ "language_model.model.layers.4.linear_attn.out_proj.biases": "model.safetensors",
776
+ "language_model.model.layers.4.linear_attn.out_proj.scales": "model.safetensors",
777
+ "language_model.model.layers.4.linear_attn.out_proj.weight": "model.safetensors",
778
+ "language_model.model.layers.4.mlp.down_proj.biases": "model.safetensors",
779
+ "language_model.model.layers.4.mlp.down_proj.scales": "model.safetensors",
780
+ "language_model.model.layers.4.mlp.down_proj.weight": "model.safetensors",
781
+ "language_model.model.layers.4.mlp.gate_proj.biases": "model.safetensors",
782
+ "language_model.model.layers.4.mlp.gate_proj.scales": "model.safetensors",
783
+ "language_model.model.layers.4.mlp.gate_proj.weight": "model.safetensors",
784
+ "language_model.model.layers.4.mlp.up_proj.biases": "model.safetensors",
785
+ "language_model.model.layers.4.mlp.up_proj.scales": "model.safetensors",
786
+ "language_model.model.layers.4.mlp.up_proj.weight": "model.safetensors",
787
+ "language_model.model.layers.4.post_attention_layernorm.weight": "model.safetensors",
788
+ "language_model.model.layers.5.input_layernorm.weight": "model.safetensors",
789
+ "language_model.model.layers.5.linear_attn.A_log": "model.safetensors",
790
+ "language_model.model.layers.5.linear_attn.conv1d.weight": "model.safetensors",
791
+ "language_model.model.layers.5.linear_attn.dt_bias": "model.safetensors",
792
+ "language_model.model.layers.5.linear_attn.in_proj_a.biases": "model.safetensors",
793
+ "language_model.model.layers.5.linear_attn.in_proj_a.scales": "model.safetensors",
794
+ "language_model.model.layers.5.linear_attn.in_proj_a.weight": "model.safetensors",
795
+ "language_model.model.layers.5.linear_attn.in_proj_b.biases": "model.safetensors",
796
+ "language_model.model.layers.5.linear_attn.in_proj_b.scales": "model.safetensors",
797
+ "language_model.model.layers.5.linear_attn.in_proj_b.weight": "model.safetensors",
798
+ "language_model.model.layers.5.linear_attn.in_proj_qkv.biases": "model.safetensors",
799
+ "language_model.model.layers.5.linear_attn.in_proj_qkv.scales": "model.safetensors",
800
+ "language_model.model.layers.5.linear_attn.in_proj_qkv.weight": "model.safetensors",
801
+ "language_model.model.layers.5.linear_attn.in_proj_z.biases": "model.safetensors",
802
+ "language_model.model.layers.5.linear_attn.in_proj_z.scales": "model.safetensors",
803
+ "language_model.model.layers.5.linear_attn.in_proj_z.weight": "model.safetensors",
804
+ "language_model.model.layers.5.linear_attn.norm.weight": "model.safetensors",
805
+ "language_model.model.layers.5.linear_attn.out_proj.biases": "model.safetensors",
806
+ "language_model.model.layers.5.linear_attn.out_proj.scales": "model.safetensors",
807
+ "language_model.model.layers.5.linear_attn.out_proj.weight": "model.safetensors",
808
+ "language_model.model.layers.5.mlp.down_proj.biases": "model.safetensors",
809
+ "language_model.model.layers.5.mlp.down_proj.scales": "model.safetensors",
810
+ "language_model.model.layers.5.mlp.down_proj.weight": "model.safetensors",
811
+ "language_model.model.layers.5.mlp.gate_proj.biases": "model.safetensors",
812
+ "language_model.model.layers.5.mlp.gate_proj.scales": "model.safetensors",
813
+ "language_model.model.layers.5.mlp.gate_proj.weight": "model.safetensors",
814
+ "language_model.model.layers.5.mlp.up_proj.biases": "model.safetensors",
815
+ "language_model.model.layers.5.mlp.up_proj.scales": "model.safetensors",
816
+ "language_model.model.layers.5.mlp.up_proj.weight": "model.safetensors",
817
+ "language_model.model.layers.5.post_attention_layernorm.weight": "model.safetensors",
818
+ "language_model.model.layers.6.input_layernorm.weight": "model.safetensors",
819
+ "language_model.model.layers.6.linear_attn.A_log": "model.safetensors",
820
+ "language_model.model.layers.6.linear_attn.conv1d.weight": "model.safetensors",
821
+ "language_model.model.layers.6.linear_attn.dt_bias": "model.safetensors",
822
+ "language_model.model.layers.6.linear_attn.in_proj_a.biases": "model.safetensors",
823
+ "language_model.model.layers.6.linear_attn.in_proj_a.scales": "model.safetensors",
824
+ "language_model.model.layers.6.linear_attn.in_proj_a.weight": "model.safetensors",
825
+ "language_model.model.layers.6.linear_attn.in_proj_b.biases": "model.safetensors",
826
+ "language_model.model.layers.6.linear_attn.in_proj_b.scales": "model.safetensors",
827
+ "language_model.model.layers.6.linear_attn.in_proj_b.weight": "model.safetensors",
828
+ "language_model.model.layers.6.linear_attn.in_proj_qkv.biases": "model.safetensors",
829
+ "language_model.model.layers.6.linear_attn.in_proj_qkv.scales": "model.safetensors",
830
+ "language_model.model.layers.6.linear_attn.in_proj_qkv.weight": "model.safetensors",
831
+ "language_model.model.layers.6.linear_attn.in_proj_z.biases": "model.safetensors",
832
+ "language_model.model.layers.6.linear_attn.in_proj_z.scales": "model.safetensors",
833
+ "language_model.model.layers.6.linear_attn.in_proj_z.weight": "model.safetensors",
834
+ "language_model.model.layers.6.linear_attn.norm.weight": "model.safetensors",
835
+ "language_model.model.layers.6.linear_attn.out_proj.biases": "model.safetensors",
836
+ "language_model.model.layers.6.linear_attn.out_proj.scales": "model.safetensors",
837
+ "language_model.model.layers.6.linear_attn.out_proj.weight": "model.safetensors",
838
+ "language_model.model.layers.6.mlp.down_proj.biases": "model.safetensors",
839
+ "language_model.model.layers.6.mlp.down_proj.scales": "model.safetensors",
840
+ "language_model.model.layers.6.mlp.down_proj.weight": "model.safetensors",
841
+ "language_model.model.layers.6.mlp.gate_proj.biases": "model.safetensors",
842
+ "language_model.model.layers.6.mlp.gate_proj.scales": "model.safetensors",
843
+ "language_model.model.layers.6.mlp.gate_proj.weight": "model.safetensors",
844
+ "language_model.model.layers.6.mlp.up_proj.biases": "model.safetensors",
845
+ "language_model.model.layers.6.mlp.up_proj.scales": "model.safetensors",
846
+ "language_model.model.layers.6.mlp.up_proj.weight": "model.safetensors",
847
+ "language_model.model.layers.6.post_attention_layernorm.weight": "model.safetensors",
848
+ "language_model.model.layers.7.input_layernorm.weight": "model.safetensors",
849
+ "language_model.model.layers.7.mlp.down_proj.biases": "model.safetensors",
850
+ "language_model.model.layers.7.mlp.down_proj.scales": "model.safetensors",
851
+ "language_model.model.layers.7.mlp.down_proj.weight": "model.safetensors",
852
+ "language_model.model.layers.7.mlp.gate_proj.biases": "model.safetensors",
853
+ "language_model.model.layers.7.mlp.gate_proj.scales": "model.safetensors",
854
+ "language_model.model.layers.7.mlp.gate_proj.weight": "model.safetensors",
855
+ "language_model.model.layers.7.mlp.up_proj.biases": "model.safetensors",
856
+ "language_model.model.layers.7.mlp.up_proj.scales": "model.safetensors",
857
+ "language_model.model.layers.7.mlp.up_proj.weight": "model.safetensors",
858
+ "language_model.model.layers.7.post_attention_layernorm.weight": "model.safetensors",
859
+ "language_model.model.layers.7.self_attn.k_norm.weight": "model.safetensors",
860
+ "language_model.model.layers.7.self_attn.k_proj.biases": "model.safetensors",
861
+ "language_model.model.layers.7.self_attn.k_proj.scales": "model.safetensors",
862
+ "language_model.model.layers.7.self_attn.k_proj.weight": "model.safetensors",
863
+ "language_model.model.layers.7.self_attn.o_proj.biases": "model.safetensors",
864
+ "language_model.model.layers.7.self_attn.o_proj.scales": "model.safetensors",
865
+ "language_model.model.layers.7.self_attn.o_proj.weight": "model.safetensors",
866
+ "language_model.model.layers.7.self_attn.q_norm.weight": "model.safetensors",
867
+ "language_model.model.layers.7.self_attn.q_proj.biases": "model.safetensors",
868
+ "language_model.model.layers.7.self_attn.q_proj.scales": "model.safetensors",
869
+ "language_model.model.layers.7.self_attn.q_proj.weight": "model.safetensors",
870
+ "language_model.model.layers.7.self_attn.v_proj.biases": "model.safetensors",
871
+ "language_model.model.layers.7.self_attn.v_proj.scales": "model.safetensors",
872
+ "language_model.model.layers.7.self_attn.v_proj.weight": "model.safetensors",
873
+ "language_model.model.layers.8.input_layernorm.weight": "model.safetensors",
874
+ "language_model.model.layers.8.linear_attn.A_log": "model.safetensors",
875
+ "language_model.model.layers.8.linear_attn.conv1d.weight": "model.safetensors",
876
+ "language_model.model.layers.8.linear_attn.dt_bias": "model.safetensors",
877
+ "language_model.model.layers.8.linear_attn.in_proj_a.biases": "model.safetensors",
878
+ "language_model.model.layers.8.linear_attn.in_proj_a.scales": "model.safetensors",
879
+ "language_model.model.layers.8.linear_attn.in_proj_a.weight": "model.safetensors",
880
+ "language_model.model.layers.8.linear_attn.in_proj_b.biases": "model.safetensors",
881
+ "language_model.model.layers.8.linear_attn.in_proj_b.scales": "model.safetensors",
882
+ "language_model.model.layers.8.linear_attn.in_proj_b.weight": "model.safetensors",
883
+ "language_model.model.layers.8.linear_attn.in_proj_qkv.biases": "model.safetensors",
884
+ "language_model.model.layers.8.linear_attn.in_proj_qkv.scales": "model.safetensors",
885
+ "language_model.model.layers.8.linear_attn.in_proj_qkv.weight": "model.safetensors",
886
+ "language_model.model.layers.8.linear_attn.in_proj_z.biases": "model.safetensors",
887
+ "language_model.model.layers.8.linear_attn.in_proj_z.scales": "model.safetensors",
888
+ "language_model.model.layers.8.linear_attn.in_proj_z.weight": "model.safetensors",
889
+ "language_model.model.layers.8.linear_attn.norm.weight": "model.safetensors",
890
+ "language_model.model.layers.8.linear_attn.out_proj.biases": "model.safetensors",
891
+ "language_model.model.layers.8.linear_attn.out_proj.scales": "model.safetensors",
892
+ "language_model.model.layers.8.linear_attn.out_proj.weight": "model.safetensors",
893
+ "language_model.model.layers.8.mlp.down_proj.biases": "model.safetensors",
894
+ "language_model.model.layers.8.mlp.down_proj.scales": "model.safetensors",
895
+ "language_model.model.layers.8.mlp.down_proj.weight": "model.safetensors",
896
+ "language_model.model.layers.8.mlp.gate_proj.biases": "model.safetensors",
897
+ "language_model.model.layers.8.mlp.gate_proj.scales": "model.safetensors",
898
+ "language_model.model.layers.8.mlp.gate_proj.weight": "model.safetensors",
899
+ "language_model.model.layers.8.mlp.up_proj.biases": "model.safetensors",
900
+ "language_model.model.layers.8.mlp.up_proj.scales": "model.safetensors",
901
+ "language_model.model.layers.8.mlp.up_proj.weight": "model.safetensors",
902
+ "language_model.model.layers.8.post_attention_layernorm.weight": "model.safetensors",
903
+ "language_model.model.layers.9.input_layernorm.weight": "model.safetensors",
904
+ "language_model.model.layers.9.linear_attn.A_log": "model.safetensors",
905
+ "language_model.model.layers.9.linear_attn.conv1d.weight": "model.safetensors",
906
+ "language_model.model.layers.9.linear_attn.dt_bias": "model.safetensors",
907
+ "language_model.model.layers.9.linear_attn.in_proj_a.biases": "model.safetensors",
908
+ "language_model.model.layers.9.linear_attn.in_proj_a.scales": "model.safetensors",
909
+ "language_model.model.layers.9.linear_attn.in_proj_a.weight": "model.safetensors",
910
+ "language_model.model.layers.9.linear_attn.in_proj_b.biases": "model.safetensors",
911
+ "language_model.model.layers.9.linear_attn.in_proj_b.scales": "model.safetensors",
912
+ "language_model.model.layers.9.linear_attn.in_proj_b.weight": "model.safetensors",
913
+ "language_model.model.layers.9.linear_attn.in_proj_qkv.biases": "model.safetensors",
914
+ "language_model.model.layers.9.linear_attn.in_proj_qkv.scales": "model.safetensors",
915
+ "language_model.model.layers.9.linear_attn.in_proj_qkv.weight": "model.safetensors",
916
+ "language_model.model.layers.9.linear_attn.in_proj_z.biases": "model.safetensors",
917
+ "language_model.model.layers.9.linear_attn.in_proj_z.scales": "model.safetensors",
918
+ "language_model.model.layers.9.linear_attn.in_proj_z.weight": "model.safetensors",
919
+ "language_model.model.layers.9.linear_attn.norm.weight": "model.safetensors",
920
+ "language_model.model.layers.9.linear_attn.out_proj.biases": "model.safetensors",
921
+ "language_model.model.layers.9.linear_attn.out_proj.scales": "model.safetensors",
922
+ "language_model.model.layers.9.linear_attn.out_proj.weight": "model.safetensors",
923
+ "language_model.model.layers.9.mlp.down_proj.biases": "model.safetensors",
924
+ "language_model.model.layers.9.mlp.down_proj.scales": "model.safetensors",
925
+ "language_model.model.layers.9.mlp.down_proj.weight": "model.safetensors",
926
+ "language_model.model.layers.9.mlp.gate_proj.biases": "model.safetensors",
927
+ "language_model.model.layers.9.mlp.gate_proj.scales": "model.safetensors",
928
+ "language_model.model.layers.9.mlp.gate_proj.weight": "model.safetensors",
929
+ "language_model.model.layers.9.mlp.up_proj.biases": "model.safetensors",
930
+ "language_model.model.layers.9.mlp.up_proj.scales": "model.safetensors",
931
+ "language_model.model.layers.9.mlp.up_proj.weight": "model.safetensors",
932
+ "language_model.model.layers.9.post_attention_layernorm.weight": "model.safetensors",
933
+ "language_model.model.norm.weight": "model.safetensors"
934
+ }
935
+ }
provenance/bf16_weight_audit.json ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ {
2
+ "status": "passed",
3
+ "tensors_shape_checked": 427,
4
+ "scope": "All tensor names/shapes; full norm and convolution tensors; first 2 rows x 64 columns of other tensors. Not all-element equality."
5
+ }
provenance/conversion_run_lock.json ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "request": {
3
+ "schema": "jeeves-mlx-cpu-v1",
4
+ "repo_id": "PostHog/jeeves",
5
+ "hf_revision": "8622b7d1652a9dcb8629486b84dce9e8d690c5cd",
6
+ "jeeves_code_ref": "HEAD",
7
+ "mlx_lm_code_ref": "refs/heads/main",
8
+ "mlx_requirement": "mlx[cpu]==0.32.3",
9
+ "quant_bits": [
10
+ 4,
11
+ 8
12
+ ],
13
+ "q_group_size": 64,
14
+ "run_torch_reference": true,
15
+ "run_cpu_smoke": true,
16
+ "smoke_cases": 1,
17
+ "smoke_max_tokens": 256,
18
+ "prefill_chunk_size": 16,
19
+ "greedy_smoke_tokens": 0,
20
+ "min_ram_gib": 24,
21
+ "bf16_probability_atol": 0.02,
22
+ "bf16_min_cosine": 0.995,
23
+ "helper_sha256": {
24
+ "jeeves_support.py": "26ca899ee62b13ef3a93ff7075bf4fcfd097e1c1e15589b667c22be71205beb6",
25
+ "run_jeeves.py": "5e381f42611ee195f4579eb3d3433abf7c292aecb26e52b6ccd94ecd4e13c654",
26
+ "convert_worker.py": "538444544ae39fdbe5031b0a75dcff88615b33e1127d7eb42fefde325c36afd7"
27
+ }
28
+ },
29
+ "jeeves_code_sha": "f04ec5567301450dcaae0210dd54deeb4f647f87",
30
+ "mlx_lm_sha": "94cdcae13b266c337bcaca09b97b9c5a9c0e2cde",
31
+ "identity": "c4d0ea30e584dbf0d1e672c59c2e00036cb6a1a7025833ef49c01c63432b18fa"
32
+ }
provenance/format_head_checks.json ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "status": "passed",
3
+ "format_cases": 4,
4
+ "original_head_dtypes": {
5
+ "q.weight": "torch.float32",
6
+ "q.bias": "torch.float32",
7
+ "k.weight": "torch.float32",
8
+ "k.bias": "torch.float32"
9
+ },
10
+ "exported_head_dtype": "float32",
11
+ "temperature": 1.8589280843734741,
12
+ "max_head_probability_error": 0.0,
13
+ "scope": "Original encoder token/readout parity, safe head serialization, and original PyTorch head vs MLX head on synthetic hidden states. Not backbone parity."
14
+ }
provenance/jeeves-mlx-4bit.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b23046076e0105c29e487312856067b9e4c0a4d53ced30a543b5543911551ba7
3
+ size 49972
provenance/jeeves-mlx-4bit_smoke.json ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "status": "passed",
3
+ "identity": "c4d0ea30e584dbf0d1e672c59c2e00036cb6a1a7025833ef49c01c63432b18fa",
4
+ "device": "cpu",
5
+ "cases": [
6
+ {
7
+ "id": "case0",
8
+ "probabilities": [
9
+ 0.016998127102851868,
10
+ 0.9830018877983093
11
+ ],
12
+ "elapsed_seconds": 4345.674271831
13
+ }
14
+ ],
15
+ "fixture_sha256": "2887c941fd5a497ae51343a9e2382ea1d198ab5eb140f4e8c8fd37c54be4ebf0",
16
+ "scope": "Small no-thinking execution smoke test; not a benchmark."
17
+ }
provenance/jeeves-mlx-bf16.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:20f08bc1b539c2b7321c666c73faba142141641db0c27757958a1f463e92f52c
3
+ size 49972
provenance/jeeves-mlx-bf16_smoke.json ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "status": "passed",
3
+ "identity": "c4d0ea30e584dbf0d1e672c59c2e00036cb6a1a7025833ef49c01c63432b18fa",
4
+ "device": "cpu",
5
+ "cases": [
6
+ {
7
+ "id": "case0",
8
+ "probabilities": [
9
+ 0.03329608216881752,
10
+ 0.9667038917541504
11
+ ],
12
+ "elapsed_seconds": 268.5726169540003
13
+ }
14
+ ],
15
+ "fixture_sha256": "2887c941fd5a497ae51343a9e2382ea1d198ab5eb140f4e8c8fd37c54be4ebf0",
16
+ "scope": "Small no-thinking execution smoke test; not a benchmark."
17
+ }
provenance/original_package_README.md ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Jeeves-9B MLX — jeeves-mlx-4bit
2
+
3
+ Converted from `PostHog/jeeves` revision `8622b7d1652a9dcb8629486b84dce9e8d690c5cd` on CPU.
4
+ This is an unofficial MLX port, not a release by PostHog or Apple.
5
+
6
+ ## Contents
7
+
8
+ `model*.safetensors` and `config.json` are the MLX backbone. `head.safetensors` contains the original pointer-head values in FP32. `head.pt` is also retained. `export.json` retains the released temperature and training metadata. `jeeves_format.py` is extracted from the pinned upstream encoder; `dataformat.py` retains the original state/question rendering. Original licenses and source hashes are preserved.
9
+
10
+ ## Apple Silicon
11
+
12
+ ```bash
13
+ python3 -m venv .venv
14
+ source .venv/bin/activate
15
+ python -m pip install -r requirements-mac.txt
16
+ python run_jeeves.py --request example_request.json --device gpu
17
+ ```
18
+
19
+ Ordinary, non-speculative greedy reasoning is optional:
20
+
21
+ ```bash
22
+ python run_jeeves.py --request example_request.json --device gpu --think-tokens 128
23
+ ```
24
+
25
+ The runner accepts `state` and a `questions` mapping with `noul`, `choice`, or `score` question types. It returns one probability per option. It is **not** a wire-compatible replacement for the original `/v1/systemone` server. Use `run_jeeves.py`, not `mlx_lm.generate`, for decisions.
26
+
27
+ ## Scope and validation
28
+
29
+ The default path is no-thinking, batch size one, with an independent cache per question. The optional reasoning path uses ordinary greedy decoding, suppresses the upstream control tokens, stops at the thinking end marker, and re-prefills for decision readout. It does not reproduce the original speculative drafters, CUDA graphs, FP8 serving, or adaptive no-thinking threshold.
30
+
31
+ Read `validation.json` for this package's actual status. A file conversion, head check, or tiny smoke-test pass is not an accuracy/calibration benchmark. An unchanged temperature does not establish calibration after quantization. Apple Metal execution and latency must be tested on a Mac. No advertised Jeeves benchmark score or speed is claimed for this port.
32
+
33
+ The source checkpoint license is in `LICENSE`; the upstream code license is in `LICENSE_JEEVES_CODE`. The new glue code is supplied for use and modification without warranty.
provenance/preflight.json ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "status": "passed",
3
+ "device": "cpu",
4
+ "versions": {
5
+ "mlx": "0.32.3",
6
+ "mlx-lm": "0.31.4.dev132+g94cdcae13",
7
+ "torch": "2.14.0+cpu",
8
+ "numpy": "2.5.3",
9
+ "transformers": "5.17.0",
10
+ "huggingface-hub": "1.33.0",
11
+ "safetensors": "0.8.0"
12
+ },
13
+ "scope": "Tiny synthetic architecture; not the Jeeves checkpoint."
14
+ }
provenance/requirements-cpu-lock.txt ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ annotated-doc==0.0.5
2
+ anyio==4.15.1
3
+ certifi==2026.7.22
4
+ click==8.5.0
5
+ filelock==3.32.3
6
+ fsspec==2026.7.0
7
+ h11==0.16.0
8
+ hf-xet==1.6.0
9
+ httpcore==1.0.9
10
+ httpx==0.28.1
11
+ huggingface_hub==1.33.0
12
+ idna==3.20
13
+ Jinja2==3.1.6
14
+ markdown-it-py==4.2.0
15
+ MarkupSafe==3.0.3
16
+ mdurl==0.1.2
17
+ mlx==0.32.3
18
+ mlx-cpu==0.32.3
19
+ mlx-lm @ git+https://github.com/ml-explore/mlx-lm.git@94cdcae13b266c337bcaca09b97b9c5a9c0e2cde
20
+ mpmath==1.3.0
21
+ networkx==3.6.1
22
+ numpy==2.5.3
23
+ packaging==26.3
24
+ protobuf==7.36.2
25
+ psutil==7.2.2
26
+ Pygments==2.21.0
27
+ PyYAML==6.0.3
28
+ regex==2026.9.29
29
+ rich==15.0.0
30
+ safetensors==0.8.0
31
+ sentencepiece==0.2.2
32
+ setuptools==84.0.0
33
+ shellingham==1.5.4
34
+ sympy==1.14.0
35
+ tokenizers==0.23.2
36
+ torch==2.14.0+cpu
37
+ tqdm==4.70.1
38
+ transformers==5.17.0
39
+ typer==0.27.2
40
+ typing_extensions==4.16.0
41
+ wheel==0.48.0
provenance/source_PACKAGE_MANIFEST.json ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "schema": "jeeves-mlx-cpu-v1",
3
+ "identity": "c4d0ea30e584dbf0d1e672c59c2e00036cb6a1a7025833ef49c01c63432b18fa",
4
+ "files": {
5
+ "CONVERSION_COMPLETE.json": {
6
+ "bytes": 269,
7
+ "sha256": "cb7ff21cfa818a070dc01cb79829ceca9e293e5c9dfc400ab8c8a81a4699b383"
8
+ },
9
+ "LICENSE": {
10
+ "bytes": 11544,
11
+ "sha256": "bbedc3fda3305820b977265f01b8619d87570a6739de3a5582c3464840f1e57a"
12
+ },
13
+ "LICENSE_JEEVES_CODE": {
14
+ "bytes": 1074,
15
+ "sha256": "823f556c20700f9a2f5e520c7d4eb3089f083fb19cf618cdbe08c08982f41b8e"
16
+ },
17
+ "README.md": {
18
+ "bytes": 2192,
19
+ "sha256": "fc5140a87a684cb672186d46c739e8482174854632dbcb929985ffda6eced3a9"
20
+ },
21
+ "chat_template.jinja": {
22
+ "bytes": 7756,
23
+ "sha256": "a4aee8afcf2e0711942cf848899be66016f8d14a889ff9ede07bca099c28f715"
24
+ },
25
+ "config.json": {
26
+ "bytes": 2080,
27
+ "sha256": "6cc3a4bc9bd804159d7849476564026451ace6009b7fc51cdf14908aaacf333a"
28
+ },
29
+ "dataformat.py": {
30
+ "bytes": 6058,
31
+ "sha256": "1c421b0e2ba879f5799842b3a44350d1f1db117ead23c47c7b01a27e2139c664"
32
+ },
33
+ "example_request.json": {
34
+ "bytes": 179,
35
+ "sha256": "7cec13b2283352be787736c7bb47fb783b61814f9ed25fb9ac2742d521435145"
36
+ },
37
+ "export.json": {
38
+ "bytes": 2582,
39
+ "sha256": "608d8aa594bc9cc6cd37e691eb3b5ec0e661866be0ae38f21659f6d70531e8a1"
40
+ },
41
+ "fixtures.json": {
42
+ "bytes": 4863,
43
+ "sha256": "2887c941fd5a497ae51343a9e2382ea1d198ab5eb140f4e8c8fd37c54be4ebf0"
44
+ },
45
+ "head.pt": {
46
+ "bytes": 8392767,
47
+ "sha256": "2ab935dea9eecf263086d9ed6dfe97fd5558193663ecae102fd3c50ae6878d60"
48
+ },
49
+ "head.safetensors": {
50
+ "bytes": 8391016,
51
+ "sha256": "ceac931470abafbc62723a297291f2c3d96627679794433585e658981798343e"
52
+ },
53
+ "jeeves_format.py": {
54
+ "bytes": 4244,
55
+ "sha256": "6bb9599483ce4328024bf2c8473959996b3c55a226ae2a31c739ec87b0f215ca"
56
+ },
57
+ "jeeves_support.py": {
58
+ "bytes": 7920,
59
+ "sha256": "26ca899ee62b13ef3a93ff7075bf4fcfd097e1c1e15589b667c22be71205beb6"
60
+ },
61
+ "model.safetensors": {
62
+ "bytes": 5038161163,
63
+ "sha256": "a7f3c503106f38d7bff3a55cb16b82bb5085fd8247893ade8a1de6ed1750e1f1"
64
+ },
65
+ "model.safetensors.index.json": {
66
+ "bytes": 81194,
67
+ "sha256": "215f9abadc1cea4d465b01c036dffcac5a84c2fb2386777863eff6928b91ed0b"
68
+ },
69
+ "provenance/bf16_weight_audit.json": {
70
+ "bytes": 201,
71
+ "sha256": "a4668cfbcf61c2946e870e552776d876f8cfd1cd021b4bda5f30795bfa545ee4"
72
+ },
73
+ "provenance/format_head_checks.json": {
74
+ "bytes": 481,
75
+ "sha256": "fb3c9913a7d9200186d9b4ec7e79701e1b9fb0e9513636e7b84db716584140ce"
76
+ },
77
+ "provenance/jeeves-mlx-4bit.npz": {
78
+ "bytes": 49972,
79
+ "sha256": "b23046076e0105c29e487312856067b9e4c0a4d53ced30a543b5543911551ba7"
80
+ },
81
+ "provenance/jeeves-mlx-4bit_smoke.json": {
82
+ "bytes": 467,
83
+ "sha256": "4f76a693cf949f7cdd3eac7b573b8e15083e5a3f0b7614a06ec449a525c05baf"
84
+ },
85
+ "provenance/jeeves-mlx-bf16.npz": {
86
+ "bytes": 49972,
87
+ "sha256": "20f08bc1b539c2b7321c666c73faba142141641db0c27757958a1f463e92f52c"
88
+ },
89
+ "provenance/jeeves-mlx-bf16_smoke.json": {
90
+ "bytes": 469,
91
+ "sha256": "09b6e75e09a1b51d571e0309e9de7f566b33a5aa86fa039a5669577717dade0d"
92
+ },
93
+ "provenance/preflight.json": {
94
+ "bytes": 337,
95
+ "sha256": "6cc3ab0b1b759f6751f68ca3867f9648573a69e9632840feb42cb2b60daf27c6"
96
+ },
97
+ "provenance/source_config.json": {
98
+ "bytes": 1471,
99
+ "sha256": "b0ca5d0cb2056e4c1a4eb9a0616c114773cbd8b7428c1927259b28b3938b4191"
100
+ },
101
+ "provenance/source_lock.json": {
102
+ "bytes": 302,
103
+ "sha256": "d96f01e2558461e3c3daa874755a8212af64591840f6e6c8415f73ad8328e446"
104
+ },
105
+ "provenance/source_shards.json": {
106
+ "bytes": 913,
107
+ "sha256": "8f7b5da3ef9b11a19ff1976b382fc5908989beab726c68ad8ef70b6db7c57f8e"
108
+ },
109
+ "provenance/torch_reference.json": {
110
+ "bytes": 504,
111
+ "sha256": "1ff8eed755e0c8d4febb490a8be902c4b21a33802e428ff23047a31109d41c8c"
112
+ },
113
+ "provenance/torch_reference.npz": {
114
+ "bytes": 49972,
115
+ "sha256": "852fadb6c779fbbb45073590aa5f08f6385f903dad22c8a6ab27d6613de5ebba"
116
+ },
117
+ "provenance/upstream_code.json": {
118
+ "bytes": 799,
119
+ "sha256": "d50143f13dac140feb845dfef53380e370371f6c95412bee6b212d5387bb7987"
120
+ },
121
+ "provenance/upstream_dataloader.py": {
122
+ "bytes": 11424,
123
+ "sha256": "7d8a43ddcac427125bbe6b8aca9cfb3306aa1dbef6d7509bfed1a65a2d93b4d1"
124
+ },
125
+ "provenance/upstream_head.py": {
126
+ "bytes": 714,
127
+ "sha256": "4c4f503c0ecef50d58b7a789f79f9336324c1548d9832e9ce75a675fd2ba302f"
128
+ },
129
+ "provenance/upstream_model_card.md": {
130
+ "bytes": 5234,
131
+ "sha256": "8f18acc423edf4c7db50d877f8f826ff6e019e6395092b800b6673db3e00cae2"
132
+ },
133
+ "requirements-mac.txt": {
134
+ "bytes": 184,
135
+ "sha256": "01b04c2acde4835455b18b65e8e3567c1a8d607f23692afb01f4a842487dd147"
136
+ },
137
+ "run_jeeves.py": {
138
+ "bytes": 9594,
139
+ "sha256": "5e381f42611ee195f4579eb3d3433abf7c292aecb26e52b6ccd94ecd4e13c654"
140
+ },
141
+ "tokenizer.json": {
142
+ "bytes": 19989325,
143
+ "sha256": "06b9509352d2af50381ab2247e083b80d32d5c0aba91c272ca9ff729b6a0e523"
144
+ },
145
+ "tokenizer_config.json": {
146
+ "bytes": 1161,
147
+ "sha256": "95c557768e6b88a7128befc7bfd3c7de50e5d51af9b8b33a9f4dee0e04f99679"
148
+ },
149
+ "validation.json": {
150
+ "bytes": 2250,
151
+ "sha256": "36d3a8cf620c7db74476f8f4f6d0c8ab77b225bb0d6b5c8859eb0d5bf57f5061"
152
+ }
153
+ }
154
+ }
provenance/source_config.json ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "vocab_size": 248320,
3
+ "hidden_size": 4096,
4
+ "intermediate_size": 12288,
5
+ "num_hidden_layers": 32,
6
+ "layer_types": [
7
+ "linear_attention",
8
+ "linear_attention",
9
+ "linear_attention",
10
+ "full_attention",
11
+ "linear_attention",
12
+ "linear_attention",
13
+ "linear_attention",
14
+ "full_attention",
15
+ "linear_attention",
16
+ "linear_attention",
17
+ "linear_attention",
18
+ "full_attention",
19
+ "linear_attention",
20
+ "linear_attention",
21
+ "linear_attention",
22
+ "full_attention",
23
+ "linear_attention",
24
+ "linear_attention",
25
+ "linear_attention",
26
+ "full_attention",
27
+ "linear_attention",
28
+ "linear_attention",
29
+ "linear_attention",
30
+ "full_attention",
31
+ "linear_attention",
32
+ "linear_attention",
33
+ "linear_attention",
34
+ "full_attention",
35
+ "linear_attention",
36
+ "linear_attention",
37
+ "linear_attention",
38
+ "full_attention"
39
+ ],
40
+ "tie_word_embeddings": false,
41
+ "num_attention_heads": 16,
42
+ "num_key_value_heads": 4,
43
+ "head_dim": 256,
44
+ "attention_bias": false,
45
+ "attention_dropout": 0.0,
46
+ "linear_num_key_heads": 16,
47
+ "linear_num_value_heads": 32,
48
+ "linear_key_head_dim": 128,
49
+ "linear_value_head_dim": 128,
50
+ "linear_conv_kernel_dim": 4,
51
+ "rms_norm_eps": 1e-06,
52
+ "hidden_act": "silu",
53
+ "rope_theta": 10000000,
54
+ "partial_rotary_factor": 0.25,
55
+ "max_position_embeddings": 262144,
56
+ "pad_token_id": null,
57
+ "eos_token_id": 248044,
58
+ "bos_token_id": null,
59
+ "dtype": "bfloat16",
60
+ "initializer_range": 0.02
61
+ }
provenance/source_lock.json ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ {
2
+ "repo_id": "PostHog/jeeves",
3
+ "hf_revision": "8622b7d1652a9dcb8629486b84dce9e8d690c5cd",
4
+ "jeeves_code_sha": "f04ec5567301450dcaae0210dd54deeb4f647f87",
5
+ "mlx_lm_sha": "94cdcae13b266c337bcaca09b97b9c5a9c0e2cde",
6
+ "identity": "c4d0ea30e584dbf0d1e672c59c2e00036cb6a1a7025833ef49c01c63432b18fa"
7
+ }
provenance/source_shards.json ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "model-00001-of-00005.safetensors": {
3
+ "bytes": 4268059288,
4
+ "sha256": "c8d38178b51c845d6befca9e2c8a579889055cecf510fdbc85dbdf7bb867a0d6",
5
+ "hub_hash_verified": true
6
+ },
7
+ "model-00002-of-00005.safetensors": {
8
+ "bytes": 4266315424,
9
+ "sha256": "a25e1a608a5be9cadef95e3f40fdca5c17b6c21e86481186adfd7a8a1f5b8f40",
10
+ "hub_hash_verified": true
11
+ },
12
+ "model-00003-of-00005.safetensors": {
13
+ "bytes": 4215378072,
14
+ "sha256": "ab693e0b5940052ad04450fccfd12c87a49ce9ad23984bdfc07ee20d3ab654fe",
15
+ "hub_hash_verified": true
16
+ },
17
+ "model-00004-of-00005.safetensors": {
18
+ "bytes": 3123665648,
19
+ "sha256": "9942b7369222a4403809a05f1da21f53b006f2d5cf72651483dda48c4931ed9a",
20
+ "hub_hash_verified": true
21
+ },
22
+ "model-00005-of-00005.safetensors": {
23
+ "bytes": 2034237568,
24
+ "sha256": "dd63614f1dc80dce2d83be3f3e69af1f8a0ebc8add9b8e0abf3910f563e44344",
25
+ "hub_hash_verified": true
26
+ }
27
+ }
provenance/torch_reference.json ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "status": "passed",
3
+ "identity": "c4d0ea30e584dbf0d1e672c59c2e00036cb6a1a7025833ef49c01c63432b18fa",
4
+ "device": "cpu",
5
+ "dtype": "bfloat16",
6
+ "fixture_sha256": "2887c941fd5a497ae51343a9e2382ea1d198ab5eb140f4e8c8fd37c54be4ebf0",
7
+ "cases": [
8
+ {
9
+ "id": "case0",
10
+ "probabilities": [
11
+ 0.03340453281998634,
12
+ 0.9665954113006592
13
+ ],
14
+ "elapsed_seconds": 22.900140517999716
15
+ }
16
+ ],
17
+ "scope": "No-thinking reference outputs; diagnostic timings, not a benchmark."
18
+ }
provenance/torch_reference.npz ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:852fadb6c779fbbb45073590aa5f08f6385f903dad22c8a6ab27d6613de5ebba
3
+ size 49972
provenance/upstream_code.json ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "revision": "f04ec5567301450dcaae0210dd54deeb4f647f87",
3
+ "files": {
4
+ "model/__init__.py": "2792fa98fe4e980059445bc85755dcf830377427208ce6751fa7a2129e163897",
5
+ "model/model.py": "e827e20b3552e0c4632a6f413ff4e1cd4046adf0de12aaa92827095f625ec5ac",
6
+ "model/config.py": "a1732320888e15ff93bb612aa716e3fd2652dc5f09c9abcd2e6f5e43f34685c9",
7
+ "model/lora.py": "02602dfac5f2cddbbee53a5b9e558871a42c56f00c5c959f20ab17eb3317ad52",
8
+ "model/head.py": "4c4f503c0ecef50d58b7a789f79f9336324c1548d9832e9ce75a675fd2ba302f",
9
+ "prep/format.py": "1c421b0e2ba879f5799842b3a44350d1f1db117ead23c47c7b01a27e2139c664",
10
+ "loader/dataloader.py": "7d8a43ddcac427125bbe6b8aca9cfb3306aa1dbef6d7509bfed1a65a2d93b4d1",
11
+ "LICENSE": "823f556c20700f9a2f5e520c7d4eb3089f083fb19cf618cdbe08c08982f41b8e"
12
+ }
13
+ }
provenance/upstream_dataloader.py ADDED
@@ -0,0 +1,268 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from __future__ import annotations
2
+
3
+ import random
4
+ import re
5
+ from dataclasses import dataclass
6
+ from functools import partial
7
+ from typing import Sequence
8
+
9
+ import torch
10
+ from torch.utils.data import DataLoader, DistributedSampler
11
+ from transformers import AutoTokenizer
12
+
13
+ from prep.format import DataFormat, Question, read_jsonl
14
+
15
+ STATE, Q, OPT, OPT_END, DECIDE = "<|fim_prefix|>", "<|fim_middle|>", "<|box_start|>", "<|box_end|>", "<|fim_suffix|>"
16
+ THINK, THINK_END = "<think>", "</think>"
17
+ CONTROL_RE = re.compile(r"<\|([A-Za-z0-9_]+)\|>")
18
+
19
+
20
+ def sanitize(text: str) -> str:
21
+ return CONTROL_RE.sub(r"<¦\1¦>", text)
22
+
23
+
24
+ @dataclass
25
+ class Example:
26
+ prompt: list[int]
27
+ remainder: list[int]
28
+ label: int
29
+ target: list[float] | None
30
+ n_options: int
31
+ source: str
32
+ source_id: int
33
+ record_id: str
34
+ question_id: str
35
+ think: list[int] | None = None
36
+ plain_prompt: list[int] | None = None
37
+
38
+ @property
39
+ def full(self) -> list[int]:
40
+ return self.prompt + self.remainder
41
+
42
+
43
+ @dataclass
44
+ class Batch:
45
+ input_ids: torch.Tensor
46
+ attention_mask: torch.Tensor
47
+ opt_index: torch.Tensor
48
+ opt_mask: torch.Tensor
49
+ decide_index: torch.Tensor
50
+ labels: torch.Tensor
51
+ targets: torch.Tensor
52
+ source_ids: torch.Tensor
53
+ chain_mask: torch.Tensor
54
+ valid: torch.Tensor
55
+ group_ids: torch.Tensor
56
+ think_start: torch.Tensor
57
+ suffix_len: torch.Tensor
58
+ old_logp: torch.Tensor
59
+
60
+ def to(self, device, non_blocking: bool = True) -> "Batch":
61
+ return Batch(**{k: v.to(device, non_blocking=non_blocking) for k, v in self.__dict__.items()})
62
+
63
+ def pin_memory(self) -> "Batch":
64
+ return Batch(**{k: v.pin_memory() for k, v in self.__dict__.items()})
65
+
66
+ def __len__(self) -> int:
67
+ return self.input_ids.shape[0]
68
+
69
+
70
+ @dataclass(frozen=True)
71
+ class Markers:
72
+ pad_id: int
73
+ opt_end_id: int
74
+ think_end_id: int
75
+ empty_think: tuple[int, ...]
76
+ pad_multiple: int
77
+
78
+
79
+ class Encoder:
80
+ FORMAT = "markers-v3-plainchains"
81
+
82
+ def __init__(self, tokenizer_repo: str = "Qwen/Qwen3.5-9B", pad_multiple: int = 128):
83
+ self.tok = AutoTokenizer.from_pretrained(tokenizer_repo)
84
+ self.pad_multiple = pad_multiple
85
+ ids = self.tok.convert_tokens_to_ids([STATE, Q, OPT, OPT_END, DECIDE, THINK, THINK_END])
86
+ if any(i is None or i == self.tok.unk_token_id for i in ids):
87
+ raise ValueError("marker tokens missing from tokenizer")
88
+ self.state_id, self.q_id, self.opt_id, self.opt_end_id, self.decide_id, self.think_id, self.think_end_id = ids
89
+ self.pad_id = self.tok.pad_token_id
90
+ special = set(self.tok.all_special_ids) | set(self.tok.get_added_vocab().values())
91
+ self.banned_ids = sorted(special - {self.think_end_id})
92
+ self.empty_think = self.encode("\n")
93
+
94
+ @property
95
+ def markers(self) -> Markers:
96
+ return Markers(self.pad_id, self.opt_end_id, self.think_end_id, tuple(self.empty_think), self.pad_multiple)
97
+
98
+ def encode(self, text: str) -> list[int]:
99
+ return self.tok(text, add_special_tokens=False).input_ids
100
+
101
+ @staticmethod
102
+ def option_block(q: Question) -> str:
103
+ return "".join(f"{OPT}{sanitize(o)}{OPT_END}\n" for o in q.options())
104
+
105
+ def chat(self, content: str) -> str:
106
+ return self.tok.apply_chat_template([{"role": "user", "content": content}], tokenize=False,
107
+ add_generation_prompt=True, enable_thinking=True)
108
+
109
+ def prompt_text(self, record: DataFormat, q: Question) -> str:
110
+ return self.chat(f"{STATE}{sanitize(record.state_text())}\n{Q}{sanitize(q.instruction_text())}\n{self.option_block(q)}")
111
+
112
+ def plain_prompt_text(self, record: DataFormat, q: Question) -> str:
113
+ options = "\n".join(sanitize(o) for o in q.options())
114
+ return self.chat(f"Context:\n{sanitize(record.state_text())}\n\nQuestion: {sanitize(q.instruction_text())}\n\nOptions:\n{options}")
115
+
116
+ def remainder_text(self, q: Question) -> str:
117
+ return f"{THINK_END}\n\n{self.option_block(q)}{DECIDE}"
118
+
119
+ def example(self, record: DataFormat, q: Question, source_id: int) -> Example:
120
+ prompt = self.encode(self.prompt_text(record, q))
121
+ remainder = self.encode(self.remainder_text(q))
122
+ if prompt[-2:] != self.encode(f"{THINK}\n") or remainder[0] != self.think_end_id or remainder[-1] != self.decide_id:
123
+ raise ValueError(f"unexpected layout for {record.id}/{q.id}")
124
+ if remainder.count(self.opt_end_id) != len(q.options()):
125
+ raise ValueError(f"option boundary count mismatch for {record.id}/{q.id}")
126
+ return Example(prompt=prompt, remainder=remainder, label=q.label_index(), target=q.target_vector(),
127
+ n_options=len(q.options()), source=record.source, source_id=source_id, record_id=record.id,
128
+ question_id=q.id, plain_prompt=self.encode(self.plain_prompt_text(record, q)))
129
+
130
+
131
+ def build_examples(records: Sequence[DataFormat], encoder: Encoder, sources: dict[str, int], max_len: int,
132
+ extra_len: int = 0) -> tuple[list[Example], int]:
133
+ out, dropped = [], 0
134
+ for r in records:
135
+ sid = sources.setdefault(r.source, len(sources))
136
+ for q in r.questions:
137
+ ex = encoder.example(r, q, sid)
138
+ if len(ex.prompt) + len(ex.remainder) + extra_len > max_len:
139
+ dropped += 1
140
+ continue
141
+ out.append(ex)
142
+ return out, dropped
143
+
144
+
145
+ def load_examples(path: str, encoder: Encoder, sources: dict[str, int], max_len: int, extra_len: int = 0,
146
+ limit: int = 0, seed: int = 0) -> tuple[list[Example], int]:
147
+ records = read_jsonl(path)
148
+ if limit and limit < len(records):
149
+ records = random.Random(seed).sample(records, limit)
150
+ return build_examples(records, encoder, sources, max_len, extra_len)
151
+
152
+
153
+ def readout_positions(ids: list[int], m: Markers) -> tuple[list[int], int]:
154
+ start = len(ids) - 1 - ids[::-1].index(m.think_end_id)
155
+ opts = [i for i in range(start, len(ids)) if ids[i] == m.opt_end_id]
156
+ return opts, len(ids) - 1
157
+
158
+
159
+ def padded_length(n: int, multiple: int) -> int:
160
+ return -(-n // multiple) * multiple if multiple > 1 else n
161
+
162
+
163
+ @dataclass
164
+ class CollateRow:
165
+ example: Example
166
+ input_ids: list[int]
167
+ group_id: int
168
+ closed: bool = True
169
+ chain_span: tuple[int, int] | None = None
170
+ logprobs: list[float] | None = None
171
+
172
+
173
+ def collate(rows: list[CollateRow], m: Markers) -> Batch:
174
+ B = len(rows)
175
+ T = padded_length(max(len(row.input_ids) for row in rows), m.pad_multiple)
176
+ K = max(row.example.n_options for row in rows)
177
+ input_ids = torch.full((B, T), m.pad_id, dtype=torch.long)
178
+ attention_mask = torch.zeros(B, T, dtype=torch.long)
179
+ opt_index = torch.zeros(B, K, dtype=torch.long)
180
+ opt_mask = torch.zeros(B, K, dtype=torch.bool)
181
+ decide_index = torch.zeros(B, dtype=torch.long)
182
+ labels = torch.zeros(B, dtype=torch.long)
183
+ targets = torch.zeros(B, K, dtype=torch.float32)
184
+ source_ids = torch.zeros(B, dtype=torch.long)
185
+ chain_mask = torch.zeros(B, T, dtype=torch.bool)
186
+ valid = torch.zeros(B, dtype=torch.bool)
187
+ group_ids = torch.zeros(B, dtype=torch.long)
188
+ think_start = torch.zeros(B, dtype=torch.long)
189
+ suffix_len = torch.zeros(B, dtype=torch.long)
190
+ old_logp = torch.zeros(B, T, dtype=torch.float32)
191
+ for b, row in enumerate(rows):
192
+ ex, ids, chain = row.example, row.input_ids, row.chain_span
193
+ n = len(ids)
194
+ input_ids[b, :n] = torch.tensor(ids, dtype=torch.long)
195
+ attention_mask[b, :n] = 1
196
+ opts, decide = readout_positions(ids, m)
197
+ if len(opts) != ex.n_options:
198
+ raise ValueError(f"expected {ex.n_options} option boundaries, found {len(opts)} for {ex.record_id}")
199
+ opt_index[b, :ex.n_options] = torch.tensor(opts, dtype=torch.long) + b * T
200
+ opt_mask[b, :ex.n_options] = True
201
+ decide_index[b] = decide + b * T
202
+ labels[b] = ex.label
203
+ if ex.target is not None:
204
+ targets[b, :ex.n_options] = torch.tensor(ex.target, dtype=torch.float32)
205
+ else:
206
+ targets[b, ex.label] = 1.0
207
+ source_ids[b] = ex.source_id
208
+ if chain is not None:
209
+ chain_mask[b, chain[0]:chain[1]] = True
210
+ valid[b] = row.closed
211
+ group_ids[b] = row.group_id
212
+ think_start[b] = len(ex.prompt)
213
+ suffix_len[b] = len(ex.remainder)
214
+ if row.logprobs is not None and chain is not None:
215
+ span = chain[1] - chain[0]
216
+ old_logp[b, chain[0]:chain[1]] = torch.tensor(row.logprobs[:span], dtype=torch.float32)
217
+ return Batch(input_ids, attention_mask, opt_index, opt_mask, decide_index, labels, targets, source_ids,
218
+ chain_mask, valid, group_ids, think_start, suffix_len, old_logp)
219
+
220
+
221
+ def collate_sft(examples: list[Example], m: Markers) -> Batch:
222
+ rows = []
223
+ for i, ex in enumerate(examples):
224
+ if ex.think is None:
225
+ rows.append(CollateRow(example=ex, input_ids=ex.prompt + list(m.empty_think) + ex.remainder, group_id=i))
226
+ else:
227
+ chain, ok = split_chain(ex.think, m)
228
+ rows.append(CollateRow(example=ex, input_ids=ex.prompt + chain + ex.remainder, group_id=i, closed=ok))
229
+ return collate(rows, m)
230
+
231
+
232
+ def collate_prompts(examples: list[Example], m: Markers, plain: bool = False) -> tuple[torch.Tensor, torch.Tensor]:
233
+ prompts = [ex.plain_prompt if plain else ex.prompt for ex in examples]
234
+ B, T = len(examples), padded_length(max(len(p) for p in prompts), m.pad_multiple)
235
+ input_ids = torch.full((B, T), m.pad_id, dtype=torch.long)
236
+ attention_mask = torch.zeros(B, T, dtype=torch.long)
237
+ for b, p in enumerate(prompts):
238
+ n = len(p)
239
+ input_ids[b, T - n:] = torch.tensor(p, dtype=torch.long)
240
+ attention_mask[b, T - n:] = 1
241
+ return input_ids, attention_mask
242
+
243
+
244
+ def split_chain(generated: list[int], m: Markers) -> tuple[list[int], bool]:
245
+ if m.think_end_id in generated:
246
+ return generated[:generated.index(m.think_end_id)], True
247
+ return generated, False
248
+
249
+
250
+ def collate_rollouts(examples: list[Example], generated: list[list[int]], group_ids: list[int], m: Markers,
251
+ logprobs: list[list[float] | None] | None = None) -> Batch:
252
+ rows = []
253
+ for i, (ex, gen, group) in enumerate(zip(examples, generated, group_ids)):
254
+ chain, ok = split_chain(gen, m)
255
+ ids = ex.prompt + chain + ex.remainder
256
+ span = (len(ex.prompt), len(ex.prompt) + len(chain) + int(ok))
257
+ rows.append(CollateRow(example=ex, input_ids=ids, group_id=group, closed=ok, chain_span=span,
258
+ logprobs=logprobs[i] if logprobs is not None else None))
259
+ return collate(rows, m)
260
+
261
+
262
+ def make_loader(examples: list[Example], batch_size: int, m: Markers, shuffle: bool, rank: int = 0, world_size: int = 1,
263
+ seed: int = 0, drop_last: bool = True, num_workers: int = 2) -> DataLoader:
264
+ sampler = DistributedSampler(examples, num_replicas=world_size, rank=rank, shuffle=shuffle, seed=seed,
265
+ drop_last=drop_last) if world_size > 1 else None
266
+ return DataLoader(examples, batch_size=batch_size, shuffle=shuffle and sampler is None, sampler=sampler,
267
+ collate_fn=partial(collate_sft, m=m), num_workers=num_workers, pin_memory=True, drop_last=drop_last,
268
+ persistent_workers=num_workers > 0, generator=torch.Generator().manual_seed(seed))
provenance/upstream_head.py ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from torch import Tensor, nn
2
+
3
+
4
+ class PointerHead(nn.Module):
5
+ def __init__(self, d_embed: int, d_latent: int = 256):
6
+ super().__init__()
7
+ self.q = nn.Linear(d_embed, d_latent)
8
+ self.k = nn.Linear(d_embed, d_latent)
9
+ self.scale = d_latent**-0.5
10
+ self.temperature = 1.0
11
+
12
+ def forward(
13
+ self,
14
+ questions: Tensor, # (B, K, D)
15
+ decide: Tensor # (B, D)
16
+ ) -> Tensor:
17
+ options = self.k(questions.to(self.k.weight.dtype))
18
+ query = self.q(decide.to(self.q.weight.dtype))
19
+ logits = (options @ query.unsqueeze(-1)).squeeze(-1) * self.scale
20
+ return logits if self.training or self.temperature == 1.0 else logits / self.temperature
provenance/upstream_model_card.md ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ base_model: Qwen/Qwen3.5-9B
4
+ language:
5
+ - en
6
+ pipeline_tag: text-classification
7
+ tags:
8
+ - decision
9
+ - calibration
10
+ - reasoning
11
+ - speculative-decoding
12
+ - qwen3.5
13
+ ---
14
+
15
+ # Jeeves-9B
16
+
17
+ A Jev-like decision model that reasons before it decides. Give it a state (text or JSON) and yes/no, multiple-choice or rating questions; it writes a reasoning chain per question and returns a calibrated probability for every option.
18
+
19
+ This repository holds the fused weights (Qwen3.5-9B with the LoRA merged), the pointer head, the fitted temperature, and two speculative-decoding drafters. It loads with the Jeeves code, not with `transformers`: the pointer head and the prompt format are part of the model.
20
+
21
+ ## Files
22
+
23
+ | file | contents |
24
+ |---|---|
25
+ | `model-*.safetensors`, `config.json` | fused Qwen3.5-9B weights, bf16 |
26
+ | `head.pt` | pointer head (query and key projections, 256-dim) |
27
+ | `export.json` | temperature (1.859), prompt format, training step and config |
28
+ | `tokenizer.json`, `vocab.json`, `merges.txt`, `tokenizer_config.json`, `chat_template.jinja` | Qwen3.5 tokenizer |
29
+ | `drafter_k4.safetensors` | block-4 drafter, the serving default, bf16 |
30
+ | `drafter_k8.safetensors` | block-8 drafter, faster for single-question requests, bf16 |
31
+ | `drafter_k4.config.json`, `drafter_k8.config.json` | drafter training settings |
32
+ | `LICENSE` | Apache-2.0, inherited from Qwen3.5-9B |
33
+
34
+ ## Usage
35
+
36
+ ```bash
37
+ hf download PostHog/jeeves --local-dir jeeves-weights
38
+ git clone https://github.com/PostHog/jeeves && cd jeeves
39
+ python -m inference.serve --model ../jeeves-weights --drafter ../jeeves-weights/drafter_k4.safetensors --port 8009
40
+ ```
41
+
42
+ ```bash
43
+ curl -s localhost:8009/v1/systemone -H 'content-type: application/json' -d '{
44
+ "state": "I was charged twice for one order.",
45
+ "questions": {
46
+ "billing": {"type": "noul", "instructions": "Is this about billing?"},
47
+ "tone": {"type": "choice", "instructions": "What is the customer'"'"'s tone?", "criteria": {"calm": null, "frustrated": null, "angry": null}}
48
+ }}'
49
+ ```
50
+
51
+ The request and response follow Jev's `/v1/systemone` format. An optional `options` object sets `think`, `max_think` (truncate chains), `nothink_threshold` (skip thinking when the no-think answer is already confident) and `return_reasoning`. Serving needs a CUDA GPU; the FP8 kernel needs Hopper, and `--no-fp8` serves in bf16.
52
+
53
+ ## Results
54
+
55
+ Accuracy with thinking, greedy, 2,560-token cap. Kev-9B and Jev numbers are the ones Kev publishes. JevBench uses the same 231 public items for every model (the sealed judge tier is not included); the other rows use the same sources with different items.
56
+
57
+ | | Kev-9B | Jev | Jeeves-9B |
58
+ |---|---|---|---|
59
+ | Test overall (out-of-domain and held-out) | 0.822 | 0.857 | **0.889** |
60
+ | MMLU-Pro and buried state | 0.579 | **0.800** | 0.746 |
61
+ | JevBench, public tiers | 0.715* | 0.866 | **0.935** |
62
+ | JevBench hard | 0.451* | 0.730 | **0.865** |
63
+
64
+ \* Kev-8B (Qwen3); no Kev-9B JevBench result is published.
65
+
66
+ Without thinking the model scores 0.804 on the Jeeves test split, against 0.840 with it. With the fitted temperature the no-think path has a top-label calibration error of 0.021 and 1.3% confident errors (wrong at p ≥ 0.9).
67
+
68
+ Serving on one H100, 325 dev questions:
69
+
70
+ | setting | accuracy | median / p90 latency |
71
+ |---|---|---|
72
+ | full thinking | 0.825 | 3.3 s / 17.1 s |
73
+ | `max_think` 768, `nothink_threshold` 0.9 | 0.806 | 2.0 s / 5.6 s |
74
+ | no thinking | 0.775 | about 0.3 s |
75
+
76
+ ## Training
77
+
78
+ - **SFT.** LoRA r=16 on every projection plus the pointer head, 2 epochs on 19,126 questions from 12 public datasets and synthetic policy data; half the questions carry a reasoning chain sampled from the base model.
79
+ - **CISPO.** 9,992 RL questions, 8 rollouts each, up to 2,560 thinking tokens. Reward is the probability of the correct option, discounted by up to 10% for long chains. The released checkpoint is step 402 of a 624-step schedule.
80
+ - **Calibration.** One softmax temperature fitted on the dev set.
81
+ - **Drafters.** Diffusion views of the frozen model, inspired by Orthrus, distilled by KL divergence on chains sampled from this model. At one question the block-4 drafter decodes 1.6× faster than graphed greedy decoding and the block-8 drafter 1.76×.
82
+
83
+ A from-scratch reproduction with the released code matched this checkpoint within noise. The training code, dataset build scripts and pinned dataset revisions are in the GitHub repository.
84
+
85
+ ## Limitations
86
+
87
+ - Knowledge questions trail Jev (MMLU 0.793 vs 0.900, MMLU-Pro 0.739 vs 0.840).
88
+ - Thinking is slow at the tail (17 s at p90 with full chains); use `max_think` and `nothink_threshold` when latency matters.
89
+ - About a third of full-length chains hit the token cap without closing; accuracy on those items is lower.
90
+ - Evaluated on English inputs only.
91
+
92
+ ## License
93
+
94
+ The weights are derived from Qwen3.5-9B and are released under its Apache-2.0 license (`LICENSE`). The Jeeves code is MIT licensed.
95
+
96
+ ## Citation
97
+
98
+ ```bibtex
99
+ @software{waltz2026jeeves,
100
+ author = {Waltz, Nicholas P.},
101
+ title = {Jeeves: Reasoning Improves Jev-like Decisions},
102
+ year = {2026},
103
+ url = {https://github.com/PostHog/jeeves},
104
+ note = {Qwen3.5-9B decision model trained with SFT and CISPO, with a block-4 diffusion drafter}
105
+ }
106
+ ```
requirements-mac.txt ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ mlx==0.32.3
2
+ mlx-lm @ git+https://github.com/ml-explore/mlx-lm.git@94cdcae13b266c337bcaca09b97b9c5a9c0e2cde
3
+ transformers==5.17.0
4
+ huggingface-hub==1.33.0
5
+ numpy==2.5.3
6
+ safetensors==0.8.0
run_jeeves.py ADDED
@@ -0,0 +1,180 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """MLX Jeeves runner: no-thinking decisions and optional ordinary greedy reasoning.
2
+
3
+ This is a correctness-oriented runner, not a port of the CUDA speculative server.
4
+ The pointer head stays FP32. Each question gets its own recurrent/KV cache.
5
+ """
6
+ from __future__ import annotations
7
+ import argparse
8
+ import json
9
+ import platform
10
+ import sys
11
+ import time
12
+ from pathlib import Path
13
+ import numpy as np
14
+ import mlx.core as mx
15
+ from mlx_lm import load
16
+
17
+ # Keep the vendored, torch-free format modules next to this runner.
18
+ sys.path.insert(0, str(Path(__file__).resolve().parent))
19
+ from dataformat import DataFormat
20
+ from jeeves_format import Encoder, readout_positions
21
+
22
+
23
+ def head_scores(weights, hidden, temperature):
24
+ if not np.isfinite(temperature) or temperature <= 0:
25
+ raise ValueError("The exported calibration temperature must be finite and positive.")
26
+ h = mx.array(hidden, dtype=mx.float32)
27
+ options = h[:-1] @ weights["k.weight"].T + weights["k.bias"]
28
+ query = h[-1] @ weights["q.weight"].T + weights["q.bias"]
29
+ raw = (options @ query) * (weights["q.weight"].shape[0] ** -0.5)
30
+ calibrated = raw / temperature
31
+ probabilities = mx.softmax(calibrated, axis=-1)
32
+ mx.eval(raw, calibrated, probabilities)
33
+ result = tuple(np.asarray(x, dtype=np.float32) for x in (raw, calibrated, probabilities))
34
+ if not all(np.isfinite(x).all() for x in result) or not np.isclose(result[2].sum(), 1.0, atol=1e-5):
35
+ raise FloatingPointError("Non-finite or invalid decision probabilities.")
36
+ return result
37
+
38
+
39
+ class JeevesMLX:
40
+ def __init__(self, model_dir, *, device="auto", chunk_size=16, max_context=4096):
41
+ self.path = Path(model_dir).expanduser().resolve()
42
+ if device == "auto":
43
+ device = "gpu" if platform.system() == "Darwin" and mx.metal.is_available() else "cpu"
44
+ if device not in {"cpu", "gpu"}:
45
+ raise ValueError("device must be auto, cpu, or gpu")
46
+ if device == "gpu" and not mx.metal.is_available():
47
+ raise RuntimeError("This runner's GPU mode requires Apple Metal. Use --device cpu on Colab.")
48
+ mx.set_default_device(mx.cpu if device == "cpu" else mx.gpu)
49
+ self.device = device
50
+ self.chunk_size = int(chunk_size)
51
+ self.max_context = int(max_context)
52
+ if self.chunk_size < 1 or self.max_context < 1:
53
+ raise ValueError("chunk_size and max_context must be positive")
54
+ self.export = json.loads((self.path / "export.json").read_text())
55
+ self.temperature = float(self.export["temperature"])
56
+ self.encoder = Encoder(str(self.path), pad_multiple=1)
57
+ if self.encoder.FORMAT != self.export["format"]:
58
+ raise ValueError("The exported prompt format does not match the bundled encoder.")
59
+ self.model, _ = load(str(self.path), tokenizer_config={"trust_remote_code": False}, lazy=False)
60
+ self.lm = self.model.language_model
61
+ self.core = self.lm.model
62
+ self.model.eval()
63
+ self.head = {k: v.astype(mx.float32) for k, v in mx.load(str(self.path / "head.safetensors")).items()}
64
+ mx.eval(self.head)
65
+ if set(self.head) != {"q.weight", "q.bias", "k.weight", "k.bias"}:
66
+ raise ValueError("Unexpected pointer-head tensors")
67
+ self.max_context = min(self.max_context, self.lm.args.max_position_embeddings)
68
+
69
+ def _evaluate(self, tokens, cache):
70
+ h = self.core(mx.array(tokens, dtype=mx.int32)[None], cache=cache)
71
+ mx.eval(h, [entry.state for entry in cache])
72
+ return h
73
+
74
+ def score_tokens(self, ids, n_options, *, progress=False):
75
+ """Return selected final-normalized hidden states plus head probabilities."""
76
+ if not ids or len(ids) > self.max_context:
77
+ raise ValueError(f"Input length {len(ids)} exceeds cap {self.max_context}; no silent truncation.")
78
+ if ids[-1] != self.encoder.decide_id:
79
+ raise ValueError("The last token is not the Jeeves decision marker.")
80
+ opts, decide = readout_positions(ids, self.encoder.markers)
81
+ if len(opts) != n_options:
82
+ raise ValueError("Suffix option marker count mismatch")
83
+ positions = opts + [decide]
84
+ selected = {}
85
+ cache = self.lm.make_cache()
86
+ for start in range(0, len(ids), self.chunk_size):
87
+ end = min(start + self.chunk_size, len(ids))
88
+ h = self._evaluate(ids[start:end], cache)
89
+ for pos in positions:
90
+ if start <= pos < end:
91
+ selected[pos] = np.asarray(h[0, pos - start].astype(mx.float32)).copy()
92
+ if progress:
93
+ print(f" CPU prefill {end}/{len(ids)} tokens", flush=True)
94
+ hidden = np.stack([selected[pos] for pos in positions])
95
+ if not np.isfinite(hidden).all():
96
+ raise FloatingPointError("Non-finite hidden states")
97
+ raw, logits, probabilities = head_scores(self.head, hidden, self.temperature)
98
+ return {"hidden": hidden, "raw_logits": raw, "logits": logits, "probabilities": probabilities,
99
+ "option_positions": opts, "decide_position": decide}
100
+
101
+ def greedy_chain(self, prompt, budget):
102
+ """No speculative drafting. Stop before </think>; caller adds the suffix."""
103
+ if budget < 1 or len(prompt) + budget > self.max_context:
104
+ raise ValueError("Invalid reasoning budget or context overflow")
105
+ cache = self.lm.make_cache()
106
+ for start in range(0, len(prompt), self.chunk_size):
107
+ h = self._evaluate(prompt[start:start + self.chunk_size], cache)
108
+ banned = mx.array(self.encoder.banned_ids, dtype=mx.int32)
109
+ bias = mx.zeros((self.lm.args.vocab_size,), dtype=mx.float32)
110
+ bias[banned] = -1e4 # Same suppression magnitude as the upstream predictor.
111
+ chain = []
112
+ for _ in range(budget):
113
+ logits = (self.lm.model.embed_tokens.as_linear(h[:, -1]) if self.lm.args.tie_word_embeddings
114
+ else self.lm.lm_head(h[:, -1]))
115
+ logits = logits.astype(mx.float32) + bias
116
+ token = int(mx.argmax(logits[0]).item())
117
+ if token == self.encoder.think_end_id:
118
+ return chain, True
119
+ chain.append(token)
120
+ h = self._evaluate([token], cache)
121
+ return chain, False
122
+
123
+ def predict(self, request, *, think_tokens=0):
124
+ if not isinstance(think_tokens, int) or isinstance(think_tokens, bool) or think_tokens < 0:
125
+ raise ValueError("think_tokens must be a nonnegative integer")
126
+ record = DataFormat.from_dict(request)
127
+ if len(record.questions) > 64:
128
+ raise ValueError("At most 64 questions per request in this reference runner")
129
+ results = {}
130
+ for question in record.questions:
131
+ keys = question.keys()
132
+ if not keys:
133
+ raise ValueError(f"Question {question.id} has no options")
134
+ prompt = self.encoder.encode(self.encoder.prompt_text(record, question))
135
+ suffix = self.encoder.encode(self.encoder.remainder_text(question))
136
+ if len(prompt) + max(think_tokens, len(self.encoder.empty_think)) + len(suffix) > self.max_context:
137
+ raise ValueError("Request plus reasoning/suffix exceeds max_context; shorten the request.")
138
+ started = time.perf_counter()
139
+ if think_tokens:
140
+ chain, closed = self.greedy_chain(prompt, think_tokens)
141
+ else:
142
+ chain, closed = list(self.encoder.empty_think), True
143
+ # Re-prefill the exact complete sequence for readout. Safe, but not latency-optimized.
144
+ scored = self.score_tokens(prompt + chain + suffix, len(keys))
145
+ p = scored["probabilities"]
146
+ results[question.id] = {
147
+ "type": question.type, "selected": keys[int(p.argmax())],
148
+ "probabilities": {key: float(value) for key, value in zip(keys, p)},
149
+ "input_tokens": len(prompt) + len(chain) + len(suffix),
150
+ "reasoning_tokens": len(chain) if think_tokens else 0,
151
+ "reasoning_closed": closed if think_tokens else None,
152
+ "reasoning": self.encoder.tok.decode(chain, skip_special_tokens=False) if think_tokens else None,
153
+ "elapsed_seconds": time.perf_counter() - started,
154
+ }
155
+ return {"model": "PostHog/jeeves (MLX port)", "device": self.device,
156
+ "mode": "greedy-thinking" if think_tokens else "no-thinking",
157
+ "temperature": self.temperature, "results": results}
158
+
159
+
160
+ def main():
161
+ parser = argparse.ArgumentParser(description=__doc__)
162
+ parser.add_argument("--model", default=str(Path(__file__).resolve().parent))
163
+ parser.add_argument("--request", required=True, help="Path to a JSON state/questions object")
164
+ parser.add_argument("--output", default="")
165
+ parser.add_argument("--device", choices=["auto", "cpu", "gpu"], default="auto")
166
+ parser.add_argument("--chunk-size", type=int, default=16)
167
+ parser.add_argument("--max-context", type=int, default=4096)
168
+ parser.add_argument("--think-tokens", type=int, default=0)
169
+ args = parser.parse_args()
170
+ model = JeevesMLX(args.model, device=args.device, chunk_size=args.chunk_size, max_context=args.max_context)
171
+ request = json.loads(Path(args.request).read_text(encoding="utf-8"))
172
+ result = model.predict(request, think_tokens=args.think_tokens)
173
+ text = json.dumps(result, indent=2, ensure_ascii=False, allow_nan=False)
174
+ if args.output:
175
+ Path(args.output).write_text(text + "\n", encoding="utf-8")
176
+ print(text)
177
+
178
+
179
+ if __name__ == "__main__":
180
+ main()
tokenizer.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:06b9509352d2af50381ab2247e083b80d32d5c0aba91c272ca9ff729b6a0e523
3
+ size 19989325
tokenizer_config.json ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "add_prefix_space": false,
3
+ "audio_bos_token": "<|audio_start|>",
4
+ "audio_eos_token": "<|audio_end|>",
5
+ "audio_token": "<|audio_pad|>",
6
+ "backend": "tokenizers",
7
+ "bos_token": null,
8
+ "clean_up_tokenization_spaces": false,
9
+ "eos_token": "<|im_end|>",
10
+ "errors": "replace",
11
+ "image_token": "<|image_pad|>",
12
+ "is_local": true,
13
+ "local_files_only": false,
14
+ "model_max_length": 262144,
15
+ "model_specific_special_tokens": {
16
+ "audio_bos_token": "<|audio_start|>",
17
+ "audio_eos_token": "<|audio_end|>",
18
+ "audio_token": "<|audio_pad|>",
19
+ "image_token": "<|image_pad|>",
20
+ "video_token": "<|video_pad|>",
21
+ "vision_bos_token": "<|vision_start|>",
22
+ "vision_eos_token": "<|vision_end|>"
23
+ },
24
+ "pad_token": "<|endoftext|>",
25
+ "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+",
26
+ "split_special_tokens": false,
27
+ "tokenizer_class": "Qwen2Tokenizer",
28
+ "tool_parser_type": "qwen3_coder",
29
+ "unk_token": null,
30
+ "video_token": "<|video_pad|>",
31
+ "vision_bos_token": "<|vision_start|>",
32
+ "vision_eos_token": "<|vision_end|>"
33
+ }
validation.json ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "variant": "jeeves-mlx-4bit",
3
+ "identity": "c4d0ea30e584dbf0d1e672c59c2e00036cb6a1a7025833ef49c01c63432b18fa",
4
+ "conversion": "weights_converted_and_structurally_checked",
5
+ "format_head_checks": {
6
+ "status": "passed",
7
+ "format_cases": 4,
8
+ "original_head_dtypes": {
9
+ "q.weight": "torch.float32",
10
+ "q.bias": "torch.float32",
11
+ "k.weight": "torch.float32",
12
+ "k.bias": "torch.float32"
13
+ },
14
+ "exported_head_dtype": "float32",
15
+ "temperature": 1.8589280843734741,
16
+ "max_head_probability_error": 0.0,
17
+ "scope": "Original encoder token/readout parity, safe head serialization, and original PyTorch head vs MLX head on synthetic hidden states. Not backbone parity."
18
+ },
19
+ "cpu_smoke": {
20
+ "status": "passed",
21
+ "identity": "c4d0ea30e584dbf0d1e672c59c2e00036cb6a1a7025833ef49c01c63432b18fa",
22
+ "device": "cpu",
23
+ "cases": [
24
+ {
25
+ "id": "case0",
26
+ "probabilities": [
27
+ 0.016998127102851868,
28
+ 0.9830018877983093
29
+ ],
30
+ "elapsed_seconds": 4345.674271831
31
+ }
32
+ ],
33
+ "fixture_sha256": "2887c941fd5a497ae51343a9e2382ea1d198ab5eb140f4e8c8fd37c54be4ebf0",
34
+ "scope": "Small no-thinking execution smoke test; not a benchmark."
35
+ },
36
+ "bf16_backbone_parity": {
37
+ "status": "small_fixture_check_passed",
38
+ "cases": [
39
+ {
40
+ "id": "case0",
41
+ "maximum_probability_delta": 0.00010848045349121094,
42
+ "minimum_hidden_cosine": 0.9999632468948669,
43
+ "top_option_agreement": true,
44
+ "within_diagnostic_tolerances": true
45
+ }
46
+ ],
47
+ "probability_atol": 0.02,
48
+ "minimum_cosine": 0.995,
49
+ "scope": "Heuristic diagnostic tolerances, not bitwise equivalence or general accuracy evidence."
50
+ },
51
+ "apple_metal_validation": "not_run",
52
+ "task_accuracy_calibration_benchmark": "not_run",
53
+ "speculative_drafters": "not_ported",
54
+ "greedy_generation_validation": "not_run",
55
+ "quantization_vs_mlx_bf16": {
56
+ "cases": [
57
+ {
58
+ "id": "case0",
59
+ "maximum_probability_delta": 0.016297996044158936,
60
+ "top_option_agreement": true
61
+ }
62
+ ],
63
+ "status": "measured_not_quality_certified"
64
+ },
65
+ "overall_status": "converted_and_small_cpu_diagnostics_passed_not_benchmarked",
66
+ "diagnostic_failures": []
67
+ }