Skip to content

独自API ​

mado ML TrackingのAPIは2つあります。

API接続先こんなときに向いています
MLflow 3互換API/api/mlflow/projects/<Project ID>公式のMLflow 3 SDKや、MLflowに対応したツールから記録する(MLflow 3から記録する)
独自API(native API)/apiPython SDK(mado-tracking)、worker、画面、MLflowに無い機能(Job、自動実行、昇格policy、監査ログなど)を使う

このページでは独自APIを説明します。Pythonから使う場合は、APIを直接呼ぶよりPython SDKが便利です。

認証 ​

方法使う場面
Authorization: Bearer <API token>SDK、スクリプト、CI、worker
session cookieブラウザ(画面)。変更の操作ではOriginを検証します

API tokenの発行とscopeはAPI tokenとService Accountを参照してください。tokenでの操作は、scopeとtokenの所有者のProjectのRoleを両方確かめます。

sh
export MMT_API_URL=https://tracking.example.com
printf 'API token: '; read -r -s MMT_API_TOKEN; echo
export MMT_API_TOKEN

curl -sS -H "Authorization: Bearer $MMT_API_TOKEN" "$MMT_API_URL/api/projects"

一部の操作はブラウザのsessionでだけ使えます。API tokenで呼ぶと403 session_requiredになります。

  • 自分のパスワードの変更
  • コンピュータの自分の設定(保存と削除)
  • 全体管理者でない人による、コンピュータ(site)の追加と設定の変更
  • アーカイブしたProjectの完全な削除

API tokenの発行と失効、Service Account、全体の監査ログ、ユーザーの管理は、tokens:manage・audit:read・users:manageを付けたtokenで使えます(API tokenとService Account)。

共通の形 ​

  • JSONのキーはcamelCaseです。
  • IDはUUID、日時はISO 8601(UTC)です。
  • 1件の取得・作成は、そのものを直接返します。一覧は{items: [...]}の形です。続きがある一覧はnextCursorを返すので、次の要求のcursorに渡します。
  • JSONの本文は既定で4MiBまでです。例外(オフライン記録の後送りは32MiB、DatasetVersionの作成は128MiB)はOpenAPIに書いています。
  • Artifactの本体の取得はHTTPのRangeに対応しています。

エラー ​

エラーは次の形で返します。errorは人が読むための文、codeはプログラムで判定するための値です。判定にはcodeを使ってください。

json
{"error": "API tokenのscopeが不足しています。この操作にはruns:writeが要ります。[プロジェクト設定]の[API tokenを発行]で用途「SDK・MLflow 3から記録する」を選び、tokenを発行し直してください", "code": "insufficient_scope"}
statusよくあるcode意味
400invalid_cursor、invalid_parameter_value検索条件やcursorが正しくない
401authentication_required、invalid_tokenログインしていない、tokenが無効・失効・期限切れ
401identity_sync_requiredSSOのユーザーが7日以上ブラウザでログインしていない(Authentik(SSO))
403insufficient_scopetokenのscopeが足りない(errorに足りないscopeと発行し直す場所が入る)
403project_forbiddenProjectのRoleが足りない、またはtokenを限定したProjectと違う(errorにtokenのProject名が入る)
403session_requiredブラウザのsessionでだけ使える操作
403job_token_forbiddenJob限定tokenで許されていない操作
403job_owner_requiredほかの人が作成したJobの停止・再実行(作成者かProjectのAdminだけ)
403password_change_required初回ログインのパスワード変更が済んでいない
404—対象が無い、または別のProjectのもの
409conflictほか状態の競合(最後のAdminを外す、終わったJobへの操作、Jobが動いているProjectのアーカイブ(project_has_active_jobs)、アーカイブしていないProjectの削除(project_not_archived)、使われているデータセットのバージョンの削除(dataset_version_in_use)など)
413artifact_too_largeArtifactが上限(既定200GiB)を超えた
422invalid_requestほか入力の形式や値が正しくない
429rate_limitedログインの試行回数の上限。Retry-After秒待つ
503oidc_unavailableAuthentikにつながらずSSOのsessionを確かめられない
503database_unavailableDBにつながらない(GET /api/health)

機能ごとの分類 ​

OpenAPIでは、APIを次の分類(tag)に分けています。

分類内容
system稼働確認(GET /api/health)とOpenAPI
authログイン、session、自分のアカウント
accessProjectのメンバー、groupへの付与
tokensAPI token、Service Account
projectsProject、Experiment
runsRunの記録・検索・比較・再開
analysisメトリクスの系列、探索結果の分析
mediaRunのstepごとの音声・画像・動画・表
collaborationRunの説明文、コメント
saved-views、reports保存ビュー、共有レポート
syncオフライン記録の後送り
checkpoints学習の途中再開
sweepsハイパーパラメータの探索
registryModel、Code、Datasetとそのバージョン
automationモデル登録後の自動実行と連鎖
evaluation、promotion評価結果の比較、昇格policyと判定
tasksTaskと起動
artifacts、artifact-uploadsArtifactの保存・一覧・取得、再開可能なupload
executionJob、Compute target、worker
workerworkerだけが使うAPI(worker:executeのtoken)
pluginsPluginの接続
notifications、operations通知、運用アラート
audit監査ログ
admin全体管理(プロジェクト、保存先とディレクトリ候補、ユーザー)

OpenAPI(openapi.json) ​

すべてのrouteの認可、入力、出力、エラーコードを、OpenAPI 3.1の形式で公開しています。MLflow互換APIは含みません(MLflow公式のREST APIに従います)。

  • 動いているサーバーから: ログインしたブラウザか、read scopeのtokenでGET /api/openapi.jsonを取得します。
  • リポジトリから: docs/openapi.json
sh
curl -sS -H "Authorization: Bearer $MMT_API_TOKEN" "$MMT_API_URL/api/openapi.json" -o openapi.json

取得したファイルは、Swagger UIやRedoc、OpenAPIのクライアント生成ツールで読み込めます。

OpenAPIには、このアプリ独自の項目があります。

項目内容
securitysessionCookieかbearerToken。bearerTokenの値は必要なscope
x-mmt-access必要なProjectのRoleとscope、ブラウザのsessionだけで使えるか
x-mmt-job-tokenJob限定tokenで呼べるか(read、write、forbidden。writeはtokenのRunへの書き込みだけ)
x-mmt-error-codesstatusごとのエラーコード
x-mmt-max-body-bytes本文の上限が既定と違うrouteの上限

振る舞いの正本はリポジトリのdocs/api-contract.mdで、openapi.jsonはそれを機械で読める形にしたものです。両者の食い違いはテストで検出しています。