piclets / src /lib /utils /qwenTimeout.ts
Fraser's picture
try make requests more robust
38df0bb
raw
history blame
965 Bytes
import pRetry, { AbortError } from 'p-retry';
import pTimeout from 'p-timeout';
export async function withQwenTimeout<T>(
fn: () => Promise<T>,
{ totalTimeout = 180_000, retries = 2 } = {}
): Promise<T> {
return pRetry(
async () => {
try {
return await pTimeout(fn(), { milliseconds: totalTimeout });
} catch (error) {
// Convert non-Error objects to proper Error objects for p-retry
if (error && typeof error === 'object' && !(error instanceof Error)) {
const errorMessage = error.message || error.toString() || 'Network connection error';
throw new Error(errorMessage);
}
throw error;
}
},
{
retries,
onFailedAttempt: (error) => {
console.error(`qwen3 attempt #${error.attemptNumber} failed: ${error.message}`);
if (error.retriesLeft === 0) {
console.error('qwen3 max retries reached, giving up');
}
}
}
);
}