diff options
| author | Beshoy Girgis <[email protected]> | 2025-08-31 13:06:02 -0500 |
|---|---|---|
| committer | GitHub <[email protected]> | 2025-08-31 14:06:02 -0400 |
| commit | e4cc05a975e006f5baf476d3783c7a1c8f61cf3e (patch) | |
| tree | b134d8a5cdfb2f7fd79a352eb6b806e1a6237a13 | |
| parent | 029612d8d509fbe8973bcddca5e789d7c0bb33af (diff) | |
| download | opencode-e4cc05a975e006f5baf476d3783c7a1c8f61cf3e.tar.gz opencode-e4cc05a975e006f5baf476d3783c7a1c8f61cf3e.zip | |
feat: Allow provider timeout override (#1982)
| -rw-r--r-- | packages/opencode/src/config/config.ts | 15 | ||||
| -rw-r--r-- | packages/opencode/src/provider/provider.ts | 9 |
2 files changed, 23 insertions, 1 deletions
diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts index 2041ac35f..804a0274f 100644 --- a/packages/opencode/src/config/config.ts +++ b/packages/opencode/src/config/config.ts @@ -392,6 +392,21 @@ export namespace Config { .object({ apiKey: z.string().optional(), baseURL: z.string().optional(), + timeout: z + .union([ + z + .number() + .int() + .positive() + .describe( + "Timeout in milliseconds for requests to this provider. Default is 300000 (5 minutes). Set to false to disable timeout.", + ), + z.literal(false).describe("Disable timeout for this provider entirely."), + ]) + .optional() + .describe( + "Timeout in milliseconds for requests to this provider. Default is 300000 (5 minutes). Set to false to disable timeout.", + ), }) .catchall(z.any()) .optional(), diff --git a/packages/opencode/src/provider/provider.ts b/packages/opencode/src/provider/provider.ts index e37f11f06..c60bbf79c 100644 --- a/packages/opencode/src/provider/provider.ts +++ b/packages/opencode/src/provider/provider.ts @@ -320,9 +320,16 @@ export namespace Provider { const pkg = provider.npm ?? provider.id const mod = await import(await BunProc.install(pkg, "latest")) const fn = mod[Object.keys(mod).find((key) => key.startsWith("create"))!] + let options = { ...s.providers[provider.id]?.options } + if (options["timeout"] !== undefined) { + // Only override fetch if user explicitly sets timeout + options["fetch"] = async (input: any, init?: any) => { + return await fetch(input, { ...init, timeout: options["timeout"] }) + } + } const loaded = fn({ name: provider.id, - ...s.providers[provider.id]?.options, + ...options, }) s.sdk.set(provider.id, loaded) return loaded as SDK |
