feat(system): report per-model DRM VRAM (#12026)

* feat(system): report per-model DRM VRAM

Expose optional resident device memory for local backend process trees.
Deduplicate DRM clients and omit unsupported or incomplete readings.
Document accounting limits and preserve a measured zero in JSON.

Closes #11970.

Assisted-by: Codex:gpt-6

* fix(system): document trusted procfs reads

Scope G304 annotations to paths built from the fixed procfs root,
integer process IDs, and kernel directory entries. These reads accept
no user-controlled path components.

Assisted-by: Codex:GPT-6 gosec

---------

Co-authored-by: localai-org-maint-bot <306269227+localai-org-maint-bot@users.noreply.github.com>
This commit is contained in:
localai-org-maint-botandlocalai-org-maint-bot authored and GitHub committed 2026-09-27 21:18:34 +02:00
1 parent 5794495a37
commit f154bd990a
11 files changed
+399

No files matched your search

+3
View File
@@ -208,6 +208,9 @@ type SysInfoModel struct {
// when the model has no local process (a distributed worker holds it) or
// the process could not be read.
Process *SysInfoProcess `json:"process,omitempty"`
// SizeVRAM is DRM-accounted resident device memory in bytes. Nil means
// the backend process tree has no complete supported reading.
SizeVRAM *uint64 `json:"size_vram,omitempty"`
}
// SysInfoProcess is a point-in-time reading of one backend process.
+25
View File
@@ -0,0 +1,25 @@
// SPDX-License-Identifier: MIT
package schema_test
import (
"encoding/json"
"github.com/mudler/LocalAI/core/schema"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)
var _ = Describe("SysInfoModel memory", func() {
It("omits unavailable VRAM while preserving a measured zero", func() {
entry := schema.SysInfoModel{ID: "model"}
encoded, err := json.Marshal(entry)
Expect(err).NotTo(HaveOccurred())
Expect(string(encoded)).To(MatchJSON(`{"id":"model"}`))
zero := uint64(0)
entry.SizeVRAM = &zero
encoded, err = json.Marshal(entry)
Expect(err).NotTo(HaveOccurred())
Expect(string(encoded)).To(MatchJSON(`{"id":"model","size_vram":0}`))
})
})