summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-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) {