AISpot

llama.cpp UI 新增 Discover,可瀏覽下載 HuggingFace GGUF 並斷點續傳

llama.cpp releases版本更新開發工具地端推論開源

llama.cpp 的圖形介面新增 Discover Models 檢視,可直接在應用內瀏覽並下載 HuggingFace 上的 GGUF 模型,由 Enable Discover Models 開關控制。下載支援暫停與續傳:暫停後保留已下載的分片檔案,重啟或重新開啟後仍能接著磁碟上的進度繼續。下載項按倉庫聚類,主權重會順帶拉取匹配的 draft sidecar(DFlash 優先於 MTP)以啟用投機解碼,決策模型等無法執行的模型已從目錄與搜尋中過濾。

llama.cpp 官方 UI 首次把 HuggingFace 模型發現與下載內建進應用,並支援斷點續傳、按倉庫聚類與 draft 自動配對,對在本地跑 GGUF 模型的人最有用。

原標題:b11714
閱讀原文

評分80 / 76(平均 78,門檻 60)
狀態精選

全文翻譯

ui:從 HF Hub 發現與下載模型(#29584) common:解析 - 下載標籤並列出快取的 sidecar 當沒有模型檔案匹配某個 Q4_0-mtp 風格的標籤時,該標籤現在會解析到 sidecar 檔案,因此單獨下載草稿模型或 mmproj 時確實會拉取該檔案。快取的 sidecar 檔案會作為獨立條目列出,因此該狀態在重啟後依然保留,而移除此類標籤時只會刪除該 sidecar。 Assisted-by: pi:zai-org/GLM-5.3 ui:markdown 中可選的經淨化的原始 HTML 為 MarkdownContent 新增 allowHtml 屬性:markdown 中找到的原始 HTML 會在 DOMPurify 淨化後渲染,而不是被轉義為字面文字。預設仍保持轉義。 Assisted-by: pi:GLM-5.3-Flash ui:新增發現模型元件 Discover 介面:帶有搜尋和骨架屏的精選目錄列表、帶有 readme、後設資料、Hub 統計資訊和下載選項的詳情面板,以及替代普通進度條的獨立下載進度條。量化下載按鈕用新的 xs 觸發器設定其 select 的尺寸,因此該 select 獲得了該尺寸以及柔和盒外觀。當某個倉庫失敗時,store 會保持不完整,以便下次掛載時重試。 Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash ui:將發現檢視放入模型管理器 管理器對話方塊獲得了它的第二個檢視:Discover Models 行動號召會讓表格淡出、讓標題連同其指南針標記一起滑動,並讓發現介面淡入;箭頭按鈕則返回表格。 Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash 衝突: tools/ui/src/lib/components/ui/button/button.svelte ui:新增啟用發現模型設定 該標誌用於控制瀏覽和下載 HuggingFace GGUF 模型,因此它宣告在 discover 層;上方的 manager 層中的倉庫樹查詢會從這裡讀取它。 Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash ui:從暫停點恢復模型下載 已停止的下載會保留其部分檔案而不是刪除它,因此重新提交該標籤會從磁碟恢復。第一條進度記錄現在帶有恢復偏移量,暫停快照會保留到恢復後的條目中,並且暫停一經請求就會立即生效。 Assisted-by: pi ui:讓下載項在發現列表中置頂 發現側邊欄會將正在執行的下載列在建議模型之上,並在查詢處於活動狀態時讓位。暫停的下載會留在管理器表格中,在那裡可以恢復或刪除。 Assisted-by: pi ui:讓恢復已暫停的下載正常工作 重新發布一個已暫停下載的標籤時,會觸發路由器的“already exists”檢查,因為已暫停的下載會將其條目標記為 DOWNLOADED,直到下一次重新載入:現在,一個未執行的下載條目會被替換並繼續。當請求仍然失敗時,UI 會保留已暫停的行,而不是將其丟棄並看起來已完成。 Assisted-by: pi ui:記住未完成的模型下載 部分檔案以其內容雜湊命名,因此一旦路由器重啟,磁碟上沒有任何資訊說明它屬於哪個模型。路由器現在會保留它啟動的下載的標籤,在下載完成或被刪除時清除標籤,並將剩餘項列為仍在下載,而不啟動任何內容。UI 在每次獲取列表時將這些標籤視為已暫停,因此重新整理或全新開啟會顯示一個未完成的下載,並可以從磁碟上已有的檔案繼續它。 Assisted-by: pi ui:在 chip 上顯示已暫停下載的狀態 已暫停的 quant chip 在靜止時顯示為已暫停,就像執行中的 chip 顯示其旋轉指示器一樣,並在懸停時提供繼續操作。選擇器的下載行在其取消操作旁邊增加一個“在 Discover 中檢視”操作。 Assisted-by: pi ui:預設摺疊下載選項 可複製的下載命令初始為摺疊狀態,以便選項行處於首位;展開它仍只需單擊一次。 Assisted-by: pi ui:將決策模型排除在 hub 列表之外 決策模型以校準機率而不是文字作答,因此 llama-ui 無法執行它們:hub 資料層按 decision-model 標籤或 text-classification 管道為鍵,將它們從目錄和每次搜尋中移除。 Assisted-by: pi ui:將下載標籤讀取為 quant 和 sidecar 一個 <repo>:<quant>-<sidecar> 標籤現在會解析為其 quant 和 sidecar,而不是一個不透明的 quant token,並且 ModelsService.draftSidecarsByRepo 會按 repo 收集路由器列表中的僅 sidecar 條目,取代 models store 中的內聯副本。 Assisted-by: pi ui:將 draft 下載聚類在其主模型下 被跟蹤的下載按 repo 分組:主權重在前,draft sidecar 作為緊湊的子行位於其條目內,出現在選擇器、discover 列表和管理器表格中。主模型的控制會暫停、繼續和取消整個聚類,並且管理器的下載行會選擇到配置窗格中。 Assisted-by: pi ui:從表格行對已跟蹤下載執行操作 表格將其聚類的 draft 子行傳遞給模型行。A 行的操作會級聯暫停和恢復,進行中的行提供取消下載,而已暫停的行保留從磁碟刪除,確認對話方塊的文案也會跟隨狀態。 Assisted-by: pi ui : 讓下載擁有自己的配置面板 選擇一個被跟蹤的下載會以下載模式開啟該面板:帶暫停、恢復和取消的即時進度,以及 See in Discover,而不是沒有檔案的模型無法提供的後設資料和載入操作。 Assisted-by: pi ui : 讓 discover 詳情自行獲取資料並具有回應式 ModelsDiscoverDetailsContainer 負責詳情、樹和 readme 的獲取,使 discover 檢視之外的宿主也能渲染該面板,並且詳情佈局使用容器查詢而非視口斷點來適配窄面板。 Assisted-by: pi ui : 隨主模型下載匹配的草稿 主量化下載現在會拉取倉庫提供的最首選型別的量化匹配草稿(DFlash 先於 MTP),發出後不等待,因此當主模型下載完成時,投機解碼已就緒。手動草稿 chip 仍然可用;選項行在窄面板中也會摺疊為一列。 Assisted-by: pi ui : 預設關閉 discover,並將其與 hub 設定聯動 Discover Models 初始為未選中。啟用它會開啟 Hugging Face Hub 設定,停用它會將其重新關閉,因此該核取方塊永遠不會說謊;在 discover 關閉時,hub 設定仍可單獨用於顯示資料。儲存狀態和重置狀態在載入時以相同方式校正。 Assisted-by: pi ui : 在管理器檢視中開啟管理模型對話方塊 該對話方塊現在會在管理器上開啟,而不是返回到上一個檢視;在設定允許時,discover 條目仍會進入 discover 檢視,並且 discover 介面會跟隨設定的狀態。 Assisted-by: pi ui : 給 discover 搜尋留出聚焦環的空間 粘性搜尋欄從面板邊緣內縮,使焦點環保持在滾動容器內,並且各行會在不透明欄後面滾動,而不是穿過它。 Assisted-by: pi common: 在列表中確定 sidecar 名稱,並丟棄未完成的部分檔案 中綴或尾隨的 sidecar token 是有歧義的:草稿頭會使用它(Model-MTP-BF16.gguf),帶內嵌頭的完整模型也會使用它(Model-Q8D-MTP.gguf)。這樣的名稱只有在與同一家族中不含 token 的主權重相鄰時才是 sidecar,而名稱中任意位置的 mmproj 或 imatrix,或前導 token,會單獨決定(mmproj_f16.gguf)。 quant 標籤始終攜帶其位數,因此一個未以 quant 命名的 sidecar(mtp-Model-it.gguf)會得到裸標籤:listing、plan 和 remove 都使用它。imatrix 標籤會解析為它自己的 plan 槽位,會被下載,但從未接入 params。 remove 像下載那樣解析標籤,並刪除每個已計劃 blob 的部分檔案,因此取消正在執行的下載,或丟棄早先執行留下的未完成下載,都不會在磁碟上留下任何東西。 路由器在呼叫前後傳遞其 token 並釋放其鎖,並以原子寫入記錄未完成的下載。 llama download 在僅 sidecar 的 plan 上成功,並列印其路徑。 ui:將對話方塊檢視和草稿狀態移入列舉和常量 models 對話方塊的檢視變成 ModelsDialogView 列舉,草稿子行的狀態加入 ModelRowDownloadState,檢視淡入淡出和複製反饋重置移到 ui 常量,對話方塊的羅盤標記來自 DISCOVER_ICON。 Assisted-by: pi ui:移除未使用的 discover 表面 已死亡的 openDiscoverModels 孿生項、被註釋掉的命令分隔線、詳情面板未使用的 onClose 及其頭部的關閉按鈕,以及一個多餘的型別轉換都被移除;命令的複製反饋加入共享重置常量。 Assisted-by: pi ui:精簡下載選項註釋並高亮聊天模板 選項面板及其 chips 所攜帶的註釋冗長度縮減到只保留不明顯的原因,聊天模板對話方塊通過 SyntaxHighlightedCode 以 jinja 渲染,而不是普通的 pre 塊。 Assisted-by: pi common:只有 .gguf 檔案才是 sidecar,並且 mmproj/imatrix 作為完整單詞 一個命名像 sidecar 的非 GGUF 檔案(quantization-mmproj-Q8_0.json)會被選作 mmproj,而模型名稱中更長單詞內部的 sidecar 單詞(Phi-2-OmniMatrix.i1-Q4_K_M.gguf)會丟棄該模型。 ui:按 quant 去重草稿 sidecar 徽章 草稿 sidecar 徽章按 kind 和 repo 去重,卻沒有按 quant 去重,因此當一個草稿以兩個 quant 快取時,只有一個徽章留存下來,而刪除另一個主 quant 時找不到可用來移除其 sidecar 的徽章。 還恢復了當 clusters 方法落在其上方時丟失的 getDownloadEntries 文件。 Assisted-by: pi (zai-org/GLM-5.3-Flash) ui:採用不完整下載狀態並移除 paused-ids 登錄檔 store 根據一個它沒有本地狀態的 downloading 條目推斷出未完成的下載,這會誤讀一個正在另一箇中執行的下載 標籤頁被標記為已暫停,並提供一個伺服器會拒絕的恢復。列表現在帶有“incomplete”狀態,因此採用邏輯直接以此為依據。 暫停的 id 不再需要在 localStorage 中保留:伺服器會在重啟之間記住它們,而且進度快照在重新載入後本來就已經過時。過時的 localStorage 鍵已被移除。 協助者:pi (zai-org/GLM-5.3-Flash) ui:讓暫停和取消級聯按量化匹配 暫停、恢復和取消會級聯到倉庫的每個草稿 sidecar,而刪除只作用於量化匹配的那些,因此取消一個 Q4_0 下載也會殺掉屬於另一個量化主模型的 Q8_0 草稿。現在每個級聯都作用於量化匹配的草稿,與刪除會一併帶走的內容一致。 協助者:pi (zai-org/GLM-5.3-Flash) ui:合併重複的草稿副行標記 已下載和進行中的分支重複了相同的連線符、標籤和徽章標記;一個帶條件尾部的塊讓兩種狀態保持同步。 協助者:pi (zai-org/GLM-5.3-Flash) ui:從淨化後的模型卡片 html 中清除定位樣式 style 屬性仍被允許用於 KaTeX 輸出,這會讓第三方卡片在應用上繪製一個 fixed 覆蓋層。sanitize 鉤子會丟棄 position:fixed 和 position:absolute 值,並且不碰 KaTeX 佈局樣式。 協助者:pi (zai-org/GLM-5.3-Flash) ui:讓 discover 掛載時的 fetch 只執行一次,並複用共享的 repoOf 輔助函式 fetch() 在掛載 effect 內同步切換其載入標誌,這導致每次切換都會重新執行 fetch,並無休止地重試失敗的 catalog 倉庫;該 effect 現在取消跟蹤該呼叫。本地 repoOf 副本和重複的 services 匯入讓位於共享輔助函式。 協助者:pi (zai-org/GLM-5.3-Flash) ui:將 spec-type 對映收窄到草稿 sidecar SPEC_TYPE 為它從不與之一起索引的 aux sidecar 攜帶了空條目;該對映和 command 元件現在通過 draftBadgeOf 輔助函式把徽章型別定為 draft sidecar,而不是使用型別斷言。 協助者:pi (zai-org/GLM-5.3-Flash) ui:為 decision-model 標籤和 markdown 快取鍵命名 decision-model hub 標籤和 pipeline 標籤移入 huggingface 常量中,緊挨其他 pipeline 標籤,並且 markdown 轉換快取字首獲得名稱,而不是裸的單字母標記。 協助者:pi (zai-org/GLM-5.3-Flash) ui:通過一次真值檢查讀取 discover 設定 有三處用 !== false 讀取該設定,一處用 Boolean(); 現在所有四個都以相同的方式讀取它。 Assisted-by: pi (zai-org/GLM-5.3-Flash) ui: 將模型對話方塊檢視與其列舉進行比較 模板在三處將檢視狀態與 'manage' 字面量進行了比較,而指令碼使用了列舉。 Assisted-by: pi (zai-org/GLM-5.3-Flash) nit: 移除 draft sidecar 徽標前的 + server: 將未完成的下載列為 incomplete 一個從未完成的下載被報告為 "downloading",這與一個活躍下載所攜帶的狀態相同,因此客戶端無法區分正在進行的下載和已終止的下載。unfinished-downloads 中記住的標籤現在列在一個專用的 "incomplete" 狀態下,沒有例項。 Assisted-by: pi (zai-org/GLM-5.3-Flash) server: 像 -hf 那樣下載模型及其 sidecar 解析回到 master。POST /models 接收要隨模型拉取的 sidecar 型別(預設為 mmproj),下載子程序將它們作為 -hf 標誌獲取,因此伺服器選擇檔案。/models 僅列出真實模型,每個模型都帶有其磁碟上已有的 sidecar,並且未完成的下載在重啟後保留其 sidecar。已停止的下載保留其部分檔案以供下次嘗試,DELETE 通過下載所遵循的相同計劃清除它們。 ui: 將 sidecar 作為其模型的引數下載 下載選項保留其 chips,但 chip 不再發布 sidecar 標籤:儲存將其對映到其模型以及要拉取的 sidecar 型別,quant chip 在同一下載中獲取其伴隨 draft,並且 draft 徽標來自每個快取模型所列出的 sidecar。 當再次發布時,伺服器會新增快取模型缺少的 sidecar,而 DELETE 會移除快取模型的單個 sidecar。 ui : 在 draft 徽標中映象伺服器的 sidecar 查詢 伺服器通過權重所在目錄中的區分大小寫的 <kind>- 標記來解析 sidecar。UI 寬鬆地匹配了該標記,因此徽標可能提供伺服器永遠不會拉取的 draft。 Assisted-by: DeepSeek-V4.1-Flash ui : 隨模型下載發布其 sidecar 型別 儲存為每個模型保留一個下載:chip 的型別與模型自身的 sidecar 一起攜帶,並且下載行不再擴充套件為每個 sidecar 一行。Draft 徽標目前尚無自己的 quant,因此快取模型的 sidecar 永遠不會被標記為模型的 quant。 Assisted-by: DeepSeek-V4.1-Flash ui : 將 quant 的 draft 合併到其下載 chip 中 每個 quant 一個 chip,其 draft 徽標位於其中,其大小覆蓋兩者 檔案。草稿就是伺服器會選中的檔案:同一目錄, 精確量化,否則就是最接近的位深,因此一個 4 位模型可以配一個 16 位頭。 Assisted-by: DeepSeek-V4.1-Flash ui:從管理器和選擇器中移除草稿下載行 現在每個模型仍然只有一行下載:草稿隨它一起,而行 從列表中讀取磁碟上的附屬檔案,而不是把附屬檔案條目 與它們的模型配對。暫停、恢復和取消作用於模型自己的下載。 Assisted-by: DeepSeek-V4.1-Flash ui:讓發現頁下載列表每個模型保持一行 列表以每個正在下載的模型一行開頭,其附屬檔案作為子行。 一行只為伺服器能夠解析的草稿型別顯示徽章,因此徽章永遠不會 比其查詢會選中的檔案存活得更久。 Assisted-by: DeepSeek-V4.1-Flash ui:讓發現頁標籤在深色模式下保持可讀 後設資料標籤、聊天模板按鈕和 View on Hugging Face 連結 帶有微弱邊框,並且在對話方塊背景上沒有表面,因此它們 幾乎不可見。它們現在採用三級按鈕表面,其圖示使用 size-* 設定尺寸, 這樣變體的基礎規則就不會影響它們。 Assisted-by: DeepSeek-V4.1-Flash ui:將草稿貫穿下載選項 每個主量化一個標籤,其草稿以徽章顯示在其上,並且該標籤的已下載狀態 覆蓋兩個檔案。草稿位於一個可選的核取方塊之後,並帶有內聯 型別選擇,並且每一行開啟自己的命令:

由 AI 翻譯,以原文為準。

原文
ui : Discover & Download Models from HF Hub ( #29584 ) common : resolve - download tags and list cached sidecars A Q4_0-mtp style tag now resolves the sidecar file when no model file matches it, so a solo draft or mmproj download actually pulls the file. Cached sidecar files list as their own entries so the state survives a restart, and removing such a tag deletes only the sidecar. Assisted-by: pi:zai-org/GLM-5.3 ui : optional sanitized raw HTML in markdown Add an allowHtml prop to MarkdownContent: raw HTML found in the markdown is rendered after DOMPurify sanitization instead of being escaped as literal text. Default stays escaped. Assisted-by: pi:GLM-5.3-Flash ui : add the discover models components The Discover surface: the curated-catalog list with its search and skeletons, the details pane with its readme, metadata, Hub stats and download options, and the standalone download progress bar that replaces the plain one. The quant download button sizes its select with a new xs trigger, so the select gains that size and the muted box look. The store stays incomplete when a repo fails, so the next mount retries it. Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash ui : put the discover view in the models manager The manager dialog gains its second view: the Discover Models call to action fades the table out, slides the title with its compass mark, and fades the discover surface in; the arrow button returns to the table. Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash Conflicts: tools/ui/src/lib/components/ui/button/button.svelte ui : add the Enable Discover Models setting The flag gates browsing and downloading HuggingFace GGUF models, so it is declared on the discover layer; the repo-tree lookup in the manager layer above reads it from here. Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash ui : resume model downloads from the pause point A stopped download keeps its partial file instead of deleting it, so re-posting the tag resumes from disk. The first progress record now carries the resume offset, the paused snapshot survives into the resumed entry, and a pause settles as soon as it is requested. Assisted-by: pi ui : lead the discover list with downloads The discover sidebar lists running downloads above the suggested models, and steps aside while a query is active. A paused download stays in the manager table, where it is resumed or dropped. Assisted-by: pi ui : make resuming a paused download work Re-posting the tag of a paused download hit the router's "already exists" check, because a paused download parks its entry as DOWNLOADED until the next reload: a download entry that is not running is now replaced and resumed. The UI keeps the paused row when the request still fails, instead of dropping it and looking finished. Assisted-by: pi ui : remember unfinished model downloads A partial file is named after its content hash, so nothing on disk says which model it belongs to once the router restarts. The router now keeps the tags of the downloads it started, clears a tag when the download finishes or is deleted, and lists what is left as still downloading without starting anything. The UI adopts those tags as paused on every list fetch, so a refresh or a fresh open shows an incomplete download and can resume it from the files already on disk. Assisted-by: pi ui : show a paused download's state on its chip A paused quant chip reads as paused at rest, the way a running one shows its spinner, and offers the resume action on hover. The selector's download row gets a View in Discover action beside its cancel. Assisted-by: pi ui : collapse the download options by default The copyable download command starts collapsed so the option rows lead; expanding it stays one click away. Assisted-by: pi ui : keep decision models out of the hub lists Decision models answer with calibrated probabilities instead of text, so llama-ui cannot run them: the hub data layer drops them from the catalog and every search, keyed by the decision-model tag or a text-classification pipeline. Assisted-by: pi ui : read download tags as quant and sidecar A <repo>:<quant>-<sidecar> tag now parses into its quant and sidecar instead of one opaque quant token, and ModelsService.draftSidecarsByRepo collects the router listing's sidecar-only entries per repo, replacing the inline copy in the models store. Assisted-by: pi ui : cluster draft downloads under their main model Tracked downloads group by repo: the main weights lead and the draft sidecars ride inside their item as compact sub-lines, on the selector, the discover list and the manager table. The main model's controls pause, resume and cancel the whole cluster, and the manager's download rows select into the configuration pane. Assisted-by: pi ui : act on tracked downloads from the table rows The table passes its clusters' draft sub-lines to the model rows. A row's actions cascade pause and resume, an in-flight row offers Cancel download while a paused one keeps Delete from disk, and the confirm dialog's copy follows the state. Assisted-by: pi ui : give downloads a configuration pane of their own Selecting a tracked download opens the pane in a download mode: live progress with pause, resume and cancel, and See in Discover, instead of metadata and load actions that a model without files cannot offer. Assisted-by: pi ui : make the discover details self-fetching and responsive ModelsDiscoverDetailsContainer owns the details, tree and readme fetches so hosts outside the discover view can render the pane, and the details layout adapts to narrow panes with container queries instead of viewport breakpoints. Assisted-by: pi ui : download a matching draft with the main model A main quant download now pulls the quant-matched draft of the most preferred kind the repo ships (DFlash before MTP), fire-and-forget, so speculative decoding is ready when the main lands. Manual draft chips stay available; the options row also collapses to one column in narrow panes. Assisted-by: pi ui : keep discover off by default and couple it with the hub setting Discover Models starts unchecked. Enabling it turns the Hugging Face Hub setting on and disabling it turns it back off, so the checkbox never lies; with discover off the hub setting stays available on its own for the display data. Stored and reset state are corrected the same way on load. Assisted-by: pi ui : open the manage models dialog on the manager view The dialog now opens on the manager instead of returning to the last view, discover entries still land on the discover view while the setting allows it, and the discover surfaces follow the setting's state. Assisted-by: pi ui : give the discover search room for its focus ring The sticky search bar insets from the panel edges so the focus ring stays inside the scroll container, and rows scroll behind an opaque bar instead of through it. Assisted-by: pi common: settle sidecar names on the listing and drop unfinished partials An infix or trailing sidecar token is ambiguous: draft heads use it (Model-MTP-BF16.gguf), so do full models with embedded heads (Model-Q8D-MTP.gguf). Such a name is a sidecar only next to token-free main weights of the same family, while mmproj or imatrix anywhere in the name, or a leading token, decides alone (mmproj_f16.gguf). A quant tag always carries its bit count, so a sidecar named after no quant (mtp-Model-it.gguf) gets the bare tag: the listing, the plan and remove all use it. An imatrix tag resolves into a plan slot of its own, downloaded but never wired into the params. remove resolves the tag the way a download does and deletes the partial files of every planned blob, so cancelling a running download or dropping one left unfinished by an earlier run leaves nothing on disk. The router passes its token and releases its lock around the call, and records the unfinished downloads with an atomic write. llama download succeeds on a sidecar-only plan and prints its paths. ui : move dialog views and draft states into enums and constants The models dialog's views become the ModelsDialogView enum, the draft subline's states join ModelRowDownloadState, the view fade and the copy-feedback reset move to ui constants, and the dialog's compass marks come from DISCOVER_ICON. Assisted-by: pi ui : drop the unused discover surface The dead openDiscoverModels twin, the commented-out command divider, the details pane's unused onClose and its header's close button, and a redundant type cast leave; the command's copy feedback joins the shared reset constant. Assisted-by: pi ui : trim the download option comments and highlight the chat template The comment verbosity the options panel and its chips carried shrinks to the non-obvious why, and the chat template dialog renders through SyntaxHighlightedCode as jinja instead of a plain pre block. Assisted-by: pi common: only a .gguf file is a sidecar, and mmproj/imatrix as whole words A non-GGUF file named like a sidecar (quantization-mmproj-Q8_0.json) is picked as the mmproj, and a sidecar word inside a longer word of a model name (Phi-2-OmniMatrix.i1-Q4_K_M.gguf) drops the model. ui: dedupe draft sidecar badges per quant The draft sidecar badges deduped by kind and repo without the quant, so with a draft cached at two quants only one badge survived, and a delete of the other main quant found no badge to remove its sidecar with. Also restores the getDownloadEntries doc lost when the clusters method landed above it. Assisted-by: pi (zai-org/GLM-5.3-Flash) ui: adopt the incomplete download status and drop the paused-ids registry The store inferred an unfinished download from a downloading entry it held no local state for, which misread a download running in another tab as paused and offered a resume the server rejects. The listing carries the "incomplete" status now, so the adoption keys off it directly. The paused ids no longer need to survive in localStorage: the server remembers them across restarts, and the progress snapshot was stale after a reload anyway. The stale localStorage key is removed. Assisted-by: pi (zai-org/GLM-5.3-Flash) ui: quant-match the pause and cancel cascades Pause, resume and cancel cascaded to every draft sidecar of the repo while delete only took the quant-matched ones, so canceling a Q4_0 download also killed a Q8_0 draft that belongs to another quant's main. Every cascade acts on the quant-matched drafts now, matching what a delete takes with it. Assisted-by: pi (zai-org/GLM-5.3-Flash) ui: collapse the duplicated draft subline markup The downloaded and in-flight branches repeated the identical connector, label and badge markup; one block with a conditional tail keeps the two states in sync. Assisted-by: pi (zai-org/GLM-5.3-Flash) ui: scrub positioned styles out of sanitized model card html The style attribute stays allowed for the KaTeX output, which let a third party card draw a fixed overlay over the app. The sanitize hook drops position:fixed and position:absolute values and leaves the KaTeX layout styles alone. Assisted-by: pi (zai-org/GLM-5.3-Flash) ui: run the discover mount fetch once and reuse the shared repoOf helper fetch() toggles its loading flag synchronously inside the mount effect, which re-ran the fetch on every toggle and retried failed catalog repos endlessly; the effect now untracks the call. The local repoOf copy and the duplicate services import give way to the shared helpers. Assisted-by: pi (zai-org/GLM-5.3-Flash) ui: narrow the spec-type map to the draft sidecars SPEC_TYPE carried empty entries for the aux sidecars it is never indexed with; the map and the command component now type the badge as a draft sidecar through a draftBadgeOf helper instead of a cast. Assisted-by: pi (zai-org/GLM-5.3-Flash) ui: name the decision-model tags and markdown cache keys The decision-model hub tag and pipeline tag move into the huggingface constants next to the other pipeline tags, and the markdown transform cache prefixes get names instead of bare one-letter tokens. Assisted-by: pi (zai-org/GLM-5.3-Flash) ui: read the discover setting through one truthiness check Three places read the setting with !== false and one with Boolean(); all four read it the same way now. Assisted-by: pi (zai-org/GLM-5.3-Flash) ui: compare the models dialog view against its enum The template compared the view state against the 'manage' literal in three spots while the script used the enum. Assisted-by: pi (zai-org/GLM-5.3-Flash) nit: Remove + before draft sidecar badge server: list unfinished downloads as incomplete A download that never finished was reported as "downloading", the same status a live download carries, so a client could not tell a running download from a dead one. The tags remembered in unfinished-downloads now list under a dedicated "incomplete" status, without an instance. Assisted-by: pi (zai-org/GLM-5.3-Flash) server: download a model with its sidecars as -hf does Resolution goes back to master. POST /models takes the sidecar kinds to pull with the model (mmproj by default) and the download child gets them as -hf flags, so the server picks the files. /models lists real models only, each with the sidecars it has on disk, and incomplete downloads keep their sidecars across restarts. A stopped download keeps its partial files for the next attempt, and DELETE purges them through the same plan the download follows. ui: download sidecars as parameters of their model The download options keep their chips, but a chip no longer posts a sidecar tag: the store maps it to its model and the sidecar kinds to pull, the quant chip takes its companion draft in the same download, and draft badges come from the sidecars each cached model lists. The server adds the sidecars a cached model lacks when it is posted again, and DELETE removes a single sidecar of a cached model. ui : mirror the server's sidecar lookup in draft badges The server resolves a sidecar by the case-sensitive <kind>- token in the same directory as the weights. The UI matched the token loosely, so a badge could offer a draft the server never pulls. Assisted-by: DeepSeek-V4.1-Flash ui : post the model's sidecar kinds with its download The store keeps one download per model: the chip's kinds ride along with the model's own sidecars, and a download row no longer expands into one row per sidecar. Draft badges carry no quant of their own yet, so a sidecar of a cached model is never labelled with the model's quant. Assisted-by: DeepSeek-V4.1-Flash ui : join a quant's draft into its download chip One chip per quant, its draft badged inside it and its size covering both files. The draft is the file the server would pick: the same directory, the exact quant, else the closest bit depth, so a 4-bit model can pair with a 16-bit head. Assisted-by: DeepSeek-V4.1-Flash ui : drop the draft download rows from the manager and selector A download is one row per model again: the drafts ride with it, and the rows read the sidecars on disk off the listing instead of pairing sidecar entries with their model. Pause, resume and cancel act on the model's own download. Assisted-by: DeepSeek-V4.1-Flash ui : keep the discover download list one row per model The list leads with one row per downloading model, its sidecars as sub-lines. A row badges only the draft kinds the server can resolve, so a badge never outlives the file its lookup would pick. Assisted-by: DeepSeek-V4.1-Flash ui : keep the discover chips readable in dark mode The metadata chips, the chat template button and the View on Hugging Face link carried a faint border and no surface over the dialog background, so they were near invisible. They take the tertiary button surface now, and their icons size with size-* so the variant's base rule leaves them alone. Assisted-by: DeepSeek-V4.1-Flash ui : carry the draft through the download options One chip per main quant, its draft badged on it and the chip's downloaded state covering both files. The drafts sit behind an opt-in checkbox with an inline type pick, and each row opens its own command: it pins the row's quant and only names the draft type, so -hfd is gone. Assisted-by: DeepSeek-V4.1-Flash ui : line the details skeleton up with the loaded pane Same root padding and container context as the loaded view, so the container queries resolve alike. The download options card pads its blocks instead of itself, the readme gets its card, and a description line stands in for the catalog paragraph. Assisted-by: DeepSeek-V4.1-Flash common : drop the partials of a removed sidecar Removing a sidecar alone left the .downloadInProgress files of the sidecars a download had planned in blobs/. The removal purges them through the same plan the download follows, and the test covers a finished draft beside an unfinished one, whose partial goes while the model keeps its files. Assisted-by: DeepSeek-V4.1-Flash server : name why a download is refused A model that is already downloading, or that is running, answered "already exists". It now says which: "is already downloading", or "is running, unload it first", both before the resumable check. The router test covers the two. Assisted-by: DeepSeek-V4.1-Flash ui : post a download once per click Two quick clicks on the same chip posted twice, and the second answer was "already exists". The store tracks the model as pending, returns early while it is pending or in flight, and reads it as in flight before the server answers, so the chip shows the download at once. The new client test pins the flows: one POST per double click, the chip reading downloaded once the list reports the model, a resume keeping its sidecars, a cancel dropping the whole download, and a reload restoring the paused state. Assisted-by: DeepSeek-V4.1-Flash ui : keep a plain download row the height of the others The sub-lines wrapper of a download row was rendered even with nothing in it, so its padding made the row taller than a plain one and the overlaid progress bar sat in that empty strip. It renders only with sub-lines now, in the selector and in the discover list, and the selector row takes the phone padding its neighbours have. Assisted-by: DeepSeek-V4.1-Flash ui : badge a repo's draft once The args of a loaded model and the listing of a cached one report the same draft in different words, one with the file's quant and one with the kind alone, so the merge kept both and a repo row showed the same kind twice. The badges merge per kind now, the args one winning as it knows the quant, and the test pins both sources of a real repo. Assisted-by: DeepSeek-V4.1-Flash server : report the sidecars of a preset or a download on its way A model the preset also names is registered as a preset, so its drafts were never reported and no row could badge them. A download on its way reported none either, though the record of the kinds it pulls is right there: those win over the plan now, the plan resolves through the preset's hf-repo, and a models dir stays out of it. Assisted-by: DeepSeek-V4.1-Flash ui : badge a download's drafts and open its model from the row A draft still coming down badges the model id now, the way a landed one does, while an on-disk draft keeps its checked sub-line. The row itself opens the model, the status slot beside it pauses or resumes, and the manager resolves a focus on a download row so its panel opens. Assisted-by: DeepSeek-V4.1-Flash common : report a removed sidecar that only had a partial Removing a sidecar alone dropped the result of the partial purge, so a sidecar that only ever landed as a .downloadInProgress blob answered false and the UI had no reason to refetch. The purge result is folded into the return now, and the test covers a partial-only removal. Assisted-by: DeepSeek-V4.1-Flash ui : ignore a pause while the download POST is still on its way The chip reads as downloading before the server answers, so a quick second click unloaded a model that had not started and left the store neither in flight nor paused. A pause returns early while the POST is pending, before it touches the feed or the paused marker. The client test holds the POST open and pins it. Assisted-by: DeepSeek-V4.1-Flash ui : offer a missing draft as its own chip A model already on disk without its draft had no way to add it: the quant chip carried the draft, so it read as a download of both. The quant chip keeps to its own state now, its joined draft shows only while it rides along or is on disk, and a downloaded quant missing its draft gets a chip of its own - badge, size, download - that posts the model with that kind, so the server keeps the files already there and pulls the draft. Assisted-by: DeepSeek-V4.1-Flash server : list a paused sidecar download by the files on disk A model on disk whose sidecar download stops keeps its unfinished record, and the listing reported the kinds that record plans as if they were on disk: the UI checked a draft that never landed and offered no way to add it. The planned kinds now stand in only while the download runs. chore: Clean up comments server : list sidecars only for a model that resolves from a HF repo A preset on a local file has no HF repo, yet the listing resolved its name as one: the plan threw on the invalid repo format and GET /models failed for every model. The sidecars now come from the repo a preset names or a cached model is listed under, and a local file lists without them. common : fix download cancel regression Signed-off-by: Adrien Gallouët [email protected] common : preserve model partials when removing sidecars Signed-off-by: Adrien Gallouët [email protected] server : one sidecar table and an unfinished downloads class Address review from @ggerganov . The sidecar kinds live in one table in common/download, mapping each name to its download option and plan file; the server validates, builds its options and lists cached sidecars through it instead of its own lists. The unfinished downloads move into server_unfinished_downloads, a record with its own mutex and a struct per entry, and server_models exposes them through unfinished_downloads_get and unfinished_downloads_remove. common: one sidecar table, and removals that keep shared files The resolution, the cached listing and the removal follow a single table of sidecar kinds, so a kind is declared once with its file keyword, whether it is a draft, its option and its plan file. The server reads the same table for the kinds it accepts, the default sidecars and the child flags. Removing a tag keeps the files another cached tag still loads, such as an mmproj named after the removed quant. A sidecar removed on its own goes for every tag that resolves it. An unfinished download records the exact paths of its partials when it starts. A removal deletes those without asking the hub, and keeps a partial another recorded download also writes. The record is taken once the child is spawned, and the files go under the models lock, so a download of the same tag cannot start while they are removed. server: drop stale partials and refuse a tag that resolves nothing Recording a download again deletes the partials of the earlier record that the new plan no longer writes, such as those of an older hub revision or of a sidecar the new request leaves out. A posted tag that resolves no file of the repo is refused before the download starts. Removing a model follows a single path, whether the reload erased its entry during the wait or not. server: fix the CI race between the router download tests The pytest workers run in parallel on one shared cache, so a download test could find the file another test had just fetched and see no progress, or start from the unfinished downloads record another test wrote. Each download test now runs on an empty cache of its own. server: refuse a DELETE of an unknown name and decide downloads in load() A DELETE of a name that is neither a model nor a recorded download went to common_download_remove, and without a tag it wiped the whole repo cache, including the files of a loaded quant or of a download on its way. Such a name is now not found, as it was before. A POST that downloads over an existing entry checked its state outside the lock, so a load of the same model in between got its instance killed. The checks now run in load(), under the lock, right before the spawn. The fake load time of the tests applies to model loads only, since a download worker loads none. server: add incomplete_sidecars to the /models API A sidecar added to a cached model and then paused kept its record, but the listing showed only the complete model, so a fresh UI lost the pause. The model entry now carries incomplete_sidecars, the kinds its unfinished download has not written yet; a POST with the kind resumes one and a DELETE with it drops its partial. common : drop a kept partial when a resume gets 416 Now that partials survive between attempts, an old or complete partial makes every retry fail with the same 416. Delete it so the next attempt can start over from zero. Signed-off-by: Adrien Gallouët [email protected] common: drop a kept partial when a resume gets 200 A server that ignores the range answers 200 to a resume, and the kept partial then fails every attempt the same way a 416 does. Drop it as well, so the next attempt starts over without a range. server: refuse a download that shares a partial with one on its way Two downloads of quants that share a file, the mmproj or an mtp picked by the closest bits, appended to the same partial and renamed a file with interleaved bytes. A download whose plan writes a partial that a running download also writes is now refused until that one is done. common : check the saved etag before resuming a partial download Before resuming, compare the etag saved with the partial to the one the server now serves. If it is missing or different, start over, so a resumed download never mixes bytes from two versions of the file. Signed-off-by: Adrien Gallouët [email protected] Signed-off-by: Adrien Gallouët [email protected] Co-authored-by: Pascal [email protected] Co-authored-by: Adrien Gallouët [email protected] Website: https://llama.app Attestations: https://github.com/ggml-org/llama.cpp/attestations/56975123 macOS/iOS: macOS Apple Silicon (arm64) macOS Apple Silicon (arm64, KleidiAI enabled) DISABLED macOS Intel (x64) iOS XCFramework Linux: Ubuntu x64 (CPU) Ubuntu arm64 (CPU) Ubuntu s390x (CPU) Ubuntu x64 (Vulkan) Ubuntu arm64 (Vulkan) Ubuntu x64 (CUDA 12) - CUDA 12.8 libraries Ubuntu x64 (CUDA 13) - CUDA 13.4 libraries Ubuntu arm64 (CUDA 13) - CUDA 13.4 libraries Ubuntu x64 (ROCm 10.0) Ubuntu x64 (OpenVINO) Ubuntu x64 (SYCL FP32) Ubuntu x64 (SYCL FP16) Linux arm64 (Snapdragon: CPU, Adreno GPU, Hexagon NPU) - setup guide Android: Android arm64 (CPU) Android arm64 (Snapdragon: CPU, Adreno GPU, Hexagon NPU) - setup guide Windows: Windows x64 (CPU) Windows arm64 (CPU) Windows arm64 (OpenCL Adreno) Windows x64 (CUDA 12) - CUDA 12.4 DLLs Windows x64 (CUDA 13) - CUDA 13.4 DLLs Windows arm64 (CUDA 13) - CUDA 13.4 DLLs Windows x64 (Vulkan) Windows arm64 (Vulkan) Windows x64 (OpenVINO) Windows x64 (SYCL) Windows x64 (ROCm 10.0) openEuler: DISABLED openEuler x86 (310p) openEuler x86 (910b, ACL Graph) openEuler aarch64 (310p) openEuler aarch64 (910b, ACL Graph) UI: UI

相關報導

X @ggerganovAI 評分42

llama.cpp v0.7.0 發布,llama serve 新增懶載入與推測解碼

llama.cpp 發布 v0.7.0,作者給出的範例命令是 llama serve -hf ggml-org/Qwen3.8-Flash-Next-GGUF:IQ4_NL --spec-type draft-mtp --lazy-mode on。命令通過 -hf 指定 Hugging Face 上的 Qwen3.8-Flash-Next GGUF 倉庫及 IQ4_NL 量化,並同時開啟 --lazy-mode 懶載入與 --spec-type draft-mtp 推測解碼。

llama.cpp releasesAI 評分45

llama.cpp b11572 新增 vLLM d3 模型支援

llama.cpp 發布 b11572,新增對 vLLM d3 模型的支援(d2 同步更新),並加入 pplx-decider 模型支援,同時澄清命名規則、加強校驗。該版本照例提供 macOS/iOS、Linux、Windows、Android、openEuler 的預編譯包,覆蓋 CUDA 12/13、ROCm 10.0、Vulkan、SYCL、OpenVINO 以及驍龍 CPU/Adreno GPU/Hexagon NPU 等後端。

llama.cpp releases● 精選AI 評分82

llama.cpp v0.6.0 發布:新增擴充套件 batch API 與 GLM-5.3-Flash 支援

llama.cpp 發布 v0.6.0,新增 llama_batch_ext 擴充套件 batch API,支援混合 token/embedding 輸入與 MTP、deepstack 狀態嵌入。本次加入 320B 的 GLM-5.3-Flash(GLM5-Next)文字+視覺混合模型、Clef 決策模型,以及 Qwen4Exp 的 MTP 投機解碼,官方稱在 DGX Spark 上解碼約快 1.5 倍。