vincelwt commited on
Commit
4ffd659
·
unverified ·
0 Parent(s):

initial commit

Browse files
.dockerignore ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ Dockerfile
2
+ .dockerignore
3
+ node_modules
4
+ npm-debug.log
5
+ README.md
6
+ .next
7
+ .git
.gitignore ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2
+
3
+ # dependencies
4
+ /node_modules
5
+ /.pnp
6
+ .pnp.js
7
+
8
+ # testing
9
+ /coverage
10
+
11
+ # next.js
12
+ /.next/
13
+ /out/
14
+
15
+ # production
16
+ /build
17
+
18
+ # misc
19
+ .DS_Store
20
+ *.pem
21
+
22
+ # debug
23
+ npm-debug.log*
24
+ yarn-debug.log*
25
+ yarn-error.log*
26
+
27
+ # local env files
28
+ .env*.local
29
+
30
+ # vercel
31
+ .vercel
32
+
33
+ # typescript
34
+ *.tsbuildinfo
35
+ next-env.d.ts
Dockerfile ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM node:18-alpine AS base
2
+
3
+ # Install dependencies only when needed
4
+ FROM base AS deps
5
+ # Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
6
+ RUN apk add --no-cache libc6-compat
7
+ WORKDIR /app
8
+
9
+ # Install dependencies based on the preferred package manager
10
+ COPY package.json yarn.lock* package-lock.json* pnpm-lock.yaml* ./
11
+ RUN \
12
+ if [ -f yarn.lock ]; then yarn --frozen-lockfile; \
13
+ elif [ -f package-lock.json ]; then npm ci; \
14
+ elif [ -f pnpm-lock.yaml ]; then yarn global add pnpm && pnpm i --frozen-lockfile; \
15
+ else echo "Lockfile not found." && exit 1; \
16
+ fi
17
+
18
+
19
+ # Rebuild the source code only when needed
20
+ FROM base AS builder
21
+ WORKDIR /app
22
+ COPY --from=deps /app/node_modules ./node_modules
23
+ COPY . .
24
+
25
+ # Next.js collects completely anonymous telemetry data about general usage.
26
+ # Learn more here: https://nextjs.org/telemetry
27
+ # Uncomment the following line in case you want to disable telemetry during the build.
28
+ # ENV NEXT_TELEMETRY_DISABLED 1
29
+
30
+ RUN yarn build
31
+
32
+ # If using npm comment out above and use below instead
33
+ # RUN npm run build
34
+
35
+ # Production image, copy all the files and run next
36
+ FROM base AS runner
37
+ WORKDIR /app
38
+
39
+ ENV NODE_ENV production
40
+ # Uncomment the following line in case you want to disable telemetry during runtime.
41
+ # ENV NEXT_TELEMETRY_DISABLED 1
42
+
43
+ RUN addgroup --system --gid 1001 nodejs
44
+ RUN adduser --system --uid 1001 nextjs
45
+
46
+ COPY --from=builder /app/public ./public
47
+
48
+ # Set the correct permission for prerender cache
49
+ RUN mkdir .next
50
+ RUN chown nextjs:nodejs .next
51
+
52
+ # Automatically leverage output traces to reduce image size
53
+ # https://nextjs.org/docs/advanced-features/output-file-tracing
54
+ COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
55
+ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
56
+
57
+ USER nextjs
58
+
59
+ EXPOSE 3000
60
+
61
+ ENV PORT 3000
62
+ # set hostname to localhost
63
+ ENV HOSTNAME "0.0.0.0"
64
+
65
+ CMD ["node", "server.js"]
README.md ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ ## LLM Benchmarks
2
+
3
+ TODO: write README
jsconfig.json ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ {
2
+ "compilerOptions": {
3
+ "paths": {
4
+ "@/*": ["./*"]
5
+ }
6
+ }
7
+ }
next.config.js ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ /** @type {import('next').NextConfig} */
2
+ const nextConfig = {
3
+ reactStrictMode: true,
4
+ }
5
+
6
+ module.exports = nextConfig
package-lock.json ADDED
@@ -0,0 +1,1712 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "benchmarks",
3
+ "version": "0.1.0",
4
+ "lockfileVersion": 3,
5
+ "requires": true,
6
+ "packages": {
7
+ "": {
8
+ "name": "benchmarks",
9
+ "version": "0.1.0",
10
+ "dependencies": {
11
+ "next": "13.4.19",
12
+ "next-plausible": "^3.11.1",
13
+ "openai": "^4.5.0",
14
+ "react": "18.2.0",
15
+ "react-dom": "18.2.0",
16
+ "sqlite": "^5.0.1",
17
+ "sqlite3": "^5.1.6"
18
+ }
19
+ },
20
+ "node_modules/@gar/promisify": {
21
+ "version": "1.1.3",
22
+ "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz",
23
+ "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==",
24
+ "optional": true
25
+ },
26
+ "node_modules/@mapbox/node-pre-gyp": {
27
+ "version": "1.0.11",
28
+ "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz",
29
+ "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==",
30
+ "dependencies": {
31
+ "detect-libc": "^2.0.0",
32
+ "https-proxy-agent": "^5.0.0",
33
+ "make-dir": "^3.1.0",
34
+ "node-fetch": "^2.6.7",
35
+ "nopt": "^5.0.0",
36
+ "npmlog": "^5.0.1",
37
+ "rimraf": "^3.0.2",
38
+ "semver": "^7.3.5",
39
+ "tar": "^6.1.11"
40
+ },
41
+ "bin": {
42
+ "node-pre-gyp": "bin/node-pre-gyp"
43
+ }
44
+ },
45
+ "node_modules/@next/env": {
46
+ "version": "13.4.19",
47
+ "resolved": "https://registry.npmjs.org/@next/env/-/env-13.4.19.tgz",
48
+ "integrity": "sha512-FsAT5x0jF2kkhNkKkukhsyYOrRqtSxrEhfliniIq0bwWbuXLgyt3Gv0Ml+b91XwjwArmuP7NxCiGd++GGKdNMQ=="
49
+ },
50
+ "node_modules/@next/swc-darwin-arm64": {
51
+ "version": "13.4.19",
52
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.4.19.tgz",
53
+ "integrity": "sha512-vv1qrjXeGbuF2mOkhkdxMDtv9np7W4mcBtaDnHU+yJG+bBwa6rYsYSCI/9Xm5+TuF5SbZbrWO6G1NfTh1TMjvQ==",
54
+ "cpu": [
55
+ "arm64"
56
+ ],
57
+ "optional": true,
58
+ "os": [
59
+ "darwin"
60
+ ],
61
+ "engines": {
62
+ "node": ">= 10"
63
+ }
64
+ },
65
+ "node_modules/@next/swc-darwin-x64": {
66
+ "version": "13.4.19",
67
+ "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.4.19.tgz",
68
+ "integrity": "sha512-jyzO6wwYhx6F+7gD8ddZfuqO4TtpJdw3wyOduR4fxTUCm3aLw7YmHGYNjS0xRSYGAkLpBkH1E0RcelyId6lNsw==",
69
+ "cpu": [
70
+ "x64"
71
+ ],
72
+ "optional": true,
73
+ "os": [
74
+ "darwin"
75
+ ],
76
+ "engines": {
77
+ "node": ">= 10"
78
+ }
79
+ },
80
+ "node_modules/@next/swc-linux-arm64-gnu": {
81
+ "version": "13.4.19",
82
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.4.19.tgz",
83
+ "integrity": "sha512-vdlnIlaAEh6H+G6HrKZB9c2zJKnpPVKnA6LBwjwT2BTjxI7e0Hx30+FoWCgi50e+YO49p6oPOtesP9mXDRiiUg==",
84
+ "cpu": [
85
+ "arm64"
86
+ ],
87
+ "optional": true,
88
+ "os": [
89
+ "linux"
90
+ ],
91
+ "engines": {
92
+ "node": ">= 10"
93
+ }
94
+ },
95
+ "node_modules/@next/swc-linux-arm64-musl": {
96
+ "version": "13.4.19",
97
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.4.19.tgz",
98
+ "integrity": "sha512-aU0HkH2XPgxqrbNRBFb3si9Ahu/CpaR5RPmN2s9GiM9qJCiBBlZtRTiEca+DC+xRPyCThTtWYgxjWHgU7ZkyvA==",
99
+ "cpu": [
100
+ "arm64"
101
+ ],
102
+ "optional": true,
103
+ "os": [
104
+ "linux"
105
+ ],
106
+ "engines": {
107
+ "node": ">= 10"
108
+ }
109
+ },
110
+ "node_modules/@next/swc-linux-x64-gnu": {
111
+ "version": "13.4.19",
112
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.4.19.tgz",
113
+ "integrity": "sha512-htwOEagMa/CXNykFFeAHHvMJeqZfNQEoQvHfsA4wgg5QqGNqD5soeCer4oGlCol6NGUxknrQO6VEustcv+Md+g==",
114
+ "cpu": [
115
+ "x64"
116
+ ],
117
+ "optional": true,
118
+ "os": [
119
+ "linux"
120
+ ],
121
+ "engines": {
122
+ "node": ">= 10"
123
+ }
124
+ },
125
+ "node_modules/@next/swc-linux-x64-musl": {
126
+ "version": "13.4.19",
127
+ "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.4.19.tgz",
128
+ "integrity": "sha512-4Gj4vvtbK1JH8ApWTT214b3GwUh9EKKQjY41hH/t+u55Knxi/0wesMzwQRhppK6Ddalhu0TEttbiJ+wRcoEj5Q==",
129
+ "cpu": [
130
+ "x64"
131
+ ],
132
+ "optional": true,
133
+ "os": [
134
+ "linux"
135
+ ],
136
+ "engines": {
137
+ "node": ">= 10"
138
+ }
139
+ },
140
+ "node_modules/@next/swc-win32-arm64-msvc": {
141
+ "version": "13.4.19",
142
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.4.19.tgz",
143
+ "integrity": "sha512-bUfDevQK4NsIAHXs3/JNgnvEY+LRyneDN788W2NYiRIIzmILjba7LaQTfihuFawZDhRtkYCv3JDC3B4TwnmRJw==",
144
+ "cpu": [
145
+ "arm64"
146
+ ],
147
+ "optional": true,
148
+ "os": [
149
+ "win32"
150
+ ],
151
+ "engines": {
152
+ "node": ">= 10"
153
+ }
154
+ },
155
+ "node_modules/@next/swc-win32-ia32-msvc": {
156
+ "version": "13.4.19",
157
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.4.19.tgz",
158
+ "integrity": "sha512-Y5kikILFAr81LYIFaw6j/NrOtmiM4Sf3GtOc0pn50ez2GCkr+oejYuKGcwAwq3jiTKuzF6OF4iT2INPoxRycEA==",
159
+ "cpu": [
160
+ "ia32"
161
+ ],
162
+ "optional": true,
163
+ "os": [
164
+ "win32"
165
+ ],
166
+ "engines": {
167
+ "node": ">= 10"
168
+ }
169
+ },
170
+ "node_modules/@next/swc-win32-x64-msvc": {
171
+ "version": "13.4.19",
172
+ "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.4.19.tgz",
173
+ "integrity": "sha512-YzA78jBDXMYiINdPdJJwGgPNT3YqBNNGhsthsDoWHL9p24tEJn9ViQf/ZqTbwSpX/RrkPupLfuuTH2sf73JBAw==",
174
+ "cpu": [
175
+ "x64"
176
+ ],
177
+ "optional": true,
178
+ "os": [
179
+ "win32"
180
+ ],
181
+ "engines": {
182
+ "node": ">= 10"
183
+ }
184
+ },
185
+ "node_modules/@npmcli/fs": {
186
+ "version": "1.1.1",
187
+ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz",
188
+ "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==",
189
+ "optional": true,
190
+ "dependencies": {
191
+ "@gar/promisify": "^1.0.1",
192
+ "semver": "^7.3.5"
193
+ }
194
+ },
195
+ "node_modules/@npmcli/move-file": {
196
+ "version": "1.1.2",
197
+ "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz",
198
+ "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==",
199
+ "deprecated": "This functionality has been moved to @npmcli/fs",
200
+ "optional": true,
201
+ "dependencies": {
202
+ "mkdirp": "^1.0.4",
203
+ "rimraf": "^3.0.2"
204
+ },
205
+ "engines": {
206
+ "node": ">=10"
207
+ }
208
+ },
209
+ "node_modules/@swc/helpers": {
210
+ "version": "0.5.1",
211
+ "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.1.tgz",
212
+ "integrity": "sha512-sJ902EfIzn1Fa+qYmjdQqh8tPsoxyBz+8yBKC2HKUxyezKJFwPGOn7pv4WY6QuQW//ySQi5lJjA/ZT9sNWWNTg==",
213
+ "dependencies": {
214
+ "tslib": "^2.4.0"
215
+ }
216
+ },
217
+ "node_modules/@tootallnate/once": {
218
+ "version": "1.1.2",
219
+ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz",
220
+ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==",
221
+ "optional": true,
222
+ "engines": {
223
+ "node": ">= 6"
224
+ }
225
+ },
226
+ "node_modules/@types/node": {
227
+ "version": "18.17.14",
228
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.14.tgz",
229
+ "integrity": "sha512-ZE/5aB73CyGqgQULkLG87N9GnyGe5TcQjv34pwS8tfBs1IkCh0ASM69mydb2znqd6v0eX+9Ytvk6oQRqu8T1Vw=="
230
+ },
231
+ "node_modules/@types/node-fetch": {
232
+ "version": "2.6.4",
233
+ "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.4.tgz",
234
+ "integrity": "sha512-1ZX9fcN4Rvkvgv4E6PAY5WXUFWFcRWxZa3EW83UjycOB9ljJCedb2CupIP4RZMEwF/M3eTcCihbBRgwtGbg5Rg==",
235
+ "dependencies": {
236
+ "@types/node": "*",
237
+ "form-data": "^3.0.0"
238
+ }
239
+ },
240
+ "node_modules/abbrev": {
241
+ "version": "1.1.1",
242
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
243
+ "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
244
+ },
245
+ "node_modules/abort-controller": {
246
+ "version": "3.0.0",
247
+ "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz",
248
+ "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==",
249
+ "dependencies": {
250
+ "event-target-shim": "^5.0.0"
251
+ },
252
+ "engines": {
253
+ "node": ">=6.5"
254
+ }
255
+ },
256
+ "node_modules/agent-base": {
257
+ "version": "6.0.2",
258
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
259
+ "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
260
+ "dependencies": {
261
+ "debug": "4"
262
+ },
263
+ "engines": {
264
+ "node": ">= 6.0.0"
265
+ }
266
+ },
267
+ "node_modules/agentkeepalive": {
268
+ "version": "4.5.0",
269
+ "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz",
270
+ "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==",
271
+ "dependencies": {
272
+ "humanize-ms": "^1.2.1"
273
+ },
274
+ "engines": {
275
+ "node": ">= 8.0.0"
276
+ }
277
+ },
278
+ "node_modules/aggregate-error": {
279
+ "version": "3.1.0",
280
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
281
+ "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
282
+ "optional": true,
283
+ "dependencies": {
284
+ "clean-stack": "^2.0.0",
285
+ "indent-string": "^4.0.0"
286
+ },
287
+ "engines": {
288
+ "node": ">=8"
289
+ }
290
+ },
291
+ "node_modules/ansi-regex": {
292
+ "version": "5.0.1",
293
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
294
+ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
295
+ "engines": {
296
+ "node": ">=8"
297
+ }
298
+ },
299
+ "node_modules/aproba": {
300
+ "version": "2.0.0",
301
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
302
+ "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ=="
303
+ },
304
+ "node_modules/are-we-there-yet": {
305
+ "version": "2.0.0",
306
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
307
+ "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
308
+ "dependencies": {
309
+ "delegates": "^1.0.0",
310
+ "readable-stream": "^3.6.0"
311
+ },
312
+ "engines": {
313
+ "node": ">=10"
314
+ }
315
+ },
316
+ "node_modules/asynckit": {
317
+ "version": "0.4.0",
318
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
319
+ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
320
+ },
321
+ "node_modules/balanced-match": {
322
+ "version": "1.0.2",
323
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
324
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
325
+ },
326
+ "node_modules/base-64": {
327
+ "version": "0.1.0",
328
+ "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz",
329
+ "integrity": "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA=="
330
+ },
331
+ "node_modules/brace-expansion": {
332
+ "version": "1.1.11",
333
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
334
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
335
+ "dependencies": {
336
+ "balanced-match": "^1.0.0",
337
+ "concat-map": "0.0.1"
338
+ }
339
+ },
340
+ "node_modules/busboy": {
341
+ "version": "1.6.0",
342
+ "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz",
343
+ "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==",
344
+ "dependencies": {
345
+ "streamsearch": "^1.1.0"
346
+ },
347
+ "engines": {
348
+ "node": ">=10.16.0"
349
+ }
350
+ },
351
+ "node_modules/cacache": {
352
+ "version": "15.3.0",
353
+ "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz",
354
+ "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==",
355
+ "optional": true,
356
+ "dependencies": {
357
+ "@npmcli/fs": "^1.0.0",
358
+ "@npmcli/move-file": "^1.0.1",
359
+ "chownr": "^2.0.0",
360
+ "fs-minipass": "^2.0.0",
361
+ "glob": "^7.1.4",
362
+ "infer-owner": "^1.0.4",
363
+ "lru-cache": "^6.0.0",
364
+ "minipass": "^3.1.1",
365
+ "minipass-collect": "^1.0.2",
366
+ "minipass-flush": "^1.0.5",
367
+ "minipass-pipeline": "^1.2.2",
368
+ "mkdirp": "^1.0.3",
369
+ "p-map": "^4.0.0",
370
+ "promise-inflight": "^1.0.1",
371
+ "rimraf": "^3.0.2",
372
+ "ssri": "^8.0.1",
373
+ "tar": "^6.0.2",
374
+ "unique-filename": "^1.1.1"
375
+ },
376
+ "engines": {
377
+ "node": ">= 10"
378
+ }
379
+ },
380
+ "node_modules/caniuse-lite": {
381
+ "version": "1.0.30001529",
382
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001529.tgz",
383
+ "integrity": "sha512-n2pUQYGAkrLG4QYj2desAh+NqsJpHbNmVZz87imptDdxLAtjxary7Df/psdfyDGmskJK/9Dt9cPnx5RZ3CU4Og==",
384
+ "funding": [
385
+ {
386
+ "type": "opencollective",
387
+ "url": "https://opencollective.com/browserslist"
388
+ },
389
+ {
390
+ "type": "tidelift",
391
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
392
+ },
393
+ {
394
+ "type": "github",
395
+ "url": "https://github.com/sponsors/ai"
396
+ }
397
+ ]
398
+ },
399
+ "node_modules/charenc": {
400
+ "version": "0.0.2",
401
+ "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz",
402
+ "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==",
403
+ "engines": {
404
+ "node": "*"
405
+ }
406
+ },
407
+ "node_modules/chownr": {
408
+ "version": "2.0.0",
409
+ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
410
+ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
411
+ "engines": {
412
+ "node": ">=10"
413
+ }
414
+ },
415
+ "node_modules/clean-stack": {
416
+ "version": "2.2.0",
417
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
418
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
419
+ "optional": true,
420
+ "engines": {
421
+ "node": ">=6"
422
+ }
423
+ },
424
+ "node_modules/client-only": {
425
+ "version": "0.0.1",
426
+ "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz",
427
+ "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA=="
428
+ },
429
+ "node_modules/color-support": {
430
+ "version": "1.1.3",
431
+ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
432
+ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
433
+ "bin": {
434
+ "color-support": "bin.js"
435
+ }
436
+ },
437
+ "node_modules/combined-stream": {
438
+ "version": "1.0.8",
439
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
440
+ "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
441
+ "dependencies": {
442
+ "delayed-stream": "~1.0.0"
443
+ },
444
+ "engines": {
445
+ "node": ">= 0.8"
446
+ }
447
+ },
448
+ "node_modules/concat-map": {
449
+ "version": "0.0.1",
450
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
451
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
452
+ },
453
+ "node_modules/console-control-strings": {
454
+ "version": "1.1.0",
455
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
456
+ "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ=="
457
+ },
458
+ "node_modules/crypt": {
459
+ "version": "0.0.2",
460
+ "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz",
461
+ "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==",
462
+ "engines": {
463
+ "node": "*"
464
+ }
465
+ },
466
+ "node_modules/debug": {
467
+ "version": "4.3.4",
468
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
469
+ "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
470
+ "dependencies": {
471
+ "ms": "2.1.2"
472
+ },
473
+ "engines": {
474
+ "node": ">=6.0"
475
+ },
476
+ "peerDependenciesMeta": {
477
+ "supports-color": {
478
+ "optional": true
479
+ }
480
+ }
481
+ },
482
+ "node_modules/delayed-stream": {
483
+ "version": "1.0.0",
484
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
485
+ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",
486
+ "engines": {
487
+ "node": ">=0.4.0"
488
+ }
489
+ },
490
+ "node_modules/delegates": {
491
+ "version": "1.0.0",
492
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
493
+ "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
494
+ },
495
+ "node_modules/detect-libc": {
496
+ "version": "2.0.2",
497
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz",
498
+ "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==",
499
+ "engines": {
500
+ "node": ">=8"
501
+ }
502
+ },
503
+ "node_modules/digest-fetch": {
504
+ "version": "1.3.0",
505
+ "resolved": "https://registry.npmjs.org/digest-fetch/-/digest-fetch-1.3.0.tgz",
506
+ "integrity": "sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==",
507
+ "dependencies": {
508
+ "base-64": "^0.1.0",
509
+ "md5": "^2.3.0"
510
+ }
511
+ },
512
+ "node_modules/emoji-regex": {
513
+ "version": "8.0.0",
514
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
515
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
516
+ },
517
+ "node_modules/encoding": {
518
+ "version": "0.1.13",
519
+ "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
520
+ "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
521
+ "optional": true,
522
+ "dependencies": {
523
+ "iconv-lite": "^0.6.2"
524
+ }
525
+ },
526
+ "node_modules/env-paths": {
527
+ "version": "2.2.1",
528
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
529
+ "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
530
+ "optional": true,
531
+ "engines": {
532
+ "node": ">=6"
533
+ }
534
+ },
535
+ "node_modules/err-code": {
536
+ "version": "2.0.3",
537
+ "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz",
538
+ "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==",
539
+ "optional": true
540
+ },
541
+ "node_modules/event-target-shim": {
542
+ "version": "5.0.1",
543
+ "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz",
544
+ "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==",
545
+ "engines": {
546
+ "node": ">=6"
547
+ }
548
+ },
549
+ "node_modules/form-data": {
550
+ "version": "3.0.1",
551
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
552
+ "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
553
+ "dependencies": {
554
+ "asynckit": "^0.4.0",
555
+ "combined-stream": "^1.0.8",
556
+ "mime-types": "^2.1.12"
557
+ },
558
+ "engines": {
559
+ "node": ">= 6"
560
+ }
561
+ },
562
+ "node_modules/form-data-encoder": {
563
+ "version": "1.7.2",
564
+ "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz",
565
+ "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A=="
566
+ },
567
+ "node_modules/formdata-node": {
568
+ "version": "4.4.1",
569
+ "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz",
570
+ "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==",
571
+ "dependencies": {
572
+ "node-domexception": "1.0.0",
573
+ "web-streams-polyfill": "4.0.0-beta.3"
574
+ },
575
+ "engines": {
576
+ "node": ">= 12.20"
577
+ }
578
+ },
579
+ "node_modules/fs-minipass": {
580
+ "version": "2.1.0",
581
+ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
582
+ "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
583
+ "dependencies": {
584
+ "minipass": "^3.0.0"
585
+ },
586
+ "engines": {
587
+ "node": ">= 8"
588
+ }
589
+ },
590
+ "node_modules/fs.realpath": {
591
+ "version": "1.0.0",
592
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
593
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
594
+ },
595
+ "node_modules/gauge": {
596
+ "version": "3.0.2",
597
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
598
+ "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
599
+ "dependencies": {
600
+ "aproba": "^1.0.3 || ^2.0.0",
601
+ "color-support": "^1.1.2",
602
+ "console-control-strings": "^1.0.0",
603
+ "has-unicode": "^2.0.1",
604
+ "object-assign": "^4.1.1",
605
+ "signal-exit": "^3.0.0",
606
+ "string-width": "^4.2.3",
607
+ "strip-ansi": "^6.0.1",
608
+ "wide-align": "^1.1.2"
609
+ },
610
+ "engines": {
611
+ "node": ">=10"
612
+ }
613
+ },
614
+ "node_modules/glob": {
615
+ "version": "7.2.3",
616
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
617
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
618
+ "dependencies": {
619
+ "fs.realpath": "^1.0.0",
620
+ "inflight": "^1.0.4",
621
+ "inherits": "2",
622
+ "minimatch": "^3.1.1",
623
+ "once": "^1.3.0",
624
+ "path-is-absolute": "^1.0.0"
625
+ },
626
+ "engines": {
627
+ "node": "*"
628
+ },
629
+ "funding": {
630
+ "url": "https://github.com/sponsors/isaacs"
631
+ }
632
+ },
633
+ "node_modules/glob-to-regexp": {
634
+ "version": "0.4.1",
635
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
636
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw=="
637
+ },
638
+ "node_modules/graceful-fs": {
639
+ "version": "4.2.11",
640
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
641
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
642
+ },
643
+ "node_modules/has-unicode": {
644
+ "version": "2.0.1",
645
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
646
+ "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ=="
647
+ },
648
+ "node_modules/http-cache-semantics": {
649
+ "version": "4.1.1",
650
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz",
651
+ "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==",
652
+ "optional": true
653
+ },
654
+ "node_modules/http-proxy-agent": {
655
+ "version": "4.0.1",
656
+ "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz",
657
+ "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==",
658
+ "optional": true,
659
+ "dependencies": {
660
+ "@tootallnate/once": "1",
661
+ "agent-base": "6",
662
+ "debug": "4"
663
+ },
664
+ "engines": {
665
+ "node": ">= 6"
666
+ }
667
+ },
668
+ "node_modules/https-proxy-agent": {
669
+ "version": "5.0.1",
670
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
671
+ "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
672
+ "dependencies": {
673
+ "agent-base": "6",
674
+ "debug": "4"
675
+ },
676
+ "engines": {
677
+ "node": ">= 6"
678
+ }
679
+ },
680
+ "node_modules/humanize-ms": {
681
+ "version": "1.2.1",
682
+ "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz",
683
+ "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==",
684
+ "dependencies": {
685
+ "ms": "^2.0.0"
686
+ }
687
+ },
688
+ "node_modules/iconv-lite": {
689
+ "version": "0.6.3",
690
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
691
+ "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
692
+ "optional": true,
693
+ "dependencies": {
694
+ "safer-buffer": ">= 2.1.2 < 3.0.0"
695
+ },
696
+ "engines": {
697
+ "node": ">=0.10.0"
698
+ }
699
+ },
700
+ "node_modules/imurmurhash": {
701
+ "version": "0.1.4",
702
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
703
+ "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
704
+ "optional": true,
705
+ "engines": {
706
+ "node": ">=0.8.19"
707
+ }
708
+ },
709
+ "node_modules/indent-string": {
710
+ "version": "4.0.0",
711
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
712
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
713
+ "optional": true,
714
+ "engines": {
715
+ "node": ">=8"
716
+ }
717
+ },
718
+ "node_modules/infer-owner": {
719
+ "version": "1.0.4",
720
+ "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz",
721
+ "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==",
722
+ "optional": true
723
+ },
724
+ "node_modules/inflight": {
725
+ "version": "1.0.6",
726
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
727
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
728
+ "dependencies": {
729
+ "once": "^1.3.0",
730
+ "wrappy": "1"
731
+ }
732
+ },
733
+ "node_modules/inherits": {
734
+ "version": "2.0.4",
735
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
736
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
737
+ },
738
+ "node_modules/ip": {
739
+ "version": "2.0.0",
740
+ "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
741
+ "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==",
742
+ "optional": true
743
+ },
744
+ "node_modules/is-buffer": {
745
+ "version": "1.1.6",
746
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
747
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
748
+ },
749
+ "node_modules/is-fullwidth-code-point": {
750
+ "version": "3.0.0",
751
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
752
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
753
+ "engines": {
754
+ "node": ">=8"
755
+ }
756
+ },
757
+ "node_modules/is-lambda": {
758
+ "version": "1.0.1",
759
+ "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz",
760
+ "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==",
761
+ "optional": true
762
+ },
763
+ "node_modules/isexe": {
764
+ "version": "2.0.0",
765
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
766
+ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
767
+ "optional": true
768
+ },
769
+ "node_modules/js-tokens": {
770
+ "version": "4.0.0",
771
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
772
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
773
+ },
774
+ "node_modules/loose-envify": {
775
+ "version": "1.4.0",
776
+ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
777
+ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
778
+ "dependencies": {
779
+ "js-tokens": "^3.0.0 || ^4.0.0"
780
+ },
781
+ "bin": {
782
+ "loose-envify": "cli.js"
783
+ }
784
+ },
785
+ "node_modules/lru-cache": {
786
+ "version": "6.0.0",
787
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
788
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
789
+ "dependencies": {
790
+ "yallist": "^4.0.0"
791
+ },
792
+ "engines": {
793
+ "node": ">=10"
794
+ }
795
+ },
796
+ "node_modules/make-dir": {
797
+ "version": "3.1.0",
798
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
799
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
800
+ "dependencies": {
801
+ "semver": "^6.0.0"
802
+ },
803
+ "engines": {
804
+ "node": ">=8"
805
+ },
806
+ "funding": {
807
+ "url": "https://github.com/sponsors/sindresorhus"
808
+ }
809
+ },
810
+ "node_modules/make-dir/node_modules/semver": {
811
+ "version": "6.3.1",
812
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
813
+ "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
814
+ "bin": {
815
+ "semver": "bin/semver.js"
816
+ }
817
+ },
818
+ "node_modules/make-fetch-happen": {
819
+ "version": "9.1.0",
820
+ "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz",
821
+ "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==",
822
+ "optional": true,
823
+ "dependencies": {
824
+ "agentkeepalive": "^4.1.3",
825
+ "cacache": "^15.2.0",
826
+ "http-cache-semantics": "^4.1.0",
827
+ "http-proxy-agent": "^4.0.1",
828
+ "https-proxy-agent": "^5.0.0",
829
+ "is-lambda": "^1.0.1",
830
+ "lru-cache": "^6.0.0",
831
+ "minipass": "^3.1.3",
832
+ "minipass-collect": "^1.0.2",
833
+ "minipass-fetch": "^1.3.2",
834
+ "minipass-flush": "^1.0.5",
835
+ "minipass-pipeline": "^1.2.4",
836
+ "negotiator": "^0.6.2",
837
+ "promise-retry": "^2.0.1",
838
+ "socks-proxy-agent": "^6.0.0",
839
+ "ssri": "^8.0.0"
840
+ },
841
+ "engines": {
842
+ "node": ">= 10"
843
+ }
844
+ },
845
+ "node_modules/md5": {
846
+ "version": "2.3.0",
847
+ "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz",
848
+ "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==",
849
+ "dependencies": {
850
+ "charenc": "0.0.2",
851
+ "crypt": "0.0.2",
852
+ "is-buffer": "~1.1.6"
853
+ }
854
+ },
855
+ "node_modules/mime-db": {
856
+ "version": "1.52.0",
857
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
858
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
859
+ "engines": {
860
+ "node": ">= 0.6"
861
+ }
862
+ },
863
+ "node_modules/mime-types": {
864
+ "version": "2.1.35",
865
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
866
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
867
+ "dependencies": {
868
+ "mime-db": "1.52.0"
869
+ },
870
+ "engines": {
871
+ "node": ">= 0.6"
872
+ }
873
+ },
874
+ "node_modules/minimatch": {
875
+ "version": "3.1.2",
876
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
877
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
878
+ "dependencies": {
879
+ "brace-expansion": "^1.1.7"
880
+ },
881
+ "engines": {
882
+ "node": "*"
883
+ }
884
+ },
885
+ "node_modules/minipass": {
886
+ "version": "3.3.6",
887
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
888
+ "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
889
+ "dependencies": {
890
+ "yallist": "^4.0.0"
891
+ },
892
+ "engines": {
893
+ "node": ">=8"
894
+ }
895
+ },
896
+ "node_modules/minipass-collect": {
897
+ "version": "1.0.2",
898
+ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz",
899
+ "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==",
900
+ "optional": true,
901
+ "dependencies": {
902
+ "minipass": "^3.0.0"
903
+ },
904
+ "engines": {
905
+ "node": ">= 8"
906
+ }
907
+ },
908
+ "node_modules/minipass-fetch": {
909
+ "version": "1.4.1",
910
+ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz",
911
+ "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==",
912
+ "optional": true,
913
+ "dependencies": {
914
+ "minipass": "^3.1.0",
915
+ "minipass-sized": "^1.0.3",
916
+ "minizlib": "^2.0.0"
917
+ },
918
+ "engines": {
919
+ "node": ">=8"
920
+ },
921
+ "optionalDependencies": {
922
+ "encoding": "^0.1.12"
923
+ }
924
+ },
925
+ "node_modules/minipass-flush": {
926
+ "version": "1.0.5",
927
+ "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz",
928
+ "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==",
929
+ "optional": true,
930
+ "dependencies": {
931
+ "minipass": "^3.0.0"
932
+ },
933
+ "engines": {
934
+ "node": ">= 8"
935
+ }
936
+ },
937
+ "node_modules/minipass-pipeline": {
938
+ "version": "1.2.4",
939
+ "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz",
940
+ "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==",
941
+ "optional": true,
942
+ "dependencies": {
943
+ "minipass": "^3.0.0"
944
+ },
945
+ "engines": {
946
+ "node": ">=8"
947
+ }
948
+ },
949
+ "node_modules/minipass-sized": {
950
+ "version": "1.0.3",
951
+ "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz",
952
+ "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==",
953
+ "optional": true,
954
+ "dependencies": {
955
+ "minipass": "^3.0.0"
956
+ },
957
+ "engines": {
958
+ "node": ">=8"
959
+ }
960
+ },
961
+ "node_modules/minizlib": {
962
+ "version": "2.1.2",
963
+ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
964
+ "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
965
+ "dependencies": {
966
+ "minipass": "^3.0.0",
967
+ "yallist": "^4.0.0"
968
+ },
969
+ "engines": {
970
+ "node": ">= 8"
971
+ }
972
+ },
973
+ "node_modules/mkdirp": {
974
+ "version": "1.0.4",
975
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
976
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
977
+ "bin": {
978
+ "mkdirp": "bin/cmd.js"
979
+ },
980
+ "engines": {
981
+ "node": ">=10"
982
+ }
983
+ },
984
+ "node_modules/ms": {
985
+ "version": "2.1.2",
986
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
987
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
988
+ },
989
+ "node_modules/nanoid": {
990
+ "version": "3.3.6",
991
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
992
+ "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
993
+ "funding": [
994
+ {
995
+ "type": "github",
996
+ "url": "https://github.com/sponsors/ai"
997
+ }
998
+ ],
999
+ "bin": {
1000
+ "nanoid": "bin/nanoid.cjs"
1001
+ },
1002
+ "engines": {
1003
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
1004
+ }
1005
+ },
1006
+ "node_modules/negotiator": {
1007
+ "version": "0.6.3",
1008
+ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
1009
+ "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
1010
+ "optional": true,
1011
+ "engines": {
1012
+ "node": ">= 0.6"
1013
+ }
1014
+ },
1015
+ "node_modules/next": {
1016
+ "version": "13.4.19",
1017
+ "resolved": "https://registry.npmjs.org/next/-/next-13.4.19.tgz",
1018
+ "integrity": "sha512-HuPSzzAbJ1T4BD8e0bs6B9C1kWQ6gv8ykZoRWs5AQoiIuqbGHHdQO7Ljuvg05Q0Z24E2ABozHe6FxDvI6HfyAw==",
1019
+ "dependencies": {
1020
+ "@next/env": "13.4.19",
1021
+ "@swc/helpers": "0.5.1",
1022
+ "busboy": "1.6.0",
1023
+ "caniuse-lite": "^1.0.30001406",
1024
+ "postcss": "8.4.14",
1025
+ "styled-jsx": "5.1.1",
1026
+ "watchpack": "2.4.0",
1027
+ "zod": "3.21.4"
1028
+ },
1029
+ "bin": {
1030
+ "next": "dist/bin/next"
1031
+ },
1032
+ "engines": {
1033
+ "node": ">=16.8.0"
1034
+ },
1035
+ "optionalDependencies": {
1036
+ "@next/swc-darwin-arm64": "13.4.19",
1037
+ "@next/swc-darwin-x64": "13.4.19",
1038
+ "@next/swc-linux-arm64-gnu": "13.4.19",
1039
+ "@next/swc-linux-arm64-musl": "13.4.19",
1040
+ "@next/swc-linux-x64-gnu": "13.4.19",
1041
+ "@next/swc-linux-x64-musl": "13.4.19",
1042
+ "@next/swc-win32-arm64-msvc": "13.4.19",
1043
+ "@next/swc-win32-ia32-msvc": "13.4.19",
1044
+ "@next/swc-win32-x64-msvc": "13.4.19"
1045
+ },
1046
+ "peerDependencies": {
1047
+ "@opentelemetry/api": "^1.1.0",
1048
+ "react": "^18.2.0",
1049
+ "react-dom": "^18.2.0",
1050
+ "sass": "^1.3.0"
1051
+ },
1052
+ "peerDependenciesMeta": {
1053
+ "@opentelemetry/api": {
1054
+ "optional": true
1055
+ },
1056
+ "sass": {
1057
+ "optional": true
1058
+ }
1059
+ }
1060
+ },
1061
+ "node_modules/next-plausible": {
1062
+ "version": "3.11.1",
1063
+ "resolved": "https://registry.npmjs.org/next-plausible/-/next-plausible-3.11.1.tgz",
1064
+ "integrity": "sha512-Gd+QU+XflVTx65yJ2cNZyrOQLrpz3uKjGLEG4ls+CIVqK3yjsVGCMsEWJcvv1LAeVfHUQtCyp1xyAltLn5Odcg==",
1065
+ "funding": {
1066
+ "url": "https://github.com/4lejandrito/next-plausible?sponsor=1"
1067
+ },
1068
+ "peerDependencies": {
1069
+ "next": "^11.1.0 || ^12.0.0 || ^13.0.0",
1070
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0",
1071
+ "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0"
1072
+ }
1073
+ },
1074
+ "node_modules/node-addon-api": {
1075
+ "version": "4.3.0",
1076
+ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz",
1077
+ "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ=="
1078
+ },
1079
+ "node_modules/node-domexception": {
1080
+ "version": "1.0.0",
1081
+ "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz",
1082
+ "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==",
1083
+ "funding": [
1084
+ {
1085
+ "type": "github",
1086
+ "url": "https://github.com/sponsors/jimmywarting"
1087
+ },
1088
+ {
1089
+ "type": "github",
1090
+ "url": "https://paypal.me/jimmywarting"
1091
+ }
1092
+ ],
1093
+ "engines": {
1094
+ "node": ">=10.5.0"
1095
+ }
1096
+ },
1097
+ "node_modules/node-fetch": {
1098
+ "version": "2.7.0",
1099
+ "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
1100
+ "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
1101
+ "dependencies": {
1102
+ "whatwg-url": "^5.0.0"
1103
+ },
1104
+ "engines": {
1105
+ "node": "4.x || >=6.0.0"
1106
+ },
1107
+ "peerDependencies": {
1108
+ "encoding": "^0.1.0"
1109
+ },
1110
+ "peerDependenciesMeta": {
1111
+ "encoding": {
1112
+ "optional": true
1113
+ }
1114
+ }
1115
+ },
1116
+ "node_modules/node-gyp": {
1117
+ "version": "8.4.1",
1118
+ "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz",
1119
+ "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==",
1120
+ "optional": true,
1121
+ "dependencies": {
1122
+ "env-paths": "^2.2.0",
1123
+ "glob": "^7.1.4",
1124
+ "graceful-fs": "^4.2.6",
1125
+ "make-fetch-happen": "^9.1.0",
1126
+ "nopt": "^5.0.0",
1127
+ "npmlog": "^6.0.0",
1128
+ "rimraf": "^3.0.2",
1129
+ "semver": "^7.3.5",
1130
+ "tar": "^6.1.2",
1131
+ "which": "^2.0.2"
1132
+ },
1133
+ "bin": {
1134
+ "node-gyp": "bin/node-gyp.js"
1135
+ },
1136
+ "engines": {
1137
+ "node": ">= 10.12.0"
1138
+ }
1139
+ },
1140
+ "node_modules/node-gyp/node_modules/are-we-there-yet": {
1141
+ "version": "3.0.1",
1142
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz",
1143
+ "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==",
1144
+ "optional": true,
1145
+ "dependencies": {
1146
+ "delegates": "^1.0.0",
1147
+ "readable-stream": "^3.6.0"
1148
+ },
1149
+ "engines": {
1150
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
1151
+ }
1152
+ },
1153
+ "node_modules/node-gyp/node_modules/gauge": {
1154
+ "version": "4.0.4",
1155
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz",
1156
+ "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==",
1157
+ "optional": true,
1158
+ "dependencies": {
1159
+ "aproba": "^1.0.3 || ^2.0.0",
1160
+ "color-support": "^1.1.3",
1161
+ "console-control-strings": "^1.1.0",
1162
+ "has-unicode": "^2.0.1",
1163
+ "signal-exit": "^3.0.7",
1164
+ "string-width": "^4.2.3",
1165
+ "strip-ansi": "^6.0.1",
1166
+ "wide-align": "^1.1.5"
1167
+ },
1168
+ "engines": {
1169
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
1170
+ }
1171
+ },
1172
+ "node_modules/node-gyp/node_modules/npmlog": {
1173
+ "version": "6.0.2",
1174
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz",
1175
+ "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==",
1176
+ "optional": true,
1177
+ "dependencies": {
1178
+ "are-we-there-yet": "^3.0.0",
1179
+ "console-control-strings": "^1.1.0",
1180
+ "gauge": "^4.0.3",
1181
+ "set-blocking": "^2.0.0"
1182
+ },
1183
+ "engines": {
1184
+ "node": "^12.13.0 || ^14.15.0 || >=16.0.0"
1185
+ }
1186
+ },
1187
+ "node_modules/nopt": {
1188
+ "version": "5.0.0",
1189
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
1190
+ "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
1191
+ "dependencies": {
1192
+ "abbrev": "1"
1193
+ },
1194
+ "bin": {
1195
+ "nopt": "bin/nopt.js"
1196
+ },
1197
+ "engines": {
1198
+ "node": ">=6"
1199
+ }
1200
+ },
1201
+ "node_modules/npmlog": {
1202
+ "version": "5.0.1",
1203
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
1204
+ "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
1205
+ "dependencies": {
1206
+ "are-we-there-yet": "^2.0.0",
1207
+ "console-control-strings": "^1.1.0",
1208
+ "gauge": "^3.0.0",
1209
+ "set-blocking": "^2.0.0"
1210
+ }
1211
+ },
1212
+ "node_modules/object-assign": {
1213
+ "version": "4.1.1",
1214
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1215
+ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
1216
+ "engines": {
1217
+ "node": ">=0.10.0"
1218
+ }
1219
+ },
1220
+ "node_modules/once": {
1221
+ "version": "1.4.0",
1222
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1223
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
1224
+ "dependencies": {
1225
+ "wrappy": "1"
1226
+ }
1227
+ },
1228
+ "node_modules/openai": {
1229
+ "version": "4.5.0",
1230
+ "resolved": "https://registry.npmjs.org/openai/-/openai-4.5.0.tgz",
1231
+ "integrity": "sha512-9cA5i6KpEAeLV8nZrVgOXqRmUWUIu4FV2oRKvSIwrA7Z5aMd4sXVOaqWAuRDhFFewirxhys8D6R5B2Drj1pKIQ==",
1232
+ "dependencies": {
1233
+ "@types/node": "^18.11.18",
1234
+ "@types/node-fetch": "^2.6.4",
1235
+ "abort-controller": "^3.0.0",
1236
+ "agentkeepalive": "^4.2.1",
1237
+ "digest-fetch": "^1.3.0",
1238
+ "form-data-encoder": "1.7.2",
1239
+ "formdata-node": "^4.3.2",
1240
+ "node-fetch": "^2.6.7"
1241
+ },
1242
+ "bin": {
1243
+ "openai": "bin/cli"
1244
+ }
1245
+ },
1246
+ "node_modules/p-map": {
1247
+ "version": "4.0.0",
1248
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
1249
+ "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
1250
+ "optional": true,
1251
+ "dependencies": {
1252
+ "aggregate-error": "^3.0.0"
1253
+ },
1254
+ "engines": {
1255
+ "node": ">=10"
1256
+ },
1257
+ "funding": {
1258
+ "url": "https://github.com/sponsors/sindresorhus"
1259
+ }
1260
+ },
1261
+ "node_modules/path-is-absolute": {
1262
+ "version": "1.0.1",
1263
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1264
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
1265
+ "engines": {
1266
+ "node": ">=0.10.0"
1267
+ }
1268
+ },
1269
+ "node_modules/picocolors": {
1270
+ "version": "1.0.0",
1271
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
1272
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ=="
1273
+ },
1274
+ "node_modules/postcss": {
1275
+ "version": "8.4.14",
1276
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz",
1277
+ "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==",
1278
+ "funding": [
1279
+ {
1280
+ "type": "opencollective",
1281
+ "url": "https://opencollective.com/postcss/"
1282
+ },
1283
+ {
1284
+ "type": "tidelift",
1285
+ "url": "https://tidelift.com/funding/github/npm/postcss"
1286
+ }
1287
+ ],
1288
+ "dependencies": {
1289
+ "nanoid": "^3.3.4",
1290
+ "picocolors": "^1.0.0",
1291
+ "source-map-js": "^1.0.2"
1292
+ },
1293
+ "engines": {
1294
+ "node": "^10 || ^12 || >=14"
1295
+ }
1296
+ },
1297
+ "node_modules/promise-inflight": {
1298
+ "version": "1.0.1",
1299
+ "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
1300
+ "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==",
1301
+ "optional": true
1302
+ },
1303
+ "node_modules/promise-retry": {
1304
+ "version": "2.0.1",
1305
+ "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz",
1306
+ "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==",
1307
+ "optional": true,
1308
+ "dependencies": {
1309
+ "err-code": "^2.0.2",
1310
+ "retry": "^0.12.0"
1311
+ },
1312
+ "engines": {
1313
+ "node": ">=10"
1314
+ }
1315
+ },
1316
+ "node_modules/react": {
1317
+ "version": "18.2.0",
1318
+ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
1319
+ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
1320
+ "dependencies": {
1321
+ "loose-envify": "^1.1.0"
1322
+ },
1323
+ "engines": {
1324
+ "node": ">=0.10.0"
1325
+ }
1326
+ },
1327
+ "node_modules/react-dom": {
1328
+ "version": "18.2.0",
1329
+ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
1330
+ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
1331
+ "dependencies": {
1332
+ "loose-envify": "^1.1.0",
1333
+ "scheduler": "^0.23.0"
1334
+ },
1335
+ "peerDependencies": {
1336
+ "react": "^18.2.0"
1337
+ }
1338
+ },
1339
+ "node_modules/readable-stream": {
1340
+ "version": "3.6.2",
1341
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
1342
+ "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
1343
+ "dependencies": {
1344
+ "inherits": "^2.0.3",
1345
+ "string_decoder": "^1.1.1",
1346
+ "util-deprecate": "^1.0.1"
1347
+ },
1348
+ "engines": {
1349
+ "node": ">= 6"
1350
+ }
1351
+ },
1352
+ "node_modules/retry": {
1353
+ "version": "0.12.0",
1354
+ "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz",
1355
+ "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==",
1356
+ "optional": true,
1357
+ "engines": {
1358
+ "node": ">= 4"
1359
+ }
1360
+ },
1361
+ "node_modules/rimraf": {
1362
+ "version": "3.0.2",
1363
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
1364
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
1365
+ "dependencies": {
1366
+ "glob": "^7.1.3"
1367
+ },
1368
+ "bin": {
1369
+ "rimraf": "bin.js"
1370
+ },
1371
+ "funding": {
1372
+ "url": "https://github.com/sponsors/isaacs"
1373
+ }
1374
+ },
1375
+ "node_modules/safe-buffer": {
1376
+ "version": "5.2.1",
1377
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1378
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
1379
+ "funding": [
1380
+ {
1381
+ "type": "github",
1382
+ "url": "https://github.com/sponsors/feross"
1383
+ },
1384
+ {
1385
+ "type": "patreon",
1386
+ "url": "https://www.patreon.com/feross"
1387
+ },
1388
+ {
1389
+ "type": "consulting",
1390
+ "url": "https://feross.org/support"
1391
+ }
1392
+ ]
1393
+ },
1394
+ "node_modules/safer-buffer": {
1395
+ "version": "2.1.2",
1396
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1397
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
1398
+ "optional": true
1399
+ },
1400
+ "node_modules/scheduler": {
1401
+ "version": "0.23.0",
1402
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
1403
+ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
1404
+ "dependencies": {
1405
+ "loose-envify": "^1.1.0"
1406
+ }
1407
+ },
1408
+ "node_modules/semver": {
1409
+ "version": "7.5.4",
1410
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
1411
+ "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
1412
+ "dependencies": {
1413
+ "lru-cache": "^6.0.0"
1414
+ },
1415
+ "bin": {
1416
+ "semver": "bin/semver.js"
1417
+ },
1418
+ "engines": {
1419
+ "node": ">=10"
1420
+ }
1421
+ },
1422
+ "node_modules/set-blocking": {
1423
+ "version": "2.0.0",
1424
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
1425
+ "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
1426
+ },
1427
+ "node_modules/signal-exit": {
1428
+ "version": "3.0.7",
1429
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
1430
+ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
1431
+ },
1432
+ "node_modules/smart-buffer": {
1433
+ "version": "4.2.0",
1434
+ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
1435
+ "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
1436
+ "optional": true,
1437
+ "engines": {
1438
+ "node": ">= 6.0.0",
1439
+ "npm": ">= 3.0.0"
1440
+ }
1441
+ },
1442
+ "node_modules/socks": {
1443
+ "version": "2.7.1",
1444
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
1445
+ "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
1446
+ "optional": true,
1447
+ "dependencies": {
1448
+ "ip": "^2.0.0",
1449
+ "smart-buffer": "^4.2.0"
1450
+ },
1451
+ "engines": {
1452
+ "node": ">= 10.13.0",
1453
+ "npm": ">= 3.0.0"
1454
+ }
1455
+ },
1456
+ "node_modules/socks-proxy-agent": {
1457
+ "version": "6.2.1",
1458
+ "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz",
1459
+ "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==",
1460
+ "optional": true,
1461
+ "dependencies": {
1462
+ "agent-base": "^6.0.2",
1463
+ "debug": "^4.3.3",
1464
+ "socks": "^2.6.2"
1465
+ },
1466
+ "engines": {
1467
+ "node": ">= 10"
1468
+ }
1469
+ },
1470
+ "node_modules/source-map-js": {
1471
+ "version": "1.0.2",
1472
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
1473
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
1474
+ "engines": {
1475
+ "node": ">=0.10.0"
1476
+ }
1477
+ },
1478
+ "node_modules/sqlite": {
1479
+ "version": "5.0.1",
1480
+ "resolved": "https://registry.npmjs.org/sqlite/-/sqlite-5.0.1.tgz",
1481
+ "integrity": "sha512-sRxbVwzNX9rvEPnxz9scNqi60KtfxBXMzzus5BI4+0nPtVkyEXyBwQ7JkM2M1CiVvEFw6s1vn2Z9/1DEdSpiaA=="
1482
+ },
1483
+ "node_modules/sqlite3": {
1484
+ "version": "5.1.6",
1485
+ "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.6.tgz",
1486
+ "integrity": "sha512-olYkWoKFVNSSSQNvxVUfjiVbz3YtBwTJj+mfV5zpHmqW3sELx2Cf4QCdirMelhM5Zh+KDVaKgQHqCxrqiWHybw==",
1487
+ "hasInstallScript": true,
1488
+ "dependencies": {
1489
+ "@mapbox/node-pre-gyp": "^1.0.0",
1490
+ "node-addon-api": "^4.2.0",
1491
+ "tar": "^6.1.11"
1492
+ },
1493
+ "optionalDependencies": {
1494
+ "node-gyp": "8.x"
1495
+ },
1496
+ "peerDependencies": {
1497
+ "node-gyp": "8.x"
1498
+ },
1499
+ "peerDependenciesMeta": {
1500
+ "node-gyp": {
1501
+ "optional": true
1502
+ }
1503
+ }
1504
+ },
1505
+ "node_modules/ssri": {
1506
+ "version": "8.0.1",
1507
+ "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz",
1508
+ "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==",
1509
+ "optional": true,
1510
+ "dependencies": {
1511
+ "minipass": "^3.1.1"
1512
+ },
1513
+ "engines": {
1514
+ "node": ">= 8"
1515
+ }
1516
+ },
1517
+ "node_modules/streamsearch": {
1518
+ "version": "1.1.0",
1519
+ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz",
1520
+ "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==",
1521
+ "engines": {
1522
+ "node": ">=10.0.0"
1523
+ }
1524
+ },
1525
+ "node_modules/string_decoder": {
1526
+ "version": "1.3.0",
1527
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
1528
+ "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
1529
+ "dependencies": {
1530
+ "safe-buffer": "~5.2.0"
1531
+ }
1532
+ },
1533
+ "node_modules/string-width": {
1534
+ "version": "4.2.3",
1535
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
1536
+ "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
1537
+ "dependencies": {
1538
+ "emoji-regex": "^8.0.0",
1539
+ "is-fullwidth-code-point": "^3.0.0",
1540
+ "strip-ansi": "^6.0.1"
1541
+ },
1542
+ "engines": {
1543
+ "node": ">=8"
1544
+ }
1545
+ },
1546
+ "node_modules/strip-ansi": {
1547
+ "version": "6.0.1",
1548
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
1549
+ "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
1550
+ "dependencies": {
1551
+ "ansi-regex": "^5.0.1"
1552
+ },
1553
+ "engines": {
1554
+ "node": ">=8"
1555
+ }
1556
+ },
1557
+ "node_modules/styled-jsx": {
1558
+ "version": "5.1.1",
1559
+ "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz",
1560
+ "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==",
1561
+ "dependencies": {
1562
+ "client-only": "0.0.1"
1563
+ },
1564
+ "engines": {
1565
+ "node": ">= 12.0.0"
1566
+ },
1567
+ "peerDependencies": {
1568
+ "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0"
1569
+ },
1570
+ "peerDependenciesMeta": {
1571
+ "@babel/core": {
1572
+ "optional": true
1573
+ },
1574
+ "babel-plugin-macros": {
1575
+ "optional": true
1576
+ }
1577
+ }
1578
+ },
1579
+ "node_modules/tar": {
1580
+ "version": "6.2.0",
1581
+ "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz",
1582
+ "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==",
1583
+ "dependencies": {
1584
+ "chownr": "^2.0.0",
1585
+ "fs-minipass": "^2.0.0",
1586
+ "minipass": "^5.0.0",
1587
+ "minizlib": "^2.1.1",
1588
+ "mkdirp": "^1.0.3",
1589
+ "yallist": "^4.0.0"
1590
+ },
1591
+ "engines": {
1592
+ "node": ">=10"
1593
+ }
1594
+ },
1595
+ "node_modules/tar/node_modules/minipass": {
1596
+ "version": "5.0.0",
1597
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz",
1598
+ "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==",
1599
+ "engines": {
1600
+ "node": ">=8"
1601
+ }
1602
+ },
1603
+ "node_modules/tr46": {
1604
+ "version": "0.0.3",
1605
+ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
1606
+ "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
1607
+ },
1608
+ "node_modules/tslib": {
1609
+ "version": "2.6.2",
1610
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz",
1611
+ "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q=="
1612
+ },
1613
+ "node_modules/unique-filename": {
1614
+ "version": "1.1.1",
1615
+ "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz",
1616
+ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==",
1617
+ "optional": true,
1618
+ "dependencies": {
1619
+ "unique-slug": "^2.0.0"
1620
+ }
1621
+ },
1622
+ "node_modules/unique-slug": {
1623
+ "version": "2.0.2",
1624
+ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz",
1625
+ "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==",
1626
+ "optional": true,
1627
+ "dependencies": {
1628
+ "imurmurhash": "^0.1.4"
1629
+ }
1630
+ },
1631
+ "node_modules/util-deprecate": {
1632
+ "version": "1.0.2",
1633
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1634
+ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
1635
+ },
1636
+ "node_modules/watchpack": {
1637
+ "version": "2.4.0",
1638
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
1639
+ "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
1640
+ "dependencies": {
1641
+ "glob-to-regexp": "^0.4.1",
1642
+ "graceful-fs": "^4.1.2"
1643
+ },
1644
+ "engines": {
1645
+ "node": ">=10.13.0"
1646
+ }
1647
+ },
1648
+ "node_modules/web-streams-polyfill": {
1649
+ "version": "4.0.0-beta.3",
1650
+ "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz",
1651
+ "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==",
1652
+ "engines": {
1653
+ "node": ">= 14"
1654
+ }
1655
+ },
1656
+ "node_modules/webidl-conversions": {
1657
+ "version": "3.0.1",
1658
+ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
1659
+ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
1660
+ },
1661
+ "node_modules/whatwg-url": {
1662
+ "version": "5.0.0",
1663
+ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
1664
+ "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
1665
+ "dependencies": {
1666
+ "tr46": "~0.0.3",
1667
+ "webidl-conversions": "^3.0.0"
1668
+ }
1669
+ },
1670
+ "node_modules/which": {
1671
+ "version": "2.0.2",
1672
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
1673
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
1674
+ "optional": true,
1675
+ "dependencies": {
1676
+ "isexe": "^2.0.0"
1677
+ },
1678
+ "bin": {
1679
+ "node-which": "bin/node-which"
1680
+ },
1681
+ "engines": {
1682
+ "node": ">= 8"
1683
+ }
1684
+ },
1685
+ "node_modules/wide-align": {
1686
+ "version": "1.1.5",
1687
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
1688
+ "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
1689
+ "dependencies": {
1690
+ "string-width": "^1.0.2 || 2 || 3 || 4"
1691
+ }
1692
+ },
1693
+ "node_modules/wrappy": {
1694
+ "version": "1.0.2",
1695
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1696
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
1697
+ },
1698
+ "node_modules/yallist": {
1699
+ "version": "4.0.0",
1700
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
1701
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
1702
+ },
1703
+ "node_modules/zod": {
1704
+ "version": "3.21.4",
1705
+ "resolved": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz",
1706
+ "integrity": "sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw==",
1707
+ "funding": {
1708
+ "url": "https://github.com/sponsors/colinhacks"
1709
+ }
1710
+ }
1711
+ }
1712
+ }
package.json ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "benchmarks",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "scripts": {
6
+ "dev": "next dev -p 3010",
7
+ "build": "next build",
8
+ "start": "next start",
9
+ "lint": "next lint"
10
+ },
11
+ "dependencies": {
12
+ "next": "13.4.19",
13
+ "next-plausible": "^3.11.1",
14
+ "openai": "^4.5.0",
15
+ "react": "18.2.0",
16
+ "react-dom": "18.2.0",
17
+ "sqlite": "^5.0.1",
18
+ "sqlite3": "^5.1.6"
19
+ },
20
+ "prettier": {
21
+ "semi": false
22
+ }
23
+ }
pages/[slug].js ADDED
@@ -0,0 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import getDB from "@/utils/getDB"
2
+ import Head from "next/head"
3
+ import Link from "next/link"
4
+
5
+ export const getStaticPaths = async () => {
6
+ const db = await getDB()
7
+
8
+ const prompts = await db.all(`SELECT * FROM prompts`)
9
+
10
+ return {
11
+ paths: prompts.map((prompt) => ({
12
+ params: { slug: prompt.slug },
13
+ })),
14
+ fallback: false,
15
+ }
16
+ }
17
+
18
+ export const getStaticProps = async (props) => {
19
+ const db = await getDB()
20
+
21
+ const slug = props.params.slug
22
+
23
+ const prompt = await db.get(`SELECT * FROM prompts WHERE slug = ?`, [slug])
24
+
25
+ // get results with their model (join)
26
+ const results = await db.all(
27
+ `SELECT * FROM results INNER JOIN models ON results.model = models.id WHERE prompt = ? ORDER BY models.name ASC`,
28
+ [prompt.id]
29
+ )
30
+
31
+ return { props: { prompt, results } }
32
+ }
33
+
34
+ export default function Prompt({ prompt, results }) {
35
+ return (
36
+ <>
37
+ <Head>
38
+ <title>LLM Benchmark</title>
39
+ <meta name="description" content={`Asking models: ${prompt.text}`} />
40
+ </Head>
41
+ <h3>Prompt asked:</h3>
42
+ <br />
43
+ <pre style={{ maxWidth: 800 }}>{prompt.text}</pre>
44
+ <br />
45
+ {prompt.note && <p>Note: {prompt.note}</p>}
46
+ <br />
47
+ <Link href="/">Back to home</Link>
48
+ <br />
49
+ <br />
50
+ <table>
51
+ <thead>
52
+ <tr>
53
+ <th>Model</th>
54
+ <th>Answer</th>
55
+ <th>Latency</th>
56
+ <th>Chars / s</th>
57
+ </tr>
58
+ </thead>
59
+ <tbody>
60
+ {results.map((result, i) => (
61
+ <tr key={i}>
62
+ <td>
63
+ <Link
64
+ href={`/model/${result.api_id
65
+ .split("/")
66
+ .pop()
67
+ .toLowerCase()}`}
68
+ >
69
+ {result.name}
70
+ </Link>
71
+ </td>
72
+ <td>
73
+ <pre>{result.result.trim()}</pre>
74
+ </td>
75
+ <td>{result.duration}ms</td>
76
+ <td>{result.rate}</td>
77
+ </tr>
78
+ ))}
79
+ </tbody>
80
+ </table>
81
+ <br />
82
+ <Link href="/">Back to home</Link>
83
+
84
+ <br />
85
+ <br />
86
+
87
+ <table style={{ maxWidth: 600 }}>
88
+ <th>
89
+ <p>
90
+ Edit: as this got popular, I added an email form to receive
91
+ notifications for future benchmark results:
92
+ </p>
93
+ <iframe
94
+ src="https://embeds.beehiiv.com/65bd6af1-2dea-417a-baf2-b65bc27e1610?slim=true"
95
+ height="52"
96
+ frameborder="0"
97
+ scrolling="no"
98
+ style={{
99
+ width: 400,
100
+ border: "none",
101
+ transform: "scale(0.8)",
102
+ transformOrigin: "left",
103
+ }}
104
+ ></iframe>
105
+ <br />
106
+ <small>(no spam, max 1 email per month)</small>
107
+ </th>
108
+ </table>
109
+ <br />
110
+ </>
111
+ )
112
+ }
pages/_app.js ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import PlausibleProvider from "next-plausible"
2
+
3
+ import "@/styles/globals.css"
4
+
5
+ export default function App({ Component, pageProps }) {
6
+ return (
7
+ <PlausibleProvider
8
+ domain="benchmarks.llmonitor.com"
9
+ scriptProps={{
10
+ src: "https://llmonitor.com/p/js/script.js",
11
+ // @ts-ignore
12
+ "data-api": "https://llmonitor.com/p/event",
13
+ }}
14
+ customDomain="benchmarks.llmonitor.com"
15
+ >
16
+ <Component {...pageProps} />
17
+ <footer>
18
+ <br />
19
+ <p>
20
+ Credit:{" "}
21
+ <a href="https://twitter.com/vincelwt" target="_blank">
22
+ @vincelwt
23
+ </a>
24
+ </p>
25
+
26
+ <a href="https://llmonitor.com" className="llmonitor" target="_blank">
27
+ by 📈 llmonitor
28
+ </a>
29
+ </footer>
30
+ </PlausibleProvider>
31
+ )
32
+ }
pages/_document.js ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import { Html, Head, Main, NextScript } from 'next/document'
2
+
3
+ export default function Document() {
4
+ return (
5
+ <Html lang="en">
6
+ <Head />
7
+ <body>
8
+ <Main />
9
+ <NextScript />
10
+ </body>
11
+ </Html>
12
+ )
13
+ }
pages/index.js ADDED
@@ -0,0 +1,179 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import getDB from "@/utils/getDB"
2
+ import Head from "next/head"
3
+ import Link from "next/link"
4
+ import { useRouter } from "next/router"
5
+ import { useEffect, useMemo, useState } from "react"
6
+
7
+ // import styles from '@/styles/Home.module.css'
8
+
9
+ export const getStaticProps = async () => {
10
+ const db = await getDB()
11
+
12
+ const prompts = await db.all(`SELECT * FROM prompts ORDER BY text ASC`)
13
+
14
+ // get all models that have at least 1 result
15
+ const models = await db.all(
16
+ `SELECT * FROM models WHERE id IN (SELECT DISTINCT model FROM results) ORDER BY name ASC`
17
+ )
18
+
19
+ return { props: { prompts, models } }
20
+ }
21
+
22
+ export default function Home({ prompts, models }) {
23
+ const router = useRouter()
24
+
25
+ const [viewBy, setViewBy] = useState(router.query.viewBy || "prompt")
26
+
27
+ const changeView = (viewBy) => {
28
+ router.push({ query: { viewBy } })
29
+ }
30
+
31
+ useEffect(() => {
32
+ if (router.query.viewBy) setViewBy(router.query.viewBy)
33
+ }, [router.query.viewBy])
34
+
35
+ const types = useMemo(() => {
36
+ return Array.from(new Set(prompts.map((p) => p.type)))
37
+ }, [prompts])
38
+
39
+ return (
40
+ <>
41
+ <Head>
42
+ <title>LLM Benchmarks</title>
43
+ <meta
44
+ name="description"
45
+ content="Human-readable benchmarks of 60+ open-source and proprietary LLMs."
46
+ />
47
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
48
+ </Head>
49
+ <main>
50
+ <h1>Asking 60+ LLMs a set of 20 questions</h1>
51
+ <br />
52
+ <p>
53
+ Benchmarks like HellaSwag are a bit too abstract for me to get a sense
54
+ of how well they perform in real-world workflows.
55
+ </p>
56
+ <br />
57
+
58
+ <p>
59
+ I had the idea of writing a script that asks prompts testing basic
60
+ reasoning, instruction following, and creativity on around 60 models
61
+ that I could get my hands on through inferences API.
62
+ </p>
63
+ <br />
64
+ <p>
65
+ The script stored all the answers in a SQLite database, and those are
66
+ the raw results.
67
+ </p>
68
+ <br />
69
+
70
+ <table style={{ maxWidth: 600 }}>
71
+ <th>
72
+ <p>
73
+ Edit: as this got popular, I added an email form to receive
74
+ notifications for future benchmark results:
75
+ </p>
76
+ <iframe
77
+ src="https://embeds.beehiiv.com/65bd6af1-2dea-417a-baf2-b65bc27e1610?slim=true"
78
+ height="52"
79
+ frameborder="0"
80
+ scrolling="no"
81
+ style={{
82
+ width: 400,
83
+ border: "none",
84
+ transform: "scale(0.8)",
85
+ transformOrigin: "left",
86
+ }}
87
+ ></iframe>
88
+ <br />
89
+ <small>(no spam, max 1 email per month)</small>
90
+ </th>
91
+ </table>
92
+ <br />
93
+ <br />
94
+ <p>
95
+ {`view: `}
96
+ <a href="#" onClick={() => changeView("prompt")}>
97
+ all prompts
98
+ </a>{" "}
99
+ /{" "}
100
+ <a href="#" onClick={() => changeView("model")}>
101
+ all models
102
+ </a>
103
+ </p>
104
+ <br />
105
+ {viewBy === "prompt" ? (
106
+ <>
107
+ {types.map((type, k) => (
108
+ <div key={k}>
109
+ <p>{type}:</p>
110
+ <br />
111
+ <ul>
112
+ {prompts
113
+ .filter((p) => p.type === type)
114
+ .map((prompt, i) => (
115
+ <li key={i}>
116
+ <pre style={{ maxWidth: 800 }}>
117
+ {prompt.text}
118
+ <br />
119
+ <br />
120
+ <Link href={`/${prompt.slug}`}>results</Link>
121
+ </pre>
122
+ </li>
123
+ ))}
124
+ </ul>
125
+ </div>
126
+ ))}
127
+ </>
128
+ ) : (
129
+ <ul>
130
+ {models.map((model, i) => (
131
+ <li key={i}>
132
+ {model.name} -{" "}
133
+ <Link
134
+ href={`/model/${model.api_id.split("/").pop().toLowerCase()}`}
135
+ >
136
+ results
137
+ </Link>
138
+ </li>
139
+ ))}
140
+ </ul>
141
+ )}
142
+ <br />
143
+ <br />
144
+ <h3>Notes</h3>
145
+ <br />
146
+ <ul>
147
+ <li>
148
+ I used a temperature of 0 and a max token limit of 240 for each test
149
+ (that's why a lot of answers are cropped). The rest are default
150
+ settings.
151
+ </li>
152
+ <li>
153
+ I made this with a mix of APIs from OpenRouter, TogetherAI, OpenAI,
154
+ Cohere, Aleph Alpha & AI21.
155
+ </li>
156
+ <li>
157
+ <b>This is imperfect.</b> I want to improve this by using better
158
+ stop sequences and prompt formatting tailored to each model. But
159
+ hopefully it can already make picking models a bit easier.
160
+ </li>
161
+ <li>
162
+ Ideas for the future: public votes to compute an ELO rating, compare
163
+ 2 models side by side, community-submitted prompts (open to
164
+ suggestions)
165
+ </li>
166
+ <li>
167
+ Prompt suggestions, feedback or say hi: vince [at] llmonitor.com
168
+ </li>
169
+ <li>
170
+ {`Shameless plug: I'm building an `}
171
+ <a href="https://github.com/llmonitor/llmonitor" target="_blank">
172
+ open-source observability tool for AI devs.
173
+ </a>
174
+ </li>
175
+ </ul>
176
+ </main>
177
+ </>
178
+ )
179
+ }
pages/model/[id].js ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import getDB from "@/utils/getDB"
2
+ import Head from "next/head"
3
+ import Link from "next/link"
4
+ import { useMemo } from "react"
5
+
6
+ export const getStaticPaths = async () => {
7
+ const db = await getDB()
8
+
9
+ const models = await db.all(`SELECT * FROM models`)
10
+
11
+ return {
12
+ paths: models.map((model) => ({
13
+ params: { id: model.api_id.split("/").pop().toLowerCase() },
14
+ })),
15
+ fallback: false,
16
+ }
17
+ }
18
+
19
+ export const getStaticProps = async (props) => {
20
+ const db = await getDB()
21
+
22
+ const { id } = props.params
23
+
24
+ console.log("id", id)
25
+
26
+ // where api_id contains the id (it's in lowercase)
27
+ const model = await db.get(`SELECT * FROM models WHERE api_id LIKE ?`, [
28
+ `%${id}%`,
29
+ ])
30
+
31
+ // get all results for this model, with their prompt (join)
32
+ const results = await db.all(
33
+ `SELECT * FROM results INNER JOIN prompts ON results.prompt = prompts.id WHERE model = ? ORDER BY prompts.text DESC`,
34
+ [model.id]
35
+ )
36
+
37
+ return { props: { results, model } }
38
+ }
39
+
40
+ export default function Prompt({ model, results }) {
41
+ const medianRate = useMemo(() => {
42
+ const rates = results.map((r) => r.rate)
43
+ const sorted = rates.sort((a, b) => a - b)
44
+ const mid = Math.floor(sorted.length / 2)
45
+ return sorted.length % 2 !== 0
46
+ ? sorted[mid]
47
+ : (sorted[mid - 1] + sorted[mid]) / 2
48
+ }, [results])
49
+
50
+ return (
51
+ <>
52
+ <Head>
53
+ <title>
54
+ {model.org} {model.name} benchmark across 20 prompts
55
+ </title>
56
+ <meta
57
+ name="description"
58
+ content={`Human-readable benchmark of ${model.org} ${model.name} across 20 prompts.`}
59
+ />
60
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
61
+ </Head>
62
+ <h3>
63
+ {model.org} {model.name}
64
+ </h3>
65
+ <p>Median output rate: {medianRate.toFixed(2)} chars / s</p>
66
+
67
+ <br />
68
+ <Link href="/">Back to home</Link>
69
+ <br />
70
+ <br />
71
+ <table>
72
+ <thead>
73
+ <tr>
74
+ <th>Prompt</th>
75
+ <th>Answer</th>
76
+ <th>Latency</th>
77
+ </tr>
78
+ </thead>
79
+ <tbody>
80
+ {results
81
+ .sort((a, b) => a.name > b.name)
82
+ .map((result) => (
83
+ <tr>
84
+ <td>
85
+ <pre>
86
+ {result.text}
87
+ <br />
88
+ <br />
89
+ <Link href={`/${result.slug}`}>all answers</Link>
90
+ </pre>
91
+ </td>
92
+ <td>
93
+ <pre>{result.result.trim()}</pre>
94
+ </td>
95
+ <td>{result.duration}ms</td>
96
+ </tr>
97
+ ))}
98
+ </tbody>
99
+ </table>
100
+ <br />
101
+ <Link href="/">Back to home</Link>
102
+ <style jsx>{`
103
+ th:nth-child(1) {
104
+ width: 30%;
105
+ }
106
+ `}</style>
107
+ </>
108
+ )
109
+ }
public/favicon.ico ADDED
public/next.svg ADDED
public/vercel.svg ADDED
run/.gitignore ADDED
@@ -0,0 +1,155 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ flagged/
2
+
3
+ # Byte-compiled / optimized / DLL files
4
+ __pycache__/
5
+ *.py[cod]
6
+ *$py.class
7
+
8
+ # C extensions
9
+ *.so
10
+
11
+ # Distribution / packaging
12
+ .Python
13
+ build/
14
+ develop-eggs/
15
+ dist/
16
+ downloads/
17
+ eggs/
18
+ .eggs/
19
+ lib/
20
+ lib64/
21
+ parts/
22
+ sdist/
23
+ var/
24
+ wheels/
25
+ share/python-wheels/
26
+ *.egg-info/
27
+ .installed.cfg
28
+ *.egg
29
+ MANIFEST
30
+
31
+ # PyInstaller
32
+ # Usually these files are written by a python script from a template
33
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
34
+ *.manifest
35
+ *.spec
36
+
37
+ # Installer logs
38
+ pip-log.txt
39
+ pip-delete-this-directory.txt
40
+
41
+ # Unit test / coverage reports
42
+ htmlcov/
43
+ .tox/
44
+ .nox/
45
+ .coverage
46
+ .coverage.*
47
+ .cache
48
+ nosetests.xml
49
+ coverage.xml
50
+ *.cover
51
+ *.py,cover
52
+ .hypothesis/
53
+ .pytest_cache/
54
+ cover/
55
+
56
+ # Translations
57
+ *.mo
58
+ *.pot
59
+
60
+ # Django stuff:
61
+ *.log
62
+ local_settings.py
63
+ db.sqlite3
64
+ db.sqlite3-journal
65
+
66
+ # Flask stuff:
67
+ instance/
68
+ .webassets-cache
69
+
70
+ # Scrapy stuff:
71
+ .scrapy
72
+
73
+ # Sphinx documentation
74
+ docs/_build/
75
+
76
+ # PyBuilder
77
+ .pybuilder/
78
+ target/
79
+
80
+ # Jupyter Notebook
81
+ .ipynb_checkpoints
82
+
83
+ # IPython
84
+ profile_default/
85
+ ipython_config.py
86
+
87
+ # pyenv
88
+ # For a library or package, you might want to ignore these files since the code is
89
+ # intended to run in multiple environments; otherwise, check them in:
90
+ # .python-version
91
+
92
+ # pipenv
93
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
94
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
95
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
96
+ # install all needed dependencies.
97
+ #Pipfile.lock
98
+
99
+ # poetry
100
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
101
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
102
+ # commonly ignored for libraries.
103
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
104
+ #poetry.lock
105
+
106
+ # pdm
107
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
108
+ #pdm.lock
109
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
110
+ # in version control.
111
+ # https://pdm.fming.dev/#use-with-ide
112
+ .pdm.toml
113
+
114
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
115
+ __pypackages__/
116
+
117
+ # Celery stuff
118
+ celerybeat-schedule
119
+ celerybeat.pid
120
+
121
+ # SageMath parsed files
122
+ *.sage.py
123
+
124
+ # Environments
125
+ .env
126
+ .venv
127
+ env/
128
+ venv/
129
+ ENV/
130
+ env.bak/
131
+ venv.bak/
132
+
133
+ # Spyder project settings
134
+ .spyderproject
135
+ .spyproject
136
+
137
+ # Rope project settings
138
+ .ropeproject
139
+
140
+ # mkdocs documentation
141
+ /site
142
+
143
+ # mypy
144
+ .mypy_cache/
145
+ .dmypy.json
146
+ dmypy.json
147
+
148
+ # Pyre type checker
149
+ .pyre/
150
+
151
+ # pytype static type analyzer
152
+ .pytype/
153
+
154
+ # Cython debug symbols
155
+ cython_debug/
run/database.db ADDED
Binary file (614 kB). View file
 
run/queriers.py ADDED
@@ -0,0 +1,136 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import openai
2
+ import os
3
+ import json
4
+ import requests
5
+ from dotenv import load_dotenv
6
+
7
+ load_dotenv()
8
+
9
+ TOGETHER_API_KEY = os.getenv('TOGETHER_API_KEY')
10
+ COHERE_API_KEY = os.getenv('COHERE_API_KEY')
11
+ AI21_API_KEY = os.getenv('AI21_API_KEY')
12
+ ALEPH_API_KEY = os.getenv('ALEPH_API_KEY')
13
+ OPEN_ROUTER_API_KEY = os.getenv('OPEN_ROUTER_API_KEY')
14
+ OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')
15
+
16
+ MAX_TOKENS = 300
17
+
18
+ def together(model, params):
19
+ def format_prompt(prompt, prompt_type):
20
+ if prompt_type == "language":
21
+ return f"Q: {prompt}\nA: "
22
+ if prompt_type == "code":
23
+ return f"# {prompt}"
24
+ if prompt_type == "chat":
25
+ return f"\n<human>: {prompt}\n<bot>: "
26
+
27
+ url = "https://api.together.xyz/inference"
28
+ headers = {
29
+ "Content-Type": "application/json",
30
+ "Authorization": f"Bearer {TOGETHER_API_KEY}",
31
+ }
32
+
33
+ data = {
34
+ "model": model['api_id'],
35
+ "prompt": format_prompt(params['text'], model['type']),
36
+ "stop": params['stop'] if model['type'] == "chat" else params.get('stop', None),
37
+ "temperature": 0,
38
+ "max_tokens": MAX_TOKENS,
39
+ }
40
+
41
+ response = requests.post(url, headers=headers, data=json.dumps(data))
42
+ result = response.json()
43
+
44
+ return result['output']['choices'][0]['text'].rstrip(params['stop'])
45
+
46
+ def cohere(model, params):
47
+ options = {
48
+ "method": "POST",
49
+ "headers": {
50
+ "accept": "application/json",
51
+ "content-type": "application/json",
52
+ "authorization": f"Bearer {COHERE_API_KEY}",
53
+ },
54
+ "body": json.dumps({
55
+ "max_tokens": MAX_TOKENS,
56
+ "truncate": "END",
57
+ "return_likelihoods": "NONE",
58
+ "prompt": params['text'],
59
+ "stop_sequences": [params['stop']] if params.get('stop') else [],
60
+ "model": model['api_id'],
61
+ "temperature": 0,
62
+ }),
63
+ }
64
+
65
+ response = requests.post("https://api.cohere.ai/v1/generate", headers=options['headers'], data=options['body'])
66
+ json_response = response.json()
67
+
68
+ return json_response['generations'][0]['text']
69
+
70
+ def openai_func(model, params):
71
+
72
+ openai.api_key = OPENAI_API_KEY
73
+
74
+ completion = openai.ChatCompletion.create(
75
+ model=model['api_id'],
76
+ messages=[{"role": "user", "content": params['text']}],
77
+ temperature=0,
78
+ max_tokens=MAX_TOKENS,
79
+ stop=[params['stop']] if params.get('stop') else []
80
+ )
81
+
82
+ return completion.choices[0].message.content
83
+
84
+ def ai21(model, params):
85
+ options = {
86
+ "headers": {
87
+ "accept": "application/json",
88
+ "content-type": "application/json",
89
+ "Authorization": f"Bearer {AI21_API_KEY}",
90
+ },
91
+ "body": json.dumps({
92
+ "prompt": params['text'],
93
+ "maxTokens": MAX_TOKENS,
94
+ "temperature": 0,
95
+ "stopSequences": [params['stop']] if params.get('stop') else [],
96
+ }),
97
+ }
98
+
99
+ response = requests.post(f"https://api.ai21.com/studio/v1/{model['api_id']}/complete", headers=options['headers'], data=options['body'])
100
+ json_response = response.json()
101
+ return json_response['completions'][0]['data']['text']
102
+
103
+ def openrouter(model, params):
104
+ openai.api_key = OPEN_ROUTER_API_KEY
105
+ openai.api_base ="https://openrouter.ai/api/v1"
106
+
107
+ completion = openai.ChatCompletion.create(
108
+ messages=[{"role": "user", "content": params['text']}],
109
+ temperature=0,
110
+ model=model['api_id'],
111
+ max_tokens=MAX_TOKENS,
112
+ headers={"HTTP-Referer": "https://benchmarks.llmonitor.com"},
113
+ stop=[params['stop']] if params.get('stop') else []
114
+ )
115
+
116
+ return completion.choices[0].message.content
117
+
118
+ def alephalpha(model, params):
119
+ options = {
120
+ "headers": {
121
+ "Content-Type": "application/json",
122
+ "Accept": "application/json",
123
+ "Authorization": f"Bearer {ALEPH_API_KEY}",
124
+ },
125
+ "body": json.dumps({
126
+ "model": model['api_id'],
127
+ "prompt": params['text'],
128
+ "maximum_tokens": MAX_TOKENS,
129
+ "stop_sequences": [params['stop']] if params.get('stop') else [],
130
+ }),
131
+ }
132
+
133
+ response = requests.post("https://api.aleph-alpha.com/complete", headers=options['headers'], data=options['body'])
134
+ json_response = response.json()
135
+ return json_response['completions'][0]['completion']
136
+
run/requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ openai
2
+ pandas
3
+ requests
4
+ python-dotenv
5
+ gradio
run/run.py ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import sqlite3
2
+ import time
3
+
4
+ from queriers import together, cohere, openai_func, openrouter, ai21, alephalpha
5
+
6
+ db = sqlite3.connect("./database.db")
7
+ db.row_factory = sqlite3.Row
8
+
9
+ cursor = db.cursor()
10
+
11
+ def remove_end(s, suffix):
12
+ if s.endswith(suffix):
13
+ return s[:-len(suffix)]
14
+ return s
15
+
16
+
17
+ # Fetch models
18
+ models = cursor.execute("SELECT * FROM models").fetchall()
19
+ models = [dict(model) for model in models]
20
+
21
+ # Fetch prompts
22
+ prompts = cursor.execute("SELECT * FROM prompts").fetchall()
23
+ prompts = [dict(prompt) for prompt in prompts]
24
+
25
+ def insert_result(modelId, promptId, result, duration, rate):
26
+ cursor.execute(
27
+ "INSERT INTO results (model, prompt, result, duration, rate) VALUES (?, ?, ?, ?, ?)",
28
+ (modelId, promptId, result, duration, rate)
29
+ )
30
+ db.commit()
31
+ pass
32
+
33
+ def check_if_results_exist(modelId, promptId):
34
+ results = cursor.execute(
35
+ "SELECT * FROM results WHERE model = ? AND prompt = ? LIMIT 1", (modelId, promptId)
36
+ ).fetchall()
37
+ return len(results) > 0
38
+
39
+ def ask_prompt(prompt, model):
40
+ exists = check_if_results_exist(model["id"], prompt["id"])
41
+
42
+ if exists:
43
+ print("Skipping, already got benchmark")
44
+ return
45
+
46
+ mapping = {
47
+ "together": together,
48
+ "cohere": cohere, # Add these functions to the mapping once they are translated
49
+ "openai": openai_func,
50
+ "openrouter": openrouter,
51
+ "ai21": ai21,
52
+ # "alephalpha": alephalpha # TODO: get a working API key
53
+ }
54
+
55
+ querier = mapping.get(model["api"])
56
+
57
+ if not querier:
58
+ print(f"No querier for {model['api']}")
59
+ return
60
+
61
+ print(f"Querying {model['name']}")
62
+
63
+ start_time = time.time()
64
+
65
+ try:
66
+ response_text = querier(model, prompt)
67
+
68
+ # Remove newlines and trailing spaces + stop sequence
69
+ cleaned = response_text.strip()
70
+ if prompt["stop"]:
71
+ cleaned = remove_end(cleaned, prompt["stop"])
72
+
73
+ end_time = time.time()
74
+
75
+ duration = end_time - start_time
76
+ chars_per_second = round(len(response_text) / duration, 2)
77
+
78
+ print("------------------------------------")
79
+ print(f"Result: {cleaned}")
80
+ print(f"Took {duration*1000} ms ({chars_per_second} chars/s)")
81
+ print("------------------------------------")
82
+
83
+ insert_result(model["id"], prompt["id"], cleaned, duration*1000, chars_per_second)
84
+
85
+ except Exception as e:
86
+ print(f"Error querying {model['name']}", e)
87
+
88
+
89
+ total_benchmarks = len(models) * len(prompts)
90
+ print(f"Running {total_benchmarks} benchmarks")
91
+
92
+
93
+ for model in models:
94
+ if model["type"] == "language":
95
+ continue
96
+ for prompt in prompts:
97
+ if prompt["type"] != "code" and model["type"] == "code":
98
+ print("Skipping non-code benchmark for code model")
99
+ continue
100
+
101
+ ask_prompt(prompt, model)
102
+
103
+ db.close()
styles/globals.css ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ * {
2
+ box-sizing: border-box;
3
+ padding: 0;
4
+ margin: 0;
5
+ }
6
+
7
+
8
+ body {
9
+ padding: 20px;
10
+ }
11
+
12
+ a {
13
+ color: inherit;
14
+ /* text-decoration: none; */
15
+ }
16
+
17
+
18
+
19
+ ul {
20
+ padding-left: 20px;
21
+ }
22
+
23
+ li {
24
+ margin-bottom: 10px;
25
+ }
26
+
27
+ table {
28
+ /* border-collapse: collapse; */
29
+ width: 100%;
30
+ table-layout:fixed;
31
+ }
32
+
33
+ table, th, td {
34
+ border: 1px solid;
35
+ }
36
+
37
+ th, td {
38
+ padding: 10px;
39
+ text-align: left;
40
+ }
41
+
42
+ th:nth-child(1) {
43
+ width: 200px;
44
+ }
45
+
46
+ th:nth-child(2) {
47
+ width: auto;
48
+ }
49
+
50
+ pre {
51
+ background-color: #eee;
52
+ padding: 10px;
53
+ border-radius: 5px;
54
+ white-space: pre-wrap;
55
+ word-wrap: break-word;
56
+ }
57
+
58
+ th:nth-child(3),
59
+ th:nth-child(4) {
60
+ width: 100px;
61
+ }
62
+
63
+ @media (max-width: 800px) {
64
+ table {
65
+ table-layout:auto;
66
+ overflow-x: scroll;
67
+ width: max-content;
68
+ max-width: 700px;
69
+ }
70
+
71
+ th:nth-child(1) {
72
+ width: 50px;
73
+ }
74
+
75
+
76
+ th:nth-child(3),
77
+ td:nth-child(3),
78
+ th:nth-child(4),
79
+ td:nth-child(4) {
80
+ display: none;
81
+ }
82
+ }
83
+
84
+ @media (prefers-color-scheme: dark) {
85
+ html {
86
+ color-scheme: dark;
87
+ }
88
+
89
+ pre {
90
+ background-color: #333;
91
+ color: #eee;
92
+ }
93
+
94
+ a {
95
+ color: #ccc;
96
+ }
97
+ }
98
+
99
+ .llmonitor {
100
+ position: fixed;
101
+ bottom: -2px;
102
+ font-size: 14px;
103
+ right: 10px;
104
+ padding: 7px;
105
+ background-color: rgba(0,0,0,0.7);
106
+ color: #fff;
107
+ border-radius: 5px;
108
+ text-decoration: none;
109
+ font-weight: 600;
110
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
111
+ }
112
+
113
+ .llmonitor:hover {
114
+ transform: scale(1.1);
115
+ }
utils/getDB.js ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import sqlite3 from "sqlite3"
2
+ import { open } from "sqlite"
3
+
4
+ const getDB = async () => {
5
+ const db = await open({
6
+ filename: process.cwd() + "/run/database.db",
7
+ driver: sqlite3.Database,
8
+ })
9
+
10
+ return db
11
+ }
12
+
13
+ export default getDB