Motor de decisiones System 1 no autorregresivo, rápido y tipado para la terminal.
Note
Sobre este proyecto: Sagaz es una herramienta de línea de comandos y SDK construida sobre la tecnología de Laya (desarrollado por Convai Innovations / Nandha Kishor M). Utiliza los modelos de decisión multilingües de Laya entrenados con aprendizaje por refuerzo y reglas de puntuación estrictamente propias (RLCD), adaptándolos para ejecución local eficiente en CPU y GPU, con persistencia centralizada en disco y soporte completo para flujos de trabajo en terminal y tuberías Unix.
A diferencia de los LLMs tradicionales (System 2) que son autorregresivos, lentos y propensos a alucinaciones de formato, Sagaz implementa un enfoque de decisiones System 1:
- Evaluación en una sola pasada (Single Forward Pass): Evalúa múltiples preguntas tipadas simultáneamente sin generar texto palabra por palabra.
- 0% de Alucinaciones: Solo produce probabilidades matemáticas sobre las opciones o rúbricas suministradas.
-
Decisiones Tipadas:
-
choice: Clasificación categórica (intenciones, departamentos, temas). -
score: Escalas ordinales continuas (frustración 0-3, gravedad, urgencia). -
noul: Probabilidad booleana estrictamente calibrada$P(\text{true}) \in [0.0, 1.0]$ (phishing, spam, riesgo de churn).
-
-
100% Offline tras el primer uso: Almacena los checkpoints en
~/models/laya/con política estricta de cero re-descargas. - Inferencia en Memoria con REPL: En CPU, evita el tiempo de carga en frío (~22 s) y responde en ~89 ms por consulta manteniendo los pesos residentes en RAM (~1.28 GB).
-
Diseñado para Tuberías Unix: Integración transparente con
stdin,stdout,jqy scripts en Bash/Fish con--jsony--get.
Para consultar especificaciones a fondo, revisa las guías en docs/:
- 📖 Guía Completa de la CLI: Manual detallado de comandos, flags, scripting y ejemplos avanzados.
- 🎯 Preguntas, Primitivas y Presets: Especificación de formatos (
choice,score,noul), JSON schemas y los 5 presets integrados. - ⚙️ Arquitectura y Rendimiento en CPU: Detalles del modelo mmBERT/ModernBERT, almacenamiento local y benchmarks en AMD Ryzen.
- 📊 Reporte de Benchmarks: Comparativas completas de precisión, calibración y velocidad frente a otros motores.
- Python:
>= 3.10 - Hardware: Compatible con CPU estándar (AMD Zen / Intel Core) o GPU NVIDIA con CUDA.
- RAM recomendada: Al menos 4 GB (el modelo en ejecución ocupa ~1.28 GB).
git clone https://github.com/eddraz/laya.git
cd layauv venv
# Si usas Fish shell:
source .venv/bin/activate.fish
# Si usas Bash o Zsh:
source .venv/bin/activate
uv pip install -e .python3 -m venv .venv
# Si usas Fish shell:
source .venv/bin/activate.fish
# Si usas Bash o Zsh:
source .venv/bin/activate
pip install -e .(Nota: También puedes ejecutar cualquier comando directamente sin activar el entorno anteponiendo uv run: ej. uv run sagaz predict ...)
Sagaz almacena los modelos de forma centralizada en tu directorio de usuario:
~/models/laya/multilingual/ (~644 MB) y ~/models/laya/english/ (~842 MB).
- Auto-descarga en primer uso: La primera vez que ejecutas un comando de inferencia, Sagaz verifica si los modelos existen. Si no están en disco, los descarga automáticamente informando en la terminal.
- Cero Re-Descargas: Una vez descargados, Sagaz nunca vuelve a contactar a Hugging Face ni a internet. Funciona de manera 100% offline.
- Pre-descarga manual: Si vas a trabajar sin conexión, puedes descargarlos con anticipación:
sagaz download -m multilingual
Tip
Puedes invocar la herramienta utilizando tanto el comando principal sagaz como el alias compatible laya. Ambos son completamente intercambiables.
Sagaz incluye 5 presets preconfigurados listos para producción:
triage: Triaje de atención al cliente (intención, urgencia, frustración, devolución, riesgo de churn).email: Clasificación de correos, detección de phishing y spam.guard: Guardrails de seguridad contra inyecciones de prompts y jailbreaks para LLMs.moderation: Moderación de contenido (toxicidad, acoso, amenazas).router: Enrutamiento de prompts hacia modelos pequeños vs modelos frontera.
# Ejemplo: Triage de soporte al cliente
sagaz predict --state "Hola, me cobraron dos veces la suscripción este mes. Devuélvanme el dinero o cancelo." --preset triage
# Ejemplo: Clasificación de seguridad de emails
sagaz predict --state "Su cuenta ha sido suspendida. Verifique sus claves en http://banco-fake.xyz" --preset emailPuedes evaluar preguntas tipadas ad-hoc sin necesidad de archivos de configuración:
# Pregunta booleana calibrada (--noul):
sagaz predict --state "El servidor principal se cayó y la base de datos no responde" \
--noul "emergencia:¿Es una emergencia técnica crítica?"
# Pregunta de selección categórica (--choice):
sagaz predict --state "Somos una empresa de 100 empleados y queremos una cotización anual" \
--choice "area:ventas,soporte,facturacion:¿A qué departamento corresponde?"
# Pregunta de escala o nivel ordinal (--score):
sagaz predict --state "¡El servicio sigue caído y nadie me responde, son unos estafadores!" \
--score "enojo:0=calmado,1=molesto,2=furioso:¿Nivel de frustración del usuario?"# Estado desde archivo de texto o JSON:
sagaz predict --state @ticket.txt --preset triage
# Preguntas complejas desde un archivo JSON:
sagaz predict --state @lead.json --questions @preguntas_personalizadas.json# Salida JSON cruda para procesar con jq:
echo "Quiero cancelar mi suscripción" | sagaz predict --preset triage --json | jq .answers.intent.choice
# -> "cancellation"
# Extraer un valor único directamente con --get (ideal para variables en Bash/Fish):
INTENCION=$(sagaz predict --state "Necesito mi factura de agosto" --preset triage --get intent)
echo "Intención detectada: $INTENCION"
# Modo silencioso (-q / --quiet, omite banners y decoraciones visuales):
echo "Caída de servicio" | sagaz predict --noul "alerta:¿Requiere guardia?" -qEn CPU, deserializar los 322M parámetros desde el disco a la memoria RAM toma ~22 segundos (cold-start).
El comando sagaz repl mantiene el modelo cargado de forma permanente en memoria RAM (~1.28 GB). De esta forma, cada consulta subsiguiente se evalúa en apenas ~89 ms:
sagaz repl --preset triageComandos útiles dentro del REPL:
- Escribe cualquier texto o frase y presiona
Enterpara evaluarlo de inmediato. /preset <nombre>: Cambia de preset en caliente (ej:/preset email,/preset guard) sin recargar el modelo./clear: Limpia la pantalla./help: Muestra la ayuda interactiva./exitoCtrl+C: Cierra la sesión interactiva.
# Listar todos los presets disponibles:
sagaz presets
# Inspeccionar el esquema JSON exacto de un preset:
sagaz presets triage --show
sagaz presets guard --showAdemás del CLI, puedes integrar Sagaz directamente en tus aplicaciones Python:
from laya import Router
# Pre-cargar modelos en memoria para inferencia en tiempo real (<35 ms en GPU / ~89 ms en CPU)
router = Router(preload=True)
# 1. Estado en cualquier idioma (texto, ticket, correo, etc.)
state = {"body": "Hola, me cobraron dos veces la factura este mes."}
# 2. Preguntas tipadas
questions = {
"departamento": {
"type": "choice",
"instructions": "¿A qué departamento corresponde esta solicitud?",
"criteria": {
"facturacion": "Pagos, cobros dobles, facturas o reembolsos",
"soporte": "Problemas técnicos, bugs o caídas",
"ventas": "Precios, planes y cotizaciones"
}
},
"es_urgente": {
"type": "noul",
"instructions": "¿El usuario exige atención inmediata?"
}
}
# 3. Inferencia multilingüe en una sola pasada
result = router.predict(state, questions)
print("Departamento:", result["answers"]["departamento"]["choice"])
print("Confianza :", result["answers"]["departamento"]["confidence"])
print("Es urgente :", result["answers"]["es_urgente"]["noul"] >= 0.5)
print("Modelo usado:", result["routing"]["model"]) # -> multilingualSagaz es un proyecto derivado y potenciado por la tecnología de Laya:
- Tecnología base: NandhaKishorM/laya
- Creador original de Laya: Nandha Kishor M (Convai Innovations)
- Modelos de pesos y arquitectura RLCD:
convaiinnovations/layayconvaiinnovations/laya-multilingualen Hugging Face. - Licencia: Apache 2.0.
Distribuido bajo la licencia Apache-2.0.