Laya

Sobre

Laya é um motor de decisão System 1 não autorregressivo e open source (Apache 2.0), desenvolvido pela Convai Innovations. Responde a perguntas tipadas sobre qualquer estado (texto, e-mail, ticket, JSON) em um único forward pass, em mais de 100 idiomas, sem geração de texto.

É a principal alternativa aberta e self-hosted ao Jev da TypeSafe AI: segue o mesmo conceito de System One Models, usa o mesmo método de treino (RLCD) e expõe uma API HTTP compatível com o protocolo do Jev.

  • Repositório: NandhaKishorM/laya
  • Pacote: pip install laya (Python ≥ 3.10); também há laya-ts para Node e browser
  • Latência: ~33 ms por pergunta, ~7 ms/pergunta em lote (GPU T4)

Funcionamento

  • Encoder BERT + decision head: não gera tokens; pontua opções predefinidas e retorna probabilidades
  • RLCD com strictly proper scoring rules (política estilo GRPO), igual à proposta do Jev
  • Router: detecta script/idioma em < 0,5 ms e escolhe o checkpoint adequado por requisição

Checkpoints

CheckpointEncoderParamsContextoUso
layaModernBERT-large421M512Inglês
laya-multilingualmmBERT-base322M1024100+ idiomas, 2x mais rápido
laya-typed-decisionsModernBERT-large421M1024Workflows de decisões tipadas

Primitivas de decisão

PrimitivaSaídaExemplos
choiceLabel vencedor + probabilidades + confiançaRoteamento de departamento, intenção
scoreNível esperado em escala ordinalUrgência, frustração, severidade
noulProbabilidade P(true) de 0 a 1Phishing, spam, jailbreak, churn

Exemplo

from laya import Router
 
router = Router(preload=True)
 
state = {"body": "Fomos cobrados duas vezes. Estornem ou cancelamos o plano."}
questions = {
    "department": {
        "type": "choice",
        "instructions": "Qual departamento deve tratar?",
        "criteria": {"billing": "cobranças, estornos", "technical": "bugs", "other": "outros"},
    },
    "churn_risk": {"type": "noul", "instructions": "O cliente ameaça cancelar?"},
}
 
res = router.predict(state, questions)
res["answers"]["department"]["choice"]   # billing
res["routing"]["model"]                   # multilingual

Dica: textos curtos em português ("Esqueci minha senha") podem cair no checkpoint inglês; usar Router(default="multilingual") quando o tráfego não for majoritariamente em inglês.

Principais Recursos

  • Confidence gating: automatizar quando confidence >= limiar, escalar para humano caso contrário
  • Batch mode: predict_batch pontua vários estados no mesmo forward pass (~10x em GPU)
  • Presets prontos: router_questions(), guard_questions(), moderation_questions(), triage_questions()
  • Servidor HTTP compatível com Jev: laya-serve expõe POST /v1/systemone; clientes do Jev funcionam só trocando a baseUrl
  • MCP server opcional (laya[mcp]) com tools laya_predict, laya_route, laya_preset, laya_status
  • Integração LangChain/LangGraph: LayaRouter (arestas condicionais) e LayaGuardrail
  • GPU fast path (TileLang + CUDA graphs), torch.compile e ONNX Runtime opcionais
  • Deploy: Docker, Docker Compose, Nix/NixOS (módulo systemd)
  • Fine-tuning: notebook Kaggle (2x T4, ~4–5 h) com treino RLCD, calibração e push para o Hub

Laya vs Jev

Números do Jev são de terceiros (o autor não teve acesso à API da TypeSafe).

MétricaJev 1.13.0Laya (routed)
typed-decisions (2.000 decisões)0,7270,766 (checkpoint fine-tuned)
AG News0,9100,950
DAIR Emotion0,4800,595
Banking77 (> 70 labels)0,8700,425
ECE (menor é melhor)0,2460,081 (após ajuste de temperatura)
Latência p50, 1 pergunta236–276 ms32,8 ms
PesosAPI fechadaApache 2.0
CustoUS$ 0,042 / MTokUS$ 0 self-hosted

Onde o Jev ainda vence:

  • Alta cardinalidade (> 20 opções): Jev suporta até 255 opções nativamente; no Laya o orçamento de tokens do head é dividido entre as opções. Mitigações: aumentar head_max_len, usar predict_shortlist com embeddings ou dividir em perguntas hierárquicas
  • Soft accuracy (0,580 vs 0,471): distribuições do Jev se aproximam mais do teacher
  • Calibração bruta, antes de temperature scaling

Limitações

  • Base zero-shot é fraca: checkpoints base ficam perto do acaso em typed-decisions (≈ 0,36 vs 0,318 aleatório); o valor vem do fine-tuning. É uma base rápida para especializar, não um motor zero-shot
  • Checkpoint laya colapsa fora do inglês com alta confiança (Khmer: 0% de acerto a 95% de confiança) — sempre usar o Router
  • Checkpoints saem descalibrados; laya-multilingual não traz temperaturas ajustadas
  • score é a primitiva mais fraca; laya-multilingual tem viés de posição em score
  • noul pode seguir os labels true/false em vez do conteúdo (usar labels neutros como A/B)
  • Evitar labels booleanos (yes/no) em perguntas choice
  • act_probability ainda não é confiável; usar confidence

Casos de Uso

  • Triagem de tickets e e-mails (departamento, urgência, churn, pedido de estorno)
  • Roteamento de requisições entre modelos pequenos e de fronteira
  • Guardrails de prompt (jailbreak, injection) e moderação de conteúdo
  • Decisões rápidas em agentes (ex.: agente de browser com 17–23 ms por passo após fine-tuning)

Referências