Skip to content

Commit 8f1a195

Browse files
authored
Merge pull request #666 from transformerlab/fix/update-tasks-gallery
Update tasks gallery when in multitenant mode
2 parents 8273385 + b71db6f commit 8f1a195

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

transformerlab/routers/tasks.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
from transformerlab.models import model_helper
1818
from transformerlab.services.tasks_service import tasks_service
1919
from transformerlab.shared import galleries
20+
from transformerlab.shared.galleries import TASKS_GALLERY_FILE, update_cache_from_remote_if_stale
2021
from transformerlab.shared.shared import slugify
2122
from lab.dirs import get_workspace_dir
2223

@@ -254,6 +255,8 @@ async def queue_task(task_id: str, input_override: str = "{}", output_override:
254255
async def tasks_gallery_list():
255256
"""List tasks available in the remote galleries index."""
256257
try:
258+
# Update the gallery cache from remote if it's stale (older than 1 hour)
259+
update_cache_from_remote_if_stale(TASKS_GALLERY_FILE)
257260
gallery = galleries.get_tasks_gallery()
258261
return {"status": "success", "data": gallery}
259262
except Exception as e:

transformerlab/shared/galleries.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import json
88
import shutil
99
import urllib.request
10+
import time
1011

1112
from transformerlab.shared import dirs
1213

@@ -103,6 +104,41 @@ def update_cache_from_remote(gallery_filename: str):
103104
print(f"❌ Failed to update gallery from remote: {remote_gallery}")
104105

105106

107+
def update_cache_from_remote_if_stale(gallery_filename: str, max_age_seconds: int = 3600):
108+
"""
109+
Updates the gallery cache from remote only if the cache is older than max_age_seconds.
110+
Default max_age_seconds is 3600 (1 hour).
111+
112+
Handles fused filesystems where getmtime() might be unreliable.
113+
"""
114+
local_cache_filename = gallery_cache_file_path(gallery_filename)
115+
116+
# If file doesn't exist, update it
117+
if not os.path.isfile(local_cache_filename):
118+
update_cache_from_remote(gallery_filename)
119+
return
120+
121+
# Check if cache is stale
122+
# Handle fused filesystems where getmtime() might be unreliable or unavailable
123+
try:
124+
mtime = os.path.getmtime(local_cache_filename)
125+
current_time = time.time()
126+
file_age = current_time - mtime
127+
128+
# Sanity check: if mtime is in the future or file_age is negative, treat as unreliable
129+
if file_age < 0 or mtime > current_time:
130+
# Fused filesystem returned unreliable timestamp, update to be safe
131+
update_cache_from_remote(gallery_filename)
132+
return
133+
134+
if file_age > max_age_seconds:
135+
update_cache_from_remote(gallery_filename)
136+
except (OSError, ValueError) as e:
137+
# getmtime() failed (e.g., on some fused filesystems), update to be safe
138+
print(f"⚠️ Could not determine cache age for {gallery_filename}, updating: {e}")
139+
update_cache_from_remote(gallery_filename)
140+
141+
106142
def get_gallery_file(filename: str):
107143
# default empty gallery returned in case of failed gallery file open
108144
gallery = []

0 commit comments

Comments
 (0)