Pre-Release / Continuous Build: Dies ist ein experimenteller Build, keine stabile Version.
ui : Discover & Download Models from HF Hub (#29584) * common : resolve - Download-Tags auflösen und zwischengespeicherte Sidecars auflisten Ein Tag im Q4_0-mtp-Stil löst nun die Sidecar-Datei auf, wenn keine Modelldatei dazu passt, sodass ein eigenständiger Draft- oder mmproj-Download die Datei tatsächlich lädt. Zwischengespeicherte Sidecar-Dateien werden als eigene Einträge aufgelistet, sodass der Zustand einen Neustart übersteht, und das Entfernen eines solchen Tags löscht nur das Sidecar. Assisted-by: pi:zai-org/GLM-5.3 * ui : optionales bereinigtes rohes HTML in Markdown Fügt eine allowHtml-Prop zu MarkdownContent hinzu: Rohes HTML im Markdown wird nach der Bereinigung durch DOMPurify gerendert, statt als wörtlicher Text escaped zu werden. Standardmäßig bleibt es escaped. Assisted-by: pi:GLM-5.3-Flash * ui : die Discover-Models-Komponenten hinzufügen Die Discover-Oberfläche: die kuratierte Katalogliste mit Suche und Skeletons, der Detailbereich mit Readme, Metadaten, Hub-Statistiken und Download-Optionen sowie die eigenständige Download-Fortschrittsleiste, die die schlichte ersetzt. Der Quant-Download-Button dimensioniert sein Select mit einem neuen xs- Trigger, sodass das Select diese Größe und den gedämpften Box-Look erhält. Der Store bleibt unvollständig, wenn ein Repo fehlschlägt, sodass der nächste Mount es erneut versucht. Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash * ui : die Discover-Ansicht in den Models-Manager einfügen Der Manager-Dialog erhält seine zweite Ansicht: Der Discover-Models-Aufruf zum Handeln blendet die Tabelle aus, schiebt den Titel mit seinem Kompass-Symbol und blendet die Discover-Oberfläche ein; der Pfeil-Button kehrt zur Tabelle zurück. Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash # Conflicts: # tools/ui/src/lib/components/ui/button/button.svelte * ui : die Einstellung Enable Discover Models hinzufügen Das Flag regelt das Durchsuchen und Herunterladen von HuggingFace-GGUF-Modellen, daher wird es auf der Discover-Ebene deklariert; die Repo-Tree-Abfrage in der darüberliegenden Manager-Ebene liest es von dort. Assisted-by: pi:llama.cpp/DeepSeek-V4.1-Flash * ui : Modell-Downloads ab der Pausenstelle fortsetzen Ein gestoppter Download behält seine Teil-Datei, statt sie zu löschen, sodass das erneute Posten des Tags von der Festplatte fortgesetzt wird. Der erste Fortschrittsdatensatz trägt nun das Resume-Offset, der pausierte Schnappschuss übersteht in den fortgesetzten Eintrag, und eine Pause wird sofort nach ihrer Anforderung wirksam. Assisted-by: pi * ui : die Discover-Liste mit Downloads anführen Die Discover-Seitenleiste listet laufende Downloads über den vorgeschlagenen Modellen auf und tritt zurück, während eine Abfrage aktiv ist. Ein pausierter Download bleibt in der Manager-Tabelle, wo er fortgesetzt oder entfernt wird. Assisted-by: pi * ui : das Fortsetzen eines pausierten Downloads funktionsfähig machen Das erneute Posten des Tags eines pausierten Downloads traf die "already exists"-Prüfung des Routers, weil ein pausierter Download seinen Eintrag als DOWNLOADED ablegt, bis das nächste Neuladen erfolgt: Ein Download-Eintrag, der nicht läuft, wird nun ersetzt und fortgesetzt. Die UI behält die pausierte Zeile, wenn die Anfrage weiterhin fehlschlägt, statt sie zu verwerfen und fertig auszusehen. Assisted-by: pi * ui : unabgeschlossene Modell-Downloads merken Eine Teil-Datei wird nach ihrem Inhalts-Hash benannt, sodass nichts auf der Festplatte verrät, zu welchem Modell sie gehört, sobald der Router neu startet. Der Router behält nun die Tags der von ihm gestarteten Downloads, entfernt ein Tag, wenn der Download abgeschlossen oder gelöscht wird, und listet den Rest als weiterhin herunterladend, ohne etwas zu starten. Die UI übernimmt diese Tags bei jedem Listen-Abruf als pausiert, sodass eine Aktualisierung oder ein frisches Öffnen einen unvollständigen Download zeigt und ihn aus den bereits auf der Festplatte vorhandenen Dateien fortsetzen kann. Assisted-by: pi * ui : den Zustand eines pausierten Downloads auf seinem Chip anzeigen Ein pausierter Quant-Chip zeigt im Ruhezustand als pausiert an, so wie ein laufender seinen Spinner zeigt, und bietet beim Hover die Resume-Aktion an. Die Download-Zeile des Selektors erhält eine View-in-Discover-Aktion neben deren Abbrechen. Assisted-by: pi * ui : die Download-Optionen standardmäßig einklappen Der kopierbare Download-Befehl beginnt eingeklappt, damit die Optionszeilen führend sind; das Aufklappen bleibt einen Klick entfernt. Assisted-by: pi * ui : Decision-Modelle aus den Hub-Listen fernhalten Decision-Modelle antworten mit kalibrierten Wahrscheinlichkeiten statt mit Text, sodass llama-ui sie nicht ausführen kann: Die Hub-Datenschicht entfernt sie aus den Katalog, und jede Suche ist nach dem Decision-Model-Tag oder einer Text-Classification-Pipeline verschlüsselt. Assisted-by: pi * ui : Download-Tags als Quant und Sidecar einlesen Ein `:-`-Tag wird nun in sein Quant und Sidecar zerlegt statt als ein intransparentes Quant-Token, und ModelsService.draftSidecarsByRepo sammelt die nur-Sidecar-Einträge des Router-Listings pro Repo und ersetzt die Inline-Kopie im Models-Store. Assisted-by: pi * ui : Draft-Downloads unter ihrem Hauptmodell gruppieren Verfolgte Downloads gruppieren sich nach Repo: die Haupt-Gewichte führen und die Draft-Sidecars fahren als kompakte Unterzeilen in ihrem Eintrag mit, im Selector, in der Discover-Liste und in der Manager-Tabelle. Die Steuerelemente des Hauptmodells pausieren, setzen fort und brechen den ganzen Cluster ab, und die Download-Zeilen des Managers wählen in den Konfigurationsbereich. Assisted-by: pi * ui : Verfolgte Downloads aus den Tabellenzeilen steuern Die Tabelle übergibt die Draft-Unterzeilen ihrer Cluster an die Modellzeilen. Die Aktionen einer Zeile wirken kaskadierend auf Pause und Fortsetzen, eine laufende Zeile bietet Cancel download an, während eine pausierte Delete from disk behält, und der Text des Bestätigungsdialogs folgt dem Zustand. Assisted-by: pi * ui : Downloads einen eigenen Konfigurationsbereich geben Das Auswählen eines verfolgten Downloads öffnet den Bereich in einem Download-Modus: Live- Fortschritt mit Pause, Fortsetzen und Abbrechen, sowie See in Discover, anstelle von Metadaten- und Lade-Aktionen, die ein Modell ohne Dateien nicht anbieten kann. Assisted-by: pi * ui : Die Discover-Details selbständig abrufen lassen und responsiv machen ModelsDiscoverDetailsContainer besitzt die Details-, Tree- und Readme- Abrufe, damit Hosts außerhalb der Discover-Ansicht den Bereich darstellen können, und das Details-Layout passt sich mit Container-Queries an schmale Bereiche an statt an Viewport-Breakpoints. Assisted-by: pi * ui : Einen passenden Draft zusammen mit dem Hauptmodell herunterladen Ein Haupt-Quant-Download zieht nun den quant-gematchten Draft der am höchsten prävinierten Art, die das Repo mitliefert (DFlash vor MTP), fire-and-forget, sodass speculative decoding bereit ist, wenn das Hauptmodell ankommt. Manuelle Draft-Chips bleiben verfügbar; die Optionen Zeile kollabiert auch in schmalen Bereichen zu einer Spalte. Assisted-by: pi * ui : Discover standardmäßig ausgeschaltet lassen und mit der Hub-Einstellung koppeln Discover Models beginnt ungeprüft. Das Aktivieren schaltet die Hugging Face Hub-Einstellung ein, das Deaktivieren schaltet sie wieder aus, sodass die Checkbox nie lügt; mit deaktiviertem Discover bleibt die Hub-Einstellung für die Anzeigedaten eigenständig verfügbar. Gespeicherter und zurückgesetzter Zustand werden beim Laden auf dieselbe Weise korrigiert. Assisted-by: pi * ui : Den Manage-Models-Dialog auf der Manager-Ansicht öffnen Der Dialog öffnet sich nun auf dem Manager statt zur letzten Ansicht zurückzukehren, Discover-Einträge landen weiterhin auf der Discover-Ansicht, solange die Einstellung es erlaubt, und die Discover-Oberflächen folgen dem Zustand der Einstellung. Assisted-by: pi * ui : Der Discover-Suche Raum für ihren Fokusring geben Die klebrige Suchleiste ist von den Panelrändern eingerückt, sodass der Fokusring im Scroll-Container bleibt, und Zeilen scrollen hinter einer opaken Leiste statt durch sie hindurch. Assisted-by: pi * common: Sidecar-Namen im Listing festlegen und unvollendete Partials verwerfen Ein Infix- oder nachgestelltes Sidecar-Token ist mehrdeutig: Draft-Heads nutzen es (Model-MTP-BF16.gguf), ebenso vollständige Modelle mit eingebetteten Heads (Model-Q8D-MTP.gguf). Ein solcher Name ist nur neben token-freien Hauptgewichten derselben Familie ein Sidecar, während mmproj oder imatrix irgendwo im Namen oder ein führendes Token allein entscheidet (mmproj_f16.gguf). Ein Quant-Tag trägt immer seine Bit-Anzahl, daher bekommt ein Sidecar, das nach keinem Quant benannt ist (mtp-Model-it.gguf), den nackten Tag: das Listing, der Plan und remove verwenden ihn alle. Ein imatrix-Tag löst sich in einen eigenen Plan-Slot auf, wird heruntergeladen, aber nie in die Params eingebunden. remove löst den Tag so auf wie ein Download und löscht die Partial-Dateien jedes geplanten Blobs, sodass das Abbrechen eines laufenden Downloads oder das Entfernen eines von einem früheren Lauf unvollendet hinterlassenen Downloads nichts auf der Festplatte hinterlässt. Der Router übergibt sein Token und gibt seine Sperre um den Aufruf herum frei und zeichnet die unvollendeten Downloads mit einem atomaren Schreiben auf. llama download succeeds on a nur-Sidecar-Plan und gibt seine Pfade aus. * ui : Dialog-Ansichten und Draft-Zustände in Enums und Konstanten überführen Die Ansichten des Models-Dialogs werden zum ModelsDialogView-Enum, die Zustände der Draft-Unterzeile ziehen zu ModelRowDownloadState, das View-Fade und der Copy-Feedback-Reset wandern zu UI-Konstanten, und die Kompass-Markierungen des Dialogs stammen aus DISCOVER_ICON. Assisted-by: pi * ui : Die ungenutzte Discover-Oberfläche entfernen Das tote openDiscoverModels-Zwillingsstück, der auskommentierte Befehlstrenner, das ungenutzte onClose des Detailbereichs und der Schließen-Button seiner Kopfzeile sowie ein redundanter Type Cast entfallen; das Copy-Feedback des Befehls schließt sich der gemeinsamen Reset-Konstante an. Assisted-by: pi * ui : Die Download-Options-Kommentare kürzen und das Chat-Template hervorheben Die Wortreichkeit der Kommentare, die das Options-Panel und seine Chips trugen, schrumpft auf das nicht offensichtliche Warum, und der Chat-Template-Dialog rendert über SyntaxHighlightedCode als jinja statt als einen schlichten pre-Block. Assisted-by: pi * common: Nur eine .gguf-Datei ist ein Sidecar, und mmproj/imatrix als ganze Wörter Eine Nicht-GGUF-Datei, die wie ein Sidecar benannt ist (quantization-mmproj-Q8_0.json), wird als mmproj ausgewählt, und ein Sidecar-Wort innerhalb eines längeren Wortes eines Modellnamens (Phi-2-OmniMatrix.i1-Q4_K_M.gguf) verwirft das Modell. * ui: Draft-Sidecar-Badges pro Quant deduplizieren Die Draft-Sidecar-Badges wurden nach Art und Repo ohne das Quant dedupliziert, sodass bei einem Draft, der bei zwei Quants gecacht war, nur ein Badge übrig blieb, und ein Löschen des anderen Haupt-Quants kein Badge fand, mit dem es sein Sidecar entfernen konnte. Stellt außerdem das getDownloadEntries-Doc wieder her, das verloren ging, als die Clusters-Methode darüber landete. Assisted-by: pi (zai-org/GLM-5.3-Flash) * ui: Den unvollständigen Download-Status übernehmen und das Paused-Ids-Register aufgeben Der Store schloss aus einem herunterladenden Eintrag, für den er keinen lokalen Zustand hielt, auf einen unvollendeten Download, wodurch ein in einem anderen Tab laufender Download als pausiert gelesen wurde und ein Resume angeboten wurde, das der Server zurückweist. Das Listing trägt jetzt den Status "incomplete", sodass die Übernahme direkt darauf aufsetzt. Die pausierten IDs müssen nicht mehr in localStorage überleben: der Server merkt sie sich über Neustarts hinweg, und der Fortschritts-Snapshot war nach einem Reload ohnehin veraltet. Der veraltete localStorage-Schlüssel wird entfernt. Assisted-by: pi (zai-org/GLM-5.3-Flash) * ui: quant-match the pause and cancel cascades Pause, Resume und Cancel kaskadierten zu jedem Draft-Sidecar des Repos, während Delete nur die quant-übereinstimmenden erfasste, sodass das Abbrechen eines Q4_0-Downloads auch einen Q8_0-Draft tötete, der zum Main eines anderen Quants gehört. Jede Kaskade wirkt jetzt auf die quant-übereinstimmenden Drafts und gleicht damit dem, was ein Delete mitnimmt. Assisted-by: pi (zai-org/GLM-5.3-Flash) * ui: collapse the duplicated draft subline markup Die heruntergeladenen und laufenden Zweige wiederholten identisches Connector-, Label- und Badge-Markup; ein Block mit bedingtem Ende hält beide Zustände synchron. Assisted-by: pi (zai-org/GLM-5.3-Flash) * ui: scrub positioned styles out of sanitized model card html Das style-Attribut bleibt für die KaTeX-Ausgabe erlaubt, was einer Drittanbieter-Karte erlaubte, ein fixed Overlay über die App zu legen. Der Sanitize-Hook entfernt position:fixed- und position:absolute-Werte und lässt die KaTeX-Layout-Styles unangetastet. Assisted-by: pi (zai-org/GLM-5.3-Flash) * ui: run the discover mount fetch once and reuse the shared repoOf helper fetch() schaltet sein Loading-Flag synchron innerhalb des Mount-Effekts um, wodurch der Fetch bei jedem Umschalten erneut lief und fehlgeschlagene Catalog-Repos endlos wiederholt wurden; der Effekt trachtet den Aufruf jetzt nicht mehr nach. Die lokale repoOf-Kopie und der doppelte Services-Import weichen den gemeinsamen Helpers. Assisted-by: pi (zai-org/GLM-5.3-Flash) * ui: narrow the spec-type map to the draft sidecars SPEC_TYPE führte leere Einträge für die Aux-Sidecars, mit denen es nie indiziert wird; die Map und die Command-Komponente typisieren das Badge jetzt über einen draftBadgeOf-Helper als Draft-Sidecar statt über einen Cast. Assisted-by: pi (zai-org/GLM-5.3-Flash) * ui: name the decision-model tags and markdown cache keys Der Decision-Model-Hub-Tag und der Pipeline-Tag wandern in die huggingface constants neben den anderen Pipeline-Tags, und die Markdown-Transform- Cache-Präfixe bekommen Namen statt nackter Ein-Buchstaben-Tokens. Assisted-by: pi (zai-org/GLM-5.3-Flash) * ui: die Discover-Einstellung durch eine einzige Truthiness-Prüfung lesen Drei Stellen lasen die Einstellung mit !== false und eine mit Boolean(); alle vier lesen sie jetzt auf dieselbe Weise. Assisted-by: pi (zai-org/GLM-5.3-Flash) * ui: die Models-Dialog-View gegen ihr Enum vergleichen Das Template verglich den View-Zustand an drei Stellen mit dem 'manage'-Literal, während das Script das Enum verwendete. Assisted-by: pi (zai-org/GLM-5.3-Flash) * nit: `+` vor dem Draft-Sidecar-Badge entfernen * server: unfertige Downloads als unvollständig auflisten Ein nie abgeschlossener Download wurde als "downloading" gemeldet, derselbe Status, den ein laufender Download trägt, sodass ein Client einen laufenden Download nicht von einem toten unterscheiden konnte. Die in unfinished-downloads gemerkten Tags werden jetzt unter einem eigenen "incomplete"-Status aufgeführt, ohne eine Instanz. Assisted-by: pi (zai-org/GLM-5.3-Flash) * server: ein Modell wie -hf mit seinen Sidecars herunterladen Die Auflösung geht zurück auf master. POST /models nimmt die Sidecar-Arten, die mit dem Modell geladen werden sollen (standardmäßig mmproj), und der Download-Child bekommt sie als -hf-Flags, sodass der Server die Dateien auswählt. /models listet nur echte Modelle auf, jeweils mit den Sidecars, die es auf der Platte hat, und unvollständige Downloads behalten ihre Sidecars über Neustarts hinweg. Ein gestoppter Download behält seine Teil-dateien für den nächsten Versuch, und DELETE entfernt sie über denselben Plan, dem der Download folgt. * ui: Sidecars als Parameter ihres Modells herunterladen Die Download-Optionen behalten ihre Chips, aber ein Chip postet kein Sidecar-Tag mehr: der Store bildet es auf sein Modell und die zu ladenden Sidecar-Arten ab, der Quant-Chip nimmt seinen zugehörigen Draft im selben Download mit, und Draft-Badges stammen aus den Sidecars, die jedes cachierte Modell auflistet. Der Server ergänzt die Sidecars, die einem cachierten Modell fehlen, wenn es erneut gepostet wird, und DELETE entfernt einen einzelnen Sidecar eines cachierten Modells. * ui : die Sidecar-Suche des Servers in Draft-Badges widerspiegeln Der Server löst ein Sidecar über das case-sensitve `-`-Token im selben Verzeichnis wie die Gewichte auf. Die UI ordnete das Token ungenau zu, sodass ein Badge einen Draft anbieten konnte, den der Server nie zieht. Assisted-by: DeepSeek-V4.1-Flash * ui : die Sidecar-Arten des Modells mit seinem Download übermitteln Der Store hält einen Download pro Modell: die Kinds des Chips wandern mit den eigenen Sidecars des Modells mit, und eine Download-Zeile expandiert nicht mehr in eine Zeile pro Sidecar. Draft-Badges tragen noch keinen eigenen Quant, sodass ein Sidecar eines zwischengespeicherten Modells nie mit dem Quant des Modells beschriftet wird. Assisted-by: DeepSeek-V4.1-Flash * ui : den Draft eines Quants in seinen Download-Chip aufnehmen Ein Chip pro Quant, sein Draft darin als Badge und seine Größe deckt beide Dateien ab. Der Draft ist die Datei, die der Server wählen würde: dasselbe Verzeichnis, der exakte Quant, sonst die nächstgelegene Bit-Tiefe, sodass ein 4-bit-Modell mit einem 16-bit-Head gepaart werden kann. Assisted-by: DeepSeek-V4.1-Flash * ui : die Draft-Download-Zeilen aus Manager und Selektor entfernen Ein Download ist wieder eine Zeile pro Modell: die Drafts wandern mit, und die Zeilen lesen die Sidecars auf der Festplatte aus der Liste statt Sidecar-Einträge mit ihrem Modell zu paaren. Pause, Fortsetzen und Abbrechen wirken auf den eigenen Download des Modells. Assisted-by: DeepSeek-V4.1-Flash * ui : die Discover-Download-Liste mit einer Zeile pro Modell halten Die Liste beginnt mit einer Zeile pro heruntergeladenem Modell, dessen Sidecars als Unterzeilen. Eine Zeile zeigt nur die Draft-Kinds als Badge, die der Server auflösen kann, sodass ein Badge nie die Datei überdauert, die seine Suche wählen würde. Assisted-by: DeepSeek-V4.1-Flash * ui : die Discover-Chips im Dark Mode lesbar halten Die Metadaten-Chips, der Chat-Template-Button und der View on Hugging Face Link hatten einen schwachen Rand und keine Fläche vor dem Dialog-Hintergrund, sodass sie kaum sichtbar waren. Sie nehmen jetzt die Tertiary-Button-Fläche an, und ihre Icons skalieren mit size-*, sodass die Basisregel der Variante sie in Ruhe lässt. Assisted-by: DeepSeek-V4.1-Flash * ui : den Draft über die Download-Optionen Ein Chip pro Haupt-Quant, sein Draft darauf vermerkt und der heruntergeladene Zustand des Chips deckt beide Dateien ab. Die Drafts liegen hinter einer Opt-in-Checkbox mit einer Inline-Typanauswahl, und jede Zeile öffnet ihren eigenen Befehl: Er pinnt das Quant der Zeile und nennt nur den Draft-Typ, sodass -hfd entfällt. Assisted-by: DeepSeek-V4.1-Flash * ui : das Details-Skelett an der geladenen Ansicht ausrichten Dasselbe Root-Padding und derselbe Container-Kontext wie in der geladenen Ansicht, damit die Container-Queries gleich aufgelöst werden. Die Download-Optionen-Karte polstert ihre Blöcke statt sich selbst, das Readme bekommt seine Karte, und eine Beschreibungszeile ersetzt den Katalog-Absatz. Assisted-by: DeepSeek-V4.1-Flash * common : die Partials eines entfernten Sidecars löschen Das bloße Entfernen eines Sidecars ließ die .downloadInProgress-Dateien zurück, die der Download für die Sidecars in blobs/ geplant hatte. Die Entfernung räumt sie über denselben Plan weg, dem der Download folgt, und der Test deckt einen fertigen Draft neben einem unfertigen ab, dessen Partial verschwindet, während das Modell seine Dateien behält. Assisted-by: DeepSeek-V4.1-Flash * server : benennen, warum ein Download abgelehnt wird Ein Modell, das bereits heruntergeladen wird oder läuft, antwortete mit „already exists“. Es sagt nun welches: „is already downloading“ oder „is running, unload it first“, jeweils vor der Resumable-Prüfung. Der Router-Test deckt beide Fälle ab. Assisted-by: DeepSeek-V4.1-Flash * ui : einen Download nur einmal pro Klick absenden Zwei schnelle Klicks auf denselben Chip sendeten zweimal, und die zweite Antwort war „already exists“. Der Store markiert das Modell als pending, kehrt früh zurück, solange es pending oder in flight ist, und liest es als in flight, bevor der Server antwortet, sodass der Chip den Download sofort anzeigt. Der neue Client-Test fixiert die Abläufe: ein POST pro Doppelklick, der Chip zeigt „downloaded“, sobald die Liste das Modell meldet, ein Resume behält seine Sidecars, ein Abbruch verwirft den gesamten Download, und ein Reload stellt den pausierten Zustand wieder her. Assisted-by: DeepSeek-V4.1-Flash * ui : eine einfache Download-Zeile auf der Höhe der andern halten Der Sub-lines-Wrapper einer Download-Zeile wurde auch ohne Inhalt gerendert, sodass sein Padding die Zeile höher machte als eine einfache und der überlagerte Fortschrittsbalken in diesem leeren Streifen saß. Er wird jetzt nur noch mit Sub-lines gerendert, im Selector und in der Discover-Liste, und die Selector-Zeile bekommt das Phone-Padding ihrer Nachbarn. Assisted-by: DeepSeek-V4.1-Flash * ui : den Draft eines Repos nur einmal markieren Die Args eines geladenen Modells und die Auflistung eines zwischengespeicherten melden denselben Draft in unterschiedlichen Worten, einer mit dem Quant der Datei, der andere nur mit der Art, sodass der Merge beide behielt und eine Repo-Zeile dieselbe Art doppelt zeigte. Die Badges werden jetzt pro Art zusammengeführt, wobei das Args-Badge gewinnt, da es das Quant kennt, und der Test fixiert beide Quellen eines echten Repos. Assisted-by: DeepSeek-V4.1-Flash * server : die Sidecars eines Presets oder eines laufenden Downloads melden Ein Modell, das auch das Preset nennt, ist als Preset registriert, sodass seine Drafts nie gemeldet wurden und keine Zeile sie markieren konnte. Ein laufender Download meldete ebenfalls keine, obwohl der Eintrag der Arten, die er zieht, direkt dort steht: Diese haben nun Vorrang vor dem Plan, der Plan wird über das hf-repo des Presets aufgelöst, und ein models-Verzeichnis bleibt außen vor. Assisted-by: DeepSeek-V4.1-Flash * ui : die Drafts eines Downloads markieren und sein Modell aus der Zeile öffnen Ein Draft, der noch heruntergeladen wird, markiert jetzt die Modell-ID, so wie es ein gelandeter tut, während ein Draft auf der Platte seine abgehakte Sub-Zeile behält. Die Zeile selbst öffnet das Modell, der Status-Slot daneben pausiert oder setzt fort, und der Manager löst einen Fokus auf eine Download-Zeile auf, sodass sich ihr Panel öffnet. Assisted-by: DeepSeek-V4.1-Flash * common : einen entfernten Sidecar melden, der nur ein Partial hatte Das bloße Entfernen eines Sidecars warf das Ergebnis der Partial-Bereinigung weg, sodass ein Sidecar, der je nur als .downloadInProgress-Blob gelandet war, false antwortete und die UI keinen Grund hatte, neu zu laden. Das Bereinigungsergebnis fließt jetzt in den Rückgabewert ein, und der Test deckt eine Entfernung nur mit Partial ab. Assisted-by: DeepSeek-V4.1-Flash * ui : eine Pause ignorieren, während der Download-POST noch unterwegs ist Der Chip wird als „downloading“ gelesen, bevor der Server antwortet, sodass ein schneller zweiter Klick ein Modell entlud, das noch nicht gestartet war, und den Store weder in flight noch pausiert zurückließ. Eine Pause kehrt früh zurück, solange der POST pending ist, bevor sie den Feed oder den pausierten Marker anfasst. Der Client-Test hält den POST offen und fixiert das. Assisted-by: DeepSeek-V4.1-Flash * ui : einen fehlenden Draft als eigenen Chip anbieten Ein bereits auf der Platte liegendes Modell ohne seinen Draft hatte keine Möglichkeit, ihn hinzuzufügen: Der Quant-Chip trug den Draft, sodass er als Download von beidem gelesen wurde. Der Quant-Chip bleibt jetzt bei seinem eigenen Zustand, sein angehängter Draft zeigt sich nur, während er mitläuft oder auf der Platte liegt, und ein heruntergeladenes Quant ohne seinen Draft bekommt einen eigenen Chip – Badge, Größe, Download –, der das Modell mit dieser Art absendet, sodass der Server die bereits vorhandenen Dateien behält und den Draft zieht. Assisted-by: DeepSeek-V4.1-Flash * server : einen pausierten Sidecar-Download nach den Dateien auf der Platte auflisten Ein Modell auf der Platte, dessen Sidecar-Download stoppt, behält seinen unfertigen Eintrag, und die Auflistung meldete die Arten, die dieser Eintrag plant, als wären sie auf der Platte: Die UI hakte einen Draft ab, der nie gelandet war, und bot keine Möglichkeit, ihn hinzuzufügen. Die geplanten Arten treten nun nur auf, während der Download läuft. * chore: Clean up comments * server : Sidecars nur für ein Modell auflisten, das sich von einem HF-Repo auflösen lässt Ein Preset auf einer lokalen Datei hat kein HF-Repo, dennoch löste die Auflistung seinen Namen als eines auf: Der Plan warf beim ungültigen Repo-Format einen Fehler, und GET /models schlug für jedes Modell fehl. Die Sidecars kommen nun aus dem Repo, das ein Preset nennt oder unter dem ein zwischengespeichertes Modell gelistet ist, und eine lokale Datei wird ohne sie gelistet. * common : Download-Abbruch-Regression beheben Signed-off-by: Adrien Gallouët * common : Modell-Partials beim Entfernen von Sidecars bewahren Signed-off-by: Adrien Gallouët * server : eine Sidecar-Tabelle und eine Klasse für unfertige Downloads Address review from @ggerganov. Die Sidecar-Arten liegen in einer Tabelle in common/download, die jeden Namen auf seinen Download Option und Plan-Datei; der Server validiert und baut damit seine Optionen und listet die zwischengespeicherten Sidecars darüber statt über seine eigenen Listen. Die unvollendeten Downloads wandern in server_unfinished_downloads, einen Datensatz mit eigenem Mutex und einer Struktur pro Eintrag, und server_models legt sie über unfinished_downloads_get und unfinished_downloads_remove offen. * common: eine einzige Sidecar-Tabelle und Entfernungen, die gemeinsam genutzte Dateien behalten Die Auflösung, die zwischengespeicherte Auflistung und das Entfernen folgen einer einzigen Tabelle der Sidecar-Arten, sodass eine Art nur einmal mit ihrem Datei-Schlüsselwort, ob es sich um einen Entwurf handelt, ihrer Option und ihrer Plan-Datei deklariert wird. Der Server liest dieselbe Tabelle für die Arten, die er akzeptiert, die Standard-Sidecars und die Child-Flags. Das Entfernen eines Tags behält die Dateien, die ein anderes zwischengespeichertes Tag noch lädt, etwa ein mmproj, das nach dem entfernten Quant benannt ist. Ein allein entferntes Sidecar gilt für jedes Tag, das es auflöst. Ein unvollendeter Download zeichnet beim Start die exakten Pfade seiner Teildateien auf. Eine Entfernung löscht diese, ohne den Hub zu fragen, und behält eine Teildatei, die auch ein anderer erfasster Download schreibt. Der Datensatz wird erfasst, sobald der Child-Prozess gestartet ist, und die Dateien werden unter dem Models-Lock entfernt, sodass ein Download desselben Tags nicht beginnen kann, während sie entfernt werden. * server: veraltete Teildateien entfernen und ein Tag ablehnen, das nichts auflöst Wird ein Download erneut erfasst, löscht das die Teildateien des früheren Datensatzes, die der neue Plan nicht mehr schreibt, etwa die einer älteren Hub-Revision oder eines Sidecars, das die neue Anfrage weglässt. Ein übermittelter Tag, der keine Datei des Repositorys auflöst, wird abgelehnt, bevor der Download beginnt. Das Entfernen eines Modells folgt einem einzigen Pfad, unabhängig davon, ob der Reload seinen Eintrag während des Wartens gelöscht hat oder nicht. * server: das CI-Rennen zwischen den Router-Download-Tests beheben Die pytest-Worker laufen parallel auf einem gemeinsamen Cache, sodass ein Download-Test die Datei finden konnte, die ein anderer Test gerade geholt hatte, und keinen Fortschritt sah, oder aus dem Datensatz der unvollendeten Downloads startete, den ein anderer Test geschrieben hatte. Jeder Download-Test läuft jetzt auf einem eigenen leeren Cache. * server: verweigere ein DELETE eines unbekannten Namens und entscheide Downloads in load() Ein DELETE eines Namens, der weder ein Modell noch ein aufgezeichneter Download war, ging an common_download_remove und löschte ohne einen Tag den gesamten Repo-Cache, einschließlich der Dateien eines geladenen Quants oder eines laufenden Downloads. Ein solcher Name wird jetzt nicht gefunden, wie es vorher war. Ein POST, der über einen bestehenden Eintrag herunterlädt, prüfte seinen Status außerhalb der Sperre, sodass ein load desselben Modells dazwischen seine Instanz beendet bekam. Die Prüfungen laufen jetzt in load(), unter der Sperre, direkt vor dem Spawn. Die gefälschte Ladezeit der Tests gilt nur für Modell-Ladevorgänge, da ein Download-Worker keines lädt. * server: füge incomplete_sidecars zur /models-API hinzu Ein Sidecar, das zu einem zwischengespeicherten Modell hinzugefügt und dann pausiert wurde, behielt seinen Eintrag, aber die Auflistung zeigte nur das vollständige Modell, sodass eine frische UI die Pause verlor. Der Modell-Eintrag trägt jetzt incomplete_sidecars, die Arten, die sein unfertiger Download noch nicht geschrieben hat; ein POST mit der Art setzt einen fort und ein DELETE damit verwirft seinen Teilbestand. * common: verwerfe einen aufbewahrten Teilbestand, wenn eine Fortsetzung 416 erhält Nun, da Teilbestände zwischen Versuchen überleben, lässt ein alter oder vollständiger Teilbestand jeden Wiederholungsversuch mit demselben 416 fehlschlagen. Lösche ihn, damit der nächste Versuch bei null beginnen kann. Signed-off-by: Adrien Gallouët * common: verwerfe einen aufbewahrten Teilbestand, wenn eine Fortsetzung 200 erhält Ein Server, der den Range ignoriert, antwortet auf eine Fortsetzung mit 200, und der aufbewahrte Teilbestand scheitert dann bei jedem Versuch auf dieselbe Weise wie bei einem 416. Verwerfe ihn ebenfalls, damit der nächste Versuch ohne Range von vorn beginnt. * server: verweigere einen Download, der sich einen Teilbestand mit einem laufenden teilt Zwei Downloads von Quants, die eine Datei gemeinsam haben, das mmproj oder ein mtp, das nach den nächsten Bits gewählt wurde, hängten an denselben Teilbestand an und benannten eine Datei mit durchmischten Bytes um. Ein Download, dessen Plan in einen Teilbestand schreibt, den auch ein laufender Download schreibt, wird nun verweigert, bis dieser fertig ist. * common: prüfe den gespeicherten etag, bevor ein Teil-Download fortgesetzt wird Vor der Fortsetzung vergleiche den gespeicherten etag mit dem Teil der Datei übereinstimmt, die der Server jetzt ausliefert. Wenn er fehlt oder abweicht, beginnt der Vorgang von vorne, sodass ein fortgesetzter Download niemals Bytes aus zwei Versionen der Datei vermischt. Signed-off-by: Adrien Gallouët --------- Signed-off-by: Adrien Gallouët Co-authored-by: Pascal Co-authored-by: Adrien GallouëtWebsite: - https://llama.app
Bescheinigungen: - https://github.com/ggml-org/llama.cpp/attestations/56975123
macOS/iOS: - macOS Apple Silicon (arm64) - macOS Apple Silicon (arm64, KleidiAI aktiviert) 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-Bibliotheken - Ubuntu x64 (CUDA 13) - CUDA-13.4-Bibliotheken - Ubuntu arm64 (CUDA 13) - CUDA-13.4-Bibliotheken - 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-Anleitung
Android: - Android arm64 (CPU) - Android arm64 (Snapdragon: CPU, Adreno GPU, Hexagon NPU) - Setup-Anleitung
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: - DEAKTIVIERT - openEuler x86 (310p) - openEuler x86 (910b, ACL Graph) - openEuler aarch64 (310p) - openEuler aarch64 (910b, ACL Graph)
Benutzeroberfläche: - Benutzeroberfläche