{"id":34986,"date":"2026-09-20T23:19:35","date_gmt":"2026-09-20T21:19:35","guid":{"rendered":"https:\/\/www.angulararchitects.io\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/"},"modified":"2026-09-20T23:30:36","modified_gmt":"2026-09-20T21:30:36","slug":"using-jev-for-agentic-ui-just-a-trend-or-a-game-changer","status":"publish","type":"post","link":"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/","title":{"rendered":"Using Jev for Agentic UI: Just a Trend or a Game Changer?"},"content":{"rendered":"<p><em>Questionnaires instead of prompts: what a System One model brings to chat assistants and generated dashboards<\/em><\/p>\n<p>Agentic UI puts a model between the user and the application. Every message leads to at least one model call that picks a tool, fills in its arguments, and decides which widget to show. With an LLM, this call often takes seconds, and it costs money every time. For a user interface, both hurt.<\/p>\n<p>Jev takes a different route. It is the first model of a class that its vendor TypeSafe calls System One. Such a model does not write text. It answers predefined questions with predefined options, and it needs about 100 milliseconds for that. I was lucky enough to get an early preview. In this article, I summarize what you can expect from Jev for Agentic UI.<\/p>\n<p>\ud83d\udcc2 <a href=\"https:\/\/github.com\/manfredsteyer\/jev-demo\">Source code<\/a><\/p>\n<p>The repository has two branches. The branch <a href=\"https:\/\/github.com\/manfredsteyer\/jev-demo\/tree\/main\"><code>main<\/code><\/a> combines Angular, CopilotKit, AG-UI, and Jev. The branch <a href=\"https:\/\/github.com\/manfredsteyer\/jev-demo\/tree\/console-chat\"><code>console-chat<\/code><\/a> only uses Jev on the console and gives a quick overview.<\/p>\n<h2>What Is Jev?<\/h2>\n<p>An LLM receives a prompt and generates text token by token. If an application needs a decision, it has to ask for structured output, parse it, and validate it. Jev skips these steps. It receives a <em>state<\/em>, for instance the conversation so far, and a set of typed <em>questions<\/em>. For each question, it returns one of the answers you defined, together with a probability for every option.<\/p>\n<p>A good mental model is a questionnaire. You hand the model a form along with the text it should judge. The model ticks one box per question. It cannot write anything in the margins. Your code reads the ticked boxes and decides what happens next: call a tool, show a widget, or ask the user a follow-up question.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/09\/questionnaire.png\" alt=\"A questionnaire on a clipboard. A note shows the user message &quot;Did I already book my flight to HAM?&quot;. Three questions are ticked: the tool is bookings, the departure city is NOT_DEFINED, and the destination is Hamburg.\" \/><\/p>\n<p>Two properties follow from this design. First, the answers are typed. What reaches your code is always a value your code expects. Second, all questions of a request are answered in parallel and independently of one another. According to TypeSafe, adding questions barely changes the response time.<\/p>\n<h2>The Example Application<\/h2>\n<p>The example is a small flight assistant with two views. In the chat, users ask for flights or for their bookings. Jev picks the tool and its arguments. The server runs the tool and streams the result via AG-UI. On the client side, CopilotKit displays each flight as a widget:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/09\/chat.png\" alt=\"Chat view: the user asks &quot;Did I book HAM yet?&quot;. The assistant calls the tool findBookings and shows the booked flight from Graz to Hamburg as a widget.\" \/><\/p>\n<p>The dashboard goes one step further. Users describe the tiles they want to see. Jev answers a larger questionnaire about this description: which tiles are requested, for which route, with how many entries, and in which order. The server then calls the needed tools and sends the dashboard to the client as A2UI:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/09\/dashboard.png\" alt=\"Dashboard view: a text description leads to six tiles with flight tables, delay charts, rental cars, and hotels. A status line shows that Jev needed 162 ms of processing for the request.\" \/><\/p>\n<h2>Getting Started<\/h2>\n<p>The SDK comes via npm:<\/p>\n<pre><code class=\"language-bash\">npm install @typesafe-ai\/sdk<\/code><\/pre>\n<p>TypeSafe also provides a skill that teaches coding agents the question types, patterns, and best practices. For Claude Code, it is installed as a plugin. For other agents, the <code>skills<\/code> CLI does the job:<\/p>\n<pre><code class=\"language-bash\"># Claude Code\nclaude plugin marketplace add typesafe-ai\/skills\nclaude plugin install typesafe@typesafe-ai\n\n# Other agents\nnpx skills add typesafe-ai\/skills --skill typesafe-ai<\/code><\/pre>\n<h3>Defining the Questionnaire<\/h3>\n<p>The questionnaire for our chat consists of three questions. The first one selects the tool. The other two determine its arguments:<\/p>\n<pre><code class=\"language-ts\">import { choice } from &#039;@typesafe-ai\/sdk&#039;;\n\n[...]\n\nconst CITIES = {\n  &#039;Berlin&#039;: null, &#039;Bremen&#039;: null, &#039;Dresden&#039;: null, &#039;Frankfurt&#039;: null,\n  &#039;Graz&#039;: null, &#039;Hamburg&#039;: null, &#039;Innsbruck&#039;: null, &#039;Linz&#039;: null,\n  &#039;London&#039;: null, &#039;M\u00fcnchen&#039;: null, &#039;Paris&#039;: null, &#039;Rome&#039;: null,\n  &#039;Salzburg&#039;: null, &#039;Stuttgart&#039;: null, &#039;Wien&#039;: null, &#039;Z\u00fcrich&#039;: null,\n} as const;\n\nconst CITY_OPTIONS = {\n  ...CITIES,\n  &#039;NOT_DEFINED&#039;: &#039;No place is named for this end of the journey.&#039;,\n  &#039;NOT_SUPPORTED&#039;: &#039;A place is named, but it is not one of the cities listed here.&#039;,\n} as const;\n\nconst CITY_NAMES = Object.keys(CITIES);\n\nconst QUESTIONS = {\n  tool: choice(\n    &#039;A traveller writes to an assistant that searches flights and lists the flights &#039; +\n      &#039;they have booked. <code>conversation<\/code> is the exchange so far; the last entry is the &#039; +\n      &#039;new message. What do they want now?&#039;,\n    {\n      flights: &#039;To travel somewhere, or to see connections between two places.&#039;,\n      bookings: &#039;To see the flights they have already booked: their own reservations.&#039;,\n      none:\n        &#039;Neither: a greeting, a thank-you, or something this assistant cannot do, &#039; +\n        &#039;such as hotels or trains.&#039;,\n    },\n  ),\n\n  from: choice(\n    &#039;Which city does the traveller now name as the start of the journey, the place departed &#039; +\n      &#039;from? The last entry of <code>conversation<\/code> is the new message; earlier entries count only &#039; +\n      &#039;when the new message builds on them, as a return flight does.&#039;,\n    CITY_OPTIONS,\n  ),\n\n  to: choice(\n    &#039;Which city does the traveller now name as the end of the journey, the destination? &#039; +\n      &#039;The last entry of <code>conversation<\/code> is the new message; earlier entries count only when &#039; +\n      &#039;the new message builds on them, as a return flight does.&#039;,\n    CITY_OPTIONS,\n  ),\n};<\/code><\/pre>\n<p>Each question is a <code>choice<\/code>. It takes the question text and an object with the possible answers. The keys are the options, and the values describe them. If a key speaks for itself, as the city names do, <code>null<\/code> is enough. The name <code>conversation<\/code> in the question texts points to the property of the same name in the state that we pass along later.<\/p>\n<p>The possible answers must be defined up front. This is why the two city questions get two additional options. <code>NOT_DEFINED<\/code> covers messages that name no city. <code>NOT_SUPPORTED<\/code> covers cities the airline does not serve. Without these options, the model would have to tick one of the 16 cities even when the message names none of them.<\/p>\n<p>Currently, a question can have up to 255 options. Larger sets call for some creativity. I come back to this at the end of the article.<\/p>\n<h3>Further Question Types<\/h3>\n<p>Besides <code>choice<\/code>, there are two further question types:<\/p>\n<ul>\n<li><code>noul<\/code> asks a yes\/no question and returns the probability that the answer is yes.<\/li>\n<li><code>score<\/code> rates the state along ordered levels that you describe yourself, for instance the urgency of a request from &quot;can wait&quot; to &quot;act now&quot;. The result can also lie between two levels.<\/li>\n<\/ul>\n<p>The dashboard uses one <code>noul<\/code> per tile type to find out which tiles the description asks for:<\/p>\n<pre><code class=\"language-ts\">import { noul } from &#039;@typesafe-ai\/sdk&#039;;\n\n[...]\n\nconst QUESTIONS = {\n  hotels: noul(<code>Do they ask for hotels?<\/code>),\n  [...]\n};<\/code><\/pre>\n<h3>Asking Jev<\/h3>\n<p>One call sends the state together with all questions:<\/p>\n<pre><code class=\"language-ts\">import { TypeSafeClient } from &#039;@typesafe-ai\/sdk&#039;;\n\n[...]\n\nconst client = new TypeSafeClient();\nconst state = { conversation };\nconst result = await client.systemOne({ state, questions: QUESTIONS });<\/code><\/pre>\n<p>The client expects the API key in the environment variable <code>TYPESAFE_API_KEY<\/code>. As this key has to stay secret, the call belongs on the server.<\/p>\n<p>The <code>state<\/code> can be any JSON structure. Here, it only contains the conversation, an array with the messages of the user and the assistant. This history allows users to refer to the flight that was just discussed. If someone looks for flights from Graz to Hamburg and then asks for the return flight, it is clear what is meant: Hamburg becomes the start and Graz the destination. The question texts shown above prepare Jev for this case. They state that earlier entries only count when the new message builds on them.<\/p>\n<p><div style=\"\nmargin: 8px 0;\npadding: 22px;\nborder: 1px solid #e5e7eb;\nborder-radius: 14px;\nbackground: #f8fafc;\n\">NOTE<\/p>\n<h3 style=\"margin-top:0\">Agentic UI with Angular<\/h3>\n<p>If you don\u2019t just want to connect an agent but embed Agentic UI into a scalable architecture:<br \/>\nIn my book Agentic UI with Angular, I cover the underlying patterns and trade-offs in depth.<\/p>\n<p><a href=\"https:\/\/agentic-angular.com\/\"><img decoding=\"async\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/04\/cover.png\" width=\"400\" alt=\"Cover of the eBook Agentic UI with Angular\" style=\"cursor:pointer !important\"><\/a><\/p>\n<p><a style=\"cursor:pointer !important\" href=\"https:\/\/agentic-angular.com\/\">More about the eBook \u2192<\/a>\n<\/div>\n<\/p>\n<h3>Reading the Result<\/h3>\n<p>For the question <em>Did I already book my flight to HAM?<\/em>, Jev returned the following result:<\/p>\n<pre><code class=\"language-json\">{\n  &quot;model&quot;: &quot;jev-1.13.0&quot;,\n  &quot;answers&quot;: {\n    &quot;tool&quot;: {\n      &quot;type&quot;: &quot;choice&quot;,\n      &quot;choice&quot;: &quot;bookings&quot;,\n      &quot;confidence&quot;: 0.99,\n      &quot;probabilities&quot;: {\n        &quot;flights&quot;: 0,\n        &quot;none&quot;: 0,\n        &quot;bookings&quot;: 1\n      }\n    },\n    &quot;from&quot;: {\n      &quot;type&quot;: &quot;choice&quot;,\n      &quot;choice&quot;: &quot;NOT_DEFINED&quot;,\n      &quot;confidence&quot;: 0.92,\n      &quot;probabilities&quot;: {\n        &quot;Paris&quot;: 0,\n        &quot;Salzburg&quot;: 0,\n        [...]\n        &quot;NOT_DEFINED&quot;: 0.93,\n        [...]\n      }\n    },\n    &quot;to&quot;: {\n      &quot;type&quot;: &quot;choice&quot;,\n      &quot;choice&quot;: &quot;Hamburg&quot;,\n      &quot;confidence&quot;: 0.99,\n      &quot;probabilities&quot;: {\n        [...]\n        &quot;Hamburg&quot;: 1,\n        &quot;NOT_SUPPORTED&quot;: 0,\n        [...]\n      }\n    }\n  },\n  &quot;usage&quot;: {\n    &quot;input_tokens&quot;: 891,\n    &quot;output_tokens&quot;: 365\n  }\n}<\/code><\/pre>\n<p>The <code>answers<\/code> object mirrors the questionnaire with one entry per question. Each entry contains three pieces of information:<\/p>\n<ul>\n<li><code>choice<\/code> is the selected option.<\/li>\n<li><code>probabilities<\/code> holds a value for every option.<\/li>\n<li><code>confidence<\/code> is a number between 0 and 1. It summarizes how clearly one option stands out from the others.<\/li>\n<\/ul>\n<p>In this example, Jev selects the tool <code>bookings<\/code> and recognizes the airport code HAM as Hamburg. The message names no departure city, so <code>from<\/code> results in <code>NOT_DEFINED<\/code>. With these answers, the code calls the bookings tool and filters for flights to Hamburg.<\/p>\n<p>The confidence is useful for the control flow. Below a threshold, the application can ask the user to confirm or to clarify. Thanks to <code>as const<\/code> in the questionnaire, the result is also fully typed. The property <code>result.answers.to.choice<\/code> is a union of the city names and the two special options and not just a <code>string<\/code>. The <code>usage<\/code> section reports the tokens the request consumed.<\/p>\n<h2>Comparison<\/h2>\n<p>I compared duration and cost with OpenAI's Luna. For this, I ported the application to Luna (see branch <code>openai<\/code>). Then, I sent the requests shown in the screenshots three times to each model and picked the best run for this comparison.<\/p>\n<p>I chose Luna because it is strong enough for this use case. According to TypeSafe, Jev can even keep up with the larger Terra.<\/p>\n<style>\ntable {\n  width: 100%;\n  margin: 12px 0 36px;\n  border-collapse: collapse;\n  font-variant-numeric: tabular-nums;\n}\nth, td {\n  padding: 9px 12px;\n  text-align: right;\n  vertical-align: top;\n  border-bottom: 1px solid #e5e7eb;\n}\nth:first-child, td:first-child {\n  text-align: left;\n  font-weight: 600;\n}\nth {\n  font-weight: 600;\n  background: #f8fafc;\n  border-bottom: 2px solid #cbd5e1;\n}\ntr:last-child td {\n  border-bottom: 2px solid #cbd5e1;\n}\n@media (max-width: 600px) {\n  table {\n    font-size: 12.5px;\n  }\n  th, td {\n    padding: 7px 5px;\n  }\n}\n<\/style>\n<table>\n<thead>\n<tr>\n<th><\/th>\n<th style=\"text-align: right;\">Chat: Luna<\/th>\n<th style=\"text-align: right;\">Chat: Jev<\/th>\n<th style=\"text-align: right;\">Dashboard: Luna<\/th>\n<th style=\"text-align: right;\">Dashboard: Jev<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Model<\/td>\n<td style=\"text-align: right;\">gpt-5.6-luna<\/td>\n<td style=\"text-align: right;\">jev-1.13.0<\/td>\n<td style=\"text-align: right;\">gpt-5.6-luna<\/td>\n<td style=\"text-align: right;\">jev-1.13.0<\/td>\n<\/tr>\n<tr>\n<td>Round trip<\/td>\n<td style=\"text-align: right;\">1,069 ms<\/td>\n<td style=\"text-align: right;\">716 ms<\/td>\n<td style=\"text-align: right;\">3,207 ms<\/td>\n<td style=\"text-align: right;\">1,078 ms<\/td>\n<\/tr>\n<tr>\n<td>Processing at the provider<\/td>\n<td style=\"text-align: right;\">708 ms<\/td>\n<td style=\"text-align: right;\">107 ms<\/td>\n<td style=\"text-align: right;\">2,590 ms<\/td>\n<td style=\"text-align: right;\">204 ms<\/td>\n<\/tr>\n<tr>\n<td>Network<\/td>\n<td style=\"text-align: right;\">361 ms<\/td>\n<td style=\"text-align: right;\">609 ms<\/td>\n<td style=\"text-align: right;\">617 ms<\/td>\n<td style=\"text-align: right;\">874 ms<\/td>\n<\/tr>\n<tr>\n<td>Input tokens<\/td>\n<td style=\"text-align: right;\">856<\/td>\n<td style=\"text-align: right;\">937<\/td>\n<td style=\"text-align: right;\">7,494<\/td>\n<td style=\"text-align: right;\">7,260<\/td>\n<\/tr>\n<tr>\n<td>Output tokens<\/td>\n<td style=\"text-align: right;\">23<\/td>\n<td style=\"text-align: right;\">370<\/td>\n<td style=\"text-align: right;\">326<\/td>\n<td style=\"text-align: right;\">4,982<\/td>\n<\/tr>\n<tr>\n<td>Cost per request<\/td>\n<td style=\"text-align: right;\">$0.000199<\/td>\n<td style=\"text-align: right;\">$0.000039<\/td>\n<td style=\"text-align: right;\">$0.000542<\/td>\n<td style=\"text-align: right;\">$0.000305<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Duration<\/h3>\n<p>The most striking number is the processing time at the provider. For the chat request, Jev needs 107 ms and Luna 708 ms. For the dashboard, it is 204 ms versus 2,590 ms. This makes Jev more than 6 times faster in the first case and more than 12 times faster in the second one.<\/p>\n<p>The gap in the round trip is smaller because the network dominates Jev's total time. In my measurements, the network took longer for TypeSafe than for OpenAI. This share depends on my location and on where the endpoints are hosted. It says little about the model itself.<\/p>\n<p>The repeated runs revealed another difference. Jev's processing time stayed between 107 and 204 ms across all six runs. Luna varied between 708 and 1,683 ms for the chat request, and one of its dashboard runs took almost 13 seconds.<\/p>\n<h3>Cost<\/h3>\n<p>The calculation uses the list prices of both vendors as of September 20, 2026, the day of the measurements. All prices are in USD per million tokens:<\/p>\n<table>\n<thead>\n<tr>\n<th>Model<\/th>\n<th style=\"text-align: right;\">Input<\/th>\n<th style=\"text-align: right;\">Cached input<\/th>\n<th style=\"text-align: right;\">Output<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>gpt-5.6-luna<\/td>\n<td style=\"text-align: right;\">$0.20<\/td>\n<td style=\"text-align: right;\">$0.02<\/td>\n<td style=\"text-align: right;\">$1.20<\/td>\n<\/tr>\n<tr>\n<td>jev-1.13.0<\/td>\n<td style=\"text-align: right;\">$0.042<\/td>\n<td style=\"text-align: right;\">n\/a<\/td>\n<td style=\"text-align: right;\">$0.00<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>The chat request costs about a fifth with Jev. For the dashboard, Jev comes in at a bit more than half of Luna's price. Here, Luna already benefits from prompt caching, as 7,491 of its 7,494 input tokens came from the cache.<\/p>\n<p>Jev reports far more output tokens than Luna. They do not show up on the bill, though, because TypeSafe only charges for input tokens.<\/p>\n<p>Three runs per request are a spot check and not a benchmark. The tendency is clear, though.<\/p>\n<p><div style=\"\nmargin: 8px 0;\npadding: 22px;\nborder: 1px solid #e5e7eb;\nborder-radius: 14px;\nbackground: #f8fafc;\n\"><\/p>\n<h3 style=\"margin-top:0\">Interested in production-ready Agentic UI architectures?<\/h3>\n<p>In my workshop, we dive into AG-UI, A2UI, MCP Apps, HITL patterns, and modern Angular architectures for real-world agentic systems.<\/p>\n<p><a href=\"https:\/\/www.angulararchitects.io\/en\/training\/agentic-ai-with-angular-architecture-patterns\/\"><img decoding=\"async\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/05\/sujet-workshop-en.png\" width=\"400\" alt=\"Workshop: Agentic AI with Angular \u2013 AG-UI, A2UI, MCP Apps & HITL patterns\" style=\"cursor:pointer !important\"><\/a><\/p>\n<p><a style=\"cursor:pointer !important\" href=\"https:\/\/www.angulararchitects.io\/en\/training\/agentic-ai-with-angular-architecture-patterns\/\">See all details \u2192<\/a>\n<\/div>\n<\/p>\n<h2>Assessment and Outlook<\/h2>\n<h3>Performance and Cost<\/h3>\n<p>Performance and cost are very promising for Agentic UI. With processing times between 100 and 200 ms, the model no longer determines how responsive the application feels. I also expect the class of models that Jev has made popular to be a good fit for local execution, for example in the browser. This would remove the network share as well.<\/p>\n<h3>What Remains Your Job<\/h3>\n<p>One simplification helps in the examples shown here: the selection of widgets and tiles is directly tied to the respective tool calls. Decoupling the two would be possible, but with Jev it means programming work. The same applies to mapping values between tool results and widgets or follow-up tool calls. You have to write this code yourself. An LLM, by contrast, takes over such tasks without much effort on our side.<\/p>\n<h3>Further Use Cases<\/h3>\n<p>Agentic UI is only one field of application. The documentation shows several others:<\/p>\n<ul>\n<li><strong>Routing:<\/strong> classify incoming requests and hand each one to plain code, a specialized LLM, or a human.<\/li>\n<li><strong>Guardrails:<\/strong> screen the messages going into and coming out of an LLM application.<\/li>\n<li><strong>Reranking for RAG:<\/strong> judge retrieved passages before they reach the answering model.<\/li>\n<li><strong>Verification:<\/strong> check citations or extracted fields against the source document.<\/li>\n<li><strong>Classification at scale:<\/strong> sort tickets, documents, or product data and moderate content.<\/li>\n<\/ul>\n<h3>Thinking in Classes<\/h3>\n<p>You have to get used to working with questionnaires and predefined options, which are classes in the end. Some use cases and their implementation need a different way of thinking. One challenge is that not everything can be expressed as a class.<\/p>\n<p>The examples in Jev's documentation show some approaches for this. Date values can be split into their parts: year, month, and day. Separate questions then determine these parts, and code puts them together. You can also proceed hierarchically. An example is to first ask for the continent, then for the country, and only then for the airport.<\/p>\n<p>A further approach works when the wanted value already appears in the message, for instance a number or a quantity. In this case, you can pre-filter the message with a regular expression and offer the values found as options.<\/p>\n<h3>Outlook: Polyglot and Hybrid Approaches<\/h3>\n<p>Another way to deal with values that do not fit into classes is a polyglot approach. It combines Jev with a very lean language model such as Gemini Nano. Such models are demonstrably good at extraction tasks. I can imagine both of them running in the browser.<\/p>\n<p>A hybrid of both worlds is an exciting prospect, too. Its advantage would be that developers do not have to deal with two kinds of models and mediate between them.<\/p>\n<p>So, is Jev just a trend or a game changer? For the decisions inside an Agentic UI, I see the potential for a game changer. The selected tool and its arguments arrive typed, with probabilities, and after 100 to 200 ms of processing. Free-form values and generated text still need a language model. This is why I find the combination of both worlds the most interesting prospect.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Questionnaires instead of prompts: what a System One model brings to chat assistants and generated dashboards Agentic UI puts a model between the user and the application. Every message leads to at least one model call that picks a tool, fills in its arguments, and decides which widget to show. With an LLM, this call [&hellip;]<\/p>\n","protected":false},"author":25,"featured_media":34981,"comment_status":"open","ping_status":"open","sticky":true,"template":"","format":"standard","meta":{"_acf_changed":false,"_price":"","_stock":"","_tribe_ticket_header":"","_tribe_default_ticket_provider":"","_ticket_start_date":"","_ticket_end_date":"","_tribe_ticket_show_description":"","_tribe_ticket_show_not_going":false,"_tribe_ticket_use_global_stock":"","_tribe_ticket_global_stock_level":"","_global_stock_mode":"","_global_stock_cap":"","_tribe_rsvp_for_event":"","_tribe_ticket_going_count":"","_tribe_ticket_not_going_count":"","_tribe_tickets_list":"[]","_tribe_ticket_has_attendee_info_fields":false,"footnotes":""},"categories":[18],"tags":[],"class_list":["post-34986","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Using Jev for Agentic UI: Just a Trend or a Game Changer? - ANGULARarchitects<\/title>\n<meta name=\"description\" content=\"Using Jev for Agentic UI: Just a Trend or a Game Changer?&quot;description: &quot;Jev by TypeSafe for Agentic UI: first steps with the System One model, typed answers in about 100 ms, and a speed and cost comparison with an LLM.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using Jev for Agentic UI: Just a Trend or a Game Changer? - ANGULARarchitects\" \/>\n<meta property=\"og:description\" content=\"Using Jev for Agentic UI: Just a Trend or a Game Changer?&quot;description: &quot;Jev by TypeSafe for Agentic UI: first steps with the System One model, typed answers in about 100 ms, and a speed and cost comparison with an LLM.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/\" \/>\n<meta property=\"og:site_name\" content=\"ANGULARarchitects\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-20T21:19:35+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-20T21:30:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/09\/social-sujet-1-1024x538.png\" \/>\n<meta name=\"author\" content=\"Manfred Steyer\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/09\/social-sujet-1-1024x538.png\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Manfred Steyer\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"TechArticle\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/\"},\"author\":{\"name\":\"Manfred Steyer\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/f3de69c1e2bdb5ba04d8d2f5f998b81a\"},\"headline\":\"Using Jev for Agentic UI: Just a Trend or a Game Changer?\",\"datePublished\":\"2026-09-20T21:19:35+00:00\",\"dateModified\":\"2026-09-20T21:30:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/\"},\"wordCount\":1957,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/09\/questionnaire-scaled.png\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/\",\"url\":\"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/\",\"name\":\"Using Jev for Agentic UI: Just a Trend or a Game Changer? - ANGULARarchitects\",\"isPartOf\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/09\/questionnaire-scaled.png\",\"datePublished\":\"2026-09-20T21:19:35+00:00\",\"dateModified\":\"2026-09-20T21:30:36+00:00\",\"description\":\"Using Jev for Agentic UI: Just a Trend or a Game Changer?\\\"description: \\\"Jev by TypeSafe for Agentic UI: first steps with the System One model, typed answers in about 100 ms, and a speed and cost comparison with an LLM.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/#primaryimage\",\"url\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/09\/questionnaire-scaled.png\",\"contentUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/09\/questionnaire-scaled.png\",\"width\":2560,\"height\":1792},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.angulararchitects.io\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Using Jev for Agentic UI: Just a Trend or a Game Changer?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#website\",\"url\":\"https:\/\/www.angulararchitects.io\/en\/\",\"name\":\"ANGULARarchitects\",\"description\":\"AngularArchitects.io\",\"publisher\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.angulararchitects.io\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#organization\",\"name\":\"ANGULARarchitects\",\"alternateName\":\"SOFTWAREarchitects\",\"url\":\"https:\/\/www.angulararchitects.io\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg\",\"contentUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg\",\"width\":644,\"height\":216,\"caption\":\"ANGULARarchitects\"},\"image\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/github.com\/angular-architects\",\"https:\/\/www.linkedin.com\/company\/angular-architects\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/f3de69c1e2bdb5ba04d8d2f5f998b81a\",\"name\":\"Manfred Steyer\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/8778dfb353992fa3a0d909beee085a088891e5bfce65cdb3631801da527cf11b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/8778dfb353992fa3a0d909beee085a088891e5bfce65cdb3631801da527cf11b?s=96&d=mm&r=g\",\"caption\":\"Manfred Steyer\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Using Jev for Agentic UI: Just a Trend or a Game Changer? - ANGULARarchitects","description":"Using Jev for Agentic UI: Just a Trend or a Game Changer?\"description: \"Jev by TypeSafe for Agentic UI: first steps with the System One model, typed answers in about 100 ms, and a speed and cost comparison with an LLM.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/","og_locale":"en_US","og_type":"article","og_title":"Using Jev for Agentic UI: Just a Trend or a Game Changer? - ANGULARarchitects","og_description":"Using Jev for Agentic UI: Just a Trend or a Game Changer?\"description: \"Jev by TypeSafe for Agentic UI: first steps with the System One model, typed answers in about 100 ms, and a speed and cost comparison with an LLM.","og_url":"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/","og_site_name":"ANGULARarchitects","article_published_time":"2026-09-20T21:19:35+00:00","article_modified_time":"2026-09-20T21:30:36+00:00","og_image":[{"url":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/09\/social-sujet-1-1024x538.png","type":"","width":"","height":""}],"author":"Manfred Steyer","twitter_card":"summary_large_image","twitter_image":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/09\/social-sujet-1-1024x538.png","twitter_misc":{"Written by":"Manfred Steyer","Est. reading time":"12 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"TechArticle","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/#article","isPartOf":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/"},"author":{"name":"Manfred Steyer","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/f3de69c1e2bdb5ba04d8d2f5f998b81a"},"headline":"Using Jev for Agentic UI: Just a Trend or a Game Changer?","datePublished":"2026-09-20T21:19:35+00:00","dateModified":"2026-09-20T21:30:36+00:00","mainEntityOfPage":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/"},"wordCount":1957,"commentCount":0,"publisher":{"@id":"https:\/\/www.angulararchitects.io\/en\/#organization"},"image":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/#primaryimage"},"thumbnailUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/09\/questionnaire-scaled.png","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/","url":"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/","name":"Using Jev for Agentic UI: Just a Trend or a Game Changer? - ANGULARarchitects","isPartOf":{"@id":"https:\/\/www.angulararchitects.io\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/#primaryimage"},"image":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/#primaryimage"},"thumbnailUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/09\/questionnaire-scaled.png","datePublished":"2026-09-20T21:19:35+00:00","dateModified":"2026-09-20T21:30:36+00:00","description":"Using Jev for Agentic UI: Just a Trend or a Game Changer?\"description: \"Jev by TypeSafe for Agentic UI: first steps with the System One model, typed answers in about 100 ms, and a speed and cost comparison with an LLM.","breadcrumb":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/#primaryimage","url":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/09\/questionnaire-scaled.png","contentUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2026\/09\/questionnaire-scaled.png","width":2560,"height":1792},{"@type":"BreadcrumbList","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/using-jev-for-agentic-ui-just-a-trend-or-a-game-changer\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.angulararchitects.io\/en\/"},{"@type":"ListItem","position":2,"name":"Using Jev for Agentic UI: Just a Trend or a Game Changer?"}]},{"@type":"WebSite","@id":"https:\/\/www.angulararchitects.io\/en\/#website","url":"https:\/\/www.angulararchitects.io\/en\/","name":"ANGULARarchitects","description":"AngularArchitects.io","publisher":{"@id":"https:\/\/www.angulararchitects.io\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.angulararchitects.io\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.angulararchitects.io\/en\/#organization","name":"ANGULARarchitects","alternateName":"SOFTWAREarchitects","url":"https:\/\/www.angulararchitects.io\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/","url":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg","contentUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg","width":644,"height":216,"caption":"ANGULARarchitects"},"image":{"@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/github.com\/angular-architects","https:\/\/www.linkedin.com\/company\/angular-architects\/"]},{"@type":"Person","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/f3de69c1e2bdb5ba04d8d2f5f998b81a","name":"Manfred Steyer","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/8778dfb353992fa3a0d909beee085a088891e5bfce65cdb3631801da527cf11b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8778dfb353992fa3a0d909beee085a088891e5bfce65cdb3631801da527cf11b?s=96&d=mm&r=g","caption":"Manfred Steyer"}}]}},"_links":{"self":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/posts\/34986","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/users\/25"}],"replies":[{"embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/comments?post=34986"}],"version-history":[{"count":4,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/posts\/34986\/revisions"}],"predecessor-version":[{"id":34992,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/posts\/34986\/revisions\/34992"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/media\/34981"}],"wp:attachment":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/media?parent=34986"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/categories?post=34986"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/tags?post=34986"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}