Límite de gasto, caché y registro de costos en cada consulta a Jev. Y cuando Jev deja de funcionar, tu sistema no cae con él: la respuesta pasa a revisión humana.

Cada punto de integración reinventa el manejo de errores, nadie sabe cuánto se gastó en el día y, cuando la API falla, el sistema cae con ella. El gateway es la única puerta que resuelve esto de una vez.
Un valor en dólares por día, verificado antes de cada consulta. Si se excede, pasa a revisión humana: no sirve descubrir el perjuicio después.
Jev fuera de servicio, clave incorrecta, tiempo de espera agotado, respuesta extraña: todo devuelve review. Ninguna falla de infraestructura se lanza como excepción para quien hizo la llamada.
Una línea JSONL con costo, latencia y decisión. El state — donde viven los datos de tu cliente — no se registra.
Seis etapas, siempre en este orden; el orden fue elegido, no sorteado.
Una respuesta ya guardada no cuesta nada, así que no tiene sentido bloquearla por el límite. Al contrario, un sistema que superó el límite perdería incluso lo que ya pagó.
Verificar después sería verificar el perjuicio, no evitarlo.
Los umbrales son de tu dominio, no del modelo. La clasificación de correos y la clasificación clínica usan el mismo Jev y distintos umbrales.
El documento ARQUITETURA.md explica cada módulo, el contrato de fallas y lo que el gateway no hace.
Sin framework, sin base de datos, sin cola, sin pip install. La clave solo se exige en la primera consulta real.
El gateway completo usa solo la biblioteca estándar.
python3 --versionTypeSafe directamente o a través de OpenRouter. Solo al hacer una consulta real; las pruebas y los ejemplos funcionan sin ella.
export TYPESAFE_API_KEY=... # o: OPENROUTER_API_KEY + JEV_PROVIDER=openrouter
Copia la carpeta jev_gw/ dentro de tu proyecto si lo prefieres; es autocontenida a propósito.
git clone https://github.com/inematds/jev-gw.git
Las tres llaman a la misma función. No hay lógica que solo tenga el servidor.
Las 23 pruebas usan un evaluador controlado: la suite no gasta ni un centavo.
git clone https://github.com/inematds/jev-gw.git cd jev-gw && python3 -m unittest discover -s testes # Ran 23 tests ... OK
Ningún proceso adicional ni puerto abierto. Es la forma más directa de integrarlo.
from jev_gw import decidir saida = decidir(pedido) if saida['acao'] == 'suggest': encaminhar(saida['resposta']['answers']['fila']['choice']) else: fila_de_revisao(saida['motivo']) # incluye "Jev se cayó"
Escucha solo en 127.0.0.1 — el gateway guarda tu clave.
python3 -m jev_gw servir # jev-gw escuchando en http://127.0.0.1:8770 (panel en /painel) curl -X POST localhost:8770/decidir \ -H 'content-type: application/json' -d @pedido.json
Es el formato de la propia API de Jev: contexto y una o más preguntas con alternativas.
{
"model": "jev-1.13.0",
"state": "Cliente: comprei ontem e quero devolver, nem abri a caixa.",
"questions": {
"fila": {
"type": "choice",
"instructions": "Para qual fila encaminhar?",
"criteria": {
"reembolso": "Pedido de devolução ou estorno",
"suporte": "Dúvida de uso ou defeito",
"insuficiente": "Não dá para decidir com o que está escrito"
}
}
}
}
Todo mediante variables de entorno, todo con valores predeterminados que ya funcionan. 0 al llegar al límite, el gateway se apaga.
export JEV_GW_TETO_DIARIO=1.00 # dólares por día export JEV_GW_TTL_CACHE=900 # segundos que vale una respuesta export JEV_GW_TIMEOUT=5 # segundos por consulta
Panel en el navegador o JSON en la terminal para integrarlo a tu monitoreo.
python3 -m jev_gw custo # {"chamadas": 2, "consultas_reais": 1, "cache": 1, "gasto_usd": 1.6e-05, ...} http://127.0.0.1:8770/painel # gasto del día, latencia, últimas llamadas
Solo un error se lanza como excepción: una solicitud fuera del contrato de Jev, que es un error tuyo y debe hacerse visible. Todo lo demás es una decisión.
# 200 decisión tomada — incluso "review" porque Jev se cayó # 422 solicitud íntegra, pero fuera del contrato de Jev # 400 JSON mal formado u opción no válida # si se supera el límite, devuelve 200, no 429: para quien llamó no es un error, # es una decisión de enviar a revisión
Una consulta real a Jev por OpenRouter, y la misma consulta repetida justo después.
Decisión reembolso, confianza 1,0.
610 ms · US$ 0,0000155
Vino del caché.
0 ms · US$ 0,00
Devuelta review con el motivo, lo registró y el cliente siguió. Ninguna excepción.
Evidencia sin procesar: reports/smoke-2026-09-22.jsonl. Esto es una prueba de integración y de contrato — no es un benchmark de calidad de decisión, y no se afirma ningún ahorro sin una medición comparable.
Estado real al 22/09/2026, sin promesas sobre lo que aún no se ha escrito.