Dokumentation

Installieren, herunterladen und typisierte Entscheidungen treffen

Laya-CoreML läuft auf Apple Silicon mit macOS 15+ und Python 3.11–3.13. Die lokalen Release-Prüfungen verwenden M3 Max / macOS 27.2. Ältere macOS-Versionen und ein iOS-Deployment wurden hier nicht getestet. Exportierte ML Programs zielen auf macOS 15 / iOS 18.

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

Die Inferenz installiert Core ML Tools, NumPy, Tokenizers, Safetensors und Hugging Face Hub. Sie benötigt kein PyTorch, Transformers oder MLX. Das optionale [convert]-Extra installiert PyTorch zum Exportieren der ursprünglichen Checkpoints.

Ein Modell auswählen

Hugging-Face-Bundle unter aac6fef/ Gerätestandard Gesamte Eingabekapazität Batch / Optionen Verwendungszweck
laya-coreml CPU + GPU 512 Tokens 1 / 32 Englisches Laya, 421M
laya-multilingual-coreml CPU + GPU 1024 Tokens 1 / 32 Allgemeines mehrsprachiges Modell, 322M
laya-typed-decisions-coreml CPU + GPU 1024 Tokens 1 / 32 Upstream-Typed-Decisions-Checkpoint
laya-multilingual-coreml-snake CPU + GPU 64 Tokens 3 / 4 Gebündelte kompakte Snake-Prompts
laya-multilingual-coreml-ane CPU + ANE 96 Tokens 1 / 32 Kurze Entscheidungen, FP16-Body
laya-multilingual-coreml-ane-w8 CPU + ANE 96 Tokens 1 / 32 Approximative W8-Palettengewichte, FP16-Berechnung

Die ANE-Pakete enthalten ihre eigenen Host-Embedding-/Action-Gewichte und den unveränderten Core ML-Body. Sie benötigen kein ursprüngliches Checkpoint-Verzeichnis. Die 96-Token-Kapazität umfasst die Frage, Optionsbeschreibungen, spezielle Marker und den Zustand. Diese kurzen Exporte weisen eine Anfrage zurück, die nicht passt. Die Allzweckmodelle behalten die Upstream-Zustandstrunkierung bei ihrem vollen Checkpoint-Kontextlimit; Optionsbeschreibungen verwenden außerdem das ursprüngliche Frage-Präfix-Budget.

Python-API

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 gibt ein ausgewähltes Label und eine Wahrscheinlichkeit für jedes Label zurück. score gibt den erwarteten nullbasierten Kategorieindex, seine Legende und Wahrscheinlichkeiten zurück. noul gibt die Wahrscheinlichkeit für true zurück. Antworten enthalten außerdem Upstream-Konfidenz- und Action-Head-Wahrscheinlichkeitsfelder. Diese Schätzungen können falsch sein; die Validierung der Bibliothek misst Konvertierungstreue, nicht Anwendungsgenauigkeit.

predict und system_one sind Aliase. Ein Dictionary-Zustand wird mit den ursprünglichen Eingabekonventionen serialisiert. Fragen werden in Einfügereihenfolge verarbeitet. Die meisten Exporte verwenden Batch eins; mehrere Fragen erfordern daher mehrere Modellaufrufe. Der Snake-GPU-Export bündelt bis zu drei. Der bidirektionale Encoder cached keinen kontextuellen Zustand über verschiedene Fragen hinweg.

Einmal herunterladen, dann offline arbeiten

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)

Remote-IDs werden vor der Initialisierung heruntergeladen, sofern nicht local_files_only=True. Nachfolgende Vorhersagen verwenden nur lokale Arrays und Dateien. Um einen exakten Remote-Snapshot zu reproduzieren, übergib revision="<Hub commit SHA>"; Release-Commit-IDs stehen in RELEASE.md. Das Terminal-Spiel verwendet immer lokale/gecachte Gewichte und schlägt mit einem Download-Befehl fehl, wenn sie fehlen.

Der gemeinsame Cache von Hugging Face speichert Modelldateien als symbolische Links. In der getesteten macOS-Version kann Core ML diese Links in sein temporär kompiliertes Modell kopieren und die Weight-Datei verlieren. Der Loader materialisiert automatisch nur das Core ML-Paket als reguläre Dateien unter ~/.cache/laya-coreml/packages/, verifiziert seinen Inhalts-Hash und verwendet diese Kopie wieder. Setze LAYA_COREML_CACHE, um dieses Cache-Root zu ändern. Das beansprucht zusätzlichen Speicherplatz, nicht zusätzliche Modell-Downloads. Ein mit hf download --local-dir erstelltes Verzeichnis enthält bereits reguläre Dateien und benötigt keine Kopie.

Der Loader erkennt das Paketformat und wählt seine Standard-Compute-Units. Überschreibe mit compute_units="cpu_gpu", "cpu_ne", "cpu" oder "all" für ein explizites Experiment. cpu_ne erlaubt CPU-Arbeit und ANE-Arbeit; es garantiert nicht, dass jeder Operator auf ANE ausgeführt wird. Wählt man es für den gewöhnlichen SDPA-Export, wird dieser Export nicht zum dedizierten ANE-Graphen.

CLI

Speichere das Frage-Dictionary in questions.json und führe dann aus:

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

laya-coreml predict akzeptiert ein lokales Verzeichnis oder eine Hub-ID, ein optionales --revision und --compute-units. --offline verhindert den Hub-Zugriff.

Aus dem Quellcode konvertieren

Für den gewöhnlichen Core ML-Pfad:

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

Der ANE-Forschungsexporter liegt im Git-Checkout, außerhalb des Inferenz-Wheels:

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

Siehe Konvertierungsbefunde, ANE-Engineering und Snake-Steuerung und -Aufzeichnung für die entsprechenden Workflows.