|
23 | 23 | import pytest |
24 | 24 |
|
25 | 25 | from skillspector.providers import registry |
| 26 | +from skillspector.providers.bedrock import BedrockProvider |
| 27 | +from skillspector.providers.codex_cli import CodexCLIProvider |
| 28 | +from skillspector.providers.nv_build import NvBuildProvider |
| 29 | +from skillspector.providers.openai import OpenAIProvider |
26 | 30 |
|
27 | 31 |
|
28 | 32 | @pytest.fixture(autouse=True) |
@@ -96,6 +100,53 @@ def test_whitespace_only_slot_env_is_ignored(self, monkeypatch: pytest.MonkeyPat |
96 | 100 | # Whitespace-only treated as unset — falls through to provider. |
97 | 101 | assert mod.MODEL_CONFIG["meta_analyzer"] != " " |
98 | 102 |
|
| 103 | + def test_openai_fallback_uses_openai_defaults(self, monkeypatch: pytest.MonkeyPatch) -> None: |
| 104 | + monkeypatch.setenv("OPENAI_API_KEY", "sk-test-openai-only") |
| 105 | + |
| 106 | + config = _reload_constants().build_model_config() |
| 107 | + |
| 108 | + provider = OpenAIProvider() |
| 109 | + assert config["default"] == provider.resolve_model() |
| 110 | + assert config["meta_analyzer"] == provider.resolve_model("meta_analyzer") |
| 111 | + |
| 112 | + def test_slot_override_wins_over_openai_fallback(self, monkeypatch: pytest.MonkeyPatch) -> None: |
| 113 | + monkeypatch.setenv("OPENAI_API_KEY", "sk-test-openai-only") |
| 114 | + monkeypatch.setenv("SKILLSPECTOR_MODEL_META_ANALYZER", "custom/meta-model") |
| 115 | + |
| 116 | + config = _reload_constants().build_model_config() |
| 117 | + |
| 118 | + assert config["default"] == OpenAIProvider.DEFAULT_MODEL |
| 119 | + assert config["meta_analyzer"] == "custom/meta-model" |
| 120 | + |
| 121 | + def test_configured_provider_precedes_openai_fallback( |
| 122 | + self, monkeypatch: pytest.MonkeyPatch |
| 123 | + ) -> None: |
| 124 | + monkeypatch.setenv("SKILLSPECTOR_PROVIDER", "nv_build") |
| 125 | + monkeypatch.setenv("NVIDIA_INFERENCE_KEY", "nvapi-test") |
| 126 | + monkeypatch.setenv("OPENAI_API_KEY", "sk-test-openai") |
| 127 | + |
| 128 | + config = _reload_constants().build_model_config() |
| 129 | + |
| 130 | + assert config["default"] == NvBuildProvider.DEFAULT_MODEL |
| 131 | + |
| 132 | + def test_cli_provider_precedes_openai_fallback(self, monkeypatch: pytest.MonkeyPatch) -> None: |
| 133 | + monkeypatch.setenv("SKILLSPECTOR_PROVIDER", "codex_cli") |
| 134 | + monkeypatch.setenv("OPENAI_API_KEY", "sk-test-openai") |
| 135 | + |
| 136 | + config = _reload_constants().build_model_config() |
| 137 | + |
| 138 | + assert config["default"] == CodexCLIProvider.DEFAULT_MODEL |
| 139 | + |
| 140 | + def test_bedrock_native_auth_precedes_openai_fallback( |
| 141 | + self, monkeypatch: pytest.MonkeyPatch |
| 142 | + ) -> None: |
| 143 | + monkeypatch.setenv("SKILLSPECTOR_PROVIDER", "bedrock") |
| 144 | + monkeypatch.setenv("OPENAI_API_KEY", "sk-test-openai") |
| 145 | + |
| 146 | + config = _reload_constants().build_model_config() |
| 147 | + |
| 148 | + assert config["default"] == BedrockProvider.DEFAULT_MODEL |
| 149 | + |
99 | 150 |
|
100 | 151 | class TestModelValidation: |
101 | 152 | """_validate_model_config warns or raises on unknown model IDs.""" |
|
0 commit comments