Vue lecture

Il y a de nouveaux articles disponibles, cliquez pour rafraîchir la page.

OmniVoice - Clonez votre propre voix en local et en français

L'équipe Next-gen Kaldi de Xiaomi a sorti OmniVoice, un modèle de synthèse vocale qui parle 646 langues et qui est capable de "recopier" une voix à partir d'un extrait de huit secondes minimum. Et tout ça en local et gratuitement !

Le français y est d'ailleurs la cinquième langue du corpus d'entraînement, avec 23 675 heures d'audio de référence sur les 581 000 qu'ils ont avalées. Autant dire que le modèle a entendu du français toute sa vie, et ça s'entend au résultat.

Voilà donc comment cloner votre propre voix, du début à la fin. Comptez 3,3 Go de poids que la première génération ira chercher toute seule, donc prévoyez une connexion pour ce coup-là, et quelques minutes de manipulation une fois qu'ils sont sur votre disque.

Installer OmniVoice

Pour cela, il vous faut Python 3.10 à 3.13 (PyTorch 2.8 n'existe pas encore pour 3.14, vous vous prendriez un "No matching distribution found"), et un environnement isolé (sinon vous allez casser autre chose). Sur Mac, les deux lignes suivantes suffiront puisque le modèle utilise le GPU intégré via MPS :

python3 -m venv ~/omnivoice-env && source ~/omnivoice-env/bin/activate
pip install torch==2.8.0 torchaudio==2.8.0
pip install omnivoice num2words

Sur Linux et Windows, ça devra se faire avec une carte NVIDIA (sous Windows, l'environnement s'active avec omnivoice-env\Scripts\activate) sauf que PyTorch doit venir de l'index CUDA, donc remplacez la deuxième ligne par celle-ci :

pip install torch==2.8.0+cu128 torchaudio==2.8.0+cu128 --extra-index-url https://download.pytorch.org/whl/cu128

Notez que sans carte graphique du tout, ça marche quand même. J'ai rejoué la même installation dans un conteneur Linux en processeur seul, elle passe sans rien changer... mais il m'a fallu cinq fois la durée de l'audio en temps de calcul.

Une fois installé, pour savoir que c'est en place, tapez omnivoice-infer --help et là, la liste des options doit s'afficher, sans la moindre erreur d'import. Le num2words de la troisième ligne, lui, ne sert qu'au chemin Python dont je parle plus bas, alors gardez-le sous le coude.

Les 8 secondes qui font tout

C'est l'étape que tout le monde bâcle et c'est pourtant celle qui est décisive pour avoir un bon résultat. Le projet recommande entre 3 et 10 secondes, pas plus car au-delà, ça ralentit le calcul et ça dégrade le clonage. Prenez donc un passage où vous parlez sans blanc, sans "euh", sans musique derrière, et découpez-le proprement comme ceci avec ffmpeg (ou autre logiciel de votre choix) :

ffmpeg -i mon-enregistrement.m4a -ss 12 -t 8 -ac 1 -ar 24000 moi.wav

La qualité de cet extrait est très importante donc si vous enregistrez votre voix, mettez bien le micro près de la bouche, dans une pièce sans écho, et évitez les MP3 récupéré à partir de YouTube .

Écrivez ensuite dans un fichier ce que dit exactement l'extrait, mot pour mot. Vous pouvez sauter cette étape (le modèle transcrit alors tout seul avec Whisper), sauf qu'il téléchargera 1,6 Go de plus pour ça et qu'il se plante parfois sur un nom propre, ce qui abîme le clonage.

C'est le moment de générer !

Avant de taper quoi que ce soit, relisez bien votre texte et réécrivez les chiffres en toutes lettres. La ligne de commande n'a aucune option de normalisation, donc "2345" sortira n'importe comment alors que "deux mille trois cent quarante-cinq" se lit tout seul. C'est du côté Python que la normalisation se fait, avec normalize_text=True, la langue passée en language="fr" et le num2words de tout à l'heure... sans la langue, votre texte français part chez le normaliseur anglais qui réclamera même une lib sans version précompilée pour les Mac Apple Silicon.

Voici la commande complète :

omnivoice-infer --model k2-fsa/OmniVoice \
 --text "Bonjour, ceci est un test de clonage de voix en français réalisé avec OmniVoice." \
 --ref_audio moi.wav --ref_text "$(cat moi.txt)" \
 --language fr --num_step 32 --output ma-voix.wav

Vous devez voir passer un "Saved to ma-voix.wav" au bout de quelques secondes. Sur mon M4 Max, j'ai compté 4 à 6 secondes de calcul pour 5,4 secondes d'audio, et moitié moins avec --num_step 16 au prix d'un peu de netteté. Au passage, le facteur 40 fois plus rapide que le temps réel qu'annonce le projet sur son site, ça a été mesuré sur un H100 avec des noyaux d'accélération maison, et pas sur un ordi de bureau...

Si la ligne de commande vous rebute, vous pouvez aussi passer par la commande : omnivoice-demo --ip 127.0.0.1 --port 8001 qui permet de faire la même chose mais dans le navigateur, avec le bouton d'import pour l'extrait et un menu déroulant pour la langue. Pensez juste à lancer export GRADIO_ANALYTICS_ENABLED=False avant, parce que l'interface web appelle les serveurs de Gradio au démarrage et qu'on n'a pas envie de leur filer nos data à ceux-là.

L'audio, lui, ne bouge pas de votre machine.

L'extrait de référence de 8 secondes chargé à gauche, la langue calée sur French, et la sortie de 5 secondes à droite une fois le clonage terminé.

Et si vous voulez vraiment débrancher la machine du réseau, faites-le dans le bon ordre, sinon la commande de génération part chercher les poids et se vautre sur un httpx.ConnectError suivi d'un LocalEntryNotFoundError. Récupérez donc le modèle d'abord, dans un dossier bien à vous :

hf download k2-fsa/OmniVoice --local-dir ~/omnivoice-modele

Ensuite vous coupez tout et vous passez ce dossier à --model à la place du nom du dépôt. Ça marche même sur une machine qui n'a jamais vu Internet, il suffit d'y copier le dossier. Et si vous préférez garder le cache par défaut, un export HF_HUB_OFFLINE=1 fait la même chose. J'ai rejoué la génération avec toutes les sorties réseau refusées par le système, le fichier sort quand même en 8 secondes... donc non, votre voix ne part chez personne.

Maintenant, une fois que c'est fait, écoutez le fichier avant d'en faire quoi que ce soit, parce que le modèle avale parfois des morceaux de phrase. Sur mes 24 générations de la même phrase, 5 ont perdu ou déformé un mot. C'était presque toujours le premier ou le dernier... et ce n'est pas une surprise, c'est un bug connu de l'outil. Faut donc relancer parfois plusieurs fois pour avoir un résultat OK.

Dernier truc pour ceux qui passeront par Python : la voix se sauvegarde une fois pour toutes. model.create_voice_clone_prompt() puis .save("ma_voix.pt") produisent un fichier minuscule que les sessions suivantes rechargeront sans repasser par l'extrait ni par la transcription. Regénérez alors une phrase avec, et comparez à l'oreille : si c'est bien la même voix, vous pouvez ranger le WAV de référence.

Voici l'extrait que j'ai généré avec ma voix. Ces 6 secondes d'audio ont pris 14 secondes à la génération sur mon Mac Studio :

Le kit à coller dans votre agent

Si vous faites faire le boulot par Claude Code, Codex ou n'importe quel agent IA, voilà le brief à lui donner tel quel. J'y ai mis les pièges qui m'ont coûté un peu de temps :

Ce que vous avez le droit d'en faire

Alors le code d'OmniVoice est bien sous licence Apache 2.0, mais les poids du modèle, eux, sont sous CC-BY-NC à cause du corpus qui a servi à les entraîner. Cela veut dire que tout usage commercial est interdit. Donc si vous avez prévu un projet afin de gagner de l'argent, regardez plutôt du côté de Chatterbox , qui est sous licence MIT, qui parle également français et qui "tatoue" même ses sorties (vu que maintenant c'est obligatoire avec la loi IA).

Pour l'usage perso, en revanche, rien ne vous arrête, et le règlement européen sur l'IA exclut explicitement de son champ l'activité personnelle non professionnelle.

Ce qui est cool avec Omnivoice, c'est que ce clonage de votre voix se fait à 100% en local et c'est bien tout l'intérêt de la manœuvre ! Et si l'idée c'est plutôt de faire lire vos ebooks par la machine, je vous invite à jeter un œil à MLX-Audio côté Mac.

Source : OmniVoice sur GitHub

Le Deathray - Le shader WebGPU qui fait redémarrer votre Mac

Auberon López vient de publier sur son blog un bouton qui freeze complètement les Mac à partir d'un simple clic dans un navigateur. Il a baptisé ça le Deathray (le rayon de la mort quoi...) et c'est un shader WebGPU diffusé via une page web des plus ordinaires, qu'il suffit d'ouvrir d'un simple clic sur un lien.

Ce qui arrive ensuite change d'une fois sur l'autre : Vous aurez le doit à la roue multicolore, ou la souris qui se fige, ou encore parfois des saletés magenta sur une partie de l'écran. Le reste de l'ordinateur, lui, va très bien et vous pouvez vous y connecter en SSH depuis une autre machine sans souci. C'est juste l'affichage qui ne répond plus, et il ne reviendra pas sauf si vous rebootez.

Le fait est que macOS surveille également son WindowServer, le processus qui dessine tout ce que vous voyez. S'il ne répond plus pendant deux minutes, le chien de garde déclenche un kernel panic et la machine redémarre ensuite toute seule. Mais vous pouvez aussi appuyer sur le bouton d'alimentation si vous êtes pressé, mais en croisant les doigts pour que votre navigateur ne rouvre pas l'onglet au redémarrage...

Le truc tient dans un seul fichier HTML, et histoire de vous expliquer un peu plus, un compute shader part dans une boucle écrite sans incrément, donc elle ne se termine jamais, et recopie indéfiniment le même vecteur en mémoire. À côté, le vertex shader qui dessine l'image lit alors cette même zone, et comme le premier ne lâche jamais la main, le second ne peut pas avancer d'un pouce.

Sauf que l'embouteillage ne reste pas cantonné au navigateur. Tous les processus qui veulent le GPU se retrouvent alors à patienter derrière, WindowServer compris, d'où l'écran figé. López dit avoir reproduit la chose dans Chrome, Firefox et Safari, sur des MacBook à puce M tournant sous macOS Tahoe. Après sur les autres systèmes testés, l'onglet rame un bon coup, puis tout rentre dans l'ordre dès qu'on ferme la page.

Mais alors pourquoi eux et pas les autres OS comme Windows ?

Hé bien parce que Windows embarque un mécanisme appelé TDR , qui repère qu'une carte graphique met plus longtemps que prévu à répondre et qui la réinitialise pour éviter que tout le système se bloque. Deux secondes par défaut, et le shader qui déconne se fait éjecter.

Alors que sur Apple Silicon, c'est un coprocesseur maison, l'ASC, qui pilote le GPU avec un firmware Apple et qui s'occupe de tout : énergie, ordonnancement des commandes, préemption des tâches. Asahi Lina , qui a retourné la puce M1 pour écrire un pilote Linux , a d'ailleurs relevé que si ce firmware plante, il n'y a qu'un moyen de s'en sortir. La seule solution c'est de redémarrer complètement la machine.

López a signalé le problème à Apple Security fin juillet. Apple a reproduit le bug, annoncé un correctif et donné un calendrier (confidentiel, donc on ne le connaîtra pas). Puis le 26 août, revirement complet d'Apple qui explique ne voir "aucune implication de sécurité dans ce rapport", lequel n'entraînera donc aucun changement dans ses produits. Le dossier est ensuite parti vers une autre équipe pour d'éventuelles "considérations d'amélioration".

En 2023 pourtant, Ron Masas d'Imperva avait déjà fait planter des Mac, des iPhone et des iPad avec un shader, en WebGL cette fois. Apple avait alors sorti le CVE-2023-40441 , noté 6,5 sur 10, et l'avait bouché en renforçant la validation des entrées pour mieux repérer les boucles folles.

Seulement voilà, sa boucle à lui était énorme mais finie, donc détectable, alors que celle du Deathray tourne pour toujours. Et une boucle infinie, la repérer à coup sûr, c'est le problème de l'arrêt ... donc personne ne sait faire.

López l'écrit d'ailleurs sur son site, les chercheurs en sécurité avec qui la question a été discutée donnent plutôt raison à Apple. Pour la firme, le résultat n'est qu'un plantage, un gel ou une perte de données récupérable, et ça ne constitue pas un réel problème de sécurité. Et sur le principe, ça se défend. Sauf que dans la vraie vie, si vous avez oublié de sauvegarder vos fichiers et que vous cliquez sur ce lien, vous l'avez dans l'os (et pas dans le "MacOS"... roh roh roh).

Donc non, il n'y a rien à installer pour empêcher ça et rien à attendre de Cupertino pour le moment. Voilà, sachez juste que n'importe quel couillon qui aura lu cet article pourra vous envoyer un petit lien par mail, façon rickroll des enfers, ce qui aura pour effet de freezer et faire redémarrer votre Mac.

Désolé !! 🤷‍♂️

Source : le billet d'Auberon López .

Linux tourne enfin sur les Mac M3 (sauf la carte graphique)

Le projet Asahi Linux vient enfin de fusionner le support des Mac M3 dans son installateur. En clair, ça veut dire que si vous avez un MacBook Air, un MacBook Pro ou un iMac équipé d'un M3, d'un M3 Pro ou d'un M3 Max, vous pouvez y installer Linux dès maintenant.

Et la liste de ce qui fonctionne est plus longue que ce que je pouvais craindre. La webcam, les micros internes, le WiFi, le Bluetooth, l'USB 3 jusqu'aux 10 Gb/s permis par la machine, et le décodage vidéo accéléré, AV1 compris.

Le Thunderbolt aussi, est même arrivé cet été. Apple avait troqué, sur les M3 Pro et M3 Max, son vieux contrôleur de ports USB contre une puce ACE3 posée sur un bus SPMI au lieu de l'I2C. Il a donc fallu reverse tout ce petit monde afin que l'USB 3 et le Thunderbolt marchent sur l'ensemble de la gamme M3.

Si vous voulez vous lancer, l'installation doit encore passer par le mode Expert de l'installeur, parce que c'est encore tout frais. Mais quand la bêta de Fedora Linux 45, sera implémentée d'ici quelques semaines, ça devrait fonctionner en install normale.

Après le gros manque, c'est la 3D. N'attendez ni performances, ni accélération 3D économe en énergie puisque tout est géré par la partie CPU du M3. Et ce n'est pas de la mauvaise volonté de la part des dev puisque le GPU du M3 s'écarte nettement de celui des M1 et M2 : ray tracing matériel, mesh shaders, et le Dynamic Caching maison d'Apple. Il y a donc énormément à refaire et même si le chantier a commencé, pour le moment, on n'a pas de date.

Les autres limites ont l'air nettement moins définitives comme pour la mise en veille qui ne fonctionne pas et le port HDMI des MacBook qui est coupé. Cela s'explique par le fait que le composant DCP qui gère ces 2 aspects là c'est pas encore piloté par Asahi, mais ça ne devrait pas tarder.

Le Mac Studio, lui, reste à la rue. Le M3 Ultra n'est pas supporté, et les M4 et M5 en sont au tout début, avec le stockage, le PCIe et le démarrage multicœur qui tournent mais pas grand-chose d'autre. Donc plus votre machine est récente, plus il va falloir être patient...

Perso, j'avais un iMac M3 et franchement, j'ai été très déçu par cette machine. Pour de la bureautique ça allait très bien, mais dès qu'on bidouille un peu fort, ça pédale dans la semoule. Je suis donc passé au Mac Studio depuis et je ne le regrette pas une seconde.

En tout cas, je sais que si je veux recycler ce "vieil" iMac M3, je peux maintenant lui installer Linux... ça vaut peut-être le coup, à condition d'assumer un desktop sans la moindre accélération 3D ^^.

Source : le billet d'annonce d'Asahi Linux et Neowin .

WhatCable - Trouvez le câble qui bride la charge sur votre Mac

Je ne sais pas vous, mais chez moi, mes câbles USB-C se ressemblent tous. Et dans le tas, j'en ai qui chargent mon MacBook deux fois plus vite que d'autres. Et franchement, en les regardant, je ne peux pas vous dire lesquels sont les plus efficaces. Alors que mon Mac, lui, apparemment, il le sait déjà.

En tout cas, c'est ce que j'ai compris en allant lire le site de WhatCable. Ce qu'ils expliquent, c'est qu'à chaque branchement, le contrôleur de port d'un Mac Apple Silicon envoie un message à la puce que certains câbles embarquent et récupère sa fiche d'identité : débit annoncé, ampérage, fabricant. De ce que j'ai compris, macOS range la réponse dans le registre IOKit sous forme d'objets bruts, et ne l'affiche nulle part en clair. Snif...

Et c'est cette réponse que WhatCable va chercher, puis traduit. L'app vit dans la barre de menus, vous branchez un câble, et elle vous dit alors instantanément lequel des trois maillons plafonne la charge : Soit le chargeur, soit le câble, soit le Mac lui-même quand sa batterie est presque pleine.

Et vous obtenez le même verdict côté débit.

L'app confronte aussi la fiche du câble à sa spécification USB-PD et lève un carton jaune quand quelque chose cloche. Ça peut être l'identifiant fabricant à zéro, les bits réservés utilisés de travers...etc. Moi, je parle bien ici de contrefaçon de câbles, mais l'app reste très prudente dans sa formulation. Elle signale juste des trucs bizarres, et elle ne dit jamais qu'un câble est une contrefaçon.

Après, la plupart des câbles sous 60 W n'ont aucune puce à interroger, donc il n'y a rien à lire, et certains ne répondent correctement qu'avec un appareil branché à l'autre bout. Sur les ports USB-C en façade d'un Mac mini ou d'un Studio, aucune donnée de câble ne remonte non plus. C'est à cause de l'architecture d'Apple.

Côté matériel, il vous faut donc un Mac Apple Silicon sous macOS 14 minimum, les Mac Intel ne publiant pas ces données du tout. L'app est gratuite et son code est sous licence MIT, sauf le dossier des fonctions Pro où là, faudra débourser environ 10 €.

Si vous avez Homebrew, vous pouvez installer l'app rapidement comme ceci :

brew install --cask darrylmorley/whatcable/whatcable

L'app est même en français si vous avez séché les cours d'anglais. Bref, de quoi trier votre caisse de câbles sans vous planter...

oMLX – Faites tourner vos agents IA en local sur votre Mac

Faire tourner un modèle en local sur un Mac, c'est réglé depuis un moment. Ce qui l'est moins par contre, c'est de brancher un agent de code dessus, parce qu'à chaque reprise de session, le serveur doit malheureusement remouliner des dizaines de milliers de tokens de contexte avant de sortir le premier mot...

Ce calcul, ça s'appelle le cache KV, et la plupart des serveurs le gardent en mémoire. Du coup, quand le modèle se décharge, le cache part avec dans le grand vide...

C'est pourquoi oMLX a pris le parti d'écrire ce cache sur le disque, au format safetensors, car le contexte déjà envoyé une fois, prompt système et fichiers lus compris, se recharge depuis le SSD au lieu d'être recalculé, y compris après un redémarrage du serveur.

De son côté, LM Studio conserve lui aussi son cache MLX sur disque , mais dans un fichier temporaire qu'il efface quand le modèle se décharge. Les deux outils écrivent sur le disque, mais un seul conserve réellement son cache.

Côté raccordement, le serveur oMLX expose l'API OpenAI et l'API Anthropic ce qui permet par exemple à Claude Code de taper directement sur localhost. Et y'a même un tableau de bord qui nous dit quoi faire dans le terminal pour brancher Claude Code ou d'autres avec oMLX.

Sur oMLX, le cache disque est donc actif d'office et son plafond par défaut, parce qu'il en faut bien un, se calcule à 10 % de la capacité du disque qui l'héberge. Sur un SSD d'un téraoctet par exemple, ça fait cent gigaoctets qui peuvent partir en cache sans que personne n'ait rien demandé. Donc prévoyez un peu de place... Après rassurez-vous, ça se vide d'un clic sur un bouton dans le tableau de bord et la taille peut se régler.

Le deuxième piège est plus sournois puisqu'une installation par défaut via pip ne compile pas les kernels Metal, et les modèles GLM-5.2, MiniMax M3 et Qwen3.5 retombent alors sans prévenir sur un chemin générique... Donc je vous incite fortement à utiliser uniquement les DMG proposés qui contiennent déjà les kernels Metal compilés comme il faut.

Reste à savoir ce que ça donne vraiment dans un usage quotidien... Le cache attaque l'attente avant le premier mot mais pas la vitesse à laquelle les mots sortent ensuite donc tout dépend du modèle et de la machine que vous avez. Mais en tout cas, pour un usage avec des agents (coding par exemple), ce sera plus efficace d'utiliser oMLX que Ollama ou LMStudio.

Source : omlx.ai

Rapid-MLX - Installer un serveur IA local sur votre Mac

Si vous avez un Mac Apple Silicon et que vous en avez assez de payer des tokens à chaque requête, Rapid-MLX vaut le détour. C'est un moteur d'inférence local maintenu par Raullen Chai, qui tape directement dans les kernels MLX d'Apple, sans repli sur llama.cpp ni couche Metal intermédiaire. Et si le nom vous dit vaguement quelque chose, c'est normal puisque c'est un fork de vLLM-MLX, le serveur de Wayner Barrios dont je vous parlais en mai . Rapid-MLX a juste pris un rythme de publication plus soutenu des deux.

Ce que ça vous donne, c'est donc un serveur HTTP qui parle le même langage que l'API d'OpenAI et celle d'Anthropic. Vos scripts, Cursor, Aider, LangChain ou Claude Code continuent de fonctionner, sauf qu'ils tapent sur votre machine au lieu d'un datacenter.

Donc je vous propose de voir ensemble comment installer ça.

Étape 0 : Vérifier que votre Mac est éligible

Le script d'installation contrôle plusieurs choses avant de lancer quoi que ce soit, et autant les connaître d'avance. Il faut une puce Apple Silicon et il n'y a pas de version Linux ni Windows, ni de support CUDA ou AMD.

Le script d'installation accepte encore macOS 13 Ventura, mais le vrai plancher est macOS 14 Sonoma. La formule Homebrew l'exige, et surtout MLX, la brique Apple sur laquelle tout repose, ne publie de paquets macOS que pour les versions 14, 15 et 26. Sur un Mac resté en Ventura, ça cassera donc à l'installation des dépendances, quel que soit le chemin choisi.

Dernier point à avoir en tête, c'est pensé pour votre machine à vous et pas pour un serveur. Vous n'y trouverez donc ni authentification multi-utilisateurs, ni quotas de requêtes.

Étape 1 : Installer Rapid-MLX

Le plus simple, c'est Homebrew :

brew install rapid-mlx

Si vous gérez déjà vos environnements Python vous-même, les autres chemins existent :

uv tool install rapid-mlx@latest
python3.12 -m pip install rapid-mlx

Il y a aussi un installeur en une ligne (curl -fsSL https://rapidmlx.com/install.sh | bash) qui détecte votre RAM et vous propose un modèle adapté. Il crée un venv isolé dans ~/.rapid-mlx/ et pose le binaire dans ~/.local/bin/. Un curl | bash reste un curl | bash. La formule Homebrew fait exactement le même boulot, donc l'installeur en ligne perd de son intérêt.

L'installation de base pèse dans les 460 Mo et la vision, l'audio et les embeddings sont des extras optionnels, vous les ajouterez seulement si vous en avez l'usage.

Étape 2 : Choisir un modèle qui tient dans votre RAM

C'est là que la plupart des gens se plantent, en chargeant un modèle trop gros et en concluant que "ça rame". Sur Mac, la RAM est unifiée, donc le modèle mange directement dans la mémoire que se partagent le CPU et le GPU.

Les paliers recommandés par le projet :

RAMModèle conseillé
8 à 23 Go`qwen3.5-4b-4bit`
24 à 47 Go`gpt-oss-20b-mxfp4-q8`
48 à 95 Go`qwen3.6-35b-8bit`
96 Go et plus`gpt-oss-120b-mxfp4-q8`

Le catalogue complet se liste avec la commande rapid-mlx models, et rapid-mlx info <alias> vous donne le profil détaillé d'un modèle. Si vous voulez sortir du catalogue maison, le filtre matériel de Hugging Face que je vous montrais fin juin fait exactement ce tri à votre place.

Pour utiliser un autre modèle que celui par défaut, il suffit de reprendre l'alias affiché par rapid-mlx models et de le passer en argument. Et si vous préférez télécharger les poids à l'avance, sans rien lancer, c'est le boulot de rapid-mlx pull, qui accepte aussi bien un alias du catalogue qu'un identifiant Hugging Face :

rapid-mlx pull qwen3.5-9b-4bit

Le modèle atterrit dans le cache Hugging Face de votre machine, et ensuite rapid-mlx chat qwen3.5-9b-4bit ou rapid-mlx serve qwen3.5-9b-4bit chargeront ce modèle-là. Le pull préalable reste facultatif, chat et serve téléchargent d'eux-mêmes ce qui manque, mais autant rapatrier les gigas tranquillement avant plutôt qu'au moment où vous voulez bosser.

Étape 3 : Vérifier que ça tourne

Avant de bricoler des intégrations, testez en direct :

rapid-mlx chat

Ça part sur qwen3.5-4b-4bit par défaut, télécharge les poids au premier lancement (comptez 2,5 Go) et vous lâche dans une interface (REPL). /help listera les commandes slash, et /exit vous permettra de quitter le chat.

Une subtilité qui évite de mal interpréter ce premier test, c'est que dans le chat, le raisonnement est coupé par défaut, histoire que le modèle ne vous déballe pas sa réflexion à l'écran. En mode serveur par contre c'est l'inverse, et ça change la vitesse ressentie du tout au tout. J'y reviens plus bas.

Étape 4 : Lancer le serveur

Le vrai intérêt, c'est le mode serveur :

rapid-mlx serve qwen3.5-4b-4bit

Vous récupérez un endpoint sur http://localhost:8000. Le test qui confirme que tout est en place :

curl http://localhost:8000/v1/chat/completions \
 -H "Content-Type: application/json" \
 -d '{"model":"default","messages":[{"role":"user","content":"Dis bonjour !!"}]}'

Et côté Python, vous gardez le SDK OpenAI tel quel, seule l'URL de base change :

from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="not-needed")
print(client.chat.completions.create(
 model="default",
 messages=[{"role": "user", "content": "Say hello"}],
).choices[0].message.content)

Pointez n'importe quel client compatible OpenAI sur http://localhost:8000/v1 et c'est réglé. Cursor, Aider, LibreChat, Open WebUI, LangChain, tous marchent avec ce seul changement d'URL. Il y a aussi /v1/embeddings pour du RAG local et /v1/responses pour le Codex CLI.

Étape 5 : Brancher Claude Code dessus

C'est le morceau le plus intéressant du lot, et il tient en deux variables d'environnement. Serveur lancé d'un côté, puis dans un autre terminal :

ANTHROPIC_BASE_URL=http://localhost:8000 ANTHROPIC_API_KEY=not-needed claude

Attention quand même, l'URL de base doit être la racine, sans /v1 à la fin. Le SDK Anthropic ajoute /v1/messages tout seul, donc si vous mettez /v1 vous obtenez /v1/v1/messages et ça casse.

Depuis la 0.10.14, l'appel d'outils passe par une grammaire contrainte activée par défaut, donc plus besoin de bidouiller un --tool-call-parser à la main pour que les tool calls soient parsables. Pour du Claude Code sérieux, visez plutôt un gros modèle, la doc officielle recommande par exemple qwen3.6-35b-4bit en exemple.

Quand ça coince

Le réflexe à avoir avant de chercher ailleurs :

rapid-mlx doctor

Les trois pannes les plus courantes sont toujours les mêmes.

Débit décevant côté serveur, c'est le raisonnement : les Qwen 3.5 et 3.6 démarrent en mode réflexion, donc ils pensent à voix haute avant de répondre, et --no-think règle l'affaire.

Plantage mémoire, votre modèle est trop gros pour la RAM disponible, redescendez d'un palier ou prenez une quantification plus agressive. Appels d'outils qui arrivent en texte brut, la récupération automatique gère la plupart des cas, sinon vous forcez le parser correspondant à votre modèle.

Voilà, grâce à ça, votre Mac est maintenant un serveur d'IA super rapide ! Plus de facture au token, et vos prompts ne sortent plus de la pièce.

Merci à Philobois pour le lien !

Mage-Flow - Le modèle de diffusion de Microsoft qui tourne sur Mac

Microsoft vient de publier Mage-Flow, un modèle de génération d'images de 4 milliards de paramètres, et dont l'objectif est d'atteindre la qualité des gros modèles sans en avoir la taille. Là où FLUX.2 embarque 32 milliards de paramètres, Qwen-Image 20 et Z-Image 6, Mage-Flow joue dans la même cour mais seulement avec 4 milliards de paramètres.

Le pari de Microsoft, c'est ce qu'on appelle le co-design. Au lieu d'empiler les paramètres, Mage-Flow mise sur deux briques taillées ensemble. D'abord Mage-VAE, un tokenizer latent qui encode et décode les images avec 12 à 22 fois moins de calcul par pixel que le VAE de FLUX.2, à qualité de reconstruction équivalente. C'est ce qui débloque la haute résolution, habituellement le point où ces modèles s'étranglent.

Et ensuite un transformer de diffusion multimodal baptisé NR-MMDiT, entraîné en rectified flow matching, avec Qwen3-VL comme encodeur de texte. Un seul checkpoint génère alors de 512 à 2048 pixels, dans n'importe quel ratio, jusqu'à des formats extrêmes en 4:1 sans buckets ni padding. Vous demandez du 512×2048 ou du 2048×512, il vous le sort.

Le modèle existe en trois saveurs. La Base qui tourne en 30 étapes de débruitage, la version RL-aligned à 20 étapes, et la Turbo distillée qui crache une image en 4 étapes seulement. Et il y a son jumeau, Mage-Flow-Edit, qui fait de l'édition d'image par instruction. Vous lui donnez une photo et une consigne en langage naturel, et lui la modifie. Le tout sous licence MIT, poids libres sur Hugging Face, usage commercial compris.

Côté chiffres officiels, tout vient d'un A100 donc c'est pas représentatif sur nos machins mais en gros, on est à 0,59 seconde par image en Turbo, avec un pic mémoire de 18 à 20 Go. Sauf que moi, je n'ai pas d'A100. J'ai un Mac Studio. Et le dépôt ne parle que de CUDA. La doc d'install vous fait compiler flash-attn, qui est une extension qui a besoin d'un toolkit NVIDIA. Zéro mention d'Apple Silicon, zéro mention de MPS, et les exemples sont tous en mode device="cuda" en dur. Bref, pour le moment, je ne suis pas invité à la fête.

Mais en fouillant le code, j'ai trouvé la porte de sortie. Un fichier planqué dans les modules expose un backend alternatif basé sur scaled_dot_product_attention, le mécanisme d'attention natif de PyTorch, prévu JUSTEMENT pour quand flash-attn n'est pas dispo.

Et ce backend-là, il tourne nickel sur Metal. Le piège, c'est que le modèle réclame lui aussi flash-attn par défaut à deux endroits : le transformer, mais aussi l'encodeur Qwen3-VL. Le transformer accepte qu'on bascule plus tard alors que l'encodeur non. Lui, il lit son réglage au moment où il se construit et plante si flash-attn manque. Il faut donc forcer le mode SDPA avant de charger le modèle.

Voici ce que j'ai fait tourner, pour de vrai. On monte un environnement Python, on installe tout sauf flash-attn :

python3 -m venv mageflow && source mageflow/bin/activate

pip install torch torchvision diffusers==0.38.0 "transformers>=5.3,<5.6" accelerate safetensors huggingface_hub einops pydantic pillow loguru

pip install "git+https://github.com/microsoft/Mage.git#subdirectory=mage_flow" --no-deps

Une fois que c'est fait, y'a plus qu'à vous créer un petit script mage.py par exemple qui basculera l'attention sur SDPA avant le chargement, pointera sur mps et génèrera votre image :

import os
os.environ["PYTORCH_ENABLE_MPS_FALLBACK"] = "1"
from mage_flow.models.mage_flow import ModelConfig
ModelConfig.model_fields["attn_type"].default = "sdpa" # AVANT de charger, sinon Qwen3-VL exige flash-attn
ModelConfig.model_rebuild(force=True)

from mage_flow import MageFlowPipeline
pipe = MageFlowPipeline.from_pretrained("microsoft/Mage-Flow-Turbo", device="mps")
img = pipe.generate(["un barista avec un chapeau de cowboy qui réalise un latte art, lumière chaude"], heights=[1024], widths=[1024], steps=4, cfg=1.0)[0]
img.save("out.png")

Ensuite, lancez le script :

python3 mage.py

Le PYTORCH_ENABLE_MPS_FALLBACK sert de filet comme ça si une opération n'existe pas côté Metal, elle basculera sur le CPU au lieu de tout faire tomber. Premier lancement, le modèle se téléchargera, donc comptez une bonne dizaine de Go entre le transformer 4B, l'encodeur Qwen3-VL et le VAE.

Et ça marche !!! Sur mon M4 Max de 128 Go, le modèle charge en une vingtaine de secondes puis génère une image 1024×1024 en 10 secondes une fois chaud.

Mon barista à chapeau de cowboy est sorti impeccable.

Ma toute première génération Mage-Flow sur le Mac Studio : un barista, 1024x1024, 4 etapes en Turbo.

Cette image 1920x1080 a été générée en moins de 6 secondes,

Pour du batch industriel, une carte NVIDIA restera toujours mieux mais pour générer tranquillement chez soi des petites images sans envoyer ses prompts dans le cloud, c'est parfaitement utilisable, et ça rejoint la logique de l'IA qui tourne en local sur votre Mac que je creuse depuis un moment.

Deux détails à connaître avant de vous lancer. Chaque prompt passe par un filtre de contenu obligatoire côté encodeur, sans option pour le désactiver : les prompts jugés interdits reviennent en images de refus. Et chaque image générée porte un watermark Gaussian-Shading planqué dans le bruit initial, lui non plus désactivable. Hé oui, Microsoft trace ses sorties, donc autant le savoir.

Y'a des garde-fous ! J'ai donc très hâte que ce modèle se fasse "libérer".

Reste que c'est un très joli cadeau de la part de Microsoft ! Un modèle libre, compact, qui gère l'édition et n'importe quel ratio, et qui tient sur une machine Apple avec un petit réglage bien caché ^^...

ps: L'image d'illustration de cet article a été générée avec ce modèle.

Interroger ses fichiers Mac en local, sans cloud, avec bHive

bHive, c'est une app Mac qui lit l'intérieur de vos fichiers au lieu de se contenter de leur nom, et qui sait maintenant répondre à des questions dessus. Vous lui demandez "qu'est-ce que dit mon bail sur la résiliation anticipée ?", elle va fouiller vos PDF et vous sortir la réponse en clair, tout ça en local sur votre machine, sans rien envoyer nulle part.

Vous pointez bHive vers des dossiers que vous avez déjà, et elle lit ce qu'il y a dedans. Vos documents, les PDF, les images dont elle fait l'OCR, et depuis la 2.0 l'audio et la vidéo, transcrits directement sur le Mac. Ensuite vous cherchez en décrivant ce que vous voulez, plutôt qu'en essayant de vous souvenir du nom que vous aviez collé au fichier. Rien ne bouge, rien n'est copié dans une bibliothèque, vos fichiers restent exactement où ils sont, ils sont tout simplement indexés dans un RAG.

La vraie nouveauté de cette version, c'est "Ask bHive". Vous posez une question, l'app trouve les fichiers concernés, les lit, et vous répond en langage clair. Elle vous montre alors quels fichiers elle a utilisés, donc vous pouvez les ouvrir et vérifier vous-même et surtout, quand elle ne sait pas, elle le dit, au lieu d'inventer un truc qui sonne juste. Ça paraît con dit comme ça, mais c'est avec ça que la plupart des assistants IA vous plantent.

Bon, moi, je n'en ai pas vraiment besoin de cet outil parce que j'ai mis en place mes propres RAG, mais je me dis que si j'avais trouvé ça avant, je ne me serais pas fait chier.

Côté moteur, tout tourne en local, et le modèle intégré à macOS marche tout de suite, donc vous n'avez rien à télécharger. Si vous voulez de la recherche plus fine, il y a bien sûr un modèle plus costaud à récupérer, de 515 Mo.

Il y a aussi une vue "santé de la bibliothèque", histoire que vous sachiez ce qui n'est pas cherchable et pourquoi. Fichiers déplacés, disque externe débranché, format illisible, OCR raté, éléments encore dans la file d'attente. En gros, un tableau de bord de confiance au lieu de vous laisser deviner si la recherche couvre vraiment tout. Vous pouvez aussi sauvegarder vos collections, tags et notes dans un fichier pour les restaurer plus tard.

Je vous avais déjà parlé de Cardinal , qui rend la recherche de fichiers instantanée sur Mac sauf que Cardinal cherche par nom, là où bHive lit ce qu'il y a à l'intérieur et sait vous répondre avec beaucoup plus de richesse. On est une gamme au-dessus selon moi.

Après, bHive 2.0 réclame macOS 26 et une puce Apple Silicon donc si vous êtes resté sur macOS 15 comme un homme de cro-magnon, vous devrez rester sur la vieille version 1.3.1 qui continue de tourner, mais sans toutes ces nouveautés... sniiif.

Voilà, c'est gratuit, et ça respecte vos données puisque tout reste en local.

À tester !

Tim Cook quitte la direction d’Apple après quinze ans : retour sur un règne historique

Après quinze années à la tête de l’une des entreprises les plus influentes de la planète, Tim Cook passe la main. C’est John Ternus, actuel vice-président senior en charge de l’ingénierie matérielle, qui lui succédera à compter du 1er septembre prochain. Une transition qui marque la fin d’une ère pour Apple. Cook avait rejoint la ... Lire plus

L'article Tim Cook quitte la direction d’Apple après quinze ans : retour sur un règne historique est apparu en premier sur Fredzone.
❌