Documentation

Installer, télécharger et prendre des décisions typées

Laya-CoreML tourne sur Apple Silicon avec macOS 15+ et Python 3.11–3.13. Les contrôles de release locaux utilisent M3 Max / macOS 27.2. Les versions macOS plus anciennes et le déploiement iOS n’ont pas été testés ici. Les ML Programs exportés ciblent macOS 15 / iOS 18.

python -m pip install laya-coreml
# Terminal demo and recording renderer:
python -m pip install 'laya-coreml[demo]'

L’inférence installe Core ML Tools, NumPy, Tokenizers, Safetensors et Hugging Face Hub. Elle ne nécessite ni PyTorch, ni Transformers, ni MLX. L’extra optionnel [convert] installe PyTorch pour exporter les checkpoints d’origine.

Sélectionner un modèle

Bundle Hugging Face sous aac6fef/ Appareil par défaut Capacité d’entrée totale Lot / options Usage prévu
laya-coreml CPU + GPU 512 tokens 1 / 32 Laya anglais, 421M
laya-multilingual-coreml CPU + GPU 1024 tokens 1 / 32 Multilingue général, 322M
laya-typed-decisions-coreml CPU + GPU 1024 tokens 1 / 32 Checkpoint typed-decisions en amont
laya-multilingual-coreml-snake CPU + GPU 64 tokens 3 / 4 Prompts Snake compacts mis en lot
laya-multilingual-coreml-ane CPU + ANE 96 tokens 1 / 32 Décisions courtes, corps FP16
laya-multilingual-coreml-ane-w8 CPU + ANE 96 tokens 1 / 32 Poids de palette W8 approximatifs, calcul FP16

Les paquets ANE incluent leurs propres poids d’embedding/action hôte et le corps Core ML inchangé. Ils n’ont pas besoin d’un répertoire de checkpoint d’origine. La capacité de 96 tokens inclut la question, les descriptions d’options, les marqueurs spéciaux et l’état. Ces exports courts rejettent une requête qui ne tient pas. Les modèles généralistes conservent la troncature d’état en amont à leur limite de contexte de checkpoint complète ; les descriptions d’options utilisent aussi le budget d’origine du préfixe de question.

API Python

import laya_coreml as laya

agent = laya.load("aac6fef/laya-multilingual-coreml")
result = agent.predict(
    "The customer asks for a refund of a duplicate payment.",
    {
        "department": {
            "type": "choice",
            "instructions": "Which department should handle this request?",
            "criteria": {
                "billing": "Payments, invoices, refunds, and duplicate charges.",
                "technical": "Broken features, errors, and product troubleshooting.",
                "sales": "Pricing, upgrades, and new purchases.",
            },
        },
        "urgency": {
            "type": "score",
            "instructions": "How urgent is the request?",
            "criteria": ["low", "medium", "high"],
        },
        "refund": {
            "type": "noul",
            "instructions": "Does the customer request a refund?",
        },
    },
)
print(result["answers"])
print(result["usage"])  # output_tokens is always 0

choice renvoie un libellé sélectionné et une probabilité pour chaque libellé. score renvoie l’index de catégorie attendu indexé à partir de zéro, sa légende et ses probabilités. noul renvoie la probabilité de vrai. Les réponses incluent aussi les champs de confiance en amont et de probabilité de tête d’action. Ces estimations peuvent être fausses ; la validation de la bibliothèque mesure la fidélité de conversion, pas l’exactitude applicative.

predict et system_one sont des alias. Un état sous forme de dictionnaire est sérialisé selon les conventions d’entrée d’origine. Les questions sont traitées dans l’ordre d’insertion. La plupart des exports utilisent un lot de un ; plusieurs questions nécessitent donc plusieurs appels au modèle. L’export Snake GPU met en lot jusqu’à trois. L’encodeur bidirectionnel ne met pas en cache l’état contextuel d’une question à l’autre.

Télécharger une fois, puis travailler hors ligne

hf download aac6fef/laya-multilingual-coreml-ane --local-dir models/ane
agent = laya.load("./models/ane", local_files_only=True)
# Or use a previously downloaded shared Hub cache:
agent = laya.load("aac6fef/laya-multilingual-coreml-ane", local_files_only=True)

Les ID distants se téléchargent avant l’initialisation, sauf avec local_files_only=True. Les prédictions suivantes n’utilisent que des tableaux et des fichiers locaux. Pour reproduire un instantané distant exact, passe revision="<Hub commit SHA>" ; les ID de commit de release sont dans RELEASE.md. Le jeu terminal utilise toujours des poids locaux/en cache et échoue avec une commande de téléchargement quand ils manquent.

Le cache partagé de Hugging Face stocke les fichiers de modèle sous forme de liens symboliques. Sur la version macOS testée, Core ML peut copier ces liens dans son modèle compilé temporaire et perdre le fichier de poids. Le loader matérialise automatiquement le paquet Core ML seul sous forme de fichiers réguliers dans ~/.cache/laya-coreml/packages/, vérifie son hash de contenu et réutilise cette copie. Définis LAYA_COREML_CACHE pour changer cette racine de cache. Cela utilise de l’espace disque supplémentaire, pas des téléchargements de modèle supplémentaires. Un répertoire créé avec hf download --local-dir contient déjà des fichiers réguliers et n’a besoin d’aucune copie.

Le loader reconnaît le format du paquet et sélectionne ses unités de calcul par défaut. Remplace avec compute_units="cpu_gpu", "cpu_ne", "cpu" ou "all" pour une expérience explicite. cpu_ne autorise le travail CPU et le travail ANE ; cela ne garantit pas que chaque opération s’exécute sur l’ANE. Le choisir pour l’export SDPA ordinaire ne transforme pas cet export en graphe ANE dédié.

CLI

Enregistre le dictionnaire de questions dans questions.json, puis lance :

laya-coreml predict ./models/ane --offline \
  --state 'The customer requests a refund.' --questions questions.json

laya-coreml predict accepte un répertoire local ou un ID Hub, un --revision optionnel et --compute-units. --offline empêche l’accès au Hub.

Convertir depuis les sources

Pour le chemin Core ML ordinaire :

pip install 'laya-coreml[convert]'
laya-coreml convert laya-multilingual models/custom-multilingual

L’exportateur de recherche ANE vit dans le checkout Git, en dehors de la wheel d’inférence :

git clone https://github.com/mizorewww/laya-coreml
cd laya-coreml
pip install -e '.[convert,dev,research]'
python -m experiments.ane_engineering.probe --source laya-multilingual \
  --kind body --length 96 --output models/ane96

Voir les conclusions de conversion, l’ingénierie ANE et les contrôles et l’enregistrement Snake pour les workflows correspondants.