ドキュメント

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 の承認も受けていません。