Context
`convex/ai/providers.ts:23-93` ships one generic primary/fallback pair per provider. Two problems:
-
No tier-by-task policy. Current: everything hits Sonnet 4.6 / Gemini 3 Flash / GPT-5.4 primary. World-class split: cheap for routing/classification/summarization, mid for chat, premium for planning/programming.
-
Preview models in production. `primaryModel: "gemini-3-flash-preview"` — we ship a preview model as the default to our Gemini BYOK majority. One silent API change from Google breaks the whole product.
Files
- `convex/ai/providers.ts:23-93` — current config
- `convex/ai/coach.ts:192-249` — `buildCoachAgents` / `buildCoachAgentsForProvider` consumers
- New (probably): `docs/ai/model-policy.md` or an ADR
Acceptance
References
Related: #190 (intent routing is one consumer of this policy), #205 (effort per step), #210 (prepareStep tool subset)
Context
`convex/ai/providers.ts:23-93` ships one generic primary/fallback pair per provider. Two problems:
No tier-by-task policy. Current: everything hits Sonnet 4.6 / Gemini 3 Flash / GPT-5.4 primary. World-class split: cheap for routing/classification/summarization, mid for chat, premium for planning/programming.
Preview models in production. `primaryModel: "gemini-3-flash-preview"` — we ship a preview model as the default to our Gemini BYOK majority. One silent API change from Google breaks the whole product.
Files
Acceptance
References
Related: #190 (intent routing is one consumer of this policy), #205 (effort per step), #210 (prepareStep tool subset)