model-registry-maintainer について
model-registry-maintainerは、MassGenのメンテナー向けにモデル能力、リリース日、料金、コンテキスト上限の更新手順を示します。能力レジストリと料金データを分け、検証やテスト、文書の再生成も案内します。
主な機能
- 01モデル能力とリリース日の管理
- 02LiteLLMの料金データ確認
- 03代替料金とトークン上限の更新
- 04レジストリとトークン管理の変更検証
- 05バックエンド文書の再生成
活用シーン
- 01新規リリースモデルの登録
- 02モデル料金やコンテキスト上限の改定
- 03モデル能力やプロバイダーの追加
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ massgen/ massgen --skill model-registry-maintainerインストール後、Claude Code で/model-registry-maintainerを入力して読み込まれたか確認します。
詳細
モデルレジストリメンテナー
このスキルでは、次の 2 つの主要ファイルにわたる MassGen のモデルレジストリのメンテナンス方法を説明します。
massgen/backend/capabilities.py- モデル、機能、リリース日massgen/token_manager/token_manager.py- 料金、コンテキストウィンドウ
このスキルを使用するタイミング
- プロバイダーが新しいモデルをリリースしたとき
- モデルの料金が変更されたとき
- コンテキストウィンドウの上限が更新されたとき
- モデルの機能が変更されたとき
- 新しいプロバイダー/バックエンドが追加されたとき
メンテナンスする 2 つのファイル
ファイル 1:capabilities.py(モデルと機能)
含まれる内容:
- プロバイダーごとの利用可能なモデル一覧
- モデルの機能(ウェブ検索、コード実行、ビジョンなど)
- リリース日
- デフォルトモデル
使用される用途:
- 設定ビルダー(
--quickstart、--generate-config) - ドキュメントの生成
- バックエンドの検証
新しいモデルを追加する場合は、必ずこのファイルを更新してください。
ファイル 2:token_manager.py(料金と上限)
含まれる内容:
- LiteLLM データベースにないモデルのハードコードされた料金/コンテキストウィンドウ
- LiteLLM データベース(500 以上のモデル)からのオンデマンド読み込み
使用される用途:
- コストの見積もり
- トークン数のカウント
- コンテキストの管理
料金の解決順序:
- LiteLLM データベース(オンデマンドで取得し、1 時間キャッシュ)
- ハードコードされた PROVIDER_PRICING(フォールバックのみ)
- パターンマッチングによるヒューリスティック
次の場合にのみ PROVIDER_PRICING を更新してください:
- モデルが LiteLLM データベースにない
- LiteLLM の料金が誤っている/古くなっている
- モデルが組織内専用またはカスタムである
新しいモデルについて収集する情報
1. リリース日
- 形式:
"YYYY-MM" - 情報源:
- OpenAI:https://openai.com/index
- Anthropic:https://www.anthropic.com/news
- Google DeepMind:https://blog.google/technology/google-deepmind/
- xAI:https://x.ai/news
2. コンテキストウィンドウ
- 入力コンテキストサイズ(トークン数)
- 最大出力トークン数
- 「context window」、「max tokens」、「input/output limits」を確認してください
3. 料金
- 入力 1K トークンあたりの料金(USD)
- 出力 1K トークンあたりの料金(USD)
- キャッシュ済み入力の料金(該当する場合)
- 情報源:
- OpenAI:https://openai.com/api/pricing/
- Anthropic:https://www.anthropic.com/pricing
- Google:https://ai.google.dev/pricing
- xAI:https://x.ai/api/pricing
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 モデルを追加する
- 調査する:リリース日、価格、コンテキストウィンドウ、機能
capabilities.pyのモデルリストと release_dates に追加するtoken_manager.pyの PROVIDER_PRICING["OpenAI"] に追加する- テストを実行する
- ドキュメントを再生成する
タスク:既存モデルの価格を更新する
- 公式情報源で新しい価格を確認する
token_manager.pyの PROVIDER_PRICING のみを更新する- capabilities.py を変更する必要はありません
- 重要な変更であれば、メモに記録する
タスク:モデルに新しい機能を追加する
- capabilities.py の
supported_capabilitiesを更新する - 機能がいつ、どのように動作するかを説明する
notesを追加する - 必要に応じてバックエンドの実装を更新する
- テストを実行する
検証コマンド
# 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
| プロバイダー | モデル API | API に価格情報あり? | 推奨事項 |
|---|---|---|---|
| OpenAI | https://api.openai.com/v1/models | ❌ いいえ | LiteLLM を使用 |
| Claude | 公開 API なし | ❌ いいえ | LiteLLM を使用 |
| Gemini | https://generativelanguage.googleapis.com/v1beta/models | ❌ いいえ | API と LiteLLM を使用 |
| Grok (xAI) | https://api.x.ai/v1/models | ❌ いいえ | LiteLLM を使用 |
| Together AI | https://api.together.xyz/v1/models | ✅ はい | API を直接使用 |
| Groq | https://api.groq.com/openai/v1/models | ❌ いいえ | LiteLLM を使用 |
| Cerebras | https://api.cerebras.ai/v1/models | ❌ いいえ | LiteLLM を使用 |
| Fireworks | https://api.fireworks.ai/v1/accounts/{id}/models | ❌ いいえ | LiteLLM を使用 |
| Azure OpenAI | Azure Management API | ❌ 複雑 | 手動 |
| Claude Code | API なし | ❌ いいえ | 手動 |
自動化スクリプト
更新を自動化する 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
参照ファイル
- 機能レジストリ:
massgen/backend/capabilities.py - トークン/価格管理:
massgen/token_manager/token_manager.py - 機能テスト:
massgen/tests/test_backend_capabilities.py - 設定ビルダー:
massgen/config_builder.py - ドキュメント生成スクリプト:
docs/scripts/generate_backend_tables.py - LiteLLM データベース:https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json
- OpenRouter API:https://openrouter.ai/docs/overview/models
重要なメンテナンス上の注意
- モデルは新しい順に並べる - 最新のモデルを先頭にする
- 正確な API 名を使用する - プロバイダーのドキュメントと完全に一致させる
- 価格の単位を確認する - token_manager.py では常に 1,000 トークンあたりにする
- 不確かな情報を記録する - 情報が推定値または非公式の場合は、その旨を記載する
- 両方のファイルを更新する - モデル追加時は token_manager.py も忘れずに更新する
- 価格の確認には LiteLLM を使用する - 包括的で、頻繁に更新される
- 更新後にテストする - pytest を実行し、互換性を損なう変更がないことを確認する