Michael-Kozu commited on
Commit
e329b52
·
0 Parent(s):

style: remove thesis side rule

Browse files
.gitattributes ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ tokenizer.json filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,641 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ library_name: transformers
4
+ pipeline_tag: text-generation
5
+ language:
6
+ - en
7
+ tags:
8
+ - kozu
9
+ - reasoning
10
+ - trace-inversion
11
+ - synthetic-reasoning
12
+ - chain-of-thought
13
+ datasets:
14
+ - open-thoughts/OpenThoughts3-1.2M
15
+ ---
16
+
17
+ <!-- ═══════════════════════════════════════════════════════════════ -->
18
+ <!-- Kozu AI · Kuiper-R1 Model Card -->
19
+ <!-- Visual direction: useghost.sh-inspired editorial minimalism -->
20
+ <!-- Type: Geist Pixel Square (display) + Geist Sans/Mono -->
21
+ <!-- -->
22
+ <!-- Model Classes (set in .kz-base eyebrow via <span class="o">): -->
23
+ <!-- · Satellite Class — smallest / distilled -->
24
+ <!-- · Planetary Class — mid-tier -->
25
+ <!-- · Stellar Class — frontier / large -->
26
+ <!-- -->
27
+ <!-- The class name and model name remain neutral and high-contrast. -->
28
+ <!-- ═══════════════════════════════════════════════════════════════ -->
29
+
30
+ <style>
31
+ /* Geist is licensed under the SIL Open Font License 1.1. */
32
+ @font-face { font-family: 'Geist Sans'; src: url('https://raw.githubusercontent.com/vercel/geist-font/v1.7.2/fonts/Geist/webfonts/Geist%5Bwght%5D.woff2') format('woff2'); font-weight: 100 900; font-display: swap; }
33
+ @font-face { font-family: 'Geist Mono'; src: url('https://raw.githubusercontent.com/vercel/geist-font/v1.7.2/fonts/GeistMono/webfonts/GeistMono%5Bwght%5D.woff2') format('woff2'); font-weight: 100 900; font-display: swap; }
34
+ @font-face { font-family: 'Geist Pixel Square'; src: url('https://raw.githubusercontent.com/vercel/geist-font/v1.7.2/fonts/GeistPixel/webfonts/GeistPixel-Square.woff2') format('woff2'); font-weight: 500; font-display: swap; }
35
+
36
+ .kz {
37
+ --bg: #FFFFFF;
38
+ --bg-2: #FAFAFA;
39
+ --surface: #FFFFFF;
40
+ --surface-2: #F5F5F5;
41
+ --surface-3: #EBEBEB;
42
+ --border: #E5E5E5;
43
+ --border-strong:#D4D4D4;
44
+ --border-accent:#A3A3A3;
45
+ --fg: #0A0A0A;
46
+ --fg-dim: #404040;
47
+ --muted: #737373;
48
+ --muted-2: #A3A3A3;
49
+ --orange: #171717;
50
+ --orange-dim: #525252;
51
+ --blue: #2563EB;
52
+ --green: #009767;
53
+ --grid: rgba(10,10,10,0.035);
54
+
55
+ --font-display: 'Geist Pixel Square', 'Geist Mono', ui-monospace, monospace;
56
+ --font-mono: 'Geist Mono', ui-monospace, SFMono-Regular, Menlo, monospace;
57
+ --font-sans: 'Geist Sans', ui-sans-serif, system-ui, sans-serif;
58
+
59
+ font-family: var(--font-sans);
60
+ color: var(--fg);
61
+ background: var(--bg);
62
+ max-width: 960px;
63
+ margin: 0 auto;
64
+ padding: 0 0 72px;
65
+ line-height: 1.6;
66
+ font-size: 15px;
67
+ -webkit-font-smoothing: antialiased;
68
+ }
69
+
70
+ @media (prefers-color-scheme: dark) {
71
+ .kz {
72
+ --bg: #0A0A0A;
73
+ --bg-2: #111111;
74
+ --surface: #171717;
75
+ --surface-2: #262626;
76
+ --surface-3: #303030;
77
+ --border: rgba(255,255,255,0.10);
78
+ --border-strong:#404040;
79
+ --border-accent:#737373;
80
+ --fg: #FAFAFA;
81
+ --fg-dim: #D4D4D4;
82
+ --muted: #A3A3A3;
83
+ --muted-2: #737373;
84
+ --orange: #E5E5E5;
85
+ --orange-dim: #A3A3A3;
86
+ --blue: #60A5FA;
87
+ --green: #00D294;
88
+ --grid: rgba(255,255,255,0.03);
89
+ }
90
+ }
91
+
92
+ /* ── Hero ── */
93
+ .kz-hero {
94
+ position: relative;
95
+ overflow: hidden;
96
+ min-height: 280px;
97
+ margin-bottom: 0;
98
+ background: var(--bg);
99
+ border-bottom: 1px solid var(--border);
100
+ }
101
+ .kz-hero img {
102
+ display: block; width: 100%; height: auto;
103
+ }
104
+ .kz-hero--plain {
105
+ min-height: 240px;
106
+ display: flex;
107
+ align-items: flex-end;
108
+ }
109
+ .kz-ident {
110
+ position: absolute; bottom: 0; left: 0; right: 0;
111
+ padding: 120px 40px 36px;
112
+ background: linear-gradient(
113
+ to top,
114
+ var(--bg) 0%,
115
+ color-mix(in oklab, var(--bg) 92%, transparent) 35%,
116
+ color-mix(in oklab, var(--bg) 55%, transparent) 65%,
117
+ transparent 100%
118
+ );
119
+ }
120
+ .kz-hero--plain .kz-ident {
121
+ position: relative;
122
+ width: 100%;
123
+ padding: 64px 40px 40px;
124
+ background: none;
125
+ }
126
+ .kz-hero-main { width: 100%; min-width: 0; }
127
+ .kz-thesis {
128
+ margin: 0 40px;
129
+ padding: 30px 0 28px;
130
+ border-bottom: 1px solid var(--border-strong);
131
+ display: flex;
132
+ align-items: baseline;
133
+ justify-content: space-between;
134
+ gap: 24px;
135
+ }
136
+ .kz-thesis strong {
137
+ max-width: 32ch;
138
+ font-family: var(--font-display);
139
+ font-size: clamp(20px, 3vw, 28px);
140
+ font-weight: 500;
141
+ line-height: 1.2;
142
+ color: var(--fg);
143
+ }
144
+ .kz-thesis span {
145
+ flex-shrink: 0;
146
+ font-family: var(--font-mono);
147
+ font-size: 10px;
148
+ color: var(--muted);
149
+ letter-spacing: .1em;
150
+ text-transform: uppercase;
151
+ }
152
+ /* Model name: may use .o for last-word / key-word emphasis */
153
+ .kz-name {
154
+ font-family: var(--font-display);
155
+ font-size: clamp(42px, 6vw, 64px);
156
+ font-weight: 500;
157
+ color: var(--fg);
158
+ letter-spacing: -0.025em;
159
+ line-height: 1.0;
160
+ margin: 0 0 12px;
161
+ }
162
+ .kz-name .o { color: var(--fg); }
163
+ .kz-name .dim { color: var(--muted); }
164
+ /* Class label in eyebrow: wrap class name in <span class="kz-class"> */
165
+ /* Satellite Class / Planetary Class / Stellar Class */
166
+ .kz-base {
167
+ font-family: var(--font-mono);
168
+ font-size: 11px;
169
+ font-weight: 500;
170
+ color: var(--fg-dim);
171
+ letter-spacing: 0.14em;
172
+ text-transform: uppercase;
173
+ display: inline-flex;
174
+ align-items: center;
175
+ gap: 10px;
176
+ }
177
+ .kz-base .dot {
178
+ display: inline-block;
179
+ width: 6px; height: 6px; border-radius: 50%;
180
+ background: var(--orange);
181
+ }
182
+ /* Model class uses the same restrained monochrome emphasis. */
183
+ .kz-base .kz-class { color: var(--orange); }
184
+ .kz-icon { width: 16px; height: 16px; flex: 0 0 16px; color: currentColor; }
185
+ .kz-chip-cloud { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 22px; }
186
+
187
+ /* ── Sections ── */
188
+ .kz-section { padding: 64px 40px 0; }
189
+ .kz-shead {
190
+ display: flex; align-items: center; justify-content: space-between;
191
+ gap: 24px; padding-bottom: 16px; margin-bottom: 28px;
192
+ border-bottom: 1px solid var(--border-strong);
193
+ }
194
+ .kz-shead-left { display: flex; align-items: center; gap: 12px; }
195
+ .kz-sglyph { width: 24px; height: 24px; display: inline-flex; align-items: center; justify-content: center; color: var(--fg); flex-shrink: 0; }
196
+ .kz-sglyph .kz-icon { width: 18px; height: 18px; flex-basis: 18px; }
197
+ .kz-stitle {
198
+ font-family: var(--font-display); font-size: 14px; font-weight: 500;
199
+ letter-spacing: 0.14em; text-transform: uppercase; color: var(--fg); margin: 0;
200
+ }
201
+ /* Bumped from --muted-2 for legibility in dark mode */
202
+ .kz-snum {
203
+ font-family: var(--font-mono); font-size: 11px; font-weight: 400;
204
+ color: var(--muted); letter-spacing: 0.12em;
205
+ }
206
+ .kz-sbody { color: var(--fg-dim); font-family: var(--font-sans); }
207
+ .kz-sbody p { margin: 0 0 14px; font-size: 15px; line-height: 1.65; max-width: 64ch; }
208
+ .kz-sbody p:last-child { margin-bottom: 0; }
209
+ .kz-sbody p strong { color: var(--fg); font-weight: 600; }
210
+ .kz-sbody p .o { color: var(--orange); font-weight: 500; }
211
+ .kz-lead { font-size: 18px !important; line-height: 1.6 !important; color: var(--fg-dim); max-width: 60ch; }
212
+
213
+ /* ── Cards / Facts ── */
214
+ .kz-stack {
215
+ display: grid; grid-template-columns: 1fr 1fr; gap: 16px;
216
+ border: 0; background: transparent; align-items: stretch;
217
+ }
218
+ .kz-stack > .kz-card { border: 1px solid var(--border); }
219
+ .kz-stack > .kz-card:last-child { border-right: 1px solid var(--border); }
220
+ .kz-stack--asym { grid-template-columns: minmax(0, 1.3fr) minmax(240px, .7fr); align-items: stretch; }
221
+ .kz-stack--asym > .kz-card:last-child { margin-top: 0; }
222
+ @media (max-width: 720px) {
223
+ .kz-stack { grid-template-columns: 1fr; }
224
+ .kz-stack > .kz-card { border: 1px solid var(--border); }
225
+ .kz-stack > .kz-card:last-child { border: 1px solid var(--border); }
226
+ .kz-stack--asym > .kz-card:last-child { margin-top: 0; }
227
+ }
228
+ .kz-card { min-width: 0; background: var(--surface); padding: 24px 28px; border-radius: 8px; transition: background 0.15s ease, border-color 0.15s ease; }
229
+ .kz-card:hover { background: var(--surface-2); border-color: var(--border-strong); }
230
+ .kz-card-head {
231
+ font-family: var(--font-display); font-size: 13px; font-weight: 500;
232
+ letter-spacing: 0.14em; text-transform: uppercase;
233
+ color: var(--fg);
234
+ padding-bottom: 14px; margin-bottom: 14px;
235
+ border-bottom: 1px solid var(--border-strong);
236
+ min-height: 34px; display: flex; align-items: center; gap: 10px;
237
+ }
238
+ .kz-row {
239
+ display: grid; grid-template-columns: minmax(96px, 12ch) minmax(0, 1fr);
240
+ align-items: baseline; column-gap: 12px; padding: 8px 0;
241
+ border-bottom: 1px solid var(--border);
242
+ }
243
+ .kz-row:last-child { border-bottom: none; }
244
+ .kz-key {
245
+ font-family: var(--font-mono); font-size: 10.5px; font-weight: 400;
246
+ color: var(--muted); letter-spacing: 0.08em; text-transform: uppercase;
247
+ }
248
+ .kz-val { font-family: var(--font-mono); font-size: 13px; font-weight: 500; color: var(--fg); }
249
+ .kz-val .o { color: var(--orange); }
250
+ .kz-val .b { color: var(--blue); }
251
+ .kz-val .g { color: var(--green); }
252
+
253
+ /* ── Quantization grid ── */
254
+ .kz-qgrid {
255
+ display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
256
+ gap: 12px; border: 0;
257
+ }
258
+ .kz-qcell {
259
+ background: var(--surface-2); border: 1px solid var(--border);
260
+ border-radius: 8px; padding: 18px 20px;
261
+ display: flex; flex-direction: column; gap: 8px; transition: background 0.15s ease;
262
+ }
263
+ .kz-qcell:hover { background: var(--surface-3); border-color: var(--border-strong); }
264
+ .kz-qhead { display: flex; align-items: center; justify-content: space-between; }
265
+ .kz-qtype {
266
+ font-family: var(--font-mono); font-size: 10.5px; font-weight: 500;
267
+ letter-spacing: 0.12em; text-transform: uppercase; color: var(--fg);
268
+ }
269
+ .kz-qsize {
270
+ font-family: var(--font-mono); font-size: 10px;
271
+ letter-spacing: 0.1em; text-transform: uppercase; color: var(--muted);
272
+ }
273
+ .kz-qcell a {
274
+ font-family: var(--font-mono); font-size: 14px; font-weight: 500;
275
+ color: var(--fg); text-decoration: none; border-bottom: none;
276
+ }
277
+ .kz-qcell a:hover { color: var(--orange); }
278
+
279
+ /* ── Status / Chips ── */
280
+ .kz-status {
281
+ display: inline-flex; align-items: center; gap: 8px;
282
+ font-family: var(--font-mono); font-size: 10.5px; font-weight: 400;
283
+ letter-spacing: 0.1em; text-transform: uppercase; color: var(--muted);
284
+ }
285
+ .kz-status .dot { width: 6px; height: 6px; border-radius: 50%; background: var(--muted); }
286
+ .kz-status.live { color: var(--green); }
287
+ .kz-status.live .dot { background: var(--green); }
288
+ .kz-status.soon { color: var(--orange); }
289
+ .kz-status.soon .dot { background: var(--orange); }
290
+ .kz-status.planned { color: var(--blue); }
291
+ .kz-status.planned .dot { background: var(--blue); }
292
+
293
+ .kz-chip {
294
+ min-height: 32px; display: inline-flex; align-items: center; padding: 6px 10px; border-radius: 999px;
295
+ background: var(--surface-2); border: 1px solid var(--border);
296
+ font-family: var(--font-mono); font-size: 9.5px; font-weight: 400;
297
+ letter-spacing: 0.12em; text-transform: uppercase; color: var(--muted);
298
+ line-height: 1; white-space: nowrap; gap: 6px; transition: transform .18s cubic-bezier(.16,1,.3,1), background .18s, color .18s;
299
+ }
300
+ .kz-chip:hover { transform: translateY(-2px); background: var(--fg); color: var(--bg); }
301
+ .kz-chip.soon { color: var(--orange); border-color: color-mix(in oklab, var(--orange) 50%, var(--border-strong)); }
302
+ .kz-chip.planned { color: var(--blue); border-color: color-mix(in oklab, var(--blue) 50%, var(--border-strong)); }
303
+ .kz-chip.live { color: var(--green); border-color: color-mix(in oklab, var(--green) 50%, var(--border-strong)); }
304
+
305
+ /* ── Links ── */
306
+ .kz a {
307
+ color: var(--fg-dim); text-decoration: none;
308
+ border-bottom: 1px solid var(--border-strong); font-weight: 500;
309
+ transition: color 0.15s, border-color 0.15s;
310
+ }
311
+ .kz a:hover { color: var(--orange); border-bottom-color: var(--orange); }
312
+
313
+ /* ── Details ── */
314
+ .kz details {
315
+ background: var(--surface); border: 1px solid var(--border-strong);
316
+ margin-top: 24px; overflow: hidden;
317
+ }
318
+ .kz summary {
319
+ list-style: none; padding: 14px 20px; cursor: pointer;
320
+ font-family: var(--font-mono); font-size: 10.5px; font-weight: 500;
321
+ letter-spacing: 0.14em; text-transform: uppercase;
322
+ color: var(--fg-dim); /* bumped from --muted */
323
+ user-select: none; display: flex; align-items: center; gap: 10px;
324
+ }
325
+ .kz summary::-webkit-details-marker { display: none; }
326
+ .kz summary::before { content: '+'; color: var(--orange); font-family: var(--font-mono); font-size: 14px; line-height: 1; }
327
+ .kz details[open] summary::before { content: '−'; }
328
+ .kz summary:hover { color: var(--fg); }
329
+ .kz-detail-body { padding: 20px 24px; border-top: 1px solid var(--border); background: var(--bg-2); }
330
+ .kz-cfg-title {
331
+ font-family: var(--font-mono); font-size: 10.5px; font-weight: 400;
332
+ letter-spacing: 0.14em; text-transform: uppercase; color: var(--muted); margin: 0 0 12px;
333
+ }
334
+
335
+ /* ── Code ── */
336
+ .kz pre {
337
+ background: var(--bg-2); border: 1px solid var(--border-strong);
338
+ border-left: 2px solid var(--orange); padding: 16px 18px; overflow-x: auto;
339
+ font-family: var(--font-mono); font-size: 13px; line-height: 1.6;
340
+ color: var(--fg-dim); margin: 0 0 20px; border-radius: 0;
341
+ }
342
+ .kz pre:last-child { margin-bottom: 0; }
343
+ .kz pre code { background: none; color: inherit; padding: 0; font-size: inherit; }
344
+ .kz code {
345
+ font-family: var(--font-mono); font-size: 0.88em; color: var(--orange);
346
+ background: color-mix(in oklab, var(--orange) 12%, transparent); padding: 1px 5px; border-radius: 2px;
347
+ }
348
+ .kz-img { display: block; width: 100%; height: auto; border: 1px solid var(--border-strong); margin: 16px auto 20px; }
349
+
350
+ /* ── Lists ── */
351
+ .kz ul { list-style: none; padding: 0; margin: 0 0 16px; }
352
+ .kz ul li {
353
+ position: relative; padding-left: 24px; margin-bottom: 8px;
354
+ font-size: 15px; line-height: 1.6; color: var(--fg-dim); max-width: 64ch;
355
+ }
356
+ .kz ul li::before {
357
+ content: '▸'; position: absolute; left: 4px; top: 0;
358
+ color: var(--orange); font-family: var(--font-mono); font-size: 11px; line-height: 1.6;
359
+ }
360
+ .kz ul li strong { color: var(--fg); font-weight: 600; }
361
+
362
+ /* ── Table ── */
363
+ .kz table { width: 100%; border-collapse: collapse; background: var(--surface); border: 1px solid var(--border-strong); margin-bottom: 20px; }
364
+ .kz thead { background: var(--bg-2); }
365
+ .kz th { font-family: var(--font-mono); font-size: 10px; font-weight: 500; letter-spacing: 0.14em; text-transform: uppercase; color: var(--fg-dim); text-align: left; padding: 10px 16px; border-bottom: 2px solid var(--orange); }
366
+ .kz td { padding: 10px 16px; border-bottom: 1px solid var(--border); font-size: 14px; color: var(--fg-dim); }
367
+ .kz td:first-child { color: var(--fg); font-family: var(--font-mono); font-size: 13px; font-weight: 500; }
368
+ .kz tbody tr:last-child td { border-bottom: none; }
369
+ .kz tbody tr:hover { background: color-mix(in oklab, var(--orange) 5%, transparent); }
370
+ .kz td.num { font-family: var(--font-mono); font-size: 13px; text-align: right; color: var(--fg); }
371
+ .kz td.hi { color: var(--orange); font-family: var(--font-mono); font-weight: 600; }
372
+
373
+ /* ── Charts ── */
374
+ .kz-metrics {
375
+ display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
376
+ gap: 16px; margin: 24px 0 28px;
377
+ }
378
+ .kz-metric { min-width: 0; padding: 16px 0 0; border-top: 1px solid var(--border-strong); }
379
+ .kz-metric-value { display: block; font-family: var(--font-display); font-size: 26px; line-height: 1.1; color: var(--fg); }
380
+ .kz-metric-label { display: block; margin-top: 7px; font-family: var(--font-mono); font-size: 9.5px; letter-spacing: .12em; text-transform: uppercase; color: var(--muted); }
381
+ .kz-viz-grid { display: grid; grid-template-columns: minmax(180px, .7fr) minmax(0, 1.3fr); gap: 24px; align-items: center; margin: 24px 0 28px; }
382
+ .kz-donut { --value: 72%; width: 128px; aspect-ratio: 1; border-radius: 50%; background: conic-gradient(var(--fg) var(--value), var(--surface-3) 0); display: grid; place-items: center; }
383
+ .kz-donut-core { width: 86px; aspect-ratio: 1; border-radius: 50%; background: var(--bg); display: grid; place-items: center; text-align: center; color: var(--fg); }
384
+ .kz-donut-core strong { display: block; font-family: var(--font-display); font-size: 23px; line-height: 1; }
385
+ .kz-donut-core span { display: block; margin-top: 5px; font-family: var(--font-mono); font-size: 8px; letter-spacing: .1em; text-transform: uppercase; color: var(--muted); }
386
+ .kz-meter-list { display: grid; gap: 14px; }
387
+ .kz-meter-row { display: grid; grid-template-columns: minmax(92px, auto) minmax(80px, 1fr) 48px; gap: 12px; align-items: center; }
388
+ .kz-meter-label, .kz-meter-value { font-family: var(--font-mono); font-size: 10px; color: var(--fg-dim); }
389
+ .kz-meter-value { text-align: right; color: var(--fg); }
390
+ .kz-meter-track { height: 6px; background: var(--surface-3); overflow: hidden; }
391
+ .kz-meter-fill { width: var(--value, 0%); height: 100%; background: var(--fg); }
392
+ .kz-timeline { display: grid; grid-template-columns: repeat(4, 1fr); margin: 28px 0; border-top: 1px solid var(--border-strong); }
393
+ .kz-step { position: relative; min-width: 0; padding: 18px 16px 0 0; }
394
+ .kz-step::before { content: ''; position: absolute; width: 7px; height: 7px; top: -4px; left: 0; background: var(--fg); }
395
+ .kz-step-num { font-family: var(--font-mono); font-size: 9px; color: var(--muted); }
396
+ .kz-step strong { display: block; margin-top: 7px; font-size: 13px; color: var(--fg); }
397
+ .kz-step span:last-child { display: block; margin-top: 4px; font-size: 11px; line-height: 1.45; color: var(--muted); }
398
+ .kz-chart { margin: 20px 0 28px; }
399
+ .kz-chart-title { font-family: var(--font-mono); font-size: 10px; font-weight: 500; letter-spacing: 0.14em; text-transform: uppercase; color: var(--muted); margin: 0 0 14px; }
400
+ .kz-bar-row { display: grid; grid-template-columns: 110px 1fr 52px; align-items: center; gap: 12px; margin-bottom: 8px; }
401
+ .kz-bar-label { font-family: var(--font-mono); font-size: 11px; color: var(--fg-dim); text-align: right; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
402
+ .kz-bar-track { height: 5px; background: var(--border-strong); position: relative; overflow: hidden; }
403
+ .kz-bar-fill { position: absolute; left: 0; top: 0; height: 100%; width: var(--pct, 0%); background: var(--orange); }
404
+ .kz-bar-fill.dim { background: color-mix(in oklab, var(--orange) 40%, var(--border-strong)); }
405
+ .kz-bar-val { font-family: var(--font-mono); font-size: 11px; color: var(--fg); }
406
+ .kz-dist { display: flex; height: 24px; overflow: hidden; border: 1px solid var(--border-strong); margin: 14px 0 10px; }
407
+ .kz-dist-seg { height: 100%; display: flex; align-items: center; justify-content: center; font-family: var(--font-mono); font-size: 9.5px; color: var(--bg); white-space: nowrap; overflow: hidden; }
408
+ .kz-dist-seg.a { background: var(--orange); }
409
+ .kz-dist-seg.b { background: color-mix(in oklab, var(--orange) 55%, var(--border-strong)); }
410
+ .kz-dist-seg.c { background: color-mix(in oklab, var(--orange) 30%, var(--border-strong)); }
411
+ .kz-dist-legend { display: flex; gap: 20px; margin-top: 2px; }
412
+ .kz-dist-item { display: flex; align-items: center; gap: 6px; font-family: var(--font-mono); font-size: 10px; color: var(--fg-dim); }
413
+ .kz-dist-dot { width: 8px; height: 8px; flex-shrink: 0; }
414
+ .kz-dist-dot.a { background: var(--orange); }
415
+ .kz-dist-dot.b { background: color-mix(in oklab, var(--orange) 55%, var(--border-strong)); }
416
+ .kz-dist-dot.c { background: color-mix(in oklab, var(--orange) 30%, var(--border-strong)); }
417
+ .kz-spark { display: block; width: 100%; height: 72px; margin: 16px 0; overflow: visible; }
418
+
419
+ /* ── Footer ── */
420
+ .kz-foot {
421
+ margin-top: 72px; padding: 28px 40px 0; border-top: 1px solid var(--border);
422
+ display: flex; justify-content: space-between; align-items: center;
423
+ font-family: var(--font-mono); font-size: 10.5px; letter-spacing: 0.14em;
424
+ text-transform: uppercase;
425
+ color: var(--muted); /* bumped from --muted-2 */
426
+ }
427
+ .kz-foot .o { color: var(--orange); }
428
+
429
+ @media (max-width: 640px) {
430
+ .kz-section { padding: 48px 20px 0; }
431
+ .kz-ident { padding: 80px 20px 24px; }
432
+ .kz-foot { padding: 24px 20px 0; flex-direction: column; gap: 8px; align-items: flex-start; }
433
+ .kz-thesis { margin: 0 20px; padding: 24px 0 22px; flex-direction: column; gap: 8px; }
434
+ .kz-metrics { grid-template-columns: 1fr; gap: 12px; }
435
+ .kz-viz-grid { grid-template-columns: 1fr; }
436
+ .kz-timeline { grid-template-columns: 1fr 1fr; row-gap: 24px; }
437
+ .kz-row { grid-template-columns: minmax(82px, 10ch) minmax(0, 1fr); }
438
+ }
439
+ </style>
440
+
441
+ <div class="kz">
442
+
443
+ <div class="kz-hero kz-hero--plain">
444
+ <div class="kz-ident">
445
+ <div class="kz-hero-main">
446
+ <h1 class="kz-name">Kuiper <span class="dim">R1</span></h1>
447
+ <span class="kz-base"><span class="dot"></span><span class="kz-class">Planetary Class</span> · 9.41B · Apache 2.0</span>
448
+ <div class="kz-chip-cloud">
449
+ <span class="kz-chip"><svg class="kz-icon" viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M5 3h14v2H5zm0 16h14v2H5zM3 5h2v14H3zm16 0h2v14h-2zM9 7h6v2H9zm0 8h6v2H9zM7 9h2v6H7zm8 0h2v6h-2zm-4-8h2v2h-2zm0 20h2v2h-2zM1 11h2v2H1zm20 0h2v2h-2zm0-4h2v2h-2zm0 8h2v2h-2zM1 15h2v2H1zm0-8h2v2H1zm6-6h2v2H7zm8 0h2v2h-2zm0 20h2v2h-2zm-8 0h2v2H7z"/></svg>Trace inversion</span>
450
+ <span class="kz-chip"><svg class="kz-icon" viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M4 2h16v2H4zm0 18h16v2H4zM2 4h2v16H2zm18 0h2v16h-2zM6 16h2v2H6zm2-2h2v2H8zm-2-2h2v2H6z"/></svg>Synthetic reasoning</span>
451
+ <span class="kz-chip"><svg class="kz-icon" viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M10 20h4v2h-4zm0-16h4V2h-4zm0 6h4v2h-4zm4 8h4v2h-4zm0-12h4V4h-4zm0 2h4v2h-4zm4 8h4v2h-4zm0-8h4V6h-4zM6 18h4v2H6zM6 6h4V4H6zm0 2h4v2H6zm-4 8h4v2H2zm0-8h4V6H2zM2 6h2v12H2zm18 0h2v12h-2zm-8 6h2v8h-2zm-2-6h4v2h-4z"/></svg>Safetensors</span>
452
+ <span class="kz-chip live">Public release</span>
453
+ </div>
454
+ </div>
455
+ </div>
456
+ </div>
457
+
458
+ <div class="kz-thesis"><strong>Expand the trace. Preserve the answer.</strong></div>
459
+
460
+ <div class="kz-section">
461
+ <div class="kz-shead">
462
+ <div class="kz-shead-left">
463
+ <span class="kz-sglyph"><svg class="kz-icon" viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M4 2h16v2H4zm0 18h16v2H4zM2 4h2v16H2zm18 0h2v16h-2zm-9 5h2V7h-2zm0 8h2v-6h-2z"/></svg></span>
464
+ <h2 class="kz-stitle">Overview</h2>
465
+ </div>
466
+ <span class="kz-snum">01</span>
467
+ </div>
468
+ <div class="kz-sbody">
469
+ <p class="kz-lead">Kuiper-R1 reconstructs full, readable reasoning from a problem, its final answer, and compressed reasoning bubbles.</p>
470
+ <p>Each result follows a three-tag contract: <code>&lt;synthetic_trace&gt;</code>, <code>&lt;verification_note&gt;</code>, and <code>&lt;final&gt;</code>. The final answer is preserved byte-for-byte, while the reconstructed trace is explicitly labeled synthetic.</p>
471
+ <p>Use Kuiper-R1 for reasoning-dataset augmentation, interpretability review, and research into reasoning compression and expansion. Do not present its synthetic traces as another model's hidden chain-of-thought.</p>
472
+ </div>
473
+ </div>
474
+
475
+ <div class="kz-section">
476
+ <div class="kz-shead">
477
+ <div class="kz-shead-left">
478
+ <span class="kz-sglyph"><svg class="kz-icon" viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M5 3h14v2H5zm0 16h14v2H5zM3 5h2v14H3zm16 0h2v14h-2zM9 7h6v2H9zm0 8h6v2H9zM7 9h2v6H7zm8 0h2v6h-2zm-4-8h2v2h-2zm0 20h2v2h-2zM1 11h2v2H1zm20 0h2v2h-2zm0-4h2v2h-2zm0 8h2v2h-2zM1 15h2v2H1zm0-8h2v2H1zm6-6h2v2H7zm8 0h2v2h-2zm0 20h2v2h-2zm-8 0h2v2H7z"/></svg></span>
479
+ <h2 class="kz-stitle">Specifications</h2>
480
+ </div>
481
+ <span class="kz-snum">02</span>
482
+ </div>
483
+ <div class="kz-sbody">
484
+ <div class="kz-stack kz-stack--asym">
485
+ <div class="kz-card">
486
+ <div class="kz-card-head"><svg class="kz-icon" viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M5 3h14v2H5zm0 16h14v2H5zM3 5h2v14H3zm16 0h2v14h-2zM9 7h6v2H9zm0 8h6v2H9zM7 9h2v6H7zm8 0h2v6h-2zm-4-8h2v2h-2zm0 20h2v2h-2zM1 11h2v2H1zm20 0h2v2h-2zm0-4h2v2h-2zm0 8h2v2h-2zM1 15h2v2H1zm0-8h2v2H1zm6-6h2v2H7zm8 0h2v2h-2zm0 20h2v2h-2zm-8 0h2v2H7z"/></svg>Architecture</div>
487
+ <div class="kz-row"><span class="kz-key">Type</span><span class="kz-val">Qwen3.5 conditional generation</span></div>
488
+ <div class="kz-row"><span class="kz-key">Params</span><span class="kz-val">9.41B</span></div>
489
+ <div class="kz-row"><span class="kz-key">Context</span><span class="kz-val">262,144 tokens</span></div>
490
+ <div class="kz-row"><span class="kz-key">Artifact</span><span class="kz-val">BF16 safetensors</span></div>
491
+ </div>
492
+ <div class="kz-card">
493
+ <div class="kz-card-head"><svg class="kz-icon" viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M4 14h2v6H4zm6 0h2v6h-2zm-4-2h4v2H6zm0 8h4v2H6zm-4-4h2v2H2zm20-8h-4V6h4zM10 16h12v2H10zm4-8H2V6h12zm6-4v2h-2V4zm0 6V8h-2v2zm-6-8h4v2h-4zm0 10h4v-2h-4zm-2-8h2v2h-2zm0 6h2V8h-2z"/></svg>Training</div>
494
+ <div class="kz-row"><span class="kz-key">Method</span><span class="kz-val">QLoRA SFT → ORPO → merge</span></div>
495
+ <div class="kz-row"><span class="kz-key">SFT rows</span><span class="kz-val">3,000</span></div>
496
+ <div class="kz-row"><span class="kz-key">Preference</span><span class="kz-val">87 scored pairs</span></div>
497
+ <div class="kz-row"><span class="kz-key">Data</span><span class="kz-val">OpenThoughts3-1.2M</span></div>
498
+ </div>
499
+ </div>
500
+ </div>
501
+ </div>
502
+
503
+ <div class="kz-section">
504
+ <div class="kz-shead">
505
+ <div class="kz-shead-left">
506
+ <span class="kz-sglyph"><svg class="kz-icon" viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M4 2h16v2H4zm0 18h16v2H4zM2 4h2v16H2zm18 0h2v16h-2zM6 16h2v2H6zm2-2h2v2H8zm-2-2h2v2H6z"/></svg></span>
507
+ <h2 class="kz-stitle">Usage</h2>
508
+ </div>
509
+ <span class="kz-snum">03</span>
510
+ </div>
511
+ <div class="kz-sbody">
512
+ <p>Serve with <code>vLLM</code>. Disable the default thinking pass so the requested three-tag contract can use the full output budget.</p>
513
+ <div class="kz-stack" style="grid-template-columns: 1fr;">
514
+ <div class="kz-card">
515
+ <div class="kz-card-head"><svg class="kz-icon" viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M4 14h2v6H4zm6 0h2v6h-2zm-4-2h4v2H6zm0 8h4v2H6zm-4-4h2v2H2zm20-8h-4V6h4zM10 16h12v2H10zm4-8H2V6h12zm6-4v2h-2V4zm0 6V8h-2v2zm-6-8h4v2h-4zm0 10h4v-2h-4zm-2-8h2v2h-2zm0 6h2V8h-2z"/></svg>Recommended Samplers</div>
516
+ <div class="kz-row"><span class="kz-key">Temperature</span><span class="kz-val">0.4</span></div>
517
+ <div class="kz-row"><span class="kz-key">Repetition</span><span class="kz-val">1.1</span></div>
518
+ <div class="kz-row"><span class="kz-key">Thinking</span><span class="kz-val">Disabled</span></div>
519
+ <div class="kz-row"><span class="kz-key">Model len</span><span class="kz-val">8,192 served</span></div>
520
+ </div>
521
+ </div>
522
+ <p style="margin-top: 24px;">Start the checkpoint locally:</p>
523
+ <pre><code>vllm serve Michael-Kozu/Kuiper-R1 \
524
+ --served-model-name kuiper-r1 \
525
+ --max-model-len 8192 \
526
+ --gpu-memory-utilization 0.85 \
527
+ --skip-mm-profiling \
528
+ --trust-remote-code</code></pre>
529
+ <p>Send an OpenAI-compatible request:</p>
530
+ <pre><code>{
531
+ "model": "kuiper-r1",
532
+ "messages": [
533
+ {
534
+ "role": "system",
535
+ "content": "You are Kuiper, a reasoning-trace inversion model."
536
+ },
537
+ {
538
+ "role": "user",
539
+ "content": "Problem:\n[problem text]\n\nAnswer:\n[exact final answer]\n\nReasoning Bubbles:\n- [bubble one]\n- [bubble two]\n\nReconstruct the full reasoning trace."
540
+ }
541
+ ],
542
+ "temperature": 0.4,
543
+ "repetition_penalty": 1.1,
544
+ "chat_template_kwargs": {"enable_thinking": false}
545
+ }</code></pre>
546
+ </div>
547
+ </div>
548
+
549
+ <div class="kz-section">
550
+ <div class="kz-shead">
551
+ <div class="kz-shead-left">
552
+ <span class="kz-sglyph"><svg class="kz-icon" viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M4 14h2v6H4zm6 0h2v6h-2zm-4-2h4v2H6zm0 8h4v2H6zm-4-4h2v2H2zm20-8h-4V6h4zM10 16h12v2H10zm4-8H2V6h12zm6-4v2h-2V4zm0 6V8h-2v2zm-6-8h4v2h-4zm0 10h4v-2h-4zm-2-8h2v2h-2zm0 6h2V8h-2z"/></svg></span>
553
+ <h2 class="kz-stitle">Training Details</h2>
554
+ </div>
555
+ <span class="kz-snum">04</span>
556
+ </div>
557
+ <div class="kz-sbody">
558
+ <p>Training uses domain-balanced science, math, and code rows from <a href="https://huggingface.co/datasets/open-thoughts/OpenThoughts3-1.2M">OpenThoughts3-1.2M</a>. Reasoning traces are compressed into extractive bubbles deterministically, without an additional model call.</p>
559
+ <div class="kz-metrics">
560
+ <div class="kz-metric"><span class="kz-metric-value">3,000</span><span class="kz-metric-label">SFT examples</span></div>
561
+ <div class="kz-metric"><span class="kz-metric-value">1</span><span class="kz-metric-label">SFT epoch</span></div>
562
+ <div class="kz-metric"><span class="kz-metric-value">87</span><span class="kz-metric-label">ORPO pairs</span></div>
563
+ </div>
564
+ <ul>
565
+ <li>Training split: 1,531 science, 1,001 math, and 468 code examples.</li>
566
+ <li>Compression is extractive at a target ratio of 0.28 with 3–24 bubbles.</li>
567
+ <li>The held-out DeepSeek-V4 benchmark lineage is disjoint from the QwQ-32B training lineage.</li>
568
+ </ul>
569
+ </div>
570
+ </div>
571
+
572
+ <div class="kz-section">
573
+ <div class="kz-shead">
574
+ <div class="kz-shead-left">
575
+ <span class="kz-sglyph"><svg class="kz-icon" viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M4 2h16v2H4zm0 18h16v2H4zM2 4h2v16H2zm18 0h2v16h-2zm-9 8h2v6h-2zm-4 2h2v4H7zm8-8h2v12h-2z"/></svg></span>
576
+ <h2 class="kz-stitle">Benchmarks</h2>
577
+ </div>
578
+ <span class="kz-snum">05</span>
579
+ </div>
580
+ <div class="kz-sbody">
581
+ <div class="kz-chart">
582
+ <div class="kz-chart-title">Kuiper-R1 release · held-out n=200</div>
583
+ <div class="kz-bar-row">
584
+ <span class="kz-bar-label">Answer exact</span>
585
+ <div class="kz-bar-track"><div class="kz-bar-fill" style="--pct:82%"></div></div>
586
+ <span class="kz-bar-val">0.820</span>
587
+ </div>
588
+ <div class="kz-bar-row">
589
+ <span class="kz-bar-label">Format valid</span>
590
+ <div class="kz-bar-track"><div class="kz-bar-fill" style="--pct:88%"></div></div>
591
+ <span class="kz-bar-val">0.880</span>
592
+ </div>
593
+ <div class="kz-bar-row">
594
+ <span class="kz-bar-label">Expansion</span>
595
+ <div class="kz-bar-track"><div class="kz-bar-fill" style="--pct:76.9%"></div></div>
596
+ <span class="kz-bar-val">0.769</span>
597
+ </div>
598
+ <div class="kz-bar-row">
599
+ <span class="kz-bar-label">Overall</span>
600
+ <div class="kz-bar-track"><div class="kz-bar-fill" style="--pct:50.4%"></div></div>
601
+ <span class="kz-bar-val">0.504</span>
602
+ </div>
603
+ </div>
604
+ <table>
605
+ <thead><tr><th>Metric</th><th>Base</th><th>Kuiper-R1</th></tr></thead>
606
+ <tbody>
607
+ <tr><td>Final answer preserved · exact</td><td class="num">0.155</td><td class="num hi">0.820</td></tr>
608
+ <tr><td>Format valid · 3-tag contract</td><td class="num hi">0.980</td><td class="num">0.880</td></tr>
609
+ <tr><td>Expansion quality</td><td class="num hi">0.791</td><td class="num">0.769</td></tr>
610
+ <tr><td>Semantic consistency</td><td class="num hi">0.708</td><td class="num">0.535</td></tr>
611
+ <tr><td>No invented tool outputs</td><td class="num">1.000</td><td class="num">1.000</td></tr>
612
+ <tr><td>Overall</td><td class="num">0.329</td><td class="num hi">0.504</td></tr>
613
+ </tbody>
614
+ </table>
615
+ </div>
616
+ </div>
617
+
618
+ <div class="kz-section">
619
+ <div class="kz-shead">
620
+ <div class="kz-shead-left">
621
+ <span class="kz-sglyph"><svg class="kz-icon" viewBox="0 0 24 24" aria-hidden="true"><path fill="currentColor" d="M4 2h16v2H4zM2 4h2v10H2zm18 0h2v10h-2zM4 14h2v2H4zm2 2h2v2H6zm4 4h4v2h-4zm10-6h-2v2h2zm-2 2h-2v2h2zm-2 2h-2v2h2zm-6 0H8v2h2z"/></svg></span>
622
+ <h2 class="kz-stitle">Limitations &amp; License</h2>
623
+ </div>
624
+ <span class="kz-snum">06</span>
625
+ </div>
626
+ <div class="kz-sbody">
627
+ <ul>
628
+ <li>Bubble informativeness bounds trace quality; terse inputs provide little evidence to expand.</li>
629
+ <li>The verification note is a construction-time consistency statement, not an external verifier.</li>
630
+ <li>The release improves exact answer preservation but trails the untouched base on raw format validity and semantic consistency.</li>
631
+ </ul>
632
+ <p>The checkpoint is released under the <strong>Apache License 2.0</strong>.</p>
633
+ </div>
634
+ </div>
635
+
636
+ <div class="kz-foot">
637
+ <span>Kozu AI</span>
638
+ <span>Turning the laws of reality into unparalleled creation.</span>
639
+ </div>
640
+
641
+ </div>
chat_template.jinja ADDED
@@ -0,0 +1,161 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {%- set image_count = namespace(value=0) %}
2
+ {%- set video_count = namespace(value=0) %}
3
+ {%- set identity_suffix = "" %}
4
+ {%- macro render_content(content, do_vision_count, is_system_content=false) %}
5
+ {%- if content is string %}
6
+ {{- content }}
7
+ {%- elif content is iterable and content is not mapping %}
8
+ {%- for item in content %}
9
+ {%- if 'image' in item or 'image_url' in item or item.type == 'image' %}
10
+ {%- if is_system_content %}
11
+ {{- raise_exception('System message cannot contain images.') }}
12
+ {%- endif %}
13
+ {%- if do_vision_count %}
14
+ {%- set image_count.value = image_count.value + 1 %}
15
+ {%- endif %}
16
+ {%- if add_vision_id %}
17
+ {{- 'Picture ' ~ image_count.value ~ ': ' }}
18
+ {%- endif %}
19
+ {{- '<|vision_start|><|image_pad|><|vision_end|>' }}
20
+ {%- elif 'video' in item or item.type == 'video' %}
21
+ {%- if is_system_content %}
22
+ {{- raise_exception('System message cannot contain videos.') }}
23
+ {%- endif %}
24
+ {%- if do_vision_count %}
25
+ {%- set video_count.value = video_count.value + 1 %}
26
+ {%- endif %}
27
+ {%- if add_vision_id %}
28
+ {{- 'Video ' ~ video_count.value ~ ': ' }}
29
+ {%- endif %}
30
+ {{- '<|vision_start|><|video_pad|><|vision_end|>' }}
31
+ {%- elif 'text' in item %}
32
+ {{- item.text }}
33
+ {%- else %}
34
+ {{- raise_exception('Unexpected item type in content.') }}
35
+ {%- endif %}
36
+ {%- endfor %}
37
+ {%- elif content is none or content is undefined %}
38
+ {{- '' }}
39
+ {%- else %}
40
+ {{- raise_exception('Unexpected content type.') }}
41
+ {%- endif %}
42
+ {%- endmacro %}
43
+ {%- if not messages %}
44
+ {{- raise_exception('No messages provided.') }}
45
+ {%- endif %}
46
+ {%- if tools and tools is iterable and tools is not mapping %}
47
+ {{- '<|im_start|>system\n' }}
48
+ {{- "# Tools\n\nYou have access to the following functions:\n\n<tools>" }}
49
+ {%- for tool in tools %}
50
+ {{- "\n" }}
51
+ {{- tool | tojson }}
52
+ {%- endfor %}
53
+ {{- "\n</tools>" }}
54
+ {{- '\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>' }}
55
+ {%- if messages[0].role == 'system' %}
56
+ {%- set content = render_content(messages[0].content, false, true)|trim %}
57
+ {%- if content %}
58
+ {{- '\n\n' + content }}
59
+ {%- endif %}
60
+ {%- endif %}
61
+ {{- '\n\n' + identity_suffix }}
62
+ {{- '<|im_end|>\n' }}
63
+ {%- else %}
64
+ {{- '<|im_start|>system\n' }}
65
+ {%- if messages[0].role == 'system' %}
66
+ {%- set content = render_content(messages[0].content, false, true)|trim %}
67
+ {%- if content %}
68
+ {{- content + '\n\n' }}
69
+ {%- endif %}
70
+ {%- endif %}
71
+ {{- identity_suffix }}
72
+ {{- '<|im_end|>\n' }}
73
+ {%- endif %}
74
+ {%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}
75
+ {%- for message in messages[::-1] %}
76
+ {%- set index = (messages|length - 1) - loop.index0 %}
77
+ {%- if ns.multi_step_tool and message.role == "user" %}
78
+ {%- set content = render_content(message.content, false)|trim %}
79
+ {%- if not(content.startswith('<tool_response>') and content.endswith('</tool_response>')) %}
80
+ {%- set ns.multi_step_tool = false %}
81
+ {%- set ns.last_query_index = index %}
82
+ {%- endif %}
83
+ {%- endif %}
84
+ {%- endfor %}
85
+ {%- if ns.multi_step_tool %}
86
+ {{- raise_exception('No user query found in messages.') }}
87
+ {%- endif %}
88
+ {%- for message in messages %}
89
+ {%- set content = render_content(message.content, true)|trim %}
90
+ {%- if message.role == "system" %}
91
+ {%- if not loop.first %}
92
+ {{- raise_exception('System message must be at the beginning.') }}
93
+ {%- endif %}
94
+ {%- elif message.role == "user" %}
95
+ {{- '<|im_start|>' + message.role + '\n' + content + '<|im_end|>' + '\n' }}
96
+ {%- elif message.role == "assistant" %}
97
+ {%- set reasoning_content = '' %}
98
+ {%- if message.reasoning_content is string %}
99
+ {%- set reasoning_content = message.reasoning_content %}
100
+ {%- else %}
101
+ {%- if '</think>' in content %}
102
+ {%- set reasoning_content = content.split('</think>')[0].rstrip('\n').split('<think>')[-1].lstrip('\n') %}
103
+ {%- set content = content.split('</think>')[-1].lstrip('\n') %}
104
+ {%- endif %}
105
+ {%- endif %}
106
+ {%- set reasoning_content = reasoning_content|trim %}
107
+ {%- if reasoning_content %}
108
+ {{- '<|im_start|>' + message.role + '\n<think>\n' + reasoning_content + '\n</think>\n\n' + content }}
109
+ {%- else %}
110
+ {{- '<|im_start|>' + message.role + '\n' + content }}
111
+ {%- endif %}
112
+ {%- if message.tool_calls and message.tool_calls is iterable and message.tool_calls is not mapping %}
113
+ {%- for tool_call in message.tool_calls %}
114
+ {%- if tool_call.function is defined %}
115
+ {%- set tool_call = tool_call.function %}
116
+ {%- endif %}
117
+ {%- if loop.first %}
118
+ {%- if content|trim %}
119
+ {{- '\n\n<tool_call>\n<function=' + tool_call.name + '>\n' }}
120
+ {%- else %}
121
+ {{- '<tool_call>\n<function=' + tool_call.name + '>\n' }}
122
+ {%- endif %}
123
+ {%- else %}
124
+ {{- '\n<tool_call>\n<function=' + tool_call.name + '>\n' }}
125
+ {%- endif %}
126
+ {%- if tool_call.arguments is defined %}
127
+ {%- for args_name, args_value in tool_call.arguments|items %}
128
+ {{- '<parameter=' + args_name + '>\n' }}
129
+ {%- set args_value = args_value | string if args_value is string else args_value | tojson | safe %}
130
+ {{- args_value }}
131
+ {{- '\n</parameter>\n' }}
132
+ {%- endfor %}
133
+ {%- endif %}
134
+ {{- '</function>\n</tool_call>' }}
135
+ {%- endfor %}
136
+ {%- endif %}
137
+ {{- '<|im_end|>\n' }}
138
+ {%- elif message.role == "tool" %}
139
+ {%- if loop.previtem and loop.previtem.role != "tool" %}
140
+ {{- '<|im_start|>user' }}
141
+ {%- endif %}
142
+ {{- '\n<tool_response>\n' }}
143
+ {{- content }}
144
+ {{- '\n</tool_response>' }}
145
+ {%- if not loop.last and loop.nextitem.role != "tool" %}
146
+ {{- '<|im_end|>\n' }}
147
+ {%- elif loop.last %}
148
+ {{- '<|im_end|>\n' }}
149
+ {%- endif %}
150
+ {%- else %}
151
+ {{- raise_exception('Unexpected message role.') }}
152
+ {%- endif %}
153
+ {%- endfor %}
154
+ {%- if add_generation_prompt %}
155
+ {{- '<|im_start|>assistant\n' }}
156
+ {%- if enable_thinking is defined and enable_thinking is false %}
157
+ {{- '<think>\n\n</think>\n\n' }}
158
+ {%- else %}
159
+ {{- '<think>\n' }}
160
+ {%- endif %}
161
+ {%- endif %}
config.json ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "Qwen3_5ForConditionalGeneration"
4
+ ],
5
+ "dtype": "bfloat16",
6
+ "eos_token_id": 248046,
7
+ "image_token_id": 248056,
8
+ "model_type": "qwen3_5",
9
+ "pad_token_id": 248044,
10
+ "text_config": {
11
+ "attention_bias": false,
12
+ "attention_dropout": 0.0,
13
+ "attn_output_gate": true,
14
+ "bos_token_id": null,
15
+ "dtype": "bfloat16",
16
+ "eos_token_id": 248044,
17
+ "full_attention_interval": 4,
18
+ "head_dim": 256,
19
+ "hidden_act": "silu",
20
+ "hidden_size": 4096,
21
+ "initializer_range": 0.02,
22
+ "intermediate_size": 12288,
23
+ "layer_types": [
24
+ "linear_attention",
25
+ "linear_attention",
26
+ "linear_attention",
27
+ "full_attention",
28
+ "linear_attention",
29
+ "linear_attention",
30
+ "linear_attention",
31
+ "full_attention",
32
+ "linear_attention",
33
+ "linear_attention",
34
+ "linear_attention",
35
+ "full_attention",
36
+ "linear_attention",
37
+ "linear_attention",
38
+ "linear_attention",
39
+ "full_attention",
40
+ "linear_attention",
41
+ "linear_attention",
42
+ "linear_attention",
43
+ "full_attention",
44
+ "linear_attention",
45
+ "linear_attention",
46
+ "linear_attention",
47
+ "full_attention",
48
+ "linear_attention",
49
+ "linear_attention",
50
+ "linear_attention",
51
+ "full_attention",
52
+ "linear_attention",
53
+ "linear_attention",
54
+ "linear_attention",
55
+ "full_attention"
56
+ ],
57
+ "linear_conv_kernel_dim": 4,
58
+ "linear_key_head_dim": 128,
59
+ "linear_num_key_heads": 16,
60
+ "linear_num_value_heads": 32,
61
+ "linear_value_head_dim": 128,
62
+ "mamba_ssm_dtype": "float32",
63
+ "max_position_embeddings": 1048576,
64
+ "mlp_only_layers": [],
65
+ "model_type": "qwen3_5_text",
66
+ "mtp_num_hidden_layers": 1,
67
+ "mtp_use_dedicated_embeddings": false,
68
+ "num_attention_heads": 16,
69
+ "num_hidden_layers": 32,
70
+ "num_key_value_heads": 4,
71
+ "pad_token_id": null,
72
+ "partial_rotary_factor": 0.25,
73
+ "rms_norm_eps": 1e-06,
74
+ "rope_parameters": {
75
+ "factor": 4.0,
76
+ "mrope_interleaved": true,
77
+ "mrope_section": [
78
+ 11,
79
+ 11,
80
+ 10
81
+ ],
82
+ "original_max_position_embeddings": 262144,
83
+ "partial_rotary_factor": 0.25,
84
+ "rope_theta": 10000000,
85
+ "rope_type": "yarn"
86
+ },
87
+ "tie_word_embeddings": false,
88
+ "use_cache": true,
89
+ "vocab_size": 248320
90
+ },
91
+ "tie_word_embeddings": false,
92
+ "transformers_version": "5.3.0",
93
+ "video_token_id": 248057,
94
+ "vision_config": {
95
+ "deepstack_visual_indexes": [],
96
+ "depth": 27,
97
+ "dtype": "bfloat16",
98
+ "hidden_act": "gelu_pytorch_tanh",
99
+ "hidden_size": 1152,
100
+ "in_channels": 3,
101
+ "initializer_range": 0.02,
102
+ "intermediate_size": 4304,
103
+ "model_type": "qwen3_5",
104
+ "num_heads": 16,
105
+ "num_position_embeddings": 2304,
106
+ "out_hidden_size": 4096,
107
+ "patch_size": 16,
108
+ "spatial_merge_size": 2,
109
+ "temporal_patch_size": 2
110
+ },
111
+ "vision_end_token_id": 248054,
112
+ "vision_start_token_id": 248053
113
+ }
generation_config.json ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_from_model_config": true,
3
+ "eos_token_id": [
4
+ 248046,
5
+ 248044
6
+ ],
7
+ "pad_token_id": 248044,
8
+ "transformers_version": "5.3.0",
9
+ "use_cache": true
10
+ }
model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:1aa77c49156e5d434bfcf36334b3bd68a2738e4fe17498b77b287562f388df9c
3
+ size 18819722392
processor_config.json ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "image_processor": {
3
+ "data_format": "channels_first",
4
+ "do_convert_rgb": true,
5
+ "do_normalize": true,
6
+ "do_rescale": true,
7
+ "do_resize": true,
8
+ "image_mean": [
9
+ 0.5,
10
+ 0.5,
11
+ 0.5
12
+ ],
13
+ "image_processor_type": "Qwen2VLImageProcessorFast",
14
+ "image_std": [
15
+ 0.5,
16
+ 0.5,
17
+ 0.5
18
+ ],
19
+ "merge_size": 2,
20
+ "patch_size": 16,
21
+ "resample": 3,
22
+ "rescale_factor": 0.00392156862745098,
23
+ "size": {
24
+ "longest_edge": 16777216,
25
+ "shortest_edge": 65536
26
+ },
27
+ "temporal_patch_size": 2
28
+ },
29
+ "processor_class": "Qwen3VLProcessor",
30
+ "video_processor": {
31
+ "data_format": "channels_first",
32
+ "default_to_square": true,
33
+ "do_convert_rgb": true,
34
+ "do_normalize": true,
35
+ "do_rescale": true,
36
+ "do_resize": true,
37
+ "do_sample_frames": true,
38
+ "fps": 2,
39
+ "image_mean": [
40
+ 0.5,
41
+ 0.5,
42
+ 0.5
43
+ ],
44
+ "image_std": [
45
+ 0.5,
46
+ 0.5,
47
+ 0.5
48
+ ],
49
+ "max_frames": 768,
50
+ "merge_size": 2,
51
+ "min_frames": 4,
52
+ "patch_size": 16,
53
+ "resample": 3,
54
+ "rescale_factor": 0.00392156862745098,
55
+ "return_metadata": false,
56
+ "size": {
57
+ "longest_edge": 25165824,
58
+ "shortest_edge": 4096
59
+ },
60
+ "temporal_patch_size": 2,
61
+ "video_processor_type": "Qwen3VLVideoProcessor"
62
+ }
63
+ }
reports/COMPARE_JACKRONG.md ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Kuiper-R1 vs Jackrong/Trace-Inverter-4B — trace-inversion head-to-head
2
+
3
+ Same held-out benchmark (`DeepSeek-V4-Distill-8000x`, inverted), same scorer, n=100. Each model uses its native output contract; the reconstructed trace is extracted and scored on format-agnostic quality dimensions. **Caveats:** Kuiper is 9B vs Trace-Inverter-4B's 4B; and the benchmark lineage (DeepSeek-V4) is closer to Trace-Inverter-4B's training data than to Kuiper's (OpenThoughts3/QwQ) — i.e. roughly Jackrong's home turf.
4
+
5
+ | Metric | kuiper (kuiper-r1-orpo) | jackrong (jackrong) |
6
+ |---|---|---|
7
+ | expansion quality | 0.8149 | 0.7865 |
8
+ | semantic consistency w/ bubbles | 0.5601 | 0.4732 |
9
+ | trace vs reference similarity | 0.1818 | 0.1411 |
10
+ | depth-to-concision | 0.3403 | 0.2671 |
11
+ | no invented tools | 1.0 | 0.98 |
12
+ | no repetition collapse | 0.98 | 0.84 |
13
+ | non-empty trace | 1.0 | 1.0 |
14
+ | mean trace chars | 5364.64 | 3636.09 |
15
+ ## Final verdict (Kuiper rp=1.1 vs Jackrong-4B)
16
+
17
+ With repetition_penalty=1.1 at inference, **Kuiper-R1 beats Trace-Inverter-4B on every dimension
18
+ that matters** (depth-to-concision excluded per objective — we favor CoT quality over brevity):
19
+ - no repetition collapse: **0.98 vs 0.84**
20
+ - expansion quality: **0.815 vs 0.786**
21
+ - semantic consistency w/ bubbles: **0.560 vs 0.473**
22
+ - reference-trace similarity: **0.182 vs 0.141**
23
+ - no invented tools: **1.00 vs 0.98**
24
+ Plus Kuiper alone preserves the final answer byte-exact and emits the structured
25
+ trace/verification/final contract. Qualitatively its traces read as flowing contemplative prose
26
+ (Qwythos/Claude-style) vs Jackrong's mechanical numbered lists. Caveats unchanged (9B vs 4B;
27
+ benchmark is Jackrong's lineage; Jackrong reconstructed from an unmerged PEFT upload at assumed
28
+ scaling). Worked examples: reports/EXAMPLES.md.
reports/EVAL_REPORT.md ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Kuiper-R1 — Evaluation Report
2
+
3
+ Held-out benchmark: `Jackrong/DeepSeek-V4-Distill-8000x` (inverted). n=200 rows. Cross-lineage generalization: training teacher **QwQ-32B** (OpenThoughts3) vs benchmark teacher **DeepSeek-V4-Flash** (GLM-5.1 prompts) — disjoint lineages.
4
+
5
+ Decoding: temperature 0.4, thinking disabled (the reasoning-model base otherwise emits a `<think>` preamble that eats the token budget). Scorer is deterministic (stdlib).
6
+
7
+ ## Results: untouched base vs SFT vs ORPO (release)
8
+
9
+ | Metric | Untouched base | Kuiper SFT | **Kuiper ORPO (release)** |
10
+ |---|---|---|---|
11
+ | final-answer preserved (exact) | 0.155 | 0.805 | **0.820** |
12
+ | final-answer preserved (soft) | 0.735 | 0.805 | **0.825** |
13
+ | format valid (3-tag contract) | 0.980 | 0.850 | **0.880** |
14
+ | no invented tool outputs | 1.000 | 1.000 | **1.000** |
15
+ | no contradiction | 1.000 | 0.995 | **0.990** |
16
+ | no repetition collapse | 0.980 | 0.840 | **0.825** |
17
+ | expansion quality (mean) | 0.791 | 0.725 | **0.769** |
18
+ | depth-to-concision (mean) | 0.222 | 0.221 | **0.226** |
19
+ | semantic consistency w/ bubbles (mean) | 0.708 | 0.515 | **0.535** |
20
+ | trace vs reference similarity (mean) | 0.306 | 0.171 | **0.182** |
21
+ | overall (mean) | 0.329 | 0.492 | **0.504** |
22
+
23
+ ## Verdict
24
+
25
+ **The fine-tune's decisive contribution is byte-exact final-answer preservation** (0.155 → 0.820, a 5.3× gain), plus a higher overall score (0.504 vs 0.329). ORPO improves the SFT on format validity, expansion quality, semantic consistency, and answer preservation.
26
+
27
+ **Honest caveat:** the untouched base still scores higher on raw trace *polish* (format 0.980 vs 0.880; semantic consistency 0.708 vs 0.535). This is expected: Qwythos is a strong instruction-follower and the target format is spelled out in the system prompt, so it already produces well-formed, thoughtful traces — but it does **not** preserve the given final answer (0.155). Kuiper's value is teaching exact preservation while keeping trace quality close. Training on longer (un-truncated) traces and more data would close the remaining quality gap; both are single-GPU-time limited here (see model card).
28
+
29
+ **Safety metrics** are clean across the board: no invented tool outputs (1.000), no contradiction (~1.0), no repetition collapse (>0.82), and every output is an explicitly labeled `<synthetic_trace>` — no claim of being any proprietary model's real reasoning.
30
+
31
+ **Release model:** `merged-fp16-orpo` (best overall + best preservation).
reports/PROVENANCE.md ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Kuiper-R1 — Provenance Report
2
+
3
+ Kuiper-R1 is a reasoning-trace **inversion** model: it expands compressed reasoning bubbles into full, explicitly-labeled **synthetic** traces. It does not reproduce any proprietary model's hidden reasoning, and every output is wrapped in `<synthetic_trace>` — declared synthetic by construction.
4
+
5
+ ## Asset audit
6
+
7
+ | Asset | Role | License | Verdict |
8
+ |---|---|---|---|
9
+ | `empero-ai/Qwythos-9B-Claude-Mythos-5-1M` | BASE MODEL (used, per owner instruction) | apache-2.0 (weights only) | QUESTIONABLE |
10
+ | `Qwen/Qwen3.5-9B` | CLEAN CONTROL BASE (available; recommended for a provenance-clean re-base) | apache-2.0 | CLEAN |
11
+ | `open-thoughts/OpenThoughts3-1.2M` | TRAINING CORPUS | apache-2.0 | CLEAN |
12
+ | `Jackrong/DeepSeek-V4-Distill-8000x` | HELD-OUT VALIDATION BENCHMARK | mit | CLEAN |
13
+ | `lordx64/fable-sft-combined-v2` | OPTIONAL STRESS SET — REJECTED, NOT USED | agpl-3.0 | BLOCKED |
14
+ | `Jackrong/Trace-Inverter-4B` | METHODOLOGY REFERENCE (not used as data/weights) | apache-2.0 | CLEAN as a reference; its authors' separate application to Claude data is not replicated here |
15
+
16
+ ### Detail
17
+
18
+ **`empero-ai/Qwythos-9B-Claude-Mythos-5-1M`**
19
+ - Role: BASE MODEL (used, per owner instruction)
20
+ - License: apache-2.0 (weights only)
21
+ - Teacher/lineage: self-declared: post-trained on ~500M tokens of Claude Mythos/Fable traces with UNDISCLOSED collection method; base weights from Qwen/Qwen3.5-9B
22
+ - Verdict: QUESTIONABLE — FAILS clean-provenance gate
23
+ - Note: Apache-2.0 covers the Qwen-derived weights; it does not grant rights to the Claude-derived training content, whose sourcing the card does not disclose. Kuiper inherits this taint at the weights level. Recorded here explicitly; the release decision is deferred to post-eval review (owner directive).
24
+
25
+ **`Qwen/Qwen3.5-9B`**
26
+ - Role: CLEAN CONTROL BASE (available; recommended for a provenance-clean re-base)
27
+ - License: apache-2.0
28
+ - Teacher/lineage: Qwen foundation model (open)
29
+ - Verdict: CLEAN
30
+
31
+ **`open-thoughts/OpenThoughts3-1.2M`**
32
+ - Role: TRAINING CORPUS
33
+ - License: apache-2.0
34
+ - Teacher/lineage: reasoning traces annotated by QwQ-32B (open weights)
35
+ - Verdict: CLEAN — no proprietary-frontier teacher; permissive license; lineage disjoint from the benchmark
36
+
37
+ **`Jackrong/DeepSeek-V4-Distill-8000x`**
38
+ - Role: HELD-OUT VALIDATION BENCHMARK
39
+ - License: mit
40
+ - Teacher/lineage: DeepSeek-V4-Flash (DeepSeek license permits distillation); prompts from GLM-5.1-Reasoning-1M-Cleaned
41
+ - Verdict: CLEAN
42
+
43
+ **`lordx64/fable-sft-combined-v2`**
44
+ - Role: OPTIONAL STRESS SET — REJECTED, NOT USED
45
+ - License: agpl-3.0
46
+ - Teacher/lineage: harvested from 481 Claude Fable 5 sessions; reasoning reconstructed post-hoc
47
+ - Verdict: BLOCKED — AGPL copyleft + Anthropic-output provenance; excluded from the pipeline
48
+
49
+ **`Jackrong/Trace-Inverter-4B`**
50
+ - Role: METHODOLOGY REFERENCE (not used as data/weights)
51
+ - License: apache-2.0
52
+ - Teacher/lineage: n/a (technique only)
53
+ - Verdict: CLEAN as a reference; its authors' separate application to Claude data is not replicated here
54
+
55
+ ## Training-data cleanliness guarantee
56
+
57
+ - Training traces come solely from `OpenThoughts3-1.2M` (Apache-2.0, QwQ-32B teacher).
58
+ - Compression to bubbles is **deterministic and extractive** — no model call, no proprietary teacher touches the data, fully reproducible.
59
+ - A source-row provenance filter rejects any trace containing frontier-model self-identification markers (defense in depth).
60
+ - The benchmark lineage (GLM-5.1 prompts / DeepSeek-V4-Flash) is **disjoint** from the training lineage, so eval measures generalization, not memorization.
61
+ - No Quark-derived data is used (contained Opus/GPT rows); excluded per owner instruction.
62
+
63
+ ## Known limitation (recorded, not resolved)
64
+
65
+ The base model carries undisclosed Claude-trace provenance and **fails the clean-provenance release gate**. A provenance-clean rebuild is available by swapping the base to `Qwen/Qwen3.5-9B` (identical architecture) — see the model card. Publication is gated on owner review of this report plus the eval report.
66
+
67
+ ## Built dataset (from summary.json)
68
+
69
+ - Examples: train=3000, val=1000, test=1000, benchmark=3529
70
+ - Train domains: {"math": 1001, "science": 1531, "code": 468}
71
+ - Avg trace chars (train): 5780 · avg bubble chars: 1168
72
+ - Compression config: {"strategy": "extractive", "target_ratio": 0.28, "min_bubbles": 3, "max_bubbles": 24, "bubble_prefix": "- "}
reports/THINKING_MARKERS.json ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "kuiper_generated": {
3
+ "self_correction": {
4
+ "pct_traces_with": 93.3,
5
+ "avg_per_1k_words": 4.53
6
+ },
7
+ "verification": {
8
+ "pct_traces_with": 80.0,
9
+ "avg_per_1k_words": 3.19
10
+ },
11
+ "alternatives": {
12
+ "pct_traces_with": 86.7,
13
+ "avg_per_1k_words": 2.67
14
+ },
15
+ "step_structure": {
16
+ "pct_traces_with": 100.0,
17
+ "avg_per_1k_words": 24.18
18
+ },
19
+ "calibrated_doubt": {
20
+ "pct_traces_with": 93.3,
21
+ "avg_per_1k_words": 8.19
22
+ },
23
+ "_n_traces": 15,
24
+ "_avg_words": 668
25
+ },
26
+ "genuine_reference": {
27
+ "self_correction": {
28
+ "pct_traces_with": 33.3,
29
+ "avg_per_1k_words": 1.74
30
+ },
31
+ "verification": {
32
+ "pct_traces_with": 20.0,
33
+ "avg_per_1k_words": 1.17
34
+ },
35
+ "alternatives": {
36
+ "pct_traces_with": 13.3,
37
+ "avg_per_1k_words": 0.42
38
+ },
39
+ "step_structure": {
40
+ "pct_traces_with": 93.3,
41
+ "avg_per_1k_words": 17.46
42
+ },
43
+ "calibrated_doubt": {
44
+ "pct_traces_with": 60.0,
45
+ "avg_per_1k_words": 6.33
46
+ },
47
+ "_n_traces": 15,
48
+ "_avg_words": 281
49
+ }
50
+ }
tokenizer.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:639e352c0f904c1875d448ebed6f6faac005fd3eb58393b7f1fb3ff044e5ca03
3
+ size 19989510
tokenizer_config.json ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ "max_length": null,
15
+ "model_max_length": 262144,
16
+ "model_specific_special_tokens": {
17
+ "audio_bos_token": "<|audio_start|>",
18
+ "audio_eos_token": "<|audio_end|>",
19
+ "audio_token": "<|audio_pad|>",
20
+ "image_token": "<|image_pad|>",
21
+ "video_token": "<|video_pad|>",
22
+ "vision_bos_token": "<|vision_start|>",
23
+ "vision_eos_token": "<|vision_end|>"
24
+ },
25
+ "pad_to_multiple_of": null,
26
+ "pad_token": "<|endoftext|>",
27
+ "pad_token_type_id": 0,
28
+ "padding_side": "left",
29
+ "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+",
30
+ "processor_class": "Qwen3VLProcessor",
31
+ "split_special_tokens": false,
32
+ "tokenizer_class": "TokenizersBackend",
33
+ "unk_token": null,
34
+ "video_token": "<|video_pad|>",
35
+ "vision_bos_token": "<|vision_start|>",
36
+ "vision_eos_token": "<|vision_end|>"
37
+ }