summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorBeshoy Girgis <[email protected]>2025-08-31 13:06:02 -0500
committerGitHub <[email protected]>2025-08-31 14:06:02 -0400
commite4cc05a975e006f5baf476d3783c7a1c8f61cf3e (patch)
treeb134d8a5cdfb2f7fd79a352eb6b806e1a6237a13
parent029612d8d509fbe8973bcddca5e789d7c0bb33af (diff)
downloadopencode-e4cc05a975e006f5baf476d3783c7a1c8f61cf3e.tar.gz
opencode-e4cc05a975e006f5baf476d3783c7a1c8f61cf3e.zip
feat: Allow provider timeout override (#1982)
-rw-r--r--packages/opencode/src/config/config.ts15
-rw-r--r--packages/opencode/src/provider/provider.ts9
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