ÉconomieModel Curation — Best-of-breed par modalité

Model Curation — Best-of-breed par modalité

Position stratégique : BoostEcom est curated, pas vendor-agnostic. Pour chaque modalité (chat, image, vidéo, voix, embeddings), on sélectionne le meilleur modèle disponible et on l'expose au user via notre model…

Position stratégique : BoostEcom est curated, pas vendor-agnostic. Pour chaque modalité (chat, image, vidéo, voix, embeddings), on sélectionne le meilleur modèle disponible et on l'expose au user via notre model switcher unifié.

2026-09-25 : @Atlas Mini passe sur GPT 5.6 Luna ($0.20/$1.20), @Atlas Max et Max Fast sur Opus 5.5 / Opus 5.5 Fast ($4/$20, $8/$40), tous moins chers que leurs prédécesseurs. Haiku 4.5 reste le modèle des tâches internes et le secours de Mini. Détail : backlog/ai-platform/2995.

L'utilisateur ne choisit pas entre 50 modèles. Il choisit entre 3 niveaux de qualité (Fast / Balanced / Maximum) et nous gérons en interne le routage vers le bon provider/modèle.


1. Philosophie de curation

Pourquoi curated et pas vendor-agnostic

Vendor-agnostic (mauvais pour nous)Curated (notre choix)
Code écrit pour switcher entre N providersCode optimisé pour les modèles choisis
Tooling fragmenté (chaque provider a ses specs)Tooling unifié + spécifique aux modèles top
User confusion (50 modèles, lequel choisir ?)UX simple : 3 niveaux Fast/Balanced/Maximum
Tests E2E × N providersTests E2E ciblés
Updates fréquents pour suivre tous les providersUpdates ciblés quand un meilleur modèle sort

Ce qui change quand un meilleur modèle sort

Tous les 3-6 mois : Anthropic / Google / OpenAI sortent une nouvelle version. Process de mise à jour :

  1. Vérifier benchmarks (SWE-bench, GPQA, MMLU, vision, etc.)
  2. Tester sur nos use cases Shopify (audit, theme generation, etc.)
  3. Si gains significatifs : update le modèle dans la config + document
  4. Communiquer aux users via changelog (positif : meilleure qualité, mêmes prix)

Notre position vs Claude / OpenAI / Google

Nous utilisons leurs modèles. Nous ne les concurrençons pas. Notre valeur ajoutée :

  • Vertical Shopify (eux : généralistes)
  • Multi-agent visible (eux : LLM brut)
  • Workflows + marketplace (eux : conversation only)
  • Live store data integration (eux : pas de contexte externe)

2. Modèles par modalité

Ce tableau est dérivé, pas tenu à la main. La source unique est src/config/ai-models.ts : un id Gateway, un rôle, et le coût wholesale. Le retail est wholesale × markup, calculé par retail() dans src/config/model-pricing.ts, et src/test/pricing-model-cards.test.ts échoue si les deux divergent.

Réécrit le 2026-09-05. Cette section décrivait un stack que la plateforme n'appelle pas : Higgsfield agrégeant Kling / Veo / Sora pour la vidéo, ElevenLabs pour la voix, HeyGen pour le lipsync, Recraft V3 pour le vecteur, CLAUDE_VERSIONS = { sonnet: "4.6", opus: "4.7" } pour le chat, et Opus à $15 in / $75 out de wholesale — soit le TRIPLE du coût réel, l'erreur exacte que ai-platform/0156 a corrigée dans le code sans que ce document suive. Un doc de curation qui nomme cinq fournisseurs qu'on ne facture pas n'est pas une curation, c'est une liste de courses.

2.1 Chat / Reasoning / Code

Providers : OpenAI (Mini) et Anthropic (Pro, Max, Max Fast), via AI Gateway, aucun autre chemin. Chaque tier tombe sur le fournisseur OPPOSE en cas de panne (outageFallbackFor).

Ce tableau est une LECTURE, pas une source. Les ids et les prix vivent dans src/config/ai-models.ts (ATLAS_TIER_MODEL, MODELS) et le retail est calcule par retail() dans src/config/model-pricing.ts. Il a annonce Mini sur Haiku et Max sur Opus 5 un jour apres leur changement : en cas de desaccord, le code a raison.

Tier UIClé catalogueID GatewayWholesale /1MRetail /1M (×1.5)
@Atlas Auto ⭐ défaut—(résolu serveur, parmi Mini / Pro / Max)—celui du tier résolu
@Atlas Miniminiopenai/gpt-5.6-luna$0.20 in / $1.20 out$0.30 / $1.80
@Atlas Prosonnetanthropic/claude-sonnet-5$2 in / $10 out$3.00 / $15.00
@Atlas Maxopusanthropic/claude-opus-5.5$4 in / $20 out$6.00 / $30.00
@Atlas Max FastopusFastanthropic/claude-opus-5.5-fast$8 in / $40 out$12.00 / $60.00

haiku (anthropic/claude-haiku-4.5) reste au catalogue pour les appels task (routage, classification, brouillons), plus pour un tier.

Cache : cacheWrite / cacheRead sont déclarés par entrée dans le catalogue et suivent le même markup. anthropic/claude-sonnet-4.6 reste au catalogue sous la clé sonnetLegacy (rôle legacy) uniquement pour que d'anciennes lignes de ledger se résolvent au bon prix : aucun tier ne l'envoie.

Ces ids sont ceux de MODELS dans src/config/ai-models.ts, la seule source qui parle au Gateway. Attention : anthropic/claude-sonnet-4 n'est PAS un alias court de Sonnet 5, il resout sur l'entree sonnetLegacy ($3/$15), gardee pour que le grand livre historique reste facture au prix reellement paye. Ce paragraphe a affirme l'inverse.

Pas d'alias court. Le catalogue envoie l'id EXACT (claude-opus-5, pas claude-opus-4). Le paragraphe supprimé ici affirmait le contraire — « l'alias bascule sans code change » — et c'est précisément ce qui a laissé le prix d'Opus figé une génération entière : si l'id ne change jamais, rien ne rappelle que le prix, lui, a changé. Les autres orthographes vivent dans aliases pour que la RÉSOLUTION d'un id historique trouve la bonne entrée, pas pour être envoyées.

Bump de version : éditer l'entrée dans ai-models.ts — id, wholesale. Tout le reste suit : AI_PROVIDER_COSTS est dérivé du catalogue, le retail est dérivé du wholesale, la page pricing et le tooltip du chat lisent le retail. Il n'y a plus de const CLAUDE_VERSIONS à mettre à jour ; elle n'existe pas.

Routing Auto (@Atlas Auto), ce que ça fait vraiment

C'est implémenté. resolveModelForAuto() (src/features/ai/sdk/sdk/client.ts) décide, et handler-model-select.ts l'appelle dès que le client envoie le sentinelle atlas-auto.

Cette section a dit le contraire jusqu'au 2026-09-05 : « envoie tierModelId("atlas-pro"), en dur. Pas de logique adaptative. C'est un défaut connu », et le tableau ci-dessous était étiqueté « non implémenté ». Les deux moitiés étaient fausses. Le tierModelId("atlas-pro") de constants.tsx est le champ d'affichage de la ligne du sélecteur ; ce que le client envoie est le sentinelle, jamais cet id. Et les cinq lignes annoncées comme attendues sont toutes dans le code, plus deux que ce tableau ne mentionnait pas. Une doc qui déclare non construit ce qui tourne coûte autant qu'une doc qui déclare construit ce qui manque : elle envoie un agent réimplémenter, ou « corriger » le tierModelId("atlas-pro") du sélecteur en croyant tenir le bug. src/test/atlas-auto-routing.test.ts appelle la vraie fonction et compare, ligne par ligne, à ce tableau.

ContexteModèle routé
L'utilisateur a choisi un tier expliciterespecter exactement, jamais d'override
Auto + routing / classification (delegateTo_*)Mini (GPT 5.6 Luna)
Auto + chat standardPro (Sonnet)
Auto + audit catalogue profond, génération de thèmeMax (Opus)
Auto + contexte > 50k tokensMax (Opus)
Auto + un mode Studio arméPro (Sonnet), ou Max si la demande est profonde
Auto + dispatch @agent courtMini (GPT 5.6 Luna)

Les deux dernières lignes ne sont pas décoratives. Un tour qui va générer ne route jamais au moins cher : le brief que ce modèle écrit est l'asset, facturé à l'unité ou à la seconde, donc un prompt faible ne fait pas d'économie, il dépense sur quelque chose qui sera jeté.

2.2 Image — @Atlas Studio

Provider : Google, en direct sur l'AI Gateway. Aucun MCP.

ModèleCléID GatewayFacturation
Nano Banana Pro (Gemini 3 Pro Image)studioImagegoogle/gemini-3-pro-imageretail $0.21 / image

wholesale est null au catalogue : le modèle n'est PAS facturé au token, donc il ne porte aucun tarif au token — ni ici, ni sur la page pricing, ni dans /api/pricing/models. trackStudioMediaUsage lit perImage et rien d'autre.

⚠ Borne économique : le Pro est facturé par palier de résolution (~$0.039 en ≤1024², ~$0.134 en 1K–2K, ~$0.24 en 4K). buildImageTools n'expose aucun paramètre de résolution, ce qui garde le rendu hors du palier 4K où $0.21 serait une vente à perte. Ne pas ajouter imageSize sans remonter perImage d'abord. C'est aussi pourquoi l'unité affichée ne promet plus « 2048×2048 » : la résolution servie n'est pas choisie par nous.

L'id Gateway est gemini-3-pro-image, PAS gemini-3.1-flash-image-preview (que ce document nommait) ni gemini-3-pro-image-preview (l'id Vertex, valable seulement pour le provider google.image() direct).

2.3 Vision / compréhension d'image

Provider : Anthropic, intégré aux modèles Claude. Sonnet 5 et Opus 5 acceptent les entrées image nativement, pas de modèle séparé.

2.4 Vidéo — @Atlas Studio

Provider : Google, en direct sur l'AI Gateway, via experimental_generateVideo (ai@6). Aucun MCP, aucune dépendance ajoutée.

ModèleCléID GatewayFacturation
Veo 3.1 FaststudioVideogoogle/veo-3.1-fast-generate-001retail $0.225 / seconde
  • durationSeconds ∈ {4, 6, 8}, défaut 4 : le clip est facturé à la seconde, donc la durée par défaut est la facture par défaut.
  • resolution n'est pas exposé (même borne économique que l'image).
  • generateAudio: true : la voix-off est générée dans le clip. C'est la raison pour laquelle il n'y a pas de modèle TTS séparé au catalogue, et ce n'est pas un oubli.

2.5 Vecteur — SVG, pictos, logos

Aucun modèle de génération. @Atlas écrit le .svg : c'est du texte, donc c'est déjà facturé en tokens de sortie du modèle de chat que l'opérateur a sélectionné, à SON tarif. Il n'y a pas de tarif à l'unité, et perVector a été retiré de MODEL_PRICING pour cette raison — l'afficher facturerait deux fois le même rendu.

2.6 Ce que la plateforme n'appelle PAS

Nommé ici plutôt que supprimé en silence, parce que ce document a vendu ces cinq intégrations comme le stack courant :

FournisseurCe que ce doc en disaitÉtat réel
Higgsfield« le hub créatif », routeur image + vidéo du StudioMCP optionnel, offert à côté des connecteurs. Le Studio génère sans lui. Ne s'enregistre que si HIGGSFIELDS_MCP_URL + HIGGSFIELDS_MCP_TOKEN sont posées
Kling 2.5 / Sora 2modèles vidéo routés par Higgsfieldjamais appelés. La vidéo est Veo 3.1, en direct
ElevenLabsmoteur voix, $0.30/1k caractères retailjamais appelé. Le tarif a été retiré avec la route (perVoiceKChars)
HeyGenmoteur lipsync, $1.50/min retailjamais appelé, et aucune route Gateway ne fait d'avatar parlant
Recraft V3moteur vecteur, $0.30/assetjamais appelé. Le vecteur est écrit par le modèle

src/test/pricing-copy-engines.test.ts refuse que ces noms reviennent dans la copie publique ou dans les surfaces TypeScript qui la portent. La liste ne peut que rétrécir, et seulement en câblant le fournisseur.

2.7 Repli d'indisponibilité et sonde de citation

Deux entrées OpenAI que le produit n'expose pas comme des tiers :

RôleCléID GatewayWholesale /1M
Repli quand Anthropic est indisponibleoutageFallbackopenai/gpt-4-turbo$10 in / $30 out
Moteur interrogé par l'AEO pour mesurer les citationscitationProbeopenai/gpt-4o$2.50 in / $10 out

Le repli est délibérément plus cher que Sonnet : c'est un filet, pas une option, et ai-models.test.ts l'assert.

2.8 Embeddings

ModèleCléID Gateway
text-embedding-3-smallembeddingopenai/text-embedding-3-small

wholesale: null : facturé au token par le provider mais pas exposé comme un tier, donc pas de ligne retail. Memory RAG, similarité de store, clustering créatif. Aucun modèle d'embedding Anthropic n'est exposé sur le Gateway.

2.9 Recherche web

Outil natif Anthropic (web_search) sur les modèles qui le portent. Aucune intégration Tavily n'existe dans le code : la mention qui figurait ici décrivait une option, pas une route.


3. Routing automatique par contexte

Le tableau qui occupait cette section routait vers Higgsfield, ElevenLabs, HeyGen et Recraft. Ce qui existe réellement :

ContexteCe qui se passeOù
L'opérateur choisit un tierenvoyé tel quel, jamais downgradétierModelId()
atlas-autoenvoie Pro (Sonnet), en durATLAS_TIER_MODEL
Mode média = imagegenerateImage sur STUDIO_IMAGE_MODELbuildImageTools
Mode média = vidéoexperimental_generateVideo sur STUDIO_VIDEO_MODELbuildVideoTools
Mode média = vecteuraucun outil de génération : le modèle écrit le SVGfragment de prompt
Anthropic indisponibleoutageFallbackFor()ai-models.ts

Le routage adaptatif par intention (§2.1) n'est pas implémenté. Il est décrit comme attendu, pas comme existant.


4. UI Model Switcher — ce qu'il affiche

Le switcher est src/features/ai/chat/runtime/composer-model-select.tsx, alimenté par UI_MODELS (constants.tsx). Le chemin que ce document donnait, runtime/integrations/brain/model.tsx, n'existe pas.

Chaque carte porte : le label du tier, une description d'une ligne, un poweredBy sans numéro de version (« Claude Opus », pas « Opus 4.7 » — la version bouge, la copie non), et quatre lignes de tarif (input / cache write / cache read / output). Ces quatre nombres sont lus sur MODEL_PRICING par uiPrice(), plus jamais recopiés : ils l'ont été, sous un commentaire « keep in sync », et le tooltip a affiché un tarif Opus au triple de ce que quiconque payait.

atlas-vision n'est pas dans UI_MODELS et ne doit pas y entrer : le Studio est un outil, pas un modèle de chat. Le mode média se choisit dans le menu « + » du composer, qui affiche uniquement ce qui est réellement facturé — $0.21/image, $0.15/seconde, et rien pour le vecteur.

Ce que ce bloc décrivait et qui était faux : « Coût/image $0.04 » (le retail est $0.21, $0.04 est l'ordre de grandeur du coût wholesale au palier ≤1024²), « Résolution 1024×1024 (default) » (aucun paramètre de résolution n'est envoyé), et les tiers « Sonnet 4.6 / Opus 4.7 ».

5. Stratégie de mise à jour

Cadence

  • Quarterly review des modèles disponibles (mars, juin, septembre, décembre)
  • Trigger immédiat si :
    • Nouveau modèle Anthropic (Claude X.X+1)
    • Baisse de prix d'un provider sur un modèle qu'on utilise
    • Outage prolongé d'un provider (active fallback)

Process de mise à jour modèle

  1. Test interne sur 10-20 prompts représentatifs Shopify
  2. A/B sur cohorte (5% des users pendant 1 semaine)
  3. Métriques : qualité réponse (eval LLM), latence, satisfaction (👍/👎)
  4. Décision : adopt / hold / reject
  5. Adoption : update config + tooltip + bump doc version
  6. Communication : changelog public si gain user-visible

Rollback

Tous les modèles sont versionnés via leur ID. Si Anthropic deprecate claude-sonnet-4-6 (typiquement 12 mois après release), on a 6 mois pour migrer.

Warning system : alert si un modèle approche end-of-life (Anthropic publie ces dates).


6. Pas de vendor lock-in dur : fallback graceful

SituationCe qui se passe réellement
Un modèle Anthropic est indisponibleoutageFallbackFor(id) renvoie openai/gpt-4-turbo (clé outageFallback). Délibérément plus cher que Sonnet : c'est un filet, pas une option, et ai-models.test.ts l'assert
AI Gateway indisponibleAucun repli : il n'y a pas de second chemin vers un provider
BYOK côté clientN'existe plus. Le BYOK LLM a été retiré au passage AI Gateway ; IntelligenceApiKey est un token émis PAR BoostEcom (bei_…, lecture seule), pas une clé provider. La table ProviderApiKey que ce document citait n'est pas au schéma

Où ça vit : outageFallbackFor() dans src/config/ai-models.ts. Le getModelForFramework() que citait ce paragraphe n'existe pas.


7. Code de référence

SujetPath
Catalogue — source uniquesrc/config/ai-models.ts — MODELS, MODEL_LIST, ATLAS_TIER_MODEL
Retail dérivé du wholesalesrc/config/model-pricing.ts — retail(), MODEL_PRICING
Coûts wholesale pour la facturationsrc/types/billing-plans.ts — AI_PROVIDER_COSTS, dérivé de MODEL_LIST
Tiers affichés dans le switchersrc/features/ai/chat/runtime/constants.tsx — UI_MODELS, prix lus via uiPrice()
Le switcher lui-mêmesrc/features/ai/chat/runtime/composer-model-select.tsx
Modes média du composersrc/features/ai/chat/runtime/composer-plus-menu.tsx — useMediaSegments()
Outils Studiosrc/features/ai/orchestrator/runtime/handler-tools-build.ts — buildImageTools, buildVideoTools
Facturation média à l'unitésrc/features/ai/orchestrator/runtime/billing.ts — trackStudioMediaUsage
Page pricing publiquesrc/app/(marketing)/pricing/_components/model-pricing-cards.tsx

Gardes dérivées : src/config/ai-models.test.ts, src/test/pricing-model-cards.test.ts, src/test/pricing-copy-engines.test.ts, src/test/studio-modalities.test.ts, src/test/model-catalogue.test.ts.


8. Items de migration — état réel

Ce tableau listait treize actions « à ajouter à la Phase 1 » du roadmap. Six sont faites, quatre ont été rejetées en câblant autre chose, une n'existe plus, deux restent.

#Action d'origineÉtat
1.29Migrer BRAIN_MODELS vers des ids Claudefait — BRAIN_MODELS supprimé, le catalogue le remplace
1.30Router les ids Claude via AI Gatewayfait
1.31Défaut = Sonnetfait — DEFAULT_TIER = "atlas-pro"
1.32Tooltips avec données réellesfait — prix lus sur MODEL_PRICING
1.33Tooltip image « Gemini 3 Pro Image $0.04 »fait autrement — le retail est $0.21 ; $0.04 était l'ordre de grandeur du wholesale au palier ≤1024²
1.34Mettre à jour PROVIDER_COSTS à la mainrejeté — AI_PROVIDER_COSTS est désormais DÉRIVÉ de MODEL_LIST, il n'y a plus rien à mettre à jour
1.35Routing auto vers le tier bon marchéfait — resolveAutoRoute choisit parmi Mini / Pro / Max via ATLAS_TIER_MODEL et rend sa raison ; jamais Max Fast
1.36Repli si Anthropic est downfait — outageFallback
1.37Câbler la vidéo via le MCP Higgsfieldrejeté — la vidéo passe en direct sur Veo 3.1 (ai-platform/0345)
1.38Câbler la voix via ElevenLabsrejeté — la voix-off est générée DANS le clip (generateAudio: true)
1.39Câbler le lipsync via HeyGenrejeté — aucune route Gateway ne fait d'avatar parlant ; le tarif a été retiré avec la promesse
1.40Câbler le vecteur via Recraft V3rejeté — @Atlas écrit le .svg lui-même
1.41Connecteur Frame.ioà faire — aucun code

9. Maintenance — qui update et quand

  • Founder ou tech lead : decisions adoption nouveau modèle
  • À chaque update : bump version model-curation.md + bump version README
  • Audit semestriel : revue complète tous les modèles utilisés
  • Tooltip drift check : vérifier trimestriellement que les coûts affichés matchent les vrais prix providers

10. Évaluation des nouveaux produits IA : process décisionnel

L'écosystème IA bouge vite. Quand un nouveau modèle, agent platform, ou produit AI sort, suivre ce process :

Phase 1 — Vérification (avant tout)

Avant d'évaluer, vérifier la source :

  • WebSearch + lecture docs officielles
  • Distinguer modèle (Sonnet/Opus/Gemini) vs produit/plateforme (Claude Code, Manus, Cursor)
  • Confirmer le provider (Anthropic ? OpenAI ? Tiers ?)

Phase 2 — Classification

Une fois vérifié, classifier dans une de ces catégories :

CatégorieExempleNotre position
Nouveau modèle par un provider qu'on utiliseClaude Opus 4.8Adopter après benchmark si gains > 10%
Nouveau modèle par un provider qu'on n'utilise pasMistral Large 3Évaluer vs notre stack actuelle, adopter seulement si remplace mieux
Nouveau modèle spécialisé (vision, audio, code)Stable Audio 3Évaluer par modalité spécifique (image, voix, vidéo)
Plateforme agent par un providerClaude Managed Agents, OpenAI Assistants v3Ne pas adopter — concurrent de notre orchestration
Produit tiers utilisant Claude/GPTManus AI, Cursor, LovableIgnorer sauf si menace business directe
Outil dev / IDEClaude Code, Cursor 2.0Outil interne uniquement — pas dans le produit

Phase 3 — Décision

DécisionQuandAction
AdoptGain qualité/coût clair, aligné stratégieÉditer l'entrée dans src/config/ai-models.ts (id + wholesale) — le retail, la facturation et les trois surfaces qui affichent un prix suivent. Puis ce doc, puis un A/B 5%
HoldPrometteur mais pas mature ou mal alignéBookmark + revue dans 3 mois
RejectMauvais ROI, redondant, ou incompatible visionNote dans ce doc avec raison

Décisions actuelles documentées

ProduitDate évaluationStatutRaison
Claude Managed Agents (Anthropic, avr 2026)2026-05-04RejectConcurrent direct de notre orchestration @Atlas + 5 specialists. Adopter = commoditiser notre value-add layer. On garde notre stack custom (AI SDK v6 Agent class + ContextManager + composeAtlasPrompt).
Manus AI (manus.im)2026-05-04IgnoreProduit tiers chinois utilisant Claude. Concurrent indirect (autonomous agents) mais pas dans le vertical Shopify. Pas de menace court-terme.
Claude Code (CLI Anthropic)2026-05-04Outil interne uniquementExcellent pour les devs BoostEcom, pas une feature produit user-facing. Pas dans la stack runtime.
OpenAI Assistants API v3 (si annoncé)FutureTBDÀ évaluer quand publiquement disponible. Probable Reject car même logique que Managed Agents.

Anti-patterns

❌ Adopter un nouveau produit "parce que c'est cool" sans benchmark
❌ Adopter une plateforme agent qui commoditise notre orchestration
❌ Confondre un modèle avec un produit (Manus ≠ Claude Sonnet)
❌ Switcher de provider sans tester sur nos use cases Shopify
✅ Vérifier (WebSearch + docs officielles) avant de raisonner
✅ Classifier avant de décider
✅ Tester sur 5% users avant adoption full
✅ Documenter la décision (adopt/hold/reject) dans ce doc