Skip to main content

infer

inferCheckpointContext 上の onCheckpoint に渡される関数です。直前に保存されたチェックポイントアダプターに紐づいた推論リクエストを実行し、生の Response を返します。トップレベルの infer エクスポートはありません。SDK はコールバックの引数として渡し、呼び出しが正しいジョブ + チェックポイントステップに自動的にスコープされるようにしています。

シグネチャー

パラメーター

Function Calling の例

構造化出力の例

responseFormat のモード選択

responseFormat は OpenAI 互換で、「JSON が欲しい」用途のほぼすべてに対する推奨選択肢です。structuredOutputsresponseFormat で表現できない制約のためにとっておいてください。 strict: true は object スキーマに additionalProperties: false を必須にします。 OpenAI の strict モードは、ルートを含む全ての type: "object" スキーマで additionalProperties: false を明示し、すべてのプロパティを required に列挙したときだけ満たされます。これを満たさないと backend が 400 invalid_schema で拒否します。上の triage 例(および cookbook レシピ)はこの規約に従っているので、自前のスキーマを書くときはそれをコピーしてください。

structuredOutputs の例

vLLM 固有の拡張。1 回の呼び出しで json / regex / choice / grammar / json_object のうちちょうど 1 つだけ。TypeScript 型システムが 2 つ同時を拒否します。responseFormat の constraint との併用も避けてください: vLLM の sampling params に 2 つ制約が入って ingress で拒否されます。 固定 choice。 出力を小さな enumerated 集合のいずれかに強制します。余計な前置きを許したくない分類タスクのプロンプトに有用です。
正規表現。 出力を正規表現マッチに制約。ID 形式・通貨文字列・構造化トークンに合う。
EBNF グラマー。 完全カスタムな形のための EBNF グラマー。文字列は vLLM にそのまま転送されます。サポートされるグラマー構文は vLLM の structured outputs ドキュメント を参照。
json_object: true responseFormat: { type: "json_object" } の structuredOutputs 版で、vLLM の wire 形式と一致させるために用意されています。true のみ受理し、false はコンパイル時(型 literal)と ingress の両方で拒否されます(vLLM が truthy 値のときだけ JSON-object モードを発動するため、false を通すと制約のかからない出力になってしまうからです)。他と同じく「呼び出しごとに制約 1 つ」のルールに従います。

Function Calling のラウンドトリップ

モデルが tool_calls を返してきたら、ツールを自分で実行し、結果を tool ロールのメッセージとして追加し、再度 infer を呼びます。2 回目の呼び出しでもモデルが同じツール群を認識できるよう、同じ toolstoolChoice を渡します。
tool_calls[i].function.argumentsJSON エンコードされた文字列 であり、パース済みオブジェクトではありません。受け取ったら JSON.parse してください。tool メッセージの tool_call_id は、直前の assistant ターンの tool_calls[i].id と一致している必要があります(モデルが結果を正しいツール呼び出しに紐付けるため)。

型定義

サポートとなる型は arkor から export されています。リファレンス用にここでも展開:
assistant ロールは 2 つのサブシェイプに分かれており、{ role: "assistant" }contenttool_calls も無いものは型チェックを 通りません。少なくとも一方が必須。[ToolCall, ...ToolCall[]] の形で「tool_calls を持つときは非空」を型レベルで強制しています。

戻り値

inferPromise<Response> を返します: 生の Fetch Response。SDK はボディをパースしません。消費の仕方はあなたが決めます:
stream: true(デフォルト)のときボディは Studio の Playground が読み取るのと同じ形の SSE イベントストリームです。SDK はこのストリーム用のフレームパーサを今のところ提供していません。デコードしたテキストデルタが必要なら、packages/studio-app/src/lib/api.ts から小さな extractInferenceDelta ヘルパーをコピーするか、eventsource-parser を使ってパーサを書いてください。

レスポンスエンベロープ(stream: false

非ストリーミングのレスポンスは OpenAI 互換の chat-completion オブジェクトです:
実体がどこに入るかは指定した制約で変わります:
  • 制約なし または responseFormat: { type: "text" }: choices[0].message.content はプレーンテキスト。
  • responseFormat: { type: "json_object" } または type: "json_schema": choices[0].message.content は JSON を含む 文字列JSON.parse は自分で呼びます(SDK は事前にパースしません)。
  • structuredOutputs: { json } または { json_object: true }: 同様。choices[0].message.content は JSON 文字列なので JSON.parse する。
  • structuredOutputs: { choice } / { regex } / { grammar }: choices[0].message.content は制約に合致する文字列。JSON ではないのでパースしないこと。
  • tools 付きで tool call が返ったケース: choices[0].message.tool_calls が埋まり、content は省略 / null。各 tool_calls[i].function.arguments 自体が JSON エンコードされた文字列。
finish_reason: "tool_calls" は「最終回答を出さずツールを呼びたい」というモデルからのシグナルです。Function Calling のラウンドトリップ で次のターンを回します。

エラー

infer は非 OK な Response返しません。SDK は内部で CloudApiClient.chat を呼び、これは非 2xx を受け取ると CloudApiErrorthrow します。await infer(...) から戻った時点では、成功時の Response か例外、どちらかしか手元に来ません。try / catch(または .catch())で囲み、err instanceof CloudApiError で分岐して err.status / err.message を読んでください。CloudApiError クラスはそのために arkor から export されています。
catch しなかった推論エラーは onCheckpoint の外へ抜け、onCheckpoint の外に出た throw は trainer.wait() を即座に reject します。ランタイムの再接続ループには catch されず、再接続ループはトランスポート障害のみをリトライします。致命的でない推論エラーは callback 内で catch し、回復可能な失敗が実行全体を中断しないようにしてください。

制約

  • inferCheckpointContext 上に のみ 存在します。完了済みジョブに対する SDK 側の同等物はありません。その用途にはクラウド API を直接叩くか、学習をもう一度起こしてください。Studio の Playground は最終アダプターとチャットする UI レベルのルートです。
  • 呼び出しは { kind: "checkpoint", jobId, step } にスコープされます。onCheckpoint の中から別のチェックポイントや別モデルに向け直すことはできません。
  • 関数はメモ化されていません: 呼ぶたびにバックエンドへ届きます。

使いどころ

  • 学習中のサニティーチェック。 ステップ 50 のチェックポイントとステップ 100 のチェックポイントを固定プロンプトで比較。Loss(モデルの誤差を表す指標)の曲線は問題なく見えても出力が劣化していれば、学習完了前に気付けます。
  • カスタム Early Stopping(学習の自動打ち切り)。 簡単な eval プロンプトと組み合わせて、出力が逸脱したら controller.abort()abortSignal を参照)で学習を止め、trainer.cancel() でバックエンドを停止。詳しくは Early Stopping レシピ を参照。
  • 自前 UI へのライブプレビュー。 チェックポイントの出力を Slack、社内レビューキュー、自前アプリのプレビューチャネルに送る。

関連項目