Aller au contenu

Ingénierie

Il vous le dit avant le téléchargement, pas après

Chercher dans le catalogue Hugging Face depuis Runlix, obtenir un verdict motivé sur la capacité d'un modèle à démarrer, mettre en file des téléchargements qui reprennent où ils s'étaient arrêtés, et voir où est parti l'espace disque.

Mis à jour 2026-09-12Mesuré 2026-09-12

Le catalogue de modèles de Runlix, recherche Qwen2.5 : les lignes vérifiées disent « tourne » ou « inutilisable », avec la raison écrite à côté.

La façon normale de découvrir qu'un modèle ne tourne pas sur votre machine, c'est de le télécharger d'abord. Huit gigaoctets, vingt minutes, et puis un message d'erreur qui nomme un champ dans un fichier de configuration que vous n'avez jamais ouvert.

Un verdict avant le téléchargement Lu dans la description du modèle, avec la raison écrite à côté — pas après huit gigaoctets.
Des téléchargements qui survivent Deux à la fois, repris là où ils se sont arrêtés, et complets seulement quand chaque pièce nommée par le modèle est là.
Vous voyez où est parti le disque Compté sur les vrais fichiers, avec à part ce que vous pouvez récupérer.
Du téléchargement au chat en un clic « Use » ouvre une conversation avec le modèle que vous venez de télécharger, déjà choisi.

Runlix demande avant. Il lit la description que le modèle donne de lui-même sur Hugging Face, sans télécharger un octet des poids, et vous donne un verdict avec la raison écrite à côté.

Runlix l'exécute L'une des six familles que le moteur implémente nativement.
Pas encore Le moteur ne porte pas encore cette famille. mlx-lm la connaît, c'est donc une famille qui peut être ajoutée.
Inutilisable Avec la raison nommée : aucun safetensors, un modèle de vision, ou une quantification par tenseur au lieu de par modèle.
On ne sait pas Hugging Face n'a pas répondu, ou le modèle ne se décrit pas.

Les vérifications se font dans un ordre, et il compte. Les modèles de vision sont repérés avant que la famille ne soit consultée, parce que gemma3 et qwen2_5_vl ont un model_type qui ressemble à celui d'un modèle purement textuel : regarder la famille d'abord les laisserait passer. Les alias sont résolus depuis la table de correspondance de mlx-lm plutôt que depuis une liste écrite à la main, et c'est ainsi que mistral revient comme « un autre nom pour llama » au lieu de « inconnu ». Et la liste derrière le « pas encore », ce sont littéralement les noms de fichiers dans la copie gelée de mlx-lm conservée dans le projet — elle est donc juste par construction, au lieu d'être une liste dont quelqu'un doit se rappeler la mise à jour.

« On ne sait pas » est délibérément un verdict à part. Un environnement d'exécution qui devine quand il ne peut pas savoir finira par deviner faux, avec assurance.

La vérification part quand vous la demandez, ligne par ligne, parce que la lancer pour une liste que vous faites défiler en une seconde ferait quatre cents requêtes réseau pour rien.

Le catalogue, cherché là où il vit

La recherche tourne du côté de Hugging Face, pas sur une page de résultats gardée en cache. La version précédente prenait les cinq cents premiers modèles et les filtrait en local, ce qui voulait dire en silence que tout ce qui sortait de cette fenêtre n'existait pas pour l'application.

Chaque ligne montre le modèle, une ligne de détails prise dans sa propre description — phi3 · 4 bits · 40 couches · contexte 16k — combien de personnes l'ont téléchargé, et une pastille verte avec la taille si vous l'avez déjà.

Des téléchargements qui survivent à l'interruption

Les téléchargements passent par une file, deux à la fois. Pas davantage : le téléchargeur parallélise déjà les fichiers à l'intérieur d'un dépôt, et en empiler plus ne fait que découper la même bande passante en tranches plus fines.

Chacun montre une barre, la phase, et le détail qui vous dit vraiment s'il vaut la peine d'attendre : 12/47 fichiers · 3,2 Go / 8,1 Go · 45,2 Mo/s · 1m 52s. La vitesse est une moyenne lissée, parce que la valeur instantanée oscille trop pour se lire. Déplier un téléchargement liste les fichiers du dépôt par taille, avec une coche sur ceux qui sont finis.

Arrêtez-en un et les fichiers partiels restent sur le disque. Remettez-le en file et il reprend où il en était — il ne recommence pas. Vous pouvez aussi mettre en file un téléchargement pour quelque chose qui n'est pas du tout dans le catalogue, et c'est ainsi qu'on répare un modèle que le catalogue ne liste pas.

Ce que « complet » veut dire au juste

Un téléchargement est fini quand chaque fragment nommé par l'index du modèle est présent — pas quand le dossier cesse de grossir, ni quand un certain nombre de fichiers sont apparus.

Une version antérieure le devinait au nombre de fichiers, ce qui est faux dans les deux sens : un petit modèle à deux fichiers avait l'air incomplet, et un gros dont le téléchargement était mort à deux fragments de la fin avait l'air terminé. Lire l'index des poids est la seule réponse qui tienne dans les deux cas, et la vérification se fait une révision à la fois pour que deux téléchargements à moitié faits de révisions différentes ne s'additionnent pas en un modèle apparemment complet.

Le même soin explique pourquoi le chiffre du disque compte les fichiers réels et non les raccourcis qui pointent dessus : les raccourcis compteraient deux fois un fichier partagé entre deux versions.

Où est parti l'espace disque

Les caches de modèles grossissent d'une façon difficile à voir, et l'essentiel de la croissance, ce ne sont pas les modèles.

Runlix affiche 12,3 Go sur le disque · 8 modèles, comptés à partir des fichiers réellement présents, et à part ce que vous pouvez récupérer : les révisions autres que main, laissées par les mises à jour et par les références de demandes de fusion, plus les restes de téléchargements interrompus. Dans un cache réel, une seule révision périmée valait 2,27 Go.

La récupération annonce les octets libérés. Quand il n'y a rien à récupérer, elle le dit, au lieu de faire semblant d'avoir travaillé.

Après le téléchargement

« Use » ouvre un chat avec le modèle que vous venez de télécharger, déjà choisi. Cela ressemble au minimum qu'un bouton puisse faire, et c'est la première chose que le premier essai depuis l'image d'installation a cassée : le chat construisait sa liste de modèles une seule fois, au démarrage, donc un modèle téléchargé ensuite n'y était pas. La liste est maintenant relue aux deux moments où quelqu'un la regarde.

Un modèle chargé reste chargé tant que l'application est ouverte. Aucun minuteur ne le décharge dans votre dos, parce que la question suivante paierait le rechargement. Quand vous voulez récupérer la mémoire, les Réglages ont un bouton qui la libère — et pour de vrai : lâcher les modèles ne suffit pas, car MLX garde ce qu'ils utilisaient dans sa propre réserve, alors le bouton la vide aussi et rend la mémoire au Mac. Un modèle en train de répondre reste où il est.

Ce que coûte un modèle se mesure sur ses poids. Le cache de Hugging Face garde les modèles comme des liens vers un magasin de fichiers ; mesurer le lien au lieu du fichier vers lequel il pointe faisait paraître chaque modèle grand de quelques octets, et le mécanisme qui décide quoi décharger pour faire de la place ne trouvait jamais de raison de le faire. Il suit maintenant les liens.

Le filtre de formats

Beaucoup de dépôts publient le même modèle dans plusieurs formats, et presque aucun n'est chargé par un moteur de Runlix. Sur bge-m3, la seule copie ONNX fait 2,29 Go sur 6,86.

Les Réglages ont quatre cases — ONNX, TensorFlow, Flax/JAX, TensorFlow Lite — et ce qu'elles excluent est sauté aux téléchargements futurs. Les poids PyTorch ne sont délibérément pas filtrables : pour certains modèles le .bin est la seule chose publiée, et un filtre capable de rendre un modèle intéléchargeable le fera.

Ce qui est déjà sur le disque n'est pas touché. Le réglage enregistre quels formats sont actifs, pour qu'un format ajouté l'an prochain démarre exclu au lieu de se glisser en silence.

Deux petites choses qui décident si c'est agréable

Chercher sans marteler

Taper dans le champ de recherche ne déclenche pas une requête par touche : il y a une courte pause avant l'envoi, un mot de cinq lettres est donc une requête et pas cinq.

Petit — et c'est la différence entre un catalogue dans lequel on peut taper et un qui vous limite pour l'avoir utilisé normalement.

Le jeton Hugging Face

Facultatif. Il relève les limites de fréquence de l'API et permet de télécharger des modèles privés.

Il est rangé dans le trousseau de macOS et non dans la base des réglages, et l'application le lit une fois par démarrage — un cache en mémoire le retient, parce que sur une version signée ad-hoc chaque lecture est une demande de mot de passe du système, et une par démarrage est déjà une de plus que ce que quiconque souhaite.