mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-08-02 03:28:36 -04:00
143 lines
5.2 KiB
Python
143 lines
5.2 KiB
Python
from services.hwfit import image_models
|
|
|
|
rank_image_models = image_models.rank_image_models
|
|
IMAGE_MODEL_REGISTRY = image_models.IMAGE_MODEL_REGISTRY
|
|
|
|
SYS = {"gpu_vram_gb": 0, "has_gpu": False}
|
|
|
|
|
|
def _disable_hf_discovery(monkeypatch):
|
|
monkeypatch.setattr(image_models, "_fetch_hf_image_collection_models", lambda: [])
|
|
monkeypatch.setattr(image_models, "_discover_quant_repos", lambda *a, **k: {})
|
|
|
|
|
|
def test_rank_image_models_handles_non_string_search(monkeypatch):
|
|
_disable_hf_discovery(monkeypatch)
|
|
# search is a CLI/API filter arg; a non-string made search.lower() raise
|
|
# AttributeError. A non-string search should behave as "no filter".
|
|
out = rank_image_models(SYS, search=123)
|
|
assert len(out) == len(IMAGE_MODEL_REGISTRY)
|
|
|
|
|
|
def test_rank_image_models_string_filter_still_applies(monkeypatch):
|
|
_disable_hf_discovery(monkeypatch)
|
|
out = rank_image_models(SYS, search="zzzznotarealmodelzzz")
|
|
assert out == []
|
|
|
|
|
|
def test_rank_image_models_uses_ram_budget_when_gpu_disabled(monkeypatch):
|
|
model = {
|
|
"id": "example-org/example-image-model",
|
|
"name": "Example Image Model",
|
|
"provider": "example-org",
|
|
"params_b": 20.0,
|
|
"vram_bf16": 42.0,
|
|
"vram_fp8": 22.0,
|
|
"vram_q4": 14.0,
|
|
"default_quant": "FP8",
|
|
"quant_repos": {},
|
|
"capabilities": ["text-to-image"],
|
|
"description": "Imported from test fixture.",
|
|
"quality": 80,
|
|
"speed": 50,
|
|
}
|
|
monkeypatch.setattr(image_models, "_fetch_hf_image_collection_models", lambda: [model])
|
|
monkeypatch.setattr(image_models, "_discover_quant_repos", lambda *a, **k: {})
|
|
|
|
gpu_out = rank_image_models({"has_gpu": True, "gpu_vram_gb": 8, "available_ram_gb": 64}, search="Example Image")
|
|
ram_out = rank_image_models({"has_gpu": False, "gpu_vram_gb": 0, "available_ram_gb": 64}, search="Example Image")
|
|
|
|
gpu_model = next(m for m in gpu_out if m["id"] == "example-org/example-image-model")
|
|
ram_model = next(m for m in ram_out if m["id"] == "example-org/example-image-model")
|
|
|
|
assert gpu_model["fit"] == "no_fit"
|
|
assert gpu_model["quant"] == "FP8"
|
|
assert gpu_model["fit_budget"] == "gpu"
|
|
assert ram_model["fit"] in {"good", "perfect"}
|
|
assert ram_model["quant"] == "BF16"
|
|
assert ram_model["fit_budget"] == "ram"
|
|
|
|
|
|
def test_mlx_image_collection_models_only_show_on_apple(monkeypatch):
|
|
mlx_model = {
|
|
"id": "mlx-community/example-apple-image-model",
|
|
"name": "Example Apple Image Model",
|
|
"provider": "mlx-community",
|
|
"params_b": 4.0,
|
|
"vram_bf16": 10.0,
|
|
"vram_fp8": None,
|
|
"vram_q4": None,
|
|
"default_quant": "BF16",
|
|
"quant_repos": {},
|
|
"capabilities": ["text-to-image"],
|
|
"description": "Apple Silicon / MLX only.",
|
|
"quality": 82,
|
|
"speed": 88,
|
|
"mlx_only": True,
|
|
}
|
|
monkeypatch.setattr(image_models, "_fetch_hf_image_collection_models", lambda: [mlx_model])
|
|
monkeypatch.setattr(image_models, "_discover_quant_repos", lambda *a, **k: {})
|
|
|
|
cuda = rank_image_models({"has_gpu": True, "gpu_vram_gb": 48, "backend": "cuda"}, search="Example Apple")
|
|
metal = rank_image_models(
|
|
{"has_gpu": True, "gpu_vram_gb": 48, "backend": "metal", "unified_memory": True},
|
|
search="Example Apple",
|
|
)
|
|
|
|
assert cuda == []
|
|
assert [m["id"] for m in metal] == ["mlx-community/example-apple-image-model"]
|
|
|
|
|
|
def test_apple_image_mode_hides_non_mlx_models(monkeypatch):
|
|
model = {
|
|
"id": "example-org/example-image-model",
|
|
"name": "Example Image Model",
|
|
"provider": "example-org",
|
|
"params_b": 4.0,
|
|
"vram_bf16": 8.0,
|
|
"vram_fp8": None,
|
|
"vram_q4": None,
|
|
"default_quant": "BF16",
|
|
"quant_repos": {},
|
|
"capabilities": ["text-to-image"],
|
|
"description": "Imported from test fixture.",
|
|
"quality": 80,
|
|
"speed": 80,
|
|
}
|
|
monkeypatch.setattr(image_models, "_fetch_hf_image_collection_models", lambda: [model])
|
|
monkeypatch.setattr(image_models, "_discover_quant_repos", lambda *a, **k: {})
|
|
|
|
metal = rank_image_models(
|
|
{"has_gpu": True, "gpu_vram_gb": 48, "backend": "metal", "unified_memory": True},
|
|
search="Example Image",
|
|
)
|
|
cuda = rank_image_models(
|
|
{"has_gpu": True, "gpu_vram_gb": 48, "backend": "cuda"},
|
|
search="Example Image",
|
|
)
|
|
|
|
assert metal == []
|
|
assert [m["id"] for m in cuda] == ["example-org/example-image-model"]
|
|
|
|
|
|
def test_mlx_collection_imports_show_on_metal_not_cuda(monkeypatch):
|
|
mlx_model = image_models._collection_item_to_model(
|
|
{"id": "mlx-community/example-image-model-4bit"},
|
|
"Example Apple image collection",
|
|
mlx_only=True,
|
|
)
|
|
monkeypatch.setattr(image_models, "_fetch_hf_image_collection_models", lambda: [mlx_model])
|
|
monkeypatch.setattr(image_models, "_discover_quant_repos", lambda *a, **k: {})
|
|
|
|
metal = rank_image_models(
|
|
{"has_gpu": True, "gpu_vram_gb": 64, "backend": "metal", "unified_memory": True},
|
|
search="example-image-model",
|
|
)
|
|
cuda = rank_image_models(
|
|
{"has_gpu": True, "gpu_vram_gb": 64, "backend": "cuda"},
|
|
search="example-image-model",
|
|
)
|
|
|
|
assert [m["id"] for m in metal] == ["mlx-community/example-image-model-4bit"]
|
|
assert cuda == []
|