personal memory agent
0

Configure Feed

Select the types of activity you want to include in your feed.

solstone / tests / test_fit_report.py
8.9 kB 305 lines
1# SPDX-License-Identifier: AGPL-3.0-only 2# Copyright (c) 2026 sol pbc 3 4from __future__ import annotations 5 6from pathlib import Path 7 8import pytest 9 10from solstone.think.providers import fit_report, local_cuda, local_install, local_vulkan 11from solstone.think.providers.local import LocalProviderError 12from solstone.think.providers.memory import MemoryVerdict 13 14PLACEMENT_LINE = ( 15 "sol thinks on your GPU; transcription runs on your CPU on this machine" 16) 17 18 19@pytest.fixture(autouse=True) 20def _reset_vulkan_detect_cache(): 21 local_vulkan.reset_detect_cache() 22 yield 23 local_vulkan.reset_detect_cache() 24 25 26def _nvidia_probe( 27 *, 28 vram_mib: int, 29 memory_source: str = local_cuda.MEMORY_SOURCE_NVIDIA_VRAM, 30) -> local_cuda.NvidiaProbe: 31 return local_cuda.NvidiaProbe( 32 index=0, 33 compute_cap="sm_89", 34 driver_cuda_version=13, 35 vram_mib=vram_mib, 36 tiering_memory_mib=vram_mib, 37 memory_source=memory_source, 38 detected=True, 39 ) 40 41 42def _vulkan_device( 43 *, 44 index: int = 0, 45 vram_mib: int, 46) -> local_vulkan.VulkanDevice: 47 return local_vulkan.VulkanDevice( 48 index=index, 49 name=f"Test GPU {index}", 50 device_type=local_vulkan.VK_TYPE_DISCRETE, 51 vram_mib=vram_mib, 52 ) 53 54 55def _choice(backend: str = "cuda") -> local_cuda.BackendChoice: 56 return local_cuda.BackendChoice(backend=backend, reason="test choice") 57 58 59def _undetected_nvidia_probe() -> local_cuda.NvidiaProbe: 60 return local_cuda.NvidiaProbe( 61 index=None, 62 compute_cap=None, 63 driver_cuda_version=None, 64 vram_mib=None, 65 tiering_memory_mib=None, 66 memory_source=local_cuda.MEMORY_SOURCE_UNAVAILABLE, 67 detected=False, 68 ) 69 70 71def test_overall_collapses_unknown_to_warning() -> None: 72 report = fit_report.FitReport( 73 artifact="artifact", 74 checks=( 75 fit_report.FitCheck("platform", "ok", "ok"), 76 fit_report.FitCheck("probe", "unknown", "unknown"), 77 ), 78 ) 79 80 assert report.overall == "warning" 81 assert "[unknown] probe: unknown" in fit_report.render_fit_report(report) 82 83 84def test_overall_blocked_wins() -> None: 85 report = fit_report.FitReport( 86 artifact="artifact", 87 checks=( 88 fit_report.FitCheck("disk", "warning", "warning"), 89 fit_report.FitCheck("platform", "blocked", "blocked"), 90 ), 91 ) 92 93 assert report.overall == "blocked" 94 95 96def test_local_gpu_check_mentions_cpu_transcription_on_small_bundled_brain() -> None: 97 check = fit_report._local_gpu_check( 98 _nvidia_probe(vram_mib=6144), 99 _choice(), 100 [_vulkan_device(vram_mib=6144)], 101 local_vulkan, 102 brain_lane_active=True, 103 ) 104 105 assert check.severity == "ok" 106 assert check.detail == f"CUDA backend selected: test choice; {PLACEMENT_LINE}" 107 108 109@pytest.mark.parametrize( 110 ("probe", "devices", "brain_lane_active"), 111 [ 112 (_nvidia_probe(vram_mib=6144), [_vulkan_device(vram_mib=6144)], False), 113 ( 114 _nvidia_probe(vram_mib=6144), 115 [ 116 _vulkan_device(index=0, vram_mib=6144), 117 _vulkan_device(index=1, vram_mib=6144), 118 ], 119 True, 120 ), 121 ( 122 _nvidia_probe( 123 vram_mib=6144, 124 memory_source=local_cuda.MEMORY_SOURCE_SYSTEM_AVAILABLE, 125 ), 126 [_vulkan_device(vram_mib=6144)], 127 True, 128 ), 129 (_nvidia_probe(vram_mib=16384), [_vulkan_device(vram_mib=16384)], True), 130 ], 131) 132def test_local_gpu_check_omits_cpu_transcription_line_outside_predicate( 133 probe: local_cuda.NvidiaProbe, 134 devices: list[local_vulkan.VulkanDevice], 135 brain_lane_active: bool, 136) -> None: 137 check = fit_report._local_gpu_check( 138 probe, 139 _choice(), 140 devices, 141 local_vulkan, 142 brain_lane_active=brain_lane_active, 143 ) 144 145 assert check.severity == "ok" 146 assert PLACEMENT_LINE not in check.detail 147 148 149def test_local_gpu_check_uses_vulkan_when_nvidia_probe_is_unavailable( 150 monkeypatch: pytest.MonkeyPatch, 151) -> None: 152 devices = [ 153 _vulkan_device(index=0, vram_mib=8176), 154 _vulkan_device(index=1, vram_mib=2048), 155 ] 156 monkeypatch.setattr(local_vulkan, "gpu_probe_ok", lambda: True) 157 158 check = fit_report._local_gpu_check( 159 _undetected_nvidia_probe(), 160 _choice("vulkan"), 161 devices, 162 local_vulkan, 163 brain_lane_active=False, 164 override_index=1, 165 ) 166 167 assert check.severity == "ok" 168 assert check.detail == ( 169 "Vulkan GPU selected: Test GPU 1; resolved backend is vulkan: test choice" 170 ) 171 172 173def test_build_local_fit_report_uses_cuda_artifact_trust_probe( 174 tmp_path: Path, 175 monkeypatch: pytest.MonkeyPatch, 176) -> None: 177 monkeypatch.setattr(fit_report.sys, "platform", "linux") 178 monkeypatch.setattr( 179 local_cuda, 180 "probe_nvidia_gpu", 181 lambda: local_cuda.NvidiaProbe( 182 index=0, 183 compute_cap="sm_86", 184 driver_cuda_version=14, 185 vram_mib=24564, 186 tiering_memory_mib=24564, 187 memory_source=local_cuda.MEMORY_SOURCE_NVIDIA_VRAM, 188 detected=True, 189 ), 190 ) 191 monkeypatch.setattr( 192 local_install, 193 "probe_cuda_runtime_artifact_trust", 194 lambda _pin: local_cuda.ArtifactTrust.TRUSTED, 195 ) 196 monkeypatch.setattr( 197 local_install, 198 "has_persisted_installed_cuda_target", 199 lambda: False, 200 ) 201 monkeypatch.setattr( 202 local_vulkan, 203 "detect_gpus", 204 lambda: [_vulkan_device(vram_mib=24564)], 205 ) 206 monkeypatch.setattr(local_vulkan, "gpu_probe_ok", lambda: True) 207 monkeypatch.setattr(local_install, "cache_root", lambda: tmp_path) 208 monkeypatch.setattr( 209 fit_report, 210 "assess_memory", 211 lambda required, *, block_below_floor: MemoryVerdict( 212 available_bytes=required, 213 required_bytes=required, 214 severity="ok", 215 ), 216 ) 217 monkeypatch.setattr(fit_report, "free_bytes", lambda _path: 500 * 1024**3) 218 219 report = fit_report.build_local_fit_report(local_install.LOCAL_MODEL) 220 221 gpu = next(check for check in report.checks if check.name == "gpu") 222 assert gpu.severity == "ok" 223 assert gpu.detail == ( 224 "CUDA backend selected: compute_cap sm_86 covered; driver CUDA 14 >= 13" 225 ) 226 disk = next(check for check in report.checks if check.name == "disk") 227 assert disk.severity == "ok" 228 assert "CUDA llama-server tarball" not in disk.detail 229 assert disk.required_bytes is not None 230 assert disk.required_bytes >= ( 231 local_install.require_cuda_artifact_pin_for_current_platform().size_bytes 232 ) 233 234 235def test_disk_unknown_size_warns_when_known_size_fits( 236 tmp_path: Path, 237 monkeypatch: pytest.MonkeyPatch, 238) -> None: 239 monkeypatch.setattr(fit_report, "free_bytes", lambda _path: 10) 240 241 check = fit_report._disk_check( 242 "disk", 243 tmp_path, 244 (("known", 5),), 245 ("server tarball",), 246 ) 247 248 assert check.severity == "warning" 249 assert check.required_bytes == 5 250 assert check.available_bytes == 10 251 assert "unknown download size for server tarball" in check.detail 252 253 254def test_disk_read_error_reports_unknown( 255 tmp_path: Path, 256 monkeypatch: pytest.MonkeyPatch, 257) -> None: 258 def fail_free(_path: Path) -> int: 259 raise OSError("disk unavailable") 260 261 monkeypatch.setattr(fit_report, "free_bytes", fail_free) 262 263 check = fit_report._disk_check("disk", tmp_path, (("known", 5),), ()) 264 265 assert check.severity == "unknown" 266 assert check.required_bytes == 5 267 assert check.available_bytes is None 268 assert "could not be verified" in check.detail 269 270 271def test_ram_unavailable_reports_warning(monkeypatch: pytest.MonkeyPatch) -> None: 272 monkeypatch.setattr( 273 fit_report, 274 "assess_memory", 275 lambda required, *, block_below_floor: MemoryVerdict( 276 available_bytes=None, 277 required_bytes=required, 278 severity="warning", 279 ), 280 ) 281 282 check = fit_report._ram_check( 283 "ram", 284 1024, 285 block_below_floor=True, 286 artifact_label="model", 287 ) 288 289 assert check.severity == "warning" 290 assert check.available_bytes is None 291 assert "available memory could not be verified" in check.detail 292 293 294def test_local_platform_unsupported_blocks(monkeypatch: pytest.MonkeyPatch) -> None: 295 monkeypatch.setattr(local_install, "llama_server_artifact_key", lambda: "bad") 296 297 def fail_pin() -> None: 298 raise LocalProviderError("unsupported_platform", "unsupported test platform") 299 300 monkeypatch.setattr(local_install, "pin_for_current_platform", fail_pin) 301 302 check = fit_report._local_platform_check() 303 304 assert check.severity == "blocked" 305 assert check.detail == "unsupported test platform"