<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: James Li</title>
    <description>The latest articles on DEV Community by James Li (@dx_p_42a4bff1cec043fb3017).</description>
    <link>https://dev.to/dx_p_42a4bff1cec043fb3017</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4064924%2F2a95758f-d3e7-4cc1-ac78-766b06222dd6.jpg</url>
      <title>DEV Community: James Li</title>
      <link>https://dev.to/dx_p_42a4bff1cec043fb3017</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dx_p_42a4bff1cec043fb3017"/>
    <language>en</language>
    <item>
      <title>DecisionsApi: Turning Text Into Structured, Executable Decisions</title>
      <dc:creator>James Li</dc:creator>
      <pubDate>Fri, 02 Oct 2026 06:31:42 +0000</pubDate>
      <link>https://dev.to/dx_p_42a4bff1cec043fb3017/decisionsapi-turning-text-into-structured-executable-decisions-5e8n</link>
      <guid>https://dev.to/dx_p_42a4bff1cec043fb3017/decisionsapi-turning-text-into-structured-executable-decisions-5e8n</guid>
      <description>&lt;p&gt;As AI systems move from demos into real workflows, the difficult part is often not generating text. It is deciding what should happen next. A support request may need a category, a score, a route, or a safety check before it reaches a person or another agent. That is the problem space DecisionsApi is designed to explore.&lt;/p&gt;

&lt;p&gt;DecisionsApi is a developer-focused AI platform with an online playground and an API. Developers can provide text, JSON objects, or arrays of text as state, then define typed Choice, Score, or Noul (yes/no) questions. The service returns structured answers with probabilities, confidence, usage, and request details. The result is intended to be easier to pass into application logic than an unstructured paragraph.&lt;/p&gt;

&lt;p&gt;A useful workflow starts with a small decision model. A team can ask a Choice question to classify an incoming request, use a Score question to estimate a value, or use a Noul question for a yes/no gate. Those outputs can support customer-request routing, agent next-step selection, evidence checks, safety gates, and human-review workflows. Because the playground and API share one credit balance, a developer can test a model interactively and then connect the same idea to an integration.&lt;/p&gt;

&lt;p&gt;The product also includes API key management and usage history. This matters when a team is comparing models or building an internal workflow that needs to understand how requests are being used. Instead of treating model output as the final answer, a structured decision can become one step in a larger system: classify, route, check, and escalate when necessary.&lt;/p&gt;

&lt;p&gt;For developers who want to examine this approach, the project is available at &lt;a href="https://decisionapi.net/" rel="noopener noreferrer"&gt;DecisionsApi&lt;/a&gt;. Its tagline is “Text in. Decisions out.” This approach is useful when a team wants to keep model experimentation visible while making the final output predictable enough for downstream software. It also makes it easier to separate a model judgment from the application logic that decides whether to continue, route, or request human review.&lt;/p&gt;

</description>
      <category>devtools</category>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>Jev TypeSafe: Add Typed Decisions to TypeScript</title>
      <dc:creator>James Li</dc:creator>
      <pubDate>Fri, 25 Sep 2026 05:52:22 +0000</pubDate>
      <link>https://dev.to/dx_p_42a4bff1cec043fb3017/jev-typesafe-add-typed-decisions-to-typescript-4f0</link>
      <guid>https://dev.to/dx_p_42a4bff1cec043fb3017/jev-typesafe-add-typed-decisions-to-typescript-4f0</guid>
      <description>&lt;p&gt;Searches for &lt;strong&gt;jev typesafe&lt;/strong&gt; often point to two related but different ideas: Jev’s typed AI decisions and TypeScript’s type system. This guide shows how to connect them without confusing a compile-time type with a trustworthy runtime result. Jev evaluates questions about a piece of state and returns structured answers; your TypeScript service still validates the network response and decides what the application may do.&lt;/p&gt;

&lt;p&gt;Jev’s site describes it as an independent decision tool for software teams. It is not affiliated with, operated by, or endorsed by TypeSafe. If you want to see the product first, try the &lt;a href="https://thejevai.com/" rel="noopener noreferrer"&gt;Jev AI homepage&lt;/a&gt; and its &lt;a href="https://thejevai.com/playground" rel="noopener noreferrer"&gt;online Playground&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F87m1zd6m90oshyhpqrpu.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F87m1zd6m90oshyhpqrpu.webp" alt="Sketched API request crosses a server boundary and returns validated decision data" width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What “type-safe Jev” means in a TypeScript application
&lt;/h2&gt;

&lt;p&gt;TypeScript checks your code before it runs. It can catch mistakes such as a misspelled property or a function receiving the wrong internal type. It cannot prove that an HTTP response from a remote service matches a type you wrote. A declaration such as &lt;strong&gt;const answer: Decision = await response.json()&lt;/strong&gt; only tells the compiler what you hope the server returned. It does not inspect the bytes that arrived.&lt;/p&gt;

&lt;p&gt;Treat data from &lt;strong&gt;response.json()&lt;/strong&gt; as &lt;strong&gt;unknown&lt;/strong&gt; until the application checks its shape. The useful boundary has two parts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Request construction:&lt;/strong&gt; TypeScript can keep your state, question definitions, and internal identifiers consistent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Response parsing:&lt;/strong&gt; runtime checks confirm that the remote data contains the fields your code plans to read.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That distinction matters because a model response is a decision signal, not authorization to perform an action. Your application remains responsible for authentication, business constraints, deterministic checks, and any required approval.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6x1jm19jpwou6pad8f8x.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F6x1jm19jpwou6pad8f8x.webp" alt="Sketch contrasting compile-time TypeScript checks with runtime response validation" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with Jev’s three question types
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://thejevai.com/docs" rel="noopener noreferrer"&gt;Jev documentation&lt;/a&gt; describes three question shapes. Match the type to the shape of the decision instead of asking one broad prompt to do several unrelated jobs.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Type&lt;/th&gt;
&lt;th&gt;Good fit&lt;/th&gt;
&lt;th&gt;Result to inspect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Choice&lt;/td&gt;
&lt;td&gt;Team, queue, category, or model selection&lt;/td&gt;
&lt;td&gt;Selected option, probabilities, confidence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Score&lt;/td&gt;
&lt;td&gt;Severity, quality, urgency, or another ordered scale&lt;/td&gt;
&lt;td&gt;Weighted score, level probabilities, confidence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Noul&lt;/td&gt;
&lt;td&gt;Whether one focused proposition is true&lt;/td&gt;
&lt;td&gt;Probability from 0 to 1 that the answer is yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Use Choice when the possible outcomes are known. If a support ticket can go to billing, technical support, or sales, define what qualifies for each option. Include a safe &lt;strong&gt;other&lt;/strong&gt; or &lt;strong&gt;needs_review&lt;/strong&gt; option when the list is not exhaustive; otherwise a classifier must choose the nearest imperfect match.&lt;/p&gt;

&lt;p&gt;Use Score when the answer has an order. Describe levels from low to high and make the descriptions concrete. A severity rubric might define what “low,” “moderate,” and “critical” mean for response time or escalation. Jev returns a probability distribution and a probability-weighted score, so a result can fall between named levels. Your code should still map that number to an explicit business policy.&lt;/p&gt;

&lt;p&gt;Use Noul for one yes-or-no proposition, such as whether a message contains a refund request. Its &lt;strong&gt;noul&lt;/strong&gt; value is the probability that the answer is yes. It is not a second confidence field. If the workflow needs both a category and a yes-or-no condition, use two question IDs and inspect both answers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fap1qh6ulmz0eytbfx571.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fap1qh6ulmz0eytbfx571.webp" alt="Three-panel mathematical sketch of Choice branches, an ordered Score scale, and a Noul probability arc" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Design the decision before writing the request
&lt;/h2&gt;

&lt;p&gt;A reliable integration starts with a small decision contract. Write down the exact action your application may take, the possible answers, what evidence belongs in the input, and what should happen when the result is uncertain. This often reveals that a proposed “AI task” is actually two or three independent questions.&lt;/p&gt;

&lt;p&gt;For example, a support workflow might ask Jev to select a team, score urgency, and judge whether the message explicitly requests a refund. Those questions can share the same state and be evaluated in one request. Give each a stable key such as &lt;strong&gt;department&lt;/strong&gt;, &lt;strong&gt;urgency&lt;/strong&gt;, and &lt;strong&gt;refund_requested&lt;/strong&gt;; the keys are how your code finds the corresponding results. Keep them stable when you rename a label shown to an operator.&lt;/p&gt;

&lt;p&gt;Make the state sufficient but not bloated. A ticket-routing decision may need the message, product area, and account tier. It probably does not need a full customer profile, unrelated conversation history, or secrets. Smaller, relevant state is easier to review, cheaper to transmit, and less likely to expose data that has no bearing on the decision.&lt;/p&gt;

&lt;p&gt;Jev accepts text, JSON objects, and arrays of text as state. Use a string for a simple message and a structured object when fields have distinct meanings. Arrays can hold related text items, such as a current message and a short policy excerpt. Images, audio, and video are not direct inputs in the documented boundary; preprocess them with OCR, transcription, or another service before including relevant text.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build a typed request and validate the response
&lt;/h2&gt;

&lt;p&gt;The example below calls the documented System One endpoint from a server-side TypeScript service. The request type catches mistakes while your code is being written. The response remains &lt;strong&gt;unknown&lt;/strong&gt; until runtime checks validate the fields this workflow actually consumes.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;type Question =
  | { type: "choice"; instructions: string; criteria: Record&amp;lt;string, string&amp;gt; }
  | { type: "score"; instructions: string; criteria: string[] }
  | { type: "noul"; instructions: string };

type EvaluationRequest = {
  model: "jev-latest";
  state: string | Record&amp;lt;string, unknown&amp;gt; | string[];
  questions: Record&amp;lt;string, Question&amp;gt;;
};

function asRecord(value: unknown): Record&amp;lt;string, unknown&amp;gt; | null {
  return typeof value === "object" &amp;amp;&amp;amp; value !== null &amp;amp;&amp;amp; !Array.isArray(value)
    ? (value as Record&amp;lt;string, unknown&amp;gt;)
    : null;
}

function isProbabilityMap(value: unknown): value is Record&amp;lt;string, number&amp;gt; {
  const map = asRecord(value);
  if (!map) return false;
  const entries = Object.values(map);
  if (entries.length === 0) return false;
  if (!entries.every(
    (item) =&amp;gt; typeof item === "number" &amp;amp;&amp;amp; Number.isFinite(item) &amp;amp;&amp;amp; item &amp;gt;= 0 &amp;amp;&amp;amp; item &amp;lt;= 1
  )) return false;
  const total = entries.reduce((sum, item) =&amp;gt; sum + item, 0);
  return Math.abs(total - 1) &amp;lt; 0.02;
}

async function classifyTicket(ticket: string) {
  const apiKey = process.env.JEV_API_KEY;
  if (!apiKey) throw new Error("JEV_API_KEY is not configured");

  const request = {
    model: "jev-latest",
    state: { message: ticket },
    questions: {
      department: {
        type: "choice",
        instructions: "Which team should handle this ticket?",
        criteria: {
          billing: "Payments, invoices, refunds, or payouts",
          technical: "Bugs, outages, or integration failures",
          sales: "Pricing, upgrades, or new accounts"
        }
      }
    }
  } satisfies EvaluationRequest;

  const response = await fetch("https://thejevai.com/v1/systemone", {
    method: "POST",
    headers: {
      Authorization: "Bearer " + apiKey,
      "Content-Type": "application/json"
    },
    body: JSON.stringify(request)
  });

  if (!response.ok) throw new Error("Jev request failed: " + response.status);

  const payload: unknown = await response.json();
  const root = asRecord(payload);
  const answers = asRecord(root?.answers);
  const answer = asRecord(answers?.department);

  if (
    answer?.type !== "choice" ||
    typeof answer.choice !== "string" ||
    typeof answer.confidence !== "number" ||
    !Number.isFinite(answer.confidence) ||
    answer.confidence &amp;lt; 0 ||
    answer.confidence &amp;gt; 1 ||
    !isProbabilityMap(answer.probabilities)
  ) {
    throw new Error("Unexpected Jev response shape");
  }

  const allowedTeams = ["billing", "technical", "sales"];
  if (!allowedTeams.includes(answer.choice)) {
    throw new Error("Jev returned an unrecognized team");
  }

  return {
    team: answer.choice,
    confidence: answer.confidence,
    probabilities: answer.probabilities
  };
}

const result = await classifyTicket("Three deploys failed and production is returning 500s.");
if (result.confidence &amp;gt;= 0.8) {
  // Apply an allowlist and business rules before routing.
} else {
  // Send uncertain cases to a human-review queue.
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This example is intentionally narrow. It validates the shape used by the department-routing branch, checks that probability values are finite and within range, and rejects a choice outside the application’s own allowlist. A larger application should validate every field that influences an action. If a field is informational only, do not let its presence silently become a control signal.&lt;/p&gt;

&lt;p&gt;Keep &lt;strong&gt;JEV_API_KEY&lt;/strong&gt; in a server-side secret store. Never place it in a browser bundle, a public repository, an error message, or analytics properties. A TypeScript type does not hide a value from users if the code containing it is shipped to the browser.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fatan26rcjtqjf9upft7f.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fatan26rcjtqjf9upft7f.webp" alt="Application flow sketch from state through parallel questions and into application-owned routing or review" width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Read the answer shape without over-trusting it
&lt;/h2&gt;

&lt;p&gt;The response is organized by the question IDs you sent. For Choice, inspect the selected option, the probabilities for the available options, and confidence. For Score, inspect the probability-weighted score, its legend, the level probabilities, and confidence. For Noul, inspect the yes probability. Validate the shape that corresponds to the question type instead of assuming every answer has the same fields.&lt;/p&gt;

&lt;p&gt;A response can be structurally valid and still be wrong for a particular business case. Runtime validation answers “Can my code safely read this value?” Evaluation answers “Does this workflow make good decisions on representative inputs?” Those are separate checks and both matter.&lt;/p&gt;

&lt;p&gt;Avoid collapsing all signals into one generic &lt;strong&gt;success&lt;/strong&gt; boolean. Preserve the typed result long enough for application policy to use the right field. A route may depend on the selected Choice and a confidence threshold; a prioritization queue may use Score; a confirmation step may depend on Noul. Explicit mappings make later review and debugging easier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use confidence as a signal, not a guarantee
&lt;/h2&gt;

&lt;p&gt;Jev returns probabilities for Choice and Score answers, along with a confidence signal; Noul returns a yes probability. These values help compare or route cases, but they do not prove that a decision is correct. Confidence is not the same as measured accuracy, and a high number is not a safety guarantee.&lt;/p&gt;

&lt;p&gt;Build a labeled evaluation set from examples that resemble the real input mix. Include routine cases, borderline cases, rare but costly cases, and examples that should map to &lt;strong&gt;other&lt;/strong&gt; or human review. Measure errors by outcome, not only with one aggregate accuracy number. Sending an urgent outage to a low-priority queue may be more expensive than escalating a routine request unnecessarily.&lt;/p&gt;

&lt;p&gt;Choose thresholds from observed behavior and the cost of mistakes. For a low-impact suggestion, a lower threshold may be acceptable if a person can easily correct it. For a payment, account restriction, or destructive operation, keep deterministic checks and human approval even when model confidence is high. Do not copy a threshold from a tutorial and treat it as a universal default.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbwtxvuh0h4puir94rj1s.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbwtxvuh0h4puir94rj1s.webp" alt="Mathematical sketch of narrow and broad probability curves crossing a review threshold" width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Handle failures and uncertain results as normal paths
&lt;/h2&gt;

&lt;p&gt;A production request can fail before Jev returns an answer: the network may time out, the service may return a non-success status, or the body may not parse as expected. Model those outcomes explicitly. A useful internal result type might distinguish &lt;strong&gt;decision&lt;/strong&gt;, &lt;strong&gt;review&lt;/strong&gt;, and &lt;strong&gt;unavailable&lt;/strong&gt;, so a transport problem cannot accidentally look like an ordinary negative answer.&lt;/p&gt;

&lt;p&gt;Use bounded timeouts and retries appropriate to the operation. Retry only errors that are plausibly transient, respect any server-provided retry guidance, and cap the number of attempts. Do not retry validation failures as though they were network glitches. If the decision is unavailable after the retry budget, fall back to a known safe queue or review path instead of silently selecting the first option.&lt;/p&gt;

&lt;p&gt;Log enough to diagnose the workflow: request correlation identifiers if available, question IDs, response status, validation outcome, and the policy branch selected. Avoid storing API keys or unnecessarily copying raw personal data into logs. If the original state is needed for audit, define retention, access controls, and redaction deliberately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Roll out in stages
&lt;/h2&gt;

&lt;p&gt;A gradual rollout helps separate model quality from integration bugs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Explore:&lt;/strong&gt; Try representative states and typed questions in the Jev Playground. Refine unclear criteria before writing production code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evaluate offline:&lt;/strong&gt; Run a labeled sample through the request path. Review confusion patterns and the cases with the highest business cost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shadow:&lt;/strong&gt; Send requests for observation while the existing workflow remains authoritative. Compare proposed answers with actual outcomes without taking action.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assist:&lt;/strong&gt; Show suggestions to an operator and collect corrections. This exposes missing categories and confusing rubrics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automate selectively:&lt;/strong&gt; Enable only the branches that meet your measured threshold and have a safe fallback. Keep a way to pause automation when input patterns change.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Version your question wording and criteria alongside the code that interprets the result. If you change the meaning of &lt;strong&gt;critical&lt;/strong&gt; or add a destination team, your evaluation set should cover the new behavior before rollout. Monitor changes in input mix, corrections, escalation rates, and downstream outcomes; a stable response schema does not guarantee stable performance.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common integration mistakes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Trusting a TypeScript cast.&lt;/strong&gt; A cast changes what the compiler believes, not what the server sent. Parse from &lt;strong&gt;unknown&lt;/strong&gt;, validate the fields used, and reject unexpected result types.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Asking compound questions.&lt;/strong&gt; “Choose a team, decide urgency, and determine refund eligibility” bundles separate judgments. Use clear question IDs and combine the answers in ordinary code. Keep hard eligibility rules deterministic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Forcing a choice when none fits.&lt;/strong&gt; Incomplete criteria encourage a nearest-match answer. Add a catch-all outcome or route uncertain cases to review.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Treating probability as permission.&lt;/strong&gt; A probability is evidence for a policy, not the policy itself. Authentication, authorization, rate limits, and irreversible-action checks belong to your service.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sending the whole record.&lt;/strong&gt; More context is not automatically better. Include only information needed to answer the defined questions, especially when state contains personal or confidential data.&lt;/p&gt;

&lt;h2&gt;
  
  
  A production checklist for Jev TypeSafe integrations
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Keep the API key in a server-side secret store and rotate it according to your organization’s policy.&lt;/li&gt;
&lt;li&gt;Send only relevant text or structured fields; remove unrelated personal data and secrets.&lt;/li&gt;
&lt;li&gt;Test routine, ambiguous, adversarial, and out-of-scope examples in the Playground and an offline evaluation set.&lt;/li&gt;
&lt;li&gt;Validate response type, required fields, ranges, probability totals, and application allowlists.&lt;/li&gt;
&lt;li&gt;Define timeouts, bounded retries, non-success handling, and a safe fallback path.&lt;/li&gt;
&lt;li&gt;Log validation and policy outcomes without logging credentials or unnecessary sensitive state.&lt;/li&gt;
&lt;li&gt;Review thresholds and question criteria as the input distribution and business costs change.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For current request and response fields, use the Jev API documentation. Review &lt;a href="https://thejevai.com/pricing" rel="noopener noreferrer"&gt;plans and usage&lt;/a&gt; before estimating production volume.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is Jev TypeSafe the same as TypeScript?
&lt;/h3&gt;

&lt;p&gt;No. Jev returns typed decision outputs such as a choice, score, or yes probability. TypeScript checks your application code before it runs. A robust integration uses both: type the request and your internal result, then validate untrusted network data at runtime.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does a TypeScript type validate an API response?
&lt;/h3&gt;

&lt;p&gt;No. Type annotations are removed when JavaScript runs. Treat the decoded response as &lt;strong&gt;unknown&lt;/strong&gt; and check each field your application relies on before routing, storing, or displaying it. A type guard can make the validated part safe to use afterward.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can several questions use the same state?
&lt;/h3&gt;

&lt;p&gt;Yes. Jev supports multiple typed questions for one state, evaluated in parallel. Keep each question atomic and give it a stable key so your code can read its answer independently. Separate questions are easier to test and combine than one prompt asking for a large nested decision.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Noul confidence?
&lt;/h3&gt;

&lt;p&gt;No. Noul is the probability that a proposition is true. Choice and Score include confidence along with their answer probabilities. Read the field that matches the question type and design your own thresholds from measured examples.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can Jev perform the action after deciding?
&lt;/h3&gt;

&lt;p&gt;Your application should own execution. Use Jev to evaluate a bounded question; let your authorization checks, allowlists, deterministic rules, and approval steps decide whether to proceed. This keeps an uncertain model answer from becoming an unchecked side effect.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is a good first use case?
&lt;/h3&gt;

&lt;p&gt;Choose a repeated, low-impact decision with a small answer space, such as suggesting a support team. Make a labeled sample, define what each outcome means, and decide how unknown cases should be handled. Once the workflow is measurable, add runtime validation and compare suggestions with the existing process before automating.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;The practical meaning of &lt;strong&gt;jev typesafe&lt;/strong&gt; is a clear boundary between a model’s structured decision and the application logic that consumes it. Define narrow questions, send only relevant state, validate every response at runtime, measure behavior on representative examples, and keep uncertain or consequential cases on an explicit review path. TypeScript makes your own code easier to reason about; runtime checks protect it from untrusted data.&lt;/p&gt;

</description>
      <category>jevai</category>
    </item>
    <item>
      <title>Jev vs djev vs Laya vs OpenJev vs SemIf: Which Decision Model Should You Use?</title>
      <dc:creator>James Li</dc:creator>
      <pubDate>Fri, 25 Sep 2026 05:51:45 +0000</pubDate>
      <link>https://dev.to/dx_p_42a4bff1cec043fb3017/jev-vs-djev-vs-laya-vs-openjev-vs-semif-which-decision-model-should-you-use-1cjo</link>
      <guid>https://dev.to/dx_p_42a4bff1cec043fb3017/jev-vs-djev-vs-laya-vs-openjev-vs-semif-which-decision-model-should-you-use-1cjo</guid>
      <description>&lt;p&gt;If you are comparing &lt;strong&gt;Jev vs djev vs Laya vs OpenJev vs SemIf&lt;/strong&gt;, the most useful question is not “Which model has the highest score?” It is “Which operating model fits my product, data boundary, latency target, and tolerance for calibration work?”&lt;/p&gt;

&lt;p&gt;These systems all target structured decisions rather than ordinary chat completion, but they make different trade-offs. Jev is a hosted System One model focused on calibrated, typed decisions. djev emphasizes speed and native image or camera input. Laya offers open weights, self-hosting, and fine-tuning. OpenJev provides a compatible self-hosted server with multimodal and thinking options. SemIf reads logits from open models and comes close to Jev on the aggregate benchmark while keeping infrastructure under your control.&lt;/p&gt;

&lt;p&gt;This guide uses the official comparison pages and their published JevBench v1.3.0 snapshot, updated in September 2026. Treat the numbers as a decision aid, not a substitute for testing your own workload.&lt;/p&gt;

&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The short answer&lt;/li&gt;
&lt;li&gt;How to read the benchmark&lt;/li&gt;
&lt;li&gt;The five systems at a glance&lt;/li&gt;
&lt;li&gt;Jev vs djev&lt;/li&gt;
&lt;li&gt;Jev vs Laya&lt;/li&gt;
&lt;li&gt;Jev vs OpenJev&lt;/li&gt;
&lt;li&gt;Jev vs SemIf&lt;/li&gt;
&lt;li&gt;Choose by constraint&lt;/li&gt;
&lt;li&gt;How to run your own evaluation&lt;/li&gt;
&lt;li&gt;Frequently asked questions&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The short answer
&lt;/h2&gt;

&lt;p&gt;Choose &lt;strong&gt;Jev&lt;/strong&gt; when your application needs a hosted API, typed answers, and probabilities that are useful for routing or escalation without operating a GPU or fitting a calibration layer first.&lt;/p&gt;

&lt;p&gt;Choose &lt;strong&gt;djev&lt;/strong&gt; when speed and native image or live-camera input matter more than production calibration, especially while its hosted preview remains convenient.&lt;/p&gt;

&lt;p&gt;Choose &lt;strong&gt;Laya&lt;/strong&gt; when open weights, offline deployment, multilingual coverage, and fine-tuning matter more than zero-shot quality on difficult decisions.&lt;/p&gt;

&lt;p&gt;Choose &lt;strong&gt;OpenJev&lt;/strong&gt; when you want a self-hosted, Jev-compatible request shape with image input or a thinking mode, and you are willing to operate the runtime.&lt;/p&gt;

&lt;p&gt;Choose &lt;strong&gt;SemIf&lt;/strong&gt; when you want an open implementation that reads decision logits from models you control, can keep data inside your network, and have the GPU capacity and evaluation process to calibrate it.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to read the benchmark
&lt;/h2&gt;

&lt;p&gt;The referenced JevBench v1.3.0 comparison reports one shared evaluation method across 52 systems and 534 decisions: 72 easy, 96 standard, 146 judge-style, and 220 hard cases. Its composite score combines intelligence, calibration, speed, and cost.&lt;/p&gt;

&lt;p&gt;The published composite snapshot is:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;System&lt;/th&gt;
&lt;th&gt;Rank&lt;/th&gt;
&lt;th&gt;Composite score&lt;/th&gt;
&lt;th&gt;Main operating model&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Jev 1.13.0&lt;/td&gt;
&lt;td&gt;#1&lt;/td&gt;
&lt;td&gt;74.4&lt;/td&gt;
&lt;td&gt;Hosted production API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SemIf&lt;/td&gt;
&lt;td&gt;#2&lt;/td&gt;
&lt;td&gt;73.1&lt;/td&gt;
&lt;td&gt;Self-hosted open-model logit reader&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;djev&lt;/td&gt;
&lt;td&gt;#3&lt;/td&gt;
&lt;td&gt;73.0&lt;/td&gt;
&lt;td&gt;Hosted API with multimodal input&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenJev&lt;/td&gt;
&lt;td&gt;#11&lt;/td&gt;
&lt;td&gt;66.4&lt;/td&gt;
&lt;td&gt;Self-hosted compatible decision server&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Laya&lt;/td&gt;
&lt;td&gt;#33&lt;/td&gt;
&lt;td&gt;54.4&lt;/td&gt;
&lt;td&gt;Self-hosted open weights&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwi9uzvy73jtvug1wey1k.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwi9uzvy73jtvug1wey1k.webp" alt="Jev, djev, Laya, OpenJev, and SemIf benchmark comparison sketch" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A composite score hides important differences. A system can be faster but less calibrated, cheaper but harder to operate, or more accurate on a judge tier but weaker on genuinely ambiguous cases. For an agent or workflow that uses probability thresholds, calibration can matter more than a small change in raw accuracy.&lt;/p&gt;

&lt;h2&gt;
  
  
  The five systems at a glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;System&lt;/th&gt;
&lt;th&gt;Strength&lt;/th&gt;
&lt;th&gt;Trade-off&lt;/th&gt;
&lt;th&gt;Best fit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Jev&lt;/td&gt;
&lt;td&gt;Hosted typed decisions and calibrated probabilities&lt;/td&gt;
&lt;td&gt;Text-only input and usage-based API&lt;/td&gt;
&lt;td&gt;Production routing, scoring, and guardrails&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;djev&lt;/td&gt;
&lt;td&gt;Speed plus native images and camera frames&lt;/td&gt;
&lt;td&gt;Probabilities are documented as experimental&lt;/td&gt;
&lt;td&gt;Fast multimodal prototypes and visual decisions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Laya&lt;/td&gt;
&lt;td&gt;Apache-2.0 weights, CPU/GPU self-hosting, fine-tuning&lt;/td&gt;
&lt;td&gt;Needs task data and tuning for reliable production quality&lt;/td&gt;
&lt;td&gt;Offline or multilingual systems with training capacity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenJev&lt;/td&gt;
&lt;td&gt;Jev-compatible API, images, thinking mode&lt;/td&gt;
&lt;td&gt;GPU or Apple Silicon operations and configuration&lt;/td&gt;
&lt;td&gt;Self-hosted teams wanting a familiar request shape&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SemIf&lt;/td&gt;
&lt;td&gt;Open implementation, offline logits, strong aggregate score&lt;/td&gt;
&lt;td&gt;Own GPU, serving, and per-workload calibration&lt;/td&gt;
&lt;td&gt;Controlled networks and teams comfortable with model operations&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The deployment boundary is often more important than the leaderboard. A hosted API reduces infrastructure work but sends requests to a vendor. A self-hosted model keeps data closer to your system but makes capacity planning, monitoring, upgrades, and calibration your responsibility.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft28vn8bofcj7juo8cb27.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ft28vn8bofcj7juo8cb27.webp" alt="Hosted and self-hosted deployment paths for five decision models" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Jev vs djev
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://thejevai.com/jev-vs-djev" rel="noopener noreferrer"&gt;Jev vs djev comparison&lt;/a&gt; describes a close contest with a clear difference in operating priorities.&lt;/p&gt;

&lt;p&gt;Jev leads the published calibration score, 82.7 versus djev’s 65.4, and the hard-tier accuracy comparison is 74.1% versus 69.5%. djev leads the speed axis, 91.4 versus Jev’s 83.3. On easy and standard cases, the two systems are close enough that the deployment choice may matter more than raw accuracy.&lt;/p&gt;

&lt;p&gt;The input boundary is decisive:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jev focuses on text, JSON objects, and arrays of text.&lt;/li&gt;
&lt;li&gt;djev accepts text, native image input, image options, and live camera frames.&lt;/li&gt;
&lt;li&gt;Both support typed decision shapes such as Noul, Choice, and Score.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use Jev when the application uses probability for auto-approval, escalation, weighting, or routing and you want a production-oriented hosted path. Use djev when visual context or very low latency is the primary requirement and you can treat its probability output as experimental until your own evaluation proves otherwise.&lt;/p&gt;

&lt;p&gt;The cost model is also different. The comparison page describes Jev as a hosted production API with a planned usage model, while djev is available as a free preview with announced pricing. Preview availability and pricing can change, so verify the current terms before committing an architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jev vs Laya
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://thejevai.com/jev-vs-laya" rel="noopener noreferrer"&gt;Jev vs Laya comparison&lt;/a&gt; is mainly a comparison between a ready-to-use hosted model and an open-weights model that you can tune yourself.&lt;/p&gt;

&lt;p&gt;The published hard-tier accuracy is 74.1% for Jev versus 34.1% for Laya in the compared configurations. Jev’s intelligence score is 85.7 versus Laya’s 45.8, while Laya is designed for much faster local inference on suitable hardware. Laya’s strongest case is not zero-shot quality; it is ownership, fine-tuning, offline operation, and low marginal cost when a busy GPU is already available.&lt;/p&gt;

&lt;p&gt;Important differences include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jev accepts up to 64k tokens per request in the comparison; Laya’s per-question context is 512 tokens.&lt;/li&gt;
&lt;li&gt;Laya offers Apache-2.0 weights and English or multilingual checkpoints.&lt;/li&gt;
&lt;li&gt;Laya needs labelled examples and fine-tuning for a stable production task.&lt;/li&gt;
&lt;li&gt;Jev works as delivered through a hosted API, without an idle GPU or training run to manage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Laya can be the better choice when data cannot leave your network and you have a fixed taxonomy, labelled examples, and a team that can own model serving. Jev is the better first path when you want to validate a decision workflow without building that infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jev vs OpenJev
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://thejevai.com/jev-vs-openjev" rel="noopener noreferrer"&gt;Jev vs OpenJev comparison&lt;/a&gt; is less about the request shape and more about what happens after the request leaves your application.&lt;/p&gt;

&lt;p&gt;OpenJev is designed as a compatible decision server. It can accept the same general &lt;code&gt;/v1/systemone&lt;/code&gt; shape, run on a 24GB NVIDIA GPU or Apple Silicon, accept up to eight images per request, and offer a thinking mode with a quality and latency trade-off. Jev is a hosted production API focused on text decisions.&lt;/p&gt;

&lt;p&gt;In the published default comparison, Jev scores 82.7 on calibration versus OpenJev’s 64.8, and 74.1% versus 65.5% on hard cases. Their speed scores are close, 83.3 versus 83.2. OpenJev’s thinking configuration is a separate operating point: its comparison page reports 88.0 intelligence and 78.2% on the hard tier, so it should not be mixed into a default-versus-default claim.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fengwi7wjuox018i4uv72.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fengwi7wjuox018i4uv72.webp" alt="Jev and OpenJev feature matrix sketch" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Choose OpenJev when you need image inputs, self-hosting, Apache-2.0 code and weights, or a compatible API that can run inside your network. Choose Jev when calibrated probability, managed operations, and a quick path to production matter more than owning the runtime.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jev vs SemIf
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://thejevai.com/jev-vs-semif" rel="noopener noreferrer"&gt;Jev vs SemIf comparison&lt;/a&gt; is the closest open alternative in the published composite ranking: SemIf scores 73.1 versus Jev’s 74.4 and ranks #2 versus #1.&lt;/p&gt;

&lt;p&gt;The difference is concentrated rather than universal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SemIf leads the judge tier, 95.2% versus Jev’s 94.5%.&lt;/li&gt;
&lt;li&gt;Jev leads the hard tier, 74.1% versus SemIf’s 59.5%.&lt;/li&gt;
&lt;li&gt;Jev’s calibration score is 82.7 versus SemIf’s 72.6.&lt;/li&gt;
&lt;li&gt;Speed scores are nearly tied, 83.3 for Jev versus 83.7 for SemIf.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SemIf uses an open-model logit-reading approach, with Qwen3.5-4B as the primary benchmark configuration. Its code is MIT, but upstream model weights retain their own licences. It keeps inference in your environment, but you own the GPU, serving stack, capacity planning, and calibration for your workload.&lt;/p&gt;

&lt;p&gt;Jev is a strong fit when the probability signal needs to work out of the box and traffic is bursty enough that idle GPU cost would be wasteful. SemIf is compelling when a busy GPU is already available, offline operation is required, and the team is prepared to fit and monitor thresholds.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgdensp2qhot93dfmflik.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgdensp2qhot93dfmflik.webp" alt="Calibration curves and uncertainty signals for hosted and open decision models" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Choose by constraint
&lt;/h2&gt;

&lt;p&gt;Start with the constraint that would be most expensive to change later:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Your primary constraint&lt;/th&gt;
&lt;th&gt;First systems to evaluate&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Managed production API&lt;/td&gt;
&lt;td&gt;Jev, djev&lt;/td&gt;
&lt;td&gt;No GPU serving stack; compare calibration and multimodal needs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Native image or camera input&lt;/td&gt;
&lt;td&gt;djev, OpenJev&lt;/td&gt;
&lt;td&gt;Both comparison pages highlight multimodal input&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data must stay inside your network&lt;/td&gt;
&lt;td&gt;Laya, OpenJev, SemIf&lt;/td&gt;
&lt;td&gt;Self-hosting keeps the serving boundary under your control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Calibrated probabilities for routing&lt;/td&gt;
&lt;td&gt;Jev first, then SemIf&lt;/td&gt;
&lt;td&gt;Compare thresholds on your own difficult cases&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fine-tuning and open weights&lt;/td&gt;
&lt;td&gt;Laya, OpenJev, SemIf&lt;/td&gt;
&lt;td&gt;You can inspect, modify, or operate the runtime&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Compatible Jev request format&lt;/td&gt;
&lt;td&gt;Jev, OpenJev&lt;/td&gt;
&lt;td&gt;OpenJev is designed around a compatible API shape&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bursty traffic with no idle GPU&lt;/td&gt;
&lt;td&gt;Jev&lt;/td&gt;
&lt;td&gt;Hosted access avoids capacity planning for a local accelerator&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Very low local latency&lt;/td&gt;
&lt;td&gt;Laya, SemIf, OpenJev&lt;/td&gt;
&lt;td&gt;Measure end-to-end latency, not only model inference time&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8cbnkddymyekqxeg2s87.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8cbnkddymyekqxeg2s87.webp" alt="A decision tree for selecting among Jev, djev, Laya, OpenJev, and SemIf" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How to run your own evaluation
&lt;/h2&gt;

&lt;p&gt;The most valuable result is not a universal winner. It is a model choice that survives your real examples.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Freeze the decision interface
&lt;/h3&gt;

&lt;p&gt;Use the same State, question wording, answer options, and output policy for every system. If one system receives a richer prompt or a different taxonomy, the comparison is not fair.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Build a representative test set
&lt;/h3&gt;

&lt;p&gt;Include normal cases, ambiguous cases, long contexts, adversarial inputs, and examples that should be escalated. Separate easy classification from decisions where probability will control a real action.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Measure more than accuracy
&lt;/h3&gt;

&lt;p&gt;Track at least:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;exact decision accuracy by difficulty;&lt;/li&gt;
&lt;li&gt;calibration or expected calibration error;&lt;/li&gt;
&lt;li&gt;p50 and p95 end-to-end latency;&lt;/li&gt;
&lt;li&gt;cost at realistic traffic, including idle GPU time;&lt;/li&gt;
&lt;li&gt;multimodal quality when images are part of the task;&lt;/li&gt;
&lt;li&gt;operational effort for deployment, upgrades, and incidents;&lt;/li&gt;
&lt;li&gt;privacy, retention, and network-boundary requirements.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Test the threshold policy
&lt;/h3&gt;

&lt;p&gt;If code will auto-approve, route, block, or escalate from a probability, evaluate the threshold itself. A model that wins on average can still be the wrong choice if its uncertainty signal is not stable where your application acts.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Re-test after changes
&lt;/h3&gt;

&lt;p&gt;Open models, hosted previews, prices, runtimes, and calibration layers change. Record the model version, runtime configuration, date, and test set with every benchmark result.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is Jev always the highest-quality choice?
&lt;/h3&gt;

&lt;p&gt;No. The referenced benchmark puts Jev first on the composite and hard-tier comparison, but SemIf leads the judge tier, djev leads the speed axis, Laya leads on open-weight ownership and local latency, and OpenJev offers a compatible self-hosted path with images and thinking mode.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which system is best for a private deployment?
&lt;/h3&gt;

&lt;p&gt;Evaluate Laya, OpenJev, and SemIf first because their comparison pages describe self-hosted paths. The right choice depends on your GPU, data policy, fine-tuning needs, and ability to calibrate probabilities.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which model should an AI agent use for tool safety?
&lt;/h3&gt;

&lt;p&gt;Start with the system whose probability signal and operating boundary you can validate. For high-impact tools, keep deterministic permissions and human approval in application code regardless of the model you choose.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can benchmark scores be treated as current product guarantees?
&lt;/h3&gt;

&lt;p&gt;No. The comparison is a dated snapshot measured on a defined decision set. Use it to decide what to test, then run the same workload and threshold policy on the versions and deployment modes you plan to ship.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final takeaway
&lt;/h2&gt;

&lt;p&gt;The choice between Jev, djev, Laya, OpenJev, and SemIf is a systems decision, not just a model-quality contest. Jev prioritizes managed access and calibrated decisions. djev prioritizes speed and native visual input. Laya prioritizes open weights, self-hosting, and fine-tuning. OpenJev prioritizes compatible deployment with multimodal and thinking options. SemIf prioritizes open logits and control over the runtime.&lt;/p&gt;

&lt;p&gt;Pick the constraint that matters most, test the hard cases where systems separate, and measure the probability policy that your code will actually use. That is how a comparison becomes a reliable production decision.&lt;/p&gt;

</description>
      <category>jev</category>
      <category>jevai</category>
      <category>jevmodel</category>
    </item>
    <item>
      <title>Jev vs Laya: Hosted API or Open Weights? (2026 Guide)</title>
      <dc:creator>James Li</dc:creator>
      <pubDate>Fri, 25 Sep 2026 05:50:51 +0000</pubDate>
      <link>https://dev.to/dx_p_42a4bff1cec043fb3017/jev-vs-laya-hosted-api-or-open-weights-2026-guide-3mo4</link>
      <guid>https://dev.to/dx_p_42a4bff1cec043fb3017/jev-vs-laya-hosted-api-or-open-weights-2026-guide-3mo4</guid>
      <description>&lt;p&gt;If you are comparing &lt;strong&gt;Laya and Jev&lt;/strong&gt;, start with the operating boundary your product needs. Jev is a managed, ready-to-call decision API; Laya is an open-weight decision model you can run and adapt. Labelled data, data residency, language mix, context length, and who will own inference in production determine the choice.&lt;/p&gt;

&lt;p&gt;The figures below are from JevBench v1.3.0, checked September 22, 2026. They describe one benchmark setup, not a guarantee for every workload.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick answer
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Constraint&lt;/th&gt;
&lt;th&gt;Start with&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;No labelled data or fine-tuning team&lt;/td&gt;
&lt;td&gt;Jev&lt;/td&gt;
&lt;td&gt;Designed for useful zero-shot decisions through a managed API.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data must stay inside your network&lt;/td&gt;
&lt;td&gt;Laya&lt;/td&gt;
&lt;td&gt;Open weights can be self-hosted and adapted locally.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Long tickets, documents, or traces&lt;/td&gt;
&lt;td&gt;Jev&lt;/td&gt;
&lt;td&gt;The comparison lists a 64k-token request context.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multilingual routing&lt;/td&gt;
&lt;td&gt;Laya multilingual checkpoint&lt;/td&gt;
&lt;td&gt;A dedicated multilingual option is available; validate each language.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No GPU operations capacity&lt;/td&gt;
&lt;td&gt;Jev&lt;/td&gt;
&lt;td&gt;No GPU provisioning, checkpoint updates, or inference monitoring.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fae2m69qdo5thqzxf7keg.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fae2m69qdo5thqzxf7keg.webp" alt="Hosted API and self-hosted model operating boundaries" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What the two systems offer
&lt;/h2&gt;

&lt;p&gt;Both answer typed decisions such as “which queue?”, “is this allowed?”, or “what score applies?” They are alternatives to generating free-form text and parsing it afterwards.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Jev&lt;/strong&gt; is TypeSafe’s hosted System One API. The comparison describes zero-shot use, up to 64k tokens per request, and up to 255 choice options. You call the API without operating a GPU.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Laya&lt;/strong&gt; is an open decision model built on an encoder. Its Apache-2.0 implementation can run locally and be fine-tuned. The evaluated checkpoint in the comparison uses 512 tokens per question. Laya’s official project lists different limits for different checkpoints, so verify the exact version you deploy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Neither is a general chatbot. Both need a clear schema, stable labels, and a policy for uncertain answers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reading JevBench v1.3.0
&lt;/h2&gt;

&lt;p&gt;The benchmark compared 52 systems on 534 typed decisions: 72 easy, 96 standard, 146 judge-style, and 220 hard cases. Jev scored 74.4 overall (#1); Laya scored 54.4 (#33).&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Measure&lt;/th&gt;
&lt;th&gt;Jev 1.13.0&lt;/th&gt;
&lt;th&gt;Laya&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Composite score&lt;/td&gt;
&lt;td&gt;74.4&lt;/td&gt;
&lt;td&gt;54.4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Intelligence score&lt;/td&gt;
&lt;td&gt;85.7&lt;/td&gt;
&lt;td&gt;45.8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Calibration score&lt;/td&gt;
&lt;td&gt;82.7&lt;/td&gt;
&lt;td&gt;62.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hard-case accuracy&lt;/td&gt;
&lt;td&gt;74.1%&lt;/td&gt;
&lt;td&gt;34.1%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Standard-case accuracy&lt;/td&gt;
&lt;td&gt;99.0%&lt;/td&gt;
&lt;td&gt;72.9%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fubibndj3t6qarqot9d6j.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fubibndj3t6qarqot9d6j.webp" alt="Benchmark map separating capability, calibration, speed, and cost" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These scores are not universal product rankings. The result reflects one decision set and an untuned Laya configuration. If you fine-tune Laya on stable labels, test that checkpoint separately with a held-out set.&lt;/p&gt;

&lt;h2&gt;
  
  
  Context and language coverage
&lt;/h2&gt;

&lt;p&gt;Long inputs can contain the clause that changes a decision. The comparison lists Jev at 64k tokens and the tested Laya checkpoint at 512 tokens per question. Laya’s official site differentiates its English and multilingual checkpoints, so context length is version-specific. Measure tokenization using the exact model and input format you plan to ship.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0ib1qs2e0yb307pdogih.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0ib1qs2e0yb307pdogih.webp" alt="Long decision context and a bounded input window" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Laya’s multilingual checkpoint is a reason to evaluate it when English is not enough, but language coverage does not guarantee equal quality in every language. Test names, scripts, code-switching, and domain vocabulary separately.&lt;/p&gt;

&lt;h2&gt;
  
  
  Accuracy, confidence, and latency
&lt;/h2&gt;

&lt;p&gt;Accuracy measures how often a label is correct. Calibration measures whether a confidence such as 0.8 corresponds to roughly 80% correctness across similar cases. A common calibration summary is expected calibration error: sum each confidence bin’s share of examples multiplied by the absolute gap between its accuracy and average confidence.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzd1kq7oyss8eawqzkra4.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzd1kq7oyss8eawqzkra4.webp" alt="Reliability diagram showing confidence calibration" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;JevBench gives Jev the higher calibration score in its tested configuration. Laya’s documentation describes temperature fitting for task-specific calibration. Choose thresholds on production-like validation data, and report coverage with accuracy: a model can raise accuracy on answered cases by abstaining more.&lt;/p&gt;

&lt;p&gt;Laya reports tens-of-milliseconds inference on a Tesla T4. The comparison also lists JevBench’s Laya CPU run at 0.79 seconds raw (1.72 adjusted), versus Jev’s hosted median of 0.65 seconds. These use different hardware and serving paths, so they are not a like-for-like latency test. Measure your own network, concurrency, cold starts, and p95.&lt;/p&gt;

&lt;p&gt;For cost, compare API usage with GPU capacity, operations, monitoring, fine-tuning, and idle time. Self-hosting may be cheap when a GPU is already busy; dedicated capacity and maintenance can change the total.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fey9chsjjwspueuo8rjkg.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fey9chsjjwspueuo8rjkg.webp" alt="Illustrative hosted and self-hosted cost curves" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical evaluation plan
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Freeze the schema, labels, tie rules, and meaning of “unknown”.&lt;/li&gt;
&lt;li&gt;Build a held-out set of routine, ambiguous, multilingual, long-context, and high-risk cases.&lt;/li&gt;
&lt;li&gt;Compare per-class F1, confusion pairs, calibration, coverage by threshold, and abstention.&lt;/li&gt;
&lt;li&gt;Measure p50/p95 latency, throughput, cold starts, failures, and truncation.&lt;/li&gt;
&lt;li&gt;Include annotation, GPU utilization, hosting, monitoring, maintenance, and API spend in total cost.&lt;/li&gt;
&lt;li&gt;Run both systems in shadow mode against human-reviewed outcomes before enabling consequential actions.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Start with Jev when you need zero-shot decisions and managed serving. Evaluate Laya when open weights, data residency, multilingual routing, or fine-tuning are central. Related guides: &lt;a href="https://dev.to/jev-vs-laya"&gt;Jev vs Laya&lt;/a&gt;, &lt;a href="https://dev.to/jev-vs-openjev"&gt;Jev vs OpenJev&lt;/a&gt;, and &lt;a href="https://dev.to/jev-vs-djev"&gt;Jev vs djev&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jev vs Laya FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is Laya a drop-in replacement for Jev?
&lt;/h3&gt;

&lt;p&gt;Not in every workflow. Laya requires you to choose and serve a checkpoint, and production quality may depend on fine-tuning and calibration. Jev is a managed API with a different data and operations boundary.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which model is faster?
&lt;/h3&gt;

&lt;p&gt;It depends on hardware and request location. A CPU benchmark is not comparable to a Tesla T4 claim. Include network time and p95 latency in your own test.&lt;/p&gt;

&lt;h3&gt;
  
  
  Which is better for multilingual use?
&lt;/h3&gt;

&lt;p&gt;Laya offers a multilingual checkpoint; the Jev comparison also lists 100+ languages but notes lower reliability outside English. Test your actual language and domain.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I automate from a confidence threshold?
&lt;/h3&gt;

&lt;p&gt;Only after checking calibration and error costs on held-out data. Track false accepts, false rejects, coverage, and human review load.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources and update note
&lt;/h2&gt;

&lt;p&gt;Benchmark figures come from the &lt;a href="https://thejevai.com/jev-vs-laya" rel="noopener noreferrer"&gt;Jev vs Laya comparison and JevBench v1.3.0&lt;/a&gt;, checked September 22, 2026. Checkpoint details are described by the &lt;a href="https://laya.convaiinnovations.com/" rel="noopener noreferrer"&gt;Laya project&lt;/a&gt; and its &lt;a href="https://github.com/NandhaKishorM/laya" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;. Models and figures can change; verify current versions, limits, and prices before production use.&lt;/p&gt;

</description>
      <category>jev</category>
      <category>jevai</category>
    </item>
    <item>
      <title>How to Use the Jev AI Model: A Step-by-Step Developer Guide</title>
      <dc:creator>James Li</dc:creator>
      <pubDate>Tue, 22 Sep 2026 07:58:30 +0000</pubDate>
      <link>https://dev.to/dx_p_42a4bff1cec043fb3017/how-to-use-the-jev-ai-model-a-step-by-step-developer-guide-30b4</link>
      <guid>https://dev.to/dx_p_42a4bff1cec043fb3017/how-to-use-the-jev-ai-model-a-step-by-step-developer-guide-30b4</guid>
      <description>&lt;p&gt;If you are searching for &lt;strong&gt;how to use the Jev AI model&lt;/strong&gt;, start with one practical idea: Jev is designed to make decisions that software can consume, not to replace a chat interface. You provide a piece of state, ask one or more typed questions, and receive structured answers with probability signals.&lt;/p&gt;

&lt;p&gt;That makes Jev useful for tasks such as classifying support tickets, routing requests, scoring risk, deciding whether an action needs review, or selecting the next model in an agent workflow. The &lt;a href="https://thejevai.com/" rel="noopener noreferrer"&gt;Jev AI homepage&lt;/a&gt; describes this as a decision layer for software teams.&lt;/p&gt;

&lt;p&gt;This guide shows the complete path from the first experiment to a server-side API integration.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Jev AI model does
&lt;/h2&gt;

&lt;p&gt;Traditional language models are usually asked to generate text. Jev focuses on a narrower and more operational question: &lt;strong&gt;given this state, what structured decision should the application use next?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The basic interaction has three parts:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;State&lt;/strong&gt; — the text, JSON object, or array of text that provides context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Questions&lt;/strong&gt; — the decisions your application needs answered.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Answers&lt;/strong&gt; — typed results that your code can branch on, sort, route, or review.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For example, a support workflow could send a ticket as state and ask Jev to determine its department, urgency, and whether a person should review it. These questions can be evaluated together against the same state.&lt;/p&gt;

&lt;p&gt;Jev is most useful when the answer space is clear. If you need an open-ended explanation, a creative draft, or a long conversational response, a generative LLM is usually a better fit. Jev can still sit before or after an LLM to control routing and execution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Choose one decision with a clear outcome
&lt;/h2&gt;

&lt;p&gt;The first step in learning how to use Jev AI is not writing a prompt. It is defining the decision your product needs to make.&lt;/p&gt;

&lt;p&gt;Good first decisions are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which team should receive this support request?&lt;/li&gt;
&lt;li&gt;Is this request urgent enough to enter a priority queue?&lt;/li&gt;
&lt;li&gt;Does this proposed tool call need human approval?&lt;/li&gt;
&lt;li&gt;How severe is the issue on a defined scale?&lt;/li&gt;
&lt;li&gt;Which model should handle the next step?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Avoid starting with a vague request such as “understand this customer.” Turn it into a bounded question like “Which approved support team should handle this ticket?” A narrow question is easier to evaluate, easier to test against historical examples, and safer to connect to application logic.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Prepare the state
&lt;/h2&gt;

&lt;p&gt;State is the context every question reads. Jev currently accepts three useful input shapes:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9t125rrii5gakhrt7h66.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9t125rrii5gakhrt7h66.webp" alt="Jev AI state inputs flowing into a decision function" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Text state
&lt;/h3&gt;

&lt;p&gt;Use a string for a message, ticket, email, or short document.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"My payout has failed three times and I need help before payroll runs tomorrow."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  JSON object state
&lt;/h3&gt;

&lt;p&gt;Use an object when the decision depends on several named fields. This keeps important context explicit instead of hiding everything in one long prompt.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"My payout has failed three times."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"account_age_days"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;420&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"recent_failures"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"requested_action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"retry payout"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Array state
&lt;/h3&gt;

&lt;p&gt;Use an array when the context is naturally made up of multiple text items, such as several messages or notes. Keep the array focused on the evidence needed for the decision.&lt;/p&gt;

&lt;p&gt;Do not send more data than the question needs. Smaller, relevant state makes the workflow easier to understand and helps you identify which evidence influenced an answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Select the right question type
&lt;/h2&gt;

&lt;p&gt;Jev provides three core question types. Choose the type that matches the shape of the decision rather than trying to force every task into a yes-or-no prompt.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo0mp2kydc935d6k4cva0.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo0mp2kydc935d6k4cva0.webp" alt="Hand-drawn diagram of Jev AI Choice, Score, and Noul question types" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Question type&lt;/th&gt;
&lt;th&gt;Best for&lt;/th&gt;
&lt;th&gt;Typical result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Choice&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Classification or routing&lt;/td&gt;
&lt;td&gt;One option from a predefined set, plus probabilities and confidence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Score&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Severity, quality, or intensity&lt;/td&gt;
&lt;td&gt;A position on an ordered rubric, plus probabilities and confidence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;Noul&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;A focused yes-or-no judgment&lt;/td&gt;
&lt;td&gt;A 0–1 probability that the answer is yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Use Choice for classification
&lt;/h3&gt;

&lt;p&gt;Choice is appropriate when the application has a finite set of destinations. For example, billing, technical, and sales can be the approved teams for a ticket.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use Score for a spectrum
&lt;/h3&gt;

&lt;p&gt;Score is useful when there are ordered levels, such as low, medium, and high severity. Define the levels from low to high. The returned score is probability-weighted, so it can express a position between the named levels.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use Noul for a specific proposition
&lt;/h3&gt;

&lt;p&gt;Noul is a good fit for questions such as “Does this request contain an urgent deadline?” or “Should a human review this action?” The result is a probability from 0 to 1 that the proposition is true.&lt;/p&gt;

&lt;p&gt;You can mix &lt;code&gt;Choice&lt;/code&gt;, &lt;code&gt;Score&lt;/code&gt;, and &lt;code&gt;Noul&lt;/code&gt; in one request. Give every question a stable key, because the same key is used to find its answer in the response.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Validate the decision in the Playground
&lt;/h2&gt;

&lt;p&gt;Before adding credentials or production code, test the question with real examples in the &lt;a href="https://thejevai.com/playground" rel="noopener noreferrer"&gt;Jev AI Playground&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1a108xkolzih926ikyqg.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1a108xkolzih926ikyqg.webp" alt="Jev AI Playground workflow from state and questions to structured results" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use this short validation loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Paste a representative state.&lt;/li&gt;
&lt;li&gt;Add one well-scoped question.&lt;/li&gt;
&lt;li&gt;Run the decision and inspect the answer and probability.&lt;/li&gt;
&lt;li&gt;Repeat with clear examples, edge cases, and ambiguous cases.&lt;/li&gt;
&lt;li&gt;Rewrite the instructions or criteria if the result is difficult to interpret.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The goal is not to make a single example look correct. Build a small evaluation set that represents the traffic your application will actually receive. Include cases where the correct action is to pause, ask for more information, or send the item to human review.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Call the Jev API from your server
&lt;/h2&gt;

&lt;p&gt;Once the question is useful, create an API key and call the production endpoint from a server-side service. The current endpoint is:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2aiogutntcgdwz3oi192.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2aiogutntcgdwz3oi192.webp" alt="Server-side Jev AI API request and structured response flow" width="800" height="450"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST https://thejevai.com/v1/systemone
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Send the API key as a Bearer token and include &lt;code&gt;state&lt;/code&gt;, &lt;code&gt;model&lt;/code&gt;, and &lt;code&gt;questions&lt;/code&gt; in the JSON body. The current flagship model name in the API reference is &lt;code&gt;jev-latest&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://thejevai.com/v1/systemone &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$JEV_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "jev-latest",
    "state": {
      "message": "My payout has failed three times.",
      "days_waiting": 3
    },
    "questions": {
      "department": {
        "type": "choice",
        "instructions": "Which team should handle this request?",
        "criteria": {
          "billing": "Payments, invoices, refunds, or payouts",
          "technical": "Bugs, outages, or integration failures",
          "sales": "Pricing, upgrades, or new accounts"
        }
      },
      "needs_human": {
        "type": "noul",
        "instructions": "Does this request require human review?"
      }
    }
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Keep &lt;code&gt;JEV_API_KEY&lt;/code&gt; in a server-side environment variable. Do not put it in browser code, a public article, a client bundle, or a repository.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Use the structured response in application code
&lt;/h2&gt;

&lt;p&gt;The response contains an answer for each question key. A simplified response may look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"jev-1.13.0"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"answers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"department"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"choice"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"choice"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"billing"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"probabilities"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"billing"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.94&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"technical"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.05&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"sales"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.01&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"confidence"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.92&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"needs_human"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"noul"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"noul"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.87&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"usage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"input_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;180&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"output_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your application should decide what happens next. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;department&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;department&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;choice&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;humanProbability&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;needs_human&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;noul&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;humanProbability&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;queueForReview&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ticket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;routeToTeam&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ticket&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;department&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important boundary is that Jev returns a signal while your code owns the action. Jev should not silently delete data, send a payment, publish content, or call a sensitive tool without an application-level permission check.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to use probability and confidence safely
&lt;/h2&gt;

&lt;p&gt;Probability and confidence are useful for routing, ranking, and escalation, but they are not a guarantee that a business decision is correct. Treat them as signals that help your system choose a path.&lt;/p&gt;

&lt;p&gt;A practical policy might be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;high probability and low risk → continue automatically;&lt;/li&gt;
&lt;li&gt;medium probability or an unfamiliar case → collect more context;&lt;/li&gt;
&lt;li&gt;high-risk action or low confidence → require human approval;&lt;/li&gt;
&lt;li&gt;unsupported or malformed input → return an error or use a safe fallback.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Choose thresholds using historical examples, then monitor false positives and false negatives after launch. A threshold that works for support routing may be inappropriate for payments, account access, or destructive tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Production checklist
&lt;/h2&gt;

&lt;p&gt;Before shipping a Jev workflow, verify the following:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqckhvpynuy0y081wngd3.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fqckhvpynuy0y081wngd3.webp" alt="Jev AI production decision flow with routing, review, and safety paths" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The decision has a defined answer space.&lt;/li&gt;
&lt;li&gt;The state contains the evidence needed by the question and little unrelated data.&lt;/li&gt;
&lt;li&gt;Every question has one clear purpose.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Choice&lt;/code&gt; criteria are mutually understandable and complete.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Score&lt;/code&gt; levels are ordered from low to high.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Noul&lt;/code&gt; instructions describe one testable proposition.&lt;/li&gt;
&lt;li&gt;The API key is stored server-side.&lt;/li&gt;
&lt;li&gt;Timeouts, retries, and API errors have a safe fallback.&lt;/li&gt;
&lt;li&gt;Probability and confidence thresholds have been tested on historical cases.&lt;/li&gt;
&lt;li&gt;High-impact actions still require application permissions or human review.&lt;/li&gt;
&lt;li&gt;Logs record the input version, question version, result, and final action without exposing secrets.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the current request fields, response shapes, input boundaries, and error behavior, use the &lt;a href="https://thejevai.com/docs" rel="noopener noreferrer"&gt;Jev AI API documentation&lt;/a&gt; as the source of truth.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common questions about using Jev AI
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is Jev AI a chatbot?
&lt;/h3&gt;

&lt;p&gt;No. Jev is intended for typed decisions that software can consume. It can be part of a larger AI product, but it is not primarily a chat transcript generator.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I ask multiple questions in one request?
&lt;/h3&gt;

&lt;p&gt;Yes. Multiple questions can use the same state and are evaluated in parallel. This is useful when one workflow needs classification, scoring, and a safety judgment together.&lt;/p&gt;

&lt;h3&gt;
  
  
  Should Jev replace my LLM?
&lt;/h3&gt;

&lt;p&gt;Not automatically. Use Jev for bounded decisions and use a generative model for writing, summarization, or open-ended reasoning. In many systems, Jev decides which model or tool should run next.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I send images, audio, or video as state?
&lt;/h3&gt;

&lt;p&gt;The current API documentation lists text, JSON objects, and arrays of text as supported state inputs. Images, audio, and video are not listed as supported direct inputs, so convert or summarize those sources in your application before asking a decision question.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final takeaway
&lt;/h2&gt;

&lt;p&gt;The simplest way to use the Jev AI model is to start with one low-risk decision: prepare the smallest useful state, define a typed question, test it with representative examples, and connect the structured result to code. Once that loop is reliable, add parallel questions, probability-based review, model routing, and permission checks around it.&lt;/p&gt;

&lt;p&gt;Jev is most valuable when the application needs a repeatable decision with a clear next action. Keep the final action in your code, keep credentials on the server, and use evaluation data to decide where automation should stop and human judgment should begin.&lt;/p&gt;

</description>
      <category>jevai</category>
      <category>jevmodel</category>
    </item>
    <item>
      <title>How to Build More Reliable AI Agents with Jev AI: Routing, Guardrails, and Human Review</title>
      <dc:creator>James Li</dc:creator>
      <pubDate>Tue, 22 Sep 2026 07:57:49 +0000</pubDate>
      <link>https://dev.to/dx_p_42a4bff1cec043fb3017/how-to-build-more-reliable-ai-agents-with-jev-ai-routing-guardrails-and-human-review-kho</link>
      <guid>https://dev.to/dx_p_42a4bff1cec043fb3017/how-to-build-more-reliable-ai-agents-with-jev-ai-routing-guardrails-and-human-review-kho</guid>
      <description>&lt;p&gt;The hard problem in an AI agent is often not “can the model answer?” It is &lt;strong&gt;whether the agent should act in the current state&lt;/strong&gt;. An agent may need to choose a model, call a tool, request more information, pause, or hand the task to a person.&lt;/p&gt;

&lt;p&gt;When every decision belongs to one generative LLM, planning, execution, and safety review become tangled. The model may produce a plausible explanation without providing a stable control signal, and it becomes difficult to tell whether a failure came from understanding, authorization, a tool, or a threshold.&lt;/p&gt;

&lt;p&gt;Jev AI can act as an independent decision layer for an agent: receive the current State, ask small Choice, Score, or Noul questions, and return probability and confidence signals to orchestration code. &lt;strong&gt;The agent executes, Jev judges, and rules plus people provide the safety net.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This guide presents a practical agent architecture for model routing, pre-tool guardrails, risk scoring, human review, and production evaluation.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Core principle:&lt;/strong&gt; Do not let one model own understanding, decision, authorization, and execution at the same time. Break judgment into testable questions and keep the final action in constrained code.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Why agents need a decision layer&lt;/li&gt;
&lt;li&gt;Where Jev AI fits&lt;/li&gt;
&lt;li&gt;Pattern 1: route the model before calling&lt;/li&gt;
&lt;li&gt;Pattern 2: guard tool calls&lt;/li&gt;
&lt;li&gt;Pattern 3: use probability to trigger review&lt;/li&gt;
&lt;li&gt;Designing agent State and questions&lt;/li&gt;
&lt;li&gt;Security and evaluation checklist&lt;/li&gt;
&lt;li&gt;Frequently asked questions&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why agents need a decision layer
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8tk357l3xdjngy2up2p6.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8tk357l3xdjngy2up2p6.webp" alt="An AI agent architecture separating understanding, decision, and execution" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Image: Separating judgment from execution makes routing, guardrails, and review policies easier to test.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Generated text is not authorization
&lt;/h3&gt;

&lt;p&gt;An LLM can generate the sentence “I will delete this file,” but that sentence should not have deletion authority. The real action must pass through application code, permissions, and tool-parameter validation.&lt;/p&gt;

&lt;p&gt;Jev’s result should not be treated as authorization either. It can judge whether the user explicitly requested deletion or whether a request looks high risk, but deterministic rules and permission systems should still decide whether execution is allowed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agents contain many small decisions
&lt;/h3&gt;

&lt;p&gt;A single agent turn may need to:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;classify task type and difficulty;&lt;/li&gt;
&lt;li&gt;choose a fast model or a deeper model;&lt;/li&gt;
&lt;li&gt;decide whether an external tool is needed;&lt;/li&gt;
&lt;li&gt;validate the tool name, arguments, and target resource;&lt;/li&gt;
&lt;li&gt;score risk and decide whether confirmation is required;&lt;/li&gt;
&lt;li&gt;continue, retry, degrade, or pause;&lt;/li&gt;
&lt;li&gt;record the result and update context.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Not all of these need long-form reasoning. Breaking them into atomic questions is often easier to maintain than continuously expanding a system prompt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Jev AI fits
&lt;/h2&gt;

&lt;p&gt;A clear layered architecture can look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;user request
     ↓
state builder  ──► permissions and hard rules
     ↓
Jev decision layer
     ├─ route model
     ├─ score risk
     ├─ check intent
     └─ request human review
     ↓
orchestrator
     ├─ call LLM
     ├─ call tool
     └─ ask user
     ↓
validator + audit log
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Jev does not need to know the entire internal implementation of the agent. It needs only the State and questions required for the current judgment. Models, tools, and business policies can evolve independently.&lt;/p&gt;

&lt;p&gt;If State, Choice, Score, and Noul are new to you, start with the &lt;a href="https://thejevai.com/blog/jev-ai-api-tutorial" rel="noopener noreferrer"&gt;Jev AI API tutorial&lt;/a&gt;. For the division of labor between Jev and generative LLMs, read &lt;a href="https://thejevai.com/blog/jev-ai-vs-llm" rel="noopener noreferrer"&gt;Jev AI vs LLMs&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pattern 1: route the model before calling
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F207tknac37l9c5eeuz16.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F207tknac37l9c5eeuz16.webp" alt="Jev AI selecting a model path for an agent" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An agent should not send every request to the most expensive and slowest model. Use Jev to make small judgments such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Does the task require complex reasoning?&lt;/li&gt;
&lt;li&gt;Does it require a tool call?&lt;/li&gt;
&lt;li&gt;Does it involve sensitive data or a high-impact action?&lt;/li&gt;
&lt;li&gt;Can a short answer satisfy the request?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  A practical routing strategy
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;decision&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;jev&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;system_one&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;request&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;user_message&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;conversation_summary&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;summary&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;available_tools&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;tool_catalog&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;questions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;difficulty&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Score&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rubric&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;simple&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;moderate&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;complex&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;needs_tool&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Noul&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Does this request require a tool call?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sensitive&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nc"&gt;Noul&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Does this request involve sensitive data or action?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The orchestrator can route simple work to a fast model, complex work to a stronger model, and sensitive work to a guardrail flow. Jev suggests a path; it does not grant final permission.&lt;/p&gt;

&lt;h3&gt;
  
  
  Routing mistakes to avoid
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Do not let one score decide every model choice.&lt;/li&gt;
&lt;li&gt;Do not treat a probability threshold as a security proof.&lt;/li&gt;
&lt;li&gt;Do not include an untested full tool catalog in every State.&lt;/li&gt;
&lt;li&gt;Do not skip authorization because one judgment has high confidence.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Pattern 2: guard tool calls
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwz029ph8x4mqw89ot9ay.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwz029ph8x4mqw89ot9ay.webp" alt="A safety gate stopping a high-risk agent tool call" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Image: Tool calls should pass intent checks, parameter validation, permissions, and risk paths before execution.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;For an agent, the most important guardrail is often not “reject all dangerous content.” It is ensuring that a side-effecting action has enough context, valid parameters, and explicit confirmation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Four layers of defense
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Layer 1: hard rules
&lt;/h4&gt;

&lt;p&gt;Check the user, role, resource ownership, amount limits, allowlisted tools, and parameter types first. If a hard rule fails, do not call Jev or an LLM; reject the action or route it to a person.&lt;/p&gt;

&lt;h4&gt;
  
  
  Layer 2: intent judgment
&lt;/h4&gt;

&lt;p&gt;Use Noul to judge whether the user explicitly requested the action. “Did the user explicitly ask to delete this project?” is different from “Did the user ask how deletion works?”&lt;/p&gt;

&lt;h4&gt;
  
  
  Layer 3: risk scoring
&lt;/h4&gt;

&lt;p&gt;Use Score for blast radius, reversibility, sensitivity, and external visibility. Payments, permission changes, bulk deletion, and external messaging should have higher review thresholds.&lt;/p&gt;

&lt;h4&gt;
  
  
  Layer 4: confirmation and audit
&lt;/h4&gt;

&lt;p&gt;High-risk actions should show the target, parameters, and consequences to the user, request explicit confirmation, and record the decision, version, actor, and tool result. Revalidate parameters after confirmation; do not treat an old confirmation as permanent authorization.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pattern 3: use probability to trigger review
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2bsbijgske3ln52gwsqa.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2bsbijgske3ln52gwsqa.webp" alt="Probability signals sending an agent to automation or human review" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Jev’s probability and confidence are most useful for choosing the level of automation, not replacing human judgment. A system can create three paths:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Result state&lt;/th&gt;
&lt;th&gt;Handling&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;High confidence, low risk&lt;/td&gt;
&lt;td&gt;Continue automatically and log the result&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Near a threshold or missing context&lt;/td&gt;
&lt;td&gt;Ask for more information or sample for review&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;High risk or low confidence&lt;/td&gt;
&lt;td&gt;Pause the agent and route to a person&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Set thresholds by action, not by model globally. Automatic ticket classification may tolerate a lower threshold; refunds, deletion, permission changes, and external messages need higher thresholds and explicit confirmation.&lt;/p&gt;

&lt;h3&gt;
  
  
  What should a reviewer see?
&lt;/h3&gt;

&lt;p&gt;A useful review interface should show:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;the original State or a redacted summary;&lt;/li&gt;
&lt;li&gt;the action the agent wants to take and the tool parameters;&lt;/li&gt;
&lt;li&gt;Jev’s questions, options, probabilities, and confidence;&lt;/li&gt;
&lt;li&gt;hard-rule and authorization results;&lt;/li&gt;
&lt;li&gt;controls to approve, reject, edit, or request more information.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not show only “AI recommendation: approve.” Reviewers need the facts and boundaries behind the judgment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Designing agent State and questions
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fce7hbe3q605cra7awb77.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fce7hbe3q605cra7awb77.webp" alt="The relationship between agent State, questions, and audit results" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Put only decision-relevant facts in State
&lt;/h3&gt;

&lt;p&gt;An agent’s long conversation may contain a lot of history, but each Jev question rarely needs all of it. Extract a task summary, current tool, resource details, user permissions, and the latest result in code before building a minimal State.&lt;/p&gt;

&lt;p&gt;A small State reduces cost, limits sensitive-data exposure, and makes the judgment easier to reproduce.&lt;/p&gt;

&lt;h3&gt;
  
  
  One question, one judgment
&lt;/h3&gt;

&lt;p&gt;Do not write a super-question such as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Is this safe, does it need confirmation, which model should we use, and are the parameters valid?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Split it into questions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;intent_explicit&lt;/code&gt;: Did the user explicitly request the action?&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;parameter_valid&lt;/code&gt;: Do the arguments satisfy the tool contract?&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;risk_level&lt;/code&gt;: What is the risk level of the action?&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;needs_human&lt;/code&gt;: Is human review required now?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Code can handle each result independently, and each question can have its own counterexamples.&lt;/p&gt;

&lt;h3&gt;
  
  
  Version the decision
&lt;/h3&gt;

&lt;p&gt;Record the question definitions, option descriptions, rubric, model version, and threshold version. Without those fields, the team cannot explain why a past action was allowed or blocked after policies change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security and evaluation checklist
&lt;/h2&gt;

&lt;p&gt;Before production, verify that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The agent cannot bypass hard rules to call a high-impact tool.&lt;/li&gt;
&lt;li&gt;Every side-effecting tool has an allowlist, parameter validation, and authorization check.&lt;/li&gt;
&lt;li&gt;Jev probabilities are signals; critical actions still have deterministic or human fallback.&lt;/li&gt;
&lt;li&gt;Review paths do not drop tasks because of a timeout or service outage.&lt;/li&gt;
&lt;li&gt;Every action is linked to input, questions, model, thresholds, and actor.&lt;/li&gt;
&lt;li&gt;Tests include normal, ambiguous, unauthorized, prompt-injection, and misleading inputs.&lt;/li&gt;
&lt;li&gt;Chinese, English, specialist terms, and missing context are covered.&lt;/li&gt;
&lt;li&gt;Routing or guardrail questions can be changed without rewriting the whole agent.&lt;/li&gt;
&lt;li&gt;Fallbacks are explicit: pause, ask for confirmation, hand off, or use a static rule.&lt;/li&gt;
&lt;li&gt;Community examples in the &lt;a href="https://thejevai.com/showcase" rel="noopener noreferrer"&gt;Jev AI Showcase&lt;/a&gt; are treated as inspiration, not as security proof.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The current Jev input boundary is text, JSON objects, and arrays of text. Images, audio, and video are not direct inputs. Non-English and domain-specific data should be evaluated with your own samples rather than treated as covered by product positioning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Can Jev guarantee that an agent will not make mistakes?
&lt;/h3&gt;

&lt;p&gt;No. Jev provides probability and confidence signals, not a business-accuracy or safety guarantee. Reliable agents still need permissions, hard rules, parameter validation, human review, and audit logs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why not let the LLM decide whether something is safe?
&lt;/h3&gt;

&lt;p&gt;An LLM can help with understanding and explanation, but it should not be the only owner of final authorization. Separating small judgments makes thresholds, counterexamples, and failure paths independently testable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can high confidence skip human confirmation?
&lt;/h3&gt;

&lt;p&gt;For low-risk actions, perhaps. For high-impact actions, confidence alone is not enough. Payments, deletion, permission changes, and external communication should combine model signals with rules, authorization, and explicit confirmation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is Jev right for every agent?
&lt;/h3&gt;

&lt;p&gt;Not necessarily. If an agent mainly writes and converses, an LLM remains the center. If it needs frequent routing, tool selection, risk scoring, and escalation, Jev is a strong candidate for the decision layer.&lt;/p&gt;

&lt;h3&gt;
  
  
  How should I start?
&lt;/h3&gt;

&lt;p&gt;Test one low-risk judgment in the &lt;a href="https://thejevai.com/playground" rel="noopener noreferrer"&gt;Jev AI Playground&lt;/a&gt;, then follow the &lt;a href="https://thejevai.com/blog/jev-ai-api-tutorial" rel="noopener noreferrer"&gt;API tutorial&lt;/a&gt; for server-side integration. Once the basic flow works, add routing and guardrails to your orchestrator.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: make agent actions explainable
&lt;/h2&gt;

&lt;p&gt;Reliable agents do not need more permissions; they need better boundaries. Jev AI can make the hidden decisions around routing, tool use, escalation, and continuation explicit, while code and people keep control of the final action.&lt;/p&gt;

&lt;p&gt;Start with one low-risk tool, log every judgment and final action, and refine questions and thresholds from real failures. That is how Jev AI becomes a stable decision layer instead of another prompt that is difficult to audit.&lt;/p&gt;

</description>
      <category>jevai</category>
      <category>jevmodel</category>
      <category>jevapi</category>
    </item>
    <item>
      <title>Jev AI API Tutorial: Build Your First Structured Decision with Choice, Score, and Noul</title>
      <dc:creator>James Li</dc:creator>
      <pubDate>Tue, 22 Sep 2026 07:56:35 +0000</pubDate>
      <link>https://dev.to/dx_p_42a4bff1cec043fb3017/jev-ai-api-tutorial-build-your-first-structured-decision-with-choice-score-and-noul-13nl</link>
      <guid>https://dev.to/dx_p_42a4bff1cec043fb3017/jev-ai-api-tutorial-build-your-first-structured-decision-with-choice-score-and-noul-13nl</guid>
      <description>&lt;p&gt;If you have already tried the model in the &lt;a href="https://thejevai.com/playground" rel="noopener noreferrer"&gt;Jev AI Playground&lt;/a&gt;, the next step is usually to connect one real judgment to a server-side workflow: receive a ticket or message, define the questions your product needs answered, read probabilities and confidence, and let code choose routing, queueing, or human review.&lt;/p&gt;

&lt;p&gt;The Jev AI API is not primarily a chat request. Its central model is three clear inputs: &lt;strong&gt;State, Model, and Questions&lt;/strong&gt;. State describes the context, Questions describe the judgments, and the response returns typed results by question ID. This lets you place AI judgment inside existing functions, queues, and agent workflows instead of adding another chat surface.&lt;/p&gt;

&lt;p&gt;This tutorial covers the request shape, the choice between Choice, Score, and Noul, a minimal curl request, response handling, control flow, error boundaries, and a production checklist.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tutorial goal:&lt;/strong&gt; Build one low-risk support-ticket judgment and let a server decide whether to route it automatically or request a human review.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Understand the Jev request model&lt;/li&gt;
&lt;li&gt;State: provide context&lt;/li&gt;
&lt;li&gt;Questions: choose Choice, Score, or Noul&lt;/li&gt;
&lt;li&gt;Make your first Jev API request&lt;/li&gt;
&lt;li&gt;Read and handle the response&lt;/li&gt;
&lt;li&gt;Connect the result to application logic&lt;/li&gt;
&lt;li&gt;Production checklist&lt;/li&gt;
&lt;li&gt;Frequently asked questions&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Understand the Jev request model
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs4nkdrzelev6d1xe5640.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs4nkdrzelev6d1xe5640.webp" alt="Jev AI API request and response shape" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Image: State provides context, Questions describe the judgment, and the structured result returns to your service.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The basic idea can be written as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;state + model + questions
            ↓
typed answers + probabilities + confidence
            ↓
your application logic
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The current website documentation uses &lt;code&gt;POST https://thejevai.com/v1/systemone&lt;/code&gt; as the production request endpoint. A request has three core fields:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;state&lt;/code&gt;: a string, JSON object, or array of text;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;model&lt;/code&gt;: the model name, such as &lt;code&gt;typesafe/jev-1.13&lt;/code&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;questions&lt;/code&gt;: typed questions keyed by stable business IDs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Jev makes the judgment. Your application still owns authentication, input sanitization, thresholds, retries, logging, and the final action. For the broader product model, read the &lt;a href="https://thejevai.com/blog/jev-ai-introduction" rel="noopener noreferrer"&gt;Jev AI introduction&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  State: provide context
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Use a string for a simple case
&lt;/h3&gt;

&lt;p&gt;When every judgment is about one message, a string is the simplest state:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"The customer has tried to connect Stripe for three days."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This works well for support messages, alerts, form descriptions, user feedback, and short tickets.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use a JSON object for structured context
&lt;/h3&gt;

&lt;p&gt;When a judgment needs a ticket, order, and policy at the same time, use an object:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ticket"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"text"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"The customer has tried to connect Stripe for three days."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"channel"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"email"&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"customer"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"plan"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"pro"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"days_open"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"policy"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"same_day_escalation"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;An object makes shared facts available to every question, but it does not mean that every system field should be sent. Provide the minimum context needed for the judgment, and remove secrets, payment data, and unnecessary personal information before the request leaves your service.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use an array for related text
&lt;/h3&gt;

&lt;p&gt;Multiple messages, retrieval snippets, or conversation summaries can be represented as an array of text. Each item should be relevant to the current judgment; do not mix unrelated material into State and expect the model to ignore it perfectly.&lt;/p&gt;

&lt;p&gt;The current site documentation lists text, JSON objects, and arrays of text as supported inputs. Images, audio, and video are not currently direct inputs. Preprocess them with transcription, OCR, or another service first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Questions: choose Choice, Score, or Noul
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgd8bouyso01sil060fpo.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgd8bouyso01sil060fpo.webp" alt="Developer view of Choice, Score, and Noul" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Image: The question type determines the response shape and how the result enters control flow.&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Question type&lt;/th&gt;
&lt;th&gt;Use it for&lt;/th&gt;
&lt;th&gt;Main result&lt;/th&gt;
&lt;th&gt;Typical action&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Choice&lt;/td&gt;
&lt;td&gt;Pick one option from a set&lt;/td&gt;
&lt;td&gt;choice, probabilities, confidence&lt;/td&gt;
&lt;td&gt;Routing, classification, model selection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Score&lt;/td&gt;
&lt;td&gt;Rate against an ordered rubric&lt;/td&gt;
&lt;td&gt;score, legend, probabilities, confidence&lt;/td&gt;
&lt;td&gt;Ranking, priority, SLA&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Noul&lt;/td&gt;
&lt;td&gt;Judge whether a statement is true&lt;/td&gt;
&lt;td&gt;noul (yes probability)&lt;/td&gt;
&lt;td&gt;Blocking, confirmation, escalation&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Choice: classification and routing
&lt;/h3&gt;

&lt;p&gt;Use Choice when the answers can be listed: support teams, content categories, task types, and model tiers. Include &lt;code&gt;other&lt;/code&gt; or &lt;code&gt;none-of-the-above&lt;/code&gt; for unknown cases rather than forcing an incorrect match.&lt;/p&gt;

&lt;h3&gt;
  
  
  Score: ordered evaluation
&lt;/h3&gt;

&lt;p&gt;Use Score for severity, satisfaction, urgency, and risk levels. Levels should be ordered from low to high and have concrete descriptions. Do not define only “low, medium, high”; describe which business action each level should trigger.&lt;/p&gt;

&lt;h3&gt;
  
  
  Noul: one yes/no judgment
&lt;/h3&gt;

&lt;p&gt;Use Noul when the question can be rewritten as “Is this statement true?” Examples include “Is the customer explicitly asking for a refund?” and “Does this tool call require human confirmation?” Noul returns a yes probability and should not be confused with a separate confidence field.&lt;/p&gt;

&lt;p&gt;TypeSafe’s documentation emphasizes atomic questions. Instead of asking one question to determine department, priority, and risk, split them and combine their results in code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Make your first Jev API request
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1de9xyyxxwbm0kro6149.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1de9xyyxxwbm0kro6149.webp" alt="A minimal Jev AI API request from a server" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Image: Validate one small, well-scoped request before expanding to multiple questions.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Prepare an API key
&lt;/h3&gt;

&lt;p&gt;Store the API key in a server-side environment variable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;JEV_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"your-server-side-key"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Never put the real key in browser code, a client bundle, a public article, or a Git repository. For current key-management guidance, see the &lt;a href="https://thejevai.com/docs#api" rel="noopener noreferrer"&gt;Jev AI API documentation&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Send a minimal Noul request
&lt;/h3&gt;

&lt;p&gt;The following request follows the field shape currently shown in the official website docs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://thejevai.com/v1/systemone &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$JEV_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "typesafe/jev-1.13",
    "state": "A customer has tried to connect Stripe for three days.",
    "questions": {
      "urgent": {
        "type": "noul",
        "instructions": "Does this message express urgency?"
      }
    }
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Use the Playground to inspect a request
&lt;/h3&gt;

&lt;p&gt;If you are unsure about the complete JSON shape for Choice or Score, define a question in the &lt;a href="https://thejevai.com/playground" rel="noopener noreferrer"&gt;Playground&lt;/a&gt;, run it, and inspect the API request preview provided by the page. This is safer than guessing field names from an old example.&lt;/p&gt;

&lt;h2&gt;
  
  
  Read and handle the response
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbw482g4ucyvevq9rhxv5.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fbw482g4ucyvevq9rhxv5.webp" alt="Structured Jev AI responses entering application control flow" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Image: Validate the response and threshold before sending it to automation or review.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Read answers by question ID
&lt;/h3&gt;

&lt;p&gt;The response uses the question IDs you sent. Conceptually, it can look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"answers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"urgent"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"noul"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;0.87&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"usage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"input_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;42&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"output_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"elapsedMs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;214&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a response illustration, not a complete API schema. Use the &lt;a href="https://docs.typesafe.ai/api" rel="noopener noreferrer"&gt;official API reference&lt;/a&gt; for current fields, errors, and model versions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Treat probability as a signal, not a verdict
&lt;/h3&gt;

&lt;p&gt;Set different thresholds for different risk levels:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Low-risk ticket routing: &lt;code&gt;urgent &amp;gt; 0.8&lt;/code&gt; may enter an automatic queue.&lt;/li&gt;
&lt;li&gt;Medium-risk actions: &lt;code&gt;0.6–0.8&lt;/code&gt; may trigger sampling or a second judgment.&lt;/li&gt;
&lt;li&gt;High-risk actions: even a high probability should still pass authorization, hard rules, and human confirmation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Thresholds are your business policy, not a default Jev answer. Calibrate them against historical data and counterexamples.&lt;/p&gt;

&lt;h3&gt;
  
  
  Handle errors and timeouts
&lt;/h3&gt;

&lt;p&gt;A production client should handle non-2xx responses, timeouts, missing fields, unknown choices, model-version changes, and duplicate submissions. Retries need an idempotency strategy; a network failure must not repeat a payment, deletion, or permission change.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect the result to application logic
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxckv8q5bq0azuuyzwbkc.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxckv8q5bq0azuuyzwbkc.webp" alt="Jev AI API integration checklist for a production service" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Example: support-ticket priority flow
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;jev&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;system_one&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;typesafe/jev-1.13&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;state&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ticket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;questions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;needs_human&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;noul&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;instructions&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Does this ticket require a human review?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;answers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;needs_human&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;noul&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mf"&gt;0.85&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;queue_for_review&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ticket&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="nf"&gt;route_automatically&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ticket&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The example illustrates control flow. Use the current official docs and the request exported by the Playground for exact Python SDK, JavaScript SDK, or REST fields.&lt;/p&gt;

&lt;h3&gt;
  
  
  Design multi-question requests intentionally
&lt;/h3&gt;

&lt;p&gt;One State can support several questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;department&lt;/code&gt;: Choice for the handling team;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;urgency&lt;/code&gt;: Score for priority;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;needs_human&lt;/code&gt;: Noul for review.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each question should describe one judgment. The application combines results into actions, so changing a routing policy does not require rewriting the urgency or review question.&lt;/p&gt;

&lt;h2&gt;
  
  
  Production checklist
&lt;/h2&gt;

&lt;p&gt;Before shipping, confirm that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The API key exists only in server-side secrets or an environment manager.&lt;/li&gt;
&lt;li&gt;State has length limits, sensitive-data handling, and permission checks.&lt;/li&gt;
&lt;li&gt;Every question has a stable ID, a defined answer space, and clear instructions.&lt;/li&gt;
&lt;li&gt;The client validates HTTP status and response shape.&lt;/li&gt;
&lt;li&gt;Probability thresholds vary by risk level instead of using one global number.&lt;/li&gt;
&lt;li&gt;High-impact actions keep hard rules, authorization, and human review.&lt;/li&gt;
&lt;li&gt;The system records model version, question definition, input summary, and final action.&lt;/li&gt;
&lt;li&gt;Timeouts, retries, fallbacks, and human takeover paths are explicit.&lt;/li&gt;
&lt;li&gt;Chinese, English, specialist terms, and boundary cases are in the evaluation set.&lt;/li&gt;
&lt;li&gt;Usage and plan details are checked against the &lt;a href="https://thejevai.com/pricing" rel="noopener noreferrer"&gt;Jev AI pricing page&lt;/a&gt; and current API docs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For architecture and model selection, continue with &lt;a href="https://thejevai.com/blog/jev-ai-vs-llm" rel="noopener noreferrer"&gt;Jev AI vs LLMs&lt;/a&gt;. For agent routing and safety, read &lt;a href="https://thejevai.com/blog/jev-ai-agent-guardrails" rel="noopener noreferrer"&gt;Jev AI agent guardrails&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is the Jev AI API a chat endpoint?
&lt;/h3&gt;

&lt;p&gt;No. It accepts State and typed questions, then returns structured answers that an application can read. It can be a judgment node inside a chat system or agent, but it is not designed to generate chat paragraphs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can one request contain several questions?
&lt;/h3&gt;

&lt;p&gt;Yes. The website and TypeSafe documentation describe multiple questions evaluated against the same State. Keep each question independent, well-scoped, and keyed by a stable ID.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is the Noul value the same as confidence?
&lt;/h3&gt;

&lt;p&gt;No. Noul is the probability that the answer is yes. Choice and Score return their own probability and confidence fields. Always use the current API docs for the exact response shape.&lt;/p&gt;

&lt;h3&gt;
  
  
  Does Jev support images?
&lt;/h3&gt;

&lt;p&gt;The current website docs list text, JSON objects, and arrays of text as State inputs. Images, audio, and video are not direct inputs at this time. Preprocess them with OCR, transcription, or another model first.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I know whether the API fits my product?
&lt;/h3&gt;

&lt;p&gt;Start with one low-risk, measurable decision whose answer space is clear. Validate it in the &lt;a href="https://thejevai.com/playground" rel="noopener noreferrer"&gt;Playground&lt;/a&gt;, then test server-side behavior against historical data and edge cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The important part of a Jev AI integration is not making one model call. It is separating state, questions, results, and actions. State supplies facts, Choice/Score/Noul supplies the judgment, probabilities expose uncertainty, and application code owns the final move.&lt;/p&gt;

&lt;p&gt;Once this chain is documented, tested, and monitored, Jev AI can move from a Playground demo to a maintainable decision component inside your product.&lt;/p&gt;

</description>
      <category>jevai</category>
      <category>jevmodel</category>
      <category>jevapi</category>
    </item>
    <item>
      <title>What Is Jev AI? A Practical Guide to System One and Executable Decisions</title>
      <dc:creator>James Li</dc:creator>
      <pubDate>Tue, 22 Sep 2026 07:55:43 +0000</pubDate>
      <link>https://dev.to/dx_p_42a4bff1cec043fb3017/what-is-jev-ai-a-practical-guide-to-system-one-and-executable-decisions-40ni</link>
      <guid>https://dev.to/dx_p_42a4bff1cec043fb3017/what-is-jev-ai-a-practical-guide-to-system-one-and-executable-decisions-40ni</guid>
      <description>&lt;p&gt;When you add AI to an agent, support system, workflow, or SaaS product, the hardest part is often not asking a model to write a paragraph. The hard part is making small decisions consistently across many requests: Which team should receive this ticket? Does this action need human approval? How urgent is the task? Which model or tool should run next?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Jev AI is designed to turn those judgments into structured decisions that software can consume directly.&lt;/strong&gt; The Jev AI website positions Jev as a decision tool for software teams. TypeSafe’s official documentation describes it as its flagship model and first System One model: provide state and typed questions, then receive choices, scores, yes/no judgments, and probability signals.&lt;/p&gt;

&lt;p&gt;This guide explains what Jev AI is, how it works, where it fits alongside generative LLMs, how to connect its API, and which limitations should shape a production design.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Short version:&lt;/strong&gt; Jev AI is not a replacement for every conversational AI system. It is a decision layer inside your application for fast, repeatable classification, routing, scoring, and safety checks within a defined answer space.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Table of contents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;What is Jev AI&lt;/li&gt;
&lt;li&gt;How Jev AI works&lt;/li&gt;
&lt;li&gt;The three question types&lt;/li&gt;
&lt;li&gt;Why not ask an LLM for JSON&lt;/li&gt;
&lt;li&gt;Where Jev AI fits&lt;/li&gt;
&lt;li&gt;How to get started&lt;/li&gt;
&lt;li&gt;Probability, confidence, and limits&lt;/li&gt;
&lt;li&gt;Jev AI pricing&lt;/li&gt;
&lt;li&gt;Frequently asked questions&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What is Jev AI
&lt;/h2&gt;

&lt;h3&gt;
  
  
  A System One model for software
&lt;/h3&gt;

&lt;p&gt;Large language models are primarily designed to generate text for people to read. When software needs a narrow judgment, developers often add three extra steps: describe an output format in a prompt, parse a natural-language or JSON response, and then decide whether to execute an action. That approach is flexible, but it also brings formatting errors, extra text, and uncertainty into the application layer.&lt;/p&gt;

&lt;p&gt;Jev AI uses a different interface:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;State:&lt;/strong&gt; Send a ticket, message, form fields, or a JSON object as the decision context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Typed questions:&lt;/strong&gt; Define the exact kind of judgment the application needs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structured result:&lt;/strong&gt; Receive a result that code can branch on, sort, route, or store.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Read the &lt;a href="https://thejevai.com/" rel="noopener noreferrer"&gt;Jev AI homepage&lt;/a&gt; for the product positioning, and see the &lt;a href="https://docs.typesafe.ai/introduction" rel="noopener noreferrer"&gt;official TypeSafe introduction&lt;/a&gt; for the System One model and its primitives.&lt;/p&gt;

&lt;h3&gt;
  
  
  Jev AI versus generative LLMs
&lt;/h3&gt;

&lt;p&gt;Jev AI and generative LLMs are not simply competing versions of the same product. They are useful for different jobs: LLMs are strong at open-ended generation, explanation, and creative work; Jev is intended for repeated, bounded decisions that software needs to act on.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Jev AI&lt;/th&gt;
&lt;th&gt;Generative LLM&lt;/th&gt;
&lt;th&gt;Rules-based code&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Main output&lt;/td&gt;
&lt;td&gt;Choices, scores, yes/no judgments, probabilities, and confidence&lt;/td&gt;
&lt;td&gt;Text, code, or open-ended structured content&lt;/td&gt;
&lt;td&gt;Deterministic values from explicit conditions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best fit&lt;/td&gt;
&lt;td&gt;Classification, routing, priority, risk checks, tool gating&lt;/td&gt;
&lt;td&gt;Writing, summarization, Q&amp;amp;A, complex reasoning&lt;/td&gt;
&lt;td&gt;Stable conditions that do not require semantic interpretation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Interface&lt;/td&gt;
&lt;td&gt;State + typed questions&lt;/td&gt;
&lt;td&gt;Prompt + context&lt;/td&gt;
&lt;td&gt;If/else, rules engine, or query&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Uncertainty&lt;/td&gt;
&lt;td&gt;Exposed through probability and confidence signals&lt;/td&gt;
&lt;td&gt;Usually requires custom validation&lt;/td&gt;
&lt;td&gt;Usually no model probability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;System role&lt;/td&gt;
&lt;td&gt;A decision layer inside application logic&lt;/td&gt;
&lt;td&gt;Generation or reasoning center&lt;/td&gt;
&lt;td&gt;Deterministic execution layer&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Jev does not define your business policy for you. Your team still chooses the answer space, scoring rubric, thresholds, and human-review strategy.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Jev AI works
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flfb9e87dur8gsxumop2b.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Flfb9e87dur8gsxumop2b.webp" alt="Jev AI workflow from business state to an executable result" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Image: Several small questions can read the same state, while application code decides what happens next.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The workflow described in the official documentation can be summarized in four steps.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Prepare state
&lt;/h3&gt;

&lt;p&gt;State is the context that every question reads. It can be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a natural-language string such as a support message, alert, or user report;&lt;/li&gt;
&lt;li&gt;a JSON object containing a ticket, order, user tier, and policy fields;&lt;/li&gt;
&lt;li&gt;an array of text items such as related messages or retrieved snippets.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Questions should usually be framed around one shared state instead of placing an entire business process inside one huge prompt. The current documentation says Jev accepts text, JSON objects, and arrays of text; images, audio, and video are not currently supported as direct inputs.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Define typed questions
&lt;/h3&gt;

&lt;p&gt;Each question should own one specific judgment. Instead of asking, “Should we retain this customer and which team should follow up?”, split it into “Which team should handle this?” and “Does this require a retention workflow?” Smaller questions are easier to test and combine in code.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Read the structured response
&lt;/h3&gt;

&lt;p&gt;Jev returns answers using the question IDs you send. The returned fields depend on the question type: Choice can return a selected option, probabilities, and confidence; Score can return a score, legend, probabilities, and confidence; Noul returns a yes probability.&lt;/p&gt;

&lt;p&gt;Responses can also include runtime information such as &lt;code&gt;usage&lt;/code&gt; and &lt;code&gt;elapsedMs&lt;/code&gt;. &lt;code&gt;elapsedMs&lt;/code&gt; is end-to-end request time, not necessarily pure model inference time.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Let code decide the next action
&lt;/h3&gt;

&lt;p&gt;The model makes the judgment; your application makes the move. Code can call &lt;code&gt;route()&lt;/code&gt;, &lt;code&gt;queue()&lt;/code&gt;, &lt;code&gt;block()&lt;/code&gt;, &lt;code&gt;request_review()&lt;/code&gt;, or another LLM. This keeps thresholds, permissions, audit logs, and high-risk fallbacks under application control.&lt;/p&gt;

&lt;p&gt;To see the full flow, open the &lt;a href="https://thejevai.com/playground" rel="noopener noreferrer"&gt;Jev AI Playground&lt;/a&gt; and test a real but low-risk business state.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three question types
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9phchzbi0bo0243lgmym.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F9phchzbi0bo0243lgmym.webp" alt="Choice, Score, and Noul question types in Jev AI" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Image: The three primitives correspond to selecting, scoring, and judging whether a statement is true.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Choice: select from a defined set
&lt;/h3&gt;

&lt;p&gt;Choice is designed for classification and routing. Examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Should this support request go to billing, technical support, or another team?&lt;/li&gt;
&lt;li&gt;Is this content a tutorial, product update, or customer story?&lt;/li&gt;
&lt;li&gt;Should the request use a fast model, a deeper model, or a human workflow?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Define the options and their descriptions in advance. Keep an &lt;code&gt;other&lt;/code&gt; or &lt;code&gt;none-of-the-above&lt;/code&gt; option when unknown cases are possible so the model is not forced to select a bad match.&lt;/p&gt;

&lt;h3&gt;
  
  
  Score: rate against an ordered rubric
&lt;/h3&gt;

&lt;p&gt;Score fits severity, satisfaction, priority, and risk levels. You can define levels from “no action needed” to “immediate escalation” and use Jev’s probability-weighted result to rank a queue.&lt;/p&gt;

&lt;p&gt;The rubric should be concrete. Instead of only saying “judge urgency,” describe the time requirement, customer impact, and operational consequence for each level. That makes the score more useful in SLAs and prioritization logic.&lt;/p&gt;

&lt;h3&gt;
  
  
  Noul: judge whether a statement is true
&lt;/h3&gt;

&lt;p&gt;Noul is for binary judgments such as “Is the customer explicitly asking for a refund?” or “Should this tool call require human confirmation?” It returns a yes probability between 0 and 1, not a second confidence field.&lt;/p&gt;

&lt;p&gt;When a conclusion contains several independent conditions, split it into multiple Noul questions and combine the results in code. This is easier to evaluate than asking one question to handle facts, risk, and action at the same time.&lt;/p&gt;

&lt;p&gt;Read the &lt;a href="https://thejevai.com/docs#questions" rel="noopener noreferrer"&gt;Jev AI question documentation&lt;/a&gt; and the &lt;a href="https://docs.typesafe.ai/api" rel="noopener noreferrer"&gt;TypeSafe API documentation&lt;/a&gt; for current fields and examples.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why not ask an LLM for JSON
&lt;/h2&gt;

&lt;p&gt;Asking an LLM to return JSON is still a useful engineering pattern. Jev AI adds value when the decision itself has a known shape and must be repeated reliably.&lt;/p&gt;

&lt;h3&gt;
  
  
  The answer boundary is explicit
&lt;/h3&gt;

&lt;p&gt;Choice, Score, and Noul represent different decision semantics. The developer defines the answer space first, so application code does not need to infer intent from a paragraph.&lt;/p&gt;

&lt;h3&gt;
  
  
  One state can support multiple questions
&lt;/h3&gt;

&lt;p&gt;A support ticket can be evaluated for department, urgency, and refund intent in the same request. The official documentation says multiple questions are evaluated against the same state in parallel, which avoids chaining separate calls simply to split a decision.&lt;/p&gt;

&lt;h3&gt;
  
  
  Probability signals can participate in control flow
&lt;/h3&gt;

&lt;p&gt;When the result is clear enough, code can route automatically. When it is close to a threshold or the action is risky, the system can request human review, ask for more information, or call a stronger model. This lets automation level change with the signal instead of treating every output as equally safe.&lt;/p&gt;

&lt;h3&gt;
  
  
  Policy stays in code
&lt;/h3&gt;

&lt;p&gt;Jev answers a defined question about the current state. Your application still owns thresholds, permissions, retries, audit trails, and the final action. When policy changes, you can update the question definition or code without rebuilding one giant conversational prompt.&lt;/p&gt;

&lt;p&gt;Jev is not meant for every task. Open-ended research, long explanations, and creative generation still belong with a generative model or a person.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where Jev AI fits
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyfut0szqo782dizm9e39.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fyfut0szqo782dizm9e39.webp" alt="Jev AI use cases for routing, guardrails, and queue prioritization" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Image: Jev can act as a decision node between input, guardrails, and execution queues.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Support-ticket classification and routing
&lt;/h3&gt;

&lt;p&gt;Use the ticket text, customer tier, and relevant history as state. Use Choice to select the team and Score to estimate urgency. The queue can then sort by team, score, and probability, while low-confidence cases go to human review.&lt;/p&gt;

&lt;h3&gt;
  
  
  Model routing for AI agents
&lt;/h3&gt;

&lt;p&gt;Classify task difficulty, tool requirements, and risk before choosing a fast model, a deeper model, or a human workflow. Jev decides the path; the agent orchestration layer still manages model calls, context, and tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  Safety checks before tool calls
&lt;/h3&gt;

&lt;p&gt;Before deleting data, charging a card, changing permissions, or sending an external message, use Noul to judge whether intent is explicit and whether the request meets the required condition. High-risk actions should also use hard rules, authorization checks, and audit logs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Queue priority and human escalation
&lt;/h3&gt;

&lt;p&gt;Split impact, time requirement, and customer status into separate Score or Noul questions, then combine them into a ranking formula in code. This allows operations teams to change weights without rewriting one large prompt.&lt;/p&gt;

&lt;h3&gt;
  
  
  Structured information extraction
&lt;/h3&gt;

&lt;p&gt;When the target fields and candidate values can be defined in advance, Jev can support lightweight classification and validation. For unknown fields, long-form extraction, or complex entity relationships, use a generative model first and Jev as a validator or router.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to get started
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz84urqzqajdrlvml80kl.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz84urqzqajdrlvml80kl.webp" alt="Jev AI API integration from a service request to a safe application branch" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Image: Keep the API call on the server and hand the structured result back to application code.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Validate one decision in the Playground
&lt;/h3&gt;

&lt;p&gt;Choose a low-risk decision with a measurable outcome and a clear answer space. Do not move an entire workflow into the first test. Verify that one judgment actually reduces manual work or repeated application logic.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Create an API key on the server side
&lt;/h3&gt;

&lt;p&gt;After validating the workflow, follow the &lt;a href="https://thejevai.com/docs#api" rel="noopener noreferrer"&gt;Jev AI API guide&lt;/a&gt; to create an API key. Store the key in a server-side environment variable. Never put it in browser code, a real Markdown example, or a Git repository.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Call the &lt;code&gt;systemone&lt;/code&gt; endpoint
&lt;/h3&gt;

&lt;p&gt;The current website documentation uses &lt;code&gt;POST https://thejevai.com/v1/systemone&lt;/code&gt;. This is a minimal Noul example based on the documented request shape:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://thejevai.com/v1/systemone &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$JEV_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "model": "typesafe/jev-1.13",
    "state": "A customer has tried to connect Stripe for three days.",
    "questions": {
      "urgent": {
        "type": "noul",
        "instructions": "Does this message express urgency?"
      }
    }
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conceptually, &lt;code&gt;answers&lt;/code&gt; contains results keyed by question ID, &lt;code&gt;usage&lt;/code&gt; contains usage information, and &lt;code&gt;elapsedMs&lt;/code&gt; reports end-to-end request time. Production code should follow the official API reference for complete fields, validation, and error handling instead of inferring every optional parameter from a short example.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Connect the result to control flow
&lt;/h3&gt;

&lt;p&gt;A robust production flow usually includes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Validate length, permissions, and sensitive data before sending state.&lt;/li&gt;
&lt;li&gt;Send a small, well-scoped set of questions.&lt;/li&gt;
&lt;li&gt;Validate the response shape and request status.&lt;/li&gt;
&lt;li&gt;Use probability, confidence, business risk, and thresholds to choose automation or review.&lt;/li&gt;
&lt;li&gt;Record the input version, question definition, model version, and final action for replay and evaluation.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For current quotas, API key management, and plan details, see the &lt;a href="https://thejevai.com/pricing" rel="noopener noreferrer"&gt;Jev AI pricing page&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Probability, confidence, and limits
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhchqhwx01fuaqm902wje.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhchqhwx01fuaqm902wje.webp" alt="Probability signals flowing into automation or human review" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Image: Probability should help a system choose its level of automation, not replace risk controls.&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Probability is not a business-accuracy guarantee
&lt;/h3&gt;

&lt;p&gt;The official documentation explicitly says that probability and confidence are signals for automation, not guarantees of business accuracy. A high-confidence result can still be wrong for your domain, language, data distribution, or policy.&lt;/p&gt;

&lt;p&gt;Use different strategies for different actions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Low-risk classification can use a lower threshold with a correction path.&lt;/li&gt;
&lt;li&gt;Medium-risk actions should include retries, counterexamples, and human sampling.&lt;/li&gt;
&lt;li&gt;Deletion, payment, and permission changes should combine model signals with hard rules, authorization, and human confirmation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Keep questions narrow
&lt;/h3&gt;

&lt;p&gt;A good question asks for one judgment and gives every answer a clear meaning. If a question requires long-context reasoning, several independent factors, a policy interpretation, and an action recommendation, split it into smaller questions and combine them in code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Preprocess non-text inputs
&lt;/h3&gt;

&lt;p&gt;The current site documentation lists text, JSON objects, and arrays of text as supported state inputs. Images, audio, and video are not direct inputs at this point. For Chinese, specialist terminology, or domain-specific data, build your own evaluation set and test Choice, Score, and Noul separately.&lt;/p&gt;

&lt;h3&gt;
  
  
  Validate latency in your environment
&lt;/h3&gt;

&lt;p&gt;The Jev AI homepage presents a 70–500ms response range, but actual latency depends on network location, request size, concurrency, queues, and service conditions. Treat the number as product positioning, not as your SLA. Benchmark with real requests and your target concurrency before relying on it in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  Jev AI pricing
&lt;/h2&gt;

&lt;p&gt;The following summary reflects the pricing page displayed on &lt;strong&gt;September 20, 2026&lt;/strong&gt;. Plans and benefits can change, so confirm them on the &lt;a href="https://thejevai.com/pricing" rel="noopener noreferrer"&gt;official pricing page&lt;/a&gt; before purchasing.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Plan&lt;/th&gt;
&lt;th&gt;Price&lt;/th&gt;
&lt;th&gt;Credits and intended use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Starter&lt;/td&gt;
&lt;td&gt;$10&lt;/td&gt;
&lt;td&gt;100,000 credits with no expiry, for validating one real workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pro&lt;/td&gt;
&lt;td&gt;$100&lt;/td&gt;
&lt;td&gt;1,000,000 credits, multiple workspaces, and production API usage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise&lt;/td&gt;
&lt;td&gt;$1,000&lt;/td&gt;
&lt;td&gt;11,000,000 credits, including 10% extra credits, team collaboration, and custom integration support&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Do not compare only the credit totals. Estimate the size of each state, the number of questions per request, whether decisions are evaluated in parallel, and how many low-confidence results will require human review.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Is Jev AI a chatbot?
&lt;/h3&gt;

&lt;p&gt;No. Jev AI is designed for software to consume structured decisions rather than for generating a conversational reply. It can sit inside a chatbot, agent, or SaaS workflow as a judgment node.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can I use Jev AI without development experience?
&lt;/h3&gt;

&lt;p&gt;You can start with the &lt;a href="https://thejevai.com/playground" rel="noopener noreferrer"&gt;Playground&lt;/a&gt; to understand state, question types, and results. Connecting decisions to a product, managing API keys, permissions, retries, and human review still requires basic backend engineering.&lt;/p&gt;

&lt;h3&gt;
  
  
  Can Jev AI replace a large language model?
&lt;/h3&gt;

&lt;p&gt;Usually not by itself. Jev is suited to bounded decisions; a generative LLM is suited to open-ended text, explanations, and deeper reasoning. In a practical system, Jev can route requests and check risky actions while an LLM handles generation or complex reasoning.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I choose between Choice, Score, and Noul?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;strong&gt;Choice&lt;/strong&gt; when you need one option from a set.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;Score&lt;/strong&gt; when you need an ordered assessment of severity, priority, or quality.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;Noul&lt;/strong&gt; when you need to judge whether one statement is true.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Is confidence the same as accuracy?
&lt;/h3&gt;

&lt;p&gt;No. Confidence and probability are signals that help an application choose its level of automation. Evaluate the model on your own data, language, domain, and risk level, and keep a human-review path for high-impact actions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where can I find the latest docs and examples?
&lt;/h3&gt;

&lt;p&gt;Start with the &lt;a href="https://thejevai.com/docs" rel="noopener noreferrer"&gt;official documentation&lt;/a&gt;, then browse the &lt;a href="https://thejevai.com/showcase" rel="noopener noreferrer"&gt;Showcase&lt;/a&gt; for community workflows. If you are building a specific integration, validate a small example in the &lt;a href="https://thejevai.com/playground" rel="noopener noreferrer"&gt;Playground&lt;/a&gt; first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion: make one small decision reliable first
&lt;/h2&gt;

&lt;p&gt;Jev AI is not about putting every AI capability into one model. Its value is making the small judgments already hidden in software explicit: define state, ask typed questions, read probability signals, and let code decide whether to route, queue, block, or request human confirmation.&lt;/p&gt;

&lt;p&gt;For teams building AI agents, support automation, developer tools, and business workflows, a practical starting point is one low-risk, measurable decision. Validate it in the &lt;a href="https://thejevai.com/playground" rel="noopener noreferrer"&gt;Jev AI Playground&lt;/a&gt;, then connect it server-side using the &lt;a href="https://thejevai.com/docs#api" rel="noopener noreferrer"&gt;API documentation&lt;/a&gt;. Design the boundaries, thresholds, and failure paths alongside the model call, and Jev can become a maintainable software component rather than a one-off demo.&lt;br&gt;
``&lt;/p&gt;

</description>
      <category>jev</category>
      <category>jevai</category>
      <category>jevmodel</category>
    </item>
    <item>
      <title>Preserving JSON Structure in Localization Workflows</title>
      <dc:creator>James Li</dc:creator>
      <pubDate>Sun, 20 Sep 2026 01:14:55 +0000</pubDate>
      <link>https://dev.to/dx_p_42a4bff1cec043fb3017/preserving-json-structure-in-localization-workflows-100b</link>
      <guid>https://dev.to/dx_p_42a4bff1cec043fb3017/preserving-json-structure-in-localization-workflows-100b</guid>
      <description>&lt;p&gt;When a project supports multiple languages, the translation itself is only part of the work. The harder problem is keeping keys, nested paths, and project conventions intact while content changes.&lt;/p&gt;

&lt;p&gt;A practical workflow looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start with the source files&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Collect the JSON, Markdown, or plain-text files that need translation. Keeping the source files together makes it easier to compare the original content with each generated locale.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Protect structure before translating&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A translated value should not accidentally rename a key or change the nesting used by the application. Treat the file structure as an interface: translate the human-readable content while preserving keys and paths.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Translate incrementally&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Not every release changes every string. A diff-like workflow can focus on added or edited content instead of reprocessing the entire project. This reduces review work and makes it easier to see what changed between releases.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Generate locale files consistently&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Teams often have conventions for locale folders and filenames. Mapping project paths to those conventions helps generated files fit naturally into an existing i18n setup.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Review and export&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Before shipping, compare the translated output with the source, check that the expected languages are present, and export the project in a format the team can review or commit.&lt;/p&gt;

&lt;p&gt;For teams that want a browser-based workflow, &lt;a href="https://jsontranslate.org" rel="noopener noreferrer"&gt;JsonTranslate&lt;/a&gt; supports JSON, Markdown, and TXT translation while preserving keys, nested paths, and project structure. It also provides project translation, path mapping, a Web Studio, batch task monitoring, ZIP export, and a CLI for connecting local repositories. Hosted translation and bring-your-own-key options support different model and cost strategies.&lt;/p&gt;

&lt;p&gt;The main lesson is simple: localization tooling should protect the structure developers depend on, not just produce translated text.&lt;/p&gt;

</description>
      <category>localization</category>
      <category>json</category>
      <category>i18n</category>
      <category>productivity</category>
    </item>
    <item>
      <title>A Practical Workflow for Managing Product Directory Submissions</title>
      <dc:creator>James Li</dc:creator>
      <pubDate>Tue, 15 Sep 2026 00:42:20 +0000</pubDate>
      <link>https://dev.to/dx_p_42a4bff1cec043fb3017/a-practical-workflow-for-managing-product-directory-submissions-j4f</link>
      <guid>https://dev.to/dx_p_42a4bff1cec043fb3017/a-practical-workflow-for-managing-product-directory-submissions-j4f</guid>
      <description>&lt;p&gt;Submitting a product to online directories is easy to start and difficult to keep consistent. Each site asks for a slightly different combination of descriptions, links, contact details, categories, tags, and brand assets.&lt;/p&gt;

&lt;p&gt;A simple workflow helps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Keep one accurate source of truth for the product name, URL, short description, long description, tagline, contact details, and brand assets.&lt;/li&gt;
&lt;li&gt;Reuse the core information, then adapt the wording to each directory's audience and rules.&lt;/li&gt;
&lt;li&gt;Track every opportunity separately, including its requirements, submission status, and any follow-up needed.&lt;/li&gt;
&lt;li&gt;Keep evidence of what was actually submitted so a team does not accidentally create duplicate listings.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Submify is a directory submission platform for founders, indie hackers, marketers, agencies, and SaaS teams. It provides a structured place to organize reusable product information, manage directory opportunities, and track listing workflows across relevant online directories.&lt;/p&gt;

&lt;p&gt;Centralizing the repetitive parts of the process makes it easier to keep public listings accurate while leaving room to write content that fits each community.&lt;/p&gt;

&lt;p&gt;Learn more at &lt;a href="https://submify.app" rel="noopener noreferrer"&gt;https://submify.app&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>webdev</category>
      <category>marketing</category>
    </item>
    <item>
      <title>Building Sora 2 Video Workflows with a Developer-Friendly API</title>
      <dc:creator>James Li</dc:creator>
      <pubDate>Tue, 15 Sep 2026 00:35:15 +0000</pubDate>
      <link>https://dev.to/dx_p_42a4bff1cec043fb3017/building-sora-2-video-workflows-with-a-developer-friendly-api-393e</link>
      <guid>https://dev.to/dx_p_42a4bff1cec043fb3017/building-sora-2-video-workflows-with-a-developer-friendly-api-393e</guid>
      <description>&lt;p&gt;AI video workflows are moving from one-off experiments to repeatable production systems. Sora 2 API is a browser-based and REST API platform for building text-to-video and image-to-video experiences with Sora 2 and Sora 2 Pro.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with a prompt or reference image
&lt;/h2&gt;

&lt;p&gt;A typical workflow begins with a text prompt or a reference image. The platform is designed for creative teams and developers who need to explore concepts, prototype scenes, or connect video generation to a larger application. Controls include aspect ratio, cinematic direction, and multi-shot sequences, so a team can move from a rough idea toward a more structured visual output.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep generation jobs observable
&lt;/h2&gt;

&lt;p&gt;For an application workflow, the useful unit is not just the generated clip but the job around it. Sora 2 API lets developers create an API key, submit generation jobs, monitor task status, and retrieve completed videos without managing model infrastructure directly. That makes it easier to separate prompt creation, job tracking, and asset delivery in a SaaS product or internal creative system.&lt;/p&gt;

&lt;p&gt;The platform also supports synchronized dialogue, sound effects, and ambience. These capabilities can help when a short clip needs more than silent motion—for example, a marketing concept, explainer, social video, or visual prototype.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical implementation checklist
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Define the input contract: prompt, optional reference image, aspect ratio, duration, and creative direction.&lt;/li&gt;
&lt;li&gt;Submit the generation job and store its task identifier in your application.&lt;/li&gt;
&lt;li&gt;Poll or monitor task status so the interface can show progress instead of blocking.&lt;/li&gt;
&lt;li&gt;Retrieve the completed MP4 and store the final asset with its prompt metadata.&lt;/li&gt;
&lt;li&gt;Add usage controls and error handling before exposing the workflow to end users.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Sora 2 API is available at &lt;a href="https://sora2-api.com/" rel="noopener noreferrer"&gt;https://sora2-api.com/&lt;/a&gt;. Freemium access makes it possible to explore the workflow before scaling to larger workloads. It is an independent third-party platform and is not affiliated with OpenAI or other model providers.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>video</category>
      <category>api</category>
    </item>
    <item>
      <title>Designing an AI Video and Image Workflow with Tikdek</title>
      <dc:creator>James Li</dc:creator>
      <pubDate>Sun, 13 Sep 2026 21:49:41 +0000</pubDate>
      <link>https://dev.to/dx_p_42a4bff1cec043fb3017/designing-an-ai-video-and-image-workflow-with-tikdek-2b49</link>
      <guid>https://dev.to/dx_p_42a4bff1cec043fb3017/designing-an-ai-video-and-image-workflow-with-tikdek-2b49</guid>
      <description>&lt;p&gt;When an application needs to create visual content repeatedly, the hard part is rarely the first prompt. The real challenge is designing a workflow that creators, marketers, and developers can reuse.\n\n&lt;a href="https://tikdek.com" rel="noopener noreferrer"&gt;Tikdek&lt;/a&gt; is a browser-based AI video and AI image generation platform for building that kind of workflow. It brings prompt-driven video and image creation into one workspace, while also providing stable APIs for teams that need repeatable production.\n\n## Start with the inputs\n\nA useful workflow should make its inputs explicit. Depending on the use case, a request may contain a text prompt, an image, or other reference material. Keeping these inputs separate from the generation settings makes it easier to support social videos, ads, product visuals, ecommerce campaigns, storyboards, and creative tests.\n\nTikdek supports turning prompts, images, and reference materials into videos. It can also generate and edit images, which is useful when a team needs to prepare a visual asset before using it in a video workflow.\n\n## Treat generation as a job\n\nVisual generation is not always an instant operation. A production integration should treat each request as a job with a clear lifecycle:\n\n1. Validate the input prompt and references.\n2. Submit the generation request.\n3. Store the job identifier and current state.\n4. Surface progress, completion, and failure separately.\n5. Save or deliver the finished asset.\n\nThis separation keeps a user interface responsive and gives batch workflows a predictable way to retry or report failures. The exact API endpoints and parameters should always be checked in the latest service documentation before implementation.\n\n## Browser workflow and API workflow\n\nA browser interface is helpful for exploration and creative direction. Teams can compare supported mainstream models, refine a prompt, and inspect the result before deciding what should become an automated process.\n\nFor repeatable production, Tikdek also provides AI video and AI image APIs. Developers can integrate generation into SaaS products, internal tools, or batch content systems. Free usage opportunities make it possible to test the core workflow, while credit-based plans support larger workloads.\n\n## Keep the product context clear\n\nAn AI generation system is easier to operate when the input, job state, and output are visible as one flow. Start with a small path from prompt to asset, then add references, image editing, model comparison, and batch processing as the use case grows.\n\nTikdek is an independent product and is not affiliated with, endorsed by, or sponsored by any model provider. You can learn more about the platform at &lt;a href="https://tikdek.com" rel="noopener noreferrer"&gt;tikdek.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>automation</category>
    </item>
  </channel>
</rss>
