mirror of
https://github.com/QwenLM/qwen-code.git
synced 2025-12-21 09:17:53 +00:00
[JUNE 25] Permanent failover to Flash model for OAuth users after persistent 429 errors (#1376)
Co-authored-by: Scott Densmore <scottdensmore@mac.com>
This commit is contained in:
87
packages/core/src/utils/testUtils.ts
Normal file
87
packages/core/src/utils/testUtils.ts
Normal file
@@ -0,0 +1,87 @@
|
||||
/**
|
||||
* @license
|
||||
* Copyright 2025 Google LLC
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* Testing utilities for simulating 429 errors in unit tests
|
||||
*/
|
||||
|
||||
let requestCounter = 0;
|
||||
let simulate429Enabled = false;
|
||||
let simulate429AfterRequests = 0;
|
||||
let simulate429ForAuthType: string | undefined;
|
||||
let fallbackOccurred = false;
|
||||
|
||||
/**
|
||||
* Check if we should simulate a 429 error for the current request
|
||||
*/
|
||||
export function shouldSimulate429(authType?: string): boolean {
|
||||
if (!simulate429Enabled || fallbackOccurred) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// If auth type filter is set, only simulate for that auth type
|
||||
if (simulate429ForAuthType && authType !== simulate429ForAuthType) {
|
||||
return false;
|
||||
}
|
||||
|
||||
requestCounter++;
|
||||
|
||||
// If afterRequests is set, only simulate after that many requests
|
||||
if (simulate429AfterRequests > 0) {
|
||||
return requestCounter > simulate429AfterRequests;
|
||||
}
|
||||
|
||||
// Otherwise, simulate for every request
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset the request counter (useful for tests)
|
||||
*/
|
||||
export function resetRequestCounter(): void {
|
||||
requestCounter = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Disable 429 simulation after successful fallback
|
||||
*/
|
||||
export function disableSimulationAfterFallback(): void {
|
||||
fallbackOccurred = true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a simulated 429 error response
|
||||
*/
|
||||
export function createSimulated429Error(): Error {
|
||||
const error = new Error('Rate limit exceeded (simulated)') as Error & {
|
||||
status: number;
|
||||
};
|
||||
error.status = 429;
|
||||
return error;
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset simulation state when switching auth methods
|
||||
*/
|
||||
export function resetSimulationState(): void {
|
||||
fallbackOccurred = false;
|
||||
resetRequestCounter();
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable/disable 429 simulation programmatically (for tests)
|
||||
*/
|
||||
export function setSimulate429(
|
||||
enabled: boolean,
|
||||
afterRequests = 0,
|
||||
forAuthType?: string,
|
||||
): void {
|
||||
simulate429Enabled = enabled;
|
||||
simulate429AfterRequests = afterRequests;
|
||||
simulate429ForAuthType = forAuthType;
|
||||
fallbackOccurred = false; // Reset fallback state when simulation is re-enabled
|
||||
resetRequestCounter();
|
||||
}
|
||||
Reference in New Issue
Block a user