@nodetool-ai/deploy 0.7.0-rc.23 → 0.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +41 -0
- package/dist/.nodetool-build-stamp +1 -0
- package/dist/admin-client.d.ts +5 -39
- package/dist/admin-client.d.ts.map +1 -1
- package/dist/admin-client.js +9 -230
- package/dist/admin-client.js.map +1 -1
- package/dist/api-user-manager.d.ts.map +1 -1
- package/dist/api-user-manager.js +5 -2
- package/dist/api-user-manager.js.map +1 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +0 -3
- package/dist/auth.js.map +1 -1
- package/dist/compose.d.ts.map +1 -1
- package/dist/compose.js +5 -6
- package/dist/compose.js.map +1 -1
- package/dist/configure.d.ts +1 -43
- package/dist/configure.d.ts.map +1 -1
- package/dist/configure.js +2 -43
- package/dist/configure.js.map +1 -1
- package/dist/deployment-config.d.ts +28 -786
- package/dist/deployment-config.d.ts.map +1 -1
- package/dist/deployment-config.js +34 -218
- package/dist/deployment-config.js.map +1 -1
- package/dist/docker-run.d.ts +2 -1
- package/dist/docker-run.d.ts.map +1 -1
- package/dist/docker-run.js +6 -22
- package/dist/docker-run.js.map +1 -1
- package/dist/docker.d.ts +6 -21
- package/dist/docker.d.ts.map +1 -1
- package/dist/docker.js +6 -53
- package/dist/docker.js.map +1 -1
- package/dist/image-spec.d.ts +1 -1
- package/dist/index.d.ts +0 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -17
- package/dist/index.js.map +1 -1
- package/dist/manager.d.ts.map +1 -1
- package/dist/manager.js +0 -44
- package/dist/manager.js.map +1 -1
- package/dist/progress.d.ts.map +1 -1
- package/dist/progress.js +0 -1
- package/dist/progress.js.map +1 -1
- package/dist/remote-users.d.ts.map +1 -1
- package/dist/remote-users.js +1 -4
- package/dist/remote-users.js.map +1 -1
- package/dist/runpod-rest.d.ts +114 -0
- package/dist/runpod-rest.d.ts.map +1 -0
- package/dist/runpod-rest.js +150 -0
- package/dist/runpod-rest.js.map +1 -0
- package/dist/self-hosted.d.ts +17 -43
- package/dist/self-hosted.d.ts.map +1 -1
- package/dist/self-hosted.js +50 -124
- package/dist/self-hosted.js.map +1 -1
- package/dist/ssh.d.ts +9 -0
- package/dist/ssh.d.ts.map +1 -1
- package/dist/ssh.js +1 -5
- package/dist/ssh.js.map +1 -1
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +1 -11
- package/dist/state.js.map +1 -1
- package/dist/workflow-syncer.d.ts +3 -32
- package/dist/workflow-syncer.d.ts.map +1 -1
- package/dist/workflow-syncer.js +3 -162
- package/dist/workflow-syncer.js.map +1 -1
- package/package.json +29 -14
- package/dist/admin-operations.d.ts +0 -197
- package/dist/admin-operations.d.ts.map +0 -1
- package/dist/admin-operations.js +0 -433
- package/dist/admin-operations.js.map +0 -1
- package/dist/admin-routes.d.ts +0 -306
- package/dist/admin-routes.d.ts.map +0 -1
- package/dist/admin-routes.js +0 -383
- package/dist/admin-routes.js.map +0 -1
- package/dist/collection-routes.d.ts +0 -37
- package/dist/collection-routes.d.ts.map +0 -1
- package/dist/collection-routes.js +0 -43
- package/dist/collection-routes.js.map +0 -1
- package/dist/deploy-to-gcp.d.ts +0 -67
- package/dist/deploy-to-gcp.d.ts.map +0 -1
- package/dist/deploy-to-gcp.js +0 -268
- package/dist/deploy-to-gcp.js.map +0 -1
- package/dist/deploy-to-runpod.d.ts +0 -53
- package/dist/deploy-to-runpod.d.ts.map +0 -1
- package/dist/deploy-to-runpod.js +0 -207
- package/dist/deploy-to-runpod.js.map +0 -1
- package/dist/fly.d.ts +0 -40
- package/dist/fly.d.ts.map +0 -1
- package/dist/fly.js +0 -291
- package/dist/fly.js.map +0 -1
- package/dist/gcp.d.ts +0 -59
- package/dist/gcp.d.ts.map +0 -1
- package/dist/gcp.js +0 -339
- package/dist/gcp.js.map +0 -1
- package/dist/google-cloud-run-api.d.ts +0 -134
- package/dist/google-cloud-run-api.d.ts.map +0 -1
- package/dist/google-cloud-run-api.js +0 -532
- package/dist/google-cloud-run-api.js.map +0 -1
- package/dist/huggingface.d.ts +0 -69
- package/dist/huggingface.d.ts.map +0 -1
- package/dist/huggingface.js +0 -346
- package/dist/huggingface.js.map +0 -1
- package/dist/railway.d.ts +0 -65
- package/dist/railway.d.ts.map +0 -1
- package/dist/railway.js +0 -284
- package/dist/railway.js.map +0 -1
- package/dist/runpod-api.d.ts +0 -206
- package/dist/runpod-api.d.ts.map +0 -1
- package/dist/runpod-api.js +0 -703
- package/dist/runpod-api.js.map +0 -1
- package/dist/runpod.d.ts +0 -82
- package/dist/runpod.d.ts.map +0 -1
- package/dist/runpod.js +0 -188
- package/dist/runpod.js.map +0 -1
- package/dist/storage-routes.d.ts +0 -55
- package/dist/storage-routes.d.ts.map +0 -1
- package/dist/storage-routes.js +0 -160
- package/dist/storage-routes.js.map +0 -1
- package/dist/sync.d.ts +0 -38
- package/dist/sync.d.ts.map +0 -1
- package/dist/sync.js +0 -130
- package/dist/sync.js.map +0 -1
package/dist/admin-operations.js
DELETED
|
@@ -1,433 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Admin Operations Module
|
|
3
|
-
*
|
|
4
|
-
* Provides shared admin operations for model management including:
|
|
5
|
-
* - Hugging Face model downloads (with streaming progress)
|
|
6
|
-
* - Ollama model downloads (with streaming progress)
|
|
7
|
-
* - Cache management and scanning
|
|
8
|
-
* - Model deletion
|
|
9
|
-
*
|
|
10
|
-
* This is a TypeScript port of the Python admin_operations module.
|
|
11
|
-
* Platform-specific integrations (huggingface_hub, ollama client) are
|
|
12
|
-
* abstracted behind injectable interfaces so callers can provide their
|
|
13
|
-
* own implementations.
|
|
14
|
-
*/
|
|
15
|
-
import * as path from "path";
|
|
16
|
-
import * as fs from "fs";
|
|
17
|
-
/**
|
|
18
|
-
* Filter function matching Python's `filter_repo_paths`.
|
|
19
|
-
* A simple glob-ish filter: allow_patterns keeps only matches,
|
|
20
|
-
* ignore_patterns removes matches.
|
|
21
|
-
*/
|
|
22
|
-
export function filterRepoFiles(files, allowPatterns, ignorePatterns) {
|
|
23
|
-
let result = files;
|
|
24
|
-
if (allowPatterns && allowPatterns.length > 0) {
|
|
25
|
-
result = result.filter((f) => allowPatterns.some((pat) => matchGlob(pat, f.path)));
|
|
26
|
-
}
|
|
27
|
-
if (ignorePatterns && ignorePatterns.length > 0) {
|
|
28
|
-
result = result.filter((f) => !ignorePatterns.some((pat) => matchGlob(pat, f.path)));
|
|
29
|
-
}
|
|
30
|
-
return result;
|
|
31
|
-
}
|
|
32
|
-
/** Minimal glob matcher supporting * and ** wildcards. */
|
|
33
|
-
function matchGlob(pattern, value) {
|
|
34
|
-
const regex = pattern
|
|
35
|
-
.replace(/[.+^${}()|[\]\\]/g, "\\$&")
|
|
36
|
-
.replace(/\*\*/g, "<<GLOBSTAR>>")
|
|
37
|
-
.replace(/\*/g, "[^/]*")
|
|
38
|
-
.replace(/<<GLOBSTAR>>/g, ".*");
|
|
39
|
-
return new RegExp(`^${regex}$`).test(value);
|
|
40
|
-
}
|
|
41
|
-
// ── Token resolution ───────────────────────────────────────
|
|
42
|
-
/**
|
|
43
|
-
* Resolve an HF token.
|
|
44
|
-
*
|
|
45
|
-
* Priority:
|
|
46
|
-
* 1. Explicit token passed in
|
|
47
|
-
* 2. HF_TOKEN environment variable
|
|
48
|
-
* 3. getSecret callback (e.g. database lookup)
|
|
49
|
-
*/
|
|
50
|
-
export async function getHFToken(options) {
|
|
51
|
-
if (options?.token)
|
|
52
|
-
return options.token;
|
|
53
|
-
const envToken = process.env["HF_TOKEN"];
|
|
54
|
-
if (envToken) {
|
|
55
|
-
console.debug("getHFToken: found HF_TOKEN in environment");
|
|
56
|
-
return envToken;
|
|
57
|
-
}
|
|
58
|
-
if (options?.userId && options?.getSecret) {
|
|
59
|
-
try {
|
|
60
|
-
const dbToken = await options.getSecret("HF_TOKEN", options.userId);
|
|
61
|
-
if (dbToken) {
|
|
62
|
-
console.debug(`getHFToken: found HF_TOKEN in secrets for userId=${options.userId}`);
|
|
63
|
-
return dbToken;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
catch (err) {
|
|
67
|
-
console.debug(`getHFToken: failed to get HF_TOKEN from secrets: ${err}`);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
console.debug("getHFToken: no HF_TOKEN found");
|
|
71
|
-
return null;
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Download manager for admin operations that yields progress updates.
|
|
75
|
-
*/
|
|
76
|
-
export class AdminDownloadManager {
|
|
77
|
-
token;
|
|
78
|
-
hub;
|
|
79
|
-
tokenInitialized;
|
|
80
|
-
constructor(options) {
|
|
81
|
-
this.token = options.token ?? null;
|
|
82
|
-
this.hub = options.hub;
|
|
83
|
-
this.tokenInitialized = options.token != null;
|
|
84
|
-
if (this.token) {
|
|
85
|
-
console.debug(`AdminDownloadManager initialized with HF_TOKEN (${this.token.length} chars)`);
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
console.debug("AdminDownloadManager initialized without HF_TOKEN");
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Factory that resolves the token asynchronously before construction.
|
|
93
|
-
*/
|
|
94
|
-
static async create(hub, options) {
|
|
95
|
-
const token = await getHFToken({
|
|
96
|
-
userId: options?.userId,
|
|
97
|
-
getSecret: options?.getSecret
|
|
98
|
-
});
|
|
99
|
-
return new AdminDownloadManager({
|
|
100
|
-
token: token ?? undefined,
|
|
101
|
-
hub
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Download a HuggingFace model with detailed progress updates.
|
|
106
|
-
*/
|
|
107
|
-
async *downloadWithProgress(options) {
|
|
108
|
-
const { repoId, cacheDir = "/app/.cache/huggingface/hub", filePath, ignorePatterns, allowPatterns, userId } = options;
|
|
109
|
-
// Lazy token init
|
|
110
|
-
if (!this.tokenInitialized && userId) {
|
|
111
|
-
this.token = await getHFToken({
|
|
112
|
-
userId,
|
|
113
|
-
getSecret: options.getSecret
|
|
114
|
-
});
|
|
115
|
-
this.tokenInitialized = true;
|
|
116
|
-
}
|
|
117
|
-
try {
|
|
118
|
-
console.info(`Starting HF model download: ${repoId}`);
|
|
119
|
-
yield {
|
|
120
|
-
status: "starting",
|
|
121
|
-
repo_id: repoId,
|
|
122
|
-
message: `Starting download of ${repoId}`
|
|
123
|
-
};
|
|
124
|
-
// Single file download
|
|
125
|
-
if (filePath) {
|
|
126
|
-
yield {
|
|
127
|
-
status: "progress",
|
|
128
|
-
repo_id: repoId,
|
|
129
|
-
message: `Downloading single file: ${filePath}`,
|
|
130
|
-
current_file: filePath
|
|
131
|
-
};
|
|
132
|
-
const localPath = await this.hub.downloadFile(repoId, filePath, cacheDir, this.token ?? undefined);
|
|
133
|
-
yield {
|
|
134
|
-
status: "completed",
|
|
135
|
-
repo_id: repoId,
|
|
136
|
-
local_path: localPath,
|
|
137
|
-
message: `Successfully downloaded ${repoId}/${filePath}`
|
|
138
|
-
};
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
// Repository download
|
|
142
|
-
yield {
|
|
143
|
-
status: "progress",
|
|
144
|
-
repo_id: repoId,
|
|
145
|
-
message: "Fetching file list..."
|
|
146
|
-
};
|
|
147
|
-
let files = await this.hub.listRepoFiles(repoId, this.token ?? undefined);
|
|
148
|
-
files = filterRepoFiles(files, allowPatterns, ignorePatterns);
|
|
149
|
-
// Partition into cached vs. uncached
|
|
150
|
-
const filesToDownload = [];
|
|
151
|
-
const cachedPaths = [];
|
|
152
|
-
for (const file of files) {
|
|
153
|
-
const cachePath = this.hub.tryLoadFromCache(repoId, file.path);
|
|
154
|
-
if (cachePath && fs.existsSync(cachePath)) {
|
|
155
|
-
cachedPaths.push(file.path);
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
filesToDownload.push(file);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
const totalFiles = filesToDownload.length;
|
|
162
|
-
const totalSize = filesToDownload.reduce((s, f) => s + (f.size ?? 0), 0);
|
|
163
|
-
yield {
|
|
164
|
-
status: "progress",
|
|
165
|
-
repo_id: repoId,
|
|
166
|
-
message: `Found ${totalFiles} files to download, ${cachedPaths.length} already cached`,
|
|
167
|
-
total_files: totalFiles,
|
|
168
|
-
total_size: totalSize,
|
|
169
|
-
cached_files: cachedPaths.length
|
|
170
|
-
};
|
|
171
|
-
if (totalFiles === 0) {
|
|
172
|
-
yield {
|
|
173
|
-
status: "completed",
|
|
174
|
-
repo_id: repoId,
|
|
175
|
-
message: `All files already cached for ${repoId}`,
|
|
176
|
-
total_files: 0,
|
|
177
|
-
cached_files: cachedPaths.length
|
|
178
|
-
};
|
|
179
|
-
return;
|
|
180
|
-
}
|
|
181
|
-
// Download each file
|
|
182
|
-
const downloadedFiles = [];
|
|
183
|
-
let downloadedSize = 0;
|
|
184
|
-
for (let i = 0; i < filesToDownload.length; i++) {
|
|
185
|
-
const file = filesToDownload[i];
|
|
186
|
-
yield {
|
|
187
|
-
status: "progress",
|
|
188
|
-
repo_id: repoId,
|
|
189
|
-
message: `Downloading ${file.path}`,
|
|
190
|
-
current_file: file.path,
|
|
191
|
-
file_progress: i + 1,
|
|
192
|
-
total_files: totalFiles,
|
|
193
|
-
downloaded_size: downloadedSize,
|
|
194
|
-
total_size: totalSize
|
|
195
|
-
};
|
|
196
|
-
try {
|
|
197
|
-
await this.hub.downloadFile(repoId, file.path, cacheDir, this.token ?? undefined);
|
|
198
|
-
downloadedFiles.push(file.path);
|
|
199
|
-
downloadedSize += file.size ?? 0;
|
|
200
|
-
yield {
|
|
201
|
-
status: "progress",
|
|
202
|
-
repo_id: repoId,
|
|
203
|
-
message: `Downloaded ${file.path}`,
|
|
204
|
-
current_file: file.path,
|
|
205
|
-
file_progress: i + 1,
|
|
206
|
-
total_files: totalFiles,
|
|
207
|
-
downloaded_files: downloadedFiles.length,
|
|
208
|
-
downloaded_size: downloadedSize,
|
|
209
|
-
total_size: totalSize
|
|
210
|
-
};
|
|
211
|
-
}
|
|
212
|
-
catch (err) {
|
|
213
|
-
console.error(`Error downloading file ${file.path}: ${err}`);
|
|
214
|
-
yield {
|
|
215
|
-
status: "progress",
|
|
216
|
-
repo_id: repoId,
|
|
217
|
-
message: `Error downloading ${file.path}: ${err}`,
|
|
218
|
-
current_file: file.path,
|
|
219
|
-
error_file: file.path
|
|
220
|
-
};
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
yield {
|
|
224
|
-
status: "completed",
|
|
225
|
-
repo_id: repoId,
|
|
226
|
-
message: `Successfully downloaded ${downloadedFiles.length}/${totalFiles} files for ${repoId}`,
|
|
227
|
-
downloaded_files: downloadedFiles.length,
|
|
228
|
-
total_files: totalFiles,
|
|
229
|
-
total_size: totalSize,
|
|
230
|
-
downloaded_size: downloadedSize
|
|
231
|
-
};
|
|
232
|
-
}
|
|
233
|
-
catch (err) {
|
|
234
|
-
console.error(`Error in HF model download ${repoId}: ${err}`);
|
|
235
|
-
yield {
|
|
236
|
-
status: "error",
|
|
237
|
-
repo_id: repoId,
|
|
238
|
-
error: String(err),
|
|
239
|
-
message: `Error downloading ${repoId}: ${err}`
|
|
240
|
-
};
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
// ── Standalone streaming functions ─────────────────────────
|
|
245
|
-
/**
|
|
246
|
-
* Stream Ollama model download progress.
|
|
247
|
-
*/
|
|
248
|
-
export async function* streamOllamaModelPull(modelName, ollama) {
|
|
249
|
-
try {
|
|
250
|
-
console.info(`Starting Ollama model pull: ${modelName}`);
|
|
251
|
-
yield {
|
|
252
|
-
status: "starting",
|
|
253
|
-
model: modelName,
|
|
254
|
-
message: `Starting download of ${modelName}`
|
|
255
|
-
};
|
|
256
|
-
for await (const chunk of ollama.pull(modelName)) {
|
|
257
|
-
yield chunk;
|
|
258
|
-
}
|
|
259
|
-
yield {
|
|
260
|
-
status: "completed",
|
|
261
|
-
model: modelName,
|
|
262
|
-
message: `Successfully downloaded ${modelName}`
|
|
263
|
-
};
|
|
264
|
-
}
|
|
265
|
-
catch (err) {
|
|
266
|
-
console.error(`Error pulling Ollama model ${modelName}: ${err}`);
|
|
267
|
-
yield {
|
|
268
|
-
status: "error",
|
|
269
|
-
model: modelName,
|
|
270
|
-
error: String(err)
|
|
271
|
-
};
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
/**
|
|
275
|
-
* Stream HuggingFace model download progress using AdminDownloadManager.
|
|
276
|
-
*/
|
|
277
|
-
export async function* streamHFModelDownload(hub, options) {
|
|
278
|
-
const manager = await AdminDownloadManager.create(hub, {
|
|
279
|
-
userId: options.userId,
|
|
280
|
-
getSecret: options.getSecret
|
|
281
|
-
});
|
|
282
|
-
yield* manager.downloadWithProgress(options);
|
|
283
|
-
}
|
|
284
|
-
/**
|
|
285
|
-
* Download HuggingFace model with optional streaming.
|
|
286
|
-
* When `stream` is false, only the final progress update is yielded.
|
|
287
|
-
*/
|
|
288
|
-
export async function* downloadHFModel(hub, options) {
|
|
289
|
-
const { repoId, stream = true } = options;
|
|
290
|
-
if (!repoId) {
|
|
291
|
-
throw new Error("repoId is required for HuggingFace download");
|
|
292
|
-
}
|
|
293
|
-
if (stream) {
|
|
294
|
-
yield* streamHFModelDownload(hub, options);
|
|
295
|
-
}
|
|
296
|
-
else {
|
|
297
|
-
const manager = await AdminDownloadManager.create(hub, {
|
|
298
|
-
userId: options.userId,
|
|
299
|
-
getSecret: options.getSecret
|
|
300
|
-
});
|
|
301
|
-
let finalResult = null;
|
|
302
|
-
for await (const update of manager.downloadWithProgress(options)) {
|
|
303
|
-
finalResult = update;
|
|
304
|
-
}
|
|
305
|
-
if (finalResult) {
|
|
306
|
-
yield finalResult;
|
|
307
|
-
}
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
/**
|
|
311
|
-
* Download Ollama model with optional streaming.
|
|
312
|
-
*/
|
|
313
|
-
export async function* downloadOllamaModel(ollama, modelName, stream = true) {
|
|
314
|
-
if (!modelName) {
|
|
315
|
-
throw new Error("modelName is required for Ollama download");
|
|
316
|
-
}
|
|
317
|
-
if (stream) {
|
|
318
|
-
yield* streamOllamaModelPull(modelName, ollama);
|
|
319
|
-
}
|
|
320
|
-
else {
|
|
321
|
-
try {
|
|
322
|
-
// For non-streaming, consume the full stream but only yield completion
|
|
323
|
-
for await (const _chunk of ollama.pull(modelName)) {
|
|
324
|
-
// consume stream
|
|
325
|
-
}
|
|
326
|
-
yield {
|
|
327
|
-
status: "completed",
|
|
328
|
-
model: modelName,
|
|
329
|
-
message: `Successfully downloaded ${modelName}`
|
|
330
|
-
};
|
|
331
|
-
}
|
|
332
|
-
catch (err) {
|
|
333
|
-
console.error(`Error downloading Ollama model ${modelName}: ${err}`);
|
|
334
|
-
yield {
|
|
335
|
-
status: "error",
|
|
336
|
-
model: modelName,
|
|
337
|
-
error: String(err)
|
|
338
|
-
};
|
|
339
|
-
}
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
/**
|
|
343
|
-
* Scan HuggingFace cache directory.
|
|
344
|
-
*/
|
|
345
|
-
export async function* scanHFCache(hub, cacheDir) {
|
|
346
|
-
try {
|
|
347
|
-
const cacheInfo = hub.scanCache(cacheDir);
|
|
348
|
-
yield { status: "completed", cache_info: cacheInfo };
|
|
349
|
-
}
|
|
350
|
-
catch (err) {
|
|
351
|
-
console.error(`Error scanning cache: ${err}`);
|
|
352
|
-
yield { status: "error", error: String(err) };
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
/**
|
|
356
|
-
* Delete a HuggingFace model from cache.
|
|
357
|
-
*/
|
|
358
|
-
export async function* deleteHFModel(hub, repoId) {
|
|
359
|
-
if (!repoId) {
|
|
360
|
-
throw new Error("repoId is required for HuggingFace model deletion");
|
|
361
|
-
}
|
|
362
|
-
try {
|
|
363
|
-
await hub.deleteCachedModel(repoId);
|
|
364
|
-
yield {
|
|
365
|
-
status: "completed",
|
|
366
|
-
repo_id: repoId,
|
|
367
|
-
message: `Successfully deleted ${repoId}`
|
|
368
|
-
};
|
|
369
|
-
}
|
|
370
|
-
catch (err) {
|
|
371
|
-
console.error(`Error deleting HF model ${repoId}: ${err}`);
|
|
372
|
-
yield { status: "error", repo_id: repoId, error: String(err) };
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
// ── Cache size calculation ─────────────────────────────────
|
|
376
|
-
/**
|
|
377
|
-
* Recursively calculate total size of files in a directory.
|
|
378
|
-
*/
|
|
379
|
-
function calculateCacheSizeSync(cacheDir) {
|
|
380
|
-
let totalSize = 0;
|
|
381
|
-
let error = null;
|
|
382
|
-
try {
|
|
383
|
-
if (fs.existsSync(cacheDir)) {
|
|
384
|
-
const walk = (dir) => {
|
|
385
|
-
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
386
|
-
for (const entry of entries) {
|
|
387
|
-
const fullPath = path.join(dir, entry.name);
|
|
388
|
-
if (entry.isDirectory()) {
|
|
389
|
-
walk(fullPath);
|
|
390
|
-
}
|
|
391
|
-
else if (entry.isFile()) {
|
|
392
|
-
try {
|
|
393
|
-
const stat = fs.statSync(fullPath);
|
|
394
|
-
totalSize += stat.size;
|
|
395
|
-
}
|
|
396
|
-
catch {
|
|
397
|
-
// Skip files we can't stat
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
};
|
|
402
|
-
walk(cacheDir);
|
|
403
|
-
}
|
|
404
|
-
}
|
|
405
|
-
catch (err) {
|
|
406
|
-
error = String(err);
|
|
407
|
-
}
|
|
408
|
-
return { totalSize, error };
|
|
409
|
-
}
|
|
410
|
-
/**
|
|
411
|
-
* Calculate total cache size, yielding a single result.
|
|
412
|
-
*/
|
|
413
|
-
export async function* calculateCacheSize(cacheDir = "/app/.cache/huggingface/hub") {
|
|
414
|
-
try {
|
|
415
|
-
const { totalSize, error } = calculateCacheSizeSync(cacheDir);
|
|
416
|
-
if (error) {
|
|
417
|
-
yield { status: "error", cache_dir: cacheDir, error };
|
|
418
|
-
return;
|
|
419
|
-
}
|
|
420
|
-
const sizeGb = totalSize / 1024 ** 3;
|
|
421
|
-
yield {
|
|
422
|
-
success: true,
|
|
423
|
-
cache_dir: cacheDir,
|
|
424
|
-
total_size_bytes: totalSize,
|
|
425
|
-
size_gb: Math.round(sizeGb * 100) / 100
|
|
426
|
-
};
|
|
427
|
-
}
|
|
428
|
-
catch (err) {
|
|
429
|
-
console.error(`Error calculating cache size: ${err}`);
|
|
430
|
-
yield { status: "error", cache_dir: cacheDir, error: String(err) };
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
|
-
//# sourceMappingURL=admin-operations.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"admin-operations.js","sourceRoot":"","sources":["../src/admin-operations.ts"],"names":[],"mappings":"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"}
|