ベースモデルや完了済みジョブの最終アダプターとチャットする。
Playground(#/playground)はモデルを動作確認するための小さなチャット UI です。ラジオボタンで切り替える 2 モード:
/v1/inference/chat で受け付けるベースモデルとチャット。現在サポートされる値は 1 つ: gemma-4-E4B-it(サポートしているモデル を参照)。{ kind: "final", jobId })とチャット。中間チェックポイントはここから選べません。Playground はマウント時に /api/jobs を 1 度取得し、レスポンスを status === "completed" でフィルターします。アダプターのドロップダウンはバックエンドが返した順でそれらのジョブを並べます。自動リフレッシュはなく、モードを切り替えても再取得は行われません。新しい学習が終わったらドロップダウンに反映するため、ページをリロードする(あるいは #/playground から離れて戻り、再マウントする)必要があります。
チャット UI はあえて最小限です。{ role, content } メッセージのリスト、入力欄、Send ボタン。会話履歴はページローカルで、リロードでクリアされます。
送信すると Studio は POST /api/inference/chat を次のように呼びます:
{
messages: [...history, { role: "user", content: input }],
stream: true,
...(mode === "base"
? { baseModel }
: { adapter: { kind: "final", jobId } }),
}レスポンスはトークンデルタの SSE ストリームです。Studio は各フレームをパースしてアシスタントメッセージにその場で追記するので、生成中にバブルが埋まっていきます。Send ボタンはストリーム進行中は無効です。
kind: "final" だけ送ります。学習中に推論したいなら SDK の onCheckpoint({ infer }) を使ってください。与えられる infer は直前に到達したチェックポイントに紐づいています。temperature / topP / maxTokens。 HTTP の形(InferArgs)はこれらを受け付けますが、Playground は入力欄を提供しません。Studio は messages とモード固有のフィールドだけを送ります。これらのノブを試したい場合は SDK の infer を直接呼んでください。user ロールのみ追加します。system 用のフィールドはなく、Playground のリクエストはこの画面で入力した内容だけから構築されます。System プロンプトを試すには、学習中に onCheckpoint へ渡される infer に system メッセージを渡してください。/api/jobs が返すものをそのまま表示します。著者など他次元でフィルターしません。これより構造的なもの(回帰スイート、複数アダプター間のペア比較、本番 A/B)は Playground ではなく SDK と自前の評価コードに任せてください。