From 864b35c462f9623579b068e9cab848419f9e1d0f Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Tue, 21 Jul 2026 14:25:10 +0200 Subject: [PATCH] fix(coding-agent): show llama download progress --- packages/coding-agent/CHANGELOG.md | 1 + packages/coding-agent/src/extensions/llama/client.ts | 4 +++- packages/coding-agent/src/extensions/llama/index.ts | 6 +++--- packages/coding-agent/test/llama-extension.test.ts | 2 +- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/coding-agent/CHANGELOG.md b/packages/coding-agent/CHANGELOG.md index f12db68e..6ec19f0d 100644 --- a/packages/coding-agent/CHANGELOG.md +++ b/packages/coding-agent/CHANGELOG.md @@ -10,6 +10,7 @@ ### Fixed +- Fixed llama.cpp router download progress updates and removed redundant wording from model action confirmations. - Moved automatic model catalog network refresh out of startup initialization and into the running interactive and RPC modes. - Fixed persisted sessions being read and parsed twice when opened, reducing startup latency for large sessions ([#6793](https://github.com/earendil-works/pi/issues/6793)). - Fixed prompt-template defaults for all arguments (`${@:-default}` and `${ARGUMENTS:-default}`) ([#6695](https://github.com/earendil-works/pi/issues/6695)). diff --git a/packages/coding-agent/src/extensions/llama/client.ts b/packages/coding-agent/src/extensions/llama/client.ts index 0e58e1bd..45cd8f3a 100644 --- a/packages/coding-agent/src/extensions/llama/client.ts +++ b/packages/coding-agent/src/extensions/llama/client.ts @@ -107,9 +107,11 @@ function parseLoadProgress(data: unknown): LlamaProgress | undefined { function parseDownloadProgress(data: unknown): LlamaProgress | undefined { if (typeof data !== "object" || data === null) return undefined; + const nested = (data as { progress?: unknown }).progress; + const files = typeof nested === "object" && nested !== null ? nested : data; let done = 0; let total = 0; - for (const value of Object.values(data as Record)) { + for (const value of Object.values(files as Record)) { if (typeof value !== "object" || value === null) continue; const entry = value as { done?: unknown; total?: unknown }; if (typeof entry.done !== "number" || typeof entry.total !== "number") continue; diff --git a/packages/coding-agent/src/extensions/llama/index.ts b/packages/coding-agent/src/extensions/llama/index.ts index 4a38b3c6..5fc17b99 100644 --- a/packages/coding-agent/src/extensions/llama/index.ts +++ b/packages/coding-agent/src/extensions/llama/index.ts @@ -88,7 +88,7 @@ export default function llamaExtension(pi: ExtensionAPI): void { model: target.id, initialMessage: "Starting…", cancelTitle: "Stop loading?", - cancelMessage: `Stop loading ${target.id}?`, + cancelMessage: target.id, run: (signal, update) => client.loadAndWait(target.id, update, signal), cancel: () => client.unload(target.id), }); @@ -119,7 +119,7 @@ export default function llamaExtension(pi: ExtensionAPI): void { client: LlamaClient, model: LlamaModelInfo, ): Promise => { - if (!(await ui.confirm("Unload model?", `Unload ${model.id}?`))) return; + if (!(await ui.confirm("Unload model?", model.id))) return; await client.unloadAndWait(model.id); await syncCatalog(ctx, client); ctx.ui.notify(`Unloaded ${model.id}`); @@ -162,7 +162,7 @@ export default function llamaExtension(pi: ExtensionAPI): void { model, initialMessage: "Starting…", cancelTitle: "Stop download?", - cancelMessage: `Stop downloading ${model}?`, + cancelMessage: model, run: (signal, update) => client.downloadAndWait(model, update, signal), cancel: () => client.unload(model), }); diff --git a/packages/coding-agent/test/llama-extension.test.ts b/packages/coding-agent/test/llama-extension.test.ts index 3841af53..19dbdee7 100644 --- a/packages/coding-agent/test/llama-extension.test.ts +++ b/packages/coding-agent/test/llama-extension.test.ts @@ -220,7 +220,7 @@ describe("llama.cpp extension", () => { send({ model: "owner/repo:Q4_K_M", event: "download_progress", - data: { "https://example/model.gguf": { done: 512, total: 1024 } }, + data: { progress: { "https://example/model.gguf": { done: 512, total: 1024 } } }, }); status = "unloaded"; send({ model: "owner/repo:Q4_K_M", event: "download_finished", data: {} });