forked from anomalyco/opencode
-
Notifications
You must be signed in to change notification settings - Fork 0
Closed
Description
Problem
All 21 AI provider SDKs are eagerly imported at startup, adding 20-25 MB to the bundle. Most users only use 1-2 providers.
Current State
packages/opencode/src/provider/provider.ts(lines 17-39)- Static imports for all 21 providers
BUNDLED_PROVIDERSmap references eager imports
Solution
Convert to lazy loading using dynamic imports:
// Current (eager)
import { createAmazonBedrock } from "@ai-sdk/amazon-bedrock"
const BUNDLED_PROVIDERS = {
"@ai-sdk/amazon-bedrock": createAmazonBedrock,
}
// Proposed (lazy)
const BUNDLED_PROVIDERS = {
"@ai-sdk/amazon-bedrock": () => import("@ai-sdk/amazon-bedrock").then(m => m.createAmazonBedrock),
}Why It's Feasible
- ✅
getSDK()is already async - ✅ Fallback pattern exists for custom providers
- ✅ State caching already implemented
- ✅ Zero architecture changes needed
Expected Impact
- Cold start: 20-25 MB → ~500 KB
- Per provider: ~1.5-2.5 MB (on demand)
- Typical user (2 providers): ~4 MB total
Trade-off
- First provider access: +50-100ms latency (one-time)
- Subsequent: instant (cached)
Acceptance Criteria
- All 21 providers converted to dynamic imports
- No startup regression
- Provider caching still works
- Tests pass
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels