fix(model-server): deadline de warmup configurable pour le cold-start llama.cpp (#55)
Corrige la régression high « Error on loading local model » : le premier chargement du serveur modèle local (cold-start llama.cpp) dépassait la fenêtre de readiness et échouait. Le warmup dispose désormais d'un deadline par défaut de 600 s, surchargable par config optionnelle `warmup_deadline_secs` (validée dans [30, 1800]). - domain: champ `warmup_deadline_secs: Option<u64>` + validation de borne - application: policy de readiness effective (défaut 600 s, override par config) - app-tauri: DTO `warmupDeadlineSecs` - infrastructure: application de la deadline effective au warmup Verdict QA (vert) : domain 252, application 81 + 22 model_server, app-tauri dto_model_servers 6, infrastructure model_server 2, build OK. Contrat readiness couvert sur ports mockés. Caveat : le cold-start end-to-end réel (llama-server) sort du sandbox de test -> vérification manuelle utilisateur restante, non couverte par les tests unitaires. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -435,6 +435,43 @@ fn progress(downloaded: Option<u64>, total: Option<u64>) -> ModelArtifactProgres
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn readiness_policy_default_warmup_deadline_is_ten_minutes() {
|
||||
assert_eq!(
|
||||
ModelServerReadinessPolicy::default().warmup_deadline,
|
||||
Duration::from_secs(600)
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn effective_readiness_policy_uses_configured_warmup_deadline_when_present() {
|
||||
let configured = config(sid(23), 8103, "/models/qwen.gguf", true)
|
||||
.with_warmup_deadline_secs(Some(900))
|
||||
.unwrap();
|
||||
let unconfigured = config(sid(24), 8104, "/models/qwen.gguf", true);
|
||||
let usecase = EnsureLocalModelServer::new(
|
||||
Arc::new(FakeRegistry::default()),
|
||||
Arc::new(FakeProbe::new(Vec::new())),
|
||||
Arc::new(FakeProcess::default()),
|
||||
Arc::new(FakeRuntime),
|
||||
Arc::new(FakeFs::default()),
|
||||
Arc::new(FakeEvents::default()),
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
usecase
|
||||
.effective_readiness_policy(&configured)
|
||||
.warmup_deadline,
|
||||
Duration::from_secs(900)
|
||||
);
|
||||
assert_eq!(
|
||||
usecase
|
||||
.effective_readiness_policy(&unconfigured)
|
||||
.warmup_deadline,
|
||||
Duration::from_secs(600)
|
||||
);
|
||||
}
|
||||
|
||||
#[tokio::test]
|
||||
async fn reachable_server_is_reused_without_spawn() {
|
||||
let registry = Arc::new(FakeRegistry::default());
|
||||
|
||||
Reference in New Issue
Block a user