--- a/src/engine/metal/qwen_mtplx/issue103_analysis.rs +++ b/src/engine/metal/qwen_mtplx/issue103_analysis.rs @@ -407,6 +407,19 @@ "{}", serde_json::json!({"case":"mtp_final","exit":if stop_exit {"first_primary_stop"} else {"max_tokens"},"depth":depth,"temperature":temperature,"prompt_ids":ids,"tokens":result.tokens,"key_length":key.len(),"restored_cached_tokens":reused,"trunk_offsets":offsets,"mtp_offset":execution.mtp_offset().unwrap(),"pending":result.pending,"final_state_error":result.final_state_error}) ); + if depth == 1 && temperature == 0.6 && !stop_exit { + let path = std::env::var_os("DS4_ISSUE106_BAD_CHECKPOINT").unwrap(); + let metadata = crate::engine::qwen::QwenMetadata::open(&root, true).unwrap(); + let identity = super::session_checkpoint::Identity { + model: metadata.checkpoint_identity(), context: 4096, + vocabulary: metadata.tokenizer.vocab_size() as u32, mtp: true, + }; + let mut live = super::request::LiveSession { + current: Some(snapshot), ..Default::default() + }; + live.save_checkpoint(std::path::Path::new(&path), identity, + [106; 32], &execution.streams, execution.stream, |_| {}, || false).unwrap(); + } assert_eq!(offsets, vec![3; 12]); assert_eq!(reused, 4); assert!(result.pending.is_none() && result.final_state_error.is_none());