Files
OpenJarvis/tests/cli/test_serve_model_resolution.py
T

68 lines
1.9 KiB
Python

"""Tests for API server model selection."""
from __future__ import annotations
from openjarvis.cli.serve import _resolve_server_model
from openjarvis.core.config import JarvisConfig
class _FakeEngine:
def __init__(self, models: list[str]) -> None:
self._models = models
def list_models(self) -> list[str]:
return self._models
def test_server_model_falls_back_to_reachable_ollama_model() -> None:
cfg = JarvisConfig()
cfg.server.model = "mlx-community/Qwen2.5-7B-Instruct-4bit"
cfg.intelligence.default_model = "mlx-community/Qwen2.5-7B-Instruct-4bit"
cfg.intelligence.fallback_model = "qwen3.5:9b"
model = _resolve_server_model(
None,
config=cfg,
engine_name="multi",
engine=_FakeEngine(["qwen3.5:9b"]),
all_models={"multi": ["qwen3.5:9b"]},
)
assert model == "qwen3.5:9b"
def test_server_model_prefers_reachable_configured_model() -> None:
cfg = JarvisConfig()
cfg.server.model = "mlx-community/Qwen2.5-7B-Instruct-4bit"
cfg.intelligence.default_model = "qwen3.5:9b"
cfg.intelligence.fallback_model = "qwen3.5:9b"
model = _resolve_server_model(
None,
config=cfg,
engine_name="multi",
engine=_FakeEngine(
["mlx-community/Qwen2.5-7B-Instruct-4bit", "qwen3.5:9b"]
),
all_models={"multi": ["mlx-community/Qwen2.5-7B-Instruct-4bit"]},
)
assert model == "mlx-community/Qwen2.5-7B-Instruct-4bit"
def test_server_model_keeps_explicit_cli_model() -> None:
cfg = JarvisConfig()
cfg.server.model = "configured-model"
cfg.intelligence.fallback_model = "fallback-model"
model = _resolve_server_model(
"explicit-model",
config=cfg,
engine_name="multi",
engine=_FakeEngine(["fallback-model"]),
all_models={"multi": ["fallback-model"]},
)
assert model == "explicit-model"