From b66e7b6fce07ff9a225dd225fc198b16718a1239 Mon Sep 17 00:00:00 2001 From: Danilo Favato Date: Tue, 28 Oct 2025 14:09:41 -0300 Subject: [PATCH] tweak: add experimental chatMaxRetries to config (#2116) Co-authored-by: GitHub Action Co-authored-by: Aiden Cline --- packages/opencode/src/config/config.ts | 1 + packages/opencode/src/session/compaction.ts | 9 ++++++--- packages/opencode/src/session/prompt.ts | 9 ++++++--- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts index 42d59226..83c518a6 100644 --- a/packages/opencode/src/config/config.ts +++ b/packages/opencode/src/config/config.ts @@ -586,6 +586,7 @@ export namespace Config { .optional(), }) .optional(), + chatMaxRetries: z.number().optional().describe("Number of retries for chat completions on failure"), disable_paste_summary: z.boolean().optional(), }) .optional(), diff --git a/packages/opencode/src/session/compaction.ts b/packages/opencode/src/session/compaction.ts index 657ac447..4896d5f5 100644 --- a/packages/opencode/src/session/compaction.ts +++ b/packages/opencode/src/session/compaction.ts @@ -16,6 +16,7 @@ import { Log } from "../util/log" import { SessionLock } from "./lock" import { ProviderTransform } from "@/provider/transform" import { SessionRetry } from "./retry" +import { Config } from "@/config/config" export namespace SessionCompaction { const log = Log.create({ service: "session.compaction" }) @@ -258,12 +259,14 @@ export namespace SessionCompaction { } let stream = doStream() + const cfg = await Config.get() + const maxRetries = cfg.experimental?.chatMaxRetries ?? MAX_RETRIES let result = await process(stream, { count: 0, - max: MAX_RETRIES, + max: maxRetries, }) if (result.shouldRetry) { - for (let retry = 1; retry < MAX_RETRIES; retry++) { + for (let retry = 1; retry < maxRetries; retry++) { const lastRetryPart = result.parts.findLast((p) => p.type === "retry") if (lastRetryPart) { @@ -300,7 +303,7 @@ export namespace SessionCompaction { stream = doStream() result = await process(stream, { count: retry, - max: MAX_RETRIES, + max: maxRetries, }) if (!result.shouldRetry) { break diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index adaa79f3..4d1aa021 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -50,6 +50,7 @@ import { Command } from "../command" import { $, fileURLToPath } from "bun" import { ConfigMarkdown } from "../config/markdown" import { SessionSummary } from "./summary" +import { Config } from "@/config/config" export namespace SessionPrompt { const log = Log.create({ service: "session.prompt" }) @@ -330,12 +331,14 @@ export namespace SessionPrompt { }) let stream = doStream() + const cfg = await Config.get() + const maxRetries = cfg.experimental?.chatMaxRetries ?? MAX_RETRIES let result = await processor.process(stream, { count: 0, - max: MAX_RETRIES, + max: maxRetries, }) if (result.shouldRetry) { - for (let retry = 1; retry < MAX_RETRIES; retry++) { + for (let retry = 1; retry < maxRetries; retry++) { const lastRetryPart = result.parts.findLast((p) => p.type === "retry") if (lastRetryPart) { @@ -372,7 +375,7 @@ export namespace SessionPrompt { stream = doStream() result = await processor.process(stream, { count: retry, - max: MAX_RETRIES, + max: maxRetries, }) if (!result.shouldRetry) { break