fix(kernel,server,tui,inference): generic resource gauge + F-002/F-003/F-004
- generic SystemResourceProbe: owner-agnostic /proc/meminfo system RAM overlaid on the vendor GPU probe, wired on both managed and static paths so the VRAM/GPU/RAM gauge renders with an external llama-server (was dormant) - F-002: classify provider 4xx (e.g. llama.cpp 400) as terminal, not retryable (except 408/429); stops retrying deterministic request failures to exhaustion - F-003: FileSystemPromptLoader expands leading ~ / ~/ to user home - F-004: map InferenceFailedEvent + RetryAttemptedEvent to new ServerMessage.InferenceFailed / RetryAttempted, decoded+rendered in tui-go; ArtifactContentStoredEvent explicitly mapped to null (internal, no warn) - tests: tilde expansion, SystemResourceProbe (static/managed/fail-soft)
This commit is contained in:
+55
@@ -0,0 +1,55 @@
|
||||
package com.correx.testing.contracts.model.inference
|
||||
|
||||
import com.correx.infrastructure.inference.commons.GpuStatus
|
||||
import com.correx.infrastructure.inference.commons.ResourceProbe
|
||||
import com.correx.infrastructure.inference.commons.ResourceSnapshot
|
||||
import com.correx.infrastructure.inference.commons.SystemResourceProbe
|
||||
import com.correx.infrastructure.inference.commons.UnavailableProbe
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.Assertions.assertNull
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
class SystemResourceProbeTest {
|
||||
|
||||
private val bytesPerKb = 1024L
|
||||
|
||||
@Test
|
||||
fun `overlays system RAM onto an unavailable GPU probe (static path, F-001 gauge)`() {
|
||||
val probe = SystemResourceProbe(
|
||||
gpuProbe = UnavailableProbe,
|
||||
systemRamReader = { (4L * bytesPerKb) to (16L * bytesPerKb) },
|
||||
)
|
||||
val snap = probe.probe()
|
||||
assertNull(snap.gpu) // no managed model / no GPU, yet RAM still renders
|
||||
assertNull(snap.processRssBytes)
|
||||
assertEquals(4L * bytesPerKb, snap.systemRamUsedBytes)
|
||||
assertEquals(16L * bytesPerKb, snap.systemRamTotalBytes)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `preserves the delegate GPU and process RSS while adding system RAM (managed path)`() {
|
||||
val gpuDelegate = ResourceProbe {
|
||||
ResourceSnapshot(
|
||||
gpu = GpuStatus(memoryUsedMb = 2048, memoryTotalMb = 8192, utilizationPct = 50),
|
||||
processRssBytes = 999L,
|
||||
)
|
||||
}
|
||||
val probe = SystemResourceProbe(
|
||||
gpuProbe = gpuDelegate,
|
||||
systemRamReader = { 100L to 200L },
|
||||
)
|
||||
val snap = probe.probe()
|
||||
assertEquals(2048L, snap.gpu?.memoryUsedMb)
|
||||
assertEquals(999L, snap.processRssBytes)
|
||||
assertEquals(100L, snap.systemRamUsedBytes)
|
||||
assertEquals(200L, snap.systemRamTotalBytes)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `fails soft to null system RAM when the reader is unavailable`() {
|
||||
val probe = SystemResourceProbe(gpuProbe = UnavailableProbe, systemRamReader = { null })
|
||||
val snap = probe.probe()
|
||||
assertNull(snap.systemRamUsedBytes)
|
||||
assertNull(snap.systemRamTotalBytes)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user