TypeSafe 互換性
TypeSafe の閉源 Jev モデルが「System One」という意思決定モデルのカテゴリを生み出しました。Ollaya の /v1/* API は、typesafe-sdk 0.7.1 のワイヤスキーマとエラー処理で定義される形で、TypeSafe とワイヤ上で同一です。そのため、TypeSafe 向けに書かれたコードは、自分のマシン上のオープンモデルに対してそのまま動きます。
SDK を Ollaya に向ける
公式の TypeSafe Python SDK 0.7.1 は変更なしで動作します。次の環境変数を設定します:
export TYPESAFE_BASE_URL=http://localhost:11435
export TYPESAFE_API_KEY=local # the SDK needs a non-empty key; any value works
export TYPESAFE_DEFAULT_MODEL=winnow:e4b # otherwise the SDK sends its default, "jev-latest"
export NO_PROXY=localhost,127.0.0.1 # keep local requests off any system proxy
- デフォルトモデル。
winnow:e4bが Jev に最も近く(型付き意思決定で 0.722、Jev は 0.738)、RTX 4090 で約 90 ms で答えます。NVIDIA GPU がない場合はlayaを使ってください。CPU で 1 秒の何分の一かで答えます。 - API key。 Ollaya はどの key でも受け付けます。ただしサーバーが
OLLAYA_API_KEYを設定している場合、SDK の key がそれと一致していなければなりません。 - リクエスト ID。 どのレスポンスにも
x-typesafe-request-idが付くので、response.request_idが機能します。 - 再試行。 SDK は 10 秒でタイムアウトして再試行します。あるモデルへの最初のリクエストはロードを待ち、リクエストより長く続いたロードはそのまま続くので、再試行のときにはモデルは温まっています。
- システムプロキシ。 システム HTTP プロキシのある Mac では、TypeSafe SDK(
httpxと同様)がlocalhost宛てのリクエストもプロキシ経由で送ってしまい、システムの例外リストを無視します。すると状態がプロキシを通り、Ollaya が落ちている間、SDK は接続拒否ではなく502 status code (no body)を報告します。TYPESAFE_BASE_URLの隣にNO_PROXY=localhost,127.0.0.1を設定してください。 - ウォームアップと所要時間。 最初のリクエストの前にモデルをロードするには、
/api/decideに{"model": "winnow:e4b", "keep_alive": -1}を送ります(stateなし)。/v1/*のレスポンスは TypeSafe と同様に所要時間を含みません。/api/decideはtotal_duration、load_duration、eval_durationを報告します。
エンドポイント
| エンドポイント | 説明 |
|---|---|
POST /v1/systemone |
意思決定を行います。リクエスト:model、state(必須)、questions。レスポンス:model、answers、usage のみ。 |
POST /v1/decisions |
/v1/systemone の別名 |
GET /v1/models |
このマシン上のモデル:name、description、release_date |
リクエストとレスポンス
curl http://localhost:11435/v1/systemone \
-H "Authorization: Bearer local" \
-d '{
"model": "laya",
"state": "Can I get an invoice for last month?",
"questions": {
"intent": {
"type": "choice",
"instructions": "What does the customer want?",
"criteria": {
"invoice": "Needs an invoice or receipt",
"refund": "Wants money back",
"other": "Anything else"
}
}
}
}'
{
"model": "laya:en",
"answers": {
"intent": {
"type": "choice",
"choice": "invoice",
"confidence": 0.9547,
"probabilities": {"invoice": 0.9698, "refund": 0.0172, "other": 0.013}
}
},
"usage": {"input_tokens": 43, "output_tokens": 0}
}
レスポンスの model は実際に答えたチェックポイントです。laya は router で、この英語のリクエストは laya:en に行きました。TypeSafe のスキーマはこれを許しています(“may differ from the alias supplied in the request”)。値は小数点以下 4 桁で、probabilities は criteria の順に並びます。
curl http://localhost:11435/v1/models -H "Authorization: Bearer local"
{
"models": [
{
"name": "laya:en",
"description": "English decision model (ModernBERT-large): guardrails, email and ticket triage.",
"release_date": "2026-09-23"
},
{
"name": "laya:latest",
"description": "Routes each request to laya:en or laya:multilingual by the text's script and language.",
"release_date": "2026-09-23"
},
{
"name": "laya:multilingual",
"description": "Decision model for 100+ languages (mmBERT-base).",
"release_date": "2026-09-23"
}
]
}
/v1/models はこのマシンに取得されたモデルを router も含めて一覧します。registry は一覧しません。
エラー
エラーは TypeSafe のステータスコードと、SDK が正しく読める本文を持ちます。文字列の error(SDK が表示します)、機械可読な code、そして 422 では TypeSafe の detail 検証問題リストです。すべてのコードはエラーを参照してください。
{"error": "model \"jev-latest:latest\" not found, try pulling it first", "code": "MODEL_NOT_FOUND"}
異なる点
互換が及ぶのは API であって、モデルではありません:
- モデル名は Ollaya のもの(
laya、laya:en)なので、TYPESAFE_DEFAULT_MODELを設定するかmodelを渡してください。 instructionsの欠落。 質問にそれが無い場合、モデルは代わりに質問 id を読みます。ですから質問には説明的な名前を付けてください(is_urgent、tone)。- 制限。 1 リクエストあたり最大 256 問、選択肢は 2–255、score の段階は 2–10 です。各モデルには選択肢の予算もあります:
laya:enは約 125 選択肢、laya:multilingualは 250 です。 - 長い状態。 TypeSafe は最大 65,536 token を読みますが、オープンモデルのコンテキストはより短くなります(
laya:enは 512 token、laya:multilingualは 1,024 token、質問を含む)。状態が収まらない場合、/v1/*はその一部から答えるのではなく422 STATE_TRUNCATEDを返します。コンテキストの長いモデルを使う、状態を短くする、あるいは/api/decideを呼んでください。これは切り詰めてstate_truncatedを報告します。 /v1/*は純粋なままです。keep_aliveやextrasといったネイティブのフィールドはそこでは無視されます。ルーティング、所要時間、切り詰めは/api/decideで報告されます。- 品質はオープンモデルによるものなので、タスクによって Jev と異なります:
laya:typed-decisionsは型付き意思決定で 0.766、Jev 1.13 の公表値は 0.727 です。- 基本の Laya チェックポイントは、型付き意思決定のゼロショットでほぼ偶然の水準です(0.362)。
- 選択肢の多い choice の質問(約 20 を超える)は弱くなります:Banking77 で 0.425、Jev は 0.870 です。
本番トラフィックを切り替える前に、自分のデータで測定してください。Laya ページに詳細があります。
提携していません
Ollaya は独立したオープンソースプロジェクトです。TypeSafe と提携しておらず、TypeSafe の承認も受けていません。