mirror of
https://github.com/open-jarvis/OpenJarvis.git
synced 2026-07-28 14:07:55 +00:00
* fix(channels): wire channel→agent handler and fix Telegram send pipeline * format code * add supported tests
137 lines
4.5 KiB
Python
137 lines
4.5 KiB
Python
"""Apple Silicon hardware tests."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
|
|
from openjarvis.core.config import (
|
|
GpuInfo,
|
|
HardwareInfo,
|
|
_detect_apple_gpu,
|
|
recommend_engine,
|
|
)
|
|
|
|
pytestmark = pytest.mark.apple
|
|
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Detection / system_profiler parsing
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
|
class TestAppleDetection:
|
|
"""Tests for _detect_apple_gpu() against system_profiler outputs."""
|
|
|
|
@patch("openjarvis.core.config.platform.system", return_value="Darwin")
|
|
@patch(
|
|
"openjarvis.core.config._run_cmd",
|
|
return_value=(
|
|
"Graphics/Displays:\n"
|
|
"\n"
|
|
" Apple M4 Max:\n"
|
|
"\n"
|
|
" Chipset Model: Apple M4 Max\n"
|
|
" Type: GPU\n"
|
|
" Bus: Built-In\n"
|
|
" Total Number of Cores: 40\n"
|
|
),
|
|
)
|
|
def test_system_profiler_parsing(self, mock_run, mock_system):
|
|
gpu = _detect_apple_gpu()
|
|
assert gpu is not None
|
|
assert gpu.vendor == "apple"
|
|
assert "M4 Max" in gpu.name
|
|
|
|
@patch("openjarvis.core.config.platform.system", return_value="Linux")
|
|
def test_non_darwin_returns_none(self, mock_system):
|
|
"""On non-Darwin platforms, Apple GPU detection returns None."""
|
|
assert _detect_apple_gpu() is None
|
|
|
|
@patch("openjarvis.core.config.platform.system", return_value="Darwin")
|
|
@patch(
|
|
"openjarvis.core.config._run_cmd",
|
|
return_value=(
|
|
"Graphics/Displays:\n"
|
|
"\n"
|
|
" Intel UHD Graphics 630:\n"
|
|
"\n"
|
|
" Chipset Model: Intel UHD Graphics 630\n"
|
|
" Type: GPU\n"
|
|
),
|
|
)
|
|
def test_no_apple_in_output(self, mock_run, mock_system):
|
|
"""system_profiler output without 'Apple' returns None."""
|
|
assert _detect_apple_gpu() is None
|
|
|
|
@patch("openjarvis.core.config.platform.system", return_value="Darwin")
|
|
@patch(
|
|
"openjarvis.core.config._run_cmd",
|
|
return_value=(
|
|
"Graphics/Displays:\n"
|
|
"\n"
|
|
" Apple M2 Ultra:\n"
|
|
"\n"
|
|
" Chipset Model: Apple M2 Ultra\n"
|
|
" Type: GPU\n"
|
|
" Bus: Built-In\n"
|
|
),
|
|
)
|
|
def test_apple_chip_model_extraction(self, mock_run, mock_system):
|
|
"""'Chipset Model:' line is used to extract the chip name."""
|
|
gpu = _detect_apple_gpu()
|
|
assert gpu is not None
|
|
assert gpu.name == "Apple M2 Ultra"
|
|
|
|
@patch("openjarvis.core.config.platform.system", return_value="Darwin")
|
|
@patch(
|
|
"openjarvis.core.config._run_cmd",
|
|
return_value=("Graphics/Displays:\n Apple Silicon\n Type: GPU\n"),
|
|
)
|
|
def test_apple_no_chipset_line_falls_back(self, mock_run, mock_system):
|
|
"""When no 'Chipset Model' line exists, falls back to 'Apple Silicon'."""
|
|
gpu = _detect_apple_gpu()
|
|
assert gpu is not None
|
|
assert gpu.vendor == "apple"
|
|
assert gpu.name == "Apple Silicon"
|
|
|
|
@patch("openjarvis.core.config.platform.system", return_value="Darwin")
|
|
@patch("openjarvis.core.config._run_cmd", return_value="")
|
|
def test_empty_profiler_output(self, mock_run, mock_system):
|
|
"""Empty system_profiler output returns None (no 'Apple' substring)."""
|
|
assert _detect_apple_gpu() is None
|
|
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Engine recommendation
|
|
# ---------------------------------------------------------------------------
|
|
|
|
|
|
class TestAppleEngineRecommendation:
|
|
"""Tests that Apple Silicon hardware maps to mlx."""
|
|
|
|
def test_m4_max_recommends_mlx(self):
|
|
hw = HardwareInfo(
|
|
platform="darwin",
|
|
cpu_brand="Apple M4 Max",
|
|
cpu_count=16,
|
|
ram_gb=128.0,
|
|
gpu=GpuInfo(vendor="apple", name="Apple M4 Max", vram_gb=128.0, count=1),
|
|
)
|
|
assert recommend_engine(hw) == "mlx"
|
|
|
|
def test_unified_memory(self):
|
|
"""On Apple Silicon, GPU VRAM equals system RAM (unified memory)."""
|
|
ram_gb = 192.0
|
|
gpu = GpuInfo(vendor="apple", name="Apple M4 Ultra", vram_gb=ram_gb, count=1)
|
|
hw = HardwareInfo(
|
|
platform="darwin",
|
|
cpu_brand="Apple M4 Ultra",
|
|
cpu_count=24,
|
|
ram_gb=ram_gb,
|
|
gpu=gpu,
|
|
)
|
|
assert hw.gpu.vram_gb == hw.ram_gb
|
|
assert recommend_engine(hw) == "mlx"
|