Upload folder using huggingface_hub
Browse files
client/src/pages/TutorialTasks.tsx
CHANGED
|
@@ -385,7 +385,13 @@ const TutorialTasks: React.FC = () => {
|
|
| 385 |
// Wait for actual content to load before ending animation
|
| 386 |
try {
|
| 387 |
// Fetch new week's data with the updated selectedWeek
|
| 388 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 389 |
|
| 390 |
if (response.data) {
|
| 391 |
const tasks = response.data;
|
|
@@ -523,7 +529,12 @@ const TutorialTasks: React.FC = () => {
|
|
| 523 |
return;
|
| 524 |
}
|
| 525 |
|
| 526 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 527 |
|
| 528 |
if (response.data) {
|
| 529 |
const tasks = response.data;
|
|
|
|
| 385 |
// Wait for actual content to load before ending animation
|
| 386 |
try {
|
| 387 |
// Fetch new week's data with the updated selectedWeek
|
| 388 |
+
let response;
|
| 389 |
+
try {
|
| 390 |
+
response = await api.get(`/api/search/tutorial-tasks/${week}`);
|
| 391 |
+
} catch (e) {
|
| 392 |
+
// Soft retry once on transient errors
|
| 393 |
+
response = await api.get(`/api/search/tutorial-tasks/${week}`);
|
| 394 |
+
}
|
| 395 |
|
| 396 |
if (response.data) {
|
| 397 |
const tasks = response.data;
|
|
|
|
| 529 |
return;
|
| 530 |
}
|
| 531 |
|
| 532 |
+
let response;
|
| 533 |
+
try {
|
| 534 |
+
response = await api.get(`/api/search/tutorial-tasks/${selectedWeek}`);
|
| 535 |
+
} catch (e) {
|
| 536 |
+
response = await api.get(`/api/search/tutorial-tasks/${selectedWeek}`);
|
| 537 |
+
}
|
| 538 |
|
| 539 |
if (response.data) {
|
| 540 |
const tasks = response.data;
|
client/src/services/api.ts
CHANGED
|
@@ -87,6 +87,15 @@ api.interceptors.response.use(
|
|
| 87 |
resolve(api.request(error.config));
|
| 88 |
}, 2000); // Wait 2 seconds before retry
|
| 89 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 90 |
} else if (error.response?.status === 500) {
|
| 91 |
console.error('Server error:', error.response.data);
|
| 92 |
} else if (error.code === 'ECONNABORTED') {
|
|
|
|
| 87 |
resolve(api.request(error.config));
|
| 88 |
}, 2000); // Wait 2 seconds before retry
|
| 89 |
});
|
| 90 |
+
} else if (error.response?.status === 503) {
|
| 91 |
+
// Service unavailable - quick exponential backoff retry (max 2 tries)
|
| 92 |
+
const cfg: any = error.config || {};
|
| 93 |
+
cfg.__retryCount = cfg.__retryCount || 0;
|
| 94 |
+
if (cfg.__retryCount < 2) {
|
| 95 |
+
cfg.__retryCount += 1;
|
| 96 |
+
const delay = 500 * Math.pow(2, cfg.__retryCount); // 1000ms, 2000ms
|
| 97 |
+
return new Promise(resolve => setTimeout(() => resolve(api.request(cfg)), delay));
|
| 98 |
+
}
|
| 99 |
} else if (error.response?.status === 500) {
|
| 100 |
console.error('Server error:', error.response.data);
|
| 101 |
} else if (error.code === 'ECONNABORTED') {
|