Studio はDocumentation Index
Fetch the complete documentation index at: https://arkor-92aeef0e-eng-736.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
arkor dev を実行したときに起動するローカル Web UI です。ローカルで動き、同じ CLI プロセスとループバック越しに通信し、dev サーバーを止めれば消えます。サインアップも公開 URL もありません。
http://localhost:4000(arkor dev --port で変更可)で開いてください。
レイアウト
ヘッダーには現在の ID が<mode> · <org>[ / <project>][ · <baseUrl-host>] の形で表示されます。mode は anonymous か auth0。クラウド API ホスト suffix は CLI が本番エンドポイントを指しているときは隠され、それ以外で表示されます。
4 ページ、アプリ内ナビ(Overview / Jobs / Playground / Endpoints)で切り替えます:
| ルート | ページ | やること |
|---|---|---|
#/ | Overview(このページ) | プロジェクトのランディング。ここから学習をトリガーする。 |
#/jobs | Jobs | 自動更新されるジョブ一覧。 |
#/playground | Playground | 最終アダプターやベースモデルとチャット。 |
#/endpoints | Endpoints | アダプター/ベースモデルを *.arkor.app URL として公開し API キーを管理。 |
#/jobs/:id でジョブ単位の詳細(ライブステータス、Loss チャート、イベントログ)も開けます。ナビタブではなく Jobs のサブルートとして提供しています。
アーキテクチャ
/api/* リクエストごとに 3 つのチェックが走ります:
- Host ヘッダーのガード。
127.0.0.1とlocalhostのみ受理。127.0.0.1に DNS リバインディングされる悪意あるサイトに誘導された被害者でも、送信されるのはHost: evil.comで、ミドルウェアは HTTP 403 で拒否します。 - 起動ごとの CSRF トークン。
arkor devは起動ごとに 32 バイトのトークン(base64url)を生成し、<meta name="arkor-studio-token">としてindex.htmlにインジェクトし、すべての/api/*呼び出しに必須化します(ヘッダーX-Arkor-Studio-Token、またはEventSourceリクエスト用に?studioToken=)。クロスオリジンタブは meta を読めないので、preflight をスキップする「simple」なクロスオリジン POST も拒否されます。比較にはtimingSafeEqualを使用しているため、タイミング攻撃に対して安全です。 - CORS なし。 SPA は同一オリジンなので CORS には意味がありません。
*を反射すると「simple」なクロスオリジン POST(text/plain、urlencoded)を素通りさせてしまうので、トークンチェックがそれを拒否します。
arkor dev 起動のたびにローテートされるので、前回起動時の古いタブはリロードするまで HTTP 403 で失敗します。
現在できること
| 機能 | 補足 |
|---|---|
| Run training | Overview ページ (#/) のボタン。POST /api/train を呼ぶと arkor start がサブプロセスとして起動し、stdout/stderr が生のテキストとしてページにストリーミングされます。 |
| Jobs リスト | #/jobs。5 秒間隔の自動ポーリングに加えて手動 Refresh ボタン、名前 / ID での検索、status フィルター(All / Running / Completed / Queued / Failed / Cancelled)を備えます。列: Status、Name(詳細へリンク)、Created、ID。 |
| Job 詳細 | #/jobs/:id。ライブステータスバッジ、SVG の Loss チャート、生イベントログ(直近 50 行)。Server-Sent Events 経由で /api/jobs/:id/events からストリーム。 |
| Playground | #/playground のチャット UI。2 モード: 1 つの対応ベースモデル、または任意の完了済みジョブの最終アダプター。 |
| Endpoints | #/endpoints の *.arkor.app URL 管理。Deployment の作成、enabled / auth mode の切替、API キーの発行と revoke。SDK の CloudApiClient と等価で、UI で行えるすべての操作にプログラマティックな呼び出しが対応。 |
まだないもの
これらは SDK や HTTP API レベルでは存在しますが、Studio UI としては今のところありません:| 不足 UI | 回避策 |
|---|---|
| 動作中ジョブのキャンセル / 一時停止 | 自前コードから trainer.cancel() を呼ぶ。 |
| Playground での中間チェックポイントアダプター選択 | トレーナー内で onCheckpoint({ infer }) を使う。SDK の infer は直前に保存されたチェックポイントに紐づく。 |
| Jobs リストのページング | 現状のポーリング一覧ビューでは対象外。サーバーが完全な一覧を返す前提。 |
| プロジェクトごとの複数トレーナー | /api/manifest が単一の trainer を返す。SDK の createArkor も 1 つしか受け付けない。 |
Playground から temperature / topP / maxTokens を調整 | HTTP API(InferArgs)はこれらを受け付ける。SDK から infer を呼ぶ際に渡してください。 |
| Loss チャートのズーム、エクスポート、ツールチップ | チャートは静的な SVG パス。 |
| Deployment 作成後のターゲット編集 | cloud API は PATCH /v1/endpoints/:id で target を受け付けますが、Endpoints UI では auth mode と enabled トグルしか公開していません。SDK の updateDeployment を使ってください。 |
Studio を使うべきでない場面
Studio は開発ツールです。ループバックでのみ、arkor dev が立ち上がっている間だけリッスンし、起動ごとに CSRF トークンをローテートします。プロダクション利用では Studio にユーザーを向けるのではなく、自前のアプリケーションコード(あるいはデプロイ済みの推論層)から infer を呼んでください。