fix: return undefined instead of 0 for disabled API timeout (#9960)

This commit is contained in:
Hannes Rudolph 2025-12-09 15:32:26 -07:00 committed by GitHub
parent 0068d1fee3
commit 4608c979e0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 16 additions and 9 deletions

View file

@ -41,20 +41,23 @@ describe("getApiRequestTimeout", () => {
expect(timeout).toBe(1200000) // 1200 seconds in milliseconds
})
it("should handle zero timeout (no timeout)", () => {
it("should return undefined for zero timeout (disables timeout)", () => {
mockGetConfig.mockReturnValue(0)
const timeout = getApiRequestTimeout()
expect(timeout).toBe(0) // No timeout
// Zero means "no timeout" - return undefined so SDK uses its default
// (OpenAI SDK interprets 0 as "abort immediately", so we avoid that)
expect(timeout).toBeUndefined()
})
it("should handle negative values by clamping to 0", () => {
it("should return undefined for negative values (disables timeout)", () => {
mockGetConfig.mockReturnValue(-100)
const timeout = getApiRequestTimeout()
expect(timeout).toBe(0) // Negative values should be clamped to 0
// Negative values also mean "no timeout" - return undefined
expect(timeout).toBeUndefined()
})
it("should handle null by using default", () => {

View file

@ -4,9 +4,10 @@ import { Package } from "../../../shared/package"
/**
* Gets the API request timeout from VSCode configuration with validation.
*
* @returns The timeout in milliseconds. Returns 0 for no timeout.
* @returns The timeout in milliseconds. Returns undefined to disable timeout
* (letting the SDK use its default), or a positive number for explicit timeout.
*/
export function getApiRequestTimeout(): number {
export function getApiRequestTimeout(): number | undefined {
// Get timeout with validation to ensure it's a valid non-negative number
const configTimeout = vscode.workspace.getConfiguration(Package.name).get<number>("apiRequestTimeout", 600)
@ -15,8 +16,11 @@ export function getApiRequestTimeout(): number {
return 600 * 1000 // Default to 600 seconds
}
// Allow 0 (no timeout) but clamp negative values to 0
const timeoutSeconds = configTimeout < 0 ? 0 : configTimeout
// 0 or negative means "no timeout" - return undefined to let SDK use its default
// (OpenAI SDK interprets 0 as "abort immediately", so we return undefined instead)
if (configTimeout <= 0) {
return undefined
}
return timeoutSeconds * 1000 // Convert to milliseconds
return configTimeout * 1000 // Convert to milliseconds
}