Documentação

Instalar, descarregar e tomar decisões tipadas

O Laya-CoreML corre em Apple Silicon com macOS 15+ e Python 3.11–3.13. As verificações locais da versão usam M3 Max / macOS 27.2. Versões mais antigas do macOS e a implementação em iOS não foram testadas aqui. Os ML Programs exportados visam macOS 15 / iOS 18.

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

A inferência instala Core ML Tools, NumPy, Tokenizers, Safetensors e Hugging Face Hub. Não exige PyTorch, Transformers nem MLX. O extra opcional [convert] instala o PyTorch para exportar os checkpoints originais.

Selecionar um modelo

Pacote do Hugging Face em aac6fef/ Dispositivo predefinido Capacidade total de entrada Lote / opções Utilização pretendida
laya-coreml CPU + GPU 512 tokens 1 / 32 Laya inglês, 421M
laya-multilingual-coreml CPU + GPU 1024 tokens 1 / 32 Multilingue de uso geral, 322M
laya-typed-decisions-coreml CPU + GPU 1024 tokens 1 / 32 Checkpoint typed-decisions do upstream
laya-multilingual-coreml-snake CPU + GPU 64 tokens 3 / 4 Prompts compactos do Snake agrupados
laya-multilingual-coreml-ane CPU + ANE 96 tokens 1 / 32 Decisões curtas, corpo FP16
laya-multilingual-coreml-ane-w8 CPU + ANE 96 tokens 1 / 32 Pesos de paleta W8 aproximados, cálculo FP16

Os pacotes ANE incluem os seus próprios pesos de embedding/ação do anfitrião e o corpo Core ML inalterado. Não precisam de um diretório de checkpoint original. A capacidade de 96 tokens inclui a pergunta, as descrições das opções, os marcadores especiais e o estado. Estas exportações curtas rejeitam um pedido que não caiba. Os modelos de uso geral mantêm o truncamento de estado do upstream no seu limite de contexto total do checkpoint; as descrições das opções também usam o orçamento original do prefixo da pergunta.

API de 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 devolve uma etiqueta selecionada e uma probabilidade para cada etiqueta. score devolve o índice de categoria esperado com base zero, a sua legenda e as probabilidades. noul devolve a probabilidade de verdadeiro. As respostas também incluem campos de confiança e de probabilidade da cabeça de ação do upstream. Estas estimativas podem estar erradas; a validação da biblioteca mede a fidelidade de conversão, não a exatidão da aplicação.

predict e system_one são aliases. Um estado em dicionário é serializado usando as convenções de entrada originais. As perguntas são processadas por ordem de inserção. A maioria das exportações usa lote um; várias perguntas exigem, portanto, várias chamadas ao modelo. A exportação Snake GPU agrupa até três. O codificador bidirecional não coloca em cache o estado contextual entre perguntas diferentes.

Descarregar uma vez e trabalhar depois offline

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)

Os IDs remotos são descarregados antes da inicialização, a menos que local_files_only=True. A predição subsequente usa apenas arrays e ficheiros locais. Para reproduzir um snapshot remoto exato, passa revision="<Hub commit SHA>"; os IDs de commit da versão estão em RELEASE.md. O jogo de terminal usa sempre pesos locais/em cache e falha com um comando de download quando estes faltam.

A cache partilhada do Hugging Face guarda os ficheiros de modelo como ligações simbólicas. Na versão de macOS testada, o Core ML pode copiar essas ligações para o seu modelo compilado temporário e perder o ficheiro de pesos. O carregador materializa automaticamente apenas o pacote Core ML como ficheiros regulares em ~/.cache/laya-coreml/packages/, verifica o seu hash de conteúdo e reutiliza essa cópia. Define LAYA_COREML_CACHE para alterar esta raiz de cache. Isto usa espaço em disco extra, não downloads de modelo extra. Um diretório criado com hf download --local-dir já contém ficheiros regulares e não precisa de cópia.

O carregador reconhece o formato do pacote e seleciona as suas unidades de cálculo predefinidas. Substitui usando compute_units="cpu_gpu", "cpu_ne", "cpu" ou "all" para uma experiência explícita. cpu_ne permite trabalho na CPU e trabalho no ANE; não garante que todas as operações sejam executadas no ANE. Escolhê-lo para a exportação SDPA normal não transforma essa exportação no grafo ANE dedicado.

CLI

Guarda o dicionário de perguntas em questions.json e depois executa:

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

laya-coreml predict aceita um diretório local ou um ID do Hub, um --revision opcional e --compute-units. --offline impede o acesso ao Hub.

Converter a partir do código-fonte

Para o caminho Core ML normal:

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

O exportador de investigação do ANE vive no checkout Git, fora do wheel de inferência:

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

Vê resultados da conversão, engenharia do ANE e controlos e gravação do Snake para os fluxos de trabalho correspondentes.