Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
add cron to update and scrap
Browse files- package-lock.json +109 -0
- package.json +3 -0
- server.js +31 -1
- src/routes/api/models/+server.ts +38 -0
- src/routes/api/scrap-models/+server.ts +13 -11
package-lock.json
CHANGED
@@ -18,9 +18,12 @@
|
|
18 |
"cookie": "^0.6.0",
|
19 |
"cors": "^2.8.5",
|
20 |
"desm": "^1.3.1",
|
|
|
21 |
"express": "^4.18.2",
|
22 |
"js-cookie": "^3.0.5",
|
23 |
"moment": "^2.30.1",
|
|
|
|
|
24 |
"svelte-infinite-scroll": "^2.0.1"
|
25 |
},
|
26 |
"devDependencies": {
|
@@ -3801,6 +3804,14 @@
|
|
3801 |
"node": ">=4"
|
3802 |
}
|
3803 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3804 |
"node_modules/debug": {
|
3805 |
"version": "4.3.4",
|
3806 |
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
|
@@ -3933,6 +3944,17 @@
|
|
3933 |
"node": ">=6.0.0"
|
3934 |
}
|
3935 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3936 |
"node_modules/ee-first": {
|
3937 |
"version": "1.1.1",
|
3938 |
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
@@ -4380,6 +4402,28 @@
|
|
4380 |
"reusify": "^1.0.4"
|
4381 |
}
|
4382 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4383 |
"node_modules/file-entry-cache": {
|
4384 |
"version": "6.0.1",
|
4385 |
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
|
@@ -4478,6 +4522,17 @@
|
|
4478 |
"is-callable": "^1.1.3"
|
4479 |
}
|
4480 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4481 |
"node_modules/forwarded": {
|
4482 |
"version": "0.2.0",
|
4483 |
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
|
@@ -5335,6 +5390,52 @@
|
|
5335 |
"node": ">= 0.6"
|
5336 |
}
|
5337 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5338 |
"node_modules/node-releases": {
|
5339 |
"version": "2.0.14",
|
5340 |
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
|
@@ -6995,6 +7096,14 @@
|
|
6995 |
}
|
6996 |
}
|
6997 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6998 |
"node_modules/which": {
|
6999 |
"version": "2.0.2",
|
7000 |
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
|
|
18 |
"cookie": "^0.6.0",
|
19 |
"cors": "^2.8.5",
|
20 |
"desm": "^1.3.1",
|
21 |
+
"dotenv": "^16.4.1",
|
22 |
"express": "^4.18.2",
|
23 |
"js-cookie": "^3.0.5",
|
24 |
"moment": "^2.30.1",
|
25 |
+
"node-cron": "^3.0.3",
|
26 |
+
"node-fetch": "^3.3.2",
|
27 |
"svelte-infinite-scroll": "^2.0.1"
|
28 |
},
|
29 |
"devDependencies": {
|
|
|
3804 |
"node": ">=4"
|
3805 |
}
|
3806 |
},
|
3807 |
+
"node_modules/data-uri-to-buffer": {
|
3808 |
+
"version": "4.0.1",
|
3809 |
+
"resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz",
|
3810 |
+
"integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==",
|
3811 |
+
"engines": {
|
3812 |
+
"node": ">= 12"
|
3813 |
+
}
|
3814 |
+
},
|
3815 |
"node_modules/debug": {
|
3816 |
"version": "4.3.4",
|
3817 |
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
|
|
|
3944 |
"node": ">=6.0.0"
|
3945 |
}
|
3946 |
},
|
3947 |
+
"node_modules/dotenv": {
|
3948 |
+
"version": "16.4.1",
|
3949 |
+
"resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.1.tgz",
|
3950 |
+
"integrity": "sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==",
|
3951 |
+
"engines": {
|
3952 |
+
"node": ">=12"
|
3953 |
+
},
|
3954 |
+
"funding": {
|
3955 |
+
"url": "https://github.com/motdotla/dotenv?sponsor=1"
|
3956 |
+
}
|
3957 |
+
},
|
3958 |
"node_modules/ee-first": {
|
3959 |
"version": "1.1.1",
|
3960 |
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
|
|
|
4402 |
"reusify": "^1.0.4"
|
4403 |
}
|
4404 |
},
|
4405 |
+
"node_modules/fetch-blob": {
|
4406 |
+
"version": "3.2.0",
|
4407 |
+
"resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz",
|
4408 |
+
"integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==",
|
4409 |
+
"funding": [
|
4410 |
+
{
|
4411 |
+
"type": "github",
|
4412 |
+
"url": "https://github.com/sponsors/jimmywarting"
|
4413 |
+
},
|
4414 |
+
{
|
4415 |
+
"type": "paypal",
|
4416 |
+
"url": "https://paypal.me/jimmywarting"
|
4417 |
+
}
|
4418 |
+
],
|
4419 |
+
"dependencies": {
|
4420 |
+
"node-domexception": "^1.0.0",
|
4421 |
+
"web-streams-polyfill": "^3.0.3"
|
4422 |
+
},
|
4423 |
+
"engines": {
|
4424 |
+
"node": "^12.20 || >= 14.13"
|
4425 |
+
}
|
4426 |
+
},
|
4427 |
"node_modules/file-entry-cache": {
|
4428 |
"version": "6.0.1",
|
4429 |
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
|
|
|
4522 |
"is-callable": "^1.1.3"
|
4523 |
}
|
4524 |
},
|
4525 |
+
"node_modules/formdata-polyfill": {
|
4526 |
+
"version": "4.0.10",
|
4527 |
+
"resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz",
|
4528 |
+
"integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==",
|
4529 |
+
"dependencies": {
|
4530 |
+
"fetch-blob": "^3.1.2"
|
4531 |
+
},
|
4532 |
+
"engines": {
|
4533 |
+
"node": ">=12.20.0"
|
4534 |
+
}
|
4535 |
+
},
|
4536 |
"node_modules/forwarded": {
|
4537 |
"version": "0.2.0",
|
4538 |
"resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
|
|
|
5390 |
"node": ">= 0.6"
|
5391 |
}
|
5392 |
},
|
5393 |
+
"node_modules/node-cron": {
|
5394 |
+
"version": "3.0.3",
|
5395 |
+
"resolved": "https://registry.npmjs.org/node-cron/-/node-cron-3.0.3.tgz",
|
5396 |
+
"integrity": "sha512-dOal67//nohNgYWb+nWmg5dkFdIwDm8EpeGYMekPMrngV3637lqnX0lbUcCtgibHTz6SEz7DAIjKvKDFYCnO1A==",
|
5397 |
+
"dependencies": {
|
5398 |
+
"uuid": "8.3.2"
|
5399 |
+
},
|
5400 |
+
"engines": {
|
5401 |
+
"node": ">=6.0.0"
|
5402 |
+
}
|
5403 |
+
},
|
5404 |
+
"node_modules/node-domexception": {
|
5405 |
+
"version": "1.0.0",
|
5406 |
+
"resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
|
5407 |
+
"integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
|
5408 |
+
"funding": [
|
5409 |
+
{
|
5410 |
+
"type": "github",
|
5411 |
+
"url": "https://github.com/sponsors/jimmywarting"
|
5412 |
+
},
|
5413 |
+
{
|
5414 |
+
"type": "github",
|
5415 |
+
"url": "https://paypal.me/jimmywarting"
|
5416 |
+
}
|
5417 |
+
],
|
5418 |
+
"engines": {
|
5419 |
+
"node": ">=10.5.0"
|
5420 |
+
}
|
5421 |
+
},
|
5422 |
+
"node_modules/node-fetch": {
|
5423 |
+
"version": "3.3.2",
|
5424 |
+
"resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz",
|
5425 |
+
"integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==",
|
5426 |
+
"dependencies": {
|
5427 |
+
"data-uri-to-buffer": "^4.0.0",
|
5428 |
+
"fetch-blob": "^3.1.4",
|
5429 |
+
"formdata-polyfill": "^4.0.10"
|
5430 |
+
},
|
5431 |
+
"engines": {
|
5432 |
+
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
|
5433 |
+
},
|
5434 |
+
"funding": {
|
5435 |
+
"type": "opencollective",
|
5436 |
+
"url": "https://opencollective.com/node-fetch"
|
5437 |
+
}
|
5438 |
+
},
|
5439 |
"node_modules/node-releases": {
|
5440 |
"version": "2.0.14",
|
5441 |
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
|
|
|
7096 |
}
|
7097 |
}
|
7098 |
},
|
7099 |
+
"node_modules/web-streams-polyfill": {
|
7100 |
+
"version": "3.3.2",
|
7101 |
+
"resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.2.tgz",
|
7102 |
+
"integrity": "sha512-3pRGuxRF5gpuZc0W+EpwQRmCD7gRqcDOMt688KmdlDAgAyaB1XlN0zq2njfDNm44XVdIouE7pZ6GzbdyH47uIQ==",
|
7103 |
+
"engines": {
|
7104 |
+
"node": ">= 8"
|
7105 |
+
}
|
7106 |
+
},
|
7107 |
"node_modules/which": {
|
7108 |
"version": "2.0.2",
|
7109 |
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
package.json
CHANGED
@@ -51,9 +51,12 @@
|
|
51 |
"cookie": "^0.6.0",
|
52 |
"cors": "^2.8.5",
|
53 |
"desm": "^1.3.1",
|
|
|
54 |
"express": "^4.18.2",
|
55 |
"js-cookie": "^3.0.5",
|
56 |
"moment": "^2.30.1",
|
|
|
|
|
57 |
"svelte-infinite-scroll": "^2.0.1"
|
58 |
}
|
59 |
}
|
|
|
51 |
"cookie": "^0.6.0",
|
52 |
"cors": "^2.8.5",
|
53 |
"desm": "^1.3.1",
|
54 |
+
"dotenv": "^16.4.1",
|
55 |
"express": "^4.18.2",
|
56 |
"js-cookie": "^3.0.5",
|
57 |
"moment": "^2.30.1",
|
58 |
+
"node-cron": "^3.0.3",
|
59 |
+
"node-fetch": "^3.3.2",
|
60 |
"svelte-infinite-scroll": "^2.0.1"
|
61 |
}
|
62 |
}
|
server.js
CHANGED
@@ -1,5 +1,10 @@
|
|
1 |
import { handler } from './build/handler.js';
|
2 |
import express from 'express';
|
|
|
|
|
|
|
|
|
|
|
3 |
|
4 |
const app = express();
|
5 |
|
@@ -11,4 +16,29 @@ app.use(handler);
|
|
11 |
|
12 |
app.listen(3000, () => {
|
13 |
console.log('listening on port 3000');
|
14 |
-
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
import { handler } from './build/handler.js';
|
2 |
import express from 'express';
|
3 |
+
import cron from 'node-cron';
|
4 |
+
import fetch from 'node-fetch';
|
5 |
+
import dotenv from 'dotenv';
|
6 |
+
|
7 |
+
dotenv.config();
|
8 |
|
9 |
const app = express();
|
10 |
|
|
|
16 |
|
17 |
app.listen(3000, () => {
|
18 |
console.log('listening on port 3000');
|
19 |
+
});
|
20 |
+
|
21 |
+
cron.schedule("0 * * * *", async () => {
|
22 |
+
const request = await fetch(`${process.env.SPACE_HOST}/api/scrap-models`, {
|
23 |
+
method: 'POST',
|
24 |
+
headers: {
|
25 |
+
'Content-Type': 'application/json',
|
26 |
+
'x-hf-token': process.env.SECRET_HF_TOKEN
|
27 |
+
},
|
28 |
+
});
|
29 |
+
const response = await request.json();
|
30 |
+
console.info(response?.message)
|
31 |
+
});
|
32 |
+
|
33 |
+
cron.schedule("0 0 * * *", async () => {
|
34 |
+
const request = await fetch(`${process.env.SPACE_HOST}/api/models`, {
|
35 |
+
method: 'PATCH',
|
36 |
+
headers: {
|
37 |
+
'Content-Type': 'application/json',
|
38 |
+
'x-hf-token': process.env.SECRET_HF_TOKEN
|
39 |
+
},
|
40 |
+
});
|
41 |
+
const response = await request.json();
|
42 |
+
console.info(response?.message)
|
43 |
+
});
|
44 |
+
|
src/routes/api/models/+server.ts
CHANGED
@@ -49,3 +49,41 @@ export async function GET(request : RequestEvent) {
|
|
49 |
total_items: total_reposId
|
50 |
})
|
51 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
49 |
total_items: total_reposId
|
50 |
})
|
51 |
}
|
52 |
+
|
53 |
+
export async function PATCH({ request } : RequestEvent) {
|
54 |
+
const headers = Object.fromEntries(request.headers.entries());
|
55 |
+
|
56 |
+
if (headers["x-hf-token"] !== process.env.SECRET_HF_TOKEN) {
|
57 |
+
return Response.json({
|
58 |
+
message: "Wrong castle fam :^)"
|
59 |
+
}, { status: 401 });
|
60 |
+
}
|
61 |
+
|
62 |
+
const models = await prisma.model.findMany({
|
63 |
+
where: {
|
64 |
+
isPublic: true,
|
65 |
+
}
|
66 |
+
})
|
67 |
+
|
68 |
+
let total_updates = 0;
|
69 |
+
|
70 |
+
for (const model of models) {
|
71 |
+
const response = await fetch(`https://huggingface.co/api/models/${model.id}`)
|
72 |
+
const hf_model = await response.json();
|
73 |
+
|
74 |
+
await prisma.model.update({
|
75 |
+
where: {
|
76 |
+
id: model.id
|
77 |
+
},
|
78 |
+
data: {
|
79 |
+
likes: hf_model.likes,
|
80 |
+
downloads: hf_model.downloads,
|
81 |
+
}
|
82 |
+
})
|
83 |
+
total_updates++
|
84 |
+
}
|
85 |
+
|
86 |
+
return json({
|
87 |
+
message: `Updated ${total_updates} models`
|
88 |
+
})
|
89 |
+
}
|
src/routes/api/scrap-models/+server.ts
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
/** @type {import('./$types').RequestHandler} */
|
2 |
|
3 |
import { json } from '@sveltejs/kit';
|
4 |
-
|
5 |
import prisma from '$lib/prisma';
|
6 |
|
7 |
export async function POST({ request }) {
|
@@ -13,15 +13,20 @@ export async function POST({ request }) {
|
|
13 |
}, { status: 401 });
|
14 |
}
|
15 |
|
16 |
-
const
|
17 |
-
const
|
18 |
-
|
19 |
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
20 |
let index = 0;
|
21 |
-
|
|
|
|
|
22 |
if (index % 50 === 0) {
|
23 |
await new Promise(resolve => setTimeout(resolve, 2000));
|
24 |
}
|
|
|
|
|
|
|
|
|
25 |
|
26 |
const hasImages = model?.siblings?.filter((sibling: Record<string, string>) => sibling?.rfilename.endsWith(".png") || sibling?.rfilename.endsWith(".jpeg") || sibling?.rfilename.endsWith(".jpg"))
|
27 |
if (hasImages.length > 0) {
|
@@ -52,16 +57,13 @@ export async function POST({ request }) {
|
|
52 |
image: model.image,
|
53 |
likes: model.likes,
|
54 |
downloads: model.downloads,
|
55 |
-
isPublic:
|
56 |
}
|
57 |
}).catch(() => {})
|
58 |
-
|
59 |
-
index++
|
60 |
}
|
61 |
|
62 |
-
const total_items = await prisma.model.count()
|
63 |
-
|
64 |
return json({
|
65 |
-
message: `Successfully added ${
|
66 |
})
|
67 |
}
|
|
|
1 |
/** @type {import('./$types').RequestHandler} */
|
2 |
|
3 |
import { json } from '@sveltejs/kit';
|
4 |
+
import moment from 'moment';
|
5 |
import prisma from '$lib/prisma';
|
6 |
|
7 |
export async function POST({ request }) {
|
|
|
13 |
}, { status: 401 });
|
14 |
}
|
15 |
|
16 |
+
const response_models = await fetch(`https://huggingface.co/api/models?limit=200&filter=lora%2Cdiffusers&sort=createdAt&full=true&config=true`)
|
17 |
+
const new_models = await response_models.json();
|
|
|
18 |
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
19 |
let index = 0;
|
20 |
+
let model_saved = 0;
|
21 |
+
|
22 |
+
for (const model of new_models) {
|
23 |
if (index % 50 === 0) {
|
24 |
await new Promise(resolve => setTimeout(resolve, 2000));
|
25 |
}
|
26 |
+
index++
|
27 |
+
if (moment(model.createdAt).isBefore(moment().subtract(1, "hour"))) {
|
28 |
+
continue;
|
29 |
+
}
|
30 |
|
31 |
const hasImages = model?.siblings?.filter((sibling: Record<string, string>) => sibling?.rfilename.endsWith(".png") || sibling?.rfilename.endsWith(".jpeg") || sibling?.rfilename.endsWith(".jpg"))
|
32 |
if (hasImages.length > 0) {
|
|
|
57 |
image: model.image,
|
58 |
likes: model.likes,
|
59 |
downloads: model.downloads,
|
60 |
+
isPublic: false,
|
61 |
}
|
62 |
}).catch(() => {})
|
63 |
+
model_saved++
|
|
|
64 |
}
|
65 |
|
|
|
|
|
66 |
return json({
|
67 |
+
message: `Successfully added ${model_saved} models`,
|
68 |
})
|
69 |
}
|