Integrations / LangSmith

Using Jev as a LangSmith evaluator

LangSmith lists TypeSafe as a model provider, so Jev can score your traces as an online evaluator. You set it up in the LangSmith UI with a TypeSafe API key, through the same LLM-as-a-Judge Evaluator form used for LLM judges. Jev receives a state that you map from run or thread variables, plus typed questions. Each question writes its own feedback key.

The catch: the LangSmith setup screen warns that TypeSafe doesn't offer zero data retention, so anything you map into state may be retained by TypeSafe. Details below.

WhereTracing project → Evaluators+ EvaluatorLLM-as-a-Judge Evaluator
CredentialWorkspace provider secret TYPESAFE_API_KEY (your own TypeSafe key)
ModelProvider TypeSafe, model jev-latest
Jev receivesThe state you map in, and one typed question per criterion: Noul, Choice, or Score
You getOne feedback key per question on each evaluated run or thread

Set it up

As of September 23, 2026, the setup steps come from LangChain's September 21 launch post ↗ and its screenshots. The LangSmith docs don't yet have a TypeSafe evaluator page; where they describe the same screens, their labels are used below.

01Add the key. Settings → Integrations → Provider Secrets+ Secret. Choose provider TypeSafe and paste your key into TYPESAFE_API_KEY. The dialog is titled “Add secret to this workspace”: one key serves the whole workspace, and LangSmith, not your code, holds it.
02Create the evaluator. Open a tracing project, then the Evaluators tab → + Evaluator. Under Create from scratch, pick LLM-as-a-Judge Evaluator. There is no separate “Jev” evaluator type. Name it.
03Pick the model. Under Prompt & Model, open Model Configuration: provider TypeSafe, model jev-latest. The retention warning appears here.
04Define the state. Where an LLM judge has a prompt, the editor now holds State. Type {{ to insert mapped run or thread variables. No grading instructions go here. What goes where.
05Add questions. Under Feedback Configuration, add one question per criterion with + Noul, + Choice, or + Score. Each has a Name (the feedback key), Type, and Instructions.
06Scope it and save. LangSmith's online-evaluator docs describe the rest of the form: a filter, a sampling rate, Runs or Threads as the source, and, under Advanced, a backfill date (only when you create the rule). After you save, matching incoming runs or threads are scored.

TypeSafe not in the provider list? Organization admins can turn providers off under Settings → Model providers, and workspace admins control which providers each feature, Evaluators included, can use in Model configurations. LangChain's instructions name no LangSmith credential beyond the TypeSafe key. TypeSafe is bring-your-own-key in LangSmith: Gateway Credits and the free hosted SemIf model don't cover Jev.

State vs. questions

The launch post is explicit on this, and it's the main habit to unlearn from LLM judges. State is the evidence. Questions are the grading. A judge prompt that starts “You are an expert evaluator…” doesn't belong in state. TypeSafe's state guide ↗ draws the same line.

Put in statePut in questions
The user's request, the final response, and tool calls or tool results the criteria depend onWhat to judge: “Does the reply resolve the request?”
Run facts a criterion needs, such as which tools ran or whether a handoff happenedThe options or levels: a Choice's full label set, a Score's levels from low to high
Clear labels around each part, so a question can refer to it by nameDefinitions of yes and no (the optional “Describe true and false” on a Noul)
State editor · mapped variables shown as {{ }}
<customer_message>
{{input}}
</customer_message>

<agent_output>
{{output}}
</agent_output>

Map only what your questions need, not the whole trace. There are three reasons:

It leaves LangSmith. Everything mapped into state is sent to TypeSafe on every evaluated run. See retention.
It has a budget. TypeSafe direct allows 32,000 tokens for state plus the longest question and 64,000 per request. Long agent traces hit that. See limits and pricing.
Text in state can argue with the judge. TypeSafe's jev-1.13 limitations ↗ say injected instructions in the evaluated content “can move the answer.” Agent outputs and tool results are exactly that kind of content.

What you can map depends on what the evaluated run or thread records. If tool calls live only in child runs, they won't be in a root run's input or output. Check your own run in the evaluator's preview before relying on a field.

Questions and feedback keys

All questions in one evaluator go to Jev together, in one call per run or thread, and each comes back as a separate feedback key named after the question. LangChain notes that a second or third question adds only a little cost.

TypeUse forYou defineFeedback recorded
NoulOne yes/no criterion: leaked PII, resolved the request, grounded in evidenceA question where high probability means yes; optional true/false descriptionsA number from 0 to 1, the probability of yes. The feedback metadata carries metadata.typesafe with the raw noul value.
ChoiceExactly one category: failure mode, user intentThe full option set, including a “none/ok” option if runs can be fineThe selected label as a categorical value, such as "billing"
ScoreAn ordered scale: reply quality, user frustrationLevels in order, low to highA number. Jev's Score is an expected level, counted from 0 and possibly fractional.

The recorded values come from LangChain's screenshot of a live run, which shows pii_leakage 0.03, intent "billing", and frustration 0.17. LangChain hasn't documented whether LangSmith stores a Score's expected level unchanged, or whether a Choice's probabilities and confidence survive in the metadata. Open metadata.typesafe on your first results before building on it. For picking a type, see Choice, Score, and Noul.

Example: a support agent

One evaluator on a customer-support agent's tracing project, with three questions for three different jobs. Each question asks about one thing, so each key can be read on its own.

Feedback keyTypeInstructionsWhat you do with it
resolvedNoulDoes the final reply resolve what the customer asked for?Chart the average over time. Alert on a drop.
failure_modeChoiceWhich best describes how this run went? none, unneeded_escalation, wrong_tool, unsupported_claimFilter runs by label and read the unsupported_claim ones first.
reply_qualityScoreHow usable is the final reply? Levels: unusable → partial → completeCompare prompt or model versions by average.

State is the customer's message, the tools the agent called, and its final reply, mapped as in the template above. If the run you evaluate doesn't record its tool calls, log them there or drop the wrong_tool label. Account history, system prompts, and full retrieval dumps stay out unless a question needs them.

Downstream, these are ordinary LangSmith feedback keys. You can filter runs by them, chart them, raise a Feedback Score alert (average score over a time window), or fire a webhook automation. LangSmith recommends adding a feedback filter such as has(feedback_key, "resolved") to the webhook rule, so it fires only after the score exists.

Online, offline, and code

The TypeSafe provider path is documented for online evaluation, which scores production traces in a tracing project. That isn't the only way to put Jev in a LangSmith eval, but the other ways are different mechanisms.

PathStatusNotes
UI evaluator on a tracing project (runs or threads)DocumentedThis is the launch path above.
UI evaluator attached to a dataset, for experimentsUndocumentedThe same LLM-as-a-Judge form exists on datasets, but LangChain hasn't said TypeSafe works there. Test it before depending on it.
Creating a TypeSafe evaluator with the SDK, API, or CLIUndocumentedclient.evaluators.create(type="llm") (langsmith 0.14.0) takes a prompt-hub handle, a model configuration ID, and a variable mapping. There is no documented shape for Jev questions.
Your own code evaluator in evaluate() that calls JevWorksAn ordinary custom evaluator. It's how LangChain's own study ran Jev.

For offline experiments today, write the judge yourself. This evaluator asks the same three questions as the example in one Jev call, through LangChain's langchain-typesafe package, and returns them as three feedback keys. Here you choose the state, can include reference outputs, and keep full probabilities if you want them.

Offline: Jev as a custom evaluator
from langsmith import Client
from langchain_typesafe import Choice, Noul, Score, TypeSafeClassifier

jev = TypeSafeClassifier()  # reads TYPESAFE_API_KEY

QUESTIONS = {
    "resolved": Noul(
        instructions="Does the final reply resolve what the customer asked for?"
    ),
    "failure_mode": Choice(
        instructions="Which best describes how this run went?",
        criteria={
            "none": "Handled correctly.",
            "unneeded_escalation": "Handed off to a human when it could finish.",
            "wrong_tool": "Called a tool that does not fit the request.",
            "unsupported_claim": "States account facts no tool result supports.",
        },
    ),
    "reply_quality": Score(
        instructions="How usable is the final reply for the customer?",
        criteria=[
            "Unusable: wrong, off-topic, or empty.",
            "Partial: on-topic but missing a needed step or detail.",
            "Complete: correct and actionable.",
        ],
    ),
}


def jev_judge(inputs: dict, outputs: dict) -> list[dict]:
    state = {
        "customer_message": inputs["message"],
        "tool_calls": outputs["tool_calls"],
        "final_reply": outputs["reply"],
    }
    r = jev.invoke({"state": state, "questions": QUESTIONS})  # one Jev call
    return [
        {"key": "resolved", "score": r.nouls["resolved"].noul},
        {"key": "failure_mode", "value": r.choices["failure_mode"].choice},
        {"key": "reply_quality", "score": r.scores["reply_quality"].score},
    ]


Client().evaluate(
    support_agent,         # your target function
    data="support-cases",  # your LangSmith dataset
    evaluators=[jev_judge],
)

Checked with langsmith 0.14.0 and langchain-typesafe 0.0.1a3 against a local mock of the TypeSafe API, with upload_results=False. It made one request carrying all three questions and produced the three feedback keys. The TypeSafe key here is used by your process, not by LangSmith's provider secret.

Jev judge vs. LLM judge

Same form, different machine. These are the operational differences, not a verdict on which is better.

AspectJev evaluatorLLM-as-a-judge evaluator
You writeState (evidence only) + typed questionsA prompt with instructions and rubric + a feedback schema
It returnsTyped answers with probabilities. No text.Generated structured output, which can include reasoning
Several criteriaOne call. Each question is a key.One call. Each top-level schema key is a key, and output grows with criteria.
Explains itselfNoCan, if you ask for it
SuitsNarrow, typed decisions at volumeOpen-ended criteria where you want written reasoning

The “suits” row is LangChain's own framing. Speed and cost multiples (“up to ~450x cheaper and ~200x faster”) are TypeSafe's figures for classification tasks, as quoted by LangChain. Measure yours on your own traces. For the underlying model difference, see Jev vs. LLMs.

Privacy and retention

LangSmith's own warning. When you select TypeSafe, the Model Configuration panel reads: “TypeSafe does not offer zero data retention.” Prompts and outputs sent for evaluation may be retained by the provider. For a Jev evaluator, that means whatever you map into state, run after run.
TypeSafe's side. TypeSafe's legal page ↗ offers ZDR to enterprise customers on request, and its privacy policy says input isn't used for training. Nothing published says whether an enterprise ZDR arrangement covers calls LangSmith makes with your key. Ask TypeSafe before you rely on it.
LangSmith's side. Any online evaluator auto-upgrades the traces it touches to extended data retention, which changes trace pricing.
Redaction isn't documented here. LangSmith's LLM Gateway can redact PII in TypeSafe requests, but that's documented for Gateway calls, not evaluators.

In practice, map the fewest fields that answer your questions, and use the evaluator's filter to skip runs you know carry sensitive data. Whether any of this is acceptable for your data is a call for your own privacy and compliance review.

Thresholds

The LangSmith integration records the number; it applies no pass/fail cutoff, and this page doesn't suggest one. A Noul of 0.62 on resolved is a probability, not a failing grade. Where it should trip an alert depends on how often Jev agrees with your reviewers on your traces, and on which mistake costs you more.

To pick a cutoff, label a sample of real runs, for example in an annotation queue. Compare those labels with the Jev feedback on the same runs, then set the alert or filter threshold from that comparison. Averages over time (what a Feedback Score alert watches) catch drift. Per-run cutoffs catch incidents. They need different thresholds. The broader method is in calibrated decisions and the classification task.

The evidence so far

LangChain's Jev-as-a-Judge study ↗ (repo ↗) froze five weather-agent runs and had one human reviewer label them (four pass, one fail). Jev, GPT-5.6 Luna, GPT-5.6 Terra, and Claude Sonnet 4.6 each judged every run 100 times. Jev matched the human pass/fail label on all 500 decisions, had the lowest score variance, and averaged 0.44 s and $0.00035 per call.

It's a promising, narrow result, and LangChain calls it “one test on one agent.” Four details matter if you read it as evidence for your own evaluator:

01It didn't use the LangSmith provider path. Jev ran through custom code evaluators with langchain-typesafe==0.0.1a2, and the Jev service version wasn't recorded. The repo's constructor-style calls raise a validation error on 0.0.1a3, so use its lockfile to reproduce it.
02The pass/fail cutoff was the authors' choice. Jev's does_pass was a Noul turned into pass/fail at 0.5 in their code.
03Low variance isn't closeness to the human label. The repo's archived accuracy file also compares the continuous quality score with the human labels. There, Jev had the largest mean absolute error of the four (0.106 vs. 0.077–0.087). The authors treat quality as a reliability measure only.
04The judges saw reference outputs. Each state included the expected behavior. Online evaluators usually have none.

For how Jev FYI weighs vendor, partner, and independent results, see Benchmarks.

Other LangChain surfaces

“Jev in LangSmith” can mean three different things. Only the first is covered above.

SurfaceWhat it doesKey
LangSmith evaluator (this page)Scores traces after they happenWorkspace provider secret
langchain-typesafeJev decisions inside your running app, graph, or agent middleware. Calls are traced to LangSmith as llm runs.TYPESAFE_API_KEY in your environment
LangSmith LLM Gateway ↗Proxies System One calls to typesafe/jev-1.13.0 with Gateway policies and cost trackingLangSmith API key; TypeSafe key as the workspace provider secret

Checked September 23, 2026 against LangChain's launch post and its screenshots, the current LangSmith docs (online evaluators, LLM-as-a-judge, model configurations, alerts, the Gateway's decision-model page and changelog), the langsmith 0.14.0 Python SDK, TypeSafe's docs and legal pages, and the jev-as-a-judge repository at adfea74. No LangSmith account, provider secret, or evaluator was created. The UI steps are as LangChain documents them, not observed in a live workspace.

Not affiliated with, endorsed by, or operated by TypeSafe AI. Vendor claims are cited and attributed.