personal memory agent
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"