summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorgeril07 <[email protected]>2025-11-21 10:01:30 +0300
committerGitHub <[email protected]>2025-11-21 01:01:30 -0600
commitc0d9f21c0f921b6baf2e034ed64133af04d5b7fb (patch)
treee313e17ab1a0108f7633458e0099030187c967fb
parenta67b61613989b548070d4e9eb7617fd7eecb1ffd (diff)
downloadopencode-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.ts2
-rw-r--r--packages/opencode/src/provider/provider.ts14
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) {