開発者向けの独立したガイドとコミュニティ
Jev の公式情報:typesafe.ai

Jev を無料で試す

同じ状況について1問、または異なる3問を試せます。まず例を選び、入力を編集して、それぞれの構造化された回答を確認してください。

GitHub のプロジェクトを見る 活用例
01 / 判断を一つ選ぶ

具体的な例から始めましょう

typesafe/jev-1.13

回答形式を1つずつ試せます。 実行するたびに、その日の利用枠を1回分使います。

1. Choice
questions.decision
APIリクエストをプレビュー

プレビューにAPIキーや認証トークンは含まれません。各質問IDと同じ名前で回答が返ります。

{
  "model": "typesafe/jev-1.13",
  "state": {
    "input": "サブスクリプションの料金が二重に請求されました。対応できますか?"
  },
  "questions": {
    "decision": {
      "type": "choice",
      "instructions": "どのチームが対応すべき?",
      "criteria": {
        "billing": "支払い・返金",
        "technical": "バグ・連携の問題",
        "general": "その他の問い合わせ"
      }
    }
  }
}

1アカウントにつき、UTCの1日あたり無料で6回まで。毎日00:00 UTCにリセットされます。サイト全体の利用枠にも上限があります。入力はOpenRouterに送信されますが、このサイトには利用記録のみを保存し、入力内容は保存しません。

02 / 回答の読み方

入力して実行できます

例を実行すると、質問ごとに形式の決まった回答が返ります。Choiceは選択肢、Scoreは尺度上の値、Probabilityは0~1の値を返します。

API 連携の例

Jev をコードに組み込む。

このフォームは文章をstate.inputとして、名前を付けた1問または3問とともに送ります。結果はそれぞれanswers.<question_id>に入ります。

各フィールドの意味

リクエストで質問と回答形式を指定し、レスポンスでは質問ごとに結果が返ります。コード例に出てくる JSON の項目を見ていきましょう。

リクエスト

model
モデル ID。例では Jev 1.13 を指定し、使用バージョンを明確にしています。
state
評価するテキストまたは構造化データ。例ではサポートへの問い合わせです。
questions
質問名をキーにしたオブジェクトです。レスポンスの answers に同じキーで結果が返ります。
<question_id>
actionやurgencyなどの名前です。回答にも同じ名前が使われます。
type
回答形式です。choiceは選択肢を選び、scoreは順序のある段階で評価し、noulは「はい/いいえ」を判定します。
instructions
モデルに求める具体的な判断内容です。
criteria
choiceの選択肢、scoreの段階、またはnoulのfalseとtrueの意味を指定します。

レスポンス

answers
各質問への回答。同じ名前のキーに格納されます。
choice
選ばれた選択肢のキー。最も確率の高い選択肢です。
probabilities
各選択肢の確率。合計は 1 になります。
confidence
確率の分布から計算する確信度で、選ばれた候補の確率とは別の値です。
score
各段階の確率で重み付けした位置です。2つの段階の間になることもあります。
legend
scoreの数値上の位置と、指定した各段階の説明との対応です。
noul
はい・いいえの質問に対する 0(いいえ)から 1(はい)の値です。

同じ状況について、Choice・Score・Probabilityの3問を個別に評価します。 実行するたびに、その日の利用枠を1回分使います。 形式が正しくても判断が正しいとは限りません。代表的な事例で検証し、用途に応じた閾値を設定してください。

エンドポイント

OpenRouter

このPlaygroundはOpenRouter経由でバージョンを固定したJevを呼び出します。最新の料金と提供状況はモデルページで確認してください。

エンドポイント
POST https://openrouter.ai/api/alpha/decisions
model
typesafe/jev-1.13
APIキー
APIキーはサーバーからBearerトークンとして送信します。
OpenRouter ↗
公式の直接API

TypeSafe

TypeSafeには独自のエンドポイントとAPIキーがあります。公式クイックスタートではjev-latestを使い、1回のリクエストで複数の質問を送る方法を示しています。

Official published price
$0.042per 1M input tokens

Output tokens are free.

Eligible accounts may receive promotional credits. TypeSafe does not publish a fixed amount on its public pages; check the console for your balance and terms.

エンドポイント
POST https://api.typesafe.ai/v1/systemone
model
jev-latest
APIキー
APIキーはサーバーからBearerトークンとして送信します。
LangChain · Python

LangChain のエージェントハーネスに Jev を組み込む

ハーネスがモデル呼び出しとツール実行の流れを管理します。判断が必要な場面で Jev にメッセージ、実行予定のツール呼び出し、またはエージェントの状態を渡し、型付きの結果を受け取ります。次の処理はコードで決め、自由記述の作業はチャットモデルに任せます。

ModelRouterMiddlewarebefore_agent → wrap_model_call

実行前に最新のユーザー入力を分類してモデルを選び、その実行中は同じ選択を使います。選択結果、確率、信頼度はエージェントの状態にも残ります。

AutoModeMiddlewarewrap_tool_call

指定したツールの実行前に呼び出しを判定します。リスクが高い、または権限が不十分と判断されると、呼び出しを止めてエラーの ToolMessage を返します。人間への承認依頼は行いません。

TypeSafeClassifierChoice · Score · Noul

独自の判断点も追加できます。カスタムミドルウェアから TypeSafeClassifier にメッセージや状態を渡し、Choice、Score、Noul の結果をもとに分岐や人手での確認を行います。

LangChain · Python · ModelRouterMiddleware
# pip install "langchain-typesafe[experimental]" langchain-openai
# Set TYPESAFE_API_KEY and OPENAI_API_KEY on your server.
from langchain.agents import create_agent
from langchain_typesafe.experimental.middleware import (
    ModelChoice, ModelRouterMiddleware,
)

router = ModelRouterMiddleware(
    choices={
        "fast": ModelChoice(
            model="openai:gpt-5.6-terra",
            criteria="Simple lookups and extraction.",
        ),
        "powerful": ModelChoice(
            model="openai:gpt-6-astra",
            criteria="Complex reasoning and high-stakes decisions.",
        ),
    },
    instructions="Choose the least costly model that can do the task safely.",
)
agent = create_agent("openai:gpt-5.6-terra", middleware=[router])
result = agent.invoke({"messages": [{"role": "user", "content": "Summarize this log."}]})
print(result["model_route"].choice)

サーバー側 TypeScript

TypeScript · fetch
// Run on your server. Keep the API key out of browser code.
const apiKey = process.env.OPENROUTER_API_KEY;
if (!apiKey) throw new Error("Set OPENROUTER_API_KEY");

const response = await fetch("https://openrouter.ai/api/alpha/decisions", {
  method: "POST",
  headers: {
    Authorization: "Bearer " + apiKey,
    "Content-Type": "application/json"
  },
  body: JSON.stringify({
    model: "typesafe/jev-1.13",
    state: {input: "A customer reports a duplicate charge."},
    questions: {
      team: {
        type: "choice",
        instructions: "Which team should handle this?",
        criteria: {
          billing: "Payments and refunds",
          technical: "Bugs and integrations"
        }
      },
      urgency: {
        type: "score",
        instructions: "How urgent is the issue?",
        criteria: ["Can wait", "Needs attention today", "Immediate action"]
      },
      escalate: {
        type: "noul",
        instructions: "Should a human review this first?",
        criteria: {false: "No review needed", true: "Review before acting"}
      }
    }
  })
});

if (!response.ok) throw new Error("Decision request failed");
const {answers} = await response.json();
console.log(answers.team.choice, answers.urgency.score, answers.escalate.noul);
回答の読み方

3種類の質問と回答形式

コードで必要な回答形式を選びます。複数の質問を送ると、各質問IDに対して個別の結果が返ります。

TypeSafe: Choice · Score · Noul ↗

Choice

choice · probabilities · confidence

選ばれた選択肢のキー。最も確率の高い選択肢です。

Score

score · legend · probabilities · confidence

各段階の確率で重み付けした位置です。2つの段階の間になることもあります。

Noul

noul

はい・いいえの質問に対する 0(いいえ)から 1(はい)の値です。

本番運用の前に

実際の問い合わせに近いデータで検証し、モデルのバージョンを記録してください。結果が不確かな場合や影響が大きい場合は、人が確認できるようにします。0.8 は説明用の値です。

コミュニティ最新情報

自分に合った方法でJevエコシステムを追いかける。

頻繁に更新される公開リポジトリ、または不定期の厳選メールで、新しいJevプロジェクト、System Oneのコミュニティモデル、実践事例を確認できます。

公開情報を随時更新

Jev AI Radar

開発者、スクリプト、AIエージェントが読み取り、再利用し、変更を追跡できるオープンソースのコレクションです。

GitHubでスターを付ける
厳選情報を不定期配信

ニュースレター

注目のコミュニティプロジェクト、役立つコード例、Jevの実践的な活用法を、ときどきメールでお届けします。

購読すると、Jev AI Dev からのメールを不定期に受け取ることに同意したものとみなされます。