Un especialista pequeño que funciona en tu máquina, lee cada mensaje y responde preguntas fijas con sí, no o no se puede saber. La duda siempre se deriva a una persona.

Proyecto de investigación y educación. No afirma tener paridad con Jev ni estar listo para producción. Los ejemplos del repositorio usan datos sintéticos, y cada cifra está marcada como [medido], [relato] o [simulación].
Cada pregunta de la ficha ("¿quieres agendar?", "¿hay urgencia?") se convierte en sí / no / incierto, con probabilidad calibrada. La falta de evidencia nunca se convierte en "sí".
La agenda, los plazos, los valores, la prioridad y las colas están en código común. El modelo solo observa, y una lista de palabras clave puede escalar casos críticos.
Se entrena en la GPU y funciona en CPU con ONNX int8 (~570 MB), en una API sin torch y en un contenedor Docker. Ningún mensaje sale de la máquina.
Todos los mensajes siguen llegando a una persona. El especialista solo ordena la cola e indica qué es urgente.
Ficha de la tarea → ejemplos revisados → datos → baseline sin entrenamiento → entrenamiento de las 2 últimas capas → prueba final congelada + carril OOD.
API POST /classify en CPU. El texto vacío, demasiado largo (nunca se trunca) o con un error interno pasa directamente a revisión humana.
Cada etapa guarda un JSON con hashes, métricas y todas las predicciones. No se sobrescribe nada y la prueba final se ejecuta una sola vez.
Para entrenar, una GPU ayuda mucho. Para servir, basta con una CPU.
Gestiona las dependencias de entrenamiento (torch, transformers, onnx).
uv syncSolo para generar datos sintéticos de prototipos con un LLM local, sin costo de API.
ollama pull qwen3:30bLa imagen solo incluye onnxruntime y tokenizers. Los pesos se montan en /pacotes.
docker compose up --buildLos mismos comandos sirven para cualquier nicho: solo cambia la carpeta tasks/<nicho>/ cambia. La guía completa paso a paso, con las precauciones para cada nicho, está en docs/PASSO-A-PASSO.md.
Verifica si torch detecta la GPU.
git clone https://github.com/inematds/jev-open && cd jev-open uv sync uv run python -c "import torch; print(torch.cuda.is_available())"
Preguntas, tres hipótesis por pregunta, significados de cada etiqueta, acciones por cola, pregunta crítica y objetivos. Usa un nicho existente como modelo.
mkdir tasks/meu-nicho cp tasks/advocacia-atendimento/{ficha.yaml,regras.py,rede_urgencia.py,__init__.py} tasks/meu-nicho/ # edita ficha.yaml, regras.py y la lista de palabras clave
Una persona del nicho revisa los ejemplos (barrera 1). Solo cuentan como prueba y nunca se convierten en datos de entrenamiento.
uv run python tools/zeroshot_smoke.py meu-nicho # recibo en tasks/meu-nicho/recibos/
Lo ideal son mensajes reales anonimizados. Para crear un prototipo, el generador sintético usa un LLM local y un segundo LLM como verificador, y todo queda marcado como sintético.
uv run python tools/gerar_sintetico.py meu-nicho tasks/meu-nicho/dados/sintetico.jsonl \ --n 320 --gerador qwen3.6:35b-a3b --verificador qwen3:30b --prefixo syn uv run python tools/pipeline.py preparar meu-nicho # división por grupo + deduplicación + manifest
El baseline decide si vale la pena entrenar. La prueba final se ejecuta una vez, con el modelo base y el entrenado, en la prueba y en la pista OOD.
uv run python tools/pipeline.py baseline meu-nicho uv run python tools/pipeline.py treinar meu-nicho uv run python tools/pipeline.py testar meu-nicho
ONNX int8, con una barrera de paridad (±1 pp frente a fp32) y medición de latencia. La API rechaza el paquete si la ficha cambió después del entrenamiento.
uv run python tools/exportar_onnx.py meu-nicho mkdir -p pacotes && cp -r workshops/meu-nicho-v1/pacote pacotes/meu-nicho JEV_PACOTES=pacotes uv run python -m serve.api --tarefas meu-nicho uv run python tools/testar_servico.py http://127.0.0.1:8080 meu-nicho
El alcance es siempre administrativo: sin opiniones jurídicas ni diagnósticos. Profesionales deben validar las listas de palabras clave y los textos fijos antes de cualquier uso real.
7 preguntas: agendar, servicio, estado del proceso, pago, documento, consulta jurídica y urgencia (prisión, audiencia o plazo hoy/mañana, orden judicial, desalojo). La urgencia "sí" o "incierto" se envía al abogado de inmediato; la meta es cero urgencias perdidas. El estado del caso solo se informa después de verificar la identidad (confidencialidad).
4 preguntas: agendar, reprogramar, documento y síntoma de alarma. La alerta "sí" o "incierto" se envía a una persona de inmediato; la meta es cero alertas perdidas. Los datos de salud son sensibles según la LGPD, por eso todo se ejecuta en la máquina de la clínica.
POST /classify?tarefa=advocacia-atendimento {"texto": "Boa noite, meu filho foi preso agora há pouco e está na delegacia do centro..."} # formato de la respuesta (fragmento) {"decisao": {"prioridade": "advogado_imediato", "motivos": ["urgencia=sim -> advogado_imediato", "rede de palavras-chave: delegacia, preso -> advogado_imediato"]}, "observacoes": {"urgencia": {"rotulo": "sim", "confianca": ..., "probs": [...]}, ...}}
Estado al 2026-09-25. Lo que depende de datos reales o de una VPS real aún no se ha medido.