diff --git a/.gitattributes b/.gitattributes
index 13e2444b30a7ef1b58bd85aa40a9bf48054d2883..3303f4cb6ccc7bc1bdd1e420433e3bce4d78a838 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -91,3 +91,5 @@ ckpts/S2/4b/qwen3_5_2b/v13_2/v1-20260817-033406/checkpoint-1530/tokenizer.json f
ckpts/S2/4b/qwen3_5_2b/v13_3/v0-20260817-190428/checkpoint-1530/tokenizer.json filter=lfs diff=lfs merge=lfs -text
ckpts/S2/4b/qwen3_5_2b/v13_5/v0-20260821-172306/checkpoint-1530/tokenizer.json filter=lfs diff=lfs merge=lfs -text
ckpts/S2/4b/qwen3_5_2b/v13_6/v0-20260820-192228/checkpoint-1400/tokenizer.json filter=lfs diff=lfs merge=lfs -text
+ckpts/S2/4b/qwen3_5_2b/v14_1_mkl_layer3/v0-20261012-043050/checkpoint-1530/tokenizer.json filter=lfs diff=lfs merge=lfs -text
+ckpts/S2/4b/qwen3_5_2b/baseline_tmerge_64f_20pct/v0-20261012-171609/checkpoint-1530/tokenizer.json filter=lfs diff=lfs merge=lfs -text
diff --git a/ckpts/S0/qwen3_5_2b/v14_1_mkl_layer3/step005258/config.json b/ckpts/S0/qwen3_5_2b/v14_1_mkl_layer3/step005258/config.json
new file mode 100644
index 0000000000000000000000000000000000000000..ac88c3f910cd79235cee799e4e3771b6f4caa68a
--- /dev/null
+++ b/ckpts/S0/qwen3_5_2b/v14_1_mkl_layer3/step005258/config.json
@@ -0,0 +1,21 @@
+{
+ "deepstack_visual_indexes": [],
+ "depth": 24,
+ "hidden_act": "gelu_pytorch_tanh",
+ "hidden_size": 1024,
+ "in_channels": 3,
+ "initializer_range": 0.02,
+ "intermediate_size": 4096,
+ "model_type": "qwen3_5",
+ "num_heads": 16,
+ "num_position_embeddings": 2304,
+ "out_hidden_size": 2048,
+ "patch_size": 16,
+ "spatial_merge_size": 2,
+ "temporal_patch_size": 2,
+ "transformers_version": "5.5.4",
+ "vtc_compressor_type": "vtc_x2",
+ "vtc_compressor_variant": "baseline",
+ "vtc_feature_fusion_layers": [],
+ "vtc_temporal_attention_window": 2
+}
diff --git a/ckpts/S0/qwen3_5_2b/v14_1_mkl_layer3/step005258/export_manifest.json b/ckpts/S0/qwen3_5_2b/v14_1_mkl_layer3/step005258/export_manifest.json
new file mode 100644
index 0000000000000000000000000000000000000000..be78d1ba82c1b8c71eaf592c3e2a79856b9b9af8
--- /dev/null
+++ b/ckpts/S0/qwen3_5_2b/v14_1_mkl_layer3/step005258/export_manifest.json
@@ -0,0 +1,70 @@
+{
+ "architecture": {
+ "compressor": "vtc_x2",
+ "decoder_bottleneck_size": 704,
+ "decoder_temporal_attention_window": 2,
+ "image_route": "duplicate_two_then_compress_one",
+ "placement": "post_final_layernorm_pre_projector",
+ "spatial_attention": true,
+ "temporal_attention": true,
+ "temporal_attention_window": 2,
+ "temporal_downsample": "conv1d_stride2",
+ "temporal_group_size": 2,
+ "temporal_position": "learned_local_two_slot",
+ "variant": "baseline",
+ "vtc_feature_fusion_layers": []
+ },
+ "downstream": {
+ "native_merger_mlp_discarded": true,
+ "native_merger_norm_retained_as_final_layernorm": true,
+ "preferred_model_type": "llava_qwen3_5vit_qwen3",
+ "projector": "standard_llava_ov_mlp_reinitialized_in_s1",
+ "reconstruction_decoder_discarded": true,
+ "train_frames": 64,
+ "video_mode": "vtc_compression",
+ "visual_units": 32
+ },
+ "export": {
+ "dropped": {
+ "merger_mlp": 4,
+ "non_visual": 355
+ },
+ "exported_keys": 293,
+ "final_layernorm_from": "student.model.visual.merger.norm",
+ "retained": {
+ "merger_norm_as_final_layernorm": 2
+ }
+ },
+ "freeze": {
+ "language_model": true,
+ "lm_head": true,
+ "native_merger": true,
+ "patch_embed": true,
+ "pos_embed": true,
+ "trainable": [
+ "model.visual.blocks.*",
+ "vtc_compressor.*",
+ "reconstruction_decoder.*"
+ ]
+ },
+ "loss": {
+ "image": "v12_4_llm_semantic_change_hidden_fusion_forward_kl",
+ "image_weight": 0.5,
+ "video": "vtc_compress_reconstruct_full_vocab_forward_kl",
+ "video_compressed_units": 16,
+ "video_direct_target": "teacher_vit_temporal_mean_llm",
+ "video_direct_weight": 0.0,
+ "video_input_mode": "repeat2",
+ "video_llm_relation": "full_token_cosine_matrix_mse",
+ "video_llm_relation_weight": 0.0,
+ "video_reconstructed_units": 32,
+ "video_teacher_frames": 32,
+ "video_weight": 0.5
+ },
+ "resolution": 384,
+ "schema": "visionencoder.v14_1_mkl",
+ "source_model": "/share/m2v_intern_v3/wangjunjie09/model_cache/huggingface/Qwen/Qwen3.5-2B",
+ "step": 5258,
+ "version": 1,
+ "vision_source_id": "qwen3_5_2b"
+}
diff --git a/ckpts/S0/qwen3_5_2b/v14_1_mkl_layer3/step005258/mp_rank_00_model_states.pt b/ckpts/S0/qwen3_5_2b/v14_1_mkl_layer3/step005258/mp_rank_00_model_states.pt
new file mode 100644
index 0000000000000000000000000000000000000000..2289e7510ac5c137d8ff4357da8c8974947dac2c
--- /dev/null
+++ b/ckpts/S0/qwen3_5_2b/v14_1_mkl_layer3/step005258/mp_rank_00_model_states.pt
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2ba66fc267c59f2212d6ec8c311047e8fde7d75f8ae92165998ac1c0392ac42a
+size 4460548929
diff --git a/ckpts/S0/qwen3_5_2b/v14_1_mkl_layer3/step005258/trainer_state.json b/ckpts/S0/qwen3_5_2b/v14_1_mkl_layer3/step005258/trainer_state.json
new file mode 100644
index 0000000000000000000000000000000000000000..1c6b515d9ee84ae9a44a666f88aa7483bcde258c
--- /dev/null
+++ b/ckpts/S0/qwen3_5_2b/v14_1_mkl_layer3/step005258/trainer_state.json
@@ -0,0 +1,6 @@
+{
+ "batch_in_epoch": 0,
+ "epoch": 1,
+ "global_step": 5258,
+ "max_steps": 5258
+}
diff --git a/ckpts/S0/qwen3_5_2b/v14_1_mkl_layer3/step005258/v12_vision_model_states.pt b/ckpts/S0/qwen3_5_2b/v14_1_mkl_layer3/step005258/v12_vision_model_states.pt
new file mode 100644
index 0000000000000000000000000000000000000000..fac545625a6bbdbc8a36d3a7ae95aaa28aa09945
--- /dev/null
+++ b/ckpts/S0/qwen3_5_2b/v14_1_mkl_layer3/step005258/v12_vision_model_states.pt
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2b7a2e8c5139162cc0dc5a37e51af74f7c0fc769fcbfca91590cfb24fbb2a650
+size 612522145
diff --git a/ckpts/S0/qwen3_5_2b/v14_1_mkl_layer3/step005258/vtc_compressor_model_states.pt b/ckpts/S0/qwen3_5_2b/v14_1_mkl_layer3/step005258/vtc_compressor_model_states.pt
new file mode 100644
index 0000000000000000000000000000000000000000..29e90d9ca1e76b8fea2c0a6b8d85733f5ef9ab3f
--- /dev/null
+++ b/ckpts/S0/qwen3_5_2b/v14_1_mkl_layer3/step005258/vtc_compressor_model_states.pt
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0bde1f903958ce742a72bf376007c4388c5387323f038a27d126a21c362c35a9
+size 33826053
diff --git a/ckpts/S2/4b/qwen3_5_2b/baseline_tmerge_64f_20pct/v0-20261012-171609/checkpoint-1530/chat_template.jinja b/ckpts/S2/4b/qwen3_5_2b/baseline_tmerge_64f_20pct/v0-20261012-171609/checkpoint-1530/chat_template.jinja
new file mode 100644
index 0000000000000000000000000000000000000000..70adff8a08fb31e0636f618564838d4bf3c05286
--- /dev/null
+++ b/ckpts/S2/4b/qwen3_5_2b/baseline_tmerge_64f_20pct/v0-20261012-171609/checkpoint-1530/chat_template.jinja
@@ -0,0 +1,61 @@
+{%- if tools %}
+ {{- '<|im_start|>system\n' }}
+ {%- if messages[0].role == 'system' %}
+ {{- messages[0].content + '\n\n' }}
+ {%- endif %}
+ {{- "# Tools\n\nYou may call one or more functions to assist with the user query.\n\nYou are provided with function signatures within XML tags:\n" }}
+ {%- for tool in tools %}
+ {{- "\n" }}
+ {{- tool | tojson }}
+ {%- endfor %}
+ {{- "\n\n\nFor each function call, return a json object with function name and arguments within XML tags:\n\n{\"name\": , \"arguments\": }\n<|im_end|>\n" }}
+{%- else %}
+ {%- if messages[0].role == 'system' %}
+ {{- '<|im_start|>system\n' + messages[0].content + '<|im_end|>\n' }}
+ {%- endif %}
+{%- endif %}
+{%- for message in messages %}
+ {%- if message.content is string %}
+ {%- set content = message.content %}
+ {%- else %}
+ {%- set content = '' %}
+ {%- endif %}
+ {%- if (message.role == "user") or (message.role == "system" and not loop.first) %}
+ {{- '<|im_start|>' + message.role + '\n' + content + '<|im_end|>' + '\n' }}
+ {%- elif message.role == "assistant" %}
+ {{- '<|im_start|>' + message.role + '\n' + content }}
+ {%- if message.tool_calls %}
+ {%- for tool_call in message.tool_calls %}
+ {%- if (loop.first and content) or (not loop.first) %}
+ {{- '\n' }}
+ {%- endif %}
+ {%- if tool_call.function %}
+ {%- set tool_call = tool_call.function %}
+ {%- endif %}
+ {{- '\n{"name": "' }}
+ {{- tool_call.name }}
+ {{- '", "arguments": ' }}
+ {%- if tool_call.arguments is string %}
+ {{- tool_call.arguments }}
+ {%- else %}
+ {{- tool_call.arguments | tojson }}
+ {%- endif %}
+ {{- '}\n' }}
+ {%- endfor %}
+ {%- endif %}
+ {{- '<|im_end|>\n' }}
+ {%- elif message.role == "tool" %}
+ {%- if loop.first or (messages[loop.index0 - 1].role != "tool") %}
+ {{- '<|im_start|>user' }}
+ {%- endif %}
+ {{- '\n\n' }}
+ {{- content }}
+ {{- '\n' }}
+ {%- if loop.last or (messages[loop.index0 + 1].role != "tool") %}
+ {{- '<|im_end|>\n' }}
+ {%- endif %}
+ {%- endif %}
+{%- endfor %}
+{%- if add_generation_prompt %}
+ {{- '<|im_start|>assistant\n' }}
+{%- endif %}
\ No newline at end of file
diff --git a/ckpts/S2/4b/qwen3_5_2b/baseline_tmerge_64f_20pct/v0-20261012-171609/checkpoint-1530/chat_template.json b/ckpts/S2/4b/qwen3_5_2b/baseline_tmerge_64f_20pct/v0-20261012-171609/checkpoint-1530/chat_template.json
new file mode 100644
index 0000000000000000000000000000000000000000..68724c68b1612e9ab2e31f84e3279099ad656ff6
--- /dev/null
+++ b/ckpts/S2/4b/qwen3_5_2b/baseline_tmerge_64f_20pct/v0-20261012-171609/checkpoint-1530/chat_template.json
@@ -0,0 +1,3 @@
+{
+ "chat_template": "{% for message in messages %}{{'<|im_start|>' + message['role'] + ' '}}{# Render all images first #}{% for content in message['content'] | selectattr('type', 'equalto', 'image') %}{{ '' }}{% endfor %}{# Render all video then #}{% for content in message['content'] | selectattr('type', 'equalto', 'video') %}{{ '