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-tspara 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
| Checkpoint | Encoder | Params | Contexto | Uso |
|---|---|---|---|---|
laya | ModernBERT-large | 421M | 512 | Inglês |
laya-multilingual | mmBERT-base | 322M | 1024 | 100+ idiomas, 2x mais rápido |
laya-typed-decisions | ModernBERT-large | 421M | 1024 | Workflows de decisões tipadas |
Primitivas de decisão
| Primitiva | Saída | Exemplos |
|---|---|---|
choice | Label vencedor + probabilidades + confiança | Roteamento de departamento, intenção |
score | Nível esperado em escala ordinal | Urgência, frustração, severidade |
noul | Probabilidade P(true) de 0 a 1 | Phishing, 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"] # multilingualDica: 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_batchpontua 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-serveexpõePOST /v1/systemone; clientes do Jev funcionam só trocando abaseUrl - MCP server opcional (
laya[mcp]) com toolslaya_predict,laya_route,laya_preset,laya_status - Integração LangChain/LangGraph:
LayaRouter(arestas condicionais) eLayaGuardrail - GPU fast path (TileLang + CUDA graphs),
torch.compilee 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étrica | Jev 1.13.0 | Laya (routed) |
|---|---|---|
| typed-decisions (2.000 decisões) | 0,727 | 0,766 (checkpoint fine-tuned) |
| AG News | 0,910 | 0,950 |
| DAIR Emotion | 0,480 | 0,595 |
| Banking77 (> 70 labels) | 0,870 | 0,425 |
| ECE (menor é melhor) | 0,246 | 0,081 (após ajuste de temperatura) |
| Latência p50, 1 pergunta | 236–276 ms | 32,8 ms |
| Pesos | API fechada | Apache 2.0 |
| Custo | US$ 0,042 / MTok | US$ 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, usarpredict_shortlistcom 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
layacolapsa 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-multilingualnão traz temperaturas ajustadas scoreé a primitiva mais fraca;laya-multilingualtem viés de posição emscorenoulpode seguir os labelstrue/falseem vez do conteúdo (usarlabelsneutros comoA/B)- Evitar labels booleanos (
yes/no) em perguntaschoice act_probabilityainda não é confiável; usarconfidence
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)