Model Radar

Sélection de modèles LLM sur OpenRouter via CLI. Interprète des contraintes en langage naturel en arguments `token:value` et produit un tableau markdown.

Qu'est-ce que Model Radar ?

Model Radar est un outil CLI conçu pour les agents IA (comme Claude Code, Cursor ou Codex) afin de sélectionner le meilleur modèle LLM disponible sur OpenRouter. Il analyse des requêtes en langage naturel (ex. : 'budget 10 $', 'besoin de tool use', 'le moins cher') et les convertit en jetons structurés `token:value` pour filtrer, classer ou comparer les modèles. L'outil utilise un cache local des métadonnées et des classements des modèles (TTL de 6h pour les modèles, 24h pour les classements) pour minimiser les appels réseau et fonctionner même hors ligne. Il propose trois commandes principales : `list` pour filtrer et trier, `recommend` pour un score pondéré selon un préréglage (codage, batch, chat, vision), et `compare` pour une comparaison côte à côte des modèles. La sortie JSON doit être rendue sous forme de tableau markdown par l'agent. La mise à jour automatique est intégrée et vérifie GitHub une fois par jour pour appliquer les dernières modifications du skill, ce qui garantit que les agents utilisent toujours la version la plus récente sans intervention manuelle. Il est compatible avec Node.js 18+ et ne nécessite aucune dépendance npm ni clé API.

Compatible avec✓Claude Code✓Codex CLI~Cursor
npx skills add primexiao/agent-skills

Installed? Explore more Recherche et analyse de données skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Que fait Model Radar ?

CLI de sélection de modèles OpenRouter. Analyse des contraintes en langage naturel en arguments token:value, interroge un cache local des métadonnées des modèles + classements, et émet du JSON que l'agent affiche sous forme de tableau markdown.

Configuration

  • Runtime : Node.js 18+ (aucune installation ni dépendance npm)
  • Pas de clé API — utilise les endpoints publics d'OpenRouter
  • Exécutez toutes les commandes depuis le répertoire de ce skill (celui contenant ce fichier)
  • La première exécution remplit le cache depuis le réseau ; les appels suivants utilisent le cache local (TTL modèles 6h, TTL classements 24h)
  • Les mises à jour automatiques sont activées par défaut. Chaque exécution CLI vérifie la source GitHub fixe au maximum une fois toutes les 24h et applique les mises à jour automatiquement pour les copies installées. Définissez MODEL_RADAR_AUTO_UPDATE=0 pour désactiver.

Flux de travail

  1. Exécutez node scripts/self-update.js auto avant d'utiliser le skill. Si stderr affiche MODEL_RADAR_UPDATED, relisez ce SKILL.md avant de continuer.
  2. Analysez la requête de l'utilisateur en arguments token:value à l'aide du mappage Intention → Jeton ci-dessous
  3. Choisissez la commande : list (filtrer+trier), recommend (score pondéré par rapport à un préréglage), compare (côte à côte)
  4. Exécutez depuis le répertoire du skill. scripts/main.js exécute également la même vérification préalable de mise à jour automatique, donc l'utilisation directe de la CLI reste à jour.
  5. Affichez la sortie JSON sous forme de tableau markdown (voir Sortie)
  6. Terminez par Data as of {fetched_at} ; suggérez refresh si plus de 12h

Commandes

node scripts/main.js list      [tokens...]    # filtrer + trier
node scripts/main.js recommend [tokens...]    # score pondéré par rapport à un préréglage
node scripts/main.js compare   <id|nom>...    # comparaison côte à côte
node scripts/main.js refresh                  # forcer le rafraîchissement des deux caches
node scripts/self-update.js status            # inspecter l'état de la mise à jour
node scripts/self-update.js check             # vérifier les mises à jour sur GitHub
node scripts/self-update.js apply             # appliquer la dernière mise à jour du skill

Mise à jour automatique

  • La source est fixée par package.json.repository : primexiao/agent-skills, chemin skills/model-radar.
  • Les copies installées se mettent à jour automatiquement. Les extractions de source ignorent la mise à jour automatique sauf si MODEL_RADAR_AUTO_UPDATE_SOURCE=1 est défini.
  • Les modifications locales non validées dans le répertoire du skill entraînent l'ignorance de la mise à jour automatique.
  • L'utilisation directe de scripts/main.js redémarre la commande en cours après une mise à jour automatique réussie, de sorte que le résultat soit produit par le code mis à jour.
  • Les mises à jour utilisent une extraction temporaire, valident les fichiers requis, sauvegardent le skill actuel, remplacent les fichiers non runtime, et restaurent en cas d'échec.
  • Les mises à jour réussies suppriment cache/raw.json, cache/models.json et cache/rankings.json afin que le nouveau code ne se mélange pas avec l'ancien cache de données.
  • L'état de la mise à jour automatique et les avertissements vont sur stderr. La sortie JSON de la commande reste sur stdout.

Syntaxe des jetons

Arguments positionnels token:value inspirés de Tailwind. L'ordre n'a pas d'importance.

JetonSignificationFormat de valeurExemples
sortdimension de trimot préréglé (voir ci-dessous)sort:cheap sort:popular
price$/MTok mixte..max / min.. / min..max / bare=maxprice:..10 price:5..20
ctxlongueur de contexteidem, suffixe k/m, bare=minctx:128k ctx:128k..1m
outtokens de sortie maxidem, bare=minout:32k
capcapacités (ET)séparées par des virgulescap:tool_use,reasoning
inmodalités d'entrée (ET)séparées par des virgulesin:image in:audio,image
genmodalités de sortie (ET)séparées par des virgulesgen:image gen:audio
openfiltre open-sourcetrue / falseopen:true
toplimite de résultatsnombre (défaut : list=20, recommend=3)top:5
presetpréréglage de score (recommend seulement)nom du préréglagepreset:coding

Valeurs sort : cheap expensive new (défaut) ctx popular throughput latency

Capacités : tool_use reasoning structured_output vision long_output prompt_caching web_search audio_input video_input file_input image_generation audio_output

Modalités d'entrée : text image audio video file Modalités de sortie : text image audio

Préréglages de recommandation : coding batch chat vision (voir config/presets.json pour les poids et les capacités requises)

Intention → Jeton

L'utilisateur ditJeton(s)
"budget 10 $" / "moins de 10 $"price:..10
"au moins 10 $" / "haut de gamme"price:10..
"au moins Nk de contexte"ctx:Nk
"a besoin de tool use / vision / raisonnement"cap:tool_use / cap:vision / cap:reasoning
"sortie structurée" / "mode JSON"cap:structured_output
"peut prendre une entrée audio / image"in:audio / in:image
"peut générer des images / de l'audio"gen:image / gen:audio
"open source seulement"open:true
"le moins cher" / "le plus abordable"sort:cheap
"le plus populaire" / "tendance"sort:popular
"le plus récent" / "dernier"sort:new
"le plus rapide" / "latence la plus basse"sort:latency
"débit le plus élevé"sort:throughput
"agent de codage"recommend preset:coding
"tâche par lot / en vrac"recommend preset:batch
"agent de vision"recommend preset:vision

Correspondance de modèles (compare)

Priorité de correspondance pour chaque argument de compare :

  1. ID exact — anthropic/claude-sonnet-4-5
  2. Suffixe exact — claude-sonnet-4 → anthropic/claude-sonnet-4 (jamais la variante -fast)
  3. Sous-chaîne partielle sur id/nom, la version la plus récente gagne — claude-sonnet → dernier Sonnet

Sortie

Affichez toujours la sortie JSON sous forme de tableau markdown — les tableaux sont le format d'affichage principal.

list

| # | Modèle | $/MTok (P/C/Mixte) | Ctx | Sortie | Caps | Pop# |
  • $/MTok : prix prompt / complétion / mixte
  • Caps : étiquettes courtes (tool reason vision …)
  • Pop# : rang de popularité si le cache des classements est frais, sinon —

recommend

| Rang | Modèle | Score | Coût↑ | Ctx↑ | Out↑ | Cap↑ | $/MTok | Caps |

Ajoutez une ligne de justification par modèle. Le score et les scores par dimension sont dans [0, 1].

compare

Tableau vertical — une colonne par modèle, une ligne par dimension :

| Dimension          | Modèle A | Modèle B | Modèle C |
| ------------------ | -------- | -------- | -------- |
| Prix (P/C/Mixte)   |   …      |   …      |   …      |
| Contexte           |   …      |   …      |   …      |
| Sortie max         |   …      |   …      |   …      |
| Modalités d'entrée |   …      |   …      |   …      |
| Modalités de sortie|   …      |   …      |   …      |
| Capacités          |   …      |   …      |   …      |
| Rang de popularité |   …      |   …      |   …      |
| Requêtes hebdo.    |   …      |   …      |   …      |

Terminez toujours par : Data as of {fetched_at}. Si plus de 12h, suggérez à l'utilisateur d'exécuter node scripts/main.js refresh.

Mise en cache

cache/
  raw.json       — données de la carte frontend OpenRouter adaptées au schéma brut local (TTL 6h)
  models.json    — enrichi : tarification normalisée + étiquettes de capacité (TTL 6h)
  rankings.json  — popularité / débit / latence + analyses d'utilisation (TTL 24h)
config/
  presets.json
  tier1-categories.json
  • Les fichiers de cache résident sous cache/ et ne sont pas suivis — la première exécution contacte le réseau
  • À l'expiration du TTL, la CLI récupère avec un délai d'attente de 10 s
  • En cas d'échec de récupération, elle utilise le cache obsolète et émet [warn] sur stderr — ainsi les sandbox en lecture seule / hors ligne répondent toujours (éventuellement obsolètes)
  • Une mise à jour automatique réussie du skill supprime les fichiers de cache des données de modèle. La prochaine commande modèle les repeuple.

Notes sur les sandbox

  • Codex CLI : nécessite -s workspace-write (CLI écrit dans cache/) et un accès réseau sortant vers openrouter.ai. Dans la limite du TTL, aucun appel réseau.
  • Premier appel dans un checkout frais est le seul qui nécessite strictement le réseau.
  • La mise à jour automatique nécessite un accès en écriture au système de fichiers de ce répertoire de skill et un accès réseau à GitHub. Si indisponible, elle avertit ou ignore, et la commande modèle s'exécute toujours avec la copie locale actuelle.

Problèmes connus

  • L'API frontend d'OpenRouter (/api/frontend/v1/models/find?active=true&fmt=cards) n'est pas officielle ; si elle échoue, la CLI utilise le cache obsolète lorsque disponible et émet [warn].

Sources de données

  • Modèles : https://openrouter.ai/api/frontend/v1/models/find?active=true&fmt=cards
  • Classements : même endpoint avec order=top-weekly, order=throughput-high-to-low et order=latency-low-to-high

Skills associés