Done

Quota rules: map each source model to its own fallback model

From Rob ZappDone 3 weeks ago

A "Change provider, model or effort" quota rule sends every launch to one target model, whatever model the agent was launched with. I want Claude overflow to go to ChatGPT with a model per source model: Fable → GPT-6 Astra, Opus → GPT-6 Sol, Sonnet → GPT-6 Luna, each with its own effort. Today I must pick one model for all overflow, which over-spends on light agents or under-powers heavy ones.

AgentsRoom diagnostics

  • App version: 1.194.0
  • OS: darwin 27.2.0 (arm64)
  • Agent CLI: claude
  • App language: system

Problem to solve

Fallback rules can't match the fallback model to the model being replaced.

Proposed behavior

Let an adjust-launch rule take a mapping table (source model → target provider, model and effort) with a default row.

Who benefits

Anyone who overflows between providers with tiered models.

Acceptance criteria

Each overflow agent gets a model of similar weight.

[Product Manager @ 2026-09-29T08:51:57.731Z]

Cadrage produit (approuvé par le fondateur le 2026-09-29)

PRD complet : context/features/QUOTA_RULES_MODEL_MAPPING.md. L'essentiel :

  • UI : dans l'action « Ajuster le lancement », un segment « Même modèle pour tous » (écran actuel) / « Selon le modèle de départ » (table : une ligne par FAMILLE de modèle du fournisseur source, colonnes modèle cible + effort, dernière ligne fixe « Autres modèles » = défaut obligatoire ; une ligne peut être vidée = ne pas détourner ce modèle).
  • Pré-remplissage : même strength (1..4, déjà dans modelCatalog.json) chez le fournisseur cible, à égalité le plus récent, sinon palier voisin supérieur puis inférieur. Module pur partagé desktop/src/shared/quotaModelMap.ts + test, réutilisé par desktop, pont mobile et validateur MCP.
  • Données : action.modelMap?: { source, targetModel?, targetEffort?, pinned? }[]. targetModel/targetEffort existants = ligne par défaut. modelMap absent = comportement actuel octet pour octet, zéro migration.
  • Résolution au spawn (substituteLaunchPair) : famille du modèle lancé (versionOf) → ligne exacte → sinon défaut ; opus-5.5 suit la ligne Opus.
  • Contrats : mobile (éditeur + payload pont + RPC write), MCP quota_rules_save/list, admin (ruleAdjustMode sur configured, adjustMode + mappedRow sur fired, jamais le modèle cible), site (mention « per source model » dans toutes les locales + llms.txt), 20 locales, check-model-catalog-drift échoue si un modèle n'a pas de strength.
  • Non-objectifs : pas de changement de modèle en cours de route, pas de table par compte, pas d'édition de strength par l'utilisateur.

Commit final : suffixe « (reported by Robert) ».

[Product Manager @ 2026-09-29T09:18:45.187Z]

Implémenté (non commité, en attente de revue du fondateur)

Le fondateur a demandé de développer directement ; le ticket revient au PM, le fullstack est prévenu.

  • Modèle + porte : desktop/src/models/quotaRules.ts (modelMap, usesModelMap), desktop/src/shared/quotaModelMap.ts + quotaModelMap.test.mjs (6 tests verts), services/quota/quotaLaunchGate.ts (ligne « ne pas détourner » = règle suivante), Terminal.tsx (mappedRow), quotaRuleNotify.ts, quotaRuleShape.ts.
  • Desktop UI : QuotaRuleAdjustFields.tsx (segment Même modèle pour tous / Selon le modèle de départ), QuotaRuleModelMapFields.tsx (table), quotaRuleLabels.ts (phrase adjust-launch-map).
  • Mobile : models/quotaRules.ts, models/quotaModelMap.ts (miroir), models/types.ts (modelFamilies), QuotaRuleAdjustFields.tsx (extrait), QuotaRuleModelMapFields.tsx, quotaRuleText.ts ; desktop quotaRulesBridgePayload.ts + useMobileQuotaRuleEdits.ts (coerce).
  • MCP : quotaRulesMcp{Tools,Validate,Handlers}.cjs (action.modelMap).
  • Admin : events.ts, quotaRuleAnalyticsData.ts, quotaRuleWrittenData.ts, configs/quotaRules.tsx (byAdjustMode, byMappedRow).
  • Catalogue : scripts/check-model-catalog-drift.mjs (strength obligatoire) ; prompt du Fixer de nuit mis à jour.
  • i18n : 10 clés × 20 locales desktop et mobile, zh-TW régénéré ; checks contresens / untranslated / placeholders / mt-defects / diacritics verts, check-i18n-keys et check-i18n-usage sans erreur sur quotaRules.
  • Docs : context/features/QUOTA_RULES.md, QUOTA_RULES_MODEL_MAPPING.md, context/kb/quota-rules.md (+ build-kb), site/public/llms.txt, mémoire quota-rules.
  • Typecheck desktop / mobile / site : aucune erreur dans les fichiers touchés (erreurs préexistantes d'autres chantiers non liées).

Test manuel à faire : règle Claude ≥ 1 % (n'importe quelle jauge) → Codex, mode « Selon le modèle de départ » ; lancer un agent fable, un opus-5.5, un sonnet, un haiku ; attendus : Astra / Sol / Luna / ligne « Autres modèles ».

Commit attendu : feat : Les règles de quota peuvent choisir un modèle de repli par modèle de départ (reported by Robert).

Replies

The team3 weeks ago

Thanks: your idea is implemented and ships in the next release. We built it the way we pictured it, so if the result is not what you had in mind, tell us and we will adjust it.

Up to 3 images, or paste one straight from your clipboard. Big screenshots are shrunk in your browser before they are sent.