refactor: remove 9 low-usage providers and add retired-provider UX#11297
refactor: remove 9 low-usage providers and add retired-provider UX#11297hannesrudolph wants to merge 9 commits intomainfrom
Conversation
|
Generated with ❤️ by ellipsis.dev |
Reviewed the incremental diff (2a1be4f since b4733a4). This commit updates the
Mention @roomote in a comment to request specific changes to this pull request or fix all unresolved issues. |
Remove Cerebras, Chutes, DeepInfra, Doubao, Featherless, Groq, Hugging Face, IO Intelligence, and Unbound providers from the codebase. Each provider removal includes: handler, tests, model definitions, type schemas, UI settings components, fetchers, i18n references, and all wiring in shared registration/config files. - Delete 42 provider-specific files (handlers, tests, fetchers, UI components) - Remove @ai-sdk/cerebras and @ai-sdk/groq npm dependencies - Clean provider references from 68 shared files across src/, packages/types/, webview-ui/, and apps/cli/ - Remove ~490 dead i18n translation keys across 36 locale files - Add docs/ai-sdk-migration-guide.md with updated migration status - All TypeScript checks pass, 6505 tests pass with 0 failures
dc835f5 to
e8158b4
Compare
|
Generated with ❤️ by ellipsis.dev |
Reviewed the full PR (both commits). The provider removal is clean and thorough. The retired-provider UX concept is well-designed with consistent handling across types, storage, runtime, and UI layers. Found 2 issues:
Mention @roomote in a comment to request specific changes to this pull request or fix all unresolved issues. |
| // For active providers, filter out settings from other providers. | ||
| // For retired providers, preserve full profile fields to avoid data loss. | ||
| const filteredConfig = | ||
| typeof config.apiProvider === "string" && isRetiredProvider(config.apiProvider) | ||
| ? providerSettingsWithIdSchema.parse(config) | ||
| : discriminatedProviderSettingsWithIdSchema.parse(config) |
There was a problem hiding this comment.
providerSettingsWithIdSchema.parse(config) strips provider-specific fields that were removed from the schema (e.g. groqApiKey, deepInfraModelId, unboundModelId, huggingFaceModelId, ioIntelligenceModelId, doubaoApiKey, etc.) because Zod's default .parse() drops unknown keys. This contradicts the comment on line 363 about preserving full profile fields. The same issue exists in the load() method at line 597 where providerSettingsWithIdSchema.safeParse(sanitizedConfig) is called for all configs including retired ones. The exportProviderProfiles() method handles this correctly by skipping parsing entirely for retired providers (line 517-519). Consider using providerSettingsWithIdSchema.passthrough().parse(config) here, or skipping parsing for retired providers as exportProviderProfiles does. The test at line 570 only validates common fields like apiKey and apiModelId (which survive parsing), so it doesn't catch this.
Fix it with Roo Code or mention @roomote and request a fix.
129a155 to
869e042
Compare
Preserve API profiles that reference removed providers instead of silently stripping their apiProvider. When a user selects a profile configured for a retired provider, the settings UI now shows an empathetic message explaining the removal instead of the provider configuration form. - Add retiredProviderNames array and isRetiredProvider() helper to packages/types/src/provider-settings.ts - Update ProviderSettingsManager sanitization to preserve retired providers (only strip truly unknown values) - Update ContextProxy sanitization to preserve retired providers - Render retired-provider message in ApiOptions.tsx when selected provider is in the retired list - Add tests for sanitization, ContextProxy, and UI behavior
869e042 to
aebcaa2
Compare
a83bcef to
b4db88c
Compare
Move WarningRow outside {task && ...} conditional so it renders
regardless of task state. Preserve user input on retired provider
intercept so text isn't lost when switching providers.
- Move showRetiredProviderWarning WarningRow to unconditional render
area near ProfileViolationWarning
- Remove setInputValue/setSelectedImages clearing from retired
provider early return in handleSendMessage
- Delete unused RetiredProviderWarning.tsx (dead code)
… strings
- Use passthrough() in saveConfig() and load() so legacy provider-specific
fields (e.g. groqApiKey, deepInfraModelId) are preserved instead of
silently stripped by strict Zod parse()
- Move hardcoded English strings in ApiOptions.tsx and ChatView.tsx to
i18n translation keys (settings:providers.retiredProviderMessage,
chat:retiredProvider.{title,message,openSettings})
- Update tests to assert legacy provider-specific fields survive
save and load round-trips
Translate providers.retiredProviderMessage (settings) and
retiredProvider.{title,message,openSettings} (chat) into ca, de, es,
fr, hi, id, it, ja, ko, nl, pl, pt-BR, ru, tr, vi, zh-CN, zh-TW.
|
Generated with ❤️ by ellipsis.dev |
Reviewed the full PR at 2a1be4f. All 4 previously flagged issues have been resolved. No new issues found. The provider removal is thorough, the retired-provider UX handles data preservation correctly via
Mention @roomote in a comment to request specific changes to this pull request or fix all unresolved issues. |
Summary
Remove 9 low-usage providers from the codebase and add graceful UX for users who had profiles configured for them.
Providers removed: Cerebras, Chutes, DeepInfra, Doubao, Featherless, Groq, Hugging Face, IO Intelligence, Unbound
Changes
Provider removal (commit 1)
@ai-sdk/cerebrasand@ai-sdk/groqnpm dependencies fromsrc/package.jsonsrc/,packages/types/,webview-ui/, andapps/apps/web-evalsdependency — update@roo-code/typesfrom published npm version toworkspace:^Retired-provider UX (commit 2)
When a user has a saved API profile referencing a removed provider:
retiredProviderNamesarray andisRetiredProvider()helperundefinedso the Anthropic safety-net fallback is reached cleanlyVerification
check-typessrc/, 1,215 pass inwebview-ui/— 0 failures