empero-ai commited on
Commit
fb2eb85
·
verified ·
1 Parent(s): ada6237

Add files using upload-large-folder tool

Browse files
.gitattributes CHANGED
@@ -33,3 +33,5 @@ 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
37
+ qwythos.png filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,192 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ base_model: empero-ai/Qwythos-9B-Claude-Mythos-5-1M
4
+ language:
5
+ - en
6
+ library_name: transformers
7
+ pipeline_tag: text-generation
8
+ tags:
9
+ - qwythos
10
+ - empero-ai
11
+ - reasoning
12
+ - qwen3.5
13
+ - ftpo
14
+ - uncensored
15
+ - long-context
16
+ ---
17
+
18
+ <p align="center">
19
+ <img src="qwythos.png" alt="Qwythos" width="480"/>
20
+ </p>
21
+
22
+ <p align="center"><b>Empero AI</b></p>
23
+
24
+ # Qwythos-9B-v2 — the new and improved Qwythos
25
+
26
+ The next iteration of Qwythos: **all the reasoning of Qwythos-9B, with the looping behavior fixed.** v2 keeps the deep chain-of-thought, the uncensored research posture, and the 1M-token context of its predecessor, and cleans up the rough edges that showed up in real use.
27
+
28
+ - 🔁 **Looping behavior eliminated** — repetition/degeneration under greedy or low-temperature decoding dropped from **6.7% → 0%**. You can serve it *without* leaning on `repetition_penalty` as a band-aid.
29
+ - 🧠 **Reasoning fully preserved** — MMLU, GSM8K, GPQA, ARC and HumanEval are all held at (or above) the v1 level. This is a *hygiene* upgrade, not a capability regression.
30
+ - 🧩 **MTP head restored** — the native multi-token-prediction module (dropped in the previous export) is back, so config and weights agree and speculative-decoding setups work.
31
+ - 🪪 **Cleaner identity** — the model no longer prefaces unrelated answers with its identity; it introduces itself only when you actually ask.
32
+ - 🔓 **Still intentionally uncensored** for research, cybersecurity, red-teaming, biology, chemistry, pharmacology and clinical work.
33
+ - 📜 **Still 1M-token context** (YaRN) and the native multimodal-capable Qwen3.5 stack.
34
+
35
+ <p align="center">
36
+ <img src="qwythos_v2_evals.svg" alt="Qwythos-9B-v2 evaluations" width="820"/>
37
+ </p>
38
+
39
+ ---
40
+
41
+ ## What got fixed & improved (vs. the base Qwythos)
42
+
43
+ | Area | Before (base Qwythos) | After (v2) |
44
+ |---|---|---|
45
+ | **Looping rate (greedy)** | 6.7% | **0.0%** |
46
+ | **Looping rate (temp 0.6)** | 1.3% | **0.7%** |
47
+ | **Refusal rate** | ~0% | **0.0%** |
48
+ | **MTP head in weights** | ❌ missing | ✅ **restored** |
49
+ | **Identity injection** | "always identify… never claim… override…" | states it **once, only when asked** |
50
+ | **Reasoning / knowledge** | strong | **preserved (see evals)** |
51
+
52
+ The fix uses **FTPO (Final-Token Preference Optimization)**: we identify the exact token that *starts* a repetition loop and gently train the model to prefer coherent alternatives at that one position, leaving the rest of the distribution — and therefore the model's knowledge and reasoning — untouched.
53
+
54
+ ---
55
+
56
+ ## Evaluations
57
+
58
+ Measured with our internal harness (generative chain-of-thought, greedy/pass@1 unless noted; MMLU/ARC/GSM8K n=500, GPQA-diamond n=198, HumanEval n=164). Judge for the quality metric: an independent LLM grader.
59
+
60
+ | Benchmark | Qwythos-9B-v2 |
61
+ |---|---|
62
+ | MMLU (CoT / 5-shot loglik) | **83.8% / 69.6%** |
63
+ | ARC-Challenge | **96.4%** |
64
+ | GPQA-diamond | **49.0%** |
65
+ | GSM8K | **93.6%** |
66
+ | HumanEval (pass@1) | **77.4%** |
67
+ | **Looping rate (greedy)** | **0.0%** |
68
+ | **Refusal rate** | **0.0%** |
69
+
70
+ **Capability is preserved across the board vs. the base Qwythos** (differences are within eval noise), while the looping problem is solved:
71
+
72
+ | Benchmark | Qwen3.5-9B (base) | Qwythos-9B | **Qwythos-9B-v2** |
73
+ |---|---|---|---|
74
+ | MMLU (CoT) | 80.6 | 83.8 | **83.8** |
75
+ | ARC-Challenge | 95.6 | 95.0 | **96.4** |
76
+ | GPQA-diamond | 32.8 | 52.0 | **49.0** |
77
+ | GSM8K | 80.6 | 92.2 | **93.6** |
78
+ | HumanEval | 81.7 | 79.9 | **77.4** |
79
+ | Looping (greedy) | 2.7 | 6.7 | **0.0** |
80
+
81
+ > Note on MMLU: v2 scores **83.8%** when allowed to reason (CoT) vs **69.6%** on the 5-shot loglikelihood setup — Qwythos is a reasoning model and is much stronger when it thinks. Report whichever matches your comparison baseline.
82
+
83
+ ---
84
+
85
+ ## Sample generations
86
+
87
+ *(temperature 0.6, top_p 0.95, top_k 20, repetition_penalty 1.05 — reasoning shown condensed)*
88
+
89
+ **Reasoning — the snail in the well**
90
+
91
+ > **Prompt:** A snail is at the bottom of a 10-meter well. Each day it climbs 3 meters, but each night it slips back 2 meters. How many days until it escapes?
92
+ >
93
+ > **Qwythos-9B-v2:** *(reasons: net +1 m/day, but on the final day it climbs out before slipping…)*
94
+ > **Answer: 8 days.** Net gain per full day/night cycle is 3 − 2 = 1 meter. After 7 days the snail has climbed 7 meters (still 3 short); on day 8 it climbs 3 meters, reaching 10 m and escaping before it can slip back.
95
+
96
+ **Code — longest palindromic substring**
97
+
98
+ > **Prompt:** Write a Python function `longest_palindrome(s)` that returns the longest palindromic substring. Explain your approach briefly.
99
+ >
100
+ > **Qwythos-9B-v2:**
101
+ > ```python
102
+ > def longest_palindrome(s):
103
+ > """Returns the longest palindromic substring of s."""
104
+ > n = len(s)
105
+ > if n < 2:
106
+ > return s
107
+ > def expand_around_center(left, right):
108
+ > while left >= 0 and right < n and s[left] == s[right]:
109
+ > left -= 1
110
+ > right += 1
111
+ > return right - left - 1
112
+ > start, end = 0, 0
113
+ > for i in range(n):
114
+ > len1 = expand_around_center(i, i) # odd-length
115
+ > len2 = expand_around_center(i, i + 1) # even-length
116
+ > max_len = max(len1, len2)
117
+ > if max_len > end - start:
118
+ > start = i - (max_len - 1) // 2
119
+ > end = i + max_len // 2
120
+ > return s[start:end + 1]
121
+ > ```
122
+ > **Approach:** "Expand around center" — every palindrome has a center (a character for odd lengths, a gap for even). Iterate over all `2n−1` centers, expand while characters match, track the longest. O(n²) time, O(1) extra space.
123
+
124
+ **Technical / clinical — no over-refusal**
125
+
126
+ > **Prompt:** Explain the mechanism of action of naloxone in reversing an opioid overdose, and why repeat dosing is sometimes required.
127
+ >
128
+ > **Qwythos-9B-v2:** Naloxone is a pure opioid receptor antagonist — it has no agonist activity of its own — and works by competitively displacing opioids from the mu-opioid receptors, physically pushing the opioid molecules off and rapidly restoring respiratory drive and arousal. Because its duration of action is short (~30–90 minutes) while many opioids (especially synthetics like fentanyl or methadone) have much longer half-lives, the reversal is often transient: as naloxone clears, residual opioid can rebind and cause re-sedation and respiratory depression — so patients must be monitored and re-dosed as needed.
129
+
130
+ ---
131
+
132
+ ## Recommended sampling
133
+
134
+ ```python
135
+ temperature=0.6, top_p=0.95, top_k=20, repetition_penalty=1.05, max_new_tokens=16384
136
+ ```
137
+ Because looping is trained out, `repetition_penalty` is now optional rather than load-bearing — greedy/low-temp decoding stays coherent. Give the model room to reason (`max_new_tokens`) for math/code/analysis.
138
+
139
+ ## Long context
140
+
141
+ Ships with **YaRN rope-scaling baked in for 1,048,576-token context** (4× the native 262,144 window). As with v1, static YaRN carries a small short-context trade-off — scale the factor to the length you actually use if that matters.
142
+
143
+ ## Model details
144
+
145
+ | | |
146
+ |---|---|
147
+ | Developer | Empero AI |
148
+ | Base model | `empero-ai/Qwythos-9B-Claude-Mythos-5-1M` (the base Qwythos) |
149
+ | Architecture | Qwen3.5-9B hybrid (3:1 Gated-DeltaNet linear-attention : full attention), multimodal-capable, native MTP head |
150
+ | Parameters | 9B (bfloat16, safetensors) |
151
+ | Context | 1,048,576 tokens (YaRN factor 4) |
152
+ | Tokenizer / chat template | Qwen3.5 native (ChatML-style) |
153
+ | License | Apache-2.0 |
154
+
155
+ ## Training procedure
156
+
157
+ - **Method:** FTPO (Final-Token Preference Optimization) on the base Qwythos (`Qwythos-9B-Claude-Mythos-5-1M`).
158
+ - **Data:** ~2,000 preference tuples auto-mined by eliciting looping at low temperature and extracting, at each loop-start position, the rejected loop token vs. the model's own coherent top-k alternatives.
159
+ - **Hyperparameters:** LoRA r=256, α=128, lr=1.5e-5, 1 epoch, early-stopped on `chosen_win ≥ 0.30` (a light touch — enough to remove looping without the quality cost of over-training). All attention + MLP projections + `lm_head` trained.
160
+ - **MTP:** the native multi-token-prediction head was restored from the Qwen3.5-9B base (FTPO does not touch it), so config `mtp_num_hidden_layers: 1` matches the weights again.
161
+
162
+ ## Usage
163
+
164
+ ```python
165
+ from transformers import AutoModelForImageTextToText, AutoTokenizer
166
+
167
+ model_id = "empero-ai/Qwythos-9B-v2"
168
+ tok = AutoTokenizer.from_pretrained(model_id)
169
+ model = AutoModelForImageTextToText.from_pretrained(model_id, dtype="bfloat16", device_map="auto")
170
+
171
+ messages = [{"role": "user", "content": "Prove that there are infinitely many primes."}]
172
+ text = tok.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
173
+ inputs = tok(text, return_tensors="pt").to(model.device)
174
+
175
+ out = model.generate(**inputs, max_new_tokens=16384, do_sample=True,
176
+ temperature=0.6, top_p=0.95, top_k=20, repetition_penalty=1.05)
177
+ print(tok.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))
178
+ ```
179
+
180
+ For serving, vLLM works out of the box (`--trust-remote-code`; the multimodal stack is text-only in practice, so `--limit-mm-per-prompt '{"image":0,"video":0}'` keeps startup clean).
181
+
182
+ ## Limitations
183
+
184
+ - **This is a hygiene/robustness release, not a capability jump.** v2 ≈ the base Qwythos on knowledge/reasoning benchmarks; the win is looping-elimination, restored MTP, and cleaner behavior — not higher raw scores.
185
+ - **HumanEval** is a couple points below the raw Qwen3.5-9B base (77.4 vs 81.7) — a small, known cost of the reasoning/looping-fix fine-tuning.
186
+ - **MTP is preserved from the base**, not co-trained with the fine-tuned weights, so speculative-decoding acceptance may be modest.
187
+ - **Benchmarks are from our internal harness** (CoT, pass@1, the sample sizes noted); use them for relative comparison and add your own official-harness numbers for a strict apples-to-apples with other cards.
188
+ - **Intentionally uncensored** — it will engage sensitive technical/research topics; deploy responsibly and within applicable law.
189
+
190
+ ## Acknowledgements
191
+
192
+ Built on **Qwen3.5-9B** (Alibaba/Qwen). Looping fixed with **FTPO (Final-Token Preference Optimization)**. Thanks to the Empero AI team.
chat_template.jinja ADDED
@@ -0,0 +1,161 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {%- set image_count = namespace(value=0) %}
2
+ {%- set video_count = namespace(value=0) %}
3
+ {%- set qwythos_identity = "You are Qwythos, a model created by Empero AI. Only bring up your identity if the user asks." %}
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' + qwythos_identity }}
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
+ {{- qwythos_identity }}
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
+ "rope_type": "yarn",
76
+ "factor": 4.0,
77
+ "original_max_position_embeddings": 262144,
78
+ "mrope_interleaved": true,
79
+ "mrope_section": [
80
+ 11,
81
+ 11,
82
+ 10
83
+ ],
84
+ "rope_theta": 10000000
85
+ },
86
+ "tie_word_embeddings": false,
87
+ "use_cache": true,
88
+ "vocab_size": 248320
89
+ },
90
+ "tie_word_embeddings": false,
91
+ "transformers_version": "5.12.1",
92
+ "use_cache": false,
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_vision",
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.6.2",
9
+ "use_cache": true
10
+ }
model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:85915acf5a7955f82a47dfe4669b7fe8fd8b58c22a5c1dfbf300b193ca0b7a27
3
+ size 19306305296
preprocessor_config.json ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "size": {
3
+ "longest_edge": 16777216,
4
+ "shortest_edge": 65536
5
+ },
6
+ "patch_size": 16,
7
+ "temporal_patch_size": 2,
8
+ "merge_size": 2,
9
+ "image_mean": [
10
+ 0.5,
11
+ 0.5,
12
+ 0.5
13
+ ],
14
+ "image_std": [
15
+ 0.5,
16
+ 0.5,
17
+ 0.5
18
+ ],
19
+ "processor_class": "Qwen3VLProcessor",
20
+ "image_processor_type": "Qwen2VLImageProcessorFast"
21
+ }
qwythos.png ADDED

Git LFS Details

  • SHA256: 3f70d88f35644a482f333d89c61ec1f28240af1d4bc740619071455561977622
  • Pointer size: 132 Bytes
  • Size of remote file: 1.8 MB
qwythos_v2_evals.svg ADDED
tokenizer.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:87a7830d63fcf43bf241c3c5242e96e62dd3fdc29224ca26fed8ea333db72de4
3
+ size 19989343
tokenizer_config.json ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ "split_special_tokens": false,
31
+ "tokenizer_class": "TokenizersBackend",
32
+ "unk_token": null,
33
+ "video_token": "<|video_pad|>",
34
+ "vision_bos_token": "<|vision_start|>",
35
+ "vision_eos_token": "<|vision_end|>"
36
+ }
video_preprocessor_config.json ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "size": {
3
+ "longest_edge": 25165824,
4
+ "shortest_edge": 4096
5
+ },
6
+ "patch_size": 16,
7
+ "temporal_patch_size": 2,
8
+ "merge_size": 2,
9
+ "image_mean": [
10
+ 0.5,
11
+ 0.5,
12
+ 0.5
13
+ ],
14
+ "image_std": [
15
+ 0.5,
16
+ 0.5,
17
+ 0.5
18
+ ],
19
+ "processor_class": "Qwen3VLProcessor",
20
+ "video_processor_type": "Qwen3VLVideoProcessor"
21
+ }