diff options
| author | geril07 <[email protected]> | 2025-11-21 10:01:30 +0300 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-11-21 01:01:30 -0600 |
| commit | c0d9f21c0f921b6baf2e034ed64133af04d5b7fb (patch) | |
| tree | e313e17ab1a0108f7633458e0099030187c967fb | |
| parent | a67b61613989b548070d4e9eb7617fd7eecb1ffd (diff) | |
| download | opencode-c0d9f21c0f921b6baf2e034ed64133af04d5b7fb.tar.gz opencode-c0d9f21c0f921b6baf2e034ed64133af04d5b7fb.zip | |
feat: whitelist/blacklist config options for provider (#3416)
Co-authored-by: Aiden Cline <[email protected]>
| -rw-r--r-- | packages/opencode/src/config/config.ts | 2 | ||||
| -rw-r--r-- | packages/opencode/src/provider/provider.ts | 14 |
2 files changed, 15 insertions, 1 deletions
diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts index f5b402e36..869469a04 100644 --- a/packages/opencode/src/config/config.ts +++ b/packages/opencode/src/config/config.ts @@ -511,6 +511,8 @@ export namespace Config { z.string(), ModelsDev.Provider.partial() .extend({ + whitelist: z.array(z.string()).optional(), + blacklist: z.array(z.string()).optional(), models: z.record(z.string(), ModelsDev.Model.partial()).optional(), options: z .object({ diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index 228c855aa..25f6f4b58 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -365,6 +365,7 @@ export namespace Provider { } parsed.models[modelID] = parsedModel } + database[providerID] = parsed } @@ -446,6 +447,7 @@ export namespace Provider { } for (const [providerID, provider] of Object.entries(providers)) { + const configProvider = config.provider?.[providerID] const filteredModels = Object.fromEntries( Object.entries(provider.info.models) // Filter out blacklisted models @@ -458,8 +460,18 @@ export namespace Provider { ([, model]) => ((!model.experimental && model.status !== "alpha") || Flag.OPENCODE_ENABLE_EXPERIMENTAL_MODELS) && model.status !== "deprecated", - ), + ) + // Filter by provider's whitelist/blacklist from config + .filter(([modelID]) => { + if (!configProvider) return true + + return ( + (!configProvider.blacklist || !configProvider.blacklist.includes(modelID)) && + (!configProvider.whitelist || configProvider.whitelist.includes(modelID)) + ) + }), ) + provider.info.models = filteredModels if (Object.keys(provider.info.models).length === 0) { |
