From ad0989dda8dc6420d16aaaa6aa40c47917145342 Mon Sep 17 00:00:00 2001 From: "Danilo M." Date: Wed, 28 Oct 2026 09:16:00 +0100 Subject: assistant: unload the resident model from the settings page The Load button reads Unload on the loaded model and posts to the router's /models/unload. An error from the router lands in modelError, the same place a failed load reports, and the list is re-read either way. The model comes back on the next request for it or when the canvas opens. Co-Authored-By: Claude Opus 5.5 --- desktop/modules/assistant/AssistantModule.qml | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'desktop/modules/assistant/AssistantModule.qml') diff --git a/desktop/modules/assistant/AssistantModule.qml b/desktop/modules/assistant/AssistantModule.qml index a05556d..9e8adbc 100644 --- a/desktop/modules/assistant/AssistantModule.qml +++ b/desktop/modules/assistant/AssistantModule.qml @@ -362,6 +362,18 @@ Module { else { poll.left = 300; poll.start(); } }); } + // Frees the VRAM for every client; the next request for the model, or + // the canvas opening, loads it again. + function unloadModel(id) { + am.modelError = ""; + am.run(["curl", "-s", "-m", "30", "-X", "POST", "-H", "Content-Type: application/json", + "-d", JSON.stringify({ model: id }), am.routerRoot + "/models/unload"], null, (code, out) => { + let err = code === 0 ? "" : "the router did not answer"; + try { const e = JSON.parse(out).error; if (e) err = e.message; } catch (x) {} + if (err) am.modelError = `${id}: ${err}`; + am.listModels(); + }); + } // Called when the canvas opens and when its chat's model changes, with // the chat's model, else the preferred one: loaded if it is a router // model neither loaded nor loading. A cloud id is not in the router's -- cgit v1.2.3