| from pathlib import Path |
|
|
| import pytest |
|
|
| from inference.config import load_app_config |
|
|
|
|
| def test_load_app_config_from_models_yaml(tmp_path, monkeypatch): |
| presets = tmp_path / "models.yaml" |
| presets.write_text( |
| """ |
| defaults: |
| active_model: demo |
| allow_model_switch: true |
| models: |
| demo: |
| label: Demo preset |
| backend: llama_cpp |
| model_repo: org/model-GGUF |
| model_file: demo.gguf |
| """ |
| ) |
| monkeypatch.chdir(tmp_path) |
| monkeypatch.delenv("ACTIVE_MODEL", raising=False) |
|
|
| config = load_app_config() |
|
|
| assert config.active_model == "demo" |
| assert config.allow_model_switch is True |
| assert config.get_model("demo").model_repo == "org/model-GGUF" |
|
|
|
|
| def test_allow_model_switch_defaults_true_without_env(tmp_path, monkeypatch): |
| presets = tmp_path / "models.yaml" |
| presets.write_text( |
| """ |
| defaults: |
| active_model: demo |
| models: |
| demo: |
| label: Demo preset |
| backend: llama_cpp |
| model_repo: org/model-GGUF |
| model_file: demo.gguf |
| """ |
| ) |
| monkeypatch.chdir(tmp_path) |
| monkeypatch.delenv("ALLOW_MODEL_SWITCH", raising=False) |
|
|
| config = load_app_config() |
|
|
| assert config.allow_model_switch is True |
|
|
|
|
| def test_allow_model_switch_env_false_overrides(tmp_path, monkeypatch): |
| presets = tmp_path / "models.yaml" |
| presets.write_text( |
| """ |
| defaults: |
| active_model: demo |
| allow_model_switch: true |
| models: |
| demo: |
| label: Demo preset |
| backend: llama_cpp |
| model_repo: org/model-GGUF |
| model_file: demo.gguf |
| """ |
| ) |
| monkeypatch.chdir(tmp_path) |
| monkeypatch.setenv("ALLOW_MODEL_SWITCH", "false") |
|
|
| config = load_app_config() |
|
|
| assert config.allow_model_switch is False |
|
|
|
|
| def test_legacy_env_overrides_active_preset(tmp_path, monkeypatch): |
| presets = tmp_path / "models.yaml" |
| presets.write_text( |
| """ |
| defaults: |
| active_model: demo |
| models: |
| demo: |
| label: Demo |
| backend: llama_cpp |
| model_repo: org/original |
| model_file: original.gguf |
| """ |
| ) |
| monkeypatch.chdir(tmp_path) |
| monkeypatch.setenv("MODEL_REPO", "org/override") |
| monkeypatch.setenv("MODEL_FILE", "override.gguf") |
|
|
| model = load_app_config().get_model("demo") |
|
|
| assert model.model_repo == "org/override" |
| assert model.model_file == "override.gguf" |
|
|
|
|
| def test_minicpm_v_gguf_preset_from_repo(monkeypatch): |
| repo_root = Path(__file__).resolve().parents[3] |
| models_yaml = repo_root / "models.yaml" |
| if not models_yaml.is_file(): |
| pytest.skip("repo models.yaml not found") |
|
|
| monkeypatch.chdir(repo_root) |
| monkeypatch.delenv("ACTIVE_MODEL", raising=False) |
| monkeypatch.delenv("ALLOW_MODEL_SWITCH", raising=False) |
|
|
| model = load_app_config().get_model("minicpm-v-4.6-gguf") |
|
|
| assert model.backend == "llama_cpp" |
| assert model.multimodal is True |
| assert model.model_repo == "openbmb/MiniCPM-V-4.6-gguf" |
| assert model.model_file == "MiniCPM-V-4_6-Q4_K_M.gguf" |
|
|
|
|
| def test_resolve_relative_model_path(tmp_path, monkeypatch): |
| local_dir = tmp_path / "gemma_merged_model" |
| local_dir.mkdir() |
| presets = tmp_path / "models.yaml" |
| presets.write_text( |
| f""" |
| defaults: |
| active_model: local |
| models: |
| local: |
| label: Local merged |
| backend: transformers |
| model_id: ./{local_dir.name} |
| """ |
| ) |
| monkeypatch.chdir(tmp_path) |
|
|
| model = load_app_config().get_model("local") |
|
|
| assert model.model_id == str(local_dir.resolve()) |
|
|