"""Tests P1.w — default `get_vlm_model()` DGX-safe. Sur le DGX, `gemma4:latest` peut être absent (dépull) ; si aucune env `RPA_VLM_MODEL` / `VLM_MODEL` n'est posée, le fallback central ne doit plus tomber sur `gemma4:latest` (risque 404 Ollama → tout le pipeline VLM échoue). Le default doit appartenir à une allow-list de modèles confirmés présents sur DGX. """ import pytest from core.detection import vlm_config # Le default historique non-DGX-safe (absent du DGX si dépull). NON_DGX_SAFE_DEFAULT = "gemma4:latest" _VLM_ENVS = ("RPA_VLM_MODEL", "VLM_MODEL") @pytest.fixture def clean_vlm_env(monkeypatch): """Neutralise les env VLM et réinitialise le cache de résolution.""" for var in _VLM_ENVS: monkeypatch.delenv(var, raising=False) vlm_config.reset_vlm_model_cache() yield monkeypatch vlm_config.reset_vlm_model_cache() def test_default_vlm_model_is_dgx_safe(): """Le default n'est plus `gemma4:latest` et appartient à l'allow-list DGX-safe.""" assert vlm_config.DEFAULT_VLM_MODEL != NON_DGX_SAFE_DEFAULT assert vlm_config.DEFAULT_VLM_MODEL in vlm_config.DGX_SAFE_VLM_MODELS def test_allow_list_excludes_non_dgx_safe_default(): """L'allow-list DGX-safe ne contient pas le default historique risqué.""" assert NON_DGX_SAFE_DEFAULT not in vlm_config.DGX_SAFE_VLM_MODELS def test_get_vlm_model_no_env_returns_dgx_safe(clean_vlm_env): """Sans env, même Ollama injoignable, on retourne le default DGX-safe.""" # Simule Ollama injoignable → get_vlm_model utilise le modèle configuré. clean_vlm_env.setattr(vlm_config, "_list_ollama_models", lambda endpoint: None) model = vlm_config.get_vlm_model() assert model != NON_DGX_SAFE_DEFAULT assert model == vlm_config.DEFAULT_VLM_MODEL def test_get_vlm_model_env_override_keeps_priority(clean_vlm_env): """RPA_VLM_MODEL garde la priorité, même vers un modèle non-DGX-safe explicite.""" clean_vlm_env.setattr(vlm_config, "_list_ollama_models", lambda endpoint: None) clean_vlm_env.setenv("RPA_VLM_MODEL", "gemma4:latest") assert vlm_config.get_vlm_model() == "gemma4:latest" def test_get_vlm_model_legacy_vlm_model_alias(clean_vlm_env): """L'alias de compat VLM_MODEL est honoré avant le default.""" clean_vlm_env.setattr(vlm_config, "_list_ollama_models", lambda endpoint: None) clean_vlm_env.setenv("VLM_MODEL", "mon-modele:custom") assert vlm_config.get_vlm_model() == "mon-modele:custom"