fix(ai,coding-agent): expose provider timeout/retry controls closes #3627
This commit is contained in:
@@ -315,10 +315,14 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
||||
if (!auth.ok) {
|
||||
throw new Error(auth.error);
|
||||
}
|
||||
const providerRetrySettings = settingsManager.getProviderRetrySettings();
|
||||
const openRouterAttributionHeaders = getOpenRouterAttributionHeaders(model, settingsManager);
|
||||
return streamSimple(model, context, {
|
||||
...options,
|
||||
apiKey: auth.apiKey,
|
||||
timeoutMs: options?.timeoutMs ?? providerRetrySettings.timeoutMs,
|
||||
maxRetries: options?.maxRetries ?? providerRetrySettings.maxRetries,
|
||||
maxRetryDelayMs: options?.maxRetryDelayMs ?? providerRetrySettings.maxRetryDelayMs,
|
||||
headers:
|
||||
openRouterAttributionHeaders || auth.headers || options?.headers
|
||||
? { ...openRouterAttributionHeaders, ...auth.headers, ...options?.headers }
|
||||
@@ -353,7 +357,7 @@ export async function createAgentSession(options: CreateAgentSessionOptions = {}
|
||||
followUpMode: settingsManager.getFollowUpMode(),
|
||||
transport: settingsManager.getTransport(),
|
||||
thinkingBudgets: settingsManager.getThinkingBudgets(),
|
||||
maxRetryDelayMs: settingsManager.getRetrySettings().maxDelayMs,
|
||||
maxRetryDelayMs: settingsManager.getProviderRetrySettings().maxRetryDelayMs,
|
||||
});
|
||||
|
||||
// Restore messages if session has existing data
|
||||
|
||||
@@ -16,11 +16,17 @@ export interface BranchSummarySettings {
|
||||
skipPrompt?: boolean; // default: false - when true, skips "Summarize branch?" prompt and defaults to no summary
|
||||
}
|
||||
|
||||
export interface ProviderRetrySettings {
|
||||
timeoutMs?: number; // SDK/provider request timeout in milliseconds
|
||||
maxRetries?: number; // SDK/provider retry attempts
|
||||
maxRetryDelayMs?: number; // default: 60000 (max server-requested delay before failing)
|
||||
}
|
||||
|
||||
export interface RetrySettings {
|
||||
enabled?: boolean; // default: true
|
||||
maxRetries?: number; // default: 3
|
||||
baseDelayMs?: number; // default: 2000 (exponential backoff: 2s, 4s, 8s)
|
||||
maxDelayMs?: number; // default: 60000 (max server-requested delay before failing)
|
||||
provider?: ProviderRetrySettings;
|
||||
}
|
||||
|
||||
export interface TerminalSettings {
|
||||
@@ -354,6 +360,30 @@ export class SettingsManager {
|
||||
}
|
||||
}
|
||||
|
||||
// Migrate retry.maxDelayMs -> retry.provider.maxRetryDelayMs
|
||||
if (
|
||||
"retry" in settings &&
|
||||
typeof settings.retry === "object" &&
|
||||
settings.retry !== null &&
|
||||
!Array.isArray(settings.retry)
|
||||
) {
|
||||
const retrySettings = settings.retry as Record<string, unknown>;
|
||||
const providerSettings =
|
||||
typeof retrySettings.provider === "object" && retrySettings.provider !== null
|
||||
? (retrySettings.provider as Record<string, unknown>)
|
||||
: undefined;
|
||||
if (
|
||||
typeof retrySettings.maxDelayMs === "number" &&
|
||||
(providerSettings?.maxRetryDelayMs === undefined || providerSettings?.maxRetryDelayMs === null)
|
||||
) {
|
||||
retrySettings.provider = {
|
||||
...(providerSettings ?? {}),
|
||||
maxRetryDelayMs: retrySettings.maxDelayMs,
|
||||
};
|
||||
}
|
||||
delete retrySettings.maxDelayMs;
|
||||
}
|
||||
|
||||
return settings as Settings;
|
||||
}
|
||||
|
||||
@@ -683,12 +713,19 @@ export class SettingsManager {
|
||||
this.save();
|
||||
}
|
||||
|
||||
getRetrySettings(): { enabled: boolean; maxRetries: number; baseDelayMs: number; maxDelayMs: number } {
|
||||
getRetrySettings(): { enabled: boolean; maxRetries: number; baseDelayMs: number } {
|
||||
return {
|
||||
enabled: this.getRetryEnabled(),
|
||||
maxRetries: this.settings.retry?.maxRetries ?? 3,
|
||||
baseDelayMs: this.settings.retry?.baseDelayMs ?? 2000,
|
||||
maxDelayMs: this.settings.retry?.maxDelayMs ?? 60000,
|
||||
};
|
||||
}
|
||||
|
||||
getProviderRetrySettings(): { timeoutMs?: number; maxRetries?: number; maxRetryDelayMs: number } {
|
||||
return {
|
||||
timeoutMs: this.settings.retry?.provider?.timeoutMs,
|
||||
maxRetries: this.settings.retry?.provider?.maxRetries,
|
||||
maxRetryDelayMs: this.settings.retry?.provider?.maxRetryDelayMs ?? 60000,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user