From 6ecd011e51f8e38bdf1287e0d054e650437f95fc Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Sat, 31 Jan 2026 01:53:23 -0500 Subject: [PATCH] tui: allow specifying custom models file path via OPENCODE_MODELS_PATH Users can now configure their own models configuration file by setting the OPENCODE_MODELS_PATH environment variable, providing more flexibility for testing and configuration. --- .github/workflows/test.yml | 4 ---- packages/opencode/src/flag/flag.ts | 1 + packages/opencode/src/provider/models.ts | 4 ++-- packages/opencode/test/preload.ts | 1 + 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a9c40781cc..2a36c07e14 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -61,10 +61,6 @@ jobs: printf '%s\n' "XDG_STATE_HOME=${{ runner.temp }}/opencode-e2e/state" >> "$GITHUB_ENV" fi - - name: Copy models fixture - run: | - cp "${{ github.workspace }}/packages/opencode/test/tool/fixtures/models-api.json" "${{ github.workspace }}/packages/opencode/src/provider/models-snapshot.ts" - - name: Seed opencode data if: matrix.settings.name != 'windows' working-directory: packages/opencode diff --git a/packages/opencode/src/flag/flag.ts b/packages/opencode/src/flag/flag.ts index df9a1d1285..64ae801d18 100644 --- a/packages/opencode/src/flag/flag.ts +++ b/packages/opencode/src/flag/flag.ts @@ -47,6 +47,7 @@ export namespace Flag { export const OPENCODE_EXPERIMENTAL_PLAN_MODE = OPENCODE_EXPERIMENTAL || truthy("OPENCODE_EXPERIMENTAL_PLAN_MODE") export const OPENCODE_EXPERIMENTAL_MARKDOWN = truthy("OPENCODE_EXPERIMENTAL_MARKDOWN") export const OPENCODE_MODELS_URL = process.env["OPENCODE_MODELS_URL"] + export const OPENCODE_MODELS_PATH = process.env["OPENCODE_MODELS_PATH"] function number(key: string) { const value = process.env[key] diff --git a/packages/opencode/src/provider/models.ts b/packages/opencode/src/provider/models.ts index 8b25abd26b..07881cbfe2 100644 --- a/packages/opencode/src/provider/models.ts +++ b/packages/opencode/src/provider/models.ts @@ -85,9 +85,9 @@ export namespace ModelsDev { } export const Data = lazy(async () => { - const file = Bun.file(filepath) + const file = Bun.file(Flag.OPENCODE_MODELS_PATH ?? filepath) const result = await file.json().catch(() => {}) - if (result && typeof result === "object" && Object.keys(result).length > 0) return result + if (result) return result // @ts-ignore const snapshot = await import("./models-snapshot") .then((m) => m.snapshot as Record) diff --git a/packages/opencode/test/preload.ts b/packages/opencode/test/preload.ts index c1b03ea821..f0d0272aff 100644 --- a/packages/opencode/test/preload.ts +++ b/packages/opencode/test/preload.ts @@ -25,6 +25,7 @@ process.env["XDG_DATA_HOME"] = path.join(dir, "share") process.env["XDG_CACHE_HOME"] = path.join(dir, "cache") process.env["XDG_CONFIG_HOME"] = path.join(dir, "config") process.env["XDG_STATE_HOME"] = path.join(dir, "state") +process.env["OPENCODE_MODELS_PATH"] = path.join(import.meta.dir, "tool", "fixtures", "models-api.json") // Write the cache version file to prevent global/index.ts from clearing the cache const cacheDir = path.join(dir, "cache", "opencode")