Modèle / jeu de données
lmstudio-ai/lmstudio-js avatar
lmstudio-ai/lmstudio-js

@lmstudio/sdk : piloter des LLM locaux depuis TypeScript

LM Studio TypeScript SDK

1 775 étoiles301 forksTypeScriptMIT

En bref

De quoi s’agit-il ?
Le SDK officiel de LM Studio en TypeScript expose le chargement des modèles, les paramètres d'inférence et les agents locaux. Sa vraie valeur tient à ce qu'il fait et que le SDK openai ne fait pas : gérer le cycle de vie du modèle. Sa contrainte principale est qu'il suppose un runtime LM Studio joignable.
À qui s’adresse-t-il ?
Adoptez @lmstudio/sdk si votre application doit décider elle-même quel modèle est en mémoire et avec quels paramètres de chargement, et si vous acceptez de dépendre d'un runtime LM Studio. Passez votre chemin si vous visez un backend d'inférence que vous hébergez et configurez vous-même : le SDK ne remplace pas un serveur, il le pilote.
Puis-je l’utiliser commercialement ?
Oui. MIT est une licence permissive : vous pouvez utiliser, modifier et vendre un logiciel qui en dépend, à condition de conserver les mentions de droit d’auteur et de licence.
Est-il encore maintenu ?
Oui. Le dépôt a reçu de nouveaux commits au cours des dernières 24 heures.
En quel langage est-il écrit ?
Principalement TypeScript, d’après les statistiques de langage de GitHub.

Ces réponses reposent sur les données GitHub du projet (dernière synchronisation le 15 septembre 2026) et sur notre analyse. Elles ne constituent pas un avis juridique.

ANALYSE OPEN SOURCE APPROFONDIE

Le problème que le SDK openai laisse entier

Le README est explicite sur le point de départ : le SDK openai est conçu pour les modèles propriétaires d'OpenAI, et il lui manque ce qui compte en local. La liste donnée par le projet est concrète : gérer le chargement et le déchargement des modèles en mémoire, configurer les paramètres de chargement (longueur de contexte, réglages de déport GPU), le décodage spéculatif, et obtenir des informations sur un modèle comme sa longueur de contexte ou sa taille.

Ce n'est pas une question de confort d'API. En local, la mémoire est la ressource rare. Un modèle qui reste chargé alors qu'il n'est plus utilisé bloque la place d'un autre. Un contexte dimensionné trop large peut empêcher le chargement. Le SDK openai ne connaît pas ces objets : il envoie une requête à un service qui a déjà décidé de tout. @lmstudio/sdk s'adresse donc aux développeurs TypeScript et JavaScript qui veulent que leur application décide elle-même de l'état du moteur d'inférence, et pas seulement du contenu des messages.

Un client, un modèle, une réponse

Le mécanisme tient en trois appels. On instancie un LMStudioClient sans argument dans l'exemple du README, on demande un modèle par son nom, puis on appelle respond sur cet objet.

import { LMStudioClient } from "@lmstudio/sdk"; const client = new LMStudioClient(); const model = await client.llm.model("llama-3.2-1b-instruct"); const result = await model.respond("What is the meaning of life?"); console.info(result.content);

La séparation entre client et modèle est le point de conception à retenir. Le client représente la connexion au runtime, le modèle représente une instance chargée sur laquelle on peut agir. C'est ce qui rend possibles les opérations de gestion absentes d'un simple client HTTP : charger, configurer, décharger. La documentation du projet décrit aussi deux autres usages au même niveau : la prédiction de complétion de texte, distincte du chat, et la génération d'embeddings. Le SDK couvre donc à la fois la génération et la représentation vectorielle, sans qu'il faille deux bibliothèques.

Sur l'exécution, le README annonce la prise en charge du navigateur et de tout environnement compatible Node. Il ne détaille pas, dans le texte fourni, comment le client découvre le runtime ni quels paramètres de connexion sont acceptés. C'est une zone que je ne peux pas trancher à partir de cette seule source.

Des fonctions transformées en outils, et des agents qui tournent en local

Le deuxième axe du SDK est l'agentique. Le README indique que l'on peut définir des fonctions comme outils et transformer les LLM en agents autonomes qui s'exécutent entièrement en local. Le mot important est entièrement : la boucle d'appel d'outils ne dépend pas d'un service distant.

Pour un lecteur qui a déjà écrit une boucle tool calling à la main, l'intérêt est de ne pas réimplémenter la plomberie entre le modèle, l'appel de fonction et le retour du résultat. Pour un lecteur qui n'en a jamais écrit, la promesse d'autonomie mérite d'être lue avec prudence : un agent local reste limité par le modèle chargé, et un petit modèle comme celui de l'exemple du README, llama-3.2-1b-instruct, n'est pas un modèle sur lequel on bâtit un agent fiable. Le SDK fournit le mécanisme, pas la qualité de raisonnement. La documentation renvoie à une page dédiée pour la partie agent, ce qui suggère que le sujet a ses propres règles, mais le README ne les expose pas.

Installation et build : deux chemins distincts

Pour consommer la bibliothèque, une seule commande, donnée dans le README :

npm install @lmstudio/sdk --save

Pour contribuer ou travailler sur le dépôt lui-même, la procédure est différente et le détail compte :

git clone https://github.com/lmstudio-ai/lmstudio-js.git --recursive cd lmstudio-js npm install npm run build

Le drapeau --recursive n'est pas décoratif. Il indique que le dépôt embarque des sous-modules, et un clone sans ce drapeau laissera des répertoires vides que npm run build ne pourra pas compenser. Si vous comptez lire le code source pour comprendre le comportement réel du client, c'est la première erreur à éviter. Le README renvoie à CONTRIBUTING.md pour la suite, sans en détailler le contenu.

Ce que le SDK ne fait pas

La limite la plus structurante n'est pas technique, elle est architecturale : @lmstudio/sdk est un client. Il suppose un runtime LM Studio disponible. Le README ne décrit pas de mode embarqué, pas de moteur d'inférence inclus dans le paquet, pas de serveur autonome. Si votre contrainte est de déployer un service qui charge lui-même ses poids sans dépendre d'une application distincte, ce SDK n'est pas l'outil : il faudra regarder du côté d'un serveur d'inférence que vous contrôlez.

Deuxième limite, la documentation disponible ici est mince sur les paramètres. Le README mentionne la configuration des paramètres d'inférence et renvoie à une page externe, sans nommer les clés. Je ne peux donc pas lister ici les options de chargement, leur nom exact ou leur valeur par défaut. Toute affirmation de ce type serait inventée.

Troisième point, le projet lui-même oriente les utilisateurs Python vers lmstudio-python. Cela signifie que le support TypeScript et le support Python sont deux dépôts séparés, avec deux cycles de publication. Une équipe polyglotte devra suivre les deux.

Face au SDK openai : la différence n'est pas la syntaxe

La comparaison naturelle est celle que le README pose lui-même. Le SDK openai est décrit comme généré automatiquement, tandis que lmstudio-js est présenté comme conçu depuis le départ pour être lisible par des développeurs TypeScript et JavaScript. C'est un argument d'ergonomie, et il se vérifie ou non en lisant les types.

La différence de fond est ailleurs. Avec le SDK openai pointé sur un serveur local compatible, vous pouvez envoyer des requêtes et obtenir des réponses. Vous ne pouvez pas demander au serveur de libérer la mémoire d'un modèle, ni de recharger le même modèle avec une longueur de contexte différente, ni de vous renseigner sur la taille du modèle chargé. Ces opérations, le README les cite comme manquantes dans le SDK openai et comme présentes ici. C'est le vrai critère de choix : si votre application ne fait qu'envoyer des messages à un modèle déjà chargé, l'écart entre les deux SDK se réduit à la qualité des types. Dès qu'elle doit arbitrer entre plusieurs modèles ou ajuster le chargement, l'écart devient fonctionnel.

Maintenance, licence et coût de suivi

Le dépôt est publié sous licence MIT, ce qui autorise l'usage commercial, la modification et la redistribution, à condition de conserver l'avis de licence. Ce n'est pas un avis juridique : lisez le texte de la licence et, si votre organisation a des règles internes sur les dépendances, faites-les appliquer.

Sur la maintenance, le matériel fourni ne contient aucune release récente, ce qui empêche toute évaluation du rythme de publication. Le dépôt n'est pas archivé et le dernier push est daté, mais je ne peux rien en déduire sur la fréquence des versions ni sur la politique de compatibilité. Le coût de mise à jour réel dépend donc de deux choses que vous devrez constater vous-même : la fréquence des changements cassants dans l'API du client, et la concordance entre la version du SDK et celle du runtime LM Studio installé. C'est le point de friction classique d'un SDK client adossé à une application : les deux doivent avancer ensemble. La commande npm install @lmstudio/sdk --save ne fixe pas cette correspondance à votre place.

Conclusion éditoriale

Adoptez @lmstudio/sdk si votre application doit décider elle-même quel modèle est en mémoire et avec quels paramètres de chargement, et si vous acceptez de dépendre d'un runtime LM Studio. Passez votre chemin si vous visez un backend d'inférence que vous hébergez et configurez vous-même : le SDK ne remplace pas un serveur, il le pilote. Avant d'écrire du code applicatif, vérifiez trois choses dans votre environnement : que lmstudio-js est bien cloné avec --recursive, que npm run build passe, et que client.llm.model résout le nom de modèle que vous comptez utiliser.

Sources officielles

  1. Issues
  2. License: MIT
  3. lmstudio-ai/lmstudio-js on GitHub
  4. Project website
  5. README
Notes de la communauté

Notes de la communauté