Jev(ジェブ)は、TypeSafe AI が 2026-09-15 に早期アクセスで公開した「判定モデル」です。状態(state)と型付きの質問(questions)を送ると、選択肢・段階評価・はい/いいえの答えを確率つきで返し、文章は生成しません1 。LLM に「JSON で答えて」と頼んでパースする手間がなく、TypeSafe は応答時間を 70〜500 ms、料金を入力 100 万トークンあたり 0.042 ドル(出力は無料)としています1 ,2 。この記事では、Jev API の request / response の形、Python と JavaScript の SDK、料金と速さ、Claude Code の hooks に組み込む例、LLM との使い分けを、公式ドキュメントで確かめた内容だけで解説します(内容は 2026 年 10 月時点)。
Jev は、TypeSafe AI が「System One モデル」と呼ぶ新しい種類のモデルの最初の 1 つです。TypeSafe の説明では「非構造の状態を入れると、型付きの確率つきの判定が出てくる関数呼び出し」です1 。名前の System One は、カーネマンの『ファスト&スロー』の「速い直感的な思考(システム 1)」から取っています1 。
アプリのコードが state と questions を Jev に送り、型付きの answers を受け取ってコードのしきい値で分岐する流れ 図: 筆者作成(TypeSafe の公式ドキュメントをもとに作図)
LLM(生成モデル)との違いは、出力の作り方です。LLM は 1 トークンずつ順に文章を作ります。Jev は、あらかじめ決めた選択肢すべての確率を 1 回の計算でまとめて出します1 。出力の形が事前に決まっているため、TypeSafe は「型エラーは起こりえない」と書いています1 。
Jev がうれしい点は次の 3 つです。
パースが要らない : 返り値は JSON の数値と、自分で決めた選択肢のキーだけです
確率で分岐できる : 「緊急の確率が 0.9 以上なら呼び出す」「確信度が低ければ人に回す」をコードで決められます
質問を増やしても遅くなりにくい : すべての質問は同じ state に対して並列に評価されます。公式ドキュメントは「質問を足しても応答時間はほとんど変わらない」と説明しています3
反対に、Jev は文章・コード・説明文を書けません。理由の説明も返しません4 。
Jev は日本でも公開の週に検索が急に増えました。Google トレンド(日本・過去 90 日、2026-10-06 取得)で、「Jev」は 9/15 の週に 36 まで上がり、それまでの 8 週はずっと 0 でした5 。直近 4 週の平均は 19.5 で、同じ期間の「GitHub Copilot」の 3.2 倍です5 。
Jev・GitHub Copilot の検索関心度(日本・週ごと) データを表で見る Jev・GitHub Copilot の検索関心度(日本・週ごと) 週 Jev GitHub Copilot 07/07 0 15 07/14 0 10 07/21 0 9 07/28 0 9 08/04 0 8 08/11 0 5 08/18 0 8 08/25 0 8 09/01 0 9 09/08 0 8 09/15 36 5 09/22 29 5 09/29 13 7
出典: Google トレンド(日本、2026/07/07〜2026/09/29 の週、2026-10-06 取得。最大を 100 とした相対値)
関連する検索語では「jev ai」「jev api」「jev model」「typesafe ai」などが伸びています5 。検索が増えた背景には、使える場所が短期間で広がったことがあります。
TypeSafe の API : https:/ / api.typesafe.ai/ v1/ systemone に直接送れます3
OpenRouter : typesafe/ jev-1.13 として、OpenRouter の API キーだけで呼べます。TypeSafe のアカウントは要りません4
Cloudflare Workers AI : typesafe/ jev として Workers から呼べます6
フレームワーク : Pydantic AI には TypeSafeModel があり、typesafe:jev-latest と書くだけでエージェントのモデルにできます7
Jev に聞ける質問は、Choice・Score・Noul の 3 種類だけです3 。3 種類は 1 回のリクエストに混ぜて送れます。
型 何を聞くか 主な返り値 上限 choice自分で決めた選択肢から 1 つ選ぶ choice・probabilities・confidence選択肢は 255 個まで score低い順に並べた段階で評価する score・legend・probabilities・confidence段階は 10 個まで noul文が正しいか(はい/いいえ) noul(0〜1、はいの確率)―
出典: TypeSafe API reference3 (2026-10-06 参照)。Noul は TypeSafe 独自の名前で、confidence は付きません。
それぞれの返り値には、次のような意味があります3 。
choice : 一番確率の高い選択肢のキーです。probabilities は全選択肢の確率で、合計は 1 です
score : 確率で重み付けした段階の値です。段階は 0 から数えるので、1.05 のように段階の間の値にもなります
confidence : 確率の分布から計算した確信度(0〜1)です。Choice の場合、公式ドキュメントの式は「(選択肢の数 × 最大の確率 − 1) ÷ (選択肢の数 − 1)」です3 。たとえば 3 択で最大の確率が 0.85 なら、(3 × 0.85 − 1) ÷ 2 ≒ 0.78 になります
公式ドキュメントは、1 つの質問では 1 つのことだけを聞くよう勧めています3 。「この企画を評価して」ではなく、市場規模・実現性・差別化を別の質問にして、重み付けはコードで行います。
Jev API のエンドポイントは 1 つです。POST https:/ / api.typesafe.ai/ v1/ systemone に、Bearer 認証で JSON を送ります3 。API キーは TypeSafe のコンソール(console.typesafe.ai/ keys)で発行します3 。
リクエストの必須項目は state・model・questions の 3 つです3 。model には "jev-latest" を入れます。公式の Quick start の例は次のとおりです3 。
curl -X POST https://api.typesafe.ai/v1/systemone \
-H "Authorization: Bearer $TYPESAFE_API_KEY " \
-H "Content-Type: application/json" \
-d @- <<'EOF'
{
"state" : "Hi, I've been trying to connect my Stripe account for 3 days and the integration keeps failing. I'm losing sales. Please help ASAP." ,
"model" : "jev-latest" ,
"questions" : {
"department" : {
"type" : "choice" ,
"instructions" : "Which team should handle this" ,
"criteria" : {
"billing" : "Payment or subscription issues" ,
"technical" : "Bugs or integration problems" ,
"sales" : "Pricing or account questions"
}
},
"frustration" : {
"type" : "score" ,
"instructions" : "How frustrated the customer appears" ,
"criteria" : ["Calm, just stating facts" , "Frustrated but civil" , "Very angry, strong language" ]
},
"is_urgent" : {
"type" : "noul" ,
"instructions" : "The message conveys urgency or time-sensitivity"
}
}
}
EOF
公式ドキュメントに載っているレスポンスは次の形です3 。質問に付けたキー(department など)が、そのまま answers のキーになります。
{
"model" : "jev-1.13.0" ,
"answers" : {
"department" : {
"type" : "choice" ,
"choice" : "technical" ,
"confidence" : 0.78 ,
"probabilities" : { "technical" : 0.85 , "sales" : 0.0 , "billing" : 0.15 }
} ,
"frustration" : {
"type" : "score" ,
"score" : 1.0 ,
"confidence" : 1.0 ,
"legend" : { "0" : "Calm, just stating facts" , "1" : "Frustrated but civil" , "2" : "Very angry, strong language" } ,
"probabilities" : { "0" : 0.0 , "1" : 1.0 , "2" : 0.0 }
} ,
"is_urgent" : { "type" : "noul" , "noul" : 1.0 }
} ,
"usage" : { "input_tokens" : 392 , "output_tokens" : 65 }
}
state は文字列だけでなく、JSON のオブジェクトや配列でも送れます3 。質問の instructions から `ticket.message` のようにバッククォートで state の中の項目を指せるので、レコードや画面の状態をそのまま渡すのが基本です6 。
Python SDK は PyPI の typesafe-sdk で、Python 3.10 以上が必要です3 ,8 。2026-10-06 時点の最新は 0.7.2(2026-09-26)です8 。
pip install typesafe-sdk
from typesafe_sdk import Choice, Noul, Score, TypeSafeClient
client = TypeSafeClient()
response = client.system_one(
state="Hi, I've been trying to connect my Stripe account for 3 days ..." ,
questions={
"department" : Choice(
instructions="Which team should handle this" ,
criteria={
"billing" : "Payment or subscription issues" ,
"technical" : "Bugs or integration problems" ,
"sales" : "Pricing or account questions" ,
},
),
"frustration" : Score(
instructions="How frustrated the customer appears" ,
criteria=["Calm, just stating facts" , "Frustrated but civil" , "Very angry, strong language" ],
),
"is_urgent" : Noul(instructions="The message conveys urgency or time-sensitivity" ),
},
)
print (response.answers["department" ].choice)
print (response.answers["is_urgent" ].noul)
このコードは公式の Quick start と同じ形です3 。筆者は SDK 0.7.2 を手元に入れ、通信を差し替えたテストで、SDK が {"state": …, "model": "jev-latest", "questions": …} を / v1/ systemone に送ることを確かめました(実際の API は呼んでいません)。型ごとに取り出したいときは、response.choices・response.scores・response.nouls も使えます。
JavaScript の SDK は npm の @typesafe-ai/ sdk で、Node.js 20 以上が必要です8 。2026-10-06 時点の最新は 0.6.0 です8 。choice()・score()・noul() のヘルパーで質問を作ると、答えの型が質問から推論されます。
import { choice, noul, score, TypeSafeClient } from "@typesafe-ai/sdk" ;
const client = new TypeSafeClient ();
const QUESTIONS = {
area : choice ("Which part of the codebase does this pull request mainly change?" , {
frontend : "UI components, styles, and client-side code" ,
backend : "API handlers, database access, and background jobs" ,
infra : "CI, deployment, and infrastructure configuration" ,
docs : "Documentation only" ,
}),
risk : score ("How risky is it to merge this pull request without a careful review?" , [
"Low: small and isolated change" ,
"Medium: touches shared code paths" ,
"High: changes auth, payments, data migrations, or deployment" ,
]),
touches_secrets : noul ("The diff adds or changes credentials, tokens, or secret configuration." ),
};
const MIN_CONFIDENCE = 0.7 ;
export async function routePullRequest (pr : { title: string ; body: string ; files: string [] } ) {
const { answers, usage } = await client.systemOne ({ state : pr, questions : QUESTIONS });
if (answers.touches_secrets .noul >= 0.5 || answers.risk .score >= 1.5 ) {
return { reviewer : "security" , area : answers.area .choice , usage };
}
if (answers.area .confidence < MIN_CONFIDENCE ) {
return { reviewer : "triage" , area : null , usage };
}
return { reviewer : answers.area .choice , area : answers.area .choice , usage };
}
PR の振り分けの例です。筆者は TypeScript 5 の tsc --strict で型チェックし、選択肢にないラベル("mobile" など)を代入すると型エラーになることを確かめました。しきい値の 0.5・1.5・0.7 は例として決めた値なので、実データで調整してください。
Jev の料金は入力トークンにだけかかり、出力トークンは無料です。2026 年 10 月時点の単価は、入力 100 万トークンあたり 0.042 ドル(10 億トークンあたり 42 ドル)です1 ,2 。
項目 jev-1.13(2026 年 10 月時点) モデル ID jev-1.13.0(別名 jev-latest・jev-preview)料金 入力 100 万トークンあたり 0.042 ドル、出力は無料 レート制限 毎秒 10 万トークン / 毎秒 80 リクエスト(需要に応じて予告なく変わる) コンテキスト長 1 リクエスト 64k トークン。state と一番長い質問の合計は 32k トークンまで 入力 テキストのみ(文字列・JSON・配列)。画像・音声・動画は不可
出典: TypeSafe Models2 (2026-10-06 参照)。
費用は入力トークン数から計算できます。入力 400 トークンの判定なら、400 × 0.042 ÷ 100 万 = 0.0000168 ドルです。OpenRouter のクックブックが記録した 400 トークンのリクエストの費用も、同じ 0.0000168 ドルでした4 。1 日 1 万件、1 件 1,000 トークンなら、1 日 0.42 ドルの計算です。
速さについて、TypeSafe はブログで「エンドツーエンドの応答時間は 70〜500 ms」と書いています1 。TypeSafe のクックブックでは、14 問を 1 回で聞く判定を 15 回ずつ試し、平均の往復時間を LLM と比べています9 。
14 問の判定 1 回あたりの平均応答時間(ミリ秒、15 回の平均。GPT-5.4 mini と Haiku 4.5 は temperature 0) データを表で見る 14 問の判定 1 回あたりの平均応答時間(ミリ秒、15 回の平均。GPT-5.4 mini と Haiku 4.5 は temperature 0) モデル 平均応答時間(ms) Jev 1.13 111 GPT-5.4 mini 1,405 Haiku 4.5 1,780 GPT-5.5 推論 11,125 Opus 4.8 推論 13,886
出典: TypeSafe Docs「Self-consistency: nouls」クックブックの Cost + speed 表。TypeSafe による計測(2026-10-06 参照)
同じ表で、1 回あたりの費用は Jev が 0.000043 ドル、claude-haiku-4-5 が 0.001798 ドルでした9 。ただし、これは TypeSafe 自身の計測です。TypeSafe もブログで、計測は米国西海岸から行っており、料金が補助されていないことは長期的に示すしかないと書いています1 。日本から呼ぶ場合の応答時間は、自分の環境で測ってください。
TypeSafe のアカウントを作らずに Jev を試すなら、OpenRouter か Cloudflare Workers AI を使います。どちらも、state と questions の形は TypeSafe の API と同じです6 ,4 。
Cloudflare Workers AI : モデル名は typesafe/ jev です。料金表には入力 100 万トークンあたり 0.042 ドル、出力 0 ドルとあり、ゼロデータ保持(Zero data retention)の対象です6 。Workers からは次のように呼びます6 。
const response = await env.AI .run ("typesafe/jev" , {
state : "Help! My payouts have been failing for 3 days." ,
questions : {
is_urgent : {
type : "noul" ,
instructions : "Does this convey urgency?" ,
criteria : { true : "Explicitly time-sensitive" , false : "No urgency expressed" },
},
},
});
REST API の場合は / ai/ run に {"model": "typesafe/ jev", "input": {…}} の形で送ります6 。Cloudflare のモデルページでは、コンテキスト長が 32,000 トークンと書かれています6 。
OpenRouter : TypeSafe の SDK のベース URL を https:/ / openrouter.ai/ api に変え、API キーに OpenRouter のキーを渡すだけで切り替わります4 。環境変数 TYPESAFE_BASE_URL と TYPESAFE_API_KEY でも同じ設定ができます4 。OpenRouter 経由では、レスポンスに id・provider・usage.cost(米ドルの費用)が加わります4 。
import os
from typesafe_sdk import TypeSafeClient
client = TypeSafeClient(
api_key=os.environ["OPENROUTER_API_KEY" ],
base_url="https://openrouter.ai/api" ,
)
なお、Cloudflare は 2026-10-01 に、Jev と同じ System One API に互換の判定モデル「Clef」を公開しました。画像も読めて、重みも公開されています6 。Clef の使い方は「Cloudflare Clef 入門:判定モデルを Workers AI で使う 」に、どちらを選ぶかは「Jev と Cloudflare Clef の使い分け 」にまとめています。
Jev は、AI エージェントの「次に何をするか」を決める分かれ道に置くと効きます。TypeSafe 自身も、Jev はコーディングエージェントの LLM の代わりにはならず、エージェントやアプリの中で判定を任せる部品だと説明しています3 。ここでは、Claude Code の許可確認を Jev で仕分ける hook を作ります。
Claude Code は、許可ルールに無いコマンドを実行する前に確認を出します。PermissionRequest hook は、その確認を出す直前にだけ動きます10 。hook が decision.behavior に "allow" を返すとその 1 回だけ許可され、何も返さなければいつもどおり確認が出ます10 。
Claude Code の Bash 実行を PermissionRequest hook が受け、危険リストで止め、残りを Jev の 2 問で判定して許可する流れ 図: 筆者作成(Claude Code の hooks ドキュメントと OpenRouter のクックブックをもとに作図)
設計は、OpenRouter のクックブック「Auto-Approve Coding Agent Permission Prompts with Jev」と同じ考え方にしました4 。
rm -rf・git push・.env など、モデルの判断に任せたくないコマンドは、コード(正規表現)で先に除外する
残りのコマンドだけ、Jev に Noul を 2 問聞く。「元に戻せる操作か」と「いまの作業に沿っているか」
2 問とも 0.9 以上のときだけ許可する。通信エラーやキーが無いときは何も返さず、人の確認に戻す
.claude/ hooks/ jev_permission.py に保存します。
"""Claude Code の PermissionRequest hook: Bash の許可確認を Jev で仕分ける。"""
import json
import re
import sys
from typesafe_sdk import Noul, TypeSafeClient, TypeSafeError
APPROVE_AT = 0.9
RISKY = [
r"\brm\s+-\S*[rf]" ,
r"\bgit\s+(push|reset\s+--hard|clean|branch\s+-D)\b" ,
r"\b(sudo|su|doas)\b" ,
r"\b(npm|pnpm|yarn|bun)\s+publish\b" ,
r"\b(wrangler|vercel|terraform|kubectl)\b" ,
r"\.env\b|\.ssh\b|\.aws\b|credentials" ,
r"\$\(|`|\b(bash|sh|zsh|eval)\b" ,
r"\b(curl|wget)\b" ,
]
QUESTIONS = {
"reversible" : Noul(
instructions=(
"Every command in `command` only reads or changes files inside `project` "
"and can be undone with git or by rerunning it. It does not push, publish, "
"deploy, delete files outside the project, or send data to a network service."
),
),
"serves_task" : Noul(
instructions="Running `command` is a reasonable next step toward `task`." ,
),
}
def is_risky (command: str ) -> bool :
return any (re.search(p, command) for p in RISKY)
def decide (event: dict , client: TypeSafeClient ) -> dict | None :
"""許可するときだけ hook の出力を返す。None なら何も出さず、通常の確認に任せる。"""
if event.get("tool_name" ) != "Bash" :
return None
command = event.get("tool_input" , {}).get("command" , "" )
if not command or is_risky(command):
return None
state = {
"command" : command,
"task" : event.get("tool_input" , {}).get("description" , "" ),
"project" : event.get("cwd" , "" ),
}
try :
res = client.system_one(state=state, questions=QUESTIONS, timeout=8 )
except TypeSafeError:
return None
scores = {k: res.nouls[k].noul for k in QUESTIONS}
print (f"jev {scores} model={res.model} " , file=sys.stderr)
if all (v >= APPROVE_AT for v in scores.values()):
return {
"hookSpecificOutput" : {
"hookEventName" : "PermissionRequest" ,
"decision" : {"behavior" : "allow" },
}
}
return None
def main () -> None :
event = json.load(sys.stdin)
try :
client = TypeSafeClient()
except TypeSafeError:
return
with client:
out = decide(event, client)
if out:
print (json.dumps(out))
if __name__ == "__main__" :
main()
hook の入力には、コマンド(tool_input.command)と、Claude Code が付けた 1 行の説明(tool_input.description)が入っています10 。ユーザーの依頼文そのものは入っていないため、この例では説明文を「作業」として Jev に渡しています。
.claude/ settings.json に登録します。matcher を Bash にして、シェルの確認だけを対象にします10 。timeout は秒です10 。
{
"hooks" : {
"PermissionRequest" : [
{
"matcher" : "Bash" ,
"hooks" : [
{
"type" : "command" ,
"command" : "python3 \"${CLAUDE_PROJECT_DIR}\"/.claude/hooks/jev_permission.py" ,
"timeout" : 15
}
]
}
]
}
}
python3 は typesafe-sdk を入れた環境のものを指定してください。動きを確かめるため、筆者は Jev の通信だけをモックに差し替えて hook を実行しました。モックの数値は、OpenRouter のクックブックが 2026-09-21 に typesafe/ jev-1.13 で記録した実際の応答(bun test は 0.93 / 0.95、bun add left-pad は 0.45 / 0.09)です4 。
bun test は Jev の 2 問がともに 0.9 以上で許可され、bun add left-pad は確認に回り、git push --force は Jev を呼ばずに確認に回る様子 筆者の環境(macOS、Python 3.14、typesafe-sdk 0.7.2)で hook を実行した出力。Jev の応答は OpenRouter のクックブックの記録値を返すモックで、実際の API は呼んでいない
git push --force は危険リストに当たるので、Jev を 1 回も呼ばずに確認へ回っています。安全の境目は Jev のしきい値ではなく、コードの危険リストに置くのが大事です。OpenRouter のクックブックも、Jev はコマンドの文字に書かれていないこと(秘密のファイルを読むかどうか等)を判断できないので、危険リストを境目にするよう書いています4 。
Claude Code の hooks の基本は「Claude Code hooks 入門:危険なコマンドと .env を止める 」で解説しています。
同じ考え方は、エージェントに渡す前の振り分けにも使えます。
PR の振り分け : 上の TypeScript の例のように、変更の場所(Choice)・リスク(Score)・秘密情報に触れるか(Noul)を 1 回で聞き、レビュー担当を決めます
問い合わせの振り分け : 担当チーム(Choice)と緊急度(Noul)を判定し、confidence が低いものだけ人か LLM に回します。TypeSafe はこれを「Confidence-gated routing」というパターンとして紹介しています3
LLM の出力チェック : 生成した回答が資料に基づいているか、有害でないかを Noul で判定し、しきい値を下回れば止めます
Pydantic AI を使っている場合は、FallbackModel('typesafe:jev-latest', …) のように Jev の後ろに LLM を置き、Jev で答えられない場合に LLM へ回す構成も公式ドキュメントに載っています7 。
決まった選択肢から選ぶ・点数を付ける・はい/いいえを決めるだけなら Jev を使います。文章・コード・理由の説明が要るなら LLM を使います。
観点 LLM に判定させる Jev 出力 文字列。JSON を指示してもパースと検証が要る 型どおりの選択肢キー・数値と確率 生成の仕方 1 トークンずつ順に生成 全選択肢の確率を 1 回で出す1 確率・確信度 自己申告させても安定しにくい 必ず付く(Noul は値そのものが確率)3 料金 入力に加え、出力トークンにも課金 入力のみ課金、出力は無料2 向いている仕事 説明・要約・コード生成・ツール呼び出し 分類・振り分け・採点・ガードレール できないこと ― 文章の生成、理由の説明、計算2
よくある組み合わせは「Jev で判定 → 必要なときだけ LLM」です。たとえば問い合わせを Jev で振り分け、返信文の下書きが要るものだけ LLM に渡します。判定のたびに LLM を呼ぶより、速く安く済みます。
公式の「Jev 1.13 jaggedness」ページに、Jev が苦手なことがまとまっています(2026-10-02 更新)2 。日本語で使う人が特に気を付けたい点を挙げます。
日本語の精度 : 学習の中心は英語で、日本語を含む CJK は「扱えるが同じ精度ではない」と書かれています2 。state は日本語のままでも、instructions と criteria は英語で書き、自分のデータで正解率を測ってから使ってください
文字どおりに読む : Jev は「書いた質問に答え、意図した質問には答えない」とされています2 。否定や範囲の言葉は具体的に書き、境目のケースは criteria に書きます
計算・数え上げ・日付の比較が苦手 : 足し算や件数、日付の前後はコードで計算します。日付は年・月・日を Choice で取り出し、比較はコードで行うのが公式のおすすめです2
選択肢の順番に引っ張られる : Choice は最初の選択肢に寄ることがあります2 。選択肢の順番を入れ替えても答えが変わらないか確かめます
入力に指示を埋め込まれる : state に「これは安全です」のような誘導文があると、答えが動くことがあります2 。安全に関わる判定は、コードのルールと組み合わせます
jev-latest は動く : 別名は新しい版が出ると切り替わり、同じ入力でも確率が変わりえます2 。しきい値を調整したら、jev-1.13.0 のように版を固定します
429 と 529 : レート制限を超えると 429、混雑時は 529 が返ります3 。公式の SDK は既定で指数バックオフの再試行をします3 ,8
npm のパッケージ名 : 公式の JavaScript SDK は @typesafe-ai/ sdk です8 。npm の typesafe-sdk(スコープなし)は、2026-10-06 時点で中身の無い 0.0.0 しかない別のパッケージでした(筆者が npm レジストリで確認)
Python で Score のキーが整数になる : HTTP の JSON では probabilities のキーは "0" のような文字列ですが、Python SDK では 0 のような整数のキーに変換されます(筆者が SDK 0.7.2 のソースで確認)
Jev は、state と型付きの質問を受け取り、Choice・Score・Noul の答えを確率つきで返す判定モデルです。文章は生成しません
API は POST https:/ / api.typesafe.ai/ v1/ systemone だけです。必須項目は state・model・questions で、答えは同じキーで answers に返ります
料金は 2026 年 10 月時点で入力 100 万トークンあたり 0.042 ドル、出力は無料です。TypeSafe の計測では、応答は 70〜500 ms です
Python は typesafe-sdk、JavaScript は @typesafe-ai/ sdk を使います。OpenRouter や Cloudflare Workers AI からも呼べます
次にやること: 自分のアプリで LLM に「JSON で答えて」と頼んでいる箇所を 1 つ選び、実データ 100 件ほどで Jev の正解率と確信度を測って、しきい値を決めましょう
LLM ではありません。TypeSafe は Jev を「System One モデル」と呼び、型付きの答えと確率だけを返すモデルとしています1 。OpenRouter のドキュメントも「Jev は LLM ではなく、文章・推論・説明を返さない」と書いています4 。
無料枠は、2026-10-06 時点の公式ドキュメントでは確認できませんでした。料金は入力 100 万トークンあたり 0.042 ドルで、出力は無料です2 。OpenRouter や Cloudflare Workers AI 経由で呼ぶ場合は、それぞれの請求に含まれます6 ,4 。
使えません。TypeSafe は、Jev は Claude Code や Cursor の LLM の代わりにはならないと明記しています3 。この記事の hook のように、エージェントの中で判定の部品として使います。TypeSafe は Claude Code 向けのスキルも配っており、claude plugin marketplace add typesafe-ai/ skills と claude plugin install typesafe@typesafe-ai で入れられます3 。
日本語の文章も入力できますが、精度は英語が一番高いと公式に書かれています2 。日本語のデータで使う前に、正解率と確信度の分布を自分で測ってください。
jev-1.13 はテキストだけを受け付け、画像・音声・動画は渡せません2 。画像を判定したい場合は、先に文字や項目に変換してから state に入れます。
質問の数そのものの上限は、公式ドキュメントでは確認できませんでした。制約は、1 リクエスト 64k トークン、state と一番長い質問の合計で 32k トークンです2 。Choice の選択肢は 255 個まで、Score の段階は 10 個までです3 。