sluttybutfast commited on
Commit
ce94aa4
·
verified ·
1 Parent(s): c232200

Upload folder using huggingface_hub

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
README.md ADDED
@@ -0,0 +1,164 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ license: apache-2.0
3
+ library_name: mlx
4
+ tags:
5
+ - mlx
6
+ - qwen3_5_moe
7
+ - vision-language
8
+ - multimodal
9
+ - image-text-to-text
10
+ - code
11
+ base_model:
12
+ - mlx-community/KAT-Coder-V2.5-Dev-OptiQ-4bit
13
+ - unsloth/Qwen3.6-35B-A3B-UD-MLX-4bit
14
+ pipeline_tag: image-text-to-text
15
+ ---
16
+
17
+ # sluttybutfast/KAT-Coder-V2.5-Dev-Vision-OptiQ-4bit
18
+
19
+ A vision-language model created by grafting the vision tower of
20
+ /unsloth/Qwen3.6-35B-A3B-UD-MLX-4bit onto the language model of mlx-community/KAT-Coder-V2.5-Dev-OptiQ-4bit.
21
+
22
+ The finetuned model was language-only (its vision tower had been stripped
23
+ during training), but was the best model for agentic coding i ever tested for 32gb systems (very
24
+ good multi turn tool calling and small thinking blocks for a qwen variant).
25
+ This merge fully restores multimodal capability by re-attaching the original vision encoder and
26
+ projector from the base VLM, while keeping the finetuned language weights intact.
27
+
28
+ - Architecture: Qwen3_5MoeForConditionalGeneration (qwen3_5_moe)
29
+ - Language model: from mlx-community/KAT-Coder-V2.5-Dev-OptiQ-4bit (finetuned, quantized)
30
+ - Vision tower: from unsloth/Qwen3.6-35B-A3B-UD-MLX-4bit (unmodified, bf16)
31
+ - Format: MLX
32
+ - Runs with: mlx-vlm (https://github.com/Blaizzy/mlx-vlm), oMLX prefered
33
+
34
+ ## Verify image capability
35
+
36
+ Install:
37
+
38
+ pip install mlx-vlm
39
+
40
+ Command line:
41
+
42
+ python -m mlx_vlm.generate \
43
+ --model YOUR_MODEL_NAME \
44
+ --image path/to/image.jpg \
45
+ --prompt "Describe this image. Extract all text" \
46
+ --max-tokens 5000
47
+
48
+ Python:
49
+
50
+ from mlx_vlm import load, generate
51
+ from mlx_vlm.prompt_utils import apply_chat_template
52
+
53
+ model, processor = load("YOUR_MODEL_NAME")
54
+ config = model.config
55
+
56
+ prompt = apply_chat_template(
57
+ processor, config,
58
+ "Describe this image. Extract all text",
59
+ num_images=1,
60
+ )
61
+ output = generate(model, processor, prompt, ["path/to/image.jpg"],
62
+ max_tokens=5000, verbose=True)
63
+ print(output)
64
+
65
+ ## How the merge was done
66
+
67
+ The two source models share the same qwen3_5_moe architecture and an
68
+ identical namespace convention, which made a clean weight-level merge
69
+ possible without any retraining, fine-tuning, or projector re-alignment.
70
+
71
+ ### 1. Namespace split
72
+
73
+ All tensors in both models fall into two disjoint prefixes:
74
+
75
+ - language_model.* -> Language model + LM head -> taken from the FINETUNE
76
+ - vision_tower.* -> Vision encoder + merger -> taken from the BASE VLM
77
+
78
+ The merge is a straightforward union: every language_model.* tensor from the
79
+ finetune, and every vision_tower.* tensor from the base VLM.
80
+
81
+ ### 2. Dimension compatibility
82
+
83
+ The vision projector (vision_tower.merger) outputs
84
+ vision_config.out_hidden_size = 2048, which matches the language model's
85
+ text_config.hidden_size = 2048. Vision features therefore project directly
86
+ into the LM embedding space with no adapter needed. Image features are
87
+ injected at the image_token_id position (single-point injection;
88
+ deepstack_visual_indexes is empty).
89
+
90
+ ### 3. Precision and quantization
91
+
92
+ - Language model: retains the finetune's mixed quantization scheme --
93
+ 4-bit switch_mlp experts, 8-bit attention / shared experts / embeddings /
94
+ LM head (group size 64, affine). The finetune's quantization map was
95
+ carried over verbatim.
96
+ - Vision tower: kept at full precision (bfloat16), exactly as shipped in the
97
+ base VLM. MLX supports this mixed quantized-LM / bf16-vision setup.
98
+
99
+ ### 4. Configuration
100
+
101
+ The merged config.json uses the finetune's config as the base (it holds the
102
+ correct quantization map and text_config), with the following vision-related
103
+ fields grafted in from the base VLM:
104
+
105
+ - vision_config
106
+ - image_token_id, video_token_id
107
+ - vision_start_token_id, vision_end_token_id
108
+
109
+ The multi-token-prediction head was not carried over
110
+ (mtp_num_hidden_layers remains 0, matching the finetune). The image preprocessor
111
+ (preprocessor_config.json) were taken from the base VLM, since the finetune's tokenizer
112
+ configuration was text-only. The tokenizer vocabulary is identical between both sources
113
+ (vocab_size = 248320, same special-token IDs), so the base VLM's template is
114
+ fully compatible.
115
+
116
+ ### 5. Verification
117
+
118
+ The merged weights were verified byte-for-byte via SHA-256 hashes of each
119
+ tensor, comparing the merged output against both sources:
120
+
121
+ - All 1757 language_model.* tensors are byte-identical to the finetune.
122
+ - All 333 vision_tower.* tensors are byte-identical to the base VLM.
123
+
124
+
125
+ This model is a derivative combining:
126
+
127
+ - Language model: mlx-community/KAT-Coder-V2.5-Dev-OptiQ-4bit
128
+ - Vision tower: unsloth/Qwen3.6-35B-A3B-UD-MLX-4bit
129
+
130
+ License: apache-2.0. You must comply with the licenses of BOTH source
131
+ models. Please cite and credit the original authors of both the base VLM and
132
+ the finetune.
133
+
134
+ ## Reproduction
135
+
136
+ The merge was performed with a script (scripts/merge.py) that:
137
+
138
+ 1. Loads all safetensors from both source directories natively in MLX
139
+ (preserving bfloat16 and packed-quant dtypes).
140
+ 2. Selects language_model.* tensors from the finetune and vision_tower.*
141
+ tensors from the base VLM.
142
+ 3. Builds the merged config (finetune config + base vision fields).
143
+ 4. Copies the image preprocessor config from the base VLM, rest from finetune.
144
+ 5. Saves the merged safetensors with a model.safetensors.index.json.
145
+
146
+ The merge was split into Hugging Face splittensors using the scripts/split.py.
147
+
148
+ The model was verified for correct tensors (checking text tensors were untouched) using the scripts/verify.py.
149
+
150
+ You should be able to do your own merges with the script as long as the two models are compatible (check for
151
+ same dimensions, same tokenizer size). Verify and check vision capabilities (f.e. ocr a text).
152
+
153
+ The model uses unsloth chat_template with default reasoning_preserve=true.
154
+ If you prefer the original chat_template replace chat_template.json with chat_templat.json.org or any you like.
155
+
156
+ ## Recommended settings (coding/thinking):
157
+ Though finetuned, this is still Qwen3.6, so stick close to the official Qwen recommendations
158
+ (temp 0.7, top_p=0.95, min_p=0.0, top_k=20, repetition_penalty=1.0, presence_penalty=0.0).
159
+ Avoid temp < 0.4, as this can cause the model to loop!!!
160
+
161
+ My personal recommendation (forced! in oMLX when required, as f.e. copilot likes to use temp 0.0):
162
+ temp 0.6, top_p=0.85, min_p=0.0, top_k=20, repetition_penalty=1.0, presence_penalty=0.0,
163
+ thinking_budget=none, enable_thinking=true, preserve_thinking=true, output_token_limit=16384
164
+
chat_template.jinja ADDED
@@ -0,0 +1,159 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {%- set image_count = namespace(value=0) %}
2
+ {%- set video_count = namespace(value=0) %}
3
+ {%- set preserve_thinking = preserve_thinking if preserve_thinking is defined else true %}
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
+ {%- set num_sys = 0 %}
47
+ {%- set merged_system = '' %}
48
+ {%- if messages[0].role == 'system' or messages[0].role == 'developer' %}
49
+ {%- set first = render_content(messages[0].content, false, true)|trim %}
50
+ {%- if messages|length > 1 and (messages[1].role == 'system' or messages[1].role == 'developer') %}
51
+ {%- set second = render_content(messages[1].content, false, true)|trim %}
52
+ {%- set merged_system = first + '\n' + second %}
53
+ {%- set num_sys = 2 %}
54
+ {%- else %}
55
+ {%- set merged_system = first %}
56
+ {%- set num_sys = 1 %}
57
+ {%- endif %}
58
+ {%- endif %}
59
+ {%- if tools and tools is iterable and tools is not mapping %}
60
+ {{- '<|im_start|>system\n' }}
61
+ {{- "# Tools\n\nYou have access to the following functions:\n\n<tools>" }}
62
+ {%- for tool in tools %}
63
+ {{- "\n" }}
64
+ {{- tool | tojson }}
65
+ {%- endfor %}
66
+ {{- "\n</tools>" }}
67
+ {{- '\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>' }}
68
+ {%- if merged_system %}
69
+ {{- '\n\n' + merged_system }}
70
+ {%- endif %}
71
+ {{- '<|im_end|>\n' }}
72
+ {%- else %}
73
+ {%- if merged_system %}
74
+ {{- '<|im_start|>system\n' + merged_system + '<|im_end|>\n' }}
75
+ {%- endif %}
76
+ {%- endif %}
77
+ {%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}
78
+ {%- for message in messages[::-1] %}
79
+ {%- set index = (messages|length - 1) - loop.index0 %}
80
+ {%- if ns.multi_step_tool and message.role == "user" %}
81
+ {%- set content = render_content(message.content, false)|trim %}
82
+ {%- if not(content.startswith('<tool_response>') and content.endswith('</tool_response>')) %}
83
+ {%- set ns.multi_step_tool = false %}
84
+ {%- set ns.last_query_index = index %}
85
+ {%- endif %}
86
+ {%- endif %}
87
+ {%- endfor %}
88
+ {%- for message in messages %}
89
+ {%- if loop.index0 >= num_sys and message.role != "system" and message.role != "developer" %}
90
+ {%- set content = render_content(message.content, true)|trim %}
91
+ {%- if message.role == "user" %}
92
+ {{- '<|im_start|>' + message.role + '\n' + content + '<|im_end|>' + '\n' }}
93
+ {%- elif message.role == "assistant" %}
94
+ {%- set reasoning_content = '' %}
95
+ {%- if message.reasoning_content is string %}
96
+ {%- set reasoning_content = message.reasoning_content %}
97
+ {%- else %}
98
+ {%- if '</think>' in content %}
99
+ {%- set reasoning_content = content.split('</think>')[0].rstrip('\n').split('<think>')[-1].lstrip('\n') %}
100
+ {%- set content = content.split('</think>')[-1].lstrip('\n') %}
101
+ {%- endif %}
102
+ {%- endif %}
103
+ {%- set reasoning_content = reasoning_content|trim %}
104
+ {%- if (preserve_thinking is defined and preserve_thinking is true) or (loop.index0 > ns.last_query_index) %}
105
+ {{- '<|im_start|>' + message.role + '\n<think>\n' + reasoning_content + '\n</think>\n\n' + content }}
106
+ {%- else %}
107
+ {{- '<|im_start|>' + message.role + '\n' + content }}
108
+ {%- endif %}
109
+ {%- if message.tool_calls and message.tool_calls is iterable and message.tool_calls is not mapping %}
110
+ {%- for tool_call in message.tool_calls %}
111
+ {%- if tool_call.function is defined %}
112
+ {%- set tool_call = tool_call.function %}
113
+ {%- endif %}
114
+ {%- if loop.first %}
115
+ {%- if content|trim %}
116
+ {{- '\n\n<tool_call>\n<function=' + tool_call.name + '>\n' }}
117
+ {%- else %}
118
+ {{- '<tool_call>\n<function=' + tool_call.name + '>\n' }}
119
+ {%- endif %}
120
+ {%- else %}
121
+ {{- '\n<tool_call>\n<function=' + tool_call.name + '>\n' }}
122
+ {%- endif %}
123
+ {%- if tool_call.arguments is mapping %}
124
+ {%- for args_name in tool_call.arguments %}
125
+ {%- set args_value = tool_call.arguments[args_name] %}
126
+ {{- '<parameter=' + args_name + '>\n' }}
127
+ {%- 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 %}
128
+ {{- args_value }}
129
+ {{- '\n</parameter>\n' }}
130
+ {%- endfor %}
131
+ {%- endif %}
132
+ {{- '</function>\n</tool_call>' }}
133
+ {%- endfor %}
134
+ {%- endif %}
135
+ {{- '<|im_end|>\n' }}
136
+ {%- elif message.role == "tool" %}
137
+ {%- if loop.previtem and loop.previtem.role != "tool" %}
138
+ {{- '<|im_start|>user' }}
139
+ {%- endif %}
140
+ {{- '\n<tool_response>\n' }}
141
+ {{- content }}
142
+ {{- '\n</tool_response>' }}
143
+ {%- if not loop.last and loop.nextitem.role != "tool" %}
144
+ {{- '<|im_end|>\n' }}
145
+ {%- elif loop.last %}
146
+ {{- '<|im_end|>\n' }}
147
+ {%- endif %}
148
+ {%- endif %}
149
+ {%- endif %}
150
+ {%- endfor %}
151
+ {%- if add_generation_prompt %}
152
+ {{- '<|im_start|>assistant\n' }}
153
+ {%- if enable_thinking is defined and enable_thinking is false %}
154
+ {{- '<think>\n\n</think>\n\n' }}
155
+ {%- else %}
156
+ {{- '<think>\n' }}
157
+ {%- endif %}
158
+ {%- endif %}
159
+ {#- Unsloth fixes - developer role, tool calling #}
chat_template.jinja.org 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
+ {{- '<|im_start|>system\n' + content + '<|im_end|>' + '\n' }}
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 (preserve_thinking is defined and preserve_thinking is true) or (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 | string if args_value is string else args_value | tojson | safe %}
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 %}
chat_template.jinja.unsloth ADDED
@@ -0,0 +1,158 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {%- set image_count = namespace(value=0) %}
2
+ {%- set video_count = namespace(value=0) %}
3
+ {%- macro render_content(content, do_vision_count, is_system_content=false) %}
4
+ {%- if content is string %}
5
+ {{- content }}
6
+ {%- elif content is iterable and content is not mapping %}
7
+ {%- for item in content %}
8
+ {%- if 'image' in item or 'image_url' in item or item.type == 'image' %}
9
+ {%- if is_system_content %}
10
+ {{- raise_exception('System message cannot contain images.') }}
11
+ {%- endif %}
12
+ {%- if do_vision_count %}
13
+ {%- set image_count.value = image_count.value + 1 %}
14
+ {%- endif %}
15
+ {%- if add_vision_id %}
16
+ {{- 'Picture ' ~ image_count.value ~ ': ' }}
17
+ {%- endif %}
18
+ {{- '<|vision_start|><|image_pad|><|vision_end|>' }}
19
+ {%- elif 'video' in item or item.type == 'video' %}
20
+ {%- if is_system_content %}
21
+ {{- raise_exception('System message cannot contain videos.') }}
22
+ {%- endif %}
23
+ {%- if do_vision_count %}
24
+ {%- set video_count.value = video_count.value + 1 %}
25
+ {%- endif %}
26
+ {%- if add_vision_id %}
27
+ {{- 'Video ' ~ video_count.value ~ ': ' }}
28
+ {%- endif %}
29
+ {{- '<|vision_start|><|video_pad|><|vision_end|>' }}
30
+ {%- elif 'text' in item %}
31
+ {{- item.text }}
32
+ {%- else %}
33
+ {{- raise_exception('Unexpected item type in content.') }}
34
+ {%- endif %}
35
+ {%- endfor %}
36
+ {%- elif content is none or content is undefined %}
37
+ {{- '' }}
38
+ {%- else %}
39
+ {{- raise_exception('Unexpected content type.') }}
40
+ {%- endif %}
41
+ {%- endmacro %}
42
+ {%- if not messages %}
43
+ {{- raise_exception('No messages provided.') }}
44
+ {%- endif %}
45
+ {%- set num_sys = 0 %}
46
+ {%- set merged_system = '' %}
47
+ {%- if messages[0].role == 'system' or messages[0].role == 'developer' %}
48
+ {%- set first = render_content(messages[0].content, false, true)|trim %}
49
+ {%- if messages|length > 1 and (messages[1].role == 'system' or messages[1].role == 'developer') %}
50
+ {%- set second = render_content(messages[1].content, false, true)|trim %}
51
+ {%- set merged_system = first + '\n' + second %}
52
+ {%- set num_sys = 2 %}
53
+ {%- else %}
54
+ {%- set merged_system = first %}
55
+ {%- set num_sys = 1 %}
56
+ {%- endif %}
57
+ {%- endif %}
58
+ {%- if tools and tools is iterable and tools is not mapping %}
59
+ {{- '<|im_start|>system\n' }}
60
+ {{- "# Tools\n\nYou have access to the following functions:\n\n<tools>" }}
61
+ {%- for tool in tools %}
62
+ {{- "\n" }}
63
+ {{- tool | tojson }}
64
+ {%- endfor %}
65
+ {{- "\n</tools>" }}
66
+ {{- '\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>' }}
67
+ {%- if merged_system %}
68
+ {{- '\n\n' + merged_system }}
69
+ {%- endif %}
70
+ {{- '<|im_end|>\n' }}
71
+ {%- else %}
72
+ {%- if merged_system %}
73
+ {{- '<|im_start|>system\n' + merged_system + '<|im_end|>\n' }}
74
+ {%- endif %}
75
+ {%- endif %}
76
+ {%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}
77
+ {%- for message in messages[::-1] %}
78
+ {%- set index = (messages|length - 1) - loop.index0 %}
79
+ {%- if ns.multi_step_tool and message.role == "user" %}
80
+ {%- set content = render_content(message.content, false)|trim %}
81
+ {%- if not(content.startswith('<tool_response>') and content.endswith('</tool_response>')) %}
82
+ {%- set ns.multi_step_tool = false %}
83
+ {%- set ns.last_query_index = index %}
84
+ {%- endif %}
85
+ {%- endif %}
86
+ {%- endfor %}
87
+ {%- for message in messages %}
88
+ {%- if loop.index0 >= num_sys and message.role != "system" and message.role != "developer" %}
89
+ {%- set content = render_content(message.content, true)|trim %}
90
+ {%- if message.role == "user" %}
91
+ {{- '<|im_start|>' + message.role + '\n' + content + '<|im_end|>' + '\n' }}
92
+ {%- elif message.role == "assistant" %}
93
+ {%- set reasoning_content = '' %}
94
+ {%- if message.reasoning_content is string %}
95
+ {%- set reasoning_content = message.reasoning_content %}
96
+ {%- else %}
97
+ {%- if '</think>' in content %}
98
+ {%- set reasoning_content = content.split('</think>')[0].rstrip('\n').split('<think>')[-1].lstrip('\n') %}
99
+ {%- set content = content.split('</think>')[-1].lstrip('\n') %}
100
+ {%- endif %}
101
+ {%- endif %}
102
+ {%- set reasoning_content = reasoning_content|trim %}
103
+ {%- if (preserve_thinking is defined and preserve_thinking is true) or (loop.index0 > ns.last_query_index) %}
104
+ {{- '<|im_start|>' + message.role + '\n<think>\n' + reasoning_content + '\n</think>\n\n' + content }}
105
+ {%- else %}
106
+ {{- '<|im_start|>' + message.role + '\n' + content }}
107
+ {%- endif %}
108
+ {%- if message.tool_calls and message.tool_calls is iterable and message.tool_calls is not mapping %}
109
+ {%- for tool_call in message.tool_calls %}
110
+ {%- if tool_call.function is defined %}
111
+ {%- set tool_call = tool_call.function %}
112
+ {%- endif %}
113
+ {%- if loop.first %}
114
+ {%- if content|trim %}
115
+ {{- '\n\n<tool_call>\n<function=' + tool_call.name + '>\n' }}
116
+ {%- else %}
117
+ {{- '<tool_call>\n<function=' + tool_call.name + '>\n' }}
118
+ {%- endif %}
119
+ {%- else %}
120
+ {{- '\n<tool_call>\n<function=' + tool_call.name + '>\n' }}
121
+ {%- endif %}
122
+ {%- if tool_call.arguments is mapping %}
123
+ {%- for args_name in tool_call.arguments %}
124
+ {%- set args_value = tool_call.arguments[args_name] %}
125
+ {{- '<parameter=' + args_name + '>\n' }}
126
+ {%- 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 %}
127
+ {{- args_value }}
128
+ {{- '\n</parameter>\n' }}
129
+ {%- endfor %}
130
+ {%- endif %}
131
+ {{- '</function>\n</tool_call>' }}
132
+ {%- endfor %}
133
+ {%- endif %}
134
+ {{- '<|im_end|>\n' }}
135
+ {%- elif message.role == "tool" %}
136
+ {%- if loop.previtem and loop.previtem.role != "tool" %}
137
+ {{- '<|im_start|>user' }}
138
+ {%- endif %}
139
+ {{- '\n<tool_response>\n' }}
140
+ {{- content }}
141
+ {{- '\n</tool_response>' }}
142
+ {%- if not loop.last and loop.nextitem.role != "tool" %}
143
+ {{- '<|im_end|>\n' }}
144
+ {%- elif loop.last %}
145
+ {{- '<|im_end|>\n' }}
146
+ {%- endif %}
147
+ {%- endif %}
148
+ {%- endif %}
149
+ {%- endfor %}
150
+ {%- if add_generation_prompt %}
151
+ {{- '<|im_start|>assistant\n' }}
152
+ {%- if enable_thinking is defined and enable_thinking is false %}
153
+ {{- '<think>\n\n</think>\n\n' }}
154
+ {%- else %}
155
+ {{- '<think>\n' }}
156
+ {%- endif %}
157
+ {%- endif %}
158
+ {#- Unsloth fixes - developer role, tool calling #}
config.json ADDED
The diff for this file is too large to render. See raw diff
 
generation_config.json ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "bos_token_id": 248044,
3
+ "do_sample": true,
4
+ "eos_token_id": [
5
+ 248046,
6
+ 248044
7
+ ],
8
+ "pad_token_id": 248044,
9
+ "temperature": 1.0,
10
+ "top_k": 20,
11
+ "top_p": 0.95
12
+ }
model-00001-of-00006.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:c723e5a413fc11f858c79f809f660ba94d39d1e51006ca709fa8856cf1fea0b5
3
+ size 4290266206
model-00002-of-00006.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:21d6ef300e21c4c011b9ee4d8160d1d03d2369b929b5a420450541341f5a8bcd
3
+ size 4279959581
model-00003-of-00006.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a4f65095227500325ae56e53f3761f29b596e55fc4f8e4022203e687611c958f
3
+ size 4293322632
model-00004-of-00006.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:319f5eae052376b9b096417e2b02370bab56552c7fe7843815873c256305a03f
3
+ size 4165945826
model-00005-of-00006.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:e3cd1ae0b12b76b5df6c6e3a9b96204245d19982b00d3589bd5fa3480676e283
3
+ size 4167598879
model-00006-of-00006.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:bd623e36304007051d0e541fb1c4a2f89f38c62fe55ff34b097b2d05a6293a25
3
+ size 1626141612
model.safetensors.index.json ADDED
The diff for this file is too large to render. See raw diff
 
optiq_metadata.json ADDED
@@ -0,0 +1,2056 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "method": "static_mixed_precision",
3
+ "base_model": "/Users/codelion/.cache/huggingface/hub/models--Kwaipilot--KAT-Coder-V2.5-Dev/snapshots/7a4a45dc6426b4951be99a9f230557c0b0b77761/",
4
+ "reference": "structural_rules",
5
+ "target_bpw": 4.5,
6
+ "achieved_bpw": 4.510037156886497,
7
+ "n_high_bits": 400,
8
+ "n_low_bits": 111,
9
+ "threshold": 0.0,
10
+ "per_layer": {
11
+ "language_model.lm_head": {
12
+ "bits": 8,
13
+ "group_size": 64
14
+ },
15
+ "language_model.model.layers.39.mlp.shared_expert_gate": {
16
+ "bits": 8,
17
+ "group_size": 64
18
+ },
19
+ "language_model.model.layers.39.mlp.shared_expert.up_proj": {
20
+ "bits": 8,
21
+ "group_size": 64
22
+ },
23
+ "language_model.model.layers.39.mlp.shared_expert.down_proj": {
24
+ "bits": 8,
25
+ "group_size": 64
26
+ },
27
+ "language_model.model.layers.39.mlp.shared_expert.gate_proj": {
28
+ "bits": 8,
29
+ "group_size": 64
30
+ },
31
+ "language_model.model.layers.39.mlp.switch_mlp.down_proj": {
32
+ "bits": 8,
33
+ "group_size": 64
34
+ },
35
+ "language_model.model.layers.39.mlp.switch_mlp.up_proj": {
36
+ "bits": 8,
37
+ "group_size": 64
38
+ },
39
+ "language_model.model.layers.39.mlp.switch_mlp.gate_proj": {
40
+ "bits": 8,
41
+ "group_size": 64
42
+ },
43
+ "language_model.model.layers.39.mlp.gate": {
44
+ "bits": 8,
45
+ "group_size": 64
46
+ },
47
+ "language_model.model.layers.39.self_attn.o_proj": {
48
+ "bits": 8,
49
+ "group_size": 64
50
+ },
51
+ "language_model.model.layers.39.self_attn.v_proj": {
52
+ "bits": 8,
53
+ "group_size": 64
54
+ },
55
+ "language_model.model.layers.39.self_attn.k_proj": {
56
+ "bits": 8,
57
+ "group_size": 64
58
+ },
59
+ "language_model.model.layers.39.self_attn.q_proj": {
60
+ "bits": 8,
61
+ "group_size": 64
62
+ },
63
+ "language_model.model.layers.38.mlp.shared_expert_gate": {
64
+ "bits": 8,
65
+ "group_size": 64
66
+ },
67
+ "language_model.model.layers.38.mlp.shared_expert.up_proj": {
68
+ "bits": 8,
69
+ "group_size": 64
70
+ },
71
+ "language_model.model.layers.38.mlp.shared_expert.down_proj": {
72
+ "bits": 8,
73
+ "group_size": 64
74
+ },
75
+ "language_model.model.layers.38.mlp.shared_expert.gate_proj": {
76
+ "bits": 8,
77
+ "group_size": 64
78
+ },
79
+ "language_model.model.layers.38.mlp.switch_mlp.down_proj": {
80
+ "bits": 4,
81
+ "group_size": 64
82
+ },
83
+ "language_model.model.layers.38.mlp.switch_mlp.up_proj": {
84
+ "bits": 4,
85
+ "group_size": 64
86
+ },
87
+ "language_model.model.layers.38.mlp.switch_mlp.gate_proj": {
88
+ "bits": 4,
89
+ "group_size": 64
90
+ },
91
+ "language_model.model.layers.38.mlp.gate": {
92
+ "bits": 8,
93
+ "group_size": 64
94
+ },
95
+ "language_model.model.layers.38.linear_attn.out_proj": {
96
+ "bits": 8,
97
+ "group_size": 64
98
+ },
99
+ "language_model.model.layers.38.linear_attn.in_proj_a": {
100
+ "bits": 8,
101
+ "group_size": 64
102
+ },
103
+ "language_model.model.layers.38.linear_attn.in_proj_b": {
104
+ "bits": 8,
105
+ "group_size": 64
106
+ },
107
+ "language_model.model.layers.38.linear_attn.in_proj_z": {
108
+ "bits": 8,
109
+ "group_size": 64
110
+ },
111
+ "language_model.model.layers.38.linear_attn.in_proj_qkv": {
112
+ "bits": 8,
113
+ "group_size": 64
114
+ },
115
+ "language_model.model.layers.37.mlp.shared_expert_gate": {
116
+ "bits": 8,
117
+ "group_size": 64
118
+ },
119
+ "language_model.model.layers.37.mlp.shared_expert.up_proj": {
120
+ "bits": 8,
121
+ "group_size": 64
122
+ },
123
+ "language_model.model.layers.37.mlp.shared_expert.down_proj": {
124
+ "bits": 8,
125
+ "group_size": 64
126
+ },
127
+ "language_model.model.layers.37.mlp.shared_expert.gate_proj": {
128
+ "bits": 8,
129
+ "group_size": 64
130
+ },
131
+ "language_model.model.layers.37.mlp.switch_mlp.down_proj": {
132
+ "bits": 4,
133
+ "group_size": 64
134
+ },
135
+ "language_model.model.layers.37.mlp.switch_mlp.up_proj": {
136
+ "bits": 4,
137
+ "group_size": 64
138
+ },
139
+ "language_model.model.layers.37.mlp.switch_mlp.gate_proj": {
140
+ "bits": 4,
141
+ "group_size": 64
142
+ },
143
+ "language_model.model.layers.37.mlp.gate": {
144
+ "bits": 8,
145
+ "group_size": 64
146
+ },
147
+ "language_model.model.layers.37.linear_attn.out_proj": {
148
+ "bits": 8,
149
+ "group_size": 64
150
+ },
151
+ "language_model.model.layers.37.linear_attn.in_proj_a": {
152
+ "bits": 8,
153
+ "group_size": 64
154
+ },
155
+ "language_model.model.layers.37.linear_attn.in_proj_b": {
156
+ "bits": 8,
157
+ "group_size": 64
158
+ },
159
+ "language_model.model.layers.37.linear_attn.in_proj_z": {
160
+ "bits": 8,
161
+ "group_size": 64
162
+ },
163
+ "language_model.model.layers.37.linear_attn.in_proj_qkv": {
164
+ "bits": 8,
165
+ "group_size": 64
166
+ },
167
+ "language_model.model.layers.36.mlp.shared_expert_gate": {
168
+ "bits": 8,
169
+ "group_size": 64
170
+ },
171
+ "language_model.model.layers.36.mlp.shared_expert.up_proj": {
172
+ "bits": 8,
173
+ "group_size": 64
174
+ },
175
+ "language_model.model.layers.36.mlp.shared_expert.down_proj": {
176
+ "bits": 8,
177
+ "group_size": 64
178
+ },
179
+ "language_model.model.layers.36.mlp.shared_expert.gate_proj": {
180
+ "bits": 8,
181
+ "group_size": 64
182
+ },
183
+ "language_model.model.layers.36.mlp.switch_mlp.down_proj": {
184
+ "bits": 4,
185
+ "group_size": 64
186
+ },
187
+ "language_model.model.layers.36.mlp.switch_mlp.up_proj": {
188
+ "bits": 4,
189
+ "group_size": 64
190
+ },
191
+ "language_model.model.layers.36.mlp.switch_mlp.gate_proj": {
192
+ "bits": 4,
193
+ "group_size": 64
194
+ },
195
+ "language_model.model.layers.36.mlp.gate": {
196
+ "bits": 8,
197
+ "group_size": 64
198
+ },
199
+ "language_model.model.layers.36.linear_attn.out_proj": {
200
+ "bits": 8,
201
+ "group_size": 64
202
+ },
203
+ "language_model.model.layers.36.linear_attn.in_proj_a": {
204
+ "bits": 8,
205
+ "group_size": 64
206
+ },
207
+ "language_model.model.layers.36.linear_attn.in_proj_b": {
208
+ "bits": 8,
209
+ "group_size": 64
210
+ },
211
+ "language_model.model.layers.36.linear_attn.in_proj_z": {
212
+ "bits": 8,
213
+ "group_size": 64
214
+ },
215
+ "language_model.model.layers.36.linear_attn.in_proj_qkv": {
216
+ "bits": 8,
217
+ "group_size": 64
218
+ },
219
+ "language_model.model.layers.35.mlp.shared_expert_gate": {
220
+ "bits": 8,
221
+ "group_size": 64
222
+ },
223
+ "language_model.model.layers.35.mlp.shared_expert.up_proj": {
224
+ "bits": 8,
225
+ "group_size": 64
226
+ },
227
+ "language_model.model.layers.35.mlp.shared_expert.down_proj": {
228
+ "bits": 8,
229
+ "group_size": 64
230
+ },
231
+ "language_model.model.layers.35.mlp.shared_expert.gate_proj": {
232
+ "bits": 8,
233
+ "group_size": 64
234
+ },
235
+ "language_model.model.layers.35.mlp.switch_mlp.down_proj": {
236
+ "bits": 4,
237
+ "group_size": 64
238
+ },
239
+ "language_model.model.layers.35.mlp.switch_mlp.up_proj": {
240
+ "bits": 4,
241
+ "group_size": 64
242
+ },
243
+ "language_model.model.layers.35.mlp.switch_mlp.gate_proj": {
244
+ "bits": 4,
245
+ "group_size": 64
246
+ },
247
+ "language_model.model.layers.35.mlp.gate": {
248
+ "bits": 8,
249
+ "group_size": 64
250
+ },
251
+ "language_model.model.layers.35.self_attn.o_proj": {
252
+ "bits": 8,
253
+ "group_size": 64
254
+ },
255
+ "language_model.model.layers.35.self_attn.v_proj": {
256
+ "bits": 8,
257
+ "group_size": 64
258
+ },
259
+ "language_model.model.layers.35.self_attn.k_proj": {
260
+ "bits": 8,
261
+ "group_size": 64
262
+ },
263
+ "language_model.model.layers.35.self_attn.q_proj": {
264
+ "bits": 8,
265
+ "group_size": 64
266
+ },
267
+ "language_model.model.layers.34.mlp.shared_expert_gate": {
268
+ "bits": 8,
269
+ "group_size": 64
270
+ },
271
+ "language_model.model.layers.34.mlp.shared_expert.up_proj": {
272
+ "bits": 8,
273
+ "group_size": 64
274
+ },
275
+ "language_model.model.layers.34.mlp.shared_expert.down_proj": {
276
+ "bits": 8,
277
+ "group_size": 64
278
+ },
279
+ "language_model.model.layers.34.mlp.shared_expert.gate_proj": {
280
+ "bits": 8,
281
+ "group_size": 64
282
+ },
283
+ "language_model.model.layers.34.mlp.switch_mlp.down_proj": {
284
+ "bits": 4,
285
+ "group_size": 64
286
+ },
287
+ "language_model.model.layers.34.mlp.switch_mlp.up_proj": {
288
+ "bits": 4,
289
+ "group_size": 64
290
+ },
291
+ "language_model.model.layers.34.mlp.switch_mlp.gate_proj": {
292
+ "bits": 4,
293
+ "group_size": 64
294
+ },
295
+ "language_model.model.layers.34.mlp.gate": {
296
+ "bits": 8,
297
+ "group_size": 64
298
+ },
299
+ "language_model.model.layers.34.linear_attn.out_proj": {
300
+ "bits": 8,
301
+ "group_size": 64
302
+ },
303
+ "language_model.model.layers.34.linear_attn.in_proj_a": {
304
+ "bits": 8,
305
+ "group_size": 64
306
+ },
307
+ "language_model.model.layers.34.linear_attn.in_proj_b": {
308
+ "bits": 8,
309
+ "group_size": 64
310
+ },
311
+ "language_model.model.layers.34.linear_attn.in_proj_z": {
312
+ "bits": 8,
313
+ "group_size": 64
314
+ },
315
+ "language_model.model.layers.34.linear_attn.in_proj_qkv": {
316
+ "bits": 8,
317
+ "group_size": 64
318
+ },
319
+ "language_model.model.layers.33.mlp.shared_expert_gate": {
320
+ "bits": 8,
321
+ "group_size": 64
322
+ },
323
+ "language_model.model.layers.33.mlp.shared_expert.up_proj": {
324
+ "bits": 8,
325
+ "group_size": 64
326
+ },
327
+ "language_model.model.layers.33.mlp.shared_expert.down_proj": {
328
+ "bits": 8,
329
+ "group_size": 64
330
+ },
331
+ "language_model.model.layers.33.mlp.shared_expert.gate_proj": {
332
+ "bits": 8,
333
+ "group_size": 64
334
+ },
335
+ "language_model.model.layers.33.mlp.switch_mlp.down_proj": {
336
+ "bits": 4,
337
+ "group_size": 64
338
+ },
339
+ "language_model.model.layers.33.mlp.switch_mlp.up_proj": {
340
+ "bits": 4,
341
+ "group_size": 64
342
+ },
343
+ "language_model.model.layers.33.mlp.switch_mlp.gate_proj": {
344
+ "bits": 4,
345
+ "group_size": 64
346
+ },
347
+ "language_model.model.layers.33.mlp.gate": {
348
+ "bits": 8,
349
+ "group_size": 64
350
+ },
351
+ "language_model.model.layers.33.linear_attn.out_proj": {
352
+ "bits": 8,
353
+ "group_size": 64
354
+ },
355
+ "language_model.model.layers.33.linear_attn.in_proj_a": {
356
+ "bits": 8,
357
+ "group_size": 64
358
+ },
359
+ "language_model.model.layers.33.linear_attn.in_proj_b": {
360
+ "bits": 8,
361
+ "group_size": 64
362
+ },
363
+ "language_model.model.layers.33.linear_attn.in_proj_z": {
364
+ "bits": 8,
365
+ "group_size": 64
366
+ },
367
+ "language_model.model.layers.33.linear_attn.in_proj_qkv": {
368
+ "bits": 8,
369
+ "group_size": 64
370
+ },
371
+ "language_model.model.layers.32.mlp.shared_expert_gate": {
372
+ "bits": 8,
373
+ "group_size": 64
374
+ },
375
+ "language_model.model.layers.32.mlp.shared_expert.up_proj": {
376
+ "bits": 8,
377
+ "group_size": 64
378
+ },
379
+ "language_model.model.layers.32.mlp.shared_expert.down_proj": {
380
+ "bits": 8,
381
+ "group_size": 64
382
+ },
383
+ "language_model.model.layers.32.mlp.shared_expert.gate_proj": {
384
+ "bits": 8,
385
+ "group_size": 64
386
+ },
387
+ "language_model.model.layers.32.mlp.switch_mlp.down_proj": {
388
+ "bits": 4,
389
+ "group_size": 64
390
+ },
391
+ "language_model.model.layers.32.mlp.switch_mlp.up_proj": {
392
+ "bits": 4,
393
+ "group_size": 64
394
+ },
395
+ "language_model.model.layers.32.mlp.switch_mlp.gate_proj": {
396
+ "bits": 4,
397
+ "group_size": 64
398
+ },
399
+ "language_model.model.layers.32.mlp.gate": {
400
+ "bits": 8,
401
+ "group_size": 64
402
+ },
403
+ "language_model.model.layers.32.linear_attn.out_proj": {
404
+ "bits": 8,
405
+ "group_size": 64
406
+ },
407
+ "language_model.model.layers.32.linear_attn.in_proj_a": {
408
+ "bits": 8,
409
+ "group_size": 64
410
+ },
411
+ "language_model.model.layers.32.linear_attn.in_proj_b": {
412
+ "bits": 8,
413
+ "group_size": 64
414
+ },
415
+ "language_model.model.layers.32.linear_attn.in_proj_z": {
416
+ "bits": 8,
417
+ "group_size": 64
418
+ },
419
+ "language_model.model.layers.32.linear_attn.in_proj_qkv": {
420
+ "bits": 8,
421
+ "group_size": 64
422
+ },
423
+ "language_model.model.layers.31.mlp.shared_expert_gate": {
424
+ "bits": 8,
425
+ "group_size": 64
426
+ },
427
+ "language_model.model.layers.31.mlp.shared_expert.up_proj": {
428
+ "bits": 8,
429
+ "group_size": 64
430
+ },
431
+ "language_model.model.layers.31.mlp.shared_expert.down_proj": {
432
+ "bits": 8,
433
+ "group_size": 64
434
+ },
435
+ "language_model.model.layers.31.mlp.shared_expert.gate_proj": {
436
+ "bits": 8,
437
+ "group_size": 64
438
+ },
439
+ "language_model.model.layers.31.mlp.switch_mlp.down_proj": {
440
+ "bits": 4,
441
+ "group_size": 64
442
+ },
443
+ "language_model.model.layers.31.mlp.switch_mlp.up_proj": {
444
+ "bits": 4,
445
+ "group_size": 64
446
+ },
447
+ "language_model.model.layers.31.mlp.switch_mlp.gate_proj": {
448
+ "bits": 4,
449
+ "group_size": 64
450
+ },
451
+ "language_model.model.layers.31.mlp.gate": {
452
+ "bits": 8,
453
+ "group_size": 64
454
+ },
455
+ "language_model.model.layers.31.self_attn.o_proj": {
456
+ "bits": 8,
457
+ "group_size": 64
458
+ },
459
+ "language_model.model.layers.31.self_attn.v_proj": {
460
+ "bits": 8,
461
+ "group_size": 64
462
+ },
463
+ "language_model.model.layers.31.self_attn.k_proj": {
464
+ "bits": 8,
465
+ "group_size": 64
466
+ },
467
+ "language_model.model.layers.31.self_attn.q_proj": {
468
+ "bits": 8,
469
+ "group_size": 64
470
+ },
471
+ "language_model.model.layers.30.mlp.shared_expert_gate": {
472
+ "bits": 8,
473
+ "group_size": 64
474
+ },
475
+ "language_model.model.layers.30.mlp.shared_expert.up_proj": {
476
+ "bits": 8,
477
+ "group_size": 64
478
+ },
479
+ "language_model.model.layers.30.mlp.shared_expert.down_proj": {
480
+ "bits": 8,
481
+ "group_size": 64
482
+ },
483
+ "language_model.model.layers.30.mlp.shared_expert.gate_proj": {
484
+ "bits": 8,
485
+ "group_size": 64
486
+ },
487
+ "language_model.model.layers.30.mlp.switch_mlp.down_proj": {
488
+ "bits": 4,
489
+ "group_size": 64
490
+ },
491
+ "language_model.model.layers.30.mlp.switch_mlp.up_proj": {
492
+ "bits": 4,
493
+ "group_size": 64
494
+ },
495
+ "language_model.model.layers.30.mlp.switch_mlp.gate_proj": {
496
+ "bits": 4,
497
+ "group_size": 64
498
+ },
499
+ "language_model.model.layers.30.mlp.gate": {
500
+ "bits": 8,
501
+ "group_size": 64
502
+ },
503
+ "language_model.model.layers.30.linear_attn.out_proj": {
504
+ "bits": 8,
505
+ "group_size": 64
506
+ },
507
+ "language_model.model.layers.30.linear_attn.in_proj_a": {
508
+ "bits": 8,
509
+ "group_size": 64
510
+ },
511
+ "language_model.model.layers.30.linear_attn.in_proj_b": {
512
+ "bits": 8,
513
+ "group_size": 64
514
+ },
515
+ "language_model.model.layers.30.linear_attn.in_proj_z": {
516
+ "bits": 8,
517
+ "group_size": 64
518
+ },
519
+ "language_model.model.layers.30.linear_attn.in_proj_qkv": {
520
+ "bits": 8,
521
+ "group_size": 64
522
+ },
523
+ "language_model.model.layers.29.mlp.shared_expert_gate": {
524
+ "bits": 8,
525
+ "group_size": 64
526
+ },
527
+ "language_model.model.layers.29.mlp.shared_expert.up_proj": {
528
+ "bits": 8,
529
+ "group_size": 64
530
+ },
531
+ "language_model.model.layers.29.mlp.shared_expert.down_proj": {
532
+ "bits": 8,
533
+ "group_size": 64
534
+ },
535
+ "language_model.model.layers.29.mlp.shared_expert.gate_proj": {
536
+ "bits": 8,
537
+ "group_size": 64
538
+ },
539
+ "language_model.model.layers.29.mlp.switch_mlp.down_proj": {
540
+ "bits": 4,
541
+ "group_size": 64
542
+ },
543
+ "language_model.model.layers.29.mlp.switch_mlp.up_proj": {
544
+ "bits": 4,
545
+ "group_size": 64
546
+ },
547
+ "language_model.model.layers.29.mlp.switch_mlp.gate_proj": {
548
+ "bits": 4,
549
+ "group_size": 64
550
+ },
551
+ "language_model.model.layers.29.mlp.gate": {
552
+ "bits": 8,
553
+ "group_size": 64
554
+ },
555
+ "language_model.model.layers.29.linear_attn.out_proj": {
556
+ "bits": 8,
557
+ "group_size": 64
558
+ },
559
+ "language_model.model.layers.29.linear_attn.in_proj_a": {
560
+ "bits": 8,
561
+ "group_size": 64
562
+ },
563
+ "language_model.model.layers.29.linear_attn.in_proj_b": {
564
+ "bits": 8,
565
+ "group_size": 64
566
+ },
567
+ "language_model.model.layers.29.linear_attn.in_proj_z": {
568
+ "bits": 8,
569
+ "group_size": 64
570
+ },
571
+ "language_model.model.layers.29.linear_attn.in_proj_qkv": {
572
+ "bits": 8,
573
+ "group_size": 64
574
+ },
575
+ "language_model.model.layers.28.mlp.shared_expert_gate": {
576
+ "bits": 8,
577
+ "group_size": 64
578
+ },
579
+ "language_model.model.layers.28.mlp.shared_expert.up_proj": {
580
+ "bits": 8,
581
+ "group_size": 64
582
+ },
583
+ "language_model.model.layers.28.mlp.shared_expert.down_proj": {
584
+ "bits": 8,
585
+ "group_size": 64
586
+ },
587
+ "language_model.model.layers.28.mlp.shared_expert.gate_proj": {
588
+ "bits": 8,
589
+ "group_size": 64
590
+ },
591
+ "language_model.model.layers.28.mlp.switch_mlp.down_proj": {
592
+ "bits": 4,
593
+ "group_size": 64
594
+ },
595
+ "language_model.model.layers.28.mlp.switch_mlp.up_proj": {
596
+ "bits": 4,
597
+ "group_size": 64
598
+ },
599
+ "language_model.model.layers.28.mlp.switch_mlp.gate_proj": {
600
+ "bits": 4,
601
+ "group_size": 64
602
+ },
603
+ "language_model.model.layers.28.mlp.gate": {
604
+ "bits": 8,
605
+ "group_size": 64
606
+ },
607
+ "language_model.model.layers.28.linear_attn.out_proj": {
608
+ "bits": 8,
609
+ "group_size": 64
610
+ },
611
+ "language_model.model.layers.28.linear_attn.in_proj_a": {
612
+ "bits": 8,
613
+ "group_size": 64
614
+ },
615
+ "language_model.model.layers.28.linear_attn.in_proj_b": {
616
+ "bits": 8,
617
+ "group_size": 64
618
+ },
619
+ "language_model.model.layers.28.linear_attn.in_proj_z": {
620
+ "bits": 8,
621
+ "group_size": 64
622
+ },
623
+ "language_model.model.layers.28.linear_attn.in_proj_qkv": {
624
+ "bits": 8,
625
+ "group_size": 64
626
+ },
627
+ "language_model.model.layers.27.mlp.shared_expert_gate": {
628
+ "bits": 8,
629
+ "group_size": 64
630
+ },
631
+ "language_model.model.layers.27.mlp.shared_expert.up_proj": {
632
+ "bits": 8,
633
+ "group_size": 64
634
+ },
635
+ "language_model.model.layers.27.mlp.shared_expert.down_proj": {
636
+ "bits": 8,
637
+ "group_size": 64
638
+ },
639
+ "language_model.model.layers.27.mlp.shared_expert.gate_proj": {
640
+ "bits": 8,
641
+ "group_size": 64
642
+ },
643
+ "language_model.model.layers.27.mlp.switch_mlp.down_proj": {
644
+ "bits": 4,
645
+ "group_size": 64
646
+ },
647
+ "language_model.model.layers.27.mlp.switch_mlp.up_proj": {
648
+ "bits": 4,
649
+ "group_size": 64
650
+ },
651
+ "language_model.model.layers.27.mlp.switch_mlp.gate_proj": {
652
+ "bits": 4,
653
+ "group_size": 64
654
+ },
655
+ "language_model.model.layers.27.mlp.gate": {
656
+ "bits": 8,
657
+ "group_size": 64
658
+ },
659
+ "language_model.model.layers.27.self_attn.o_proj": {
660
+ "bits": 8,
661
+ "group_size": 64
662
+ },
663
+ "language_model.model.layers.27.self_attn.v_proj": {
664
+ "bits": 8,
665
+ "group_size": 64
666
+ },
667
+ "language_model.model.layers.27.self_attn.k_proj": {
668
+ "bits": 8,
669
+ "group_size": 64
670
+ },
671
+ "language_model.model.layers.27.self_attn.q_proj": {
672
+ "bits": 8,
673
+ "group_size": 64
674
+ },
675
+ "language_model.model.layers.26.mlp.shared_expert_gate": {
676
+ "bits": 8,
677
+ "group_size": 64
678
+ },
679
+ "language_model.model.layers.26.mlp.shared_expert.up_proj": {
680
+ "bits": 8,
681
+ "group_size": 64
682
+ },
683
+ "language_model.model.layers.26.mlp.shared_expert.down_proj": {
684
+ "bits": 8,
685
+ "group_size": 64
686
+ },
687
+ "language_model.model.layers.26.mlp.shared_expert.gate_proj": {
688
+ "bits": 8,
689
+ "group_size": 64
690
+ },
691
+ "language_model.model.layers.26.mlp.switch_mlp.down_proj": {
692
+ "bits": 4,
693
+ "group_size": 64
694
+ },
695
+ "language_model.model.layers.26.mlp.switch_mlp.up_proj": {
696
+ "bits": 4,
697
+ "group_size": 64
698
+ },
699
+ "language_model.model.layers.26.mlp.switch_mlp.gate_proj": {
700
+ "bits": 4,
701
+ "group_size": 64
702
+ },
703
+ "language_model.model.layers.26.mlp.gate": {
704
+ "bits": 8,
705
+ "group_size": 64
706
+ },
707
+ "language_model.model.layers.26.linear_attn.out_proj": {
708
+ "bits": 8,
709
+ "group_size": 64
710
+ },
711
+ "language_model.model.layers.26.linear_attn.in_proj_a": {
712
+ "bits": 8,
713
+ "group_size": 64
714
+ },
715
+ "language_model.model.layers.26.linear_attn.in_proj_b": {
716
+ "bits": 8,
717
+ "group_size": 64
718
+ },
719
+ "language_model.model.layers.26.linear_attn.in_proj_z": {
720
+ "bits": 8,
721
+ "group_size": 64
722
+ },
723
+ "language_model.model.layers.26.linear_attn.in_proj_qkv": {
724
+ "bits": 8,
725
+ "group_size": 64
726
+ },
727
+ "language_model.model.layers.25.mlp.shared_expert_gate": {
728
+ "bits": 8,
729
+ "group_size": 64
730
+ },
731
+ "language_model.model.layers.25.mlp.shared_expert.up_proj": {
732
+ "bits": 8,
733
+ "group_size": 64
734
+ },
735
+ "language_model.model.layers.25.mlp.shared_expert.down_proj": {
736
+ "bits": 8,
737
+ "group_size": 64
738
+ },
739
+ "language_model.model.layers.25.mlp.shared_expert.gate_proj": {
740
+ "bits": 8,
741
+ "group_size": 64
742
+ },
743
+ "language_model.model.layers.25.mlp.switch_mlp.down_proj": {
744
+ "bits": 4,
745
+ "group_size": 64
746
+ },
747
+ "language_model.model.layers.25.mlp.switch_mlp.up_proj": {
748
+ "bits": 4,
749
+ "group_size": 64
750
+ },
751
+ "language_model.model.layers.25.mlp.switch_mlp.gate_proj": {
752
+ "bits": 4,
753
+ "group_size": 64
754
+ },
755
+ "language_model.model.layers.25.mlp.gate": {
756
+ "bits": 8,
757
+ "group_size": 64
758
+ },
759
+ "language_model.model.layers.25.linear_attn.out_proj": {
760
+ "bits": 8,
761
+ "group_size": 64
762
+ },
763
+ "language_model.model.layers.25.linear_attn.in_proj_a": {
764
+ "bits": 8,
765
+ "group_size": 64
766
+ },
767
+ "language_model.model.layers.25.linear_attn.in_proj_b": {
768
+ "bits": 8,
769
+ "group_size": 64
770
+ },
771
+ "language_model.model.layers.25.linear_attn.in_proj_z": {
772
+ "bits": 8,
773
+ "group_size": 64
774
+ },
775
+ "language_model.model.layers.25.linear_attn.in_proj_qkv": {
776
+ "bits": 8,
777
+ "group_size": 64
778
+ },
779
+ "language_model.model.layers.24.mlp.shared_expert_gate": {
780
+ "bits": 8,
781
+ "group_size": 64
782
+ },
783
+ "language_model.model.layers.24.mlp.shared_expert.up_proj": {
784
+ "bits": 8,
785
+ "group_size": 64
786
+ },
787
+ "language_model.model.layers.24.mlp.shared_expert.down_proj": {
788
+ "bits": 8,
789
+ "group_size": 64
790
+ },
791
+ "language_model.model.layers.24.mlp.shared_expert.gate_proj": {
792
+ "bits": 8,
793
+ "group_size": 64
794
+ },
795
+ "language_model.model.layers.24.mlp.switch_mlp.down_proj": {
796
+ "bits": 4,
797
+ "group_size": 64
798
+ },
799
+ "language_model.model.layers.24.mlp.switch_mlp.up_proj": {
800
+ "bits": 4,
801
+ "group_size": 64
802
+ },
803
+ "language_model.model.layers.24.mlp.switch_mlp.gate_proj": {
804
+ "bits": 4,
805
+ "group_size": 64
806
+ },
807
+ "language_model.model.layers.24.mlp.gate": {
808
+ "bits": 8,
809
+ "group_size": 64
810
+ },
811
+ "language_model.model.layers.24.linear_attn.out_proj": {
812
+ "bits": 8,
813
+ "group_size": 64
814
+ },
815
+ "language_model.model.layers.24.linear_attn.in_proj_a": {
816
+ "bits": 8,
817
+ "group_size": 64
818
+ },
819
+ "language_model.model.layers.24.linear_attn.in_proj_b": {
820
+ "bits": 8,
821
+ "group_size": 64
822
+ },
823
+ "language_model.model.layers.24.linear_attn.in_proj_z": {
824
+ "bits": 8,
825
+ "group_size": 64
826
+ },
827
+ "language_model.model.layers.24.linear_attn.in_proj_qkv": {
828
+ "bits": 8,
829
+ "group_size": 64
830
+ },
831
+ "language_model.model.layers.23.mlp.shared_expert_gate": {
832
+ "bits": 8,
833
+ "group_size": 64
834
+ },
835
+ "language_model.model.layers.23.mlp.shared_expert.up_proj": {
836
+ "bits": 8,
837
+ "group_size": 64
838
+ },
839
+ "language_model.model.layers.23.mlp.shared_expert.down_proj": {
840
+ "bits": 8,
841
+ "group_size": 64
842
+ },
843
+ "language_model.model.layers.23.mlp.shared_expert.gate_proj": {
844
+ "bits": 8,
845
+ "group_size": 64
846
+ },
847
+ "language_model.model.layers.23.mlp.switch_mlp.down_proj": {
848
+ "bits": 4,
849
+ "group_size": 64
850
+ },
851
+ "language_model.model.layers.23.mlp.switch_mlp.up_proj": {
852
+ "bits": 4,
853
+ "group_size": 64
854
+ },
855
+ "language_model.model.layers.23.mlp.switch_mlp.gate_proj": {
856
+ "bits": 4,
857
+ "group_size": 64
858
+ },
859
+ "language_model.model.layers.23.mlp.gate": {
860
+ "bits": 8,
861
+ "group_size": 64
862
+ },
863
+ "language_model.model.layers.23.self_attn.o_proj": {
864
+ "bits": 8,
865
+ "group_size": 64
866
+ },
867
+ "language_model.model.layers.23.self_attn.v_proj": {
868
+ "bits": 8,
869
+ "group_size": 64
870
+ },
871
+ "language_model.model.layers.23.self_attn.k_proj": {
872
+ "bits": 8,
873
+ "group_size": 64
874
+ },
875
+ "language_model.model.layers.23.self_attn.q_proj": {
876
+ "bits": 8,
877
+ "group_size": 64
878
+ },
879
+ "language_model.model.layers.22.mlp.shared_expert_gate": {
880
+ "bits": 8,
881
+ "group_size": 64
882
+ },
883
+ "language_model.model.layers.22.mlp.shared_expert.up_proj": {
884
+ "bits": 8,
885
+ "group_size": 64
886
+ },
887
+ "language_model.model.layers.22.mlp.shared_expert.down_proj": {
888
+ "bits": 8,
889
+ "group_size": 64
890
+ },
891
+ "language_model.model.layers.22.mlp.shared_expert.gate_proj": {
892
+ "bits": 8,
893
+ "group_size": 64
894
+ },
895
+ "language_model.model.layers.22.mlp.switch_mlp.down_proj": {
896
+ "bits": 4,
897
+ "group_size": 64
898
+ },
899
+ "language_model.model.layers.22.mlp.switch_mlp.up_proj": {
900
+ "bits": 4,
901
+ "group_size": 64
902
+ },
903
+ "language_model.model.layers.22.mlp.switch_mlp.gate_proj": {
904
+ "bits": 4,
905
+ "group_size": 64
906
+ },
907
+ "language_model.model.layers.22.mlp.gate": {
908
+ "bits": 8,
909
+ "group_size": 64
910
+ },
911
+ "language_model.model.layers.22.linear_attn.out_proj": {
912
+ "bits": 8,
913
+ "group_size": 64
914
+ },
915
+ "language_model.model.layers.22.linear_attn.in_proj_a": {
916
+ "bits": 8,
917
+ "group_size": 64
918
+ },
919
+ "language_model.model.layers.22.linear_attn.in_proj_b": {
920
+ "bits": 8,
921
+ "group_size": 64
922
+ },
923
+ "language_model.model.layers.22.linear_attn.in_proj_z": {
924
+ "bits": 8,
925
+ "group_size": 64
926
+ },
927
+ "language_model.model.layers.22.linear_attn.in_proj_qkv": {
928
+ "bits": 8,
929
+ "group_size": 64
930
+ },
931
+ "language_model.model.layers.21.mlp.shared_expert_gate": {
932
+ "bits": 8,
933
+ "group_size": 64
934
+ },
935
+ "language_model.model.layers.21.mlp.shared_expert.up_proj": {
936
+ "bits": 8,
937
+ "group_size": 64
938
+ },
939
+ "language_model.model.layers.21.mlp.shared_expert.down_proj": {
940
+ "bits": 8,
941
+ "group_size": 64
942
+ },
943
+ "language_model.model.layers.21.mlp.shared_expert.gate_proj": {
944
+ "bits": 8,
945
+ "group_size": 64
946
+ },
947
+ "language_model.model.layers.21.mlp.switch_mlp.down_proj": {
948
+ "bits": 4,
949
+ "group_size": 64
950
+ },
951
+ "language_model.model.layers.21.mlp.switch_mlp.up_proj": {
952
+ "bits": 4,
953
+ "group_size": 64
954
+ },
955
+ "language_model.model.layers.21.mlp.switch_mlp.gate_proj": {
956
+ "bits": 4,
957
+ "group_size": 64
958
+ },
959
+ "language_model.model.layers.21.mlp.gate": {
960
+ "bits": 8,
961
+ "group_size": 64
962
+ },
963
+ "language_model.model.layers.21.linear_attn.out_proj": {
964
+ "bits": 8,
965
+ "group_size": 64
966
+ },
967
+ "language_model.model.layers.21.linear_attn.in_proj_a": {
968
+ "bits": 8,
969
+ "group_size": 64
970
+ },
971
+ "language_model.model.layers.21.linear_attn.in_proj_b": {
972
+ "bits": 8,
973
+ "group_size": 64
974
+ },
975
+ "language_model.model.layers.21.linear_attn.in_proj_z": {
976
+ "bits": 8,
977
+ "group_size": 64
978
+ },
979
+ "language_model.model.layers.21.linear_attn.in_proj_qkv": {
980
+ "bits": 8,
981
+ "group_size": 64
982
+ },
983
+ "language_model.model.layers.20.mlp.shared_expert_gate": {
984
+ "bits": 8,
985
+ "group_size": 64
986
+ },
987
+ "language_model.model.layers.20.mlp.shared_expert.up_proj": {
988
+ "bits": 8,
989
+ "group_size": 64
990
+ },
991
+ "language_model.model.layers.20.mlp.shared_expert.down_proj": {
992
+ "bits": 8,
993
+ "group_size": 64
994
+ },
995
+ "language_model.model.layers.20.mlp.shared_expert.gate_proj": {
996
+ "bits": 8,
997
+ "group_size": 64
998
+ },
999
+ "language_model.model.layers.20.mlp.switch_mlp.down_proj": {
1000
+ "bits": 4,
1001
+ "group_size": 64
1002
+ },
1003
+ "language_model.model.layers.20.mlp.switch_mlp.up_proj": {
1004
+ "bits": 4,
1005
+ "group_size": 64
1006
+ },
1007
+ "language_model.model.layers.20.mlp.switch_mlp.gate_proj": {
1008
+ "bits": 4,
1009
+ "group_size": 64
1010
+ },
1011
+ "language_model.model.layers.20.mlp.gate": {
1012
+ "bits": 8,
1013
+ "group_size": 64
1014
+ },
1015
+ "language_model.model.layers.20.linear_attn.out_proj": {
1016
+ "bits": 8,
1017
+ "group_size": 64
1018
+ },
1019
+ "language_model.model.layers.20.linear_attn.in_proj_a": {
1020
+ "bits": 8,
1021
+ "group_size": 64
1022
+ },
1023
+ "language_model.model.layers.20.linear_attn.in_proj_b": {
1024
+ "bits": 8,
1025
+ "group_size": 64
1026
+ },
1027
+ "language_model.model.layers.20.linear_attn.in_proj_z": {
1028
+ "bits": 8,
1029
+ "group_size": 64
1030
+ },
1031
+ "language_model.model.layers.20.linear_attn.in_proj_qkv": {
1032
+ "bits": 8,
1033
+ "group_size": 64
1034
+ },
1035
+ "language_model.model.layers.19.mlp.shared_expert_gate": {
1036
+ "bits": 8,
1037
+ "group_size": 64
1038
+ },
1039
+ "language_model.model.layers.19.mlp.shared_expert.up_proj": {
1040
+ "bits": 8,
1041
+ "group_size": 64
1042
+ },
1043
+ "language_model.model.layers.19.mlp.shared_expert.down_proj": {
1044
+ "bits": 8,
1045
+ "group_size": 64
1046
+ },
1047
+ "language_model.model.layers.19.mlp.shared_expert.gate_proj": {
1048
+ "bits": 8,
1049
+ "group_size": 64
1050
+ },
1051
+ "language_model.model.layers.19.mlp.switch_mlp.down_proj": {
1052
+ "bits": 4,
1053
+ "group_size": 64
1054
+ },
1055
+ "language_model.model.layers.19.mlp.switch_mlp.up_proj": {
1056
+ "bits": 4,
1057
+ "group_size": 64
1058
+ },
1059
+ "language_model.model.layers.19.mlp.switch_mlp.gate_proj": {
1060
+ "bits": 4,
1061
+ "group_size": 64
1062
+ },
1063
+ "language_model.model.layers.19.mlp.gate": {
1064
+ "bits": 8,
1065
+ "group_size": 64
1066
+ },
1067
+ "language_model.model.layers.19.self_attn.o_proj": {
1068
+ "bits": 8,
1069
+ "group_size": 64
1070
+ },
1071
+ "language_model.model.layers.19.self_attn.v_proj": {
1072
+ "bits": 8,
1073
+ "group_size": 64
1074
+ },
1075
+ "language_model.model.layers.19.self_attn.k_proj": {
1076
+ "bits": 8,
1077
+ "group_size": 64
1078
+ },
1079
+ "language_model.model.layers.19.self_attn.q_proj": {
1080
+ "bits": 8,
1081
+ "group_size": 64
1082
+ },
1083
+ "language_model.model.layers.18.mlp.shared_expert_gate": {
1084
+ "bits": 8,
1085
+ "group_size": 64
1086
+ },
1087
+ "language_model.model.layers.18.mlp.shared_expert.up_proj": {
1088
+ "bits": 8,
1089
+ "group_size": 64
1090
+ },
1091
+ "language_model.model.layers.18.mlp.shared_expert.down_proj": {
1092
+ "bits": 8,
1093
+ "group_size": 64
1094
+ },
1095
+ "language_model.model.layers.18.mlp.shared_expert.gate_proj": {
1096
+ "bits": 8,
1097
+ "group_size": 64
1098
+ },
1099
+ "language_model.model.layers.18.mlp.switch_mlp.down_proj": {
1100
+ "bits": 4,
1101
+ "group_size": 64
1102
+ },
1103
+ "language_model.model.layers.18.mlp.switch_mlp.up_proj": {
1104
+ "bits": 4,
1105
+ "group_size": 64
1106
+ },
1107
+ "language_model.model.layers.18.mlp.switch_mlp.gate_proj": {
1108
+ "bits": 4,
1109
+ "group_size": 64
1110
+ },
1111
+ "language_model.model.layers.18.mlp.gate": {
1112
+ "bits": 8,
1113
+ "group_size": 64
1114
+ },
1115
+ "language_model.model.layers.18.linear_attn.out_proj": {
1116
+ "bits": 8,
1117
+ "group_size": 64
1118
+ },
1119
+ "language_model.model.layers.18.linear_attn.in_proj_a": {
1120
+ "bits": 8,
1121
+ "group_size": 64
1122
+ },
1123
+ "language_model.model.layers.18.linear_attn.in_proj_b": {
1124
+ "bits": 8,
1125
+ "group_size": 64
1126
+ },
1127
+ "language_model.model.layers.18.linear_attn.in_proj_z": {
1128
+ "bits": 8,
1129
+ "group_size": 64
1130
+ },
1131
+ "language_model.model.layers.18.linear_attn.in_proj_qkv": {
1132
+ "bits": 8,
1133
+ "group_size": 64
1134
+ },
1135
+ "language_model.model.layers.17.mlp.shared_expert_gate": {
1136
+ "bits": 8,
1137
+ "group_size": 64
1138
+ },
1139
+ "language_model.model.layers.17.mlp.shared_expert.up_proj": {
1140
+ "bits": 8,
1141
+ "group_size": 64
1142
+ },
1143
+ "language_model.model.layers.17.mlp.shared_expert.down_proj": {
1144
+ "bits": 8,
1145
+ "group_size": 64
1146
+ },
1147
+ "language_model.model.layers.17.mlp.shared_expert.gate_proj": {
1148
+ "bits": 8,
1149
+ "group_size": 64
1150
+ },
1151
+ "language_model.model.layers.17.mlp.switch_mlp.down_proj": {
1152
+ "bits": 4,
1153
+ "group_size": 64
1154
+ },
1155
+ "language_model.model.layers.17.mlp.switch_mlp.up_proj": {
1156
+ "bits": 4,
1157
+ "group_size": 64
1158
+ },
1159
+ "language_model.model.layers.17.mlp.switch_mlp.gate_proj": {
1160
+ "bits": 4,
1161
+ "group_size": 64
1162
+ },
1163
+ "language_model.model.layers.17.mlp.gate": {
1164
+ "bits": 8,
1165
+ "group_size": 64
1166
+ },
1167
+ "language_model.model.layers.17.linear_attn.out_proj": {
1168
+ "bits": 8,
1169
+ "group_size": 64
1170
+ },
1171
+ "language_model.model.layers.17.linear_attn.in_proj_a": {
1172
+ "bits": 8,
1173
+ "group_size": 64
1174
+ },
1175
+ "language_model.model.layers.17.linear_attn.in_proj_b": {
1176
+ "bits": 8,
1177
+ "group_size": 64
1178
+ },
1179
+ "language_model.model.layers.17.linear_attn.in_proj_z": {
1180
+ "bits": 8,
1181
+ "group_size": 64
1182
+ },
1183
+ "language_model.model.layers.17.linear_attn.in_proj_qkv": {
1184
+ "bits": 8,
1185
+ "group_size": 64
1186
+ },
1187
+ "language_model.model.layers.16.mlp.shared_expert_gate": {
1188
+ "bits": 8,
1189
+ "group_size": 64
1190
+ },
1191
+ "language_model.model.layers.16.mlp.shared_expert.up_proj": {
1192
+ "bits": 8,
1193
+ "group_size": 64
1194
+ },
1195
+ "language_model.model.layers.16.mlp.shared_expert.down_proj": {
1196
+ "bits": 8,
1197
+ "group_size": 64
1198
+ },
1199
+ "language_model.model.layers.16.mlp.shared_expert.gate_proj": {
1200
+ "bits": 8,
1201
+ "group_size": 64
1202
+ },
1203
+ "language_model.model.layers.16.mlp.switch_mlp.down_proj": {
1204
+ "bits": 4,
1205
+ "group_size": 64
1206
+ },
1207
+ "language_model.model.layers.16.mlp.switch_mlp.up_proj": {
1208
+ "bits": 4,
1209
+ "group_size": 64
1210
+ },
1211
+ "language_model.model.layers.16.mlp.switch_mlp.gate_proj": {
1212
+ "bits": 4,
1213
+ "group_size": 64
1214
+ },
1215
+ "language_model.model.layers.16.mlp.gate": {
1216
+ "bits": 8,
1217
+ "group_size": 64
1218
+ },
1219
+ "language_model.model.layers.16.linear_attn.out_proj": {
1220
+ "bits": 8,
1221
+ "group_size": 64
1222
+ },
1223
+ "language_model.model.layers.16.linear_attn.in_proj_a": {
1224
+ "bits": 8,
1225
+ "group_size": 64
1226
+ },
1227
+ "language_model.model.layers.16.linear_attn.in_proj_b": {
1228
+ "bits": 8,
1229
+ "group_size": 64
1230
+ },
1231
+ "language_model.model.layers.16.linear_attn.in_proj_z": {
1232
+ "bits": 8,
1233
+ "group_size": 64
1234
+ },
1235
+ "language_model.model.layers.16.linear_attn.in_proj_qkv": {
1236
+ "bits": 8,
1237
+ "group_size": 64
1238
+ },
1239
+ "language_model.model.layers.15.mlp.shared_expert_gate": {
1240
+ "bits": 8,
1241
+ "group_size": 64
1242
+ },
1243
+ "language_model.model.layers.15.mlp.shared_expert.up_proj": {
1244
+ "bits": 8,
1245
+ "group_size": 64
1246
+ },
1247
+ "language_model.model.layers.15.mlp.shared_expert.down_proj": {
1248
+ "bits": 8,
1249
+ "group_size": 64
1250
+ },
1251
+ "language_model.model.layers.15.mlp.shared_expert.gate_proj": {
1252
+ "bits": 8,
1253
+ "group_size": 64
1254
+ },
1255
+ "language_model.model.layers.15.mlp.switch_mlp.down_proj": {
1256
+ "bits": 4,
1257
+ "group_size": 64
1258
+ },
1259
+ "language_model.model.layers.15.mlp.switch_mlp.up_proj": {
1260
+ "bits": 4,
1261
+ "group_size": 64
1262
+ },
1263
+ "language_model.model.layers.15.mlp.switch_mlp.gate_proj": {
1264
+ "bits": 4,
1265
+ "group_size": 64
1266
+ },
1267
+ "language_model.model.layers.15.mlp.gate": {
1268
+ "bits": 8,
1269
+ "group_size": 64
1270
+ },
1271
+ "language_model.model.layers.15.self_attn.o_proj": {
1272
+ "bits": 8,
1273
+ "group_size": 64
1274
+ },
1275
+ "language_model.model.layers.15.self_attn.v_proj": {
1276
+ "bits": 8,
1277
+ "group_size": 64
1278
+ },
1279
+ "language_model.model.layers.15.self_attn.k_proj": {
1280
+ "bits": 8,
1281
+ "group_size": 64
1282
+ },
1283
+ "language_model.model.layers.15.self_attn.q_proj": {
1284
+ "bits": 8,
1285
+ "group_size": 64
1286
+ },
1287
+ "language_model.model.layers.14.mlp.shared_expert_gate": {
1288
+ "bits": 8,
1289
+ "group_size": 64
1290
+ },
1291
+ "language_model.model.layers.14.mlp.shared_expert.up_proj": {
1292
+ "bits": 8,
1293
+ "group_size": 64
1294
+ },
1295
+ "language_model.model.layers.14.mlp.shared_expert.down_proj": {
1296
+ "bits": 8,
1297
+ "group_size": 64
1298
+ },
1299
+ "language_model.model.layers.14.mlp.shared_expert.gate_proj": {
1300
+ "bits": 8,
1301
+ "group_size": 64
1302
+ },
1303
+ "language_model.model.layers.14.mlp.switch_mlp.down_proj": {
1304
+ "bits": 4,
1305
+ "group_size": 64
1306
+ },
1307
+ "language_model.model.layers.14.mlp.switch_mlp.up_proj": {
1308
+ "bits": 4,
1309
+ "group_size": 64
1310
+ },
1311
+ "language_model.model.layers.14.mlp.switch_mlp.gate_proj": {
1312
+ "bits": 4,
1313
+ "group_size": 64
1314
+ },
1315
+ "language_model.model.layers.14.mlp.gate": {
1316
+ "bits": 8,
1317
+ "group_size": 64
1318
+ },
1319
+ "language_model.model.layers.14.linear_attn.out_proj": {
1320
+ "bits": 8,
1321
+ "group_size": 64
1322
+ },
1323
+ "language_model.model.layers.14.linear_attn.in_proj_a": {
1324
+ "bits": 8,
1325
+ "group_size": 64
1326
+ },
1327
+ "language_model.model.layers.14.linear_attn.in_proj_b": {
1328
+ "bits": 8,
1329
+ "group_size": 64
1330
+ },
1331
+ "language_model.model.layers.14.linear_attn.in_proj_z": {
1332
+ "bits": 8,
1333
+ "group_size": 64
1334
+ },
1335
+ "language_model.model.layers.14.linear_attn.in_proj_qkv": {
1336
+ "bits": 8,
1337
+ "group_size": 64
1338
+ },
1339
+ "language_model.model.layers.13.mlp.shared_expert_gate": {
1340
+ "bits": 8,
1341
+ "group_size": 64
1342
+ },
1343
+ "language_model.model.layers.13.mlp.shared_expert.up_proj": {
1344
+ "bits": 8,
1345
+ "group_size": 64
1346
+ },
1347
+ "language_model.model.layers.13.mlp.shared_expert.down_proj": {
1348
+ "bits": 8,
1349
+ "group_size": 64
1350
+ },
1351
+ "language_model.model.layers.13.mlp.shared_expert.gate_proj": {
1352
+ "bits": 8,
1353
+ "group_size": 64
1354
+ },
1355
+ "language_model.model.layers.13.mlp.switch_mlp.down_proj": {
1356
+ "bits": 4,
1357
+ "group_size": 64
1358
+ },
1359
+ "language_model.model.layers.13.mlp.switch_mlp.up_proj": {
1360
+ "bits": 4,
1361
+ "group_size": 64
1362
+ },
1363
+ "language_model.model.layers.13.mlp.switch_mlp.gate_proj": {
1364
+ "bits": 4,
1365
+ "group_size": 64
1366
+ },
1367
+ "language_model.model.layers.13.mlp.gate": {
1368
+ "bits": 8,
1369
+ "group_size": 64
1370
+ },
1371
+ "language_model.model.layers.13.linear_attn.out_proj": {
1372
+ "bits": 8,
1373
+ "group_size": 64
1374
+ },
1375
+ "language_model.model.layers.13.linear_attn.in_proj_a": {
1376
+ "bits": 8,
1377
+ "group_size": 64
1378
+ },
1379
+ "language_model.model.layers.13.linear_attn.in_proj_b": {
1380
+ "bits": 8,
1381
+ "group_size": 64
1382
+ },
1383
+ "language_model.model.layers.13.linear_attn.in_proj_z": {
1384
+ "bits": 8,
1385
+ "group_size": 64
1386
+ },
1387
+ "language_model.model.layers.13.linear_attn.in_proj_qkv": {
1388
+ "bits": 8,
1389
+ "group_size": 64
1390
+ },
1391
+ "language_model.model.layers.12.mlp.shared_expert_gate": {
1392
+ "bits": 8,
1393
+ "group_size": 64
1394
+ },
1395
+ "language_model.model.layers.12.mlp.shared_expert.up_proj": {
1396
+ "bits": 8,
1397
+ "group_size": 64
1398
+ },
1399
+ "language_model.model.layers.12.mlp.shared_expert.down_proj": {
1400
+ "bits": 8,
1401
+ "group_size": 64
1402
+ },
1403
+ "language_model.model.layers.12.mlp.shared_expert.gate_proj": {
1404
+ "bits": 8,
1405
+ "group_size": 64
1406
+ },
1407
+ "language_model.model.layers.12.mlp.switch_mlp.down_proj": {
1408
+ "bits": 4,
1409
+ "group_size": 64
1410
+ },
1411
+ "language_model.model.layers.12.mlp.switch_mlp.up_proj": {
1412
+ "bits": 4,
1413
+ "group_size": 64
1414
+ },
1415
+ "language_model.model.layers.12.mlp.switch_mlp.gate_proj": {
1416
+ "bits": 4,
1417
+ "group_size": 64
1418
+ },
1419
+ "language_model.model.layers.12.mlp.gate": {
1420
+ "bits": 8,
1421
+ "group_size": 64
1422
+ },
1423
+ "language_model.model.layers.12.linear_attn.out_proj": {
1424
+ "bits": 8,
1425
+ "group_size": 64
1426
+ },
1427
+ "language_model.model.layers.12.linear_attn.in_proj_a": {
1428
+ "bits": 8,
1429
+ "group_size": 64
1430
+ },
1431
+ "language_model.model.layers.12.linear_attn.in_proj_b": {
1432
+ "bits": 8,
1433
+ "group_size": 64
1434
+ },
1435
+ "language_model.model.layers.12.linear_attn.in_proj_z": {
1436
+ "bits": 8,
1437
+ "group_size": 64
1438
+ },
1439
+ "language_model.model.layers.12.linear_attn.in_proj_qkv": {
1440
+ "bits": 8,
1441
+ "group_size": 64
1442
+ },
1443
+ "language_model.model.layers.11.mlp.shared_expert_gate": {
1444
+ "bits": 8,
1445
+ "group_size": 64
1446
+ },
1447
+ "language_model.model.layers.11.mlp.shared_expert.up_proj": {
1448
+ "bits": 8,
1449
+ "group_size": 64
1450
+ },
1451
+ "language_model.model.layers.11.mlp.shared_expert.down_proj": {
1452
+ "bits": 8,
1453
+ "group_size": 64
1454
+ },
1455
+ "language_model.model.layers.11.mlp.shared_expert.gate_proj": {
1456
+ "bits": 8,
1457
+ "group_size": 64
1458
+ },
1459
+ "language_model.model.layers.11.mlp.switch_mlp.down_proj": {
1460
+ "bits": 4,
1461
+ "group_size": 64
1462
+ },
1463
+ "language_model.model.layers.11.mlp.switch_mlp.up_proj": {
1464
+ "bits": 4,
1465
+ "group_size": 64
1466
+ },
1467
+ "language_model.model.layers.11.mlp.switch_mlp.gate_proj": {
1468
+ "bits": 4,
1469
+ "group_size": 64
1470
+ },
1471
+ "language_model.model.layers.11.mlp.gate": {
1472
+ "bits": 8,
1473
+ "group_size": 64
1474
+ },
1475
+ "language_model.model.layers.11.self_attn.o_proj": {
1476
+ "bits": 8,
1477
+ "group_size": 64
1478
+ },
1479
+ "language_model.model.layers.11.self_attn.v_proj": {
1480
+ "bits": 8,
1481
+ "group_size": 64
1482
+ },
1483
+ "language_model.model.layers.11.self_attn.k_proj": {
1484
+ "bits": 8,
1485
+ "group_size": 64
1486
+ },
1487
+ "language_model.model.layers.11.self_attn.q_proj": {
1488
+ "bits": 8,
1489
+ "group_size": 64
1490
+ },
1491
+ "language_model.model.layers.10.mlp.shared_expert_gate": {
1492
+ "bits": 8,
1493
+ "group_size": 64
1494
+ },
1495
+ "language_model.model.layers.10.mlp.shared_expert.up_proj": {
1496
+ "bits": 8,
1497
+ "group_size": 64
1498
+ },
1499
+ "language_model.model.layers.10.mlp.shared_expert.down_proj": {
1500
+ "bits": 8,
1501
+ "group_size": 64
1502
+ },
1503
+ "language_model.model.layers.10.mlp.shared_expert.gate_proj": {
1504
+ "bits": 8,
1505
+ "group_size": 64
1506
+ },
1507
+ "language_model.model.layers.10.mlp.switch_mlp.down_proj": {
1508
+ "bits": 4,
1509
+ "group_size": 64
1510
+ },
1511
+ "language_model.model.layers.10.mlp.switch_mlp.up_proj": {
1512
+ "bits": 4,
1513
+ "group_size": 64
1514
+ },
1515
+ "language_model.model.layers.10.mlp.switch_mlp.gate_proj": {
1516
+ "bits": 4,
1517
+ "group_size": 64
1518
+ },
1519
+ "language_model.model.layers.10.mlp.gate": {
1520
+ "bits": 8,
1521
+ "group_size": 64
1522
+ },
1523
+ "language_model.model.layers.10.linear_attn.out_proj": {
1524
+ "bits": 8,
1525
+ "group_size": 64
1526
+ },
1527
+ "language_model.model.layers.10.linear_attn.in_proj_a": {
1528
+ "bits": 8,
1529
+ "group_size": 64
1530
+ },
1531
+ "language_model.model.layers.10.linear_attn.in_proj_b": {
1532
+ "bits": 8,
1533
+ "group_size": 64
1534
+ },
1535
+ "language_model.model.layers.10.linear_attn.in_proj_z": {
1536
+ "bits": 8,
1537
+ "group_size": 64
1538
+ },
1539
+ "language_model.model.layers.10.linear_attn.in_proj_qkv": {
1540
+ "bits": 8,
1541
+ "group_size": 64
1542
+ },
1543
+ "language_model.model.layers.9.mlp.shared_expert_gate": {
1544
+ "bits": 8,
1545
+ "group_size": 64
1546
+ },
1547
+ "language_model.model.layers.9.mlp.shared_expert.up_proj": {
1548
+ "bits": 8,
1549
+ "group_size": 64
1550
+ },
1551
+ "language_model.model.layers.9.mlp.shared_expert.down_proj": {
1552
+ "bits": 8,
1553
+ "group_size": 64
1554
+ },
1555
+ "language_model.model.layers.9.mlp.shared_expert.gate_proj": {
1556
+ "bits": 8,
1557
+ "group_size": 64
1558
+ },
1559
+ "language_model.model.layers.9.mlp.switch_mlp.down_proj": {
1560
+ "bits": 4,
1561
+ "group_size": 64
1562
+ },
1563
+ "language_model.model.layers.9.mlp.switch_mlp.up_proj": {
1564
+ "bits": 4,
1565
+ "group_size": 64
1566
+ },
1567
+ "language_model.model.layers.9.mlp.switch_mlp.gate_proj": {
1568
+ "bits": 4,
1569
+ "group_size": 64
1570
+ },
1571
+ "language_model.model.layers.9.mlp.gate": {
1572
+ "bits": 8,
1573
+ "group_size": 64
1574
+ },
1575
+ "language_model.model.layers.9.linear_attn.out_proj": {
1576
+ "bits": 8,
1577
+ "group_size": 64
1578
+ },
1579
+ "language_model.model.layers.9.linear_attn.in_proj_a": {
1580
+ "bits": 8,
1581
+ "group_size": 64
1582
+ },
1583
+ "language_model.model.layers.9.linear_attn.in_proj_b": {
1584
+ "bits": 8,
1585
+ "group_size": 64
1586
+ },
1587
+ "language_model.model.layers.9.linear_attn.in_proj_z": {
1588
+ "bits": 8,
1589
+ "group_size": 64
1590
+ },
1591
+ "language_model.model.layers.9.linear_attn.in_proj_qkv": {
1592
+ "bits": 8,
1593
+ "group_size": 64
1594
+ },
1595
+ "language_model.model.layers.8.mlp.shared_expert_gate": {
1596
+ "bits": 8,
1597
+ "group_size": 64
1598
+ },
1599
+ "language_model.model.layers.8.mlp.shared_expert.up_proj": {
1600
+ "bits": 8,
1601
+ "group_size": 64
1602
+ },
1603
+ "language_model.model.layers.8.mlp.shared_expert.down_proj": {
1604
+ "bits": 8,
1605
+ "group_size": 64
1606
+ },
1607
+ "language_model.model.layers.8.mlp.shared_expert.gate_proj": {
1608
+ "bits": 8,
1609
+ "group_size": 64
1610
+ },
1611
+ "language_model.model.layers.8.mlp.switch_mlp.down_proj": {
1612
+ "bits": 4,
1613
+ "group_size": 64
1614
+ },
1615
+ "language_model.model.layers.8.mlp.switch_mlp.up_proj": {
1616
+ "bits": 4,
1617
+ "group_size": 64
1618
+ },
1619
+ "language_model.model.layers.8.mlp.switch_mlp.gate_proj": {
1620
+ "bits": 4,
1621
+ "group_size": 64
1622
+ },
1623
+ "language_model.model.layers.8.mlp.gate": {
1624
+ "bits": 8,
1625
+ "group_size": 64
1626
+ },
1627
+ "language_model.model.layers.8.linear_attn.out_proj": {
1628
+ "bits": 8,
1629
+ "group_size": 64
1630
+ },
1631
+ "language_model.model.layers.8.linear_attn.in_proj_a": {
1632
+ "bits": 8,
1633
+ "group_size": 64
1634
+ },
1635
+ "language_model.model.layers.8.linear_attn.in_proj_b": {
1636
+ "bits": 8,
1637
+ "group_size": 64
1638
+ },
1639
+ "language_model.model.layers.8.linear_attn.in_proj_z": {
1640
+ "bits": 8,
1641
+ "group_size": 64
1642
+ },
1643
+ "language_model.model.layers.8.linear_attn.in_proj_qkv": {
1644
+ "bits": 8,
1645
+ "group_size": 64
1646
+ },
1647
+ "language_model.model.layers.7.mlp.shared_expert_gate": {
1648
+ "bits": 8,
1649
+ "group_size": 64
1650
+ },
1651
+ "language_model.model.layers.7.mlp.shared_expert.up_proj": {
1652
+ "bits": 8,
1653
+ "group_size": 64
1654
+ },
1655
+ "language_model.model.layers.7.mlp.shared_expert.down_proj": {
1656
+ "bits": 8,
1657
+ "group_size": 64
1658
+ },
1659
+ "language_model.model.layers.7.mlp.shared_expert.gate_proj": {
1660
+ "bits": 8,
1661
+ "group_size": 64
1662
+ },
1663
+ "language_model.model.layers.7.mlp.switch_mlp.down_proj": {
1664
+ "bits": 4,
1665
+ "group_size": 64
1666
+ },
1667
+ "language_model.model.layers.7.mlp.switch_mlp.up_proj": {
1668
+ "bits": 4,
1669
+ "group_size": 64
1670
+ },
1671
+ "language_model.model.layers.7.mlp.switch_mlp.gate_proj": {
1672
+ "bits": 4,
1673
+ "group_size": 64
1674
+ },
1675
+ "language_model.model.layers.7.mlp.gate": {
1676
+ "bits": 8,
1677
+ "group_size": 64
1678
+ },
1679
+ "language_model.model.layers.7.self_attn.o_proj": {
1680
+ "bits": 8,
1681
+ "group_size": 64
1682
+ },
1683
+ "language_model.model.layers.7.self_attn.v_proj": {
1684
+ "bits": 8,
1685
+ "group_size": 64
1686
+ },
1687
+ "language_model.model.layers.7.self_attn.k_proj": {
1688
+ "bits": 8,
1689
+ "group_size": 64
1690
+ },
1691
+ "language_model.model.layers.7.self_attn.q_proj": {
1692
+ "bits": 8,
1693
+ "group_size": 64
1694
+ },
1695
+ "language_model.model.layers.6.mlp.shared_expert_gate": {
1696
+ "bits": 8,
1697
+ "group_size": 64
1698
+ },
1699
+ "language_model.model.layers.6.mlp.shared_expert.up_proj": {
1700
+ "bits": 8,
1701
+ "group_size": 64
1702
+ },
1703
+ "language_model.model.layers.6.mlp.shared_expert.down_proj": {
1704
+ "bits": 8,
1705
+ "group_size": 64
1706
+ },
1707
+ "language_model.model.layers.6.mlp.shared_expert.gate_proj": {
1708
+ "bits": 8,
1709
+ "group_size": 64
1710
+ },
1711
+ "language_model.model.layers.6.mlp.switch_mlp.down_proj": {
1712
+ "bits": 4,
1713
+ "group_size": 64
1714
+ },
1715
+ "language_model.model.layers.6.mlp.switch_mlp.up_proj": {
1716
+ "bits": 4,
1717
+ "group_size": 64
1718
+ },
1719
+ "language_model.model.layers.6.mlp.switch_mlp.gate_proj": {
1720
+ "bits": 4,
1721
+ "group_size": 64
1722
+ },
1723
+ "language_model.model.layers.6.mlp.gate": {
1724
+ "bits": 8,
1725
+ "group_size": 64
1726
+ },
1727
+ "language_model.model.layers.6.linear_attn.out_proj": {
1728
+ "bits": 8,
1729
+ "group_size": 64
1730
+ },
1731
+ "language_model.model.layers.6.linear_attn.in_proj_a": {
1732
+ "bits": 8,
1733
+ "group_size": 64
1734
+ },
1735
+ "language_model.model.layers.6.linear_attn.in_proj_b": {
1736
+ "bits": 8,
1737
+ "group_size": 64
1738
+ },
1739
+ "language_model.model.layers.6.linear_attn.in_proj_z": {
1740
+ "bits": 8,
1741
+ "group_size": 64
1742
+ },
1743
+ "language_model.model.layers.6.linear_attn.in_proj_qkv": {
1744
+ "bits": 8,
1745
+ "group_size": 64
1746
+ },
1747
+ "language_model.model.layers.5.mlp.shared_expert_gate": {
1748
+ "bits": 8,
1749
+ "group_size": 64
1750
+ },
1751
+ "language_model.model.layers.5.mlp.shared_expert.up_proj": {
1752
+ "bits": 8,
1753
+ "group_size": 64
1754
+ },
1755
+ "language_model.model.layers.5.mlp.shared_expert.down_proj": {
1756
+ "bits": 8,
1757
+ "group_size": 64
1758
+ },
1759
+ "language_model.model.layers.5.mlp.shared_expert.gate_proj": {
1760
+ "bits": 8,
1761
+ "group_size": 64
1762
+ },
1763
+ "language_model.model.layers.5.mlp.switch_mlp.down_proj": {
1764
+ "bits": 4,
1765
+ "group_size": 64
1766
+ },
1767
+ "language_model.model.layers.5.mlp.switch_mlp.up_proj": {
1768
+ "bits": 4,
1769
+ "group_size": 64
1770
+ },
1771
+ "language_model.model.layers.5.mlp.switch_mlp.gate_proj": {
1772
+ "bits": 4,
1773
+ "group_size": 64
1774
+ },
1775
+ "language_model.model.layers.5.mlp.gate": {
1776
+ "bits": 8,
1777
+ "group_size": 64
1778
+ },
1779
+ "language_model.model.layers.5.linear_attn.out_proj": {
1780
+ "bits": 8,
1781
+ "group_size": 64
1782
+ },
1783
+ "language_model.model.layers.5.linear_attn.in_proj_a": {
1784
+ "bits": 8,
1785
+ "group_size": 64
1786
+ },
1787
+ "language_model.model.layers.5.linear_attn.in_proj_b": {
1788
+ "bits": 8,
1789
+ "group_size": 64
1790
+ },
1791
+ "language_model.model.layers.5.linear_attn.in_proj_z": {
1792
+ "bits": 8,
1793
+ "group_size": 64
1794
+ },
1795
+ "language_model.model.layers.5.linear_attn.in_proj_qkv": {
1796
+ "bits": 8,
1797
+ "group_size": 64
1798
+ },
1799
+ "language_model.model.layers.4.mlp.shared_expert_gate": {
1800
+ "bits": 8,
1801
+ "group_size": 64
1802
+ },
1803
+ "language_model.model.layers.4.mlp.shared_expert.up_proj": {
1804
+ "bits": 8,
1805
+ "group_size": 64
1806
+ },
1807
+ "language_model.model.layers.4.mlp.shared_expert.down_proj": {
1808
+ "bits": 8,
1809
+ "group_size": 64
1810
+ },
1811
+ "language_model.model.layers.4.mlp.shared_expert.gate_proj": {
1812
+ "bits": 8,
1813
+ "group_size": 64
1814
+ },
1815
+ "language_model.model.layers.4.mlp.switch_mlp.down_proj": {
1816
+ "bits": 4,
1817
+ "group_size": 64
1818
+ },
1819
+ "language_model.model.layers.4.mlp.switch_mlp.up_proj": {
1820
+ "bits": 4,
1821
+ "group_size": 64
1822
+ },
1823
+ "language_model.model.layers.4.mlp.switch_mlp.gate_proj": {
1824
+ "bits": 4,
1825
+ "group_size": 64
1826
+ },
1827
+ "language_model.model.layers.4.mlp.gate": {
1828
+ "bits": 8,
1829
+ "group_size": 64
1830
+ },
1831
+ "language_model.model.layers.4.linear_attn.out_proj": {
1832
+ "bits": 8,
1833
+ "group_size": 64
1834
+ },
1835
+ "language_model.model.layers.4.linear_attn.in_proj_a": {
1836
+ "bits": 8,
1837
+ "group_size": 64
1838
+ },
1839
+ "language_model.model.layers.4.linear_attn.in_proj_b": {
1840
+ "bits": 8,
1841
+ "group_size": 64
1842
+ },
1843
+ "language_model.model.layers.4.linear_attn.in_proj_z": {
1844
+ "bits": 8,
1845
+ "group_size": 64
1846
+ },
1847
+ "language_model.model.layers.4.linear_attn.in_proj_qkv": {
1848
+ "bits": 8,
1849
+ "group_size": 64
1850
+ },
1851
+ "language_model.model.layers.3.mlp.shared_expert_gate": {
1852
+ "bits": 8,
1853
+ "group_size": 64
1854
+ },
1855
+ "language_model.model.layers.3.mlp.shared_expert.up_proj": {
1856
+ "bits": 8,
1857
+ "group_size": 64
1858
+ },
1859
+ "language_model.model.layers.3.mlp.shared_expert.down_proj": {
1860
+ "bits": 8,
1861
+ "group_size": 64
1862
+ },
1863
+ "language_model.model.layers.3.mlp.shared_expert.gate_proj": {
1864
+ "bits": 8,
1865
+ "group_size": 64
1866
+ },
1867
+ "language_model.model.layers.3.mlp.switch_mlp.down_proj": {
1868
+ "bits": 4,
1869
+ "group_size": 64
1870
+ },
1871
+ "language_model.model.layers.3.mlp.switch_mlp.up_proj": {
1872
+ "bits": 4,
1873
+ "group_size": 64
1874
+ },
1875
+ "language_model.model.layers.3.mlp.switch_mlp.gate_proj": {
1876
+ "bits": 4,
1877
+ "group_size": 64
1878
+ },
1879
+ "language_model.model.layers.3.mlp.gate": {
1880
+ "bits": 8,
1881
+ "group_size": 64
1882
+ },
1883
+ "language_model.model.layers.3.self_attn.o_proj": {
1884
+ "bits": 8,
1885
+ "group_size": 64
1886
+ },
1887
+ "language_model.model.layers.3.self_attn.v_proj": {
1888
+ "bits": 8,
1889
+ "group_size": 64
1890
+ },
1891
+ "language_model.model.layers.3.self_attn.k_proj": {
1892
+ "bits": 8,
1893
+ "group_size": 64
1894
+ },
1895
+ "language_model.model.layers.3.self_attn.q_proj": {
1896
+ "bits": 8,
1897
+ "group_size": 64
1898
+ },
1899
+ "language_model.model.layers.2.mlp.shared_expert_gate": {
1900
+ "bits": 8,
1901
+ "group_size": 64
1902
+ },
1903
+ "language_model.model.layers.2.mlp.shared_expert.up_proj": {
1904
+ "bits": 8,
1905
+ "group_size": 64
1906
+ },
1907
+ "language_model.model.layers.2.mlp.shared_expert.down_proj": {
1908
+ "bits": 8,
1909
+ "group_size": 64
1910
+ },
1911
+ "language_model.model.layers.2.mlp.shared_expert.gate_proj": {
1912
+ "bits": 8,
1913
+ "group_size": 64
1914
+ },
1915
+ "language_model.model.layers.2.mlp.switch_mlp.down_proj": {
1916
+ "bits": 4,
1917
+ "group_size": 64
1918
+ },
1919
+ "language_model.model.layers.2.mlp.switch_mlp.up_proj": {
1920
+ "bits": 4,
1921
+ "group_size": 64
1922
+ },
1923
+ "language_model.model.layers.2.mlp.switch_mlp.gate_proj": {
1924
+ "bits": 4,
1925
+ "group_size": 64
1926
+ },
1927
+ "language_model.model.layers.2.mlp.gate": {
1928
+ "bits": 8,
1929
+ "group_size": 64
1930
+ },
1931
+ "language_model.model.layers.2.linear_attn.out_proj": {
1932
+ "bits": 8,
1933
+ "group_size": 64
1934
+ },
1935
+ "language_model.model.layers.2.linear_attn.in_proj_a": {
1936
+ "bits": 8,
1937
+ "group_size": 64
1938
+ },
1939
+ "language_model.model.layers.2.linear_attn.in_proj_b": {
1940
+ "bits": 8,
1941
+ "group_size": 64
1942
+ },
1943
+ "language_model.model.layers.2.linear_attn.in_proj_z": {
1944
+ "bits": 8,
1945
+ "group_size": 64
1946
+ },
1947
+ "language_model.model.layers.2.linear_attn.in_proj_qkv": {
1948
+ "bits": 8,
1949
+ "group_size": 64
1950
+ },
1951
+ "language_model.model.layers.1.mlp.shared_expert_gate": {
1952
+ "bits": 8,
1953
+ "group_size": 64
1954
+ },
1955
+ "language_model.model.layers.1.mlp.shared_expert.up_proj": {
1956
+ "bits": 8,
1957
+ "group_size": 64
1958
+ },
1959
+ "language_model.model.layers.1.mlp.shared_expert.down_proj": {
1960
+ "bits": 8,
1961
+ "group_size": 64
1962
+ },
1963
+ "language_model.model.layers.1.mlp.shared_expert.gate_proj": {
1964
+ "bits": 8,
1965
+ "group_size": 64
1966
+ },
1967
+ "language_model.model.layers.1.mlp.switch_mlp.down_proj": {
1968
+ "bits": 8,
1969
+ "group_size": 64
1970
+ },
1971
+ "language_model.model.layers.1.mlp.switch_mlp.up_proj": {
1972
+ "bits": 8,
1973
+ "group_size": 64
1974
+ },
1975
+ "language_model.model.layers.1.mlp.switch_mlp.gate_proj": {
1976
+ "bits": 8,
1977
+ "group_size": 64
1978
+ },
1979
+ "language_model.model.layers.1.mlp.gate": {
1980
+ "bits": 8,
1981
+ "group_size": 64
1982
+ },
1983
+ "language_model.model.layers.1.linear_attn.out_proj": {
1984
+ "bits": 8,
1985
+ "group_size": 64
1986
+ },
1987
+ "language_model.model.layers.1.linear_attn.in_proj_a": {
1988
+ "bits": 8,
1989
+ "group_size": 64
1990
+ },
1991
+ "language_model.model.layers.1.linear_attn.in_proj_b": {
1992
+ "bits": 8,
1993
+ "group_size": 64
1994
+ },
1995
+ "language_model.model.layers.1.linear_attn.in_proj_z": {
1996
+ "bits": 8,
1997
+ "group_size": 64
1998
+ },
1999
+ "language_model.model.layers.1.linear_attn.in_proj_qkv": {
2000
+ "bits": 8,
2001
+ "group_size": 64
2002
+ },
2003
+ "language_model.model.layers.0.mlp.shared_expert_gate": {
2004
+ "bits": 8,
2005
+ "group_size": 64
2006
+ },
2007
+ "language_model.model.layers.0.mlp.shared_expert.up_proj": {
2008
+ "bits": 8,
2009
+ "group_size": 64
2010
+ },
2011
+ "language_model.model.layers.0.mlp.shared_expert.down_proj": {
2012
+ "bits": 8,
2013
+ "group_size": 64
2014
+ },
2015
+ "language_model.model.layers.0.mlp.shared_expert.gate_proj": {
2016
+ "bits": 8,
2017
+ "group_size": 64
2018
+ },
2019
+ "language_model.model.layers.0.mlp.switch_mlp.down_proj": {
2020
+ "bits": 8,
2021
+ "group_size": 64
2022
+ },
2023
+ "language_model.model.layers.0.mlp.switch_mlp.up_proj": {
2024
+ "bits": 8,
2025
+ "group_size": 64
2026
+ },
2027
+ "language_model.model.layers.0.mlp.switch_mlp.gate_proj": {
2028
+ "bits": 8,
2029
+ "group_size": 64
2030
+ },
2031
+ "language_model.model.layers.0.mlp.gate": {
2032
+ "bits": 8,
2033
+ "group_size": 64
2034
+ },
2035
+ "language_model.model.layers.0.linear_attn.out_proj": {
2036
+ "bits": 8,
2037
+ "group_size": 64
2038
+ },
2039
+ "language_model.model.layers.0.linear_attn.in_proj_a": {
2040
+ "bits": 8,
2041
+ "group_size": 64
2042
+ },
2043
+ "language_model.model.layers.0.linear_attn.in_proj_b": {
2044
+ "bits": 8,
2045
+ "group_size": 64
2046
+ },
2047
+ "language_model.model.layers.0.linear_attn.in_proj_z": {
2048
+ "bits": 8,
2049
+ "group_size": 64
2050
+ },
2051
+ "language_model.model.layers.0.linear_attn.in_proj_qkv": {
2052
+ "bits": 8,
2053
+ "group_size": 64
2054
+ }
2055
+ }
2056
+ }
processor_config.json ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "image_processor": {
3
+ "do_convert_rgb": true,
4
+ "do_normalize": true,
5
+ "do_rescale": true,
6
+ "do_resize": true,
7
+ "image_mean": [
8
+ 0.5,
9
+ 0.5,
10
+ 0.5
11
+ ],
12
+ "image_processor_type": "Qwen2VLImageProcessor",
13
+ "image_std": [
14
+ 0.5,
15
+ 0.5,
16
+ 0.5
17
+ ],
18
+ "merge_size": 2,
19
+ "patch_size": 16,
20
+ "resample": 3,
21
+ "rescale_factor": 0.00392156862745098,
22
+ "size": {
23
+ "longest_edge": 16777216,
24
+ "shortest_edge": 65536
25
+ },
26
+ "temporal_patch_size": 2
27
+ },
28
+ "processor_class": "Qwen3VLProcessor",
29
+ "video_processor": {
30
+ "do_convert_rgb": true,
31
+ "do_normalize": true,
32
+ "do_rescale": true,
33
+ "do_resize": true,
34
+ "do_sample_frames": true,
35
+ "fps": 2,
36
+ "image_mean": [
37
+ 0.5,
38
+ 0.5,
39
+ 0.5
40
+ ],
41
+ "image_std": [
42
+ 0.5,
43
+ 0.5,
44
+ 0.5
45
+ ],
46
+ "max_frames": 768,
47
+ "merge_size": 2,
48
+ "min_frames": 4,
49
+ "patch_size": 16,
50
+ "resample": 3,
51
+ "rescale_factor": 0.00392156862745098,
52
+ "return_metadata": false,
53
+ "size": {
54
+ "longest_edge": 25165824,
55
+ "shortest_edge": 4096
56
+ },
57
+ "temporal_patch_size": 2,
58
+ "video_processor_type": "Qwen3VLVideoProcessor"
59
+ }
60
+ }
scripts/merge.py ADDED
@@ -0,0 +1,155 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """
3
+ Merge Qwen3.5-MoE vision_tower (dir B) into the finetuned
4
+ language-only quantized model (dir A).
5
+
6
+ Verified clean namespace split:
7
+ language_model.* -> LM (from A, keeps A's quantization map)
8
+ vision_tower.* -> vision (from B, unquantized bf16)
9
+
10
+ Config: LM + quantization from A (finetune), vision fields from B.
11
+ Chat template: from B by default (vision-aware).
12
+ """
13
+
14
+ import argparse
15
+ import json
16
+ import shutil
17
+ from pathlib import Path
18
+
19
+ import mlx.core as mx
20
+
21
+
22
+ def load_all(model_dir: Path) -> dict:
23
+ """Load every tensor from all safetensors shards, natively in MLX.
24
+
25
+ mx.load reads safetensors directly and preserves bfloat16 (unlike a
26
+ NumPy round-trip, which has no native bf16 dtype).
27
+ """
28
+ weights = {}
29
+ files = sorted(model_dir.glob("*.safetensors"))
30
+ if not files:
31
+ raise FileNotFoundError(f"No safetensors in {model_dir}")
32
+ for f in files:
33
+ weights.update(mx.load(str(f)))
34
+ return weights
35
+
36
+
37
+ def is_lm_key(k: str) -> bool:
38
+ return k.startswith("language_model.")
39
+
40
+
41
+ def main():
42
+ ap = argparse.ArgumentParser()
43
+ ap.add_argument("--finetune", "-a", required=True,
44
+ help="Dir A: finetuned language-only quantized model")
45
+ ap.add_argument("--base", "-b", required=True,
46
+ help="Dir B: base VLM with vision_tower")
47
+ ap.add_argument("--out", "-o", required=True,
48
+ help="Output directory for merged model")
49
+ ap.add_argument("--template-from", choices=["a", "b"], default="a",
50
+ help="Which model's chat template to use "
51
+ "(default b: vision-aware).")
52
+ args = ap.parse_args()
53
+
54
+ dir_a, dir_b, out = Path(args.finetune), Path(args.base), Path(args.out)
55
+ out.mkdir(parents=True, exist_ok=True)
56
+
57
+ print("Loading A (finetuned LM)…")
58
+ a = load_all(dir_a)
59
+ print("Loading B (base VLM)…")
60
+ b = load_all(dir_b)
61
+
62
+ lm_weights = {k: v for k, v in a.items() if is_lm_key(k)}
63
+ vision_weights = {k: v for k, v in b.items() if not is_lm_key(k)}
64
+
65
+ # Verify the vision split is what we expect (all vision_tower.*).
66
+ non_vision_b = [k for k in vision_weights
67
+ if not k.startswith("vision_tower.")]
68
+ if non_vision_b:
69
+ print("WARNING: B has non-LM keys that are NOT vision_tower.*:")
70
+ for k in non_vision_b[:20]:
71
+ print(" ", k)
72
+ print(" -> Decide whether these belong in the merge. "
73
+ "Currently they WILL be included.")
74
+
75
+ stray_a = [k for k in a if not is_lm_key(k)]
76
+ if stray_a:
77
+ print(f"NOTE: A has {len(stray_a)} non-LM keys (ignored). "
78
+ f"e.g. {stray_a[:5]}")
79
+
80
+ # Drop MTP tensors if present in B (A config sets mtp layers = 0).
81
+ mtp = [k for k in vision_weights if "mtp" in k.lower()]
82
+ for k in mtp:
83
+ vision_weights.pop(k)
84
+ if mtp:
85
+ print(f"Dropped {len(mtp)} MTP tensors from B.")
86
+
87
+ print(f"LM tensors (A): {len(lm_weights)}")
88
+ print(f"Vision tensors (B): {len(vision_weights)}")
89
+ if not vision_weights:
90
+ print("ERROR: no vision tensors. Aborting.")
91
+ return
92
+
93
+ merged = {**lm_weights, **vision_weights}
94
+ print(f"Total merged: {len(merged)}")
95
+
96
+ mx.save_safetensors(str(out / "model.safetensors"),
97
+ merged, metadata={"format": "mlx"})
98
+ print("Saved model.safetensors")
99
+
100
+ build_config(dir_a, dir_b, out)
101
+ copy_aux(dir_a, dir_b, out, template_from=args.template_from)
102
+
103
+ print("\nDone. Test:")
104
+ print(f" python -m mlx_vlm.generate --model {out} "
105
+ f"--prompt 'Hi' --max-tokens 30")
106
+ print(f" python -m mlx_vlm.generate --model {out} "
107
+ f"--image test.jpg --prompt 'Describe this.' --max-tokens 100")
108
+
109
+
110
+ def build_config(dir_a: Path, dir_b: Path, out: Path):
111
+ ca = json.loads((dir_a / "config.json").read_text())
112
+ cb = json.loads((dir_b / "config.json").read_text())
113
+
114
+ # A is authoritative for LM: it has the CORRECT quantization map
115
+ # (A and B were quantized differently) and text_config (mtp=0).
116
+ merged = dict(ca)
117
+
118
+ # Graft vision-specific fields from B.
119
+ for field in ("vision_config", "image_token_id", "video_token_id",
120
+ "vision_start_token_id", "vision_end_token_id"):
121
+ if field in cb:
122
+ merged[field] = cb[field]
123
+ print(f"config: added '{field}' from B")
124
+
125
+ (out / "config.json").write_text(json.dumps(merged, indent=2))
126
+ print("config: wrote merged config.json "
127
+ "(LM/quant from A, vision from B)")
128
+
129
+
130
+ def copy_aux(dir_a: Path, dir_b: Path, out: Path, template_from="a"):
131
+ tmpl_dir = dir_b if template_from == "b" else dir_a
132
+ print(f"aux: chat template / tokenizer_config from '{template_from}'")
133
+
134
+ # Vocab files: identical between A and B; take from A.
135
+ for n in ["tokenizer.json", "vocab.json", "merges.txt",
136
+ "special_tokens_map.json", "added_tokens.json",
137
+ "generation_config.json", "optiq_metadata.json"]:
138
+ if (dir_a / n).exists():
139
+ shutil.copy(dir_a / n, out / n)
140
+
141
+ # Template-bearing files: from chosen source (default B, vision-aware).
142
+ for n in ["tokenizer_config.json", "chat_template.jinja"]:
143
+ if (tmpl_dir / n).exists():
144
+ shutil.copy(tmpl_dir / n, out / n)
145
+
146
+ # Vision preprocessing: always from B.
147
+ for n in ["preprocessor_config.json", "processor_config.json",
148
+ "image_processor_config.json", "video_processor_config.json"]:
149
+ if (dir_b / n).exists():
150
+ shutil.copy(dir_b / n, out / n)
151
+ print(f"aux: copied {n} from B")
152
+
153
+
154
+ if __name__ == "__main__":
155
+ main()
scripts/split.py ADDED
@@ -0,0 +1,162 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """
3
+ Split a single MLX model.safetensors into sharded safetensors for
4
+ HuggingFace upload, generating model.safetensors.index.json.
5
+
6
+ Preserves dtypes (bf16, uint32 quant packs, etc.) since it loads and
7
+ saves natively with MLX.
8
+ """
9
+
10
+ import argparse
11
+ import json
12
+ import shutil
13
+ from pathlib import Path
14
+
15
+ import mlx.core as mx
16
+
17
+
18
+ def human_to_bytes(s: str) -> int:
19
+ s = s.strip().upper()
20
+ units = {"B": 1, "KB": 1024, "MB": 1024**2,
21
+ "GB": 1024**3, "TB": 1024**4}
22
+ for u in ("TB", "GB", "MB", "KB", "B"):
23
+ if s.endswith(u):
24
+ return int(float(s[:-len(u)]) * units[u])
25
+ return int(s) # raw byte count
26
+
27
+
28
+ def dtype_size(arr: mx.array) -> int:
29
+ """Bytes per element for the array's dtype."""
30
+ # mx.array.nbytes gives total bytes directly.
31
+ return arr.nbytes
32
+
33
+
34
+ def main():
35
+ ap = argparse.ArgumentParser()
36
+ ap.add_argument("--input", "-i", required=True,
37
+ help="Merged model dir OR path to a single "
38
+ "model.safetensors")
39
+ ap.add_argument("--out", "-o", required=True,
40
+ help="Output directory for sharded model")
41
+ ap.add_argument("--max-shard-size", default="5GB",
42
+ help="Max size per shard (e.g. 5GB, 4GB). Default 5GB.")
43
+ ap.add_argument("--copy-aux", action="store_true",
44
+ help="Copy config/tokenizer/etc. from input dir to out.")
45
+ args = ap.parse_args()
46
+
47
+ in_path = Path(args.input)
48
+ out = Path(args.out)
49
+ out.mkdir(parents=True, exist_ok=True)
50
+
51
+ # Resolve the single-file source and its parent dir (for aux files).
52
+ if in_path.is_dir():
53
+ src_file = in_path / "model.safetensors"
54
+ src_dir = in_path
55
+ if not src_file.exists():
56
+ # Maybe it's already sharded — bail with guidance.
57
+ shards = sorted(in_path.glob("model-*.safetensors"))
58
+ if shards:
59
+ print("Input dir already contains sharded safetensors:")
60
+ for s in shards:
61
+ print(" ", s.name)
62
+ print("This script expects a single model.safetensors. "
63
+ "Point --input at that file, or consolidate first.")
64
+ return
65
+ raise FileNotFoundError(f"No model.safetensors in {in_path}")
66
+ else:
67
+ src_file = in_path
68
+ src_dir = in_path.parent
69
+
70
+ max_bytes = human_to_bytes(args.max_shard_size)
71
+ print(f"Loading {src_file} …")
72
+ weights = mx.load(str(src_file))
73
+ print(f"Loaded {len(weights)} tensors.")
74
+
75
+ # Compute total size and per-tensor sizes.
76
+ sizes = {k: dtype_size(v) for k, v in weights.items()}
77
+ total = sum(sizes.values())
78
+ print(f"Total weight size: {total / 1024**3:.2f} GB")
79
+ print(f"Target max shard size: {max_bytes / 1024**3:.2f} GB")
80
+
81
+ # Greedy bin-packing into shards, preserving insertion order.
82
+ # (Keeps related tensors together reasonably well.)
83
+ shards = [] # list of dict[name -> array]
84
+ current = {}
85
+ current_size = 0
86
+
87
+ for name, arr in weights.items():
88
+ sz = sizes[name]
89
+ if sz > max_bytes:
90
+ # A single tensor exceeds the shard limit; it gets its own shard.
91
+ if current:
92
+ shards.append(current)
93
+ current, current_size = {}, 0
94
+ shards.append({name: arr})
95
+ print(f" NOTE: '{name}' ({sz/1024**3:.2f} GB) exceeds shard "
96
+ f"limit; placed in its own shard.")
97
+ continue
98
+ if current_size + sz > max_bytes and current:
99
+ shards.append(current)
100
+ current, current_size = {}, 0
101
+ current[name] = arr
102
+ current_size += sz
103
+ if current:
104
+ shards.append(current)
105
+
106
+ n = len(shards)
107
+ print(f"Splitting into {n} shard(s).")
108
+
109
+ if n == 1:
110
+ # Single shard: HF convention is just model.safetensors (no index).
111
+ out_file = out / "model.safetensors"
112
+ mx.save_safetensors(str(out_file), shards[0],
113
+ metadata={"format": "mlx"})
114
+ print(f"Wrote {out_file.name} (single shard, no index needed).")
115
+ else:
116
+ # Multi-shard: model-00001-of-000NN.safetensors + index.
117
+ weight_map = {}
118
+ for i, shard in enumerate(shards, start=1):
119
+ fname = f"model-{i:05d}-of-{n:05d}.safetensors"
120
+ mx.save_safetensors(str(out / fname), shard,
121
+ metadata={"format": "mlx"})
122
+ for k in shard:
123
+ weight_map[k] = fname
124
+ shard_bytes = sum(sizes[k] for k in shard)
125
+ print(f" Wrote {fname} "
126
+ f"({len(shard)} tensors, {shard_bytes/1024**3:.2f} GB)")
127
+
128
+ index = {
129
+ "metadata": {"total_size": total},
130
+ "weight_map": weight_map,
131
+ }
132
+ idx_file = out / "model.safetensors.index.json"
133
+ idx_file.write_text(json.dumps(index, indent=2))
134
+ print(f"Wrote {idx_file.name}")
135
+
136
+ if args.copy_aux:
137
+ copy_aux(src_dir, out)
138
+
139
+ print("\nDone. Upload with:")
140
+ print(f" huggingface-cli upload <repo_id> {out} .")
141
+
142
+
143
+ def copy_aux(src_dir: Path, out: Path):
144
+ aux = [
145
+ "config.json",
146
+ "tokenizer.json", "tokenizer_config.json", "vocab.json",
147
+ "merges.txt", "special_tokens_map.json", "added_tokens.json",
148
+ "chat_template.jinja", "generation_config.json",
149
+ "preprocessor_config.json", "processor_config.json",
150
+ "image_processor_config.json", "video_processor_config.json",
151
+ ]
152
+ copied = 0
153
+ for n in aux:
154
+ src = src_dir / n
155
+ if src.exists():
156
+ shutil.copy(src, out / n)
157
+ copied += 1
158
+ print(f"aux: copied {copied} auxiliary file(s) from {src_dir}")
159
+
160
+
161
+ if __name__ == "__main__":
162
+ main()
scripts/verify.py ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env python3
2
+ """
3
+ Memory-efficient verification. Streams tensors one at a time via
4
+ safetensors mmap instead of loading whole models into RAM.
5
+ Verifies: merged LM == A, merged vision == B.
6
+ """
7
+
8
+ import hashlib
9
+ import argparse
10
+ import json
11
+ from pathlib import Path
12
+ import numpy as np
13
+ from safetensors import safe_open
14
+
15
+
16
+ def build_key_index(model_dir: Path) -> dict:
17
+ """Map each tensor name -> the shard file that contains it."""
18
+ idx = {}
19
+ for f in sorted(model_dir.glob("*.safetensors")):
20
+ with safe_open(f, framework="numpy") as sf: # metadata only
21
+ for k in sf.keys():
22
+ idx[k] = f
23
+ return idx
24
+
25
+
26
+ def get_tensor_np(index: dict, key: str):
27
+ """Fetch a single tensor as float32-normalized numpy for hashing."""
28
+ f = index[key]
29
+ with safe_open(f, framework="pt") as sf: # pt handles bf16
30
+ t = sf.get_tensor(key)
31
+ # torch tensor -> float32 numpy (lossless for bf16; passthrough others)
32
+ import torch
33
+ if t.dtype == torch.bfloat16:
34
+ t = t.to(torch.float32)
35
+ return t.numpy()
36
+
37
+
38
+ def h(np_arr) -> str:
39
+ return hashlib.sha256(np_arr.tobytes()).hexdigest()[:16]
40
+
41
+
42
+ def check(name, merged_idx, ref_idx, prefix):
43
+ keys = sorted(k for k in merged_idx if k.startswith(prefix))
44
+ mismatches = []
45
+ for i, k in enumerate(keys):
46
+ if k not in ref_idx:
47
+ mismatches.append((k, "missing in reference"))
48
+ continue
49
+ hm = h(get_tensor_np(merged_idx, k))
50
+ hr = h(get_tensor_np(ref_idx, k))
51
+ if hm != hr:
52
+ mismatches.append((k, "hash differs"))
53
+ if (i + 1) % 100 == 0:
54
+ print(f" {name}: checked {i+1}/{len(keys)}…")
55
+ print(f"\n=== {name} ===")
56
+ print(f"Checked {len(keys)} mismatches: {len(mismatches)}")
57
+ for k, why in mismatches[:30]:
58
+ print(" !!", k, "-", why)
59
+ return not mismatches
60
+
61
+
62
+ def main():
63
+ ap = argparse.ArgumentParser()
64
+ ap.add_argument("-a", "--finetune", required=True)
65
+ ap.add_argument("-b", "--base", required=True)
66
+ ap.add_argument("-m", "--merged", required=True)
67
+ ap.add_argument("--only", choices=["lm", "vision", "both"],
68
+ default="both")
69
+ args = ap.parse_args()
70
+
71
+ print("Indexing (metadata only, no tensor loads)…")
72
+ a_idx = build_key_index(Path(args.finetune))
73
+ b_idx = build_key_index(Path(args.base))
74
+ m_idx = build_key_index(Path(args.merged))
75
+
76
+ lm_ok = vis_ok = True
77
+ if args.only in ("lm", "both"):
78
+ lm_ok = check("LM (merged vs A)", m_idx, a_idx, "language_model.")
79
+ if args.only in ("vision", "both"):
80
+ vis_ok = check("VISION (merged vs B)", m_idx, b_idx, "vision_tower.")
81
+
82
+ print("\n=== SUMMARY ===")
83
+ if args.only in ("lm", "both"):
84
+ print(f"LM == A: {'PASS' if lm_ok else 'FAIL'}")
85
+ if args.only in ("vision", "both"):
86
+ print(f"VIS == B: {'PASS' if vis_ok else 'FAIL'}")
87
+ print("✅ VERIFIED" if (lm_ok and vis_ok) else "❌ MISMATCH")
88
+
89
+
90
+ if __name__ == "__main__":
91
+ 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,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ "processor_class": "Qwen3VLProcessor",
27
+ "split_special_tokens": false,
28
+ "tokenizer_class": "Qwen2Tokenizer",
29
+ "tool_parser_type": "qwen3_coder",
30
+ "unk_token": null,
31
+ "video_token": "<|video_pad|>",
32
+ "vision_bos_token": "<|vision_start|>",
33
+ "vision_eos_token": "<|vision_end|>"
34
+ }