Skip to content

Commit cec3fc4

Browse files
committed
feat: expand model fingerprints to 75 (all models.dev families), add project links
Model fingerprints expanded from 29 to 75, covering all families from models.dev: - Anthropic: Claude 3/4 (opus, sonnet, haiku) - OpenAI: GPT-4/4.1/4o/5/5.1/5.2/5.3, o3, o4-mini, codex-mini - Google: Gemini 1.5/2/2.5/3 (pro, flash, flash-lite) - DeepSeek: v3/chat, r1 - Meta: Llama 3 (8b/70b/405b), Llama 4 (scout/maverick) - Mistral: large, codestral, devstral (small/medium), magistral, ministral - xAI: Grok 2/3/4 (mini, fast variants) - Cohere: Command-A (reasoning), Command-R (plus, 7b) - Perplexity: Sonar (pro, deep, reasoning) - Alibaba: Qwen 2.5/3 (coder variants) - MiniMax, ZhipuAI/GLM, Nvidia/Nemotron, Moonshot/Kimi, Cerebras, StepFun, Inception/Mercury README additions: - models.dev credit in Inspiration section - 'Also by weisser-dev' section with links to: - agentic-ai.weisser.dev (free AI learning platform) - opencode-remote-telegram (Telegram remote control)
1 parent 98cb9d0 commit cec3fc4

2 files changed

Lines changed: 99 additions & 35 deletions

File tree

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -511,8 +511,14 @@ This project builds on the work of several open-source communities:
511511
- **[darrenhinde/OpenAgentsControl](https://github.com/darrenhinde/OpenAgentsControl)** -- Agent configuration patterns and workflows.
512512
- **[OpenCode Official Docs](https://opencode.ai/docs/)** -- Agents, skills, MCP, permissions, and configuration reference.
513513
- **[pricepertoken.com](https://pricepertoken.com/leaderboards/coding)** -- Model benchmark rankings and pricing data for the model intelligence feature.
514+
- **[models.dev](https://models.dev)** -- Open-source database of AI models (by anomalyco). Model fingerprints sourced from here.
514515
- **[registry.modelcontextprotocol.io](https://registry.modelcontextprotocol.io)** -- Official MCP server registry API for live search.
515516

517+
## Also by weisser-dev
518+
519+
- **[agentic-ai.weisser.dev](https://agentic-ai.weisser.dev)** -- Free, ad-free self-learning platform for Agentic AI. Want to learn more about agents, MCP, and AI-assisted development? Start here.
520+
- **[opencode-remote-telegram](https://github.com/weisser-dev/opencode-remote-telegram)** -- Control OpenCode remotely via Telegram. Run sessions from your phone.
521+
516522
## Resources
517523

518524
- [OpenCode Docs](https://opencode.ai/docs/)

cli-tool/src/setup.js

Lines changed: 93 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -800,42 +800,100 @@ export async function promptSkills(project) {
800800

801801
// Known model fingerprints -- maps regex patterns to canonical model info.
802802
// This allows recognizing models even through custom providers (e.g. Bedrock, Azure).
803+
// Families sourced from https://models.dev (anomalyco/models.dev)
803804
const MODEL_FINGERPRINTS = [
804-
// Anthropic
805-
{ pattern: /claude.*opus.*4/i, canonical: 'claude-opus-4', family: 'anthropic', tier: 'frontier', coding: 95, cost: 'high' },
806-
{ pattern: /claude.*sonnet.*4/i, canonical: 'claude-sonnet-4', family: 'anthropic', tier: 'strong', coding: 90, cost: 'medium' },
807-
{ pattern: /claude.*haiku.*4/i, canonical: 'claude-haiku-4', family: 'anthropic', tier: 'fast', coding: 75, cost: 'low' },
808-
{ pattern: /claude.*opus.*3/i, canonical: 'claude-opus-3', family: 'anthropic', tier: 'strong', coding: 80, cost: 'high' },
809-
{ pattern: /claude.*sonnet.*3/i, canonical: 'claude-sonnet-3', family: 'anthropic', tier: 'strong', coding: 78, cost: 'medium' },
810-
{ pattern: /claude.*haiku.*3/i, canonical: 'claude-haiku-3', family: 'anthropic', tier: 'fast', coding: 60, cost: 'low' },
811-
// OpenAI -- order matters: most specific patterns first
812-
{ pattern: /gpt.*5\.?3.*codex/i, canonical: 'gpt-5.3-codex', family: 'openai', tier: 'frontier', coding: 96, cost: 'very-high' },
813-
{ pattern: /gpt.*5\.?3.*chat/i, canonical: 'gpt-5.3-chat', family: 'openai', tier: 'frontier', coding: 94, cost: 'high' },
814-
{ pattern: /gpt.*5\.?3/i, canonical: 'gpt-5.3', family: 'openai', tier: 'frontier', coding: 94, cost: 'high' },
815-
{ pattern: /gpt.*5\.?2/i, canonical: 'gpt-5.2', family: 'openai', tier: 'frontier', coding: 93, cost: 'high' },
816-
{ pattern: /gpt.*5\.?1.*codex/i, canonical: 'gpt-5.1-codex', family: 'openai', tier: 'strong', coding: 88, cost: 'medium' },
817-
{ pattern: /gpt.*5\.?1/i, canonical: 'gpt-5.1', family: 'openai', tier: 'strong', coding: 85, cost: 'medium' },
818-
{ pattern: /gpt.*5/i, canonical: 'gpt-5', family: 'openai', tier: 'strong', coding: 85, cost: 'medium' },
819-
{ pattern: /gpt.*4o[\b-]/i, canonical: 'gpt-4o', family: 'openai', tier: 'strong', coding: 80, cost: 'medium' },
820-
{ pattern: /gpt.*4o.*mini/i, canonical: 'gpt-4o-mini', family: 'openai', tier: 'fast', coding: 65, cost: 'low' },
821-
{ pattern: /o3/i, canonical: 'o3', family: 'openai', tier: 'frontier', coding: 96, cost: 'very-high' },
822-
{ pattern: /o4.*mini/i, canonical: 'o4-mini', family: 'openai', tier: 'strong', coding: 88, cost: 'medium' },
823-
// Google
824-
{ pattern: /gemini.*3.*pro/i, canonical: 'gemini-3-pro', family: 'google', tier: 'strong', coding: 82, cost: 'medium' },
825-
{ pattern: /gemini.*2\.?5.*pro/i, canonical: 'gemini-2.5-pro', family: 'google', tier: 'strong', coding: 80, cost: 'medium' },
826-
{ pattern: /gemini.*2\.?5.*flash/i,canonical: 'gemini-2.5-flash', family: 'google', tier: 'fast', coding: 72, cost: 'low' },
827-
{ pattern: /gemini.*2.*flash/i, canonical: 'gemini-2-flash', family: 'google', tier: 'fast', coding: 68, cost: 'low' },
828-
// DeepSeek
829-
{ pattern: /deepseek.*v3/i, canonical: 'deepseek-v3', family: 'deepseek', tier: 'strong', coding: 82, cost: 'low' },
830-
{ pattern: /deepseek.*r1/i, canonical: 'deepseek-r1', family: 'deepseek', tier: 'strong', coding: 85, cost: 'low' },
831-
// Meta
832-
{ pattern: /llama.*4.*maverick/i, canonical: 'llama-4-maverick', family: 'meta', tier: 'strong', coding: 78, cost: 'low' },
833-
{ pattern: /llama.*4.*scout/i, canonical: 'llama-4-scout', family: 'meta', tier: 'fast', coding: 70, cost: 'very-low' },
834-
{ pattern: /llama.*3.*405/i, canonical: 'llama-3-405b', family: 'meta', tier: 'strong', coding: 75, cost: 'low' },
835-
{ pattern: /llama.*3.*70/i, canonical: 'llama-3-70b', family: 'meta', tier: 'fast', coding: 65, cost: 'very-low' },
836-
// Mistral
837-
{ pattern: /mistral.*large/i, canonical: 'mistral-large', family: 'mistral', tier: 'strong', coding: 75, cost: 'medium' },
838-
{ pattern: /codestral/i, canonical: 'codestral', family: 'mistral', tier: 'strong', coding: 78, cost: 'low' },
805+
// ── Anthropic ─────────────────────────────────────────────────────────────
806+
{ pattern: /claude.*opus.*4/i, canonical: 'claude-opus-4', family: 'anthropic', tier: 'frontier', coding: 95, cost: 'high' },
807+
{ pattern: /claude.*sonnet.*4/i, canonical: 'claude-sonnet-4', family: 'anthropic', tier: 'strong', coding: 90, cost: 'medium' },
808+
{ pattern: /claude.*haiku.*4/i, canonical: 'claude-haiku-4', family: 'anthropic', tier: 'fast', coding: 75, cost: 'low' },
809+
{ pattern: /claude.*opus.*3/i, canonical: 'claude-opus-3', family: 'anthropic', tier: 'strong', coding: 80, cost: 'high' },
810+
{ pattern: /claude.*sonnet.*3/i, canonical: 'claude-sonnet-3', family: 'anthropic', tier: 'strong', coding: 78, cost: 'medium' },
811+
{ pattern: /claude.*haiku.*3/i, canonical: 'claude-haiku-3', family: 'anthropic', tier: 'fast', coding: 60, cost: 'low' },
812+
// ── OpenAI (most specific first) ──────────────────────────────────────────
813+
{ pattern: /gpt.*5\.?3.*codex/i, canonical: 'gpt-5.3-codex', family: 'openai', tier: 'frontier', coding: 96, cost: 'very-high' },
814+
{ pattern: /gpt.*5\.?3.*chat/i, canonical: 'gpt-5.3-chat', family: 'openai', tier: 'frontier', coding: 94, cost: 'high' },
815+
{ pattern: /gpt.*5\.?3/i, canonical: 'gpt-5.3', family: 'openai', tier: 'frontier', coding: 94, cost: 'high' },
816+
{ pattern: /gpt.*5\.?2/i, canonical: 'gpt-5.2', family: 'openai', tier: 'frontier', coding: 93, cost: 'high' },
817+
{ pattern: /gpt.*5\.?1.*codex/i, canonical: 'gpt-5.1-codex', family: 'openai', tier: 'strong', coding: 88, cost: 'medium' },
818+
{ pattern: /gpt.*5\.?1/i, canonical: 'gpt-5.1', family: 'openai', tier: 'strong', coding: 85, cost: 'medium' },
819+
{ pattern: /gpt.*5.*codex/i, canonical: 'gpt-5-codex', family: 'openai', tier: 'strong', coding: 86, cost: 'medium' },
820+
{ pattern: /gpt.*5.*mini/i, canonical: 'gpt-5-mini', family: 'openai', tier: 'fast', coding: 72, cost: 'low' },
821+
{ pattern: /gpt.*5/i, canonical: 'gpt-5', family: 'openai', tier: 'strong', coding: 85, cost: 'medium' },
822+
{ pattern: /gpt.*4\.?1.*nano/i, canonical: 'gpt-4.1-nano', family: 'openai', tier: 'fast', coding: 60, cost: 'very-low' },
823+
{ pattern: /gpt.*4\.?1.*mini/i, canonical: 'gpt-4.1-mini', family: 'openai', tier: 'fast', coding: 68, cost: 'low' },
824+
{ pattern: /gpt.*4\.?1/i, canonical: 'gpt-4.1', family: 'openai', tier: 'strong', coding: 82, cost: 'medium' },
825+
{ pattern: /gpt.*4o.*mini/i, canonical: 'gpt-4o-mini', family: 'openai', tier: 'fast', coding: 65, cost: 'low' },
826+
{ pattern: /gpt.*4o/i, canonical: 'gpt-4o', family: 'openai', tier: 'strong', coding: 80, cost: 'medium' },
827+
{ pattern: /gpt.*4.*turbo/i, canonical: 'gpt-4-turbo', family: 'openai', tier: 'strong', coding: 75, cost: 'medium' },
828+
{ pattern: /codex.*mini/i, canonical: 'codex-mini', family: 'openai', tier: 'fast', coding: 70, cost: 'low' },
829+
{ pattern: /o4.*mini/i, canonical: 'o4-mini', family: 'openai', tier: 'strong', coding: 88, cost: 'medium' },
830+
{ pattern: /o3[\b\-]|^o3$/i, canonical: 'o3', family: 'openai', tier: 'frontier', coding: 96, cost: 'very-high' },
831+
// ── Google ────────────────────────────────────────────────────────────────
832+
{ pattern: /gemini.*3.*pro/i, canonical: 'gemini-3-pro', family: 'google', tier: 'strong', coding: 82, cost: 'medium' },
833+
{ pattern: /gemini.*2\.?5.*pro/i, canonical: 'gemini-2.5-pro', family: 'google', tier: 'strong', coding: 80, cost: 'medium' },
834+
{ pattern: /gemini.*2\.?5.*flash.*lite/i, canonical: 'gemini-2.5-flash-lite', family: 'google', tier: 'fast', coding: 62, cost: 'very-low' },
835+
{ pattern: /gemini.*2\.?5.*flash/i, canonical: 'gemini-2.5-flash', family: 'google', tier: 'fast', coding: 72, cost: 'low' },
836+
{ pattern: /gemini.*2.*flash.*lite/i,canonical: 'gemini-2-flash-lite', family: 'google', tier: 'fast', coding: 58, cost: 'very-low' },
837+
{ pattern: /gemini.*2.*flash/i, canonical: 'gemini-2-flash', family: 'google', tier: 'fast', coding: 68, cost: 'low' },
838+
{ pattern: /gemini.*1\.?5.*pro/i, canonical: 'gemini-1.5-pro', family: 'google', tier: 'strong', coding: 72, cost: 'medium' },
839+
{ pattern: /gemini.*1\.?5.*flash/i, canonical: 'gemini-1.5-flash', family: 'google', tier: 'fast', coding: 60, cost: 'low' },
840+
// ── DeepSeek ──────────────────────────────────────────────────────────────
841+
{ pattern: /deepseek.*r1/i, canonical: 'deepseek-r1', family: 'deepseek', tier: 'strong', coding: 85, cost: 'low' },
842+
{ pattern: /deepseek.*v3|deepseek.*chat/i, canonical: 'deepseek-v3', family: 'deepseek', tier: 'strong', coding: 82, cost: 'low' },
843+
// ── Meta / Llama ──────────────────────────────────────────────────────────
844+
{ pattern: /llama.*4.*maverick/i, canonical: 'llama-4-maverick', family: 'meta', tier: 'strong', coding: 78, cost: 'low' },
845+
{ pattern: /llama.*4.*scout/i, canonical: 'llama-4-scout', family: 'meta', tier: 'fast', coding: 70, cost: 'very-low' },
846+
{ pattern: /llama.*3.*405/i, canonical: 'llama-3-405b', family: 'meta', tier: 'strong', coding: 75, cost: 'low' },
847+
{ pattern: /llama.*3.*70/i, canonical: 'llama-3-70b', family: 'meta', tier: 'fast', coding: 65, cost: 'very-low' },
848+
{ pattern: /llama.*3.*8/i, canonical: 'llama-3-8b', family: 'meta', tier: 'fast', coding: 50, cost: 'very-low' },
849+
// ── Mistral ───────────────────────────────────────────────────────────────
850+
{ pattern: /devstral.*medium/i, canonical: 'devstral-medium', family: 'mistral', tier: 'strong', coding: 82, cost: 'medium' },
851+
{ pattern: /devstral.*small/i, canonical: 'devstral-small', family: 'mistral', tier: 'fast', coding: 72, cost: 'low' },
852+
{ pattern: /devstral/i, canonical: 'devstral', family: 'mistral', tier: 'strong', coding: 78, cost: 'low' },
853+
{ pattern: /magistral.*medium/i, canonical: 'magistral-medium', family: 'mistral', tier: 'strong', coding: 75, cost: 'medium' },
854+
{ pattern: /magistral.*small/i, canonical: 'magistral-small', family: 'mistral', tier: 'fast', coding: 65, cost: 'low' },
855+
{ pattern: /mistral.*large/i, canonical: 'mistral-large', family: 'mistral', tier: 'strong', coding: 75, cost: 'medium' },
856+
{ pattern: /codestral/i, canonical: 'codestral', family: 'mistral', tier: 'strong', coding: 78, cost: 'low' },
857+
{ pattern: /ministral.*8/i, canonical: 'ministral-8b', family: 'mistral', tier: 'fast', coding: 55, cost: 'very-low' },
858+
{ pattern: /ministral.*3/i, canonical: 'ministral-3b', family: 'mistral', tier: 'fast', coding: 45, cost: 'very-low' },
859+
// ── xAI / Grok ───────────────────────────────────────────────────────────
860+
{ pattern: /grok.*4/i, canonical: 'grok-4', family: 'xai', tier: 'frontier', coding: 92, cost: 'high' },
861+
{ pattern: /grok.*3.*mini.*fast/i, canonical: 'grok-3-mini-fast', family: 'xai', tier: 'fast', coding: 70, cost: 'low' },
862+
{ pattern: /grok.*3.*mini/i, canonical: 'grok-3-mini', family: 'xai', tier: 'fast', coding: 72, cost: 'low' },
863+
{ pattern: /grok.*3.*fast/i, canonical: 'grok-3-fast', family: 'xai', tier: 'strong', coding: 82, cost: 'medium' },
864+
{ pattern: /grok.*3/i, canonical: 'grok-3', family: 'xai', tier: 'strong', coding: 85, cost: 'medium' },
865+
{ pattern: /grok.*2/i, canonical: 'grok-2', family: 'xai', tier: 'strong', coding: 75, cost: 'medium' },
866+
// ── Cohere ────────────────────────────────────────────────────────────────
867+
{ pattern: /command.*a.*reason/i, canonical: 'command-a-reasoning', family: 'cohere', tier: 'strong', coding: 78, cost: 'medium' },
868+
{ pattern: /command.*a/i, canonical: 'command-a', family: 'cohere', tier: 'strong', coding: 75, cost: 'medium' },
869+
{ pattern: /command.*r.*plus/i, canonical: 'command-r-plus', family: 'cohere', tier: 'strong', coding: 70, cost: 'medium' },
870+
{ pattern: /command.*r7b/i, canonical: 'command-r7b', family: 'cohere', tier: 'fast', coding: 55, cost: 'very-low' },
871+
{ pattern: /command.*r\b/i, canonical: 'command-r', family: 'cohere', tier: 'fast', coding: 60, cost: 'low' },
872+
// ── Perplexity ────────────────────────────────────────────────────────────
873+
{ pattern: /sonar.*deep/i, canonical: 'sonar-deep-research', family: 'perplexity', tier: 'strong', coding: 72, cost: 'medium' },
874+
{ pattern: /sonar.*pro/i, canonical: 'sonar-pro', family: 'perplexity', tier: 'strong', coding: 68, cost: 'medium' },
875+
{ pattern: /sonar.*reason/i, canonical: 'sonar-reasoning', family: 'perplexity', tier: 'strong', coding: 70, cost: 'medium' },
876+
{ pattern: /sonar/i, canonical: 'sonar', family: 'perplexity', tier: 'fast', coding: 60, cost: 'low' },
877+
// ── Alibaba / Qwen ────────────────────────────────────────────────────────
878+
{ pattern: /qwen.*3.*235/i, canonical: 'qwen-3-235b', family: 'alibaba', tier: 'strong', coding: 80, cost: 'low' },
879+
{ pattern: /qwen.*3.*32/i, canonical: 'qwen-3-32b', family: 'alibaba', tier: 'fast', coding: 68, cost: 'very-low' },
880+
{ pattern: /qwen.*2\.?5.*coder/i, canonical: 'qwen-2.5-coder', family: 'alibaba', tier: 'strong', coding: 78, cost: 'low' },
881+
{ pattern: /qwen.*coder/i, canonical: 'qwen-coder', family: 'alibaba', tier: 'strong', coding: 75, cost: 'low' },
882+
{ pattern: /qwen/i, canonical: 'qwen', family: 'alibaba', tier: 'strong', coding: 72, cost: 'low' },
883+
// ── MiniMax ───────────────────────────────────────────────────────────────
884+
{ pattern: /minimax/i, canonical: 'minimax', family: 'minimax', tier: 'strong', coding: 70, cost: 'low' },
885+
// ── ZhipuAI / GLM ────────────────────────────────────────────────────────
886+
{ pattern: /glm.*4/i, canonical: 'glm-4', family: 'zhipuai', tier: 'strong', coding: 72, cost: 'low' },
887+
// ── Nvidia / Nemotron ─────────────────────────────────────────────────────
888+
{ pattern: /nemotron/i, canonical: 'nemotron', family: 'nvidia', tier: 'strong', coding: 70, cost: 'low' },
889+
// ── Moonshot / Kimi ───────────────────────────────────────────────────────
890+
{ pattern: /kimi|moonshot/i, canonical: 'kimi', family: 'moonshot', tier: 'strong', coding: 68, cost: 'low' },
891+
// ── Cerebras ──────────────────────────────────────────────────────────────
892+
{ pattern: /cerebras/i, canonical: 'cerebras', family: 'cerebras', tier: 'fast', coding: 65, cost: 'low' },
893+
// ── StepFun ───────────────────────────────────────────────────────────────
894+
{ pattern: /step/i, canonical: 'step', family: 'stepfun', tier: 'strong', coding: 65, cost: 'low' },
895+
// ── Inception / Mercury ───────────────────────────────────────────────────
896+
{ pattern: /mercury/i, canonical: 'mercury', family: 'inception', tier: 'strong', coding: 72, cost: 'low' },
839897
];
840898

841899
const COST_LABELS = { 'very-low': '$', 'low': '$$', 'medium': '$$$', 'high': '$$$$', 'very-high': '$$$$$' };

0 commit comments

Comments
 (0)