mcpField
M
model-registry-maintainer

model-registry-maintainer

github.com/massgen開発1.1k89 回インストール20 週間前に更新
リポジトリ

model-registry-maintainer について

model-registry-maintainerは、MassGenのメンテナー向けにモデル能力、リリース日、料金、コンテキスト上限の更新手順を示します。能力レジストリと料金データを分け、検証やテスト、文書の再生成も案内します。

主な機能

  1. 01モデル能力とリリース日の管理
  2. 02LiteLLMの料金データ確認
  3. 03代替料金とトークン上限の更新
  4. 04レジストリとトークン管理の変更検証
  5. 05バックエンド文書の再生成

活用シーン

  1. 01新規リリースモデルの登録
  2. 02モデル料金やコンテキスト上限の改定
  3. 03モデル能力やプロバイダーの追加

インストール

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

$npx skills add https://github.com/massgen/massgen --skill model-registry-maintainer

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

詳細

モデルレジストリメンテナー

このスキルでは、次の 2 つの主要ファイルにわたる MassGen のモデルレジストリのメンテナンス方法を説明します。

  1. massgen/backend/capabilities.py - モデル、機能、リリース日
  2. massgen/token_manager/token_manager.py - 料金、コンテキストウィンドウ

このスキルを使用するタイミング

  • プロバイダーが新しいモデルをリリースしたとき
  • モデルの料金が変更されたとき
  • コンテキストウィンドウの上限が更新されたとき
  • モデルの機能が変更されたとき
  • 新しいプロバイダー/バックエンドが追加されたとき

メンテナンスする 2 つのファイル

ファイル 1:capabilities.py(モデルと機能)

含まれる内容:

  • プロバイダーごとの利用可能なモデル一覧
  • モデルの機能(ウェブ検索、コード実行、ビジョンなど)
  • リリース日
  • デフォルトモデル

使用される用途:

  • 設定ビルダー(--quickstart、--generate-config)
  • ドキュメントの生成
  • バックエンドの検証

新しいモデルを追加する場合は、必ずこのファイルを更新してください。

ファイル 2:token_manager.py(料金と上限)

含まれる内容:

  • LiteLLM データベースにないモデルのハードコードされた料金/コンテキストウィンドウ
  • LiteLLM データベース(500 以上のモデル)からのオンデマンド読み込み

使用される用途:

  • コストの見積もり
  • トークン数のカウント
  • コンテキストの管理

料金の解決順序:

  1. LiteLLM データベース(オンデマンドで取得し、1 時間キャッシュ)
  2. ハードコードされた PROVIDER_PRICING(フォールバックのみ)
  3. パターンマッチングによるヒューリスティック

次の場合にのみ PROVIDER_PRICING を更新してください:

  • モデルが LiteLLM データベースにない
  • LiteLLM の料金が誤っている/古くなっている
  • モデルが組織内専用またはカスタムである

新しいモデルについて収集する情報

1. リリース日
2. コンテキストウィンドウ
  • 入力コンテキストサイズ(トークン数)
  • 最大出力トークン数
  • 「context window」、「max tokens」、「input/output limits」を確認してください
3. 料金
4. 機能
  • ウェブ検索、コード実行、ビジョン、推論など
  • 公式 API ドキュメントを確認してください
5. モデル名
  • API の正確な識別子(大文字と小文字を区別)
  • プロバイダーのモデルドキュメントを確認してください

新しいモデルの追加 - 完全なワークフロー

ステップ 1:capabilities.py に追加する

モデルを models リストと model_release_dates に追加します。

# massgen/backend/capabilities.py

"openai": BackendCapabilities(
    # ... existing fields ...
    models=[
        "new-model-name",  # Add here (newest first)
        "gpt-5.1",
        # ... existing models ...
    ],
    model_release_dates={
        "new-model-name": "2025-12",  # Add here
        "gpt-5.1": "2025-11",
        # ... existing dates ...
    },
)
ステップ 2:料金が LiteLLM にあるか確認する(通常はスキップ)

まず、モデルがすでに LiteLLM データベースにあるか確認してください。

import requests

url = "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"
pricing_db = requests.get(url).json()

if "new-model-name" in pricing_db:
    print("✅ Model found in LiteLLM - no need to update token_manager.py")
    print(f"Pricing: ${pricing_db['new-model-name']['input_cost_per_token']*1000}/1K input")
else:
    print("❌ Model NOT in LiteLLM - need to add to PROVIDER_PRICING")

LiteLLM にない場合にのみ、PROVIDER_PRICING に追加します。

# massgen/token_manager/token_manager.py

PROVIDER_PRICING: Dict[str, Dict[str, ModelPricing]] = {
    "OpenAI": {
        # Format: ModelPricing(input_per_1k, output_per_1k, context_window, max_output)
        "new-model-name": ModelPricing(0.00125, 0.01, 300000, 150000),
        # ... existing models ...
    },
}

プロバイダー名の対応関係:

  • "OpenAI"("openai" ではありません)
  • "Anthropic"("claude" ではありません)
  • "Google"("gemini" ではありません)
  • "xAI"("grok" ではありません)
ステップ 3:機能を更新する(新機能がある場合)

モデルに新しい機能が導入されている場合:

supported_capabilities={
    "web_search",
    "code_execution",
    "new_capability",  # Add here
}
ステップ 4:デフォルトモデルを更新する(適切な場合)

新しいモデルを推奨デフォルトにする場合にのみ変更します。

default_model="new-model-name"
ステップ 5:検証とテスト
# Run capabilities tests
uv run pytest massgen/tests/test_backend_capabilities.py -v

# Test config generation with new model
massgen --generate-config ./test.yaml --config-backend openai --config-model new-model-name

# Verify the config was created successfully
cat ./test.yaml
ステップ 6:ドキュメントを再生成する
uv run python docs/scripts/generate_backend_tables.py
cd docs && make html

現在のモデルデータ

OpenAI モデル(2025 年 11 月時点)

capabilities.py 内:

models=[
    "gpt-5.1",        # 2025-11
    "gpt-5-codex",    # 2025-09
    "gpt-5",          # 2025-08
    "gpt-5-mini",     # 2025-08
    "gpt-5-nano",     # 2025-08
    "gpt-4.1",        # 2025-04
    "gpt-4.1-mini",   # 2025-04
    "gpt-4.1-nano",   # 2025-04
    "gpt-4o",         # 2024-05
    "gpt-4o-mini",    # 2024-07
    "o4-mini",        # 2025-04
]

token_manager.py 内(不足しているモデルを追加):

"OpenAI": {
    "gpt-5": ModelPricing(0.00125, 0.01, 400000, 128000),
    "gpt-5-mini": ModelPricing(0.00025, 0.002, 400000, 128000),
    "gpt-5-nano": ModelPricing(0.00005, 0.0004, 400000, 128000),
    "gpt-4o": ModelPricing(0.0025, 0.01, 128000, 16384),
    "gpt-4o-mini": ModelPricing(0.00015, 0.0006, 128000, 16384),
    # Missing: gpt-5.1, gpt-5-codex, gpt-4.1 family, o4-mini
}
Claude モデル(2025 年 11 月時点)

capabilities.py 内:

models=[
    "claude-haiku-4-5-20251001",    # 2025-10
    "claude-sonnet-4-5-20250929",   # 2025-09
    "claude-opus-4-1-20250805",     # 2025-08
    "claude-sonnet-4-20250514",     # 2025-05
]

token_manager.py 内:

"Anthropic": {
    "claude-haiku-4-5": ModelPricing(0.001, 0.005, 200000, 65536),
    "claude-sonnet-4-5": ModelPricing(0.003, 0.015, 200000, 65536),
    "claude-opus-4.1": ModelPricing(0.015, 0.075, 200000, 32768),
    "claude-sonnet-4": ModelPricing(0.003, 0.015, 200000, 8192),
}
Gemini モデル(2025 年 11 月時点)

capabilities.py 内:

models=[
    "gemini-3-pro-preview",  # 2025-11
    "gemini-2.5-flash",      # 2025-06
    "gemini-2.5-pro",        # 2025-06
]

token_manager.py 内(gemini-2.5 と gemini-3 が不足):

"Google": {
    "gemini-1.5-pro": ModelPricing(0.00125, 0.005, 2097152, 8192),
    "gemini-1.5-flash": ModelPricing(0.000075, 0.0003, 1048576, 8192),
    # Missing: gemini-2.5-pro, gemini-2.5-flash, gemini-3-pro-preview
}
Grok モデル(2025 年 11 月時点)

capabilities.py 内:

models=[
    "grok-4-1-fast-reasoning",      # 2025-11
    "grok-4-1-fast-non-reasoning",  # 2025-11
    "grok-code-fast-1",             # 2025-08
    "grok-4",                       # 2025-07
    "grok-4-fast",                  # 2025-09
    "grok-3",                       # 2025-02
    "grok-3-mini",                  # 2025-05
]

token_manager.py 内(grok-3、grok-4 ファミリーが不足):

"xAI": {
    "grok-2-latest": ModelPricing(0.005, 0.015, 131072, 131072),
    "grok-2": ModelPricing(0.005, 0.015, 131072, 131072),
    "grok-2-mini": ModelPricing(0.001, 0.003, 131072, 65536),
    # Missing: grok-3, grok-4, grok-4-1 families
}

モデル名のマッチング

重要: PROVIDER_PRICING 内の名前には、簡略化されたパターンを使用します。

  • "gpt-5" は gpt-5、gpt-5-preview、gpt-5-* に一致します
  • "claude-sonnet-4-5" は claude-sonnet-4-5-*(日付のサフィックスを問わない)に一致します
  • "gemini-2.5-pro" は完全一致です

トークンマネージャーは柔軟に対応できるよう、プレフィックスマッチングを使用します。

よくあるタスク

タスク:新しい GPT-5.2 モデルを追加する
  1. 調査する:リリース日、価格、コンテキストウィンドウ、機能
  2. capabilities.py のモデルリストと release_dates に追加する
  3. token_manager.py の PROVIDER_PRICING["OpenAI"] に追加する
  4. テストを実行する
  5. ドキュメントを再生成する
タスク:既存モデルの価格を更新する
  1. 公式情報源で新しい価格を確認する
  2. token_manager.py の PROVIDER_PRICING のみを更新する
  3. capabilities.py を変更する必要はありません
  4. 重要な変更であれば、メモに記録する
タスク:モデルに新しい機能を追加する
  1. capabilities.py の supported_capabilities を更新する
  2. 機能がいつ、どのように動作するかを説明する notes を追加する
  3. 必要に応じてバックエンドの実装を更新する
  4. テストを実行する

検証コマンド

# Test capabilities registry
uv run pytest massgen/tests/test_backend_capabilities.py -v

# Test token manager
uv run pytest massgen/tests/test_token_manager.py -v

# Generate config with new model
massgen --generate-config ./test.yaml --config-backend openai --config-model new-model

# Build docs to verify tables
cd docs && make html

プログラムによるモデルの更新

LiteLLM 価格データベース(推奨)

モデルの価格とコンテキストウィンドウのデータを包括的に取得する最も簡単な方法です。

URL:https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json

対象範囲:次を含む、30 以上のプロバイダーの 500 以上のモデル:

  • OpenAI、Anthropic、Google、xAI
  • Together AI、Groq、Cerebras、Fireworks
  • AWS Bedrock、Azure、Cohere など

利用可能なデータ:

{
  "gpt-4o": {
    "input_cost_per_token": 0.0000025,
    "output_cost_per_token": 0.00001,
    "max_input_tokens": 128000,
    "max_output_tokens": 16384,
    "supports_vision": true,
    "supports_function_calling": true,
    "supports_prompt_caching": true
  }
}

使用方法:

import requests

# Fetch latest pricing
url = "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"
pricing_db = requests.get(url).json()

# Get info for a model
model_info = pricing_db.get("gpt-4o")
input_per_1k = model_info["input_cost_per_token"] * 1000
output_per_1k = model_info["output_cost_per_token"] * 1000

LiteLLM から token_manager.py を更新する:

  • トークンあたりのコストを 1,000 トークンあたりのコストに変換する
  • コンテキストウィンドウと最大出力トークン数を抽出する
  • モデルを新しい順に並べる
OpenRouter API(リアルタイム)

最新のモデルリストと現在の価格を確認するには、こちらを使用します。

エンドポイント:https://openrouter.ai/api/v1/models

利用可能なデータ:

  • リアルタイムの価格(プロンプト、補完、推論、キャッシュ)
  • コンテキストウィンドウと最大補完トークン数
  • モデルの機能とモダリティ
  • 複数のプロバイダーによる 200 以上のモデル

使用方法:

import requests
import os

headers = {"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}"}
response = requests.get("https://openrouter.ai/api/v1/models", headers=headers)
models = response.json()["data"]

for model in models:
    print(f"{model['id']}: ${model['pricing']['prompt']} input, ${model['pricing']['completion']} output")
プロバイダー固有の API
プロバイダーモデル APIAPI に価格情報あり?推奨事項
OpenAIhttps://api.openai.com/v1/models❌ いいえLiteLLM を使用
Claude公開 API なし❌ いいえLiteLLM を使用
Geminihttps://generativelanguage.googleapis.com/v1beta/models❌ いいえAPI と LiteLLM を使用
Grok (xAI)https://api.x.ai/v1/models❌ いいえLiteLLM を使用
Together AIhttps://api.together.xyz/v1/models✅ はいAPI を直接使用
Groqhttps://api.groq.com/openai/v1/models❌ いいえLiteLLM を使用
Cerebrashttps://api.cerebras.ai/v1/models❌ いいえLiteLLM を使用
Fireworkshttps://api.fireworks.ai/v1/accounts/{id}/models❌ いいえLiteLLM を使用
Azure OpenAIAzure Management API❌ 複雑手動
Claude CodeAPI なし❌ いいえ手動

自動化スクリプト

更新を自動化する scripts/update_model_pricing.py を作成します。

#!/usr/bin/env python3
"""Update token_manager.py pricing from LiteLLM database."""

import requests

# Fetch LiteLLM database
url = "https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json"
pricing_db = requests.get(url).json()

# Filter by provider
openai_models = {k: v for k, v in pricing_db.items()
                 if v.get("litellm_provider") == "openai"}
anthropic_models = {k: v for k, v in pricing_db.items()
                    if v.get("litellm_provider") == "anthropic"}

# Generate ModelPricing entries
for model_name, info in openai_models.items():
    input_per_1k = info["input_cost_per_token"] * 1000
    output_per_1k = info["output_cost_per_token"] * 1000
    context = info.get("max_input_tokens", 0)
    max_output = info.get("max_output_tokens", 0)

    print(f'    "{model_name}": ModelPricing({input_per_1k}, {output_per_1k}, {context}, {max_output}),')

価格を最新の状態に保つため、毎週実行します。

uv run python scripts/update_model_pricing.py

参照ファイル

重要なメンテナンス上の注意

  • モデルは新しい順に並べる - 最新のモデルを先頭にする
  • 正確な API 名を使用する - プロバイダーのドキュメントと完全に一致させる
  • 価格の単位を確認する - token_manager.py では常に 1,000 トークンあたりにする
  • 不確かな情報を記録する - 情報が推定値または非公式の場合は、その旨を記載する
  • 両方のファイルを更新する - モデル追加時は token_manager.py も忘れずに更新する
  • 価格の確認には LiteLLM を使用する - 包括的で、頻繁に更新される
  • 更新後にテストする - pytest を実行し、互換性を損なう変更がないことを確認する

コメント