mcpField
O
openrouter-trending-models

openrouter-trending-models

github.com/madappgangエージェントワークフロー287173 回インストール36 週間前に更新
リポジトリ

openrouter-trending-models について

OpenRouterのプログラミング分野のトレンドモデルを取得し、利用量、コンテキスト長、料金を整理するエージェントスキルです。モデル選定や開発ワークフローでの参照に使えます。

主な機能

  1. 01上位9件のモデルを取得
  2. 02モデル ID と名前を表示
  3. 03利用量、コンテキスト、料金を収録
  4. 04プロバイダーと価格帯を集計
  5. 05構造化 JSON を出力

活用シーン

  1. 01複数モデルのレビュー用モデル選定
  2. 02コンテキスト長と料金の比較
  3. 03エージェントワークフローの推奨モデル更新
  4. 04プラグイン文書のモデル一覧更新

インストール

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

$npx skills add https://github.com/madappgang/claude-code --skill openrouter-trending-models

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

詳細

OpenRouter のトレンドモデルスキル

概要

このスキルを使うと、OpenRouter の公開ランキングから現在トレンドのプログラミングモデルにアクセスできます。Bun スクリプトを実行して、プログラミングタスクで最もよく使用されている上位 9 つの AI モデルに関するデータを取得、解析、構造化します。

取得できる情報:

  • モデル ID と名前(例:x-ai/grok-code-fast-1)
  • トークン使用統計(先週のトレンド)
  • コンテキストウィンドウのサイズ(入力容量)
  • 料金情報(トークンあたり、および 100 万トークンあたり)
  • 概要統計(上位プロバイダー、料金の範囲、平均)

データソース:

更新頻度: 週次(OpenRouter は毎週ランキングを更新します)


このスキルを使用する場面

次のような場合に、このスキルを使用してください。

  1. 複数モデルレビューに使用するモデルの選定

    • 計画のレビュアーが、現在トレンドのモデルを必要としている
    • ユーザーから「レビューにはどのモデルを使えばよいですか?」と尋ねられた
    • エージェントのワークフローにおけるモデルの推奨を更新する
  2. AI コーディングのトレンド調査

    • 開発者が、最も人気のあるコーディングモデルを知りたい
    • モデルの機能(コンテキスト、料金、使用状況)を比較する
    • 特定のタスクに最適なコストパフォーマンスのモデルを特定する
  3. プラグインのドキュメント更新

    • README ファイル内のモデル一覧を更新する
    • トレンドのモデルを反映して、エージェントのプロンプトを最新に保つ
    • ドキュメントのメンテナンスワークフロー
  4. コストの最適化

    • 十分なコンテキストを備えた、最も安価なモデルを見つける
    • トレンドのモデル間で料金を比較する
    • AI 支援開発の予算を計画する
  5. モデルの推奨

    • ユーザーから「X に最適なモデルは何ですか?」と尋ねられた
    • 固定リストではなく、データに基づいた提案をする
    • 要件に基づいて代替モデルを提示する

クイックスタート

スクリプトの実行

基本的な使い方:

bun run scripts/get-trending-models.ts

ファイルへの出力:

bun run scripts/get-trending-models.ts > trending-models.json

整形して出力:

bun run scripts/get-trending-models.ts | jq '.'

ヘルプ:

bun run scripts/get-trending-models.ts --help
出力例

スクリプトは、構造化された JSON を標準出力に出力します。

{
  "metadata": {
    "fetchedAt": "2025-11-14T10:30:00.000Z",
    "weekEnding": "2025-11-10",
    "category": "programming",
    "view": "trending"
  },
  "models": [
    {
      "rank": 1,
      "id": "x-ai/grok-code-fast-1",
      "name": "Grok Code Fast",
      "tokenUsage": 908664328688,
      "contextLength": 131072,
      "maxCompletionTokens": 32768,
      "pricing": {
        "prompt": 0.0000005,
        "completion": 0.000001,
        "promptPer1M": 0.5,
        "completionPer1M": 1.0
      }
    }
    // ... 8 more models
  ],
  "summary": {
    "totalTokens": 4500000000000,
    "topProvider": "x-ai",
    "averageContextLength": 98304,
    "priceRange": {
      "min": 0.5,
      "max": 15.0,
      "unit": "USD per 1M tokens"
    }
  }
}
実行時間

通常の実行時間:2~5 秒

  • ランキングの取得:約 1 秒
  • モデル詳細の取得:約 1~2 秒(並列リクエスト)
  • 解析と整形:1 秒未満

出力形式

Metadata オブジェクト
{
  fetchedAt: string;        // ISO 8601 timestamp of when data was fetched
  weekEnding: string;       // YYYY-MM-DD format, end of ranking week
  category: "programming";  // Fixed category
  view: "trending";         // Fixed view type
}
Models 配列(9 項目)

各モデルには、次の情報が含まれます。

{
  rank: number;             // 1-9, position in trending list
  id: string;               // OpenRouter model ID (e.g., "x-ai/grok-code-fast-1")
  name: string;             // Human-readable name (e.g., "Grok Code Fast")
  tokenUsage: number;       // Total tokens used last week
  contextLength: number;    // Maximum input tokens
  maxCompletionTokens: number; // Maximum output tokens
  pricing: {
    prompt: number;         // Per-token input cost (USD)
    completion: number;     // Per-token output cost (USD)
    promptPer1M: number;    // Input cost per 1M tokens (USD)
    completionPer1M: number; // Output cost per 1M tokens (USD)
  }
}
Summary オブジェクト
{
  totalTokens: number;      // Sum of token usage across top 9 models
  topProvider: string;      // Most represented provider (e.g., "x-ai")
  averageContextLength: number; // Average context window size
  priceRange: {
    min: number;            // Lowest prompt price per 1M tokens
    max: number;            // Highest prompt price per 1M tokens
    unit: "USD per 1M tokens";
  }
}

統合例

例 1:エージェントでの動的なモデル選定

シナリオ: 計画のレビュアーが、複数モデルレビューに使用する現在トレンドのモデルを必要としている

# In plan-reviewer agent workflow

STEP 1: Fetch trending models
- Execute: Bash("bun run scripts/get-trending-models.ts > /tmp/trending-models.json")
- Read: /tmp/trending-models.json

STEP 2: Parse and present to user
- Extract top 3-5 models from models array
- Display with context and pricing info
- Let user select preferred model(s)

STEP 3: Use selected model for review
- Pass model ID to Claudish proxy

実装:

// Agent reads output
const data = JSON.parse(bashOutput);

// Extract top 5 models
const topModels = data.models.slice(0, 5);

// Present to user
const modelList = topModels.map((m, i) =>
  `${i + 1}. **${m.name}** (\`${m.id}\`)
   - Context: ${m.contextLength.toLocaleString()} tokens
   - Pricing: $${m.pricing.promptPer1M}/1M input
   - Usage: ${(m.tokenUsage / 1e9).toFixed(1)}B tokens last week`
).join('\n\n');

// Ask user to select
const userChoice = await AskUserQuestion(`Select model for review:\n\n${modelList}`);
例 2:最もコストパフォーマンスの高いモデルを見つける

シナリオ: ユーザーが、低コストでコンテキストの大きいモデルを求めている

# Fetch models and filter with jq
bun run scripts/get-trending-models.ts | jq '
  .models
  | map(select(.contextLength > 100000))
  | sort_by(.pricing.promptPer1M)
  | .[:3]
  | .[] | {
      name,
      id,
      contextLength,
      price: .pricing.promptPer1M
    }
'

出力:

{
  "name": "Gemini 2.5 Flash",
  "id": "google/gemini-2.5-flash",
  "contextLength": 1000000,
  "price": 0.075
}
{
  "name": "Grok Code Fast",
  "id": "x-ai/grok-code-fast-1",
  "contextLength": 131072,
  "price": 0.5
}
例 3:プラグインのドキュメントを更新する

シナリオ: README のモデル推奨を毎週自動更新する

# Fetch models
bun run scripts/get-trending-models.ts > trending.json

# Extract top 5 model names and IDs
jq -r '.models[:5] | .[] | "- `\(.id)` - \(.name) (\(.contextLength / 1024)K context, $\(.pricing.promptPer1M)/1M)"' trending.json

# Output (ready for README):
# - `x-ai/grok-code-fast-1` - Grok Code Fast (128K context, $0.5/1M)
# - `anthropic/claude-4.5-sonnet-20250929` - Claude 4.5 Sonnet (200K context, $3.0/1M)
# - `google/gemini-2.5-flash` - Gemini 2.5 Flash (976K context, $0.075/1M)
例 4:新たにトレンド入りしたモデルを確認する

シナリオ: 新しいモデルが上位 9 位に入ったかを特定する

# Save current trending models
bun run scripts/get-trending-models.ts | jq '.models | map(.id)' > current.json

# Compare with previous week (saved as previous.json)
diff <(jq -r '.[]' previous.json | sort) <(jq -r '.[]' current.json | sort)

# Output shows new entries (>) and removed entries (<)

トラブルシューティング

問題:スクリプトがランキングを取得できない

エラーメッセージ:

✗ Error: Failed to fetch rankings: fetch failed

考えられる原因:

  1. インターネットに接続されていない
  2. OpenRouter のサイトがダウンしている
  3. ファイアウォールが openrouter.ai へのアクセスをブロックしている
  4. URL の構造が変更された

解決策:

  1. 接続をテストする:
curl -I https://openrouter.ai/rankings
# Should return HTTP 200
  1. ブラウザーで URL を確認する:

    • https://openrouter.ai/rankings にアクセスします
    • ページが読み込まれ、プログラミングのランキングが表示されることを確認します
    • URL がリダイレクトされる場合は、スクリプト内の RANKINGS_URL 定数を更新します
  2. ファイアウォール/プロキシを確認する:

# Test from command line
curl "https://openrouter.ai/rankings?category=programming&view=trending&_rsc=2nz0s"
# Should return HTML with embedded JSON
  1. フォールバックデータを使用する:
    • 最後に正常に取得できた出力をフォールバックとして保持します
    • キャッシュされた trending-models.json が 14 日未満の場合は、それを使用します
問題:解析エラー(RSC 形式が無効です)

エラーメッセージ:

✗ Error: Failed to extract JSON from RSC format

原因: OpenRouter のページ構造が変更されました

解決策:

  1. 生の HTML を調べます:
curl "https://openrouter.ai/rankings?category=programming&view=trending&_rsc=2nz0s" | head -200
  1. データパターンを確認します:

    • 出力内で"data":[{を検索します
    • 行が異なるプレフィックス(1b:以外)で始まっていないか確認します
    • JSON 構造が想定される形式と一致するか確認します
  2. スクリプト内の正規表現を更新します:

    • scripts/get-trending-models.tsを編集します
    • fetchRankings()関数内の正規表現を変更します
    • 新しいパターンでテストします
  3. 問題を報告します:

    • プラグインのリポジトリで問題を登録します
    • 生の HTML サンプル(先頭 500 文字)を含めます
    • エラーが発生し始めた時期を記載します
問題:モデルの詳細が見つかりません

警告メッセージ:

Warning: Model x-ai/grok-code-fast-1 not found in API, using defaults

原因: ランキング内のモデル ID が API と一致していません

影響: モデルのコンテキスト/料金の値が 0 になります

解決策:

  1. モデルが API に存在するか確認します:
curl "https://openrouter.ai/api/v1/models" | jq '.data[] | select(.id == "x-ai/grok-code-fast-1")'
  1. ID の不一致を確認します:

    • ランキングで異なる ID 形式が使われている場合があります
    • API では別の名前でモデルが登録されている場合があります
    • モデルが新しく、まだ API に登録されていない場合があります
  2. 手動で修正します:

    • 出力 JSON ファイルを編集します
    • OpenRouter のウェブサイトから正しい詳細を追加します
    • 今後の修正に備えて、不一致を記録します
問題:データが古いという警告

症状: OpenRouter のサイトと比べてモデル情報が古いようです

データの経過日数を確認します:

jq '.metadata.fetchedAt' trending-models.json
# Compare with current date

解決策:

  1. スクリプトを再実行します:
bun run scripts/get-trending-models.ts > trending-models.json
  1. 毎週の更新を設定します:

    • cron に追加します:0 0 * * 1 cd /path/to/repo && bun run scripts/get-trending-models.ts > skills/openrouter-trending-models/trending-models.json
    • または GitHub Actions を使用します(「自動化」セクションを参照)
  2. エージェントにデータの古さを確認する処理を追加します:

const data = JSON.parse(readFile("trending-models.json"));
const fetchedDate = new Date(data.metadata.fetchedAt);
const daysSinceUpdate = (Date.now() - fetchedDate.getTime()) / (1000 * 60 * 60 * 24);

if (daysSinceUpdate > 7) {
  console.warn("Data is over 7 days old, consider refreshing");
}

ベストプラクティス

データの鮮度

推奨される更新スケジュール:

  • 毎週:理想的です(OpenRouter の更新サイクルに合致します)
  • 隔週:安定した期間であれば許容できます
  • 毎月:本番環境での使用における最低限です

データの古さに関する目安:

  • 0~7 日:新鮮(緑)
  • 8~14 日:やや古い(黄)
  • 15~30 日:古い(オレンジ)
  • 30 日以上:非常に古い(赤)
キャッシュ戦略

キャッシュするタイミング:

  • 複数のエージェントが同じデータを必要とする場合
  • モデル選択のワークフローを頻繁に実行する場合
  • レート制限を回避する場合

キャッシュ方法:

  1. スクリプトを一度実行します:bun run scripts/get-trending-models.ts > trending-models.json
  2. リポジトリにコミットします(skills/openrouter-trending-models/内)
  3. スクリプトを再実行する代わりに、エージェントがファイルから読み込みます
  4. 手動実行または自動化により、毎週更新します

キャッシュの無効化:

# Check if cache is stale (> 7 days)
if [ $(find trending-models.json -mtime +7) ]; then
  echo "Cache is stale, refreshing..."
  bun run scripts/get-trending-models.ts > trending-models.json
fi
エージェントでのエラー処理

適切に縮退するパターン:

1. Try to fetch fresh data
   - Run: bun run scripts/get-trending-models.ts
   - If succeeds: Use fresh data
   - If fails: Continue to step 2

2. Try cached data
   - Check if trending-models.json exists
   - Check if < 14 days old
   - If valid: Use cached data
   - If not: Continue to step 3

3. Fallback to hardcoded models
   - Use known good models from agent prompt
   - Warn user data may be outdated
   - Suggest manual refresh
統合パターン

パターン 1:オンデマンド(最新データ)

# Run before each use
bun run scripts/get-trending-models.ts > /tmp/models.json
# Read from /tmp/models.json

パターン 2:キャッシュ(高速アクセス)

# Check cache age first
CACHE_FILE="skills/openrouter-trending-models/trending-models.json"
if [ ! -f "$CACHE_FILE" ] || [ $(find "$CACHE_FILE" -mtime +7) ]; then
  bun run scripts/get-trending-models.ts > "$CACHE_FILE"
fi
# Read from cache

パターン 3:バックグラウンド更新(ノンブロッキング)

# Start refresh in background (don't wait)
bun run scripts/get-trending-models.ts > trending-models.json &

# Continue with workflow
# Use cached data if available
# Fresh data will be ready for next run

変更履歴

v1.0.0 (2025-11-14)
  • 初回リリース
  • OpenRouter から人気上位 9 件のプログラミングモデルを取得
  • RSC ストリーミング形式を解析
  • コンテキスト長、料金、トークン使用量を含む
  • 依存関係なし(Bun の組み込み API のみ)
  • 包括的なエラー処理
  • 概要統計(総トークン数、最上位プロバイダー、価格帯)

今後の拡張

予定されている機能
  • カテゴリ選択(プログラミング、クリエイティブ、分析など)
  • 過去のトレンド追跡(週ごとの比較)
  • プロバイダーのフィルタリング(特定のプロバイダーに絞り込み)
  • コスト計算機(ワークフローのコストを見積もり)
調査アイデア
  • ランキングとモデルの性能ベンチマークとの相関を調査
  • 「コストパフォーマンスに優れた」モデルを特定(性能/価格比)
  • 今後人気が高まるモデルを予測
  • 複数カテゴリの分析

スキルのバージョン: 1.0.0 最終更新日: 2025 年 11 月 14 日 メンテナンス: 毎週の更新を推奨 依存関係: Bun ランタイム、インターネット接続

コメント