Документация

Установка, скачивание и типизированные решения

Laya-CoreML работает на Apple Silicon с macOS 15+ и Python 3.11–3.13. Локальные проверки выпуска используют M3 Max / macOS 27.2. Более старые выпуски macOS и развёртывание на iOS здесь не тестировались. Экспортированные ML Programs нацелены на macOS 15 / iOS 18.

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

Инференс устанавливает Core ML Tools, NumPy, Tokenizers, Safetensors и Hugging Face Hub. Он не требует PyTorch, Transformers или MLX. Опциональное дополнение [convert] устанавливает PyTorch для экспорта исходных контрольных точек.

Выберите модель

Пакет Hugging Face под aac6fef/ Устройство по умолчанию Общая ёмкость входа Батч / варианты Назначение
laya-coreml CPU + GPU 512 токенов 1 / 32 Английская Laya, 421M
laya-multilingual-coreml CPU + GPU 1024 токена 1 / 32 Универсальная многоязычная, 322M
laya-typed-decisions-coreml CPU + GPU 1024 токена 1 / 32 Upstream-контрольная точка typed-decisions
laya-multilingual-coreml-snake CPU + GPU 64 токена 3 / 4 Батчевые компактные промпты Snake
laya-multilingual-coreml-ane CPU + ANE 96 токенов 1 / 32 Короткие решения, тело FP16
laya-multilingual-coreml-ane-w8 CPU + ANE 96 токенов 1 / 32 Приближённые веса палитры W8, вычисления FP16

Пакеты ANE включают собственные веса эмбеддингов/действий хоста и неизменное тело Core ML. Им не нужен каталог исходной контрольной точки. Ёмкость в 96 токенов включает вопрос, описания вариантов, специальные маркеры и состояние. Эти короткие экспорты отклоняют запрос, который не помещается. Универсальные модели сохраняют upstream-усечение состояния на своём полном лимите контекста контрольной точки; описания вариантов также используют исходный бюджет префикса вопроса.

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 возвращает выбранную метку и вероятность для каждой метки. score возвращает ожидаемый индекс категории с нулевой базой, его легенду и вероятности. noul возвращает вероятность истины. Ответы также включают upstream-поля уверенности и вероятности головы действий. Эти оценки могут быть неверными; валидация библиотеки измеряет точность конвертации, а не точность приложения.

predict и system_one — синонимы. Состояние-словарь сериализуется с использованием исходных соглашений ввода. Вопросы обрабатываются в порядке вставки. Большинство экспортов используют батч один; поэтому несколько вопросов требуют нескольких вызовов модели. Экспорт Snake GPU батчит до трёх. Двунаправленный энкодер не кэширует контекстное состояние между разными вопросами.

Скачайте один раз, затем работайте офлайн

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)

Удалённые ID скачиваются до инициализации, если только не указано local_files_only=True. Последующее предсказание использует только локальные массивы и файлы. Чтобы воспроизвести точный удалённый снимок, передайте revision="<Hub commit SHA>"; ID коммитов выпуска есть в RELEASE.md. Терминальная игра всегда использует локальные/кешированные веса и завершается с командой скачивания, когда их нет.

Общий кэш Hugging Face хранит файлы моделей как символические ссылки. На тестируемом выпуске macOS Core ML может скопировать эти ссылки во временную скомпилированную модель и потерять файл весов. Загрузчик автоматически материализует именно пакет Core ML как обычные файлы в ~/.cache/laya-coreml/packages/, проверяет его хеш содержимого и переиспользует эту копию. Задайте LAYA_COREML_CACHE, чтобы изменить корень кэша. Это использует дополнительное место на диске, а не дополнительные скачивания модели. Каталог, созданный через hf download --local-dir, уже содержит обычные файлы и не нуждается в копировании.

Загрузчик распознаёт формат пакета и выбирает его единицы вычислений по умолчанию. Переопределите через compute_units="cpu_gpu", "cpu_ne", "cpu" или "all" для явного эксперимента. cpu_ne допускает работу CPU и работу ANE; он не гарантирует, что каждая операция исполняется на ANE. Выбор его для обычного экспорта SDPA не превращает этот экспорт в выделенный граф ANE.

CLI

Сохраните словарь вопросов в questions.json, затем выполните:

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

laya-coreml predict принимает локальный каталог или ID из Hub, опциональный --revision и --compute-units. --offline предотвращает доступ к Hub.

Конвертация из исходников

Для обычного пути Core ML:

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

Исследовательский экспортёр ANE находится в Git-копии, вне колеса инференса:

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

Соответствующие рабочие процессы см. в находках по конвертации, инженерии ANE и управлении Snake и записи.