summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorBart Broere <[email protected]>2026-01-21 18:23:07 +0100
committerGitHub <[email protected]>2026-01-21 11:23:07 -0600
commit8df09abb1be48c873d3e5e33e70a4266b04a634c (patch)
tree46b4ddf0ca701eb48e62c3cd29fdce382f600446
parent95b17bcf5eddf0bc350e9102c397b3b716c46331 (diff)
downloadopencode-8df09abb1be48c873d3e5e33e70a4266b04a634c.tar.gz
opencode-8df09abb1be48c873d3e5e33e70a4266b04a634c.zip
feat: Make the models.dev domain configurable for offline environments (#9258)
-rw-r--r--packages/opencode/src/global/index.ts4
-rw-r--r--packages/opencode/src/provider/models-macro.ts5
-rw-r--r--packages/opencode/src/provider/models.ts6
-rw-r--r--packages/opencode/test/preload.ts4
-rw-r--r--packages/ui/vite.config.ts5
5 files changed, 18 insertions, 6 deletions
diff --git a/packages/opencode/src/global/index.ts b/packages/opencode/src/global/index.ts
index d3011b415..25595abcd 100644
--- a/packages/opencode/src/global/index.ts
+++ b/packages/opencode/src/global/index.ts
@@ -22,6 +22,10 @@ export namespace Global {
cache,
config,
state,
+ // Allow overriding models.dev URL for offline deployments
+ get modelsDevUrl() {
+ return process.env.OPENCODE_MODELS_URL || "https://models.dev"
+ },
}
}
diff --git a/packages/opencode/src/provider/models-macro.ts b/packages/opencode/src/provider/models-macro.ts
index 6c8492a70..e8fd353c9 100644
--- a/packages/opencode/src/provider/models-macro.ts
+++ b/packages/opencode/src/provider/models-macro.ts
@@ -1,3 +1,5 @@
+import { Global } from "../global"
+
export async function data() {
const path = Bun.env.MODELS_DEV_API_JSON
if (path) {
@@ -6,6 +8,7 @@ export async function data() {
return await file.text()
}
}
- const json = await fetch("https://models.dev/api.json").then((x) => x.text())
+ const url = Global.Path.modelsDevUrl
+ const json = await fetch(`${url}/api.json`).then((x) => x.text())
return json
}
diff --git a/packages/opencode/src/provider/models.ts b/packages/opencode/src/provider/models.ts
index c5465f988..1f7b74081 100644
--- a/packages/opencode/src/provider/models.ts
+++ b/packages/opencode/src/provider/models.ts
@@ -85,7 +85,8 @@ export namespace ModelsDev {
const json = await data()
return JSON.parse(json) as Record<string, Provider>
}
- const json = await fetch("https://models.dev/api.json").then((x) => x.text())
+ const url = Global.Path.modelsDevUrl
+ const json = await fetch(`${url}/api.json`).then((x) => x.text())
return JSON.parse(json) as Record<string, Provider>
}
@@ -95,7 +96,8 @@ export namespace ModelsDev {
log.info("refreshing", {
file,
})
- const result = await fetch("https://models.dev/api.json", {
+ const url = Global.Path.modelsDevUrl
+ const result = await fetch(`${url}/api.json`, {
headers: {
"User-Agent": Installation.USER_AGENT,
},
diff --git a/packages/opencode/test/preload.ts b/packages/opencode/test/preload.ts
index 35b0b6c76..819166c94 100644
--- a/packages/opencode/test/preload.ts
+++ b/packages/opencode/test/preload.ts
@@ -5,6 +5,7 @@ import path from "path"
import fs from "fs/promises"
import fsSync from "fs"
import { afterAll } from "bun:test"
+const { Global } = await import("../src/global")
const dir = path.join(os.tmpdir(), "opencode-test-data-" + process.pid)
await fs.mkdir(dir, { recursive: true })
@@ -27,7 +28,8 @@ process.env["XDG_STATE_HOME"] = path.join(dir, "state")
const cacheDir = path.join(dir, "cache", "opencode")
await fs.mkdir(cacheDir, { recursive: true })
await fs.writeFile(path.join(cacheDir, "version"), "14")
-const response = await fetch("https://models.dev/api.json")
+const url = Global.Path.modelsDevUrl
+const response = await fetch(`${url}/api.json`)
if (response.ok) {
await fs.writeFile(path.join(cacheDir, "models.json"), await response.text())
}
diff --git a/packages/ui/vite.config.ts b/packages/ui/vite.config.ts
index 0f3630b3a..335084bd6 100644
--- a/packages/ui/vite.config.ts
+++ b/packages/ui/vite.config.ts
@@ -45,12 +45,13 @@ function providerIconsPlugin() {
}
async function fetchProviderIcons() {
- const providers = await fetch("https://models.dev/api.json")
+ const url = process.env.OPENCODE_MODELS_URL || "https://models.dev"
+ const providers = await fetch(`${url}/api.json`)
.then((res) => res.json())
.then((json) => Object.keys(json))
await Promise.all(
providers.map((provider) =>
- fetch(`https://models.dev/logos/${provider}.svg`)
+ fetch(`${url}/logos/${provider}.svg`)
.then((res) => res.text())
.then((svg) => fs.writeFileSync(`./src/assets/icons/provider/${provider}.svg`, svg)),
),