Une carte de titre générée affichant « Laya expliqué » au-dessus du sous-titre « Un modèle de décision qui répond sans écrire un seul token », avec un pied de page indiquant « Tous les chiffres proviennent de la fiche du modèle Laya, sauf indication contraire. »
Engineering & Research

Laya expliqué : un modèle de décision qui répond sans écrire un seul token

Auteur

Rowan Sterling

Date de publication

Derniers modèles · 20Voir tous les modèles
Benchmarks : Artificial Analysis · mis à jour quotidiennement
Retour à tous les articles

La chose la plus intéressante chez Laya n'est pas sa vitesse. C'est que chaque option que vous lui proposez est notée sur son propre [MASK] token, et les probabilités sont ensuite softmaxées sur les options de cette seule question. Convai Innovations a publié les poids de Laya sur Hugging Face le 18 septembre 2026, sous Apache 2.0 — trois checkpoints, un dépôt, 421M de paramètres pour le modèle anglais. Il n'y a pas de tokens de sortie. Il n'y a pas de boucle de décodage, pas de JSON à analyser, pas d'accolade à oublier de fermer. Vous lui fournissez un état et un ensemble de questions typées, et après une passe avant, vous obtenez un choix parmi des options nommées, un score ordinal avec un niveau attendu, ou une probabilité qu'une affirmation soit vraie. Ce design a une conséquence que les gens oublient : comme l'espace de réponses est assemblé par requête plutôt qu'intégré dans une tête de vocabulaire, un schéma que vous inventez cet après-midi n'a besoin d'aucun réentraînement. Il a aussi une limite, et le projet l'énonce clairement sur sa propre fiche de modèle : les checkpoints de base obtiennent 0.362 sur le benchmark typed-decisions, contre 0.318 pour une réponse aléatoire et 0.461 pour toujours répondre à la classe majoritaire. La phrase de Convai est celle à garder en tête — « Laya est une base rapide à spécialiser, pas un moteur de décision zero-shot. » Le point de comparaison évident est Jev de TypeSafe AI, un modèle System One hébergé, sans poids publiés, sans nombre de paramètres publié et sans modèle de base publié. Laya est la réponse à poids ouverts à cela. Que cette réponse vous soit utile dépend presque entièrement de la moitié du pipeline que vous essayez de remplacer.

Ce que Laya est réellement, et ce qu'elle n'est pas

Commençons par le point négatif, car c'est là que la plupart des comptes rendus se trompent. Laya n'est pas un LLM. Il est non autorégressif : une seule passe avant produit la réponse, et le modèle n'émet jamais de texte. Comparer sa latence aux jetons par seconde d'un modèle de chat revient à comparer deux opérations différentes — l'une classe, l'autre génère. Si vous avez besoin d'un paragraphe, d'un résumé, d'un plan ou d'une chaîne de raisonnement, Laya ne peut pas vous en fournir et ne cherche pas à le faire.

Ce que c'est : un encodeur bidirectionnel auquel est greffée une tête de décision. Le checkpoint anglais est ModernBERT-large — 395 M de paramètres, entièrement affiné — plus une tête entraînée de zéro composée de deux couches transformer, d'un scoreur de marqueur d'option et d'une tête act/escalate, pour un total de 421 M. Le checkpoint multilingue remplace le squelette par mmBERT-base, 22 couches et un vocabulaire de 256k, pour un total de 322 M. Trois checkpoints sont livrés dans un seul dépôt, et seul celui que vous demandez est téléchargé :

convaiinnovations/laya — ModernBERT-large, 421 M de paramètres, contexte de 512 tokens, anglais, environ 808 Mo sur disque.

convaiinnovations/laya-multilingual — mmBERT-base, 322 M de paramètres, contexte de 1 024 tokens (l'encodeur prend en charge jusqu'à 8 192 avec RoPE), plus de 100 langues, environ 2,2 fois plus rapide, environ 647 Mo.

convaiinnovations/laya-typed-decisions — ModernBERT-large, 421 M de paramètres, contexte de 1 024 tokens, et le seul des trois à porter le chiffre de 0,766 que vous verrez cité partout.

Un routeur se place en amont et choisit le checkpoint par requête en détectant le système d’écriture et la langue en moins d’une demi-milliseconde, en Python pur, avant même qu’une passe avant n’ait lieu. Ce n’est pas une fonctionnalité de confort. C’est une fonctionnalité de justesse, et les preuves propres au projet montrent pourquoi : le checkpoint anglais obtient une précision de 0,000 en khmer tout en affichant une confiance de 0,952. Un modèle qui reste confiant tout en étant complètement faux est exactement le cas où le contrôle par la confiance ne peut pas vous sauver, la décision de routage doit donc être prise avant que le modèle ne voie l’entrée. Sur un balayage de 51 langues, le routeur a rendu 45 des 51 langues utilisables — défini comme dépassant trois fois le hasard — contre 23 des 51 pour le seul checkpoint anglais.

A screenshot of the Laya model card on Hugging Face, showing the three checkpoints (convaiinnovations/laya, laya-multilingual and laya-typed-decisions) with their parameter counts and context windows, the choice, score and noul primitives, the Apache 2.0 licence, and the zero-shot and fine-tuned accuracy figures.

Le fait de conception qu'il vaut la peine de comprendre : un token [MASK] par option

Si vous ne retenez qu’une chose de cet article, retenez ceci. Dans une tête de classification classique, l’ensemble des étiquettes est fixé au moment de l’entraînement : la couche finale a une sortie par classe, et ajouter une classe implique un réentraînement. Laya ne fait pas cela. Il représente chaque option sous forme de texte avec un marqueur, et le scoreur option-marqueur lit un score à partir de sa propre position [MASK]. Ensuite, il applique un softmax sur les options appartenant à cette question.

L’espace de réponse est donc défini au moment de la requête. Vous écrivez les options, le modèle les évalue. Un nouveau schéma ne nécessite ni réentraînement ni ajustement fin, car rien dans les poids n’encode « facturation » ou « technique » comme classe — seulement le mécanisme permettant de comparer une option rendue à une autre dans le contexte de l’état.

Deux budgets déterminent l'efficacité de ce fonctionnement, et ils sont partagés. Chaque séquence se divise en un budget de prompt d'options (head_max_len, 192 jetons sur le point de contrôle anglais et 256 sur les deux autres) et un budget de document (ce qui reste de max_len). Chaque question d'un appel reçoit une réponse dans cette même passe avant unique, donc un appel avec six questions ne correspond pas à six invocations du modèle. Mais les options partagent le budget d'options, c'est pourquoi une question à 77 options comme Banking77 alloue environ trois à quatre jetons par étiquette et la précision chute brutalement — 0,425 contre le 0,870 publié par Jev. Le correctif est documenté plutôt que caché : augmenter head_max_len et max_len, ou diviser un grand ensemble d'options en un choix en deux étapes, du plus grossier au plus fin.

Les trois primitives

Tout ce que fait Laya relève de l’un de trois types de questions, et chacun renvoie une forme différente :

choix — une probabilité par option nommée, plus l'étiquette principale et un score de confiance. C'est la primitive de routage et de classification d'intention.

score — une distribution sur une grille ordonnée, plus un niveau attendu. C'est la primitive ordinale : urgence, frustration, gravité.

noul — une probabilité calibrée qu'une affirmation soit vraie, de 0,0 à 1,0. Hameçonnage, risque d'attrition, injection de prompt.

Les types sont stricts d'une manière qui compte sur le plan opérationnel. Une question à choix ne peut pas renvoyer une option que vous n'avez pas fournie, car les seules options qu'elle peut évaluer sont celles que vous avez produites. Cela élimine toute une classe de défaillances en production — la valeur d'énumération inventée, le JSON tronqué, la boucle de réessai autour d'un parseur. Cela n'élimine pas l'erreur sémantique. Un modèle qui renvoie billing: 0.94 pour un ticket qui aurait dû être orienté vers le support technique se trompe, et il se trompe avec assurance. Une sortie typée garantit la forme de la réponse, jamais son exactitude.

RLCD, ou pourquoi les probabilités sont censées signifier quelque chose

La plupart des classificateurs sont entraînés à avoir raison. Laya est entraîné à être honnête sur son degré de justesse, et c’est de sa recette d’entraînement que cela vient.

La méthode s'appelle RLCD — Reinforcement Learning for Calibrated Decisions. La politique émet une distribution plutôt qu'un argmax ; l'exploration ajoute un bruit gaussien de moyenne nulle aux logits ; et la récompense est une règle de score strictement propre — log plus sphérique, avec un score de probabilité classé ajouté pour les questions ordinales. C'est le mot « propre » qui fait le travail. Une règle de score strictement propre n'est maximisée en espérance que si l'on rapporte ses véritables croyances ; ainsi, se couvrir ou surdéclarer fait perdre de la récompense par construction plutôt que par consigne. Les mises à jour sont de type REINFORCE avec une baseline de moyenne de groupe, à la GRPO, et les conversations multi-tours utilisent TD(λ=1.0) sur des tranches de préfixe.

La conséquence pratique, c'est qu'un seuil de confiance est une base sensée pour construire une logique applicative — une affirmation que l'on ne peut pas faire à propos d'un softmax issu d'un classifieur entraîné avec une entropie croisée. C'est aussi une affirmation assortie d'une mise en garde que le projet annonce d'emblée : les checkpoints fournis sont trop confiants, et vous êtes censé réajuster une température sur vos propres données avant de faire confiance aux chiffres. Réajuster une température par type de question et par nombre d'options a fait passer l'ECE moyen de 0,466 à 0,081 sur le checkpoint anglais et de 0,314 à 0,106 sur le multilingue. Le seuil de départ suggéré par le projet pour l'approbation automatique par rapport à la relecture humaine est d'environ 0,85.

Ce que coûte son fonctionnement

Les chiffres de latence sont ceux du projet, mesurés sur une Tesla T4, chaque checkpoint répondant à des questions identiques octet pour octet dans la même exécution :

• Une question — 39,5 ms sur laya, 32,8 ms sur laya-multilingual.

• Cinq questions — 84,5 ms et 40,1 ms.

• Dix questions traitées par lots — 158,6 ms (15,9 ms par question) et 72,3 ms (7,2 ms par question).

• Cinquante questions — 771 ms et 337 ms, soit 6,8 ms par question sur le checkpoint multilingue.

• Débit par lots sur un seul T4 — de 103 à 332 questions par seconde.

Si vous avez vu circuler une affirmation selon laquelle « 50x plus rapide que Jev », ce n’est pas le chiffre du projet et le benchmark du projet lui-même ne le soutient pas. La comparaison publiée par Convai est de 7,8x sur la latence p50 pour une question : 32,8 ms contre 236–276 ms. C’est aussi la comparaison à lire attentivement, car la fiche de Laya qualifie le côté Jev de chiffres publiés par des tiers que Convai n’a jamais mesurés — il n’a pas accès à l’API TypeSafe — et parce qu’elle oppose une passe avant sur GPU local à un appel d’API hébergé qui inclut l’aller-retour réseau et la mise en file d’attente. La partie architecturale de cet écart est réelle. La partie liée à l’infrastructure n’est pas une propriété du modèle.

Côté mémoire, l'empreinte est de quelques centaines de mégaoctets par checkpoint, et le tableau de déploiement vaut la peine d'être connu avant de dimensionner un hôte. Le mode par défaut paresseux garde deux checkpoints résidents (anglais et multilingue, les deux seuls entre lesquels le routeur choisit automatiquement), donc après le premier chargement de chaque langue, un changement ne coûte que la détection. Router(max_loaded=1) sur une machine à mémoire limitée recharge à chaque changement de langue, mesuré à 7,4 secondes en médiane sur CPU et 10,3 secondes sur un T4. Router(preload=True) est la configuration serveur : rien n'est rechargé, et la latence par requête est de 32,8 ms sur GPU ou de 193–464 ms sur CPU.

La moitié honnête

C’est là que l’article justifie sa raison d’être, car la surface autour de Laya est tapageuse et les limites sont précises.

D'abord, le chiffre phare est un chiffre affiné. La précision de 0,766 appartient à laya-typed-decisions, le checkpoint affiné sur le propre découpage d'entraînement de ce benchmark. Les checkpoints de base obtiennent 0,362 et 0,342 en zero-shot, face à une base de référence aléatoire de 0,318 et une base de référence de classe majoritaire de 0,461 — en d'autres termes, en dessous de la base de référence triviale. Le projet le reconnaît dans sa propre liste de limites plutôt que de l'enterrer, et le checkpoint affiné dépasse le plafond de 0,735 d'auto-accord de l'enseignant, ce qui est un résultat véritablement solide pour un encodeur de 421 M sur quatre flux de travail étroits (traitement des factures 0,804, incidents de sécurité 0,766, service client 0,764, observabilité des traces d'agents 0,730). Mais c'est un résultat qui porte sur la spécialisation, pas sur le modèle de base, et quiconque cite 0,766 comme une capacité générale se méprend sur la fiche.

Deuxièmement, les primitives ne se valent pas. En termes de précision sur le checkpoint affiné : noul 0,857, choice 0,733, score 0,723. Le projet qualifie l'ordinal score « la primitive la plus faible » sans détour, avec SST-5 à 0,372. Si votre surface de décision est une évaluation de gravité de 1 à 5, c'est la primitive à laquelle vous avez le moins de raisons de faire confiance d'emblée.

Troisièmement, deux comportements sont documentés comme des bogues dans le gestionnaire de tickets propre au projet, et tous les deux vous causeront des ennuis en production si vous ne les lisez pas. action.act_probability ne porte encore aucun signal exploitable — ticket #185 — parce que la sortie de la tête de décision n'est pas normalisée, à environ 300 fois l'échelle de l'encodeur, ce qui sature la tête d'action au point qu'elle affiche 1,0 pour presque toutes les entrées. Ses logits bruts vont à l'encontre de l'exactitude, avec un AUROC de 0,30 sur 396 décisions étiquetées. Basez-vous sur la confiance à la place, qui atteint un AUROC de 0,77 sur les mêmes éléments. Séparément, noul peut suivre ses propres libellés d'option au lieu de l'état — ticket #156 — parce que render_options code en dur les libellés d'un noul à false: / true:, et cette paire de libellés peut dominer la réponse, renvoyant un « non » confiant pour une entrée clairement positive. La solution de contournement documentée consiste à poser la même question sous la forme d'un choix à deux options avec des clés neutres et votre formulation oui/non comme descriptions.

Quatrièmement, un détail de calibration facile à manquer et qui mérite d'être énoncé avec précision. Le checkpoint fournit une température ajustée de 0,1006 pour le bucket choice:11+, et le loader borne toute température dans l'intervalle [0,5 ; 5,0]. Ce bornage vous rend service. Une température aussi tranchée pourrait prendre une distribution réellement divisée et la présenter comme une quasi-certitude ; le bornage fait que le pire des cas est une réponse plus adoucie que ce que l'ajustement prévoyait, et le loader émet un avertissement nommant le bucket concerné et vous invitant à considérer cette confiance comme non calibrée. Lisez les avertissements au chargement plutôt que de les supprimer.

Cinquièmement, l'anglais uniquement à la racine du dépôt, et le mode de défaillance hors anglais n'est pas élégant — d'où le routeur, et d'où la recommandation d'utiliser laya-multilingual pour tout ce qui n'est pas de la prose anglaise.

L'image indépendante, là où elle existe, est plus étroite que celle du fournisseur et ne la contredit pas. Un comparatif direct indépendant — sysone-bench, 751 états répartis sur neuf suites, daté du 2026-09-21, exécuté sur des entrées identiques octet pour octet, avec des hachages de questions vérifiés identiques avant comparaison — place Jev en tête sur le triage, les garde-fous, la modération, banking77 et l'intention multilingue, et Laya en tête sur AG News (0,940 contre 0,910) et MNLI (0,983 contre 0,867). Son résultat en matière de filtrage par confiance est celui sur lequel je planifierais réellement : un filtrage à un seuil de confiance de 0,85 a conservé 58 % du trafic de Laya avec une précision de 0,878, contre 78 % de celui de Jev avec 0,917. Telle est la forme du compromis — Laya automatise une part moindre du trafic, avec une précision plus faible sur la portion qu'elle conserve, et sa propre exécution de routeur fait passer l'intention multilingue de 0,360 à 0,840.

La surface qui l'entoure, qui est exceptionnellement large

Pour un projet dont les poids n'ont que quelques jours, c'est la surface d'intégration qui surprend. Tout cela se trouve dans le dépôt amont à l'adresse NandhaKishorM/laya, qui affichait 19 871 étoiles sur GitHub au moment de la rédaction de cet article, et l'ensemble est sous Apache 2.0 :

laya-serve — un serveur HTTP qui expose le Router sur la même forme de requête et de réponse POST /v1/systemone que l'API Jev hébergée de TypeSafe, de sorte qu'un client TypeSafe existant migre en changeant simplement son URL de base. Mentionnons honnêtement la configuration de sécurité par défaut : il se lie à 0.0.0.0 sans authentification, sauf si LAYA_API_KEY est définie, auquel cas il exige un jeton bearer. Il existe une variante durcie du module NixOS qui s'exécute sous une unité systemd DynamicUser et transmet le jeton via LoadCredential plutôt que de le placer dans le store.

• Un portage TypeScript complet dans laya-ts/ pour Node et le navigateur, plus un chemin d'agent ONNX (laya.onnx_agent.ONNXAgent) pour exécuter un modèle exporté sur ONNX Runtime sans PyTorch à l'exécution.

• Un serveur MCP derrière un extra optionnel, exposant laya_predict, laya_route, laya_preset et laya_status comme outils.

• Intégrations LangChain et LangGraph — LayaRouter pour le routage par arêtes conditionnelles avec un seuil de confiance et un repli, et LayaGuardrail.

• Un flake Nix avec nix run .#laya-serve et un module services.laya-serve, quatre fichiers compose, un chemin d'image Docker avec un démarrage rapide documenté, et un notebook Kaggle qui exécute la boucle complète de fine-tuning RLCD sur des GPU 2xT4 gratuits en quatre à cinq heures sur environ 30 000 questions.

A screenshot of the Laya repository on GitHub, showing the repository description, the three-checkpoint table, the Route Mode quickstart, the 23-of-51 versus 45-of-51 language sweep, the Khmer 0.000 accuracy at 0.952 confidence, the self-hosting curl example with the note that the server binds 0.0.0.0 with no authentication unless LAYA_API_KEY is set, the architecture and RLCD training sections, the speed and Laya-versus-Jev benchmark tables, and the honest limits list.

Apache 2.0 est le détail de licence qui détermine si vous pouvez l'intégrer dans un produit : elle autorise l'usage commercial, la modification et la redistribution, et elle ne vous oblige pas à publier vos modifications ni vos poids affinés. L'obligation est celle, habituelle, d'attribution et de conservation des mentions, à quoi s'ajoute l'absence explicite de concession de brevet ou de marque au-delà de ce que la licence stipule. Pour une couche de décision qui se place devant le trafic client, c'est une proposition matériellement différente d'un point de terminaison hébergé en accès anticipé dont les poids, l'architecture et la recette d'entraînement ne sont pas divulgués — ce qu'est Jev aujourd'hui, à 0,042 $ par million de jetons d'entrée, avec une sortie gratuite et une interface d'entrée texte uniquement.

Où cela s'intègre réellement : une tête de décision devant, un LLM routé derrière

Le schéma qu'il vaut la peine d'intérioriser n'est pas « un modèle de décision à la place d'un LLM ». C'est un pipeline en deux étapes, et les deux étapes existent parce que l'autre est mauvaise dans quelque chose.

Placez Laya en première ligne pour le jugement à fort volume, étroit et consommable par machine : router le ticket, classer l'intention, évaluer l'urgence, décider si ce document est pertinent pour la requête, vérifier si ce brouillon enfreint une politique. Ces appels ont un ensemble de réponses fixe, ils se produisent des milliers de fois par heure, et une passe avant locale de 33 millisecondes avec zéro jeton de sortie leur convient mieux qu'un aller-retour génératif. Ensuite, placez un modèle génératif derrière pour les appels qui ont véritablement besoin de prose, de synthèse ou de raisonnement sur un long contexte — la rédaction, l'explication, le résumé d'escalade.

C'est là que se situe OrcaRouter, et il vaut la peine d'être précis sur la frontière. Nous n'hébergeons pas Laya ; c'est un encodeur de 421 M que vous exécutez vous-même, et tout son intérêt est qu'il tourne là où vos données se trouvent déjà. Nous n'hébergeons pas non plus Jev — c'est le point de terminaison en accès anticipé de TypeSafe. Ce que nous couvrons, c'est la moitié générative de ce même pipeline : plus de 200 modèles derrière une seule clé compatible OpenAI, au prix catalogue du fournisseur répercuté avec 0 % de marge, avec basculement automatique entre fournisseurs. La raison pratique qui compte ici, c'est la couture entre les deux moitiés. Dès l'instant où vous commencez à router des décisions vers un modèle génératif pour les cas que la tête de décision a refusés, vous avez une seconde intégration, une seconde facture et un second mode de défaillance. Une seule clé pour le côté génération, avec basculement si un fournisseur se dégrade, signifie que le chemin d'escalade de la couche de décision relève d'un changement de configuration plutôt que d'une seconde relation fournisseur. C'est une affirmation modeste, et c'est la vraie.

Qui devrait l’adopter, et qui devrait attendre

Adoptez Laya dès maintenant si vous disposez de données étiquetées et d'une boucle d'entraînement, ainsi que d'une surface de décision suffisamment stable pour valoir la peine d'être spécialisée. Le notebook Kaggle existe précisément pour que l'étape de fine-tuning ne soit pas un projet de recherche, les checkpoints de base se chargent en environ deux secondes sur CPU, et la licence vous permet de livrer le résultat commercialement sans publier vos poids. Les charges de travail qui conviennent le mieux sont celles que le projet a déjà évaluées : tri des tickets, traitement des factures, classification des incidents de sécurité, garde-fous et modération, et observabilité des traces d'agents. Gardez les questions à choix sous environ 20 options, calibrez une température sur vos propres données de validation avant de mettre un seuil en production, et conditionnez sur confiance, jamais sur l'act_probability.

Attendez si votre décision doit être correcte d’emblée, sans données étiquetées. Un checkpoint de base qui se situe sous la baseline de la classe majoritaire sur le benchmark sur lequel il a été publié n’est pas un moteur zero-shot, et la lecture honnête des chiffres des fournisseurs par rapport aux chiffres indépendants est qu’une API de décision hébergée bien gérée constitue actuellement le choix zero-shot le plus solide. Attendez également si vos ensembles d’options sont vastes et que vous n’êtes pas disposé à ajuster le budget alloué à la tête, si votre scoring ordinal doit être fiable immédiatement, ou si vous avez besoin d’entrées image, audio ou de documents longs — Laya est uniquement textuel et son budget de contexte est de 512 à 1 024 tokens par défaut, ce qui correspond à une sélection d’éléments de preuve plutôt qu’à un document entier.

Ce qui décidera de cette catégorie, ce ne sont pas les chiffres de latence, qui sont déjà suffisamment bons pour ne plus être l’argument. C’est de savoir si un petit modèle qui rapporte des probabilités honnêtes sur une surface de décision que vous avez définie, et que vous pouvez réentraîner sur vos propres étiquettes, l’emporte sur le fait d’appeler un grand modèle génératif et d’analyser sa sortie. Laya est une première tentative sérieuse et crédible de la version à poids ouverts de cette question — et elle a tout au plus quelques jours, ce qui est la bonne façon de lire tout ce qui précède. La base est le point de départ, pas le produit.

A generated single-column scoreboard titled "Laya - the scoreboard" with six labelled rows reading Architecture: non-autoregressive encoder plus decision head; Parameters: 421M total; Output tokens: zero, one forward pass; Zero-shot accuracy: 0.362 versus 0.461 majority class; Fine-tuned accuracy: 0.766 on typed-decisions; Licence: Apache 2.0, weights published; with a footer reading "All figures vendor-reported by Convai Innovations on its own harnesses."