Documentación

Instalar, descargar y tomar decisiones tipadas

Laya-CoreML se ejecuta en Apple Silicon con macOS 15+ y Python 3.11–3.13. Las comprobaciones locales de la versión usan un M3 Max / macOS 27.2. Las versiones anteriores de macOS y el despliegue en iOS no se han probado aquí. Los ML Program exportados tienen como destino macOS 15 / iOS 18.

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

La inferencia instala Core ML Tools, NumPy, Tokenizers, Safetensors y Hugging Face Hub. No requiere PyTorch, Transformers ni MLX. El extra opcional [convert] instala PyTorch para exportar los checkpoints originales.

Seleccionar un modelo

Paquete de Hugging Face bajo aac6fef/ Dispositivo por defecto Capacidad total de entrada Lote / opciones Uso previsto
laya-coreml CPU + GPU 512 tokens 1 / 32 Laya en inglés, 421M
laya-multilingual-coreml CPU + GPU 1024 tokens 1 / 32 Multilingüe de propósito general, 322M
laya-typed-decisions-coreml CPU + GPU 1024 tokens 1 / 32 Checkpoint de typed-decisions del upstream
laya-multilingual-coreml-snake CPU + GPU 64 tokens 3 / 4 Prompts compactos de Snake procesados por lotes
laya-multilingual-coreml-ane CPU + ANE 96 tokens 1 / 32 Decisiones cortas, cuerpo FP16
laya-multilingual-coreml-ane-w8 CPU + ANE 96 tokens 1 / 32 Pesos de paleta W8 aproximados, cómputo FP16

Los paquetes ANE incluyen sus propios pesos de embedding/acción del host y el cuerpo de Core ML sin cambios. No necesitan un directorio de checkpoint original. La capacidad de 96 tokens incluye la pregunta, las descripciones de opciones, los marcadores especiales y el estado. Estas exportaciones cortas rechazan una solicitud que no cabe. Los modelos de propósito general conservan el truncamiento de estado del upstream en su límite completo de contexto del checkpoint; las descripciones de opciones también usan el presupuesto original de prefijo de pregunta.

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 devuelve una etiqueta seleccionada y una probabilidad para cada etiqueta. score devuelve el índice de categoría esperado con base cero, su leyenda y las probabilidades. noul devuelve la probabilidad de verdadero. Las respuestas también incluyen la confianza del upstream y campos de probabilidad de la cabeza de acción. Estas estimaciones pueden ser erróneas; la validación de la biblioteca mide la fidelidad de conversión, no la precisión de la aplicación.

predict y system_one son alias. Un estado en forma de diccionario se serializa usando las convenciones de entrada originales. Las preguntas se procesan en orden de inserción. La mayoría de las exportaciones usan lote uno; por tanto, varias preguntas requieren varias llamadas al modelo. La exportación Snake GPU procesa por lotes hasta tres. El codificador bidireccional no cachea estado contextual entre preguntas distintas.

Descarga una vez y luego trabaja sin conexión

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)

Los IDs remotos se descargan antes de la inicialización a menos que local_files_only=True. Las predicciones posteriores usan solo arrays y archivos locales. Para reproducir una instantánea remota exacta, pasa revision="<Hub commit SHA>"; los IDs de commit de la versión están en RELEASE.md. El juego de terminal usa siempre pesos locales/en caché y falla con un comando de descarga cuando faltan.

La caché compartida de Hugging Face almacena los archivos del modelo como enlaces simbólicos. En la versión de macOS probada, Core ML puede copiar esos enlaces a su modelo compilado temporal y perder el archivo de pesos. El cargador materializa automáticamente solo el paquete Core ML como archivos regulares bajo ~/.cache/laya-coreml/packages/, verifica su hash de contenido y reutiliza esa copia. Define LAYA_COREML_CACHE para cambiar esta raíz de caché. Esto usa espacio de disco adicional, no descargas de modelo adicionales. Un directorio creado con hf download --local-dir ya contiene archivos regulares y no necesita copia.

El cargador reconoce el formato del paquete y selecciona sus unidades de cómputo por defecto. Sobrescríbelo con compute_units="cpu_gpu", "cpu_ne", "cpu" o "all" para un experimento explícito. cpu_ne permite trabajo en CPU y trabajo en ANE; no garantiza que todas las operaciones se ejecuten en ANE. Elegirlo para la exportación ordinaria con SDPA no convierte esa exportación en el grafo ANE dedicado.

CLI

Guarda el diccionario de preguntas en questions.json y luego ejecuta:

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

laya-coreml predict acepta un directorio local o un ID del Hub, un --revision opcional y --compute-units. --offline impide el acceso al Hub.

Convertir desde el código fuente

Para la ruta ordinaria de Core ML:

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

El exportador de investigación de ANE está en el checkout de Git, fuera de la wheel de inferencia:

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

Consulta hallazgos de conversión, ingeniería de ANE y controles y grabación de Snake para los flujos de trabajo correspondientes.