Просмотр исходного кода

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

Hannes Rudolph 3 недель назад
Родитель
Сommit
4608c979e0

+ 7 - 4
src/api/providers/utils/__tests__/timeout-config.spec.ts

@@ -41,20 +41,23 @@ describe("getApiRequestTimeout", () => {
 		expect(timeout).toBe(1200000) // 1200 seconds in milliseconds
 		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)
 		mockGetConfig.mockReturnValue(0)
 
 
 		const timeout = getApiRequestTimeout()
 		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)
 		mockGetConfig.mockReturnValue(-100)
 
 
 		const timeout = getApiRequestTimeout()
 		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", () => {
 	it("should handle null by using default", () => {

+ 9 - 5
src/api/providers/utils/timeout-config.ts

@@ -4,9 +4,10 @@ import { Package } from "../../../shared/package"
 /**
 /**
  * Gets the API request timeout from VSCode configuration with validation.
  * 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
 	// Get timeout with validation to ensure it's a valid non-negative number
 	const configTimeout = vscode.workspace.getConfiguration(Package.name).get<number>("apiRequestTimeout", 600)
 	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
 		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
 }
 }