File size: 2,460 Bytes
eb29a95
17aecfb
8fce765
 
98b0aa6
 
 
 
8fce765
 
 
 
 
 
b0186cb
8fce765
 
 
98b0aa6
b34e9b1
 
1c0590e
b34e9b1
db9bd2d
 
 
 
 
 
 
 
 
d9ecfe6
 
17aecfb
 
d9ecfe6
f3dac82
d9ecfe6
17aecfb
eb29a95
17aecfb
 
db9bd2d
f3ad218
1c0590e
17aecfb
 
b1a4d81
 
8fce765
b1a4d81
eb29a95
b1a4d81
 
 
b34e9b1
98b0aa6
 
17aecfb
98b0aa6
 
9fd8477
 
 
 
 
 
 
 
 
 
db9bd2d
 
9fd8477
 
 
db9bd2d
9fd8477
 
 
 
 
db9bd2d
 
 
9fd8477
 
db9bd2d
 
 
 
9fd8477
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import { json, type RequestEvent } from '@sveltejs/kit';
import prisma from '$lib/prisma';

import { tokenIsAvailable } from '$lib/utils';

/** @type {import('./$types').RequestHandler} */

export async function GET(request : RequestEvent) {
  const token = request.cookies.get('hf_access_token')
  let IS_ADMIN = !!token

  if (token) {
    const user = await tokenIsAvailable(token)
    if (user) {
      IS_ADMIN = process?.env?.SECRET_HF_ADMIN ? process?.env?.SECRET_HF_ADMIN.includes(user.sub) : false
    }
  }

  const page = parseInt(request.url.searchParams.get('page') || '0')
  const filter = request.url.searchParams.get('filter') || 'hotest'
  const search = request.url.searchParams.get('search') || ''
  const limit = parseInt(request.url.searchParams.get('limit') || '20')

  const orderBy: Record<string, string> = {}
  if (filter === 'hotest') {
    orderBy['likes7d'] = 'desc'
  } else if (filter === 'likes') {
    orderBy['likes'] = 'desc'
  } else {
    orderBy['createdAt'] = 'desc'
  }

  const only_not_public = filter === 'staff_only';

  const cards = await prisma.model.findMany({
    where: {
      ...(
        !IS_ADMIN ? { isPublic: true } : only_not_public ? { isPublic: false } : {}
      ),
      OR: [
        { id: { contains: search } },
      ]
    },
    orderBy: orderBy,
    skip: page * limit,
    take: limit,
  })

  const total_reposId = await prisma.model.count({
    where: {
      ...(IS_ADMIN ? {} : { isPublic: true }),
      OR: [
        { id: { contains: search } },
      ]
    },
  })

  return json({
    cards,
    total_items: total_reposId
  })
}

export async function PATCH({ request } : RequestEvent) {
  const headers = Object.fromEntries(request.headers.entries());

  if (headers["x-hf-token"] !== process.env.SECRET_HF_TOKEN) {
    return Response.json({
      message: "Wrong castle fam :^)"
    }, { status: 401 });
  }

  const hf_request = await fetch(`https://huggingface.co/api/models?limit=10000&filter=lora%2Cdiffusers&sort=likes7d`)
  const hf_models = await hf_request.json();

  let total_updates = 0;

  for (const model of hf_models) {
    await prisma.model.update({
      where: {
        id: model.id
      },
      data: {
        likes: model.likes,
        downloads: model.downloads,
        likes7d: model.likes7d,
      }
    })
    .then(() => {
      total_updates++
    })
    .catch(() => {})
  }

  return json({
    message: `Updated ${total_updates} models`
  })
}