summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-07-19 12:40:28 -0400
committerDax Raad <[email protected]>2025-07-19 12:41:58 -0400
commit86d5b25d1831d378f358b46598d4de06b9eaa8f9 (patch)
treee1d6b0741f5ad48af684a55ffa4caa48da7a6b90
parent2b44dbdbf105f1c5d1cd34b7ae86925ff41e4c79 (diff)
downloadopencode-86d5b25d1831d378f358b46598d4de06b9eaa8f9.tar.gz
opencode-86d5b25d1831d378f358b46598d4de06b9eaa8f9.zip
pass through model.options properly without having to nest it under provider name. you may have to update your configs see https://opencode.ai/docs/models/#openrouter for an example
-rw-r--r--opencode.json14
-rw-r--r--packages/opencode/src/provider/provider.ts5
-rw-r--r--packages/opencode/src/session/index.ts8
-rw-r--r--packages/web/src/content/docs/docs/models.mdx42
4 files changed, 66 insertions, 3 deletions
diff --git a/opencode.json b/opencode.json
index 2fa644079..f5ef59abd 100644
--- a/opencode.json
+++ b/opencode.json
@@ -1,5 +1,19 @@
{
"$schema": "https://opencode.ai/config.json",
+ "provider": {
+ "openrouter": {
+ "models": {
+ "moonshotai/kimi-k2": {
+ "options": {
+ "provider": {
+ "order": ["baseten"],
+ "allow_fallbacks": false
+ }
+ }
+ }
+ }
+ }
+ },
"mcp": {
"weather": {
"type": "local",
diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts
index df3a0e481..57fde28b1 100644
--- a/packages/opencode/src/provider/provider.ts
+++ b/packages/opencode/src/provider/provider.ts
@@ -367,7 +367,10 @@ export namespace Provider {
const pkg = provider.npm ?? provider.id
const mod = await import(await BunProc.install(pkg, "beta"))
const fn = mod[Object.keys(mod).find((key) => key.startsWith("create"))!]
- const loaded = fn(s.providers[provider.id]?.options)
+ const loaded = fn({
+ name: provider.id,
+ ...s.providers[provider.id]?.options,
+ })
s.sdk.set(provider.id, loaded)
return loaded as SDK
})().catch((e) => {
diff --git a/packages/opencode/src/session/index.ts b/packages/opencode/src/session/index.ts
index 2b358bec4..7dcc36946 100644
--- a/packages/opencode/src/session/index.ts
+++ b/packages/opencode/src/session/index.ts
@@ -540,7 +540,9 @@ export namespace Session {
const small = (await Provider.getSmallModel(input.providerID)) ?? model
generateText({
maxOutputTokens: input.providerID === "google" ? 1024 : 20,
- providerOptions: small.info.options,
+ providerOptions: {
+ [input.providerID]: small.info.options,
+ },
messages: [
...SystemPrompt.title(input.providerID).map(
(x): ModelMessage => ({
@@ -685,7 +687,9 @@ export namespace Session {
maxOutputTokens: outputLimit,
abortSignal: abort.signal,
stopWhen: stepCountIs(1000),
- providerOptions: model.info.options,
+ providerOptions: {
+ [input.providerID]: model.info.options,
+ },
messages: [
...system.map(
(x): ModelMessage => ({
diff --git a/packages/web/src/content/docs/docs/models.mdx b/packages/web/src/content/docs/docs/models.mdx
index cde1d2a41..894c72f08 100644
--- a/packages/web/src/content/docs/docs/models.mdx
+++ b/packages/web/src/content/docs/docs/models.mdx
@@ -61,6 +61,48 @@ You can customize the base URL for any provider by setting the `baseURL` option.
---
+### OpenRouter
+
+Many OpenRouter models are preloaded by default - you can customize these or add your own.
+
+Here's an example of specifying a provider
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "provider": {
+ "openrouter": {
+ "models": {
+ "moonshotai/kimi-k2": {
+ "options": {
+ "provider": {
+ "order": ["baseten"],
+ "allow_fallbacks": false
+ }
+ }
+ }
+ }
+ }
+ }
+}
+```
+
+You can also add additional models
+
+```json title="opencode.json"
+{
+ "$schema": "https://opencode.ai/config.json",
+ "provider": {
+ "openrouter": {
+ "models": {
+ "somecoolnewmodel": {},
+ }
+ }
+ }
+}
+
+---
+
### Local
You can configure local model like ones served through LM Studio or Ollama. To