Documentation

アーキテクチャ

Schema ABI、Request ABI、Runtime ABI は別のコンパイラです。

llm-abi はコンパイラです。変換器ではありません。

Schema ABI
JSON Schema / Standard JSON Schema / TypeScript type subset
              ↓
        Normalized IR
              ↓
   analyze  →  lower(profile)  →  emit
              ↓
 provider JSON Schema + diagnostics + fingerprint + size

Request ABI
provider + model + endpoint + tools + reasoning
              ↓
     resolve request profile
              ↓
     apply model defaults
              ↓
     evaluate rules
              ↓
 compatibility + diagnostics + fixes

Runtime ABI
runtime + model + request (+ optional schema)
              ↓
     resolve runtime / model profiles
              ↓
     compile() when a schema engine is known
              ↓
 compatibility + coverage + diagnostics + fixes

compile() は model、endpoint、reasoning_effort を見ません。その組み合わせは checkRequest() です。ランタイム、エンジン、モデル形式の組み合わせは checkDeployment() です。

ランタイム向けスキーマは scope: "runtime" です。デフォルトの check() と listTargets() はプロバイダのままです。クラウドのマトリクスに、format が要る LM Studio や Ollama の行を混ぜないためです。

IR

IR のノード種類は閉じています。string、number、integer、boolean、null、object、array、tuple、enum、literal、union、intersection、ref、any、never。

JSON Schema は一度だけ IR になります。プロバイダコードが生の JSON Schema キーワードをパターンマッチしてはいけません。

ターゲットプロファイル

プロファイルはデータです。

  • 各キーワードの能力(supported | runtime-only | lossy | unsupported)
  • オブジェクト方針(additionalProperties、optional-as-nullable)
  • 上限
  • maturity(supported | partial | experimental)
  • 証拠の種類と出典(documented | sdk-observed | empirical)
  • 最終確認日と nightly アダプタの有無
  • パッケージに同梱される revision 文字列

lowering はこのプロファイルを読みます。ベンダを足すときに、新しいコンパイラは要りません。

リクエストプロファイル

こちらもデータです。モデルファミリーのマッチ、省略時のデフォルト、エンドポイントルール。checkRequest() はルールの前にデフォルトを入れるので、省略した reasoningEffort でも、モデルデフォルトが none でなければ非互換になります。

リクエストファミリーを足すときに、新しいチェッカーは要りません。リクエスト を見てください。コントリビュータ向けのフィールド一覧はリポジトリの docs/requests/ にあります。

安全

信頼できないスキーマには、深さ、ノード数、$ref 数の上限があります。プロパティ名をキーにする辞書は Map か、null プロトタイプのオブジェクトです。

Playground

packages/playground は Cloudflare Pages 上の静的 Vite アプリです。公開 llm-abi API を import し、ブラウザ内でコンパイルします。プロバイダプロファイルも localhost も取りに行きません。互換性は離散的な段階だけで、パーセントはありません。同じデプロイが /docs/(英語)と /docs/ja/(日本語)を配信します。ビルド時に docs/*.md と docs/ja/*.md から生成します。