AOSSIE-Org / AOSSIE-Org/PictoPy

BUG: Frontend aborts long operations after 10s (global axios timeout) - reclustering, memory generation & search fail on large libraries

未關閉
#1,345 5 則留言 0 個 reaction 已指派 1 人 已被 @VanshajPoonia 認領 在 GitHub 檢視
backend bug
主要語言
Python
星號
283
分支
679
平均合併
7 天 2 小時
30 天內合併 PR
3

描述

### Is there an existing issue for this?

- [x] I have searched the existing issues

### What happened?

The shared axios client applies a hard **10-second timeout to every backend request** (`frontend/src/api/axiosConfig.ts:7` → `timeout: 10000`; the sync client at `:15` too), with no per-request override anywhere in `frontend/src` (verified by grep).

Several backend endpoints are **synchronous and scale with library size**, so on a realistic library they run past 10s. The client aborts with a timeout/network error and shows a failure to the user — **even though the backend keeps running to completion** — which can leave the UI and DB inconsistent.

**Affected calls (all use the 10s `apiClient`):**
- `triggerGlobalReclustering` → `POST /face-clusters/global-recluster` (`frontend/src/api/api-functions/face_clusters.ts:78`). Backend runs full DBSCAN over all embeddings + regenerates a face image per cluster.
- `generateMemories` → `POST /api/memories/generate` (`frontend/src/api/api-functions/memories.ts:73`). Clusters every image with location data.
- `getTimeline` / `getLocations`, `fetchSearchedFaces`, `fetchMultiPersonSearch` — same client, can exceed 10s on large libraries.

**Steps to reproduce:**
1. Add folders with a few thousand photos; enable AI tagging and let faces populate.
2. Trigger **Recluster faces** (or **Memories → Generate**).
3. Request fails after ~10s in the UI; backend logs show it still working.

**Expected:** long operations either run without an artificial 10s cap, or run asynchronously with progress.

**Proposed fix:**
- *Short term:* remove the global 10s default (or raise it substantially) and set conservative per-call timeouts only where they make sense.
- *Better:* convert `global-recluster` and `memories/generate` to an async job + polling/SSE, reusing the existing model-download SSE pattern in `backend/app/routes/models.py`.

**Not a duplicate:** searched all issues (title + body) and all PRs for `timeout`/`axios`; only matches are SQLite `busy_timeout` work (PR #866/#982), unrelated to the HTTP client.

### Record

- [x] I agree to follow this project's Code of Conduct

貢獻指南

開啟貢獻指南

評估

這個 Issue 還沒有評估資料。

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。