Commit the final Qwen MTP primary before saving state

This commit is contained in:
Georg Bauer committed 2026-10-04 13:42:17 +02:00
1 parent 5ecf8ab4f3
commit a8cad88100
17 files changed
+806 -127

No files matched your search

@@ -0,0 +1,101 @@
//! Existing Generator rejection/rebuild path for a real pre-fix checkpoint.
use super::*;
use crate::engine::{Generator, metal::Executor};
use crate::settings::{
GenerationPreferences, RuntimePreferences, SpeculativePreferences, effective_settings,
};
use std::sync::Arc;
#[test]
#[ignore = "installed model and actual pre-fix checkpoint; external memory guard required"]
fn issue106_product_discards_old_checkpoint_and_recovers_cold() {
let root = std::path::PathBuf::from(std::env::var_os("DS4_QWEN38_ARTIFACTS").unwrap());
let old = std::path::PathBuf::from(std::env::var_os("DS4_ISSUE106_BAD_CHECKPOINT").unwrap());
let directory =
std::path::PathBuf::from(std::env::var_os("DS4_ISSUE106_DIR").unwrap()).join("product");
std::fs::create_dir_all(&directory).unwrap();
let effective = effective_settings(
crate::model::ModelChoice::Qwen38FlashNext,
&GenerationPreferences {
context_tokens: 4096,
max_generated_tokens: 1,
temperature: Some(0.6),
..Default::default()
},
&RuntimePreferences {
speculative: SpeculativePreferences {
glm_mtp: true,
..Default::default()
},
..Default::default()
},
root.parent().unwrap(),
)
.unwrap();
let mut settings = effective.turn;
settings.seed = Some(0);
settings.kv_cache.min_tokens = 0;
let mut generator = Generator::open(
&effective.engine,
Arc::new(Metrics::new(&directory.join("metrics"))),
)
.unwrap();
let path = directory.join("old.bin");
std::fs::copy(&old, &path).unwrap();
let selection = generator.select_checkpoint(&path, |_| true).unwrap();
assert!(!selection.found && selection.incompatible);
assert!(!path.exists());
let Executor::QwenMtplx(owner) = &mut generator.executor else {
unreachable!()
};
assert!(owner.live.current.is_none() && owner.live.prefix.is_none());
let messages = [ChatTurn {
user: true,
tool: false,
system: false,
skip_previous_eos: false,
reasoning: None,
reasoning_complete: true,
content: "Say hello.".into(),
}];
let mut states = Vec::new();
for target in [&path, &directory.join("fresh.bin")] {
let out = generator
.generate(
target,
None,
&messages,
&settings,
&AtomicBool::new(false),
|_, _| {},
|_, _, _| {},
|_| {},
)
.unwrap();
assert_eq!(out.cached_tokens, 0);
assert_eq!(&std::fs::read(target).unwrap()[..8], b"QWMTKV02");
let Executor::QwenMtplx(owner) = &mut generator.executor else {
unreachable!()
};
let saved = owner.live.current.as_ref().unwrap();
let mut hashes = Vec::new();
let payload = saved
.encode_payload(
256,
&owner.execution.streams,
owner.execution.stream,
|_, bytes| {
hashes.push(crate::engine::metal::qwen_mtplx_tests::hex_digest(&bytes));
Ok(())
},
|| false,
)
.unwrap();
states.push(serde_json::json!({"tokens":saved.token_ids,"payload":payload,"hashes":hashes,"text":out.message.content,"reasoning":out.message.reasoning}));
}
assert_eq!(states[0], states[1]);
println!(
"{}",
serde_json::json!({"case":"product_checkpoint_recovery","old_removed":true,"cold_tokens":0,"new_magic":"QWMTKV02","fresh_state_equal":true})
);
}