{
  "aboutHtml": "<p>Jev es el modelo insignia de TypeSafe y el primero de una nueva categoría, <strong>System One</strong>. No redacta texto: toma decisiones rápidas que un programa puede utilizar directamente. Envías un <strong>estado</strong> (<code>state</code>) —texto o JSON— y un conjunto de <strong>preguntas</strong>, y recibes valores tipados con probabilidades calibradas.</p><p>Los modelos de lenguaje escriben palabras para personas; según TypeSafe, Jev se parece más al código: responde directamente en el formato que el código necesita, a gran velocidad y sin ningún valor fuera de las opciones definidas. Está concebida para ofrecer respuestas estables en solicitudes repetidas.</p><h4>En qué se diferencia System One de un modelo de lenguaje</h4><ul><li><strong>No genera.</strong> Jev no redacta respuestas para el usuario, no escribe código ni explica su razonamiento. Tú defines las respuestas posibles mediante uno de los tres tipos de preguntas.</li><li><strong>Está entrenada para tomar decisiones calibradas.</strong> TypeSafe entrena el modelo con RLCD (Reinforcement Learning for Calibrated Decisions): las probabilidades se ajustan a los resultados reales y reflejan la incertidumbre. De muchas respuestas con una probabilidad de 0,8, aproximadamente el 80% deberían ser correctas. La calibración es una propiedad de una muestra amplia, no una garantía de que una respuesta concreta sea correcta.</li><li><strong>Tiene otro objetivo de entrenamiento.</strong> Los modelos de chat se entrenan para agradar a las personas (RLHF) y, según las observaciones de TypeSafe, esto favorece la complacencia y los errores expresados con seguridad. Diogo Almeida, uno de los coautores de RLHF, es cofundador de TypeSafe.</li></ul><p>El nombre alude al «Sistema 1» del libro de Daniel Kahneman «Pensar rápido, pensar despacio»: el juicio intuitivo y rápido frente al pensamiento lento y deliberado del «Sistema 2». Jev está diseñada para emitir juicios rápidos y concretos.</p><h4>Tres tipos de preguntas</h4><p>Cada pregunta pide un juicio sobre el estado; la respuesta es un valor que el código compara con un umbral, utiliza para ordenar o transmite al siguiente paso.</p><ol><li><strong>Choice — selección de una opción.</strong> El departamento para una consulta, la categoría de un producto o el lenguaje de un fragmento de código. Las opciones son un diccionario «opción → descripción», con hasta 255 entradas. La respuesta contiene la opción elegida, <code>choice</code>, las probabilidades <code>probabilities</code> de todas las opciones (que suman 1) y la confianza <code>confidence</code>. Si la lista puede no cubrir todos los casos, añade «otro» o «ninguna de las anteriores».</li><li><strong>Score — valoración en una escala.</strong> Una posición en una escala ordenada que tú describes: la gravedad de un error, la irritación de un cliente o un nivel de habilidad. Tiene entre 2 y 10 niveles, de menor a mayor; el modelo evalúa cada nivel por separado, sin ver su número ni los niveles vecinos. La respuesta contiene <code>score</code> (la suma de los números de los niveles multiplicados por sus probabilidades, de modo que el valor puede quedar entre niveles), <code>legend</code> con sus descripciones, <code>probabilities</code> y <code>confidence</code>.</li><li><strong>Noul — sí o no.</strong> Determina si una afirmación es verdadera. La respuesta <code>noul</code> es la probabilidad de «sí», entre 0 y 1: cerca de 1 es un «sí» seguro, cerca de 0 es un «no» seguro y cerca de 0,5 indica duda. No hay un <code>confidence</code> independiente: un solo número describe toda la respuesta. El parámetro opcional <code>criteria</code> precisa qué se considera «sí» y qué se considera «no».</li></ol><p>Cómo elegir: para opciones conocidas sin orden, choice; para grados de un espectro, score; para un «sí/no» puro en el que importa la probabilidad, noul. Noul 0,5 indica las mismas posibilidades de «sí» y «no», no un «nivel medio»: el grado se mide con score. Si dos tipos encajan, elige aquel con el que el código pueda actuar directamente: choice para ramas, score para umbrales y noul para <code>if</code>.</p><p>Los tipos se pueden combinar en una misma solicitud. La respuesta siempre queda limitada a tus opciones y es independiente de las demás preguntas: puedes añadir o quitar preguntas sin cambiar las otras respuestas.</p><h4>Estado</h4><p>El estado es lo que el modelo evalúa: un mensaje de un cliente, un fragmento de documento, un registro de una base de datos o el estado de tu aplicación.</p><ul><li><strong>Cadena</strong> — cuando hay un único texto: un mensaje, un artículo o un fragmento.</li><li><strong>Objeto</strong> — campos con nombre, registros relacionados o el estado de una aplicación. TypeSafe recomienda objetos para la mayoría de las solicitudes: cada parte tiene un nombre claro.</li><li><strong>Array</strong> — una secuencia de mensajes o registros.</li></ul><p>Prepáralo como materiales para especialistas: reúne la conversación, el pedido y las normas de devolución si la decisión exige compararlos. Coloca el contenido en el estado y los juicios en las preguntas. Si una pregunta se refiere a una parte concreta del estado, indica su ruta entre comillas invertidas, por ejemplo <code>ticket.messages[0].text</code>.</p><h4>Cómo formular las preguntas</h4><ul><li><strong>Un juicio rápido por pregunta.</strong> Una buena pregunta es aquella que una persona informada y con el contexto necesario respondería en un segundo: «¿Hay urgencia en el mensaje?». «Analiza el mensaje y decide qué hacer» ya requiere razonamiento lento y debe dividirse en preguntas sencillas.</li><li><strong>La pregunta completa va en <code>instructions</code>.</strong> La clave de la pregunta, por ejemplo <code>refund_requested</code>, solo la necesita tu código y no se envía al modelo.</li><li><strong>Todas las preguntas sobre un mismo estado, en una sola solicitud.</strong> El modelo las evalúa en paralelo: según TypeSafe, las preguntas adicionales apenas aumentan el tiempo de respuesta y solo cuestan los tokens que utilizan. Una pregunta «por si acaso» sale casi gratis: el código decidirá qué respuestas necesita.</li><li><strong>Los juicios complejos, por partes.</strong> En vez de «evalúa la solicitud de la startup», pregunta por separado sobre el tamaño del mercado, la viabilidad técnica y las diferencias respecto a la competencia, y calcula el resultado en el código con ponderaciones. Si cambian las prioridades, cambia las ponderaciones sin reformular la pregunta.</li><li><strong>Las preguntas dependientes, en una segunda solicitud.</strong> Las respuestas de una solicitud no sirven de contexto entre sí. Una segunda solicitud solo es necesaria si no puede construirse sin la primera respuesta: hay que cargar datos o elegir las opciones de la siguiente pregunta.</li><li><strong>Las preguntas largas, como objetos.</strong> <code>instructions</code> y <code>criteria</code> suelen ser cadenas, pero también pueden ser objetos o arrays: la pregunta en un campo y los datos en otros. Así resulta cómodo contrastar un currículo con registros de una base de datos mediante una sola pregunta.</li></ul><h4>Confianza</h4><p>En choice y score, <code>confidence</code> va de 0 a 1 e indica hasta qué punto la probabilidad se concentra en una respuesta: 1 significa que toda se concentra en una opción y 0, que se reparte por igual entre todas. En score, un nivel vecino reduce la confianza menos que uno distante. En noul, la confianza es el propio valor: cuanto más se aleja de 0,5, más firme es la respuesta.</p><p>TypeSafe recomienda tres rangos:</p><ol><li><strong>Confianza alta</strong> — actúa automáticamente.</li><li><strong>Confianza media</strong> — actúa con cautela; por ejemplo, pide confirmación al usuario.</li><li><strong>Confianza baja</strong> — deriva el caso a una persona, aclara la solicitud o utiliza una vía alternativa, como un modelo más potente con razonamiento.</li></ol><p>Cuanto mayor sea el coste de un error, más exigente debe ser el umbral: debe ser más alto para acciones irreversibles que para lectura. La respuesta indica qué elegir y la confianza, si conviene actuar. Ajusta los umbrales con tus propios datos, comparando confianza y exactitud.</p><h4>Cómo construir un sistema con Jev</h4><p>Jev está concebida para programas en los que el código controla el proceso y el modelo responde a preguntas semánticas concretas, en lugar de agentes que eligen por sí mismos el siguiente paso y pueden desviarse en cada ciclo. Ocho pasos de diseño según TypeSafe:</p><ol><li>Todo lo que se pueda hacer con código, hazlo con código: es fiable y económico.</li><li>Incluye en el estado solo lo que necesitan las preguntas actuales; los datos recientes deben proceder de tu propia base de conocimientos, no de la memoria del modelo.</li><li>Estructura el estado con JSON anidado y, cuando reduzca la ambigüedad, indica en la pregunta la ruta al campo necesario entre comillas invertidas.</li><li>Formula preguntas lo más concretas y específicas posible: según TypeSafe, quizá sea la regla principal; una pregunta amplia esconde varios juicios en una sola respuesta.</li><li>Estructura las preguntas: la pregunta en sí debe ser breve; coloca explicaciones, ejemplos y valores de tu base en campos vecinos del objeto <code>instructions</code> o <code>criteria</code>, en lugar de una única cadena larga.</li><li>Reúne muchas preguntas independientes sobre un mismo estado en una solicitud: obtendrás más utilidad por cada dólar.</li><li>Combina las respuestas en el código mediante reglas, una suma ponderada o como características de un modelo clásico de aprendizaje automático.</li><li>Bifurca según la confianza: deriva los casos inciertos a una persona o a un modelo con razonamiento.</li></ol><p>Jev no es un chat ni un modelo de autocompletado de código; no puede sustituir al modelo de lenguaje en un agente de programación. En cambio, un agente puede escribir el código que llame a Jev cuando necesites una respuesta rápida y calibrada.</p><h4>Aplicaciones</h4><ul><li><strong>Automatización en segundo plano</strong> — decisiones que se ejecutan un millón de veces sin una persona al lado.</li><li><strong>Tiempo real</strong> — según TypeSafe, la mayoría de las solicitudes se resuelven en unos 100 ms: suficiente para procesamiento sobre la marcha e interfaces.</li><li><strong>Grandes volúmenes de datos</strong> — búsqueda en corpus enormes, etiquetado de registros de trabajo de agentes y características para predicciones.</li><li><strong>Comprobación de otros modelos</strong> — solicitudes, extracciones, razonamientos y llamadas a herramientas: elusión de restricciones, errores de cita e invenciones.</li><li><strong>Búsqueda y clasificación</strong> — relevancia del par «consulta — candidato», reclasificación y selección de contexto.</li><li><strong>Enrutamiento por intención</strong> — qué quiere el usuario y qué lo debe atender: lógica sencilla, un modelo especializado o una persona; el tema, la complejidad y el riesgo determinan a qué modelo de lenguaje se envía la solicitud.</li><li><strong>Comprobaciones de seguridad</strong> — entrada, salida y llamadas a herramientas de un modelo de lenguaje: instrucciones inyectadas, incumplimiento de normas y filtración de datos personales.</li><li><strong>Soporte</strong> — tema e intención de la consulta, urgencia, irritación, riesgo de abandono, solicitud de devolución y cola.</li><li><strong>Moderación</strong> — según las normas de tu plataforma: toxicidad, acoso, spam, fraude, consejos peligrosos y datos personales; según la gravedad y la confianza, permitir, advertir, revisar o bloquear.</li><li><strong>Sectores</strong> — siniestros, investigaciones financieras y KYC, contratos y publicidad, fichas de productos, selección de personal, oportunidades comerciales, juegos, riesgos, previsión de demanda, grafos de conocimiento, revisiones científicas y comprobaciones semánticas de código en CI.</li></ul><h4>Características</h4><ul><li><strong><code>jev-latest</code></strong> — alias de la última versión estable, actualmente Jev 1.13; la versión que ha respondido aparece en el campo <code>model</code>, por ejemplo <code>jev-1.13.0</code>. Cuando llega una versión nueva, el alias pasa a ella y las respuestas pueden cambiar sin que hagas modificaciones; vigila este campo si has ajustado los umbrales a una versión.</li><li><strong>Contexto</strong> — 64K tokens por solicitud: el estado y todas las preguntas juntos; el estado junto con la pregunta más larga puede ocupar hasta 32K. El modelo lee el estado una sola vez y evalúa todas las preguntas en paralelo con respecto a él.</li><li><strong>Entrada</strong> — solo texto: una cadena, un objeto JSON o un array de textos. Todavía no admite imágenes, audio ni vídeo; conviértelos antes en texto.</li><li><strong>Idioma</strong> — el principal idioma de entrenamiento es el inglés y actualmente ofrece la mayor exactitud en él. El modelo acepta otros idiomas, incluidos chino, japonés y coreano, pero con menor exactitud; compruébalo con tus propios datos.</li><li><strong>Precios y facturación en Ailoot API</strong> — las condiciones dependen del método seleccionado y se indican en su ficha.</li><li><strong>Configuración</strong> — Jev no se ajusta con datos del cliente: tus materiales van en <code>state</code> y las reglas del dominio, en <code>instructions</code> y <code>criteria</code>.</li><li><strong>Datos</strong> — TypeSafe afirma que Jev no se entrena con las solicitudes ni las respuestas de los clientes.</li></ul><h4>Limitaciones conocidas de Jev 1.13</h4><p>TypeSafe enumera abiertamente las limitaciones de la versión actual y promete corregir muchas de ellas en las siguientes. El modelo es rápido, está calibrado y emite buenos juicios de sentido común, pero:</p><ol><li><strong>Lee literalmente.</strong> Responde a la pregunta escrita, no a la implícita: interpreta de forma literal las salvedades, las negaciones y las condiciones no expresadas. Escribe la condición exacta y los casos límite en <code>criteria</code>; si no se puede evitar una interpretación, divídela en dos preguntas literales.</li><li><strong>No es una calculadora.</strong> Contar caracteres, repeticiones y elementos de una lista no es fiable, y el error aumenta con el tamaño; haz los cálculos en el código, con una pregunta por candidato. El modelo entiende peor los colores en hex o RGB que sus nombres. <code>score</code> sirve para un umbral, pero no para un número exacto entre niveles.</li><li><strong>Fechas y horas.</strong> No determina de forma fiable qué fecha es anterior, cuánto tiempo hay entre dos fechas o si una fecha cae en un periodo, sobre todo con formatos mezclados y fechas relativas. Extrae las partes de la fecha mediante choice (con una opción «no indicado») y compáralas en el código.</li><li><strong>Formulaciones indirectas.</strong> Las dobles negaciones y las preguntas sobre una propiedad de otra propiedad reducen la exactitud. Escribe de forma directa y llama a cada parte del estado por su nombre.</li><li><strong>Información superflua en el estado.</strong> El texto ajeno a la tarea reduce la exactitud. Fíltralo en el código y, si no puedes, descarta lo irrelevante con preguntas noul.</li><li><strong>Texto adversarial.</strong> Por defecto, el modelo no espera trampas en el estado: una instrucción inyectada o un texto que discuta su propia clasificación puede cambiar la respuesta. Escribe criterios precisos y comprueba los casos límite antes de ponerlo en funcionamiento.</li><li><strong>Contradicciones.</strong> Si <code>instructions</code> y <code>criteria</code> piden cosas distintas —por ejemplo, si en noul «sí» se describe como «no»—, la exactitud disminuye. Los criterios son una continuación de la pregunta.</li><li><strong>Orden de las opciones.</strong> A veces el modelo tiende a la primera opción de choice. Cambia su orden y comprueba que la respuesta se mantiene.</li><li><strong>Generación.</strong> Jev no está entrenada para redactar texto. Para extraer datos, busca candidatos con una expresión regular o un modelo generativo y deja que Jev elija el correcto mediante choice.</li></ol>",
  "aboutText": "Jev es el modelo insignia de TypeSafe y el primero de una nueva categoría, **System One**. No redacta texto: toma decisiones rápidas que un programa puede utilizar directamente. Envías un **estado** (`state`) —texto o JSON— y un conjunto de **preguntas**, y recibes valores tipados con probabilidades calibradas.\n\nLos modelos de lenguaje escriben palabras para personas; según TypeSafe, Jev se parece más al código: responde directamente en el formato que el código necesita, a gran velocidad y sin ningún valor fuera de las opciones definidas. Está concebida para ofrecer respuestas estables en solicitudes repetidas.\n\n### En qué se diferencia System One de un modelo de lenguaje\n\n- **No genera.** Jev no redacta respuestas para el usuario, no escribe código ni explica su razonamiento. Tú defines las respuestas posibles mediante uno de los tres tipos de preguntas.\n- **Está entrenada para tomar decisiones calibradas.** TypeSafe entrena el modelo con RLCD (Reinforcement Learning for Calibrated Decisions): las probabilidades se ajustan a los resultados reales y reflejan la incertidumbre. De muchas respuestas con una probabilidad de 0,8, aproximadamente el 80% deberían ser correctas. La calibración es una propiedad de una muestra amplia, no una garantía de que una respuesta concreta sea correcta.\n- **Tiene otro objetivo de entrenamiento.** Los modelos de chat se entrenan para agradar a las personas (RLHF) y, según las observaciones de TypeSafe, esto favorece la complacencia y los errores expresados con seguridad. Diogo Almeida, uno de los coautores de RLHF, es cofundador de TypeSafe.\n\nEl nombre alude al «Sistema 1» del libro de Daniel Kahneman «Pensar rápido, pensar despacio»: el juicio intuitivo y rápido frente al pensamiento lento y deliberado del «Sistema 2». Jev está diseñada para emitir juicios rápidos y concretos.\n\n### Tres tipos de preguntas\n\nCada pregunta pide un juicio sobre el estado; la respuesta es un valor que el código compara con un umbral, utiliza para ordenar o transmite al siguiente paso.\n\n1. **Choice — selección de una opción.** El departamento para una consulta, la categoría de un producto o el lenguaje de un fragmento de código. Las opciones son un diccionario «opción → descripción», con hasta 255 entradas. La respuesta contiene la opción elegida, `choice`, las probabilidades `probabilities` de todas las opciones (que suman 1) y la confianza `confidence`. Si la lista puede no cubrir todos los casos, añade «otro» o «ninguna de las anteriores».\n2. **Score — valoración en una escala.** Una posición en una escala ordenada que tú describes: la gravedad de un error, la irritación de un cliente o un nivel de habilidad. Tiene entre 2 y 10 niveles, de menor a mayor; el modelo evalúa cada nivel por separado, sin ver su número ni los niveles vecinos. La respuesta contiene `score` (la suma de los números de los niveles multiplicados por sus probabilidades, de modo que el valor puede quedar entre niveles), `legend` con sus descripciones, `probabilities` y `confidence`.\n3. **Noul — sí o no.** Determina si una afirmación es verdadera. La respuesta `noul` es la probabilidad de «sí», entre 0 y 1: cerca de 1 es un «sí» seguro, cerca de 0 es un «no» seguro y cerca de 0,5 indica duda. No hay un `confidence` independiente: un solo número describe toda la respuesta. El parámetro opcional `criteria` precisa qué se considera «sí» y qué se considera «no».\n\nCómo elegir: para opciones conocidas sin orden, choice; para grados de un espectro, score; para un «sí/no» puro en el que importa la probabilidad, noul. Noul 0,5 indica las mismas posibilidades de «sí» y «no», no un «nivel medio»: el grado se mide con score. Si dos tipos encajan, elige aquel con el que el código pueda actuar directamente: choice para ramas, score para umbrales y noul para `if`.\n\nLos tipos se pueden combinar en una misma solicitud. La respuesta siempre queda limitada a tus opciones y es independiente de las demás preguntas: puedes añadir o quitar preguntas sin cambiar las otras respuestas.\n\n### Estado\n\nEl estado es lo que el modelo evalúa: un mensaje de un cliente, un fragmento de documento, un registro de una base de datos o el estado de tu aplicación.\n\n- **Cadena** — cuando hay un único texto: un mensaje, un artículo o un fragmento.\n- **Objeto** — campos con nombre, registros relacionados o el estado de una aplicación. TypeSafe recomienda objetos para la mayoría de las solicitudes: cada parte tiene un nombre claro.\n- **Array** — una secuencia de mensajes o registros.\n\nPrepáralo como materiales para especialistas: reúne la conversación, el pedido y las normas de devolución si la decisión exige compararlos. Coloca el contenido en el estado y los juicios en las preguntas. Si una pregunta se refiere a una parte concreta del estado, indica su ruta entre comillas invertidas, por ejemplo `ticket.messages[0].text`.\n\n### Cómo formular las preguntas\n\n- **Un juicio rápido por pregunta.** Una buena pregunta es aquella que una persona informada y con el contexto necesario respondería en un segundo: «¿Hay urgencia en el mensaje?». «Analiza el mensaje y decide qué hacer» ya requiere razonamiento lento y debe dividirse en preguntas sencillas.\n- **La pregunta completa va en `instructions`.** La clave de la pregunta, por ejemplo `refund_requested`, solo la necesita tu código y no se envía al modelo.\n- **Todas las preguntas sobre un mismo estado, en una sola solicitud.** El modelo las evalúa en paralelo: según TypeSafe, las preguntas adicionales apenas aumentan el tiempo de respuesta y solo cuestan los tokens que utilizan. Una pregunta «por si acaso» sale casi gratis: el código decidirá qué respuestas necesita.\n- **Los juicios complejos, por partes.** En vez de «evalúa la solicitud de la startup», pregunta por separado sobre el tamaño del mercado, la viabilidad técnica y las diferencias respecto a la competencia, y calcula el resultado en el código con ponderaciones. Si cambian las prioridades, cambia las ponderaciones sin reformular la pregunta.\n- **Las preguntas dependientes, en una segunda solicitud.** Las respuestas de una solicitud no sirven de contexto entre sí. Una segunda solicitud solo es necesaria si no puede construirse sin la primera respuesta: hay que cargar datos o elegir las opciones de la siguiente pregunta.\n- **Las preguntas largas, como objetos.** `instructions` y `criteria` suelen ser cadenas, pero también pueden ser objetos o arrays: la pregunta en un campo y los datos en otros. Así resulta cómodo contrastar un currículo con registros de una base de datos mediante una sola pregunta.\n\n### Confianza\n\nEn choice y score, `confidence` va de 0 a 1 e indica hasta qué punto la probabilidad se concentra en una respuesta: 1 significa que toda se concentra en una opción y 0, que se reparte por igual entre todas. En score, un nivel vecino reduce la confianza menos que uno distante. En noul, la confianza es el propio valor: cuanto más se aleja de 0,5, más firme es la respuesta.\n\nTypeSafe recomienda tres rangos:\n\n1. **Confianza alta** — actúa automáticamente.\n2. **Confianza media** — actúa con cautela; por ejemplo, pide confirmación al usuario.\n3. **Confianza baja** — deriva el caso a una persona, aclara la solicitud o utiliza una vía alternativa, como un modelo más potente con razonamiento.\n\nCuanto mayor sea el coste de un error, más exigente debe ser el umbral: debe ser más alto para acciones irreversibles que para lectura. La respuesta indica qué elegir y la confianza, si conviene actuar. Ajusta los umbrales con tus propios datos, comparando confianza y exactitud.\n\n### Cómo construir un sistema con Jev\n\nJev está concebida para programas en los que el código controla el proceso y el modelo responde a preguntas semánticas concretas, en lugar de agentes que eligen por sí mismos el siguiente paso y pueden desviarse en cada ciclo. Ocho pasos de diseño según TypeSafe:\n\n1. Todo lo que se pueda hacer con código, hazlo con código: es fiable y económico.\n2. Incluye en el estado solo lo que necesitan las preguntas actuales; los datos recientes deben proceder de tu propia base de conocimientos, no de la memoria del modelo.\n3. Estructura el estado con JSON anidado y, cuando reduzca la ambigüedad, indica en la pregunta la ruta al campo necesario entre comillas invertidas.\n4. Formula preguntas lo más concretas y específicas posible: según TypeSafe, quizá sea la regla principal; una pregunta amplia esconde varios juicios en una sola respuesta.\n5. Estructura las preguntas: la pregunta en sí debe ser breve; coloca explicaciones, ejemplos y valores de tu base en campos vecinos del objeto `instructions` o `criteria`, en lugar de una única cadena larga.\n6. Reúne muchas preguntas independientes sobre un mismo estado en una solicitud: obtendrás más utilidad por cada dólar.\n7. Combina las respuestas en el código mediante reglas, una suma ponderada o como características de un modelo clásico de aprendizaje automático.\n8. Bifurca según la confianza: deriva los casos inciertos a una persona o a un modelo con razonamiento.\n\nJev no es un chat ni un modelo de autocompletado de código; no puede sustituir al modelo de lenguaje en un agente de programación. En cambio, un agente puede escribir el código que llame a Jev cuando necesites una respuesta rápida y calibrada.\n\n### Aplicaciones\n\n- **Automatización en segundo plano** — decisiones que se ejecutan un millón de veces sin una persona al lado.\n- **Tiempo real** — según TypeSafe, la mayoría de las solicitudes se resuelven en unos 100 ms: suficiente para procesamiento sobre la marcha e interfaces.\n- **Grandes volúmenes de datos** — búsqueda en corpus enormes, etiquetado de registros de trabajo de agentes y características para predicciones.\n- **Comprobación de otros modelos** — solicitudes, extracciones, razonamientos y llamadas a herramientas: elusión de restricciones, errores de cita e invenciones.\n- **Búsqueda y clasificación** — relevancia del par «consulta — candidato», reclasificación y selección de contexto.\n- **Enrutamiento por intención** — qué quiere el usuario y qué lo debe atender: lógica sencilla, un modelo especializado o una persona; el tema, la complejidad y el riesgo determinan a qué modelo de lenguaje se envía la solicitud.\n- **Comprobaciones de seguridad** — entrada, salida y llamadas a herramientas de un modelo de lenguaje: instrucciones inyectadas, incumplimiento de normas y filtración de datos personales.\n- **Soporte** — tema e intención de la consulta, urgencia, irritación, riesgo de abandono, solicitud de devolución y cola.\n- **Moderación** — según las normas de tu plataforma: toxicidad, acoso, spam, fraude, consejos peligrosos y datos personales; según la gravedad y la confianza, permitir, advertir, revisar o bloquear.\n- **Sectores** — siniestros, investigaciones financieras y KYC, contratos y publicidad, fichas de productos, selección de personal, oportunidades comerciales, juegos, riesgos, previsión de demanda, grafos de conocimiento, revisiones científicas y comprobaciones semánticas de código en CI.\n\n### Características\n\n- **`jev-latest`** — alias de la última versión estable, actualmente Jev 1.13; la versión que ha respondido aparece en el campo `model`, por ejemplo `jev-1.13.0`. Cuando llega una versión nueva, el alias pasa a ella y las respuestas pueden cambiar sin que hagas modificaciones; vigila este campo si has ajustado los umbrales a una versión.\n- **Contexto** — 64K tokens por solicitud: el estado y todas las preguntas juntos; el estado junto con la pregunta más larga puede ocupar hasta 32K. El modelo lee el estado una sola vez y evalúa todas las preguntas en paralelo con respecto a él.\n- **Entrada** — solo texto: una cadena, un objeto JSON o un array de textos. Todavía no admite imágenes, audio ni vídeo; conviértelos antes en texto.\n- **Idioma** — el principal idioma de entrenamiento es el inglés y actualmente ofrece la mayor exactitud en él. El modelo acepta otros idiomas, incluidos chino, japonés y coreano, pero con menor exactitud; compruébalo con tus propios datos.\n- **Precios y facturación en Ailoot API** — las condiciones dependen del método seleccionado y se indican en su ficha.\n- **Configuración** — Jev no se ajusta con datos del cliente: tus materiales van en `state` y las reglas del dominio, en `instructions` y `criteria`.\n- **Datos** — TypeSafe afirma que Jev no se entrena con las solicitudes ni las respuestas de los clientes.\n\n### Limitaciones conocidas de Jev 1.13\n\nTypeSafe enumera abiertamente las limitaciones de la versión actual y promete corregir muchas de ellas en las siguientes. El modelo es rápido, está calibrado y emite buenos juicios de sentido común, pero:\n\n1. **Lee literalmente.** Responde a la pregunta escrita, no a la implícita: interpreta de forma literal las salvedades, las negaciones y las condiciones no expresadas. Escribe la condición exacta y los casos límite en `criteria`; si no se puede evitar una interpretación, divídela en dos preguntas literales.\n2. **No es una calculadora.** Contar caracteres, repeticiones y elementos de una lista no es fiable, y el error aumenta con el tamaño; haz los cálculos en el código, con una pregunta por candidato. El modelo entiende peor los colores en hex o RGB que sus nombres. `score` sirve para un umbral, pero no para un número exacto entre niveles.\n3. **Fechas y horas.** No determina de forma fiable qué fecha es anterior, cuánto tiempo hay entre dos fechas o si una fecha cae en un periodo, sobre todo con formatos mezclados y fechas relativas. Extrae las partes de la fecha mediante choice (con una opción «no indicado») y compáralas en el código.\n4. **Formulaciones indirectas.** Las dobles negaciones y las preguntas sobre una propiedad de otra propiedad reducen la exactitud. Escribe de forma directa y llama a cada parte del estado por su nombre.\n5. **Información superflua en el estado.** El texto ajeno a la tarea reduce la exactitud. Fíltralo en el código y, si no puedes, descarta lo irrelevante con preguntas noul.\n6. **Texto adversarial.** Por defecto, el modelo no espera trampas en el estado: una instrucción inyectada o un texto que discuta su propia clasificación puede cambiar la respuesta. Escribe criterios precisos y comprueba los casos límite antes de ponerlo en funcionamiento.\n7. **Contradicciones.** Si `instructions` y `criteria` piden cosas distintas —por ejemplo, si en noul «sí» se describe como «no»—, la exactitud disminuye. Los criterios son una continuación de la pregunta.\n8. **Orden de las opciones.** A veces el modelo tiende a la primera opción de choice. Cambia su orden y comprueba que la respuesta se mantiene.\n9. **Generación.** Jev no está entrenada para redactar texto. Para extraer datos, busca candidatos con una expresión regular o un modelo generativo y deja que Jev elija el correcto mediante choice.",
  "editorialOverlay": {
    "copy_fields": null,
    "copy_sha256": null,
    "copy_source": null,
    "html_sha256": "d71d869f0e1dcf2432e3b79a3436da31d9a2e8eede0bd07d6d8a14ac3f5c85dd",
    "module_sha256": "ee9dc1c50b1e6a8fb7fa062030fcb4646b9aaaeb08be513b723a5a92a7290f06",
    "raw_model_unchanged": true,
    "schema": "ailoot-native-model-editorial-v1"
  },
  "locale": "es",
  "methods": [
    {
      "html": "<div class=\"sheet-head\"><span class=\"mav\" aria-hidden=\"true\">TS</span><h2 id=\"sheet-title\">jev-latest</h2><button class=\"icon-btn\" type=\"button\" data-close-sheet aria-label=\"Cerrar\">×</button></div><div class=\"idline\"><span>TypeSafe /</span><code>jev-latest</code><button type=\"button\" id=\"copy-id\">Copiar ID</button></div><nav class=\"card-jump-nav\" aria-label=\"Secciones de la ficha del modelo\"><button type=\"button\" data-card-jump=\"overview\">Primeros pasos</button><button type=\"button\" data-card-jump=\"methods\">Entradas y métodos</button><button type=\"button\" data-card-jump=\"pricing\">Planes</button><button type=\"button\" data-card-jump=\"examples\">Ejemplos</button><button type=\"button\" data-card-jump=\"results\">Resultados</button><button type=\"button\" data-card-jump=\"aliases\">Alias</button></nav><div class=\"card-method-tabs\" role=\"tablist\" aria-label=\"Métodos de API\"><button type=\"button\" role=\"tab\" tabindex=\"0\" aria-controls=\"card-method-content\" aria-selected=\"true\" id=\"card-method-tab-0\" data-card-method=\"Core|systemone|/v1/systemone|jev-latest\">System One</button></div><div id=\"card-method-content\" role=\"tabpanel\" aria-labelledby=\"card-method-tab-0\"><section class=\"card-section\" data-card-section=\"overview\"><h3 tabindex=\"-1\">Primeros pasos</h3><p class=\"mdesc-full\">Modelo de decisiones de TypeSafe: no redacta texto, sino que responde a preguntas tipadas sobre texto o JSON —selección de una opción, valoración en una escala o «sí/no» con probabilidades—. Es adecuado para enrutamiento, clasificación de consultas, moderación y puntuación; todas las preguntas de una solicitud se evalúan en paralelo.</p><dl class=\"card-io\" data-card-io><div><dt>Entradas aceptadas</dt><dd>Texto</dd></div><div><dt>Resultados</dt><dd>structured</dd></div></dl><details class=\"card-about\"><summary>Sobre el modelo</summary><p class=\"note-s\" data-model-method-boundary>Esta descripción cubre las capacidades del modelo. Las entradas, salidas y opciones disponibles en Ailoot se indican a continuación para el método seleccionado.</p><div class=\"mabout\" id=\"m-about\"><p>Jev es el modelo insignia de TypeSafe y el primero de una nueva categoría, <strong>System One</strong>. No redacta texto: toma decisiones rápidas que un programa puede utilizar directamente. Envías un <strong>estado</strong> (<code>state</code>) —texto o JSON— y un conjunto de <strong>preguntas</strong>, y recibes valores tipados con probabilidades calibradas.</p><p>Los modelos de lenguaje escriben palabras para personas; según TypeSafe, Jev se parece más al código: responde directamente en el formato que el código necesita, a gran velocidad y sin ningún valor fuera de las opciones definidas. Está concebida para ofrecer respuestas estables en solicitudes repetidas.</p><h4>En qué se diferencia System One de un modelo de lenguaje</h4><ul><li><strong>No genera.</strong> Jev no redacta respuestas para el usuario, no escribe código ni explica su razonamiento. Tú defines las respuestas posibles mediante uno de los tres tipos de preguntas.</li><li><strong>Está entrenada para tomar decisiones calibradas.</strong> TypeSafe entrena el modelo con RLCD (Reinforcement Learning for Calibrated Decisions): las probabilidades se ajustan a los resultados reales y reflejan la incertidumbre. De muchas respuestas con una probabilidad de 0,8, aproximadamente el 80% deberían ser correctas. La calibración es una propiedad de una muestra amplia, no una garantía de que una respuesta concreta sea correcta.</li><li><strong>Tiene otro objetivo de entrenamiento.</strong> Los modelos de chat se entrenan para agradar a las personas (RLHF) y, según las observaciones de TypeSafe, esto favorece la complacencia y los errores expresados con seguridad. Diogo Almeida, uno de los coautores de RLHF, es cofundador de TypeSafe.</li></ul><p>El nombre alude al «Sistema 1» del libro de Daniel Kahneman «Pensar rápido, pensar despacio»: el juicio intuitivo y rápido frente al pensamiento lento y deliberado del «Sistema 2». Jev está diseñada para emitir juicios rápidos y concretos.</p><h4>Tres tipos de preguntas</h4><p>Cada pregunta pide un juicio sobre el estado; la respuesta es un valor que el código compara con un umbral, utiliza para ordenar o transmite al siguiente paso.</p><ol><li><strong>Choice — selección de una opción.</strong> El departamento para una consulta, la categoría de un producto o el lenguaje de un fragmento de código. Las opciones son un diccionario «opción → descripción», con hasta 255 entradas. La respuesta contiene la opción elegida, <code>choice</code>, las probabilidades <code>probabilities</code> de todas las opciones (que suman 1) y la confianza <code>confidence</code>. Si la lista puede no cubrir todos los casos, añade «otro» o «ninguna de las anteriores».</li><li><strong>Score — valoración en una escala.</strong> Una posición en una escala ordenada que tú describes: la gravedad de un error, la irritación de un cliente o un nivel de habilidad. Tiene entre 2 y 10 niveles, de menor a mayor; el modelo evalúa cada nivel por separado, sin ver su número ni los niveles vecinos. La respuesta contiene <code>score</code> (la suma de los números de los niveles multiplicados por sus probabilidades, de modo que el valor puede quedar entre niveles), <code>legend</code> con sus descripciones, <code>probabilities</code> y <code>confidence</code>.</li><li><strong>Noul — sí o no.</strong> Determina si una afirmación es verdadera. La respuesta <code>noul</code> es la probabilidad de «sí», entre 0 y 1: cerca de 1 es un «sí» seguro, cerca de 0 es un «no» seguro y cerca de 0,5 indica duda. No hay un <code>confidence</code> independiente: un solo número describe toda la respuesta. El parámetro opcional <code>criteria</code> precisa qué se considera «sí» y qué se considera «no».</li></ol><p>Cómo elegir: para opciones conocidas sin orden, choice; para grados de un espectro, score; para un «sí/no» puro en el que importa la probabilidad, noul. Noul 0,5 indica las mismas posibilidades de «sí» y «no», no un «nivel medio»: el grado se mide con score. Si dos tipos encajan, elige aquel con el que el código pueda actuar directamente: choice para ramas, score para umbrales y noul para <code>if</code>.</p><p>Los tipos se pueden combinar en una misma solicitud. La respuesta siempre queda limitada a tus opciones y es independiente de las demás preguntas: puedes añadir o quitar preguntas sin cambiar las otras respuestas.</p><h4>Estado</h4><p>El estado es lo que el modelo evalúa: un mensaje de un cliente, un fragmento de documento, un registro de una base de datos o el estado de tu aplicación.</p><ul><li><strong>Cadena</strong> — cuando hay un único texto: un mensaje, un artículo o un fragmento.</li><li><strong>Objeto</strong> — campos con nombre, registros relacionados o el estado de una aplicación. TypeSafe recomienda objetos para la mayoría de las solicitudes: cada parte tiene un nombre claro.</li><li><strong>Array</strong> — una secuencia de mensajes o registros.</li></ul><p>Prepáralo como materiales para especialistas: reúne la conversación, el pedido y las normas de devolución si la decisión exige compararlos. Coloca el contenido en el estado y los juicios en las preguntas. Si una pregunta se refiere a una parte concreta del estado, indica su ruta entre comillas invertidas, por ejemplo <code>ticket.messages[0].text</code>.</p><h4>Cómo formular las preguntas</h4><ul><li><strong>Un juicio rápido por pregunta.</strong> Una buena pregunta es aquella que una persona informada y con el contexto necesario respondería en un segundo: «¿Hay urgencia en el mensaje?». «Analiza el mensaje y decide qué hacer» ya requiere razonamiento lento y debe dividirse en preguntas sencillas.</li><li><strong>La pregunta completa va en <code>instructions</code>.</strong> La clave de la pregunta, por ejemplo <code>refund_requested</code>, solo la necesita tu código y no se envía al modelo.</li><li><strong>Todas las preguntas sobre un mismo estado, en una sola solicitud.</strong> El modelo las evalúa en paralelo: según TypeSafe, las preguntas adicionales apenas aumentan el tiempo de respuesta y solo cuestan los tokens que utilizan. Una pregunta «por si acaso» sale casi gratis: el código decidirá qué respuestas necesita.</li><li><strong>Los juicios complejos, por partes.</strong> En vez de «evalúa la solicitud de la startup», pregunta por separado sobre el tamaño del mercado, la viabilidad técnica y las diferencias respecto a la competencia, y calcula el resultado en el código con ponderaciones. Si cambian las prioridades, cambia las ponderaciones sin reformular la pregunta.</li><li><strong>Las preguntas dependientes, en una segunda solicitud.</strong> Las respuestas de una solicitud no sirven de contexto entre sí. Una segunda solicitud solo es necesaria si no puede construirse sin la primera respuesta: hay que cargar datos o elegir las opciones de la siguiente pregunta.</li><li><strong>Las preguntas largas, como objetos.</strong> <code>instructions</code> y <code>criteria</code> suelen ser cadenas, pero también pueden ser objetos o arrays: la pregunta en un campo y los datos en otros. Así resulta cómodo contrastar un currículo con registros de una base de datos mediante una sola pregunta.</li></ul><h4>Confianza</h4><p>En choice y score, <code>confidence</code> va de 0 a 1 e indica hasta qué punto la probabilidad se concentra en una respuesta: 1 significa que toda se concentra en una opción y 0, que se reparte por igual entre todas. En score, un nivel vecino reduce la confianza menos que uno distante. En noul, la confianza es el propio valor: cuanto más se aleja de 0,5, más firme es la respuesta.</p><p>TypeSafe recomienda tres rangos:</p><ol><li><strong>Confianza alta</strong> — actúa automáticamente.</li><li><strong>Confianza media</strong> — actúa con cautela; por ejemplo, pide confirmación al usuario.</li><li><strong>Confianza baja</strong> — deriva el caso a una persona, aclara la solicitud o utiliza una vía alternativa, como un modelo más potente con razonamiento.</li></ol><p>Cuanto mayor sea el coste de un error, más exigente debe ser el umbral: debe ser más alto para acciones irreversibles que para lectura. La respuesta indica qué elegir y la confianza, si conviene actuar. Ajusta los umbrales con tus propios datos, comparando confianza y exactitud.</p><h4>Cómo construir un sistema con Jev</h4><p>Jev está concebida para programas en los que el código controla el proceso y el modelo responde a preguntas semánticas concretas, en lugar de agentes que eligen por sí mismos el siguiente paso y pueden desviarse en cada ciclo. Ocho pasos de diseño según TypeSafe:</p><ol><li>Todo lo que se pueda hacer con código, hazlo con código: es fiable y económico.</li><li>Incluye en el estado solo lo que necesitan las preguntas actuales; los datos recientes deben proceder de tu propia base de conocimientos, no de la memoria del modelo.</li><li>Estructura el estado con JSON anidado y, cuando reduzca la ambigüedad, indica en la pregunta la ruta al campo necesario entre comillas invertidas.</li><li>Formula preguntas lo más concretas y específicas posible: según TypeSafe, quizá sea la regla principal; una pregunta amplia esconde varios juicios en una sola respuesta.</li><li>Estructura las preguntas: la pregunta en sí debe ser breve; coloca explicaciones, ejemplos y valores de tu base en campos vecinos del objeto <code>instructions</code> o <code>criteria</code>, en lugar de una única cadena larga.</li><li>Reúne muchas preguntas independientes sobre un mismo estado en una solicitud: obtendrás más utilidad por cada dólar.</li><li>Combina las respuestas en el código mediante reglas, una suma ponderada o como características de un modelo clásico de aprendizaje automático.</li><li>Bifurca según la confianza: deriva los casos inciertos a una persona o a un modelo con razonamiento.</li></ol><p>Jev no es un chat ni un modelo de autocompletado de código; no puede sustituir al modelo de lenguaje en un agente de programación. En cambio, un agente puede escribir el código que llame a Jev cuando necesites una respuesta rápida y calibrada.</p><h4>Aplicaciones</h4><ul><li><strong>Automatización en segundo plano</strong> — decisiones que se ejecutan un millón de veces sin una persona al lado.</li><li><strong>Tiempo real</strong> — según TypeSafe, la mayoría de las solicitudes se resuelven en unos 100 ms: suficiente para procesamiento sobre la marcha e interfaces.</li><li><strong>Grandes volúmenes de datos</strong> — búsqueda en corpus enormes, etiquetado de registros de trabajo de agentes y características para predicciones.</li><li><strong>Comprobación de otros modelos</strong> — solicitudes, extracciones, razonamientos y llamadas a herramientas: elusión de restricciones, errores de cita e invenciones.</li><li><strong>Búsqueda y clasificación</strong> — relevancia del par «consulta — candidato», reclasificación y selección de contexto.</li><li><strong>Enrutamiento por intención</strong> — qué quiere el usuario y qué lo debe atender: lógica sencilla, un modelo especializado o una persona; el tema, la complejidad y el riesgo determinan a qué modelo de lenguaje se envía la solicitud.</li><li><strong>Comprobaciones de seguridad</strong> — entrada, salida y llamadas a herramientas de un modelo de lenguaje: instrucciones inyectadas, incumplimiento de normas y filtración de datos personales.</li><li><strong>Soporte</strong> — tema e intención de la consulta, urgencia, irritación, riesgo de abandono, solicitud de devolución y cola.</li><li><strong>Moderación</strong> — según las normas de tu plataforma: toxicidad, acoso, spam, fraude, consejos peligrosos y datos personales; según la gravedad y la confianza, permitir, advertir, revisar o bloquear.</li><li><strong>Sectores</strong> — siniestros, investigaciones financieras y KYC, contratos y publicidad, fichas de productos, selección de personal, oportunidades comerciales, juegos, riesgos, previsión de demanda, grafos de conocimiento, revisiones científicas y comprobaciones semánticas de código en CI.</li></ul><h4>Características</h4><ul><li><strong><code>jev-latest</code></strong> — alias de la última versión estable, actualmente Jev 1.13; la versión que ha respondido aparece en el campo <code>model</code>, por ejemplo <code>jev-1.13.0</code>. Cuando llega una versión nueva, el alias pasa a ella y las respuestas pueden cambiar sin que hagas modificaciones; vigila este campo si has ajustado los umbrales a una versión.</li><li><strong>Contexto</strong> — 64K tokens por solicitud: el estado y todas las preguntas juntos; el estado junto con la pregunta más larga puede ocupar hasta 32K. El modelo lee el estado una sola vez y evalúa todas las preguntas en paralelo con respecto a él.</li><li><strong>Entrada</strong> — solo texto: una cadena, un objeto JSON o un array de textos. Todavía no admite imágenes, audio ni vídeo; conviértelos antes en texto.</li><li><strong>Idioma</strong> — el principal idioma de entrenamiento es el inglés y actualmente ofrece la mayor exactitud en él. El modelo acepta otros idiomas, incluidos chino, japonés y coreano, pero con menor exactitud; compruébalo con tus propios datos.</li><li><strong>Precios y facturación en Ailoot API</strong> — las condiciones dependen del método seleccionado y se indican en su ficha.</li><li><strong>Configuración</strong> — Jev no se ajusta con datos del cliente: tus materiales van en <code>state</code> y las reglas del dominio, en <code>instructions</code> y <code>criteria</code>.</li><li><strong>Datos</strong> — TypeSafe afirma que Jev no se entrena con las solicitudes ni las respuestas de los clientes.</li></ul><h4>Limitaciones conocidas de Jev 1.13</h4><p>TypeSafe enumera abiertamente las limitaciones de la versión actual y promete corregir muchas de ellas en las siguientes. El modelo es rápido, está calibrado y emite buenos juicios de sentido común, pero:</p><ol><li><strong>Lee literalmente.</strong> Responde a la pregunta escrita, no a la implícita: interpreta de forma literal las salvedades, las negaciones y las condiciones no expresadas. Escribe la condición exacta y los casos límite en <code>criteria</code>; si no se puede evitar una interpretación, divídela en dos preguntas literales.</li><li><strong>No es una calculadora.</strong> Contar caracteres, repeticiones y elementos de una lista no es fiable, y el error aumenta con el tamaño; haz los cálculos en el código, con una pregunta por candidato. El modelo entiende peor los colores en hex o RGB que sus nombres. <code>score</code> sirve para un umbral, pero no para un número exacto entre niveles.</li><li><strong>Fechas y horas.</strong> No determina de forma fiable qué fecha es anterior, cuánto tiempo hay entre dos fechas o si una fecha cae en un periodo, sobre todo con formatos mezclados y fechas relativas. Extrae las partes de la fecha mediante choice (con una opción «no indicado») y compáralas en el código.</li><li><strong>Formulaciones indirectas.</strong> Las dobles negaciones y las preguntas sobre una propiedad de otra propiedad reducen la exactitud. Escribe de forma directa y llama a cada parte del estado por su nombre.</li><li><strong>Información superflua en el estado.</strong> El texto ajeno a la tarea reduce la exactitud. Fíltralo en el código y, si no puedes, descarta lo irrelevante con preguntas noul.</li><li><strong>Texto adversarial.</strong> Por defecto, el modelo no espera trampas en el estado: una instrucción inyectada o un texto que discuta su propia clasificación puede cambiar la respuesta. Escribe criterios precisos y comprueba los casos límite antes de ponerlo en funcionamiento.</li><li><strong>Contradicciones.</strong> Si <code>instructions</code> y <code>criteria</code> piden cosas distintas —por ejemplo, si en noul «sí» se describe como «no»—, la exactitud disminuye. Los criterios son una continuación de la pregunta.</li><li><strong>Orden de las opciones.</strong> A veces el modelo tiende a la primera opción de choice. Cambia su orden y comprueba que la respuesta se mantiene.</li><li><strong>Generación.</strong> Jev no está entrenada para redactar texto. Para extraer datos, busca candidatos con una expresión regular o un modelo generativo y deja que Jev elija el correcto mediante choice.</li></ol></div></details></section><section class=\"card-section\" data-card-section=\"methods\"><h3 tabindex=\"-1\">Disponible en Ailoot · entradas y métodos</h3><details class=\"card-method\" open><summary><b>Ailoot · System One</b> <code>POST /v1/systemone</code></summary><dl class=\"method-capabilities\"><div><dt>Tipos de entrada</dt><dd><code>text</code></dd></div><div><dt>Tipos de salida</dt><dd><code>structured</code></dd></div><div><dt>Contexto</dt><dd>64.000 tokens</dd></div><div><dt>Formato de salida</dt><dd>json</dd></div></dl><div class=\"tw\" data-card-parameters data-typed-parameters><table><thead><tr><th>Campo</th><th>Tipo</th><th>Requisito</th><th>Valores y límites</th><th>Predeterminado</th></tr></thead><tbody><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">model</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>string</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Obligatorio</td><td data-cell-label=\"Valores y límites\"><span class=\"card-cell-label\">Valores y límites</span><div>jev-latest</div></td><td data-cell-label=\"Predeterminado\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predeterminado</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">state</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>string|object|array</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Obligatorio</td><td data-cell-label=\"Valores y límites\"><span class=\"card-cell-label\">Valores y límites</span></td><td data-cell-label=\"Predeterminado\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predeterminado</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">questions</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>object</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Obligatorio</td><td data-cell-label=\"Valores y límites\"><span class=\"card-cell-label\">Valores y límites</span><div>Mínimo de campos del objeto: 1</div></td><td data-cell-label=\"Predeterminado\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predeterminado</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">questions.&lt;id&gt;.type</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>string</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Obligatorio</td><td data-cell-label=\"Valores y límites\"><span class=\"card-cell-label\">Valores y límites</span><div>noul, choice, score</div></td><td data-cell-label=\"Predeterminado\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predeterminado</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">questions.&lt;id&gt;.instructions</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>string|object|array|null</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Opcional</td><td data-cell-label=\"Valores y límites\"><span class=\"card-cell-label\">Valores y límites</span></td><td data-cell-label=\"Predeterminado\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predeterminado</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">questions.&lt;id&gt;.criteria</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>object|array|null</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Opcional</td><td data-cell-label=\"Valores y límites\"><span class=\"card-cell-label\">Valores y límites</span><div>Condiciones: noul: descripciones opcionales de true/false que admiten null; choice: objeto de criterios; score: lista de criterios no vacía</div></td><td data-cell-label=\"Predeterminado\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predeterminado</span>—</td></tr><tr data-parameter-availability=\"source_interface\"><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">stream</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span><code>boolean|null</code></td><td data-cell-label=\"Requisito\"><span class=\"card-cell-label\">Requisito</span>Opcional</td><td data-cell-label=\"Valores y límites\"><span class=\"card-cell-label\">Valores y límites</span><div>false, null</div></td><td data-cell-label=\"Predeterminado\" data-default=\"unspecified\"><span class=\"card-cell-label\">Predeterminado</span>—</td></tr></tbody></table></div><details class=\"card-about\" data-material-combinations><summary>Combinaciones de materiales de entrada</summary><p class=\"note-s\"><b>noul</b> · Obligatorio: state, questions.&lt;id&gt;.type=noul</p><p class=\"note-s\"><b>choice</b> · Obligatorio: state, questions.&lt;id&gt;.type=choice, criteria object</p><p class=\"note-s\"><b>score</b> · Obligatorio: state, questions.&lt;id&gt;.type=score, nonemptycriteriaarray</p></details><details class=\"note-s\" data-method-contract><summary>Parámetros del método y ciclo de vida</summary><div class=\"tw\" data-card-table=\"contract\"><table><thead><tr><th>Parámetro</th><th>Contrato</th></tr></thead><tbody><tr><th data-cell-label=\"Parámetro\" scope=\"row\"><span class=\"card-cell-label\">Parámetro</span><code>material_types</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>text</td></tr><tr><th data-cell-label=\"Parámetro\" scope=\"row\"><span class=\"card-cell-label\">Parámetro</span><code>required</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>model, state, questions</td></tr><tr><th data-cell-label=\"Parámetro\" scope=\"row\"><span class=\"card-cell-label\">Parámetro</span><code>optional_controls</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>null</td></tr><tr><th data-cell-label=\"Parámetro\" scope=\"row\"><span class=\"card-cell-label\">Parámetro</span><code>content_type</code></th><td data-cell-label=\"Contrato\"><span class=\"card-cell-label\">Contrato</span>application/json</td></tr></tbody></table></div><p>Ciclo de vida: <code>exact retained published method</code></p><p class=\"note-s\">Las estructuras e ID de los métodos son exactos; la capacidad del proveedor y la admisión son conceptos distintos.</p></details></details></section><section class=\"card-section\" data-card-section=\"pricing\"><h3 tabindex=\"-1\">Planes</h3><h4>Tarifas de métodos Ailoot</h4><section class=\"meth\" data-route=\"Core\"><header><b><span class=\"alias\">Ailoot</span> System One</b><code>POST /v1/systemone</code></header><dl><div><dt>Entrada</dt><dd>≈0,000084 US$ <em>/ 1K</em></dd></div><div><dt>Salida</dt><dd>0,00 US$ <em>/ 1K</em></dd></div></dl></section><p class=\"note-s\">Ailoot reserva un importe estimado antes de la solicitud. Tras obtener el resultado, liquida el cargo definitivo según el uso medido. En las respuestas en flujo, la liquidación usa el registro de uso final. <a href=\"/docs/es/billing/reserve/\">Cómo funcionan la reserva y la liquidación →</a></p></section><section class=\"card-section\" data-card-section=\"examples\"><h3 tabindex=\"-1\">Solicitudes de ejemplo</h3><h4>Ailoot · System One</h4><div class=\"code-group\"><div class=\"cg-bar\"><div class=\"cg-tabs\" role=\"tablist\" aria-label=\"Variantes del código\"><button class=\"cg-tab\" id=\"model-code-665-tab-0\" role=\"tab\" type=\"button\" aria-controls=\"model-code-665-panel-0\" aria-selected=\"true\" tabindex=\"0\">Ejemplo de clasificación</button></div><div class=\"cg-tools\"><button class=\"cg-btn cg-copy\" type=\"button\" aria-label=\"Copiar código\"><svg class=\"cp\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><rect x=\"5.25\" y=\"5.25\" width=\"8.5\" height=\"8.5\" rx=\"1.75\"/><path d=\"M10.75 5.25V3.5a1.25 1.25 0 0 0-1.25-1.25H3.5A1.25 1.25 0 0 0 2.25 3.5v6a1.25 1.25 0 0 0 1.25 1.25h1.75\"/></svg><svg class=\"ok\" viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1.4\"><path d=\"m3 8.5 3.25 3.25L13 5\"/></svg></button></div></div><div class=\"cg-body\"><div class=\"cg-pane\" id=\"model-code-665-panel-0\" role=\"tabpanel\" aria-labelledby=\"model-code-665-tab-0\"><pre data-lang=\"bash\"><code>set -eu\n: &quot;${AILOOT_API_KEY:?Set your Ailoot API key}&quot;\n: &quot;${AILOOT_TEXT_FILE:?Set your actual UTF-8 customer message}&quot;\nexport AILOOT_TEXT_FILE\npython3 - &lt;&lt;&#39;PY_REQUEST&#39;\nimport json,os\nfrom pathlib import Path\np=json.loads(&#39;{&quot;model&quot;: &quot;jev-latest&quot;, &quot;state&quot;: &quot;&quot;, &quot;questions&quot;: {&quot;is_urgent&quot;: {&quot;type&quot;: &quot;noul&quot;, &quot;instructions&quot;: &quot;Does the supplied customer message express urgency?&quot;}}}&#39;)\nf=Path(os.environ[&quot;AILOOT_TEXT_FILE&quot;])\nif not f.is_file():raise SystemExit(&quot;Choose your actual UTF-8 source material&quot;)\ntext=f.read_text(encoding=&quot;utf-8&quot;)\nif not text.strip():raise SystemExit(&quot;Source material must contain text&quot;)\np[&quot;state&quot;]=text\nPath(&quot;request.json&quot;).write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/systemone \\\n  -H &quot;Authorization: Bearer $AILOOT_API_KEY&quot; -H &#39;Content-Type: application/json&#39; \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - &lt;&lt;&#39;PY_RESULT&#39;\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(&quot;result.json&quot;).read_text()),ensure_ascii=False,indent=2))\nPY_RESULT\n</code></pre></div></div></div></section><section class=\"card-section\" data-card-section=\"results\"><h3 tabindex=\"-1\">Recibir y guardar resultados</h3><h4>Ailoot · System One</h4><p class=\"note-s\">json</p><div class=\"card-result-process\" data-all-results><h5>Conserva todos los resultados completados</h5><p class=\"note-s\">Conserva todas las respuestas, archivos y partes de contenido completos recibidos.</p><p class=\"note-s\">Conserva cada respuesta con el ID de pregunta proporcionado, su probabilidad y su leyenda; la fórmula de confianza que utiliza n requiere n&gt;1, sin establecer una regla de la API sobre el mínimo de opciones.</p></div><details class=\"card-about\" data-output-fields><summary>Campos de respuesta</summary><div class=\"tw\" data-card-table=\"output\"><table><thead><tr><th>Campo</th><th>Tipo</th></tr></thead><tbody><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">answers.&lt;id&gt;.type</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>string</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">answers.&lt;id&gt;.noul</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>number</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">answers.&lt;id&gt;.choice</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>string</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">answers.&lt;id&gt;.score</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>number</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">answers.&lt;id&gt;.confidence</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>number</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">answers.&lt;id&gt;.probabilities</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>object</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">answers.&lt;id&gt;.legend</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>object</td></tr><tr><th data-cell-label=\"Campo\" scope=\"row\"><span class=\"card-cell-label\">Campo</span><code class=\"card-field-name\">usage</code></th><td data-cell-label=\"Tipo\" data-field-type><span class=\"card-cell-label\">Tipo</span>object</td></tr></tbody></table></div></details><details class=\"card-about\" data-method-errors><summary>Errores y siguientes pasos</summary><div class=\"tw\" data-card-table=\"errors\"><table><thead><tr><th>Respuesta</th><th>Condición</th><th>Siguiente paso</th></tr></thead><tbody><tr><th data-cell-label=\"Respuesta\" scope=\"row\"><span class=\"card-cell-label\">Respuesta</span>400 · <code>invalid_request_error</code></th><td data-cell-label=\"Condición\"><span class=\"card-cell-label\">Condición</span>Campos obligatorios, representación del material o valor del parámetro no válidos</td><td data-cell-label=\"Siguiente paso\"><span class=\"card-cell-label\">Siguiente paso</span>Corrige los campos indicados antes de una nueva solicitud de creación.</td></tr></tbody></table></div></details></section><section class=\"card-section\" data-card-section=\"aliases\"><h3 tabindex=\"-1\">Alias</h3><h4>Alias del modelo</h4><p class=\"note-s\"><span data-model-alias-route=\"Core\"><b>Ailoot</b> <a href=\"#m=jev-latest&amp;route=Core&amp;caller=jev-latest&amp;fmt=systemone\"><code>jev-latest</code></a></span></p><h4>Alias de rutas de métodos</h4><p class=\"note-s\">Usa las rutas de método indicadas arriba.</p><h4>ID de modelo relacionados</h4><p class=\"note-s\"><a href=\"#m=jev-latest&amp;route=Core&amp;caller=jev-latest&amp;fmt=systemone\"><code>jev-latest</code></a></p></section></div>",
      "method_identity": {
        "effective_request_model_id": "jev-latest",
        "fmt": "systemone",
        "http": "POST",
        "path": "/v1/systemone",
        "request_model_id": "jev-latest",
        "route_label": "Core"
      },
      "method_key": "Core|systemone|/v1/systemone|jev-latest",
      "ordinal": 0,
      "rawMethod": {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": null,
        "contract": {
          "data": {
            "all_results": "Retain every answer by its supplied question ID, probability and legend; confidenceformulausingnrequiresn>1withoutassertinganAPIminchoicesrule.",
            "errors": [
              {
                "code": null,
                "condition": "Campos obligatorios, representación del material o valor del parámetro no válidos",
                "http_status": 400,
                "recovery": "Corrige los campos indicados antes de una nueva solicitud de creación.",
                "type": "invalid_request_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "mode": "exact retained published method"
            },
            "material_combinations": [
              {
                "mode": "noul",
                "required": [
                  "state",
                  "questions.<id>.type=noul"
                ]
              },
              {
                "mode": "choice",
                "required": [
                  "state",
                  "questions.<id>.type=choice",
                  "criteria object"
                ]
              },
              {
                "mode": "score",
                "required": [
                  "state",
                  "questions.<id>.type=score",
                  "nonemptycriteriaarray"
                ]
              }
            ],
            "operation_modes": [
              "noul",
              "choice",
              "score"
            ],
            "outputs": {
              "all_results": "Conserva cada respuesta con el ID de pregunta proporcionado, su probabilidad y su leyenda; la fórmula de confianza que utiliza n requiere n>1, sin establecer una regla de la API sobre el mínimo de opciones.",
              "family": "structured",
              "fields": [
                {
                  "description": null,
                  "name": "answers.<id>.type",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "answers.<id>.noul",
                  "type": "number"
                },
                {
                  "description": null,
                  "name": "answers.<id>.choice",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "answers.<id>.score",
                  "type": "number"
                },
                {
                  "description": null,
                  "name": "answers.<id>.confidence",
                  "type": "number"
                },
                {
                  "description": null,
                  "name": "answers.<id>.probabilities",
                  "type": "object"
                },
                {
                  "description": null,
                  "name": "answers.<id>.legend",
                  "type": "object"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "json"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "jev-latest"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "state",
                "required": true,
                "type": "string|object|array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "min_properties": 1,
                "name": "questions",
                "required": true,
                "type": "object"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "noul",
                  "choice",
                  "score"
                ],
                "enum_known": true,
                "name": "questions.<id>.type",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "questions.<id>.instructions",
                "required": false,
                "type": "string|object|array|null"
              },
              {
                "availability": "source_interface",
                "conditions": "noul: descripciones opcionales de true/false que admiten null; choice: objeto de criterios; score: lista de criterios no vacía",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "questions.<id>.criteria",
                "required": false,
                "type": "object|array|null"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  false,
                  null
                ],
                "enum_known": true,
                "name": "stream",
                "required": false,
                "type": "boolean|null"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "stream=true",
              "duplicateandcase-variedcanonicalkeys"
            ]
          },
          "hints": [
            "Las estructuras e ID de los métodos son exactos; la capacidad del proveedor y la admisión son conceptos distintos."
          ],
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": [
              "model",
              "state",
              "questions"
            ]
          },
          "lifecycle": {
            "mode": "exact retained published method"
          },
          "method": {
            "http": "POST",
            "path": "/v1/systemone"
          },
          "operation_modes": [
            "systemone"
          ],
          "output": {
            "family": [
              "structured"
            ],
            "format": "structured decisions JSON",
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": 64000,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 customer message}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"jev-latest\", \"state\": \"\", \"questions\": {\"is_urgent\": {\"type\": \"noul\", \"instructions\": \"Does the supplied customer message express urgency?\"}}}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"state\"]=text\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/systemone \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"result.json\").read_text()),ensure_ascii=False,indent=2))\nPY_RESULT\n",
            "label": "Classify your actual customer message",
            "language": "bash"
          }
        ],
        "family": "systemone",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "systemone",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": 0.084,
        "input": [
          "text"
        ],
        "label": "System One",
        "max_out": 0,
        "max_tool_calls": null,
        "out": 0,
        "output": [
          "structured"
        ],
        "path": "/v1/systemone",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 0.084,
                "amount_unit": "usd_per_million_tokens",
                "key": "in",
                "label": "Input",
                "side": "in"
              },
              {
                "amount": 0,
                "amount_unit": "usd_per_million_tokens",
                "key": "out",
                "label": "Output",
                "side": "out"
              }
            ]
          }
        ],
        "request_model_id": "jev-latest",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "token",
        "units": []
      }
    }
  ],
  "model_id": "jev-latest",
  "nativeProvenance": {
    "input_facts_canonical_sha256": "eb052a3146741a6e491e34f08abf66a0e166800463638cb84557b17336f01d11",
    "input_html_sha256": "bf04353f26436bacbeaece10101b4058b65a5fb2b4a8701b29a8fcd59e63e77c",
    "private_audit_sha256": "659a64365ef049764e020dffed8300752dafcade410281010038ae03a7659704",
    "role": "historical-normalized-input-audit-hashes",
    "schema": "ailoot-native-model-provenance-v2"
  },
  "page": {
    "canonical": "https://ailoot.ai/models/es/jev-latest/",
    "description": "Modelo de decisiones de TypeSafe: no redacta texto, sino que responde a preguntas tipadas sobre texto o JSON —selección de una opción, valoración en una escala o «sí/no» con probabilidades—. Es adecuado para enrutamiento, clasificación de consultas, moderación y puntuación; todas las preguntas de una solicitud se evalúan en paralelo.",
    "locale": "es",
    "md_url": "https://ailoot.ai/models/es/jev-latest/index.md",
    "title": "jev-latest — Ailoot",
    "url": "https://ailoot.ai/models/es/jev-latest/"
  },
  "rawModel": {
    "about": "Jev es el modelo insignia de TypeSafe y el primero de una nueva categoría, **System One**. No redacta texto: toma decisiones rápidas que un programa puede utilizar directamente. Envías un **estado** (`state`) —texto o JSON— y un conjunto de **preguntas**, y recibes valores tipados con probabilidades calibradas.\n\nLos modelos de lenguaje escriben palabras para personas; según TypeSafe, Jev se parece más al código: responde directamente en el formato que el código necesita, a gran velocidad y sin ningún valor fuera de las opciones definidas. Está concebida para ofrecer respuestas estables en solicitudes repetidas.\n\n### En qué se diferencia System One de un modelo de lenguaje\n\n- **No genera.** Jev no redacta respuestas para el usuario, no escribe código ni explica su razonamiento. Tú defines las respuestas posibles mediante uno de los tres tipos de preguntas.\n- **Está entrenada para tomar decisiones calibradas.** TypeSafe entrena el modelo con RLCD (Reinforcement Learning for Calibrated Decisions): las probabilidades se ajustan a los resultados reales y reflejan la incertidumbre. De muchas respuestas con una probabilidad de 0,8, aproximadamente el 80% deberían ser correctas. La calibración es una propiedad de una muestra amplia, no una garantía de que una respuesta concreta sea correcta.\n- **Tiene otro objetivo de entrenamiento.** Los modelos de chat se entrenan para agradar a las personas (RLHF) y, según las observaciones de TypeSafe, esto favorece la complacencia y los errores expresados con seguridad. Diogo Almeida, uno de los coautores de RLHF, es cofundador de TypeSafe.\n\nEl nombre alude al «Sistema 1» del libro de Daniel Kahneman «Pensar rápido, pensar despacio»: el juicio intuitivo y rápido frente al pensamiento lento y deliberado del «Sistema 2». Jev está diseñada para emitir juicios rápidos y concretos.\n\n### Tres tipos de preguntas\n\nCada pregunta pide un juicio sobre el estado; la respuesta es un valor que el código compara con un umbral, utiliza para ordenar o transmite al siguiente paso.\n\n1. **Choice — selección de una opción.** El departamento para una consulta, la categoría de un producto o el lenguaje de un fragmento de código. Las opciones son un diccionario «opción → descripción», con hasta 255 entradas. La respuesta contiene la opción elegida, `choice`, las probabilidades `probabilities` de todas las opciones (que suman 1) y la confianza `confidence`. Si la lista puede no cubrir todos los casos, añade «otro» o «ninguna de las anteriores».\n2. **Score — valoración en una escala.** Una posición en una escala ordenada que tú describes: la gravedad de un error, la irritación de un cliente o un nivel de habilidad. Tiene entre 2 y 10 niveles, de menor a mayor; el modelo evalúa cada nivel por separado, sin ver su número ni los niveles vecinos. La respuesta contiene `score` (la suma de los números de los niveles multiplicados por sus probabilidades, de modo que el valor puede quedar entre niveles), `legend` con sus descripciones, `probabilities` y `confidence`.\n3. **Noul — sí o no.** Determina si una afirmación es verdadera. La respuesta `noul` es la probabilidad de «sí», entre 0 y 1: cerca de 1 es un «sí» seguro, cerca de 0 es un «no» seguro y cerca de 0,5 indica duda. No hay un `confidence` independiente: un solo número describe toda la respuesta. El parámetro opcional `criteria` precisa qué se considera «sí» y qué se considera «no».\n\nCómo elegir: para opciones conocidas sin orden, choice; para grados de un espectro, score; para un «sí/no» puro en el que importa la probabilidad, noul. Noul 0,5 indica las mismas posibilidades de «sí» y «no», no un «nivel medio»: el grado se mide con score. Si dos tipos encajan, elige aquel con el que el código pueda actuar directamente: choice para ramas, score para umbrales y noul para `if`.\n\nLos tipos se pueden combinar en una misma solicitud. La respuesta siempre queda limitada a tus opciones y es independiente de las demás preguntas: puedes añadir o quitar preguntas sin cambiar las otras respuestas.\n\n### Estado\n\nEl estado es lo que el modelo evalúa: un mensaje de un cliente, un fragmento de documento, un registro de una base de datos o el estado de tu aplicación.\n\n- **Cadena** — cuando hay un único texto: un mensaje, un artículo o un fragmento.\n- **Objeto** — campos con nombre, registros relacionados o el estado de una aplicación. TypeSafe recomienda objetos para la mayoría de las solicitudes: cada parte tiene un nombre claro.\n- **Array** — una secuencia de mensajes o registros.\n\nPrepáralo como materiales para especialistas: reúne la conversación, el pedido y las normas de devolución si la decisión exige compararlos. Coloca el contenido en el estado y los juicios en las preguntas. Si una pregunta se refiere a una parte concreta del estado, indica su ruta entre comillas invertidas, por ejemplo `ticket.messages[0].text`.\n\n### Cómo formular las preguntas\n\n- **Un juicio rápido por pregunta.** Una buena pregunta es aquella que una persona informada y con el contexto necesario respondería en un segundo: «¿Hay urgencia en el mensaje?». «Analiza el mensaje y decide qué hacer» ya requiere razonamiento lento y debe dividirse en preguntas sencillas.\n- **La pregunta completa va en `instructions`.** La clave de la pregunta, por ejemplo `refund_requested`, solo la necesita tu código y no se envía al modelo.\n- **Todas las preguntas sobre un mismo estado, en una sola solicitud.** El modelo las evalúa en paralelo: según TypeSafe, las preguntas adicionales apenas aumentan el tiempo de respuesta y solo cuestan los tokens que utilizan. Una pregunta «por si acaso» sale casi gratis: el código decidirá qué respuestas necesita.\n- **Los juicios complejos, por partes.** En vez de «evalúa la solicitud de la startup», pregunta por separado sobre el tamaño del mercado, la viabilidad técnica y las diferencias respecto a la competencia, y calcula el resultado en el código con ponderaciones. Si cambian las prioridades, cambia las ponderaciones sin reformular la pregunta.\n- **Las preguntas dependientes, en una segunda solicitud.** Las respuestas de una solicitud no sirven de contexto entre sí. Una segunda solicitud solo es necesaria si no puede construirse sin la primera respuesta: hay que cargar datos o elegir las opciones de la siguiente pregunta.\n- **Las preguntas largas, como objetos.** `instructions` y `criteria` suelen ser cadenas, pero también pueden ser objetos o arrays: la pregunta en un campo y los datos en otros. Así resulta cómodo contrastar un currículo con registros de una base de datos mediante una sola pregunta.\n\n### Confianza\n\nEn choice y score, `confidence` va de 0 a 1 e indica hasta qué punto la probabilidad se concentra en una respuesta: 1 significa que toda se concentra en una opción y 0, que se reparte por igual entre todas. En score, un nivel vecino reduce la confianza menos que uno distante. En noul, la confianza es el propio valor: cuanto más se aleja de 0,5, más firme es la respuesta.\n\nTypeSafe recomienda tres rangos:\n\n1. **Confianza alta** — actúa automáticamente.\n2. **Confianza media** — actúa con cautela; por ejemplo, pide confirmación al usuario.\n3. **Confianza baja** — deriva el caso a una persona, aclara la solicitud o utiliza una vía alternativa, como un modelo más potente con razonamiento.\n\nCuanto mayor sea el coste de un error, más exigente debe ser el umbral: debe ser más alto para acciones irreversibles que para lectura. La respuesta indica qué elegir y la confianza, si conviene actuar. Ajusta los umbrales con tus propios datos, comparando confianza y exactitud.\n\n### Cómo construir un sistema con Jev\n\nJev está concebida para programas en los que el código controla el proceso y el modelo responde a preguntas semánticas concretas, en lugar de agentes que eligen por sí mismos el siguiente paso y pueden desviarse en cada ciclo. Ocho pasos de diseño según TypeSafe:\n\n1. Todo lo que se pueda hacer con código, hazlo con código: es fiable y económico.\n2. Incluye en el estado solo lo que necesitan las preguntas actuales; los datos recientes deben proceder de tu propia base de conocimientos, no de la memoria del modelo.\n3. Estructura el estado con JSON anidado y, cuando reduzca la ambigüedad, indica en la pregunta la ruta al campo necesario entre comillas invertidas.\n4. Formula preguntas lo más concretas y específicas posible: según TypeSafe, quizá sea la regla principal; una pregunta amplia esconde varios juicios en una sola respuesta.\n5. Estructura las preguntas: la pregunta en sí debe ser breve; coloca explicaciones, ejemplos y valores de tu base en campos vecinos del objeto `instructions` o `criteria`, en lugar de una única cadena larga.\n6. Reúne muchas preguntas independientes sobre un mismo estado en una solicitud: obtendrás más utilidad por cada dólar.\n7. Combina las respuestas en el código mediante reglas, una suma ponderada o como características de un modelo clásico de aprendizaje automático.\n8. Bifurca según la confianza: deriva los casos inciertos a una persona o a un modelo con razonamiento.\n\nJev no es un chat ni un modelo de autocompletado de código; no puede sustituir al modelo de lenguaje en un agente de programación. En cambio, un agente puede escribir el código que llame a Jev cuando necesites una respuesta rápida y calibrada.\n\n### Aplicaciones\n\n- **Automatización en segundo plano** — decisiones que se ejecutan un millón de veces sin una persona al lado.\n- **Tiempo real** — según TypeSafe, la mayoría de las solicitudes se resuelven en unos 100 ms: suficiente para procesamiento sobre la marcha e interfaces.\n- **Grandes volúmenes de datos** — búsqueda en corpus enormes, etiquetado de registros de trabajo de agentes y características para predicciones.\n- **Comprobación de otros modelos** — solicitudes, extracciones, razonamientos y llamadas a herramientas: elusión de restricciones, errores de cita e invenciones.\n- **Búsqueda y clasificación** — relevancia del par «consulta — candidato», reclasificación y selección de contexto.\n- **Enrutamiento por intención** — qué quiere el usuario y qué lo debe atender: lógica sencilla, un modelo especializado o una persona; el tema, la complejidad y el riesgo determinan a qué modelo de lenguaje se envía la solicitud.\n- **Comprobaciones de seguridad** — entrada, salida y llamadas a herramientas de un modelo de lenguaje: instrucciones inyectadas, incumplimiento de normas y filtración de datos personales.\n- **Soporte** — tema e intención de la consulta, urgencia, irritación, riesgo de abandono, solicitud de devolución y cola.\n- **Moderación** — según las normas de tu plataforma: toxicidad, acoso, spam, fraude, consejos peligrosos y datos personales; según la gravedad y la confianza, permitir, advertir, revisar o bloquear.\n- **Sectores** — siniestros, investigaciones financieras y KYC, contratos y publicidad, fichas de productos, selección de personal, oportunidades comerciales, juegos, riesgos, previsión de demanda, grafos de conocimiento, revisiones científicas y comprobaciones semánticas de código en CI.\n\n### Características\n\n- **`jev-latest`** — alias de la última versión estable, actualmente Jev 1.13; la versión que ha respondido aparece en el campo `model`, por ejemplo `jev-1.13.0`. Cuando llega una versión nueva, el alias pasa a ella y las respuestas pueden cambiar sin que hagas modificaciones; vigila este campo si has ajustado los umbrales a una versión.\n- **Contexto** — 64K tokens por solicitud: el estado y todas las preguntas juntos; el estado junto con la pregunta más larga puede ocupar hasta 32K. El modelo lee el estado una sola vez y evalúa todas las preguntas en paralelo con respecto a él.\n- **Entrada** — solo texto: una cadena, un objeto JSON o un array de textos. Todavía no admite imágenes, audio ni vídeo; conviértelos antes en texto.\n- **Idioma** — el principal idioma de entrenamiento es el inglés y actualmente ofrece la mayor exactitud en él. El modelo acepta otros idiomas, incluidos chino, japonés y coreano, pero con menor exactitud; compruébalo con tus propios datos.\n- **Precios y facturación en Ailoot API** — las condiciones dependen del método seleccionado y se indican en su ficha.\n- **Configuración** — Jev no se ajusta con datos del cliente: tus materiales van en `state` y las reglas del dominio, en `instructions` y `criteria`.\n- **Datos** — TypeSafe afirma que Jev no se entrena con las solicitudes ni las respuestas de los clientes.\n\n### Limitaciones conocidas de Jev 1.13\n\nTypeSafe enumera abiertamente las limitaciones de la versión actual y promete corregir muchas de ellas en las siguientes. El modelo es rápido, está calibrado y emite buenos juicios de sentido común, pero:\n\n1. **Lee literalmente.** Responde a la pregunta escrita, no a la implícita: interpreta de forma literal las salvedades, las negaciones y las condiciones no expresadas. Escribe la condición exacta y los casos límite en `criteria`; si no se puede evitar una interpretación, divídela en dos preguntas literales.\n2. **No es una calculadora.** Contar caracteres, repeticiones y elementos de una lista no es fiable, y el error aumenta con el tamaño; haz los cálculos en el código, con una pregunta por candidato. El modelo entiende peor los colores en hex o RGB que sus nombres. `score` sirve para un umbral, pero no para un número exacto entre niveles.\n3. **Fechas y horas.** No determina de forma fiable qué fecha es anterior, cuánto tiempo hay entre dos fechas o si una fecha cae en un periodo, sobre todo con formatos mezclados y fechas relativas. Extrae las partes de la fecha mediante choice (con una opción «no indicado») y compáralas en el código.\n4. **Formulaciones indirectas.** Las dobles negaciones y las preguntas sobre una propiedad de otra propiedad reducen la exactitud. Escribe de forma directa y llama a cada parte del estado por su nombre.\n5. **Información superflua en el estado.** El texto ajeno a la tarea reduce la exactitud. Fíltralo en el código y, si no puedes, descarta lo irrelevante con preguntas noul.\n6. **Texto adversarial.** Por defecto, el modelo no espera trampas en el estado: una instrucción inyectada o un texto que discuta su propia clasificación puede cambiar la respuesta. Escribe criterios precisos y comprueba los casos límite antes de ponerlo en funcionamiento.\n7. **Contradicciones.** Si `instructions` y `criteria` piden cosas distintas —por ejemplo, si en noul «sí» se describe como «no»—, la exactitud disminuye. Los criterios son una continuación de la pregunta.\n8. **Orden de las opciones.** A veces el modelo tiende a la primera opción de choice. Cambia su orden y comprueba que la respuesta se mantiene.\n9. **Generación.** Jev no está entrenada para redactar texto. Para extraer datos, busca candidatos con una expresión regular o un modelo generativo y deja que Jev elija el correcto mediante choice.",
    "alias_of": null,
    "aliases": [],
    "author": "TypeSafe",
    "ctx": 64000,
    "formats": [
      "systemone"
    ],
    "guide": "/docs/api/systemone/",
    "id": "jev-latest",
    "input": [
      "text"
    ],
    "kind": "decision",
    "max_out": null,
    "methods": [
      {
        "cache_read": null,
        "cache_write": null,
        "cache_write_1h": null,
        "cache_write_5m": null,
        "conditional_meter": null,
        "contract": {
          "data": {
            "all_results": "Retain every answer by its supplied question ID, probability and legend; confidenceformulausingnrequiresn>1withoutassertinganAPIminchoicesrule.",
            "errors": [
              {
                "code": null,
                "condition": "Campos obligatorios, representación del material o valor del parámetro no válidos",
                "http_status": 400,
                "recovery": "Corrige los campos indicados antes de una nueva solicitud de creación.",
                "type": "invalid_request_error"
              }
            ],
            "hints": [],
            "ignored_fields": [],
            "lifecycle": {
              "mode": "exact retained published method"
            },
            "material_combinations": [
              {
                "mode": "noul",
                "required": [
                  "state",
                  "questions.<id>.type=noul"
                ]
              },
              {
                "mode": "choice",
                "required": [
                  "state",
                  "questions.<id>.type=choice",
                  "criteria object"
                ]
              },
              {
                "mode": "score",
                "required": [
                  "state",
                  "questions.<id>.type=score",
                  "nonemptycriteriaarray"
                ]
              }
            ],
            "operation_modes": [
              "noul",
              "choice",
              "score"
            ],
            "outputs": {
              "all_results": "Conserva cada respuesta con el ID de pregunta proporcionado, su probabilidad y su leyenda; la fórmula de confianza que utiliza n requiere n>1, sin establecer una regla de la API sobre el mínimo de opciones.",
              "family": "structured",
              "fields": [
                {
                  "description": null,
                  "name": "answers.<id>.type",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "answers.<id>.noul",
                  "type": "number"
                },
                {
                  "description": null,
                  "name": "answers.<id>.choice",
                  "type": "string"
                },
                {
                  "description": null,
                  "name": "answers.<id>.score",
                  "type": "number"
                },
                {
                  "description": null,
                  "name": "answers.<id>.confidence",
                  "type": "number"
                },
                {
                  "description": null,
                  "name": "answers.<id>.probabilities",
                  "type": "object"
                },
                {
                  "description": null,
                  "name": "answers.<id>.legend",
                  "type": "object"
                },
                {
                  "description": null,
                  "name": "usage",
                  "type": "object"
                }
              ],
              "format": "json"
            },
            "parameters": [
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "jev-latest"
                ],
                "enum_known": true,
                "name": "model",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "state",
                "required": true,
                "type": "string|object|array"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "min_properties": 1,
                "name": "questions",
                "required": true,
                "type": "object"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  "noul",
                  "choice",
                  "score"
                ],
                "enum_known": true,
                "name": "questions.<id>.type",
                "required": true,
                "type": "string"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "questions.<id>.instructions",
                "required": false,
                "type": "string|object|array|null"
              },
              {
                "availability": "source_interface",
                "conditions": "noul: descripciones opcionales de true/false que admiten null; choice: objeto de criterios; score: lista de criterios no vacía",
                "default": null,
                "default_known": false,
                "enum": null,
                "enum_known": false,
                "name": "questions.<id>.criteria",
                "required": false,
                "type": "object|array|null"
              },
              {
                "availability": "source_interface",
                "default": null,
                "default_known": false,
                "enum": [
                  false,
                  null
                ],
                "enum_known": true,
                "name": "stream",
                "required": false,
                "type": "boolean|null"
              }
            ],
            "profile_binding": "Exact existing Ailoot model and method; interface constraints below do not assert provider qualification.",
            "unsupported": [
              "stream=true",
              "duplicateandcase-variedcanonicalkeys"
            ]
          },
          "hints": [
            "Las estructuras e ID de los métodos son exactos; la capacidad del proveedor y la admisión son conceptos distintos."
          ],
          "input": {
            "content_type": "application/json",
            "material_types": [
              "text"
            ],
            "optional_controls": null,
            "required": [
              "model",
              "state",
              "questions"
            ]
          },
          "lifecycle": {
            "mode": "exact retained published method"
          },
          "method": {
            "http": "POST",
            "path": "/v1/systemone"
          },
          "operation_modes": [
            "systemone"
          ],
          "output": {
            "family": [
              "structured"
            ],
            "format": "structured decisions JSON",
            "multioutputs": "retain every actual response output"
          }
        },
        "ctx": 64000,
        "examples": [
          {
            "code": "set -eu\n: \"${AILOOT_API_KEY:?Set your Ailoot API key}\"\n: \"${AILOOT_TEXT_FILE:?Set your actual UTF-8 customer message}\"\nexport AILOOT_TEXT_FILE\npython3 - <<'PY_REQUEST'\nimport json,os\nfrom pathlib import Path\np=json.loads('{\"model\": \"jev-latest\", \"state\": \"\", \"questions\": {\"is_urgent\": {\"type\": \"noul\", \"instructions\": \"Does the supplied customer message express urgency?\"}}}')\nf=Path(os.environ[\"AILOOT_TEXT_FILE\"])\nif not f.is_file():raise SystemExit(\"Choose your actual UTF-8 source material\")\ntext=f.read_text(encoding=\"utf-8\")\nif not text.strip():raise SystemExit(\"Source material must contain text\")\np[\"state\"]=text\nPath(\"request.json\").write_text(json.dumps(p,ensure_ascii=False))\nPY_REQUEST\ncurl --fail-with-body --silent --show-error https://api.ailoot.ai/v1/systemone \\\n  -H \"Authorization: Bearer $AILOOT_API_KEY\" -H 'Content-Type: application/json' \\\n  --data-binary @request.json -D response-headers.txt -o result.json\npython3 - <<'PY_RESULT'\nimport json\nfrom pathlib import Path\nprint(json.dumps(json.loads(Path(\"result.json\").read_text()),ensure_ascii=False,indent=2))\nPY_RESULT\n",
            "label": "Classify your actual customer message",
            "language": "bash"
          }
        ],
        "family": "systemone",
        "fast_multiplier": null,
        "flex_multiplier": null,
        "fmt": "systemone",
        "http": "POST",
        "img_in": null,
        "img_out": null,
        "in": 0.084,
        "input": [
          "text"
        ],
        "label": "System One",
        "max_out": 0,
        "max_tool_calls": null,
        "out": 0,
        "output": [
          "structured"
        ],
        "path": "/v1/systemone",
        "pricing_profiles": [
          {
            "dimensions": {},
            "label": "Core",
            "units": [
              {
                "amount": 0.084,
                "amount_unit": "usd_per_million_tokens",
                "key": "in",
                "label": "Input",
                "side": "in"
              },
              {
                "amount": 0,
                "amount_unit": "usd_per_million_tokens",
                "key": "out",
                "label": "Output",
                "side": "out"
              }
            ]
          }
        ],
        "request_model_id": "jev-latest",
        "route_label": "Core",
        "status_reads": [],
        "tiers": [],
        "tool_prices": null,
        "unit": "token",
        "units": []
      }
    ],
    "model_aliases": [
      {
        "canonical_model_id": "jev-latest",
        "request_model_id": "jev-latest",
        "route_label": "Core"
      }
    ],
    "name": "jev-latest",
    "price": {
      "in": 0.084,
      "in_label": null,
      "out": 0,
      "out_label": null,
      "sort_in": 0.084,
      "sort_out": 0,
      "varies": false
    },
    "short": "Modelo de decisiones de TypeSafe: no redacta texto, sino que responde a preguntas tipadas sobre texto o JSON —selección de una opción, valoración en una escala o «sí/no» con probabilidades—. Es adecuado para enrutamiento, clasificación de consultas, moderación y puntuación; todas las preguntas de una solicitud se evalúan en paralelo."
  },
  "renderer_schema": {
    "method_order": "Original DTO methods order; every exact route/format/path/caller survives.",
    "prices": "Original public DTO fields and original native display HTML; no flattened or normalized offers."
  },
  "representation": "exact-public-dto-and-native-renderer-html",
  "representationNotes": {
    "current_reference": {
      "about_json_pointer": "/aboutHtml",
      "methods": [
        {
          "contract_json_pointer": "/methods/0/rawMethod/contract",
          "html_json_pointer": "/methods/0/html",
          "method_ordinal": 0
        }
      ],
      "role": "current-semantic-reference"
    },
    "raw_input": {
      "examples_role": "historical-input-not-current-ready-examples",
      "json_pointers": [
        "/rawModel",
        "/methods/0/rawMethod"
      ],
      "role": "historical-owner-input"
    },
    "schema": "ailoot-native-model-representations-v1"
  },
  "schema": "ailoot-static-model-facts-v1",
  "schema_version": 1,
  "shortText": "Modelo de decisiones de TypeSafe: no redacta texto, sino que responde a preguntas tipadas sobre texto o JSON —selección de una opción, valoración en una escala o «sí/no» con probabilidades—. Es adecuado para enrutamiento, clasificación de consultas, moderación y puntuación; todas las preguntas de una solicitud se evalúan en paralelo.",
  "source": {
    "audit_sha256": "2e00086bcbfc28e64d0cebe97aa47c17d8d5618963027f8ffb9dc6123d7d25b1",
    "bridge_map_sha256": "1125275768b9636fc8461bc7da5061239a81ddfe508e2557843ca42c58ab0036",
    "raw_model_json_sha256": "f8150017de5871ff849a4a991623631970d1e1385b5bd1b2001c77f00988438f",
    "renderer_sha256": "b6d488b4bdee68568e5b17d2d4871b2ba1885e1032091b635a7a58ad2ca224e7"
  },
  "sourceRevision": "9c6e9f4465592476adb197bc878ccaa68073d0af7543ad190a45623e1dbc8b17"
}
