nsarrazin HF staff commited on
Commit
6e801f2
1 Parent(s): 6805015

Add a simple populate script (#880)

Browse files

* Add a simple populate script

* readme changes

* add `all` flag

* add logging everywhere

Files changed (4) hide show
  1. README.md +34 -0
  2. package-lock.json +748 -38
  3. package.json +6 -1
  4. scripts/populate.ts +264 -0
README.md CHANGED
@@ -616,3 +616,37 @@ npm run updateLocalEnv
616
  ```
617
 
618
  This will replace your `.env.local` file with the one that will be used in prod (simply taking `.env.template + .env.SECRET_CONFIG`).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
616
  ```
617
 
618
  This will replace your `.env.local` file with the one that will be used in prod (simply taking `.env.template + .env.SECRET_CONFIG`).
619
+
620
+ ### Populate database
621
+
622
+ > [!WARNING]
623
+ > The `MONGODB_URL` used for this script will be fetched from `.env.local`. Make sure it's correct! The command runs directly on the database.
624
+
625
+ You can populate the database using faker data using the `populate` script:
626
+
627
+ ```bash
628
+ npm run populate <flags here>
629
+ ```
630
+
631
+ At least one flag must be specified, the following flags are available:
632
+
633
+ - `reset` - resets the database
634
+ - `all` - populates all tables
635
+ - `users` - populates the users table
636
+ - `settings` - populates the settings table for existing users
637
+ - `assistants` - populates the assistants table for existing users
638
+ - `conversations` - populates the conversations table for existing users
639
+
640
+ For example, you could use it like so:
641
+
642
+ ```bash
643
+ npm run populate reset
644
+ ```
645
+
646
+ to clear out the database. Then login in the app to create your user and run the following command:
647
+
648
+ ```bash
649
+ npm run populate users settings assistants conversations
650
+ ```
651
+
652
+ to populate the database with fake data, including fake conversations and assistants for your user.
package-lock.json CHANGED
@@ -39,6 +39,7 @@
39
  "zod": "^3.22.3"
40
  },
41
  "devDependencies": {
 
42
  "@iconify-json/carbon": "^1.1.16",
43
  "@iconify-json/eos-icons": "^1.1.6",
44
  "@sveltejs/adapter-node": "^1.3.1",
@@ -46,6 +47,7 @@
46
  "@tailwindcss/typography": "^0.5.9",
47
  "@types/jsdom": "^21.1.1",
48
  "@types/marked": "^4.0.8",
 
49
  "@types/parquetjs": "^0.10.3",
50
  "@types/uuid": "^9.0.8",
51
  "@typescript-eslint/eslint-plugin": "^6.x",
@@ -54,6 +56,7 @@
54
  "eslint-config-prettier": "^8.5.0",
55
  "eslint-plugin-svelte": "^2.30.0",
56
  "marked-katex-extension": "^3.0.6",
 
57
  "prettier": "^2.8.0",
58
  "prettier-plugin-svelte": "^2.10.1",
59
  "prettier-plugin-tailwindcss": "^0.2.7",
@@ -64,6 +67,7 @@
64
  "typescript": "^5.0.0",
65
  "unplugin-icons": "^0.16.1",
66
  "vite": "^4.5.2",
 
67
  "vitest": "^0.31.0"
68
  },
69
  "optionalDependencies": {
@@ -148,6 +152,22 @@
148
  "tslib": "^2.4.0"
149
  }
150
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
151
  "node_modules/@esbuild/android-arm": {
152
  "version": "0.18.20",
153
  "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
@@ -556,6 +576,22 @@
556
  "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
557
  }
558
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
559
  "node_modules/@fastify/busboy": {
560
  "version": "2.0.0",
561
  "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.0.0.tgz",
@@ -1570,6 +1606,175 @@
1570
  }
1571
  }
1572
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1573
  "node_modules/@shuding/opentype.js": {
1574
  "version": "1.4.0-beta.0",
1575
  "resolved": "https://registry.npmjs.org/@shuding/opentype.js/-/opentype.js-1.4.0-beta.0.tgz",
@@ -1753,9 +1958,9 @@
1753
  "dev": true
1754
  },
1755
  "node_modules/@types/estree": {
1756
- "version": "1.0.2",
1757
- "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.2.tgz",
1758
- "integrity": "sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==",
1759
  "dev": true
1760
  },
1761
  "node_modules/@types/jsdom": {
@@ -1792,6 +1997,12 @@
1792
  "integrity": "sha512-HVNzMT5QlWCOdeuBsgXP8EZzKUf0+AXzN+sLmjvaB3ZlLqO+e4u0uXrdw9ub69wBKFs+c6/pA4r9sy6cCDvImw==",
1793
  "dev": true
1794
  },
 
 
 
 
 
 
1795
  "node_modules/@types/node": {
1796
  "version": "18.13.0",
1797
  "resolved": "https://registry.npmjs.org/@types/node/-/node-18.13.0.tgz",
@@ -2206,9 +2417,9 @@
2206
  }
2207
  },
2208
  "node_modules/acorn": {
2209
- "version": "8.10.0",
2210
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz",
2211
- "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==",
2212
  "devOptional": true,
2213
  "bin": {
2214
  "acorn": "bin/acorn"
@@ -3734,9 +3945,9 @@
3734
  "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
3735
  },
3736
  "node_modules/fsevents": {
3737
- "version": "2.3.2",
3738
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
3739
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
3740
  "hasInstallScript": true,
3741
  "optional": true,
3742
  "os": [
@@ -4375,9 +4586,9 @@
4375
  }
4376
  },
4377
  "node_modules/jsonc-parser": {
4378
- "version": "3.2.0",
4379
- "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
4380
- "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
4381
  "dev": true
4382
  },
4383
  "node_modules/katex": {
@@ -4748,15 +4959,15 @@
4748
  "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="
4749
  },
4750
  "node_modules/mlly": {
4751
- "version": "1.2.1",
4752
- "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.2.1.tgz",
4753
- "integrity": "sha512-1aMEByaWgBPEbWV2BOPEMySRrzl7rIHXmQxam4DM8jVjalTQDjpN2ZKOLUrwyhfZQO7IXHml2StcHMhooDeEEQ==",
4754
  "dev": true,
4755
  "dependencies": {
4756
- "acorn": "^8.8.2",
4757
- "pathe": "^1.1.0",
4758
  "pkg-types": "^1.0.3",
4759
- "ufo": "^1.1.2"
4760
  }
4761
  },
4762
  "node_modules/mongodb": {
@@ -5305,9 +5516,9 @@
5305
  }
5306
  },
5307
  "node_modules/pathe": {
5308
- "version": "1.1.0",
5309
- "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.0.tgz",
5310
- "integrity": "sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==",
5311
  "dev": true
5312
  },
5313
  "node_modules/pathval": {
@@ -5397,9 +5608,9 @@
5397
  "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg=="
5398
  },
5399
  "node_modules/postcss": {
5400
- "version": "8.4.31",
5401
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
5402
- "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
5403
  "funding": [
5404
  {
5405
  "type": "opencollective",
@@ -5415,7 +5626,7 @@
5415
  }
5416
  ],
5417
  "dependencies": {
5418
- "nanoid": "^3.3.6",
5419
  "picocolors": "^1.0.0",
5420
  "source-map-js": "^1.0.2"
5421
  },
@@ -5564,9 +5775,9 @@
5564
  "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
5565
  },
5566
  "node_modules/postcss/node_modules/nanoid": {
5567
- "version": "3.3.6",
5568
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
5569
- "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
5570
  "funding": [
5571
  {
5572
  "type": "github",
@@ -7109,9 +7320,9 @@
7109
  }
7110
  },
7111
  "node_modules/ufo": {
7112
- "version": "1.1.2",
7113
- "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.1.2.tgz",
7114
- "integrity": "sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==",
7115
  "dev": true
7116
  },
7117
  "node_modules/uglify-js": {
@@ -7336,28 +7547,504 @@
7336
  }
7337
  },
7338
  "node_modules/vite-node": {
7339
- "version": "0.31.0",
7340
- "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.31.0.tgz",
7341
- "integrity": "sha512-8x1x1LNuPvE2vIvkSB7c1mApX5oqlgsxzHQesYF7l5n1gKrEmrClIiZuOFbFDQcjLsmcWSwwmrWrcGWm9Fxc/g==",
7342
  "dev": true,
7343
  "dependencies": {
7344
  "cac": "^6.7.14",
7345
  "debug": "^4.3.4",
7346
- "mlly": "^1.2.0",
7347
- "pathe": "^1.1.0",
7348
  "picocolors": "^1.0.0",
7349
- "vite": "^3.0.0 || ^4.0.0"
7350
  },
7351
  "bin": {
7352
  "vite-node": "vite-node.mjs"
7353
  },
7354
  "engines": {
7355
- "node": ">=v14.18.0"
7356
  },
7357
  "funding": {
7358
  "url": "https://opencollective.com/vitest"
7359
  }
7360
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7361
  "node_modules/vitefu": {
7362
  "version": "0.2.5",
7363
  "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz",
@@ -7450,6 +8137,29 @@
7450
  }
7451
  }
7452
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7453
  "node_modules/w3c-xmlserializer": {
7454
  "version": "4.0.0",
7455
  "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz",
 
39
  "zod": "^3.22.3"
40
  },
41
  "devDependencies": {
42
+ "@faker-js/faker": "^8.4.1",
43
  "@iconify-json/carbon": "^1.1.16",
44
  "@iconify-json/eos-icons": "^1.1.6",
45
  "@sveltejs/adapter-node": "^1.3.1",
 
47
  "@tailwindcss/typography": "^0.5.9",
48
  "@types/jsdom": "^21.1.1",
49
  "@types/marked": "^4.0.8",
50
+ "@types/minimist": "^1.2.5",
51
  "@types/parquetjs": "^0.10.3",
52
  "@types/uuid": "^9.0.8",
53
  "@typescript-eslint/eslint-plugin": "^6.x",
 
56
  "eslint-config-prettier": "^8.5.0",
57
  "eslint-plugin-svelte": "^2.30.0",
58
  "marked-katex-extension": "^3.0.6",
59
+ "minimist": "^1.2.8",
60
  "prettier": "^2.8.0",
61
  "prettier-plugin-svelte": "^2.10.1",
62
  "prettier-plugin-tailwindcss": "^0.2.7",
 
67
  "typescript": "^5.0.0",
68
  "unplugin-icons": "^0.16.1",
69
  "vite": "^4.5.2",
70
+ "vite-node": "^1.3.1",
71
  "vitest": "^0.31.0"
72
  },
73
  "optionalDependencies": {
 
152
  "tslib": "^2.4.0"
153
  }
154
  },
155
+ "node_modules/@esbuild/aix-ppc64": {
156
+ "version": "0.19.12",
157
+ "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz",
158
+ "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==",
159
+ "cpu": [
160
+ "ppc64"
161
+ ],
162
+ "dev": true,
163
+ "optional": true,
164
+ "os": [
165
+ "aix"
166
+ ],
167
+ "engines": {
168
+ "node": ">=12"
169
+ }
170
+ },
171
  "node_modules/@esbuild/android-arm": {
172
  "version": "0.18.20",
173
  "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz",
 
576
  "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
577
  }
578
  },
579
+ "node_modules/@faker-js/faker": {
580
+ "version": "8.4.1",
581
+ "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-8.4.1.tgz",
582
+ "integrity": "sha512-XQ3cU+Q8Uqmrbf2e0cIC/QN43sTBSC8KF12u29Mb47tWrt2hAgBXSgpZMj4Ao8Uk0iJcU99QsOCaIL8934obCg==",
583
+ "dev": true,
584
+ "funding": [
585
+ {
586
+ "type": "opencollective",
587
+ "url": "https://opencollective.com/fakerjs"
588
+ }
589
+ ],
590
+ "engines": {
591
+ "node": "^14.17.0 || ^16.13.0 || >=18.0.0",
592
+ "npm": ">=6.14.13"
593
+ }
594
+ },
595
  "node_modules/@fastify/busboy": {
596
  "version": "2.0.0",
597
  "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.0.0.tgz",
 
1606
  }
1607
  }
1608
  },
1609
+ "node_modules/@rollup/rollup-android-arm-eabi": {
1610
+ "version": "4.12.0",
1611
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.12.0.tgz",
1612
+ "integrity": "sha512-+ac02NL/2TCKRrJu2wffk1kZ+RyqxVUlbjSagNgPm94frxtr+XDL12E5Ll1enWskLrtrZ2r8L3wED1orIibV/w==",
1613
+ "cpu": [
1614
+ "arm"
1615
+ ],
1616
+ "dev": true,
1617
+ "optional": true,
1618
+ "os": [
1619
+ "android"
1620
+ ]
1621
+ },
1622
+ "node_modules/@rollup/rollup-android-arm64": {
1623
+ "version": "4.12.0",
1624
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.12.0.tgz",
1625
+ "integrity": "sha512-OBqcX2BMe6nvjQ0Nyp7cC90cnumt8PXmO7Dp3gfAju/6YwG0Tj74z1vKrfRz7qAv23nBcYM8BCbhrsWqO7PzQQ==",
1626
+ "cpu": [
1627
+ "arm64"
1628
+ ],
1629
+ "dev": true,
1630
+ "optional": true,
1631
+ "os": [
1632
+ "android"
1633
+ ]
1634
+ },
1635
+ "node_modules/@rollup/rollup-darwin-arm64": {
1636
+ "version": "4.12.0",
1637
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.12.0.tgz",
1638
+ "integrity": "sha512-X64tZd8dRE/QTrBIEs63kaOBG0b5GVEd3ccoLtyf6IdXtHdh8h+I56C2yC3PtC9Ucnv0CpNFJLqKFVgCYe0lOQ==",
1639
+ "cpu": [
1640
+ "arm64"
1641
+ ],
1642
+ "dev": true,
1643
+ "optional": true,
1644
+ "os": [
1645
+ "darwin"
1646
+ ]
1647
+ },
1648
+ "node_modules/@rollup/rollup-darwin-x64": {
1649
+ "version": "4.12.0",
1650
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.12.0.tgz",
1651
+ "integrity": "sha512-cc71KUZoVbUJmGP2cOuiZ9HSOP14AzBAThn3OU+9LcA1+IUqswJyR1cAJj3Mg55HbjZP6OLAIscbQsQLrpgTOg==",
1652
+ "cpu": [
1653
+ "x64"
1654
+ ],
1655
+ "dev": true,
1656
+ "optional": true,
1657
+ "os": [
1658
+ "darwin"
1659
+ ]
1660
+ },
1661
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
1662
+ "version": "4.12.0",
1663
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.12.0.tgz",
1664
+ "integrity": "sha512-a6w/Y3hyyO6GlpKL2xJ4IOh/7d+APaqLYdMf86xnczU3nurFTaVN9s9jOXQg97BE4nYm/7Ga51rjec5nfRdrvA==",
1665
+ "cpu": [
1666
+ "arm"
1667
+ ],
1668
+ "dev": true,
1669
+ "optional": true,
1670
+ "os": [
1671
+ "linux"
1672
+ ]
1673
+ },
1674
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
1675
+ "version": "4.12.0",
1676
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.12.0.tgz",
1677
+ "integrity": "sha512-0fZBq27b+D7Ar5CQMofVN8sggOVhEtzFUwOwPppQt0k+VR+7UHMZZY4y+64WJ06XOhBTKXtQB/Sv0NwQMXyNAA==",
1678
+ "cpu": [
1679
+ "arm64"
1680
+ ],
1681
+ "dev": true,
1682
+ "optional": true,
1683
+ "os": [
1684
+ "linux"
1685
+ ]
1686
+ },
1687
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
1688
+ "version": "4.12.0",
1689
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.12.0.tgz",
1690
+ "integrity": "sha512-eTvzUS3hhhlgeAv6bfigekzWZjaEX9xP9HhxB0Dvrdbkk5w/b+1Sxct2ZuDxNJKzsRStSq1EaEkVSEe7A7ipgQ==",
1691
+ "cpu": [
1692
+ "arm64"
1693
+ ],
1694
+ "dev": true,
1695
+ "optional": true,
1696
+ "os": [
1697
+ "linux"
1698
+ ]
1699
+ },
1700
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
1701
+ "version": "4.12.0",
1702
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.12.0.tgz",
1703
+ "integrity": "sha512-ix+qAB9qmrCRiaO71VFfY8rkiAZJL8zQRXveS27HS+pKdjwUfEhqo2+YF2oI+H/22Xsiski+qqwIBxVewLK7sw==",
1704
+ "cpu": [
1705
+ "riscv64"
1706
+ ],
1707
+ "dev": true,
1708
+ "optional": true,
1709
+ "os": [
1710
+ "linux"
1711
+ ]
1712
+ },
1713
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
1714
+ "version": "4.12.0",
1715
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.12.0.tgz",
1716
+ "integrity": "sha512-TenQhZVOtw/3qKOPa7d+QgkeM6xY0LtwzR8OplmyL5LrgTWIXpTQg2Q2ycBf8jm+SFW2Wt/DTn1gf7nFp3ssVA==",
1717
+ "cpu": [
1718
+ "x64"
1719
+ ],
1720
+ "dev": true,
1721
+ "optional": true,
1722
+ "os": [
1723
+ "linux"
1724
+ ]
1725
+ },
1726
+ "node_modules/@rollup/rollup-linux-x64-musl": {
1727
+ "version": "4.12.0",
1728
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.12.0.tgz",
1729
+ "integrity": "sha512-LfFdRhNnW0zdMvdCb5FNuWlls2WbbSridJvxOvYWgSBOYZtgBfW9UGNJG//rwMqTX1xQE9BAodvMH9tAusKDUw==",
1730
+ "cpu": [
1731
+ "x64"
1732
+ ],
1733
+ "dev": true,
1734
+ "optional": true,
1735
+ "os": [
1736
+ "linux"
1737
+ ]
1738
+ },
1739
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
1740
+ "version": "4.12.0",
1741
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.12.0.tgz",
1742
+ "integrity": "sha512-JPDxovheWNp6d7AHCgsUlkuCKvtu3RB55iNEkaQcf0ttsDU/JZF+iQnYcQJSk/7PtT4mjjVG8N1kpwnI9SLYaw==",
1743
+ "cpu": [
1744
+ "arm64"
1745
+ ],
1746
+ "dev": true,
1747
+ "optional": true,
1748
+ "os": [
1749
+ "win32"
1750
+ ]
1751
+ },
1752
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
1753
+ "version": "4.12.0",
1754
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.12.0.tgz",
1755
+ "integrity": "sha512-fjtuvMWRGJn1oZacG8IPnzIV6GF2/XG+h71FKn76OYFqySXInJtseAqdprVTDTyqPxQOG9Exak5/E9Z3+EJ8ZA==",
1756
+ "cpu": [
1757
+ "ia32"
1758
+ ],
1759
+ "dev": true,
1760
+ "optional": true,
1761
+ "os": [
1762
+ "win32"
1763
+ ]
1764
+ },
1765
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
1766
+ "version": "4.12.0",
1767
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.12.0.tgz",
1768
+ "integrity": "sha512-ZYmr5mS2wd4Dew/JjT0Fqi2NPB/ZhZ2VvPp7SmvPZb4Y1CG/LRcS6tcRo2cYU7zLK5A7cdbhWnnWmUjoI4qapg==",
1769
+ "cpu": [
1770
+ "x64"
1771
+ ],
1772
+ "dev": true,
1773
+ "optional": true,
1774
+ "os": [
1775
+ "win32"
1776
+ ]
1777
+ },
1778
  "node_modules/@shuding/opentype.js": {
1779
  "version": "1.4.0-beta.0",
1780
  "resolved": "https://registry.npmjs.org/@shuding/opentype.js/-/opentype.js-1.4.0-beta.0.tgz",
 
1958
  "dev": true
1959
  },
1960
  "node_modules/@types/estree": {
1961
+ "version": "1.0.5",
1962
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
1963
+ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
1964
  "dev": true
1965
  },
1966
  "node_modules/@types/jsdom": {
 
1997
  "integrity": "sha512-HVNzMT5QlWCOdeuBsgXP8EZzKUf0+AXzN+sLmjvaB3ZlLqO+e4u0uXrdw9ub69wBKFs+c6/pA4r9sy6cCDvImw==",
1998
  "dev": true
1999
  },
2000
+ "node_modules/@types/minimist": {
2001
+ "version": "1.2.5",
2002
+ "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz",
2003
+ "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==",
2004
+ "dev": true
2005
+ },
2006
  "node_modules/@types/node": {
2007
  "version": "18.13.0",
2008
  "resolved": "https://registry.npmjs.org/@types/node/-/node-18.13.0.tgz",
 
2417
  }
2418
  },
2419
  "node_modules/acorn": {
2420
+ "version": "8.11.3",
2421
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
2422
+ "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
2423
  "devOptional": true,
2424
  "bin": {
2425
  "acorn": "bin/acorn"
 
3945
  "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
3946
  },
3947
  "node_modules/fsevents": {
3948
+ "version": "2.3.3",
3949
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
3950
+ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
3951
  "hasInstallScript": true,
3952
  "optional": true,
3953
  "os": [
 
4586
  }
4587
  },
4588
  "node_modules/jsonc-parser": {
4589
+ "version": "3.2.1",
4590
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz",
4591
+ "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==",
4592
  "dev": true
4593
  },
4594
  "node_modules/katex": {
 
4959
  "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A=="
4960
  },
4961
  "node_modules/mlly": {
4962
+ "version": "1.6.1",
4963
+ "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.6.1.tgz",
4964
+ "integrity": "sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==",
4965
  "dev": true,
4966
  "dependencies": {
4967
+ "acorn": "^8.11.3",
4968
+ "pathe": "^1.1.2",
4969
  "pkg-types": "^1.0.3",
4970
+ "ufo": "^1.3.2"
4971
  }
4972
  },
4973
  "node_modules/mongodb": {
 
5516
  }
5517
  },
5518
  "node_modules/pathe": {
5519
+ "version": "1.1.2",
5520
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
5521
+ "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
5522
  "dev": true
5523
  },
5524
  "node_modules/pathval": {
 
5608
  "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg=="
5609
  },
5610
  "node_modules/postcss": {
5611
+ "version": "8.4.35",
5612
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz",
5613
+ "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==",
5614
  "funding": [
5615
  {
5616
  "type": "opencollective",
 
5626
  }
5627
  ],
5628
  "dependencies": {
5629
+ "nanoid": "^3.3.7",
5630
  "picocolors": "^1.0.0",
5631
  "source-map-js": "^1.0.2"
5632
  },
 
5775
  "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ=="
5776
  },
5777
  "node_modules/postcss/node_modules/nanoid": {
5778
+ "version": "3.3.7",
5779
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
5780
+ "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
5781
  "funding": [
5782
  {
5783
  "type": "github",
 
7320
  }
7321
  },
7322
  "node_modules/ufo": {
7323
+ "version": "1.4.0",
7324
+ "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.4.0.tgz",
7325
+ "integrity": "sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==",
7326
  "dev": true
7327
  },
7328
  "node_modules/uglify-js": {
 
7547
  }
7548
  },
7549
  "node_modules/vite-node": {
7550
+ "version": "1.3.1",
7551
+ "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.3.1.tgz",
7552
+ "integrity": "sha512-azbRrqRxlWTJEVbzInZCTchx0X69M/XPTCz4H+TLvlTcR/xH/3hkRqhOakT41fMJCMzXTu4UvegkZiEoJAWvng==",
7553
  "dev": true,
7554
  "dependencies": {
7555
  "cac": "^6.7.14",
7556
  "debug": "^4.3.4",
7557
+ "pathe": "^1.1.1",
 
7558
  "picocolors": "^1.0.0",
7559
+ "vite": "^5.0.0"
7560
  },
7561
  "bin": {
7562
  "vite-node": "vite-node.mjs"
7563
  },
7564
  "engines": {
7565
+ "node": "^18.0.0 || >=20.0.0"
7566
  },
7567
  "funding": {
7568
  "url": "https://opencollective.com/vitest"
7569
  }
7570
  },
7571
+ "node_modules/vite-node/node_modules/@esbuild/android-arm": {
7572
+ "version": "0.19.12",
7573
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz",
7574
+ "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==",
7575
+ "cpu": [
7576
+ "arm"
7577
+ ],
7578
+ "dev": true,
7579
+ "optional": true,
7580
+ "os": [
7581
+ "android"
7582
+ ],
7583
+ "engines": {
7584
+ "node": ">=12"
7585
+ }
7586
+ },
7587
+ "node_modules/vite-node/node_modules/@esbuild/android-arm64": {
7588
+ "version": "0.19.12",
7589
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz",
7590
+ "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==",
7591
+ "cpu": [
7592
+ "arm64"
7593
+ ],
7594
+ "dev": true,
7595
+ "optional": true,
7596
+ "os": [
7597
+ "android"
7598
+ ],
7599
+ "engines": {
7600
+ "node": ">=12"
7601
+ }
7602
+ },
7603
+ "node_modules/vite-node/node_modules/@esbuild/android-x64": {
7604
+ "version": "0.19.12",
7605
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz",
7606
+ "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==",
7607
+ "cpu": [
7608
+ "x64"
7609
+ ],
7610
+ "dev": true,
7611
+ "optional": true,
7612
+ "os": [
7613
+ "android"
7614
+ ],
7615
+ "engines": {
7616
+ "node": ">=12"
7617
+ }
7618
+ },
7619
+ "node_modules/vite-node/node_modules/@esbuild/darwin-arm64": {
7620
+ "version": "0.19.12",
7621
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz",
7622
+ "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==",
7623
+ "cpu": [
7624
+ "arm64"
7625
+ ],
7626
+ "dev": true,
7627
+ "optional": true,
7628
+ "os": [
7629
+ "darwin"
7630
+ ],
7631
+ "engines": {
7632
+ "node": ">=12"
7633
+ }
7634
+ },
7635
+ "node_modules/vite-node/node_modules/@esbuild/darwin-x64": {
7636
+ "version": "0.19.12",
7637
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz",
7638
+ "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==",
7639
+ "cpu": [
7640
+ "x64"
7641
+ ],
7642
+ "dev": true,
7643
+ "optional": true,
7644
+ "os": [
7645
+ "darwin"
7646
+ ],
7647
+ "engines": {
7648
+ "node": ">=12"
7649
+ }
7650
+ },
7651
+ "node_modules/vite-node/node_modules/@esbuild/freebsd-arm64": {
7652
+ "version": "0.19.12",
7653
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz",
7654
+ "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==",
7655
+ "cpu": [
7656
+ "arm64"
7657
+ ],
7658
+ "dev": true,
7659
+ "optional": true,
7660
+ "os": [
7661
+ "freebsd"
7662
+ ],
7663
+ "engines": {
7664
+ "node": ">=12"
7665
+ }
7666
+ },
7667
+ "node_modules/vite-node/node_modules/@esbuild/freebsd-x64": {
7668
+ "version": "0.19.12",
7669
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz",
7670
+ "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==",
7671
+ "cpu": [
7672
+ "x64"
7673
+ ],
7674
+ "dev": true,
7675
+ "optional": true,
7676
+ "os": [
7677
+ "freebsd"
7678
+ ],
7679
+ "engines": {
7680
+ "node": ">=12"
7681
+ }
7682
+ },
7683
+ "node_modules/vite-node/node_modules/@esbuild/linux-arm": {
7684
+ "version": "0.19.12",
7685
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz",
7686
+ "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==",
7687
+ "cpu": [
7688
+ "arm"
7689
+ ],
7690
+ "dev": true,
7691
+ "optional": true,
7692
+ "os": [
7693
+ "linux"
7694
+ ],
7695
+ "engines": {
7696
+ "node": ">=12"
7697
+ }
7698
+ },
7699
+ "node_modules/vite-node/node_modules/@esbuild/linux-arm64": {
7700
+ "version": "0.19.12",
7701
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz",
7702
+ "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==",
7703
+ "cpu": [
7704
+ "arm64"
7705
+ ],
7706
+ "dev": true,
7707
+ "optional": true,
7708
+ "os": [
7709
+ "linux"
7710
+ ],
7711
+ "engines": {
7712
+ "node": ">=12"
7713
+ }
7714
+ },
7715
+ "node_modules/vite-node/node_modules/@esbuild/linux-ia32": {
7716
+ "version": "0.19.12",
7717
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz",
7718
+ "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==",
7719
+ "cpu": [
7720
+ "ia32"
7721
+ ],
7722
+ "dev": true,
7723
+ "optional": true,
7724
+ "os": [
7725
+ "linux"
7726
+ ],
7727
+ "engines": {
7728
+ "node": ">=12"
7729
+ }
7730
+ },
7731
+ "node_modules/vite-node/node_modules/@esbuild/linux-loong64": {
7732
+ "version": "0.19.12",
7733
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz",
7734
+ "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==",
7735
+ "cpu": [
7736
+ "loong64"
7737
+ ],
7738
+ "dev": true,
7739
+ "optional": true,
7740
+ "os": [
7741
+ "linux"
7742
+ ],
7743
+ "engines": {
7744
+ "node": ">=12"
7745
+ }
7746
+ },
7747
+ "node_modules/vite-node/node_modules/@esbuild/linux-mips64el": {
7748
+ "version": "0.19.12",
7749
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz",
7750
+ "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==",
7751
+ "cpu": [
7752
+ "mips64el"
7753
+ ],
7754
+ "dev": true,
7755
+ "optional": true,
7756
+ "os": [
7757
+ "linux"
7758
+ ],
7759
+ "engines": {
7760
+ "node": ">=12"
7761
+ }
7762
+ },
7763
+ "node_modules/vite-node/node_modules/@esbuild/linux-ppc64": {
7764
+ "version": "0.19.12",
7765
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz",
7766
+ "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==",
7767
+ "cpu": [
7768
+ "ppc64"
7769
+ ],
7770
+ "dev": true,
7771
+ "optional": true,
7772
+ "os": [
7773
+ "linux"
7774
+ ],
7775
+ "engines": {
7776
+ "node": ">=12"
7777
+ }
7778
+ },
7779
+ "node_modules/vite-node/node_modules/@esbuild/linux-riscv64": {
7780
+ "version": "0.19.12",
7781
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz",
7782
+ "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==",
7783
+ "cpu": [
7784
+ "riscv64"
7785
+ ],
7786
+ "dev": true,
7787
+ "optional": true,
7788
+ "os": [
7789
+ "linux"
7790
+ ],
7791
+ "engines": {
7792
+ "node": ">=12"
7793
+ }
7794
+ },
7795
+ "node_modules/vite-node/node_modules/@esbuild/linux-s390x": {
7796
+ "version": "0.19.12",
7797
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz",
7798
+ "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==",
7799
+ "cpu": [
7800
+ "s390x"
7801
+ ],
7802
+ "dev": true,
7803
+ "optional": true,
7804
+ "os": [
7805
+ "linux"
7806
+ ],
7807
+ "engines": {
7808
+ "node": ">=12"
7809
+ }
7810
+ },
7811
+ "node_modules/vite-node/node_modules/@esbuild/linux-x64": {
7812
+ "version": "0.19.12",
7813
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz",
7814
+ "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==",
7815
+ "cpu": [
7816
+ "x64"
7817
+ ],
7818
+ "dev": true,
7819
+ "optional": true,
7820
+ "os": [
7821
+ "linux"
7822
+ ],
7823
+ "engines": {
7824
+ "node": ">=12"
7825
+ }
7826
+ },
7827
+ "node_modules/vite-node/node_modules/@esbuild/netbsd-x64": {
7828
+ "version": "0.19.12",
7829
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz",
7830
+ "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==",
7831
+ "cpu": [
7832
+ "x64"
7833
+ ],
7834
+ "dev": true,
7835
+ "optional": true,
7836
+ "os": [
7837
+ "netbsd"
7838
+ ],
7839
+ "engines": {
7840
+ "node": ">=12"
7841
+ }
7842
+ },
7843
+ "node_modules/vite-node/node_modules/@esbuild/openbsd-x64": {
7844
+ "version": "0.19.12",
7845
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz",
7846
+ "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==",
7847
+ "cpu": [
7848
+ "x64"
7849
+ ],
7850
+ "dev": true,
7851
+ "optional": true,
7852
+ "os": [
7853
+ "openbsd"
7854
+ ],
7855
+ "engines": {
7856
+ "node": ">=12"
7857
+ }
7858
+ },
7859
+ "node_modules/vite-node/node_modules/@esbuild/sunos-x64": {
7860
+ "version": "0.19.12",
7861
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz",
7862
+ "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==",
7863
+ "cpu": [
7864
+ "x64"
7865
+ ],
7866
+ "dev": true,
7867
+ "optional": true,
7868
+ "os": [
7869
+ "sunos"
7870
+ ],
7871
+ "engines": {
7872
+ "node": ">=12"
7873
+ }
7874
+ },
7875
+ "node_modules/vite-node/node_modules/@esbuild/win32-arm64": {
7876
+ "version": "0.19.12",
7877
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz",
7878
+ "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==",
7879
+ "cpu": [
7880
+ "arm64"
7881
+ ],
7882
+ "dev": true,
7883
+ "optional": true,
7884
+ "os": [
7885
+ "win32"
7886
+ ],
7887
+ "engines": {
7888
+ "node": ">=12"
7889
+ }
7890
+ },
7891
+ "node_modules/vite-node/node_modules/@esbuild/win32-ia32": {
7892
+ "version": "0.19.12",
7893
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz",
7894
+ "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==",
7895
+ "cpu": [
7896
+ "ia32"
7897
+ ],
7898
+ "dev": true,
7899
+ "optional": true,
7900
+ "os": [
7901
+ "win32"
7902
+ ],
7903
+ "engines": {
7904
+ "node": ">=12"
7905
+ }
7906
+ },
7907
+ "node_modules/vite-node/node_modules/@esbuild/win32-x64": {
7908
+ "version": "0.19.12",
7909
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz",
7910
+ "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==",
7911
+ "cpu": [
7912
+ "x64"
7913
+ ],
7914
+ "dev": true,
7915
+ "optional": true,
7916
+ "os": [
7917
+ "win32"
7918
+ ],
7919
+ "engines": {
7920
+ "node": ">=12"
7921
+ }
7922
+ },
7923
+ "node_modules/vite-node/node_modules/esbuild": {
7924
+ "version": "0.19.12",
7925
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz",
7926
+ "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==",
7927
+ "dev": true,
7928
+ "hasInstallScript": true,
7929
+ "bin": {
7930
+ "esbuild": "bin/esbuild"
7931
+ },
7932
+ "engines": {
7933
+ "node": ">=12"
7934
+ },
7935
+ "optionalDependencies": {
7936
+ "@esbuild/aix-ppc64": "0.19.12",
7937
+ "@esbuild/android-arm": "0.19.12",
7938
+ "@esbuild/android-arm64": "0.19.12",
7939
+ "@esbuild/android-x64": "0.19.12",
7940
+ "@esbuild/darwin-arm64": "0.19.12",
7941
+ "@esbuild/darwin-x64": "0.19.12",
7942
+ "@esbuild/freebsd-arm64": "0.19.12",
7943
+ "@esbuild/freebsd-x64": "0.19.12",
7944
+ "@esbuild/linux-arm": "0.19.12",
7945
+ "@esbuild/linux-arm64": "0.19.12",
7946
+ "@esbuild/linux-ia32": "0.19.12",
7947
+ "@esbuild/linux-loong64": "0.19.12",
7948
+ "@esbuild/linux-mips64el": "0.19.12",
7949
+ "@esbuild/linux-ppc64": "0.19.12",
7950
+ "@esbuild/linux-riscv64": "0.19.12",
7951
+ "@esbuild/linux-s390x": "0.19.12",
7952
+ "@esbuild/linux-x64": "0.19.12",
7953
+ "@esbuild/netbsd-x64": "0.19.12",
7954
+ "@esbuild/openbsd-x64": "0.19.12",
7955
+ "@esbuild/sunos-x64": "0.19.12",
7956
+ "@esbuild/win32-arm64": "0.19.12",
7957
+ "@esbuild/win32-ia32": "0.19.12",
7958
+ "@esbuild/win32-x64": "0.19.12"
7959
+ }
7960
+ },
7961
+ "node_modules/vite-node/node_modules/rollup": {
7962
+ "version": "4.12.0",
7963
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.0.tgz",
7964
+ "integrity": "sha512-wz66wn4t1OHIJw3+XU7mJJQV/2NAfw5OAk6G6Hoo3zcvz/XOfQ52Vgi+AN4Uxoxi0KBBwk2g8zPrTDA4btSB/Q==",
7965
+ "dev": true,
7966
+ "dependencies": {
7967
+ "@types/estree": "1.0.5"
7968
+ },
7969
+ "bin": {
7970
+ "rollup": "dist/bin/rollup"
7971
+ },
7972
+ "engines": {
7973
+ "node": ">=18.0.0",
7974
+ "npm": ">=8.0.0"
7975
+ },
7976
+ "optionalDependencies": {
7977
+ "@rollup/rollup-android-arm-eabi": "4.12.0",
7978
+ "@rollup/rollup-android-arm64": "4.12.0",
7979
+ "@rollup/rollup-darwin-arm64": "4.12.0",
7980
+ "@rollup/rollup-darwin-x64": "4.12.0",
7981
+ "@rollup/rollup-linux-arm-gnueabihf": "4.12.0",
7982
+ "@rollup/rollup-linux-arm64-gnu": "4.12.0",
7983
+ "@rollup/rollup-linux-arm64-musl": "4.12.0",
7984
+ "@rollup/rollup-linux-riscv64-gnu": "4.12.0",
7985
+ "@rollup/rollup-linux-x64-gnu": "4.12.0",
7986
+ "@rollup/rollup-linux-x64-musl": "4.12.0",
7987
+ "@rollup/rollup-win32-arm64-msvc": "4.12.0",
7988
+ "@rollup/rollup-win32-ia32-msvc": "4.12.0",
7989
+ "@rollup/rollup-win32-x64-msvc": "4.12.0",
7990
+ "fsevents": "~2.3.2"
7991
+ }
7992
+ },
7993
+ "node_modules/vite-node/node_modules/vite": {
7994
+ "version": "5.1.4",
7995
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.4.tgz",
7996
+ "integrity": "sha512-n+MPqzq+d9nMVTKyewqw6kSt+R3CkvF9QAKY8obiQn8g1fwTscKxyfaYnC632HtBXAQGc1Yjomphwn1dtwGAHg==",
7997
+ "dev": true,
7998
+ "dependencies": {
7999
+ "esbuild": "^0.19.3",
8000
+ "postcss": "^8.4.35",
8001
+ "rollup": "^4.2.0"
8002
+ },
8003
+ "bin": {
8004
+ "vite": "bin/vite.js"
8005
+ },
8006
+ "engines": {
8007
+ "node": "^18.0.0 || >=20.0.0"
8008
+ },
8009
+ "funding": {
8010
+ "url": "https://github.com/vitejs/vite?sponsor=1"
8011
+ },
8012
+ "optionalDependencies": {
8013
+ "fsevents": "~2.3.3"
8014
+ },
8015
+ "peerDependencies": {
8016
+ "@types/node": "^18.0.0 || >=20.0.0",
8017
+ "less": "*",
8018
+ "lightningcss": "^1.21.0",
8019
+ "sass": "*",
8020
+ "stylus": "*",
8021
+ "sugarss": "*",
8022
+ "terser": "^5.4.0"
8023
+ },
8024
+ "peerDependenciesMeta": {
8025
+ "@types/node": {
8026
+ "optional": true
8027
+ },
8028
+ "less": {
8029
+ "optional": true
8030
+ },
8031
+ "lightningcss": {
8032
+ "optional": true
8033
+ },
8034
+ "sass": {
8035
+ "optional": true
8036
+ },
8037
+ "stylus": {
8038
+ "optional": true
8039
+ },
8040
+ "sugarss": {
8041
+ "optional": true
8042
+ },
8043
+ "terser": {
8044
+ "optional": true
8045
+ }
8046
+ }
8047
+ },
8048
  "node_modules/vitefu": {
8049
  "version": "0.2.5",
8050
  "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz",
 
8137
  }
8138
  }
8139
  },
8140
+ "node_modules/vitest/node_modules/vite-node": {
8141
+ "version": "0.31.0",
8142
+ "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.31.0.tgz",
8143
+ "integrity": "sha512-8x1x1LNuPvE2vIvkSB7c1mApX5oqlgsxzHQesYF7l5n1gKrEmrClIiZuOFbFDQcjLsmcWSwwmrWrcGWm9Fxc/g==",
8144
+ "dev": true,
8145
+ "dependencies": {
8146
+ "cac": "^6.7.14",
8147
+ "debug": "^4.3.4",
8148
+ "mlly": "^1.2.0",
8149
+ "pathe": "^1.1.0",
8150
+ "picocolors": "^1.0.0",
8151
+ "vite": "^3.0.0 || ^4.0.0"
8152
+ },
8153
+ "bin": {
8154
+ "vite-node": "vite-node.mjs"
8155
+ },
8156
+ "engines": {
8157
+ "node": ">=v14.18.0"
8158
+ },
8159
+ "funding": {
8160
+ "url": "https://opencollective.com/vitest"
8161
+ }
8162
+ },
8163
  "node_modules/w3c-xmlserializer": {
8164
  "version": "4.0.0",
8165
  "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz",
package.json CHANGED
@@ -13,9 +13,11 @@
13
  "format": "prettier --plugin-search-dir . --write .",
14
  "test": "MONGODB_URL=mongodb://127.0.0.1:27017/ vitest",
15
  "updateLocalEnv": "node --loader ts-node/esm scripts/updateLocalEnv.ts",
16
- "updateProdEnv": "node --loader ts-node/esm scripts/updateProdEnv.ts"
 
17
  },
18
  "devDependencies": {
 
19
  "@iconify-json/carbon": "^1.1.16",
20
  "@iconify-json/eos-icons": "^1.1.6",
21
  "@sveltejs/adapter-node": "^1.3.1",
@@ -23,6 +25,7 @@
23
  "@tailwindcss/typography": "^0.5.9",
24
  "@types/jsdom": "^21.1.1",
25
  "@types/marked": "^4.0.8",
 
26
  "@types/parquetjs": "^0.10.3",
27
  "@types/uuid": "^9.0.8",
28
  "@typescript-eslint/eslint-plugin": "^6.x",
@@ -31,6 +34,7 @@
31
  "eslint-config-prettier": "^8.5.0",
32
  "eslint-plugin-svelte": "^2.30.0",
33
  "marked-katex-extension": "^3.0.6",
 
34
  "prettier": "^2.8.0",
35
  "prettier-plugin-svelte": "^2.10.1",
36
  "prettier-plugin-tailwindcss": "^0.2.7",
@@ -41,6 +45,7 @@
41
  "typescript": "^5.0.0",
42
  "unplugin-icons": "^0.16.1",
43
  "vite": "^4.5.2",
 
44
  "vitest": "^0.31.0"
45
  },
46
  "type": "module",
 
13
  "format": "prettier --plugin-search-dir . --write .",
14
  "test": "MONGODB_URL=mongodb://127.0.0.1:27017/ vitest",
15
  "updateLocalEnv": "node --loader ts-node/esm scripts/updateLocalEnv.ts",
16
+ "updateProdEnv": "node --loader ts-node/esm scripts/updateProdEnv.ts",
17
+ "populate": "vite-node --options.transformMode.ssr='/.*/' scripts/populate.ts"
18
  },
19
  "devDependencies": {
20
+ "@faker-js/faker": "^8.4.1",
21
  "@iconify-json/carbon": "^1.1.16",
22
  "@iconify-json/eos-icons": "^1.1.6",
23
  "@sveltejs/adapter-node": "^1.3.1",
 
25
  "@tailwindcss/typography": "^0.5.9",
26
  "@types/jsdom": "^21.1.1",
27
  "@types/marked": "^4.0.8",
28
+ "@types/minimist": "^1.2.5",
29
  "@types/parquetjs": "^0.10.3",
30
  "@types/uuid": "^9.0.8",
31
  "@typescript-eslint/eslint-plugin": "^6.x",
 
34
  "eslint-config-prettier": "^8.5.0",
35
  "eslint-plugin-svelte": "^2.30.0",
36
  "marked-katex-extension": "^3.0.6",
37
+ "minimist": "^1.2.8",
38
  "prettier": "^2.8.0",
39
  "prettier-plugin-svelte": "^2.10.1",
40
  "prettier-plugin-tailwindcss": "^0.2.7",
 
45
  "typescript": "^5.0.0",
46
  "unplugin-icons": "^0.16.1",
47
  "vite": "^4.5.2",
48
+ "vite-node": "^1.3.1",
49
  "vitest": "^0.31.0"
50
  },
51
  "type": "module",
scripts/populate.ts ADDED
@@ -0,0 +1,264 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import readline from "readline";
2
+ import minimist from "minimist";
3
+
4
+ // @ts-expect-error: vite-node makes the var available but the typescript compiler doesn't see them
5
+ import { MONGODB_URL } from "$env/static/private";
6
+
7
+ import { faker } from "@faker-js/faker";
8
+ import { ObjectId } from "mongodb";
9
+
10
+ import { collections } from "../src/lib/server/database.ts";
11
+ import { models } from "../src/lib/server/models.ts";
12
+ import type { User } from "../src/lib/types/User";
13
+ import type { Assistant } from "../src/lib/types/Assistant";
14
+ import type { Conversation } from "../src/lib/types/Conversation";
15
+ import type { Settings } from "../src/lib/types/Settings";
16
+ import { defaultEmbeddingModel } from "../src/lib/server/embeddingModels.ts";
17
+ import { Message } from "../src/lib/types/Message.ts";
18
+
19
+ import { addChildren } from "../src/lib/utils/tree/addChildren.ts";
20
+
21
+ const rl = readline.createInterface({
22
+ input: process.stdin,
23
+ output: process.stdout,
24
+ });
25
+
26
+ rl.on("close", function () {
27
+ process.exit(0);
28
+ });
29
+
30
+ const possibleFlags = ["reset", "all", "users", "settings", "assistants", "conversations"];
31
+ const argv = minimist(process.argv.slice(2));
32
+ const flags = argv["_"].filter((flag) => possibleFlags.includes(flag));
33
+
34
+ async function generateMessages(preprompt?: string): Promise<Message[]> {
35
+ const isLinear = faker.datatype.boolean(0.5);
36
+ const isInterrupted = faker.datatype.boolean(0.05);
37
+
38
+ const messages: Message[] = [];
39
+
40
+ messages.push({
41
+ id: crypto.randomUUID(),
42
+ from: "system",
43
+ content: preprompt ?? "",
44
+ createdAt: faker.date.recent({ days: 30 }),
45
+ updatedAt: faker.date.recent({ days: 30 }),
46
+ });
47
+
48
+ let isUser = true;
49
+ let lastId = messages[0].id;
50
+ if (isLinear) {
51
+ const convLength = faker.number.int({ min: 1, max: 25 }) * 2; // must always be even
52
+
53
+ for (let i = 0; i < convLength; i++) {
54
+ lastId = addChildren(
55
+ {
56
+ messages,
57
+ rootMessageId: messages[0].id,
58
+ },
59
+ {
60
+ from: isUser ? "user" : "assistant",
61
+ content: faker.lorem.sentence({
62
+ min: 10,
63
+ max: isUser ? 50 : 200,
64
+ }),
65
+ createdAt: faker.date.recent({ days: 30 }),
66
+ updatedAt: faker.date.recent({ days: 30 }),
67
+ interrupted: i === convLength - 1 && isInterrupted,
68
+ },
69
+ lastId
70
+ );
71
+ isUser = !isUser;
72
+ }
73
+ } else {
74
+ const convLength = faker.number.int({ min: 2, max: 200 });
75
+
76
+ for (let i = 0; i < convLength; i++) {
77
+ addChildren(
78
+ {
79
+ messages,
80
+ rootMessageId: messages[0].id,
81
+ },
82
+ {
83
+ from: isUser ? "user" : "assistant",
84
+ content: faker.lorem.sentence({
85
+ min: 10,
86
+ max: isUser ? 50 : 200,
87
+ }),
88
+ createdAt: faker.date.recent({ days: 30 }),
89
+ updatedAt: faker.date.recent({ days: 30 }),
90
+ interrupted: i === convLength - 1 && isInterrupted,
91
+ },
92
+ faker.helpers.arrayElement([
93
+ messages[0].id,
94
+ ...messages.filter((m) => m.from === (isUser ? "assistant" : "user")).map((m) => m.id),
95
+ ])
96
+ );
97
+
98
+ isUser = !isUser;
99
+ }
100
+ }
101
+ return messages;
102
+ }
103
+
104
+ async function seed() {
105
+ console.log("Seeding...");
106
+ const modelIds = models.map((model) => model.id);
107
+
108
+ if (flags.includes("reset")) {
109
+ console.log("Starting reset of DB");
110
+ await collections.users.deleteMany({});
111
+ await collections.settings.deleteMany({});
112
+ await collections.assistants.deleteMany({});
113
+ await collections.conversations.deleteMany({});
114
+ console.log("Reset done");
115
+ }
116
+
117
+ if (flags.includes("users") || flags.includes("all")) {
118
+ console.log("Creating 100 new users");
119
+ const newUsers: User[] = Array.from({ length: 100 }, () => ({
120
+ _id: new ObjectId(),
121
+ createdAt: faker.date.recent({ days: 30 }),
122
+ updatedAt: faker.date.recent({ days: 30 }),
123
+ username: faker.internet.userName(),
124
+ name: faker.person.fullName(),
125
+ hfUserId: faker.string.alphanumeric(24),
126
+ avatarUrl: faker.image.avatar(),
127
+ }));
128
+
129
+ await collections.users.insertMany(newUsers);
130
+ console.log("Done creating users.");
131
+ }
132
+
133
+ const users = await collections.users.find().toArray();
134
+ if (flags.includes("settings") || flags.includes("all")) {
135
+ console.log("Updating settings for all users");
136
+ users.forEach(async (user) => {
137
+ const settings: Settings = {
138
+ userId: user._id,
139
+ shareConversationsWithModelAuthors: faker.datatype.boolean(0.25),
140
+ hideEmojiOnSidebar: faker.datatype.boolean(0.25),
141
+ ethicsModalAcceptedAt: faker.date.recent({ days: 30 }),
142
+ activeModel: faker.helpers.arrayElement(modelIds),
143
+ createdAt: faker.date.recent({ days: 30 }),
144
+ updatedAt: faker.date.recent({ days: 30 }),
145
+ customPrompts: {},
146
+ assistants: [],
147
+ };
148
+ await collections.settings.updateOne(
149
+ { userId: user._id },
150
+ { $set: { ...settings } },
151
+ { upsert: true }
152
+ );
153
+ });
154
+ console.log("Done updating settings.");
155
+ }
156
+
157
+ if (flags.includes("assistants") || flags.includes("all")) {
158
+ console.log("Creating assistants for all users");
159
+ await Promise.all(
160
+ users.map(async (user) => {
161
+ const assistants = faker.helpers.multiple<Assistant>(
162
+ () => ({
163
+ _id: new ObjectId(),
164
+ name: faker.animal.insect(),
165
+ createdById: user._id,
166
+ createdByName: user.username,
167
+ createdAt: faker.date.recent({ days: 30 }),
168
+ updatedAt: faker.date.recent({ days: 30 }),
169
+ userCount: faker.number.int({ min: 1, max: 100000 }),
170
+ featured: faker.datatype.boolean(0.25),
171
+ modelId: faker.helpers.arrayElement(modelIds),
172
+ description: faker.lorem.sentence(),
173
+ preprompt: faker.hacker.phrase(),
174
+ exampleInputs: faker.helpers.multiple(() => faker.lorem.sentence(), {
175
+ count: faker.number.int({ min: 0, max: 4 }),
176
+ }),
177
+ }),
178
+ { count: faker.number.int({ min: 3, max: 10 }) }
179
+ );
180
+ await collections.assistants.insertMany(assistants);
181
+ await collections.settings.updateOne(
182
+ { userId: user._id },
183
+ { $set: { assistants: assistants.map((a) => a._id.toString()) } },
184
+ { upsert: true }
185
+ );
186
+ })
187
+ );
188
+ console.log("Done creating assistants.");
189
+ }
190
+
191
+ if (flags.includes("conversations") || flags.includes("all")) {
192
+ console.log("Creating conversations for all users");
193
+ await Promise.all(
194
+ users.map(async (user) => {
195
+ const conversations = faker.helpers.multiple(
196
+ async () => {
197
+ const settings = await collections.settings.findOne<Settings>({ userId: user._id });
198
+
199
+ const assistantId =
200
+ settings?.assistants && settings.assistants.length > 0 && faker.datatype.boolean(0.1)
201
+ ? faker.helpers.arrayElement<ObjectId>(settings.assistants)
202
+ : undefined;
203
+
204
+ const preprompt =
205
+ (assistantId
206
+ ? await collections.assistants
207
+ .findOne({ _id: assistantId })
208
+ .then((assistant: Assistant) => assistant?.preprompt ?? "")
209
+ : faker.helpers.maybe(() => faker.hacker.phrase(), { probability: 0.5 })) ?? "";
210
+
211
+ const messages = await generateMessages(preprompt);
212
+
213
+ const conv = {
214
+ _id: new ObjectId(),
215
+ userId: user._id,
216
+ assistantId,
217
+ preprompt,
218
+ createdAt: faker.date.recent({ days: 145 }),
219
+ updatedAt: faker.date.recent({ days: 145 }),
220
+ model: faker.helpers.arrayElement(modelIds),
221
+ title: faker.internet.emoji() + " " + faker.hacker.phrase(),
222
+ embeddingModel: defaultEmbeddingModel.id,
223
+ messages,
224
+ rootMessageId: messages[0].id,
225
+ } satisfies Conversation;
226
+
227
+ return conv;
228
+ },
229
+ { count: faker.number.int({ min: 10, max: 200 }) }
230
+ );
231
+
232
+ await collections.conversations.insertMany(await Promise.all(conversations));
233
+ })
234
+ );
235
+ console.log("Done creating conversations.");
236
+ }
237
+ }
238
+
239
+ // run seed
240
+ (async () => {
241
+ try {
242
+ rl.question(
243
+ "You're about to run a seeding script on the following MONGODB_URL: \x1b[31m" +
244
+ MONGODB_URL +
245
+ "\x1b[0m\n\n With the following flags: \x1b[31m" +
246
+ flags.join("\x1b[0m , \x1b[31m") +
247
+ "\x1b[0m\n \n\n Are you sure you want to continue? (yes/no): ",
248
+ async (confirm) => {
249
+ if (confirm !== "yes") {
250
+ console.log("Not 'yes', exiting.");
251
+ rl.close();
252
+ process.exit(0);
253
+ }
254
+ console.log("Starting seeding...");
255
+ await seed();
256
+ console.log("Seeding done.");
257
+ rl.close();
258
+ }
259
+ );
260
+ } catch (e) {
261
+ console.error(e);
262
+ process.exit(1);
263
+ }
264
+ })();