mcpField
M
melange-cli

melange-cli

github.com/zetic-ai開発1743 回インストール3 週間前に更新
リポジトリ

melange-cli について

Melange CLIは、オンデバイス展開とベンチマークのためにZetic.ai Melangeプラットフォーム上のモデルを管理します。エージェント向けの構造化出力、モデルのインポート・アップロード手順を備え、MCPサーバーとしても利用できます。

主な機能

  1. 01リポジトリとモデルバージョンの管理
  2. 02モデルアーティファクトのインポートとアップロード
  3. 03変換済みターゲットとレポートの確認
  4. 04JSON、jq、テンプレート形式の出力
  5. 05操作をMCPツールとして提供

活用シーン

  1. 01Hugging FaceリポジトリからのLLMインポート
  2. 02エクスポートしたモデルアーティファクトのアップロード
  3. 03モデルターゲットとベンチマークレポートの確認

MCP 対応

`melange mcp`コマンドはCLIの操作をMCPツールとして公開し、デフォルトのstdioまたは共有リモート展開向けのHTTPを使用します。認証管理やHTTP経由でのローカルファイルのアップロードなど、一部の操作はCLI限定です。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/zetic-ai/melange-cli --skill melange-cli

インストール後、Claude Code で/melange-cliを入力して読み込まれたか確認します。

同梱ファイルassets/report-general.mdassets/report-llm.md

詳細

Melange CLI

melange は、Zetic.ai Melange プラットフォーム(オンデバイス AI モデルのデプロイとベンチマーク)の CLI です。エージェント優先の設計で、データは stdout に、進捗や診断情報は stderr に出力され、終了コードは安定しており、--json の出力は、文書化された合成結果や秘匿化された結果を除いて、機械処理に正確です。待機後のアップロード/インポート結果では、モデルの識別情報と最終ステータスが合成され、ダウンロード認可 URL は認証情報が秘匿化されます。正式なトピックについては、melange help exit-codes と melange help formatting を実行してください。

MCP サーバーの代替手段

melange mcp は、これらと同じ操作を MCP ツールとして提供します(デフォルトは stdio、共有リモートデプロイには --transport http を使用)。Melange MCP サーバーがすでにセッションに接続されている場合は、カタログにある操作について、シェルからコマンドを実行する代わりにサーバーのツールを優先してください。ツールがない操作(認証管理、ディスクへの model download、バケット分割された .pt2 または --input-manifest を使ったアップロード、melange api)の場合、またはサーバーが HTTP 経由で接続されていて作業にユーザーのローカルファイルが必要な場合は、CLI を使用してください。upload_model ツールが使えるのは stdio の場合のみです。正式なツールリファレンス(トランスポート、トランスポートごとの認証、確認が必要なツール、書き込み範囲の拒否)については、CLI リポジトリの llms.txt の ## melange mcp セクションと melange mcp --help を参照してください。このスキルでは、意図的に内容を重複して記載していません。以下のすべてのルール(ノンブロッキングな変換の監視、パイプラインパネル、レポートテンプレート)は、データが MCP ツール経由で取得された場合も変わりません。

認証

対話的な使用ではブラウザー OAuth がデフォルトです。melange auth login を実行するとブラウザーが開きます(PKCE ループバック、zoa_/zor_、自動更新)。ブラウザーやディスプレイを利用できない場合は、PAT の貼り付けにフォールバックします。

melange auth login                          # OAuth recommended (browser)
melange auth login --with-token < token.txt # PAT for CI/headless (ztp_...)
export MELANGE_API_KEY=ztp_...              # PAT env var also overrides stored OAuth
melange auth status --json                  # verify: exit 0 = authenticated

auth status の終了コード 4 は、未ログインまたはトークンが拒否されたことを意味します。サーバーが対応している場合、auth status にはアカウントのプランも表示されます。melange plan では詳細を確認できます。 代替手段:MELANGE_API_KEY_FILE=/path/to/token(読み取り不能な場合はエラーになり、OAuth では空のファイルは無視されます)、melange auth login --no-browser(SSH 用の URL を表示)、または --insecure-storage(config.yml に 0600 で保存)を使用します。melange auth token は解決済みトークンを出力します(stdout にはそれ以外何も出力されません)。 デフォルト以外の API ホストを指定するには、MELANGE_HOST を設定します。対話的なプロンプトを確実に表示しないようにするには、--no-input を渡します。

認証情報の優先順位は、MELANGE_API_KEY > MELANGE_API_KEY_FILE(空でない場合)> OAuth(キーリング/設定、自動更新、zoa_/zor_)> PAT キーリング > 従来の設定へのフォールバックです。

終了コード — これらに基づいて分岐してください

コード意味エージェントの対応
0成功続行する
1API/ネットワーク/コマンドの失敗一時的な可能性があります。冪等なリクエストは CLI がすでに再試行しています
2使用方法のエラー(フラグ/引数の誤り)呼び出し方に問題があります。コマンドを修正し、再試行しないでください
4認証エラー(トークンなし/拒否)認証情報を修正し、再試行しないでください
130中断(Ctrl-C)キャンセルです。中断されたアップロードではセッションが保持されます

出力規約

  • --json:サーバーを利用するコマンドでは、終端を末尾の改行1つに正規化することを除き、ペイロードは API レスポンスのバイト列を保持します(フィールド名、順序、不明なフィールドを維持します)。例外として、次の仕様が文書化されています。 model upload/import --wait は文書化された {"model": ..., "status": ...} の複合オブジェクトを返し、model download は署名付きアーティファクト URL を "<redacted>" に置き換えます。
  • --jq EXPR(--json を暗黙に指定):jq フィルターです。フィルター処理後の値はオブジェクトキーをソートして再マーシャルされ、文字列のみの場合はそのまま出力されます。
  • --template TMPL(--json を暗黙に指定):tablerow、timeago、json 関数を使用できる Go テンプレートです。
  • --json/--jq でデータを読み取ってください。TTY では、人間向けに罫線付きヘッダーと末尾の行数を備えた整列済みテーブルが表示されます(ページャーにパイプする際にこの形式を強制するには --format table を指定します)。stdout が TTY ではない場合、ヘッダーなしのタブ区切り値が出力されます。セル内のバックスラッシュ、タブ、キャリッジリターン、改行は、それぞれ \\、\t、\r、\n としてエスケープされます。エージェントでは、常に --json/--jq を優先してください。
  • リストコマンドは、同じレスポンスバイト列の規約に従って、ページエンベロープ {"results": [...], "count": N} を出力します。--paginate(別名 --all)を指定すると、すべてのページを1つのエンベロープに統合します(トップレベルのキーはソートしてから再マーシャルされます)。

識別子 — 取り違えないでください

識別子内容取得方法
ACCOUNT/REPOMelange リポジトリのアドレスmelange repo list
MODEL_KEYリポジトリ内の変換済みモデルの1つのバージョンmelange model list -R ACCOUNT/REPO
TARGET_IDダウンロード可能な変換済みアーティファクトの1つ。形式は不透明な tm_…/ltm_…melange model targets MODEL_KEY -R ACCOUNT/REPO

これらは、リポジトリ → モデルキー → ターゲット ID の順に連なります。melange library view の ACCOUNT/NAME は公開ライブラリのモデルを指定するもので、MODEL_KEY ではありません。リポジトリ名、表示名、Hugging Face ID を MODEL_KEY や TARGET_ID の代わりに使わないでください。また、TARGET_ID を解析してはいけません。

Hugging Face モデル:インポートまたはアーティファクト

LLM はリポジトリ ID から直接インポートします。汎用モデルはエクスポート済みアーティファクトとして提供されます。モデルの種類は repo create で固定されるため、リポジトリを作成する前に分類してください。

curl -fsSL "https://huggingface.co/api/models/OWNER/NAME" | jq -r .pipeline_tag

text-generation → インポート。それ以外(画像、音声、埋め込み、検出)→ アーティファクトです。タグがない場合や曖昧な場合は、ユーザーに確認してください。

# LLM — import the repo id into an llm repository
llm_repo="$(melange repo create llama-1b --private --model-type llm --jq .full_name)"
melange model import meta-llama/Llama-3.2-1B -R "$llm_repo" --json

# General — export locally, then upload the artifacts to a general repository
gen_repo="$(melange repo create vit-base --private --jq .full_name)"
python export.py   # torch.export.save -> model.pt2; np.save -> input_0.npy
melange model upload -R "$gen_repo" model.pt2 --input input_0.npy --dry-run --json

最初のエクスポート手順を始める前に、アーティファクトの手順に何が含まれるかをユーザーに伝えてください。.pt2 へのローカルエクスポートと .npy のサンプル入力が必要です。これは重みをダウンロードし、PyTorch >= 2.9 を必要とし、デプロイするモデルが受け入れる入力形状を固定します。その後、作業を進めてください。エクスポート用コードと、満たす必要があるグラフの制約については、https://docs.zetic.ai/model-preparation/pytorch-export を参照してください。

基本的なワークフロー:リポジトリの作成 → アップロード → 待機 → ステータス確認

# 1. Create a repository (in the account behind your token)
repo="$(melange repo create whisper-tiny --private --jq .full_name)"

# 2. Preview the upload manifest first (no network calls)
melange model upload -R "$repo" model.onnx --input audio.bin --dry-run --json

# 3. Check the upload entitlement immediately before uploading.
#    `remaining` is what the server will actually allow now (spike headroom
#    included; null = unlimited). Preflight on it, not on limit-used.
upload_remaining="$(melange usage quotas --jq '.model_uploads.remaining // "unlimited"')" || exit $?
[ "$upload_remaining" != "0" ] || { echo "No model-upload quota remaining for this account" >&2; exit 1; }

# 4. Upload and wait once; preserve both identity and terminal status
upload_json="$(melange model upload -R "$repo" model.onnx \
  --input audio.bin --wait --json)" || exit $?
model_key="$(printf '%s\n' "$upload_json" | jq -er .model.key)" || exit $?
model_state="$(printf '%s\n' "$upload_json" | jq -er '.status.state')" || exit $?
test "$model_state" = ready || exit 1

# 5. Use the captured identifiers in later structured commands
melange model view "$model_key" -R "$repo" --json

バケット化された .pt2 モデルでは、入力グループと同じ順序でバケットを宣言します。各バケットの入力数は同じでなければなりません。グループ内の順序によって input_index が決まります。まずネットワーク呼び出しなしでマッピングを検証します。

melange model upload -R acme/vision model.pt2 \
  --bucket 0:1x3x224x224 --input image224.npy --input mask224.npy \
  --bucket 1:1x3x384x384 --input image384.npy --input mask384.npy \
  --dry-run --json

サンプル入力は任意です。次のコマンドは、モデルのみを対象とする有効な事前チェックです。 melange model upload -R acme/repo model.onnx --dry-run。

期限切れのアップロード URL を再発行する際は、意図的に新しい署名付き URL を生成し、Idempotency-Key は送信しません。作成、完了、キャンセルでは、引き続き再試行キーが使われます。

高度なワークフローでは、--input-manifest によって、公開 API のワイヤーマニフェストではなく、CLI 専用のローカルファイル文書を使用します。各 path はマニフェストファイルを基準に解決されるため、文書はプロセスの CWD に依存しません。

{
  "manifest_version": 2,
  "files": [
    {"path": "models/model.onnx", "role": "model"},
    {"path": "samples/audio.npy", "role": "input", "input_index": 0}
  ]
}

path と role は必須です。filename は任意です。入力ファイルでは、input_index は任意で、省略した場合は順序に基づいて設定されます。バケット化されたマニフェストでは、{"index": 0, "dims": [1, 3, 224, 224]} 形式の options.buckets エントリと、各入力に対応する bucket_index を追加します。その後、次を実行します。

melange model upload -R acme/whisper-tiny \
  --input-manifest ./upload/manifest.json --dry-run --json
  • -R ACCOUNT/REPO は、すべての melange model コマンドで必須です。アップロードでデフォルトのリポジトリが使われることはありません。
  • --wait は終端状態になるまでポーリングします(デフォルトの --timeout 30m)。--wait を指定した場合、変換に失敗するかタイムアウトになると終了コード 1 が返されます。通常の model status の読み取りはクエリであり、状態にかかわらず終了コード 0 を返します。上記のワークフローはスクリプト向けに記述されています。人が待つ場合は、--wait を外してバックグラウンドで監視してください。「結果をユーザーに提示する」を参照してください。
  • リポジトリを参照するには、melange repo list --search whisper --paginate、melange repo list --jq '.results[].full_name'、melange repo view acme/whisper-tiny --json を実行します。

モデルとターゲットの参照

アーティファクトを生成したランタイムエンジンは、公開 API の一部ではありません。代わりに、melange model targets は precision、quant_type、compatibility.ap_types(cpu/gpu/npu)を報告し、レポートレコードではエンジンの代わりに不透明な variant トークンが使われます。variant を解析してはいけません。また、エンジン名を使ってターゲットを説明してはいけません。その情報は得られません。

モデルが存在すれば、そのモデルと変換済みターゲットを調べられます。

model_key=$(melange model list -R acme/whisper-tiny --jq '.results[] | select(.is_default) | .key')
melange model view "$model_key" -R acme/whisper-tiny --jq .download_ready
melange deploy guide "$model_key" -R acme/whisper-tiny --language android-kotlin --mode auto
melange model targets "$model_key" -R acme/whisper-tiny --json      # converted targets
melange model set-default "$model_key" -R acme/whisper-tiny         # pin the repo default
melange model import meta-llama/Llama-3.2-1B -R acme/llm --json  # interactive: returns at once, state converting
melange model import meta-llama/Llama-3.2-1B -R acme/llm --wait  # scripts: block until ready or failed
target_id=$(melange model targets "$model_key" -R acme/whisper-tiny --jq '.results[0].target_id')
melange model download "$model_key" -R acme/whisper-tiny --target "$target_id" --output ./models --yes

待機付きのアップロードおよびインポート出力は、常に次の形式です。 {"model": <create/import response>, "status": <final ModelStatusResponse>}。 識別には .model.key、終端結果には .status.state を使用します。--wait を指定しない場合、各コマンドは未加工の作成/インポート応答を返します。

model download は課金対象であり、CLI プロセスをまたいでも再試行時の安全性が保たれます。中断後に再試行しても、料金が追加されるのではなく、前回の課金が再利用されます。--yes を指定してください。指定しない場合、コマンドは確認を求めます。--output は --force を指定しない限り上書きを拒否します。また、認可後に競合が判明した場合は、再課金なしで --force を求めます。単一のアーティファクトに対して --output - を使用し、構造化出力フラグと併用しないでください。一時的なアーティファクト GET は自動で再試行されます。バイトの進捗が 30 秒間ない場合は再試行され、チャンクごとにタイマーがリセットされます。署名付き URL とアクセストークンは保存されません。

ベンチマークレポートの読み取り:melange report view

report view MODEL_KEY -R ACCOUNT/REPO は、モデルのベンチマークレポートを読み取ります。--type general|llm|package でレポートを選択します。指定しない場合、CLI は general → llm → package の順に確認し、最初に見つかったレポートを表示します。どれも存在しない場合は、終了コード 1 と「no report available」が返されます。

model_key=$(melange model list -R acme/whisper-tiny --jq '.results[] | select(.is_default) | .key')

# The dashboard table on a TTY; --mode auto|speed|accuracy picks the cell value
melange report view "$model_key" -R acme/whisper-tiny --mode accuracy

# Agents: take the raw records, not the derived table
melange report view "$model_key" -R acme/whisper-tiny --json \
  --jq '[.records[] | select(.ap_type=="npu" and .metric=="latency_ms")]
        | group_by(.device.marketing_name)[]
        | {device: .[0].device.marketing_name, best: (map(.value)|min)}'

TTY のテーブルでは、生のレコードからダッシュボードのモード選択を再計算します(speed = 最小レイテンシ、accuracy = 最大 SNR、同値の場合はレイテンシが低い方、auto = SNR が 20 dB を超える実行のうち最速のもの。該当するものがなければ speed)。非 TTY 出力は1 行につき生のレコード 1 件(フラットな測定フィールド)です。スクリプトは派生テーブルではなく、測定値を取得します。正確な応答を得るには、必ず --json を使用してください。

レポートには、アカウントから参照できるすべてのデバイスと精度における、モデル全体の情報が含まれます。デバイスを 1 つに絞ると、レポート全体ではなく、その一部が表示されます。下記の「モデルのレポート」を参照してください。

ユーザーへの結果の提示

ここに記載するルールは、人間に書く回答に適用されるものであり、CLI の呼び出し方法には適用されません。 人があなたの応答を待っている場合は常に適用されます。非対話型スクリプトでは、引き続きブロッキング形式を使用してください。

変換で待たせない

変換はサーバー側で数分かかります。model import と model upload は、--wait を付けずに実行すると、モデルの登録直後に converting 状態で戻ります。--wait を付けると、ready または failed になるまで処理をブロックします。フォアグラウンドでブロックすると、ユーザーはどの段階が実行中なのかも分からず、停止したコマンドを見続けることになります。

そのため、インポートまたはアップロードは --wait を付けずに実行し、パイプラインパネルと残りの作業をすぐに伝えてから、バックグラウンドでポーリングします。

公開されている変換ステートマシンには、小文字の状態が正確に4つあります。converting → optimizing → ready、または failed です。stage は、変換中は convert、最適化中は benchmark です。download_ready は optimizing になった時点で true になるため、ベンチマークが完了する前からモデルを使用できます。パーセンテージはありません。progress は常に null なので、値を作り出さないでください。retry_after はサーバーが推奨するポーリング間隔です(終端状態になるまでは5秒)。これらは UPPERCASE のアップロードセッション状態ではありません。2つの語彙を混同しないでください。

次の2段階を、順番にバックグラウンドで実行します。

# Stage 1 — returns the moment conversion finishes (~30m ceiling).
i=0
while [ "$i" -lt 360 ]; do
  state="$(melange model status "$model_key" -R "$repo" --jq .state)" || exit $?
  [ "$state" = converting ] || break
  i=$((i + 1)); sleep 5
done
melange model status "$model_key" -R "$repo" --json

状態の遷移を伝えてから、残りの処理を CLI 独自の待機機能に引き継ぎます。

# Stage 2 — exit 0 ready, 1 failed or timed out.
melange model status "$model_key" -R "$repo" --wait --timeout 30m --json

ステージ1は、モデルがすでに converting を過ぎている場合はすぐに戻ります。そのため、すでに開始されている変換でも、最初に実行する手順として適切です。

パイプラインパネル

インポート、アップロード、ステータス確認の後には毎回、.state の値を使ってパネルを表示します。記号は、✔ 完了、◐ 進行中、○ 保留、✖ 失敗です。

╭─ Conversion Pipeline ───────────────────────────────╮
│   ✔ CONVERTING   →   ◐ OPTIMIZING   →   ○ READY     │
│     complete           in progress       pending    │
╰─────────────────────────────────────────────────────╯

フェーズごとに記号とキャプションを置き換えます。到達済みのフェーズは ✔ complete、現在のフェーズは ◐ in progress、後続のフェーズは ○ pending、ready 到達後は ✔ available とします。失敗時は ✖ failed とし、それ以降のフェーズは ○ blocked とします。

パネルの横にフェーズを言葉で示します。converting の場合は、ベンチマークとパッケージ化がまだ残っていると伝えます。optimizing の場合は、ベンチマークの完了を待つ間もモデルはすでにダウンロード可能だと伝えます。ready の場合は、レポートとデプロイガイドを案内します。失敗時は .stage から失敗したステージを示し、.failure_code をそのまま引用します。また、コードが示していない原因を推測しないでください。

モデルのレポート

テンプレートに記入し、回答に結果を記載します。

モデルの種類テンプレート
LLMassets/report-llm.md
その他すべてassets/report-general.md

回答する前にテンプレートを読み、セクションの順序を維持してください。各数値について検証済みの jq、丸めと欠損値の規則、ユーザーが特定のデバイスを指定した場合にそのデバイスのみを報告するためのパスが記載されています。

ダッシュボードのデプロイ可能率は、API フィールドが用意されていない Web UI のしきい値ウィジェットです。数値を生成せず、利用できないと伝えてください。

公開ライブラリと利用状況を確認する

melange library list --task vision --provider Zetic --jq '.results[].full_name'
melange library view zetic/whisper-tiny --json     # includes the full readme
melange library providers --jq '.results[] | select(.model_count>=10) | .name'

melange usage --jq .prompts                        # this period's counters
melange usage quotas --jq .model_uploads.remaining # headroom now; null = unlimited
melange usage quotas --jq .credits                 # advisory credit balance
melange plan --jq .plan                            # legacy tier: free|lite|pro|pro_plus|enterprise
melange plan --jq .tier                            # pricing identity: free|pro|team|enterprise; null = legacy billing

library list のフィルターはクエリパラメーターに対応します(--task は複数指定でき、いずれかのタスクに一致するモデルが含まれます)。--search は大文字と小文字、および区切り文字を区別せず、name と full_name の両方を対象に検索します。ハイフン、アンダースコア、スラッシュ、スペースは無視されます。usage quotas は各クォータを 使用量/上限 (割合%) の形式で表示し、上限が null の場合は unlimited と表示します。--json/--jq の出力には、各カウンターの remaining も含まれます。これはサーバーが現時点で実際に許可する量です(急増時の余裕分を含み、0 を下限とします。null は無制限を意味します)。事前確認では limit - used ではなく remaining を使用してください。

melange plan は2種類の用語を報告します。plan は、ティアのクォータが導出される旧体系(free|lite|pro|pro_plus|enterprise)で、ダッシュボードと同じくサーバーが適用する内容です。クォータ制限を回避できるアカウントでは、クォータが無制限の pro_plus として報告されます。tier は現在の料金体系上の区分(free|pro|team|enterprise)で、旧請求体系のアカウントでは null です。billing_generation(legacy|v3)は、どちらのシステムが適用されるかを示します。max_model_bytes で事前確認できるのは、プラン固有のモデルサイズ上限だけです。クレジットと債務は変換時に別途確認されます。max_model_bytes が null の場合はカスタム契約を意味し、無制限という意味ではありません(クォータ上限が null の場合とは異なります)。クレジット台帳では、セルフサービスのサイズ上限を超える実行は引き続き拒否されます。tier はサーバーが現在適用している内容を示すため、期限切れの有料サブスクリプションは free と表示されますが、billing_generation は v3 のままです。この組み合わせが、free ティアでありながら subscription_past_due によって拒否される理由です。

利用資格の開示(必須)

モデルをアップロードする前、またはベンチマークの対象範囲が完全だと説明する前に、melange usage quotas --json を確認してください。model_uploads.remaining == 0 の場合、アップロードを試みたり再試行したりしないでください。CLI の不具合ではなく、現在のプランではアップロードクォータが残っていないことをユーザーに伝えてください。レポートの記録には、認証済みアカウントから参照できるデバイスのみが含まれます。完全性が確認できていない限り、ベンチマーク全体だと表現しないでください。

プランの区分は確認できます。melange plan --jq .plan(料金体系上の区分には .tier も確認します。ここが null の場合は旧請求体系です)から読み取ってください。model_uploads.remaining == 0 でプランが Free(または Lite)の場合、モデルのアップロードがロックされている理由はプランにあると伝えてください。それ以外のプランでは、月間アップロードクォータを使い切ったと伝えてください。0 の原因を誤って説明しないでください。上限が0であること、絞り込まれたレポート、または HTTP エラーから Free だと推測せず、melange plan を確認してください。

クレジットは変換を制限するもので、あくまで参考情報です。melange usage quotas --jq '{credits: .credits.available, debt: .credits.outstanding_debt}' で事前確認してください。.credits.available > 0 かつ .credits.outstanding_debt == 0 は必要条件ですが、十分条件ではありません。変換ごとの料金はモデルサイズに応じて増えるため、残高がプラスでも大きなモデルは拒否される場合があります。ステータスではなく、機械可読な error.code に基づいて判断してください。HTTP 402 billing_error は、credit_balance_exhausted(チャージしてください。料金は請求されていません)または subscription_past_due(支払い方法を修正してください)です。HTTP 409 conflict_error は credit_debt_outstanding(ダッシュボードで債務を清算してください)です。HTTP 413 request_too_large は、custom_model_too_large(プラン固有のモデルサイズ上限を超えています。melange plan を確認してください)または credit_model_too_large(クレジット残高を増やしても超えられないセルフサービスのサイズ上限を超えています。サポートにお問い合わせください)です。アップロード完了が拒否されても、セッションは保留状態で再開可能です。問題を解決した後、セッションを再実行してください。 melange model upload --resume SESSION_ID -R ACCOUNT/REPO

ライブラリの ACCOUNT/NAME は、変換済みモデルのキーではなく、公開リポジトリを識別します。既存のモデルとレポートを直接確認してください。これは読み取り専用の方法で、インポートもアップロードも不要です。

repo=$(melange library list --search QUERY --jq '.results[0].full_name')
key=$(melange model list -R "$repo" --jq '.results | (map(select(.is_default and .state=="ready")) + map(select(.state=="ready")))[0].key // empty')
[ -n "$key" ] || { echo "No ready model is available in $repo" >&2; exit 1; }
melange report view "$key" -R "$repo" --json

ライブラリモデルの公開ベンチマークの確認に、インポートもアップロードも必要ありません。上記の手順だけで完了します。

正確なデプロイコードを取得する

Hugging Face ID ではなく、選択したモデルキーを使ってデプロイコードをリクエストします。 対応言語は android-kotlin、android-java、ios-swift、 flutter、cpp です。推論モードは auto、speed、accuracy です。

melange deploy options --json
repo=shinilheo/LFM2.5_350M
key=$(melange model list -R "$repo" --jq '.results | (map(select(.is_default and .state=="ready")) + map(select(.state=="ready")))[0].key // empty')
[ -n "$key" ] || { echo "No ready model is available in $repo" >&2; exit 1; }
melange deploy guide "$key" -R "$repo" --language android-kotlin --mode auto
melange deploy guide "$key" -R "$repo" --language ios-swift --mode speed --json

通常のガイドは、コピー可能な SDK のインストールと推論のスニペットを含む順序付きの Markdown です。--json は構造化レスポンスです。 リポジトリの座標、バージョン、ファミリー、モード、SDK 言語はすでに解決されています。 汎用モデルのテンソル作成は、明示的な TODO のままです。形状と前処理はモデルごとに異なるため、入力を推測せず、テンソル I/O メタデータを確認してください。 ガイドに記載されている SDK のフィールドとコールバックを使用してください。ガイドに記載されていないものを追加しないでください。

Android arm64(Qualcomm SW6100 を含む)上のスタンドアロン C++ プログラムの場合は、--language cpp --mode auto をリクエストします。 ガイドには SDK ZIP のダウンロードリンク、ビルド手順、推論コードが含まれます。 library list と model list を使って既存のモデルを見つけてください。ライブラリモデルのデプロイに新たなインポートは不要です。 パートナーボードがエージェントから到達可能で、HTTPS 経由でダウンロードできる必要があります。 共有 C++ ランタイムを含め、返されたビルド手順に従ってください。

すべてのガイドで YOUR_PERSONAL_KEY を使用します。 コマンドはアクティブな PAT を補間、出力、永続化することはありません。 チャット、ログ、生成された JSON、シェル履歴の提案で、このプレースホルダーを置き換えないでください。

中断後に再開する

アップロードを中断しても(終了コード 130)、セッションはサーバー側に保持され、CLI は正確な再開コマンドを stderr に出力します。 その出力を参照できなくなった場合は、セッション一覧から不透明な ID を取得します。

session_id=$(melange model upload --sessions -R acme/whisper-tiny --jq '.results | map(select(.state=="CREATED" or .state=="UPLOADING")) | first | .id // empty')
[ -n "$session_id" ] || { echo "No resumable upload session found" >&2; exit 1; }
melange model upload --resume "$session_id" -R acme/whisper-tiny

中断時に出力された正確な行を優先してください。アップロード済みのバイトが再送されることはありません。 整理するには、melange model upload --sessions -R acme/repo でセッションを一覧表示します。 キャンセル時、ターミナルでは正確なセッション ID の入力を求められます。エージェントやその他の非対話型の呼び出し元は、--cancel SESSION_ID --yes を指定する必要があります。

代替手段:melange api

専用コマンドでまだラップされていない /v1 エンドポイントを呼び出します。 他のコマンドと同じトランスポートを使用します。保存済みの認証情報、自動リトライ(GET/HEAD/PUT、および Idempotency-Key ヘッダーを持つすべてのリクエスト)、標準のエラーエンベロープを利用できます。 生の PATCH リクエストをリトライするには、Idempotency-Key が必要です。

melange api /v1/me --jq .account.name          # GET, extract one value
melange api /v1/repos -F name=demo -F is_private=true   # fields => POST
echo '{"name":"demo"}' | melange api /v1/repos --input -  # raw body
melange api /v1/models -F name=demo -H 'Idempotency-Key: 0698c9b1'
melange api -X GET /v1/repos -f search=whisper --include  # query params

パスは設定済みホストからの相対パスで、/v1 以下に解決される必要があります(絶対 URL と /v1 の範囲外は終了コード 2 で拒否されます。認証情報が設定済みホストまたはその公開 API の外部に送信されることはありません)。 -f は文字列フィールドを追加し、-F は型付きフィールドを追加します(true/false/null/整数、@path はファイルの内容を挿入、key[sub]=v はネスト、key[]=v は配列に追加します)。 フィールドを指定すると、-X GET を指定した場合を除き、メソッドは POST に切り替わります(その場合、フィールドはクエリパラメーターになります)。 2xx 以外のレスポンス本文も stdout に出力され、stderr には1行の概要が出力されます。ページネーションとポーリングは利用者側で行ってください。

注意点

  • アップロードを実行する前に、--dry-run を使ってマニフェストを手軽に検証してください。
  • MELANGE_DEBUG=1 を指定すると、リクエスト/レスポンスの各行が stderr に記録されます(トークンとヘッダーは記録されません)。
  • MELANGE_API_TIMEOUT は通常の API リクエストのタイムアウトを設定します(デフォルトは 30s です)。アップロードの無通信時間と変換の --wait には、それぞれ別のタイムアウトフラグがあります。
  • 成功した melange api の出力は、本文全体の読み込みが完了してから確定されます。正当な理由で応答が遅い場合や大きい場合は、MELANGE_API_TIMEOUT を増やしてください。読み込みに失敗した場合、部分データを出力する代わりに stdout は空のままになります。
  • 誰かが待っている間、フォアグラウンドで --wait を実行しないでください。それを指定せずにインポートまたはアップロードし、フェーズを報告して、バックグラウンドで監視してください。
  • レスポンスに含まれていない指標を提示しないでください。表では -、カードでは N/A と表示して、欠落を明示してください。また、異なるアクセラレーターで測定された値を、あたかも一方が高速化を示すかのように比較しないでください。
  • 1台のデバイスではなく、モデル全体を報告してください。概要の値はすべてのデバイスの中で最良の値なので、デバイス名を付けると測定値を誤って帰属させることになります。レポートはファイルに保存せず、返信にそのまま出力してください。

コメント