├── .env.exemple ├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── src ├── bot.ts ├── config.ts ├── index.ts └── qdrantService.ts └── tsconfig.json /.env.exemple: -------------------------------------------------------------------------------- 1 | # Configuration Qdrant 2 | QDRANT_URL="qdrant_url" 3 | QDRANT_API_KEY="qdrant_api_key" -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.env 2 | /node_modules -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Quick-RAG : Tutoriel sur les bases vectorielles avec Qdrant et HuggingFace 2 | 3 | Ce projet est un tutoriel pratique pour comprendre comment stocker et interroger des données dans une base vectorielle Qdrant, en mettant l'accent sur l'importance du choix des modèles d'embedding et leurs dimensions. 4 | 5 | ## 🎯 Objectifs du tutoriel 6 | 7 | - Comprendre le fonctionnement d'une base de données vectorielle (Qdrant) 8 | - Apprendre à utiliser différents modèles d'embedding selon les besoins 9 | - Maîtriser l'importance de la dimension des vecteurs dans les collections 10 | - Implémenter une recherche sémantique simple avec TypeScript 11 | 12 | ## 🧩 Concepts clés 13 | 14 | ### Bases de données vectorielles 15 | 16 | Les bases de données vectorielles comme Qdrant permettent de stocker des données sous forme de vecteurs et d'effectuer des recherches par similarité. Contrairement aux bases de données traditionnelles qui recherchent des correspondances exactes, les bases vectorielles trouvent les éléments les plus "proches" sémantiquement. 17 | 18 | ### Modèles d'embedding 19 | 20 | Les modèles d'embedding transforment du texte en vecteurs numériques qui capturent le sens sémantique. Ce projet utilise deux modèles différents de HuggingFace : 21 | 22 | - **sentence-transformers/bert-base-nli-mean-tokens** : Génère des vecteurs de dimension 768 23 | - **sentence-transformers/all-MiniLM-L6-v2** : Génère des vecteurs de dimension 384 24 | 25 | ### Importance de la dimension des vecteurs 26 | 27 | La dimension des vecteurs est cruciale pour plusieurs raisons : 28 | - Elle doit correspondre exactement à celle définie dans la collection Qdrant 29 | - Les dimensions plus élevées peuvent capturer plus de nuances sémantiques 30 | - Les dimensions plus faibles sont plus efficaces en termes de stockage et de vitesse de recherche 31 | 32 | ## 🛠️ Structure du projet 33 | 34 | ``` 35 | quick-rag/ 36 | ├── src/ 37 | │ ├── index.ts # Point d'entrée principal 38 | │ ├── qdrantService.ts # Service pour l'interaction avec Qdrant 39 | │ └── bot.ts # Logique de recherche et démonstration 40 | ├── .env # Configuration (URL Qdrant, clés API) 41 | ├── .env.exemple # Exemple de configuration 42 | ├── package.json # Dépendances 43 | └── tsconfig.json # Configuration TypeScript 44 | ``` 45 | 46 | ## 📋 Prérequis 47 | 48 | - Node.js (16+) 49 | - npm ou yarn 50 | - Une instance Qdrant (cloud ou locale) avec la doc Qdrant en collection 51 | - Accès aux modèles HuggingFace 52 | 53 | ## 🚀 Installation 54 | 55 | 1. Clonez ce dépôt 56 | 2. Installez les dépendances : 57 | ```bash 58 | npm install 59 | ``` 60 | 3. Configurez votre fichier `.env` en vous basant sur `.env.exemple` : 61 | ``` 62 | QDRANT_URL="votre_url_qdrant" 63 | QDRANT_API_KEY="votre_clé_api" 64 | ``` 65 | 66 | ## 💡 Fonctionnement du projet 67 | 68 | ### 1. Service Qdrant (`qdrantService.ts`) 69 | 70 | Ce service gère l'interaction avec la base de données Qdrant : 71 | - Création de collections avec une dimension spécifique 72 | - Chargement de données depuis un fichier CSV 73 | - Conversion des données en vecteurs et stockage dans Qdrant 74 | 75 | ```typescript 76 | // Exemple de création d'une collection 77 | await this.client.createCollection(this.collectionName, { 78 | vectors: { size: dimension, distance: "Cosine" } 79 | }); 80 | ``` 81 | 82 | ### 2. Gestion des embeddings (`bot.ts`) 83 | 84 | Le fichier `bot.ts` montre comment utiliser différents modèles d'embedding selon la collection : 85 | 86 | ```typescript 87 | // Sélection du modèle selon la collection 88 | const embedding = await new HuggingFaceEmbedding({ 89 | modelType: collectionName === "salim_embeddings" 90 | ? "sentence-transformers/bert-base-nli-mean-tokens" // 768 dimensions 91 | : "sentence-transformers/all-MiniLM-L6-v2", // 384 dimensions 92 | quantized: false, 93 | }).getTextEmbedding(query); 94 | ``` 95 | 96 | ### 3. Recherche sémantique 97 | 98 | Le projet démontre comment effectuer une recherche sémantique dans Qdrant : 99 | - Conversion de la requête en vecteur avec le même modèle que la collection 100 | - Recherche des vecteurs les plus similaires dans Qdrant 101 | - Affichage des résultats avec leur score de similarité 102 | 103 | ## 🔍 Exemple pratique 104 | 105 | Le projet inclut deux collections d'exemple : 106 | - `salim_embeddings` : Utilise des vecteurs de 768 dimensions (BERT) 107 | - `qdrant-doc` : Utilise des vecteurs de 384 dimensions (MiniLM) 108 | 109 | Pour chaque collection, une requête différente est utilisée pour démontrer la recherche sémantique. 110 | 111 | ## 🧪 Exécution du projet 112 | 113 | ```bash 114 | npm run dev 115 | ``` 116 | 117 | Cette commande : 118 | 1. Initialise la connexion à Qdrant 119 | 2. Crée la collection si elle n'existe pas déjà 120 | 3. Charge les données depuis le CSV (si nécessaire) 121 | 4. Exécute une requête de démonstration 122 | 5. Affiche les résultats au format JSON 123 | 124 | ## 📊 Résultats et interprétation 125 | 126 | Les résultats montrent : 127 | - Le score de similarité (en pourcentage) 128 | - Le texte correspondant 129 | - Des métadonnées supplémentaires (si disponibles) 130 | 131 | Plus le score est élevé, plus le résultat est sémantiquement proche de la requête. 132 | 133 | ## 🔄 Changement de collection et de modèle 134 | 135 | Pour tester différentes configurations : 136 | 1. Modifiez la variable `collectionName` dans `bot.ts` 137 | 2. Le modèle d'embedding approprié sera automatiquement sélectionné 138 | 3. Assurez-vous que la dimension correspond à celle définie dans la collection 139 | 140 | ## 🚧 Limitations et considérations 141 | 142 | - Les dimensions des vecteurs doivent correspondre exactement entre le modèle et la collection 143 | - Les performances de recherche dépendent de la qualité du modèle d'embedding 144 | - Différents modèles peuvent donner des résultats très différents pour la même requête 145 | 146 | ## 🔮 Extensions possibles 147 | 148 | - Implémenter un système RAG complet avec génération de réponses 149 | - Ajouter plus de modèles d'embedding pour comparaison 150 | - Intégrer des mécanismes de filtrage par métadonnées 151 | - Créer une interface utilisateur pour tester différentes requêtes 152 | 153 | ## 📚 Ressources supplémentaires 154 | 155 | - [Documentation Qdrant](https://qdrant.tech/documentation/) 156 | - [HuggingFace Sentence Transformers](https://huggingface.co/sentence-transformers) 157 | 158 | 159 | ## 📝 Conclusion 160 | 161 | Ce tutoriel vous a montré l'importance du choix des modèles d'embedding et de leurs dimensions dans le contexte des bases de données vectorielles. En comprenant ces concepts, vous pouvez construire des systèmes de recherche sémantique plus efficaces et plus précis. -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "quick-rag", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "quick-rag", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "@huggingface/inference": "^3.4.0", 13 | "@llamaindex/core": "^0.5.3", 14 | "@llamaindex/huggingface": "^0.0.39", 15 | "@llamaindex/openai": "^0.1.55", 16 | "@llamaindex/qdrant": "^0.1.3", 17 | "@qdrant/js-client-rest": "^1.13.0", 18 | "dotenv": "^16.4.7", 19 | "llamaindex": "^0.9.4", 20 | "openai": "^4.86.0", 21 | "papaparse": "^5.5.2" 22 | }, 23 | "devDependencies": { 24 | "@types/node": "^20.11.19", 25 | "@types/papaparse": "^5.3.15", 26 | "ts-node": "^10.9.2", 27 | "typescript": "^5.3.3" 28 | } 29 | }, 30 | "node_modules/@cspotcode/source-map-support": { 31 | "version": "0.8.1", 32 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 33 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 34 | "dev": true, 35 | "license": "MIT", 36 | "dependencies": { 37 | "@jridgewell/trace-mapping": "0.3.9" 38 | }, 39 | "engines": { 40 | "node": ">=12" 41 | } 42 | }, 43 | "node_modules/@emnapi/runtime": { 44 | "version": "1.3.1", 45 | "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", 46 | "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", 47 | "license": "MIT", 48 | "optional": true, 49 | "dependencies": { 50 | "tslib": "^2.4.0" 51 | } 52 | }, 53 | "node_modules/@fastify/busboy": { 54 | "version": "2.1.1", 55 | "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz", 56 | "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==", 57 | "license": "MIT", 58 | "engines": { 59 | "node": ">=14" 60 | } 61 | }, 62 | "node_modules/@huggingface/inference": { 63 | "version": "3.4.0", 64 | "resolved": "https://registry.npmjs.org/@huggingface/inference/-/inference-3.4.0.tgz", 65 | "integrity": "sha512-jb6MG+dP0YejL9svbyQryBO/15852i+3ULBg6DS0Ujw/PKrSdyrMb7AZQqH7rGCOS3wiYcdKjH0GeMBxR049IA==", 66 | "license": "MIT", 67 | "dependencies": { 68 | "@huggingface/tasks": "^0.16.4" 69 | }, 70 | "engines": { 71 | "node": ">=18" 72 | } 73 | }, 74 | "node_modules/@huggingface/jinja": { 75 | "version": "0.3.3", 76 | "resolved": "https://registry.npmjs.org/@huggingface/jinja/-/jinja-0.3.3.tgz", 77 | "integrity": "sha512-vQQr2JyWvVFba3Lj9es4q9vCl1sAc74fdgnEMoX8qHrXtswap9ge9uO3ONDzQB0cQ0PUyaKY2N6HaVbTBvSXvw==", 78 | "license": "MIT", 79 | "engines": { 80 | "node": ">=18" 81 | } 82 | }, 83 | "node_modules/@huggingface/tasks": { 84 | "version": "0.16.4", 85 | "resolved": "https://registry.npmjs.org/@huggingface/tasks/-/tasks-0.16.4.tgz", 86 | "integrity": "sha512-KMpJXtTSvF83yPTtk23jkNfp7lOnULLThbCor86pfIJR7BqrA7IgzFL9HbpayKsF7Pcdi18YTNuu8kLvVzNi7g==", 87 | "license": "MIT" 88 | }, 89 | "node_modules/@huggingface/transformers": { 90 | "version": "3.3.3", 91 | "resolved": "https://registry.npmjs.org/@huggingface/transformers/-/transformers-3.3.3.tgz", 92 | "integrity": "sha512-OcMubhBjW6u1xnp0zSt5SvCxdGHuhP2k+w2Vlm3i0vNcTJhJTZWxxYQmPBfcb7PX+Q6c43lGSzWD6tsJFwka4Q==", 93 | "license": "Apache-2.0", 94 | "dependencies": { 95 | "@huggingface/jinja": "^0.3.3", 96 | "onnxruntime-node": "1.20.1", 97 | "onnxruntime-web": "1.21.0-dev.20250206-d981b153d3", 98 | "sharp": "^0.33.5" 99 | } 100 | }, 101 | "node_modules/@img/sharp-darwin-arm64": { 102 | "version": "0.33.5", 103 | "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", 104 | "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", 105 | "cpu": [ 106 | "arm64" 107 | ], 108 | "license": "Apache-2.0", 109 | "optional": true, 110 | "os": [ 111 | "darwin" 112 | ], 113 | "engines": { 114 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 115 | }, 116 | "funding": { 117 | "url": "https://opencollective.com/libvips" 118 | }, 119 | "optionalDependencies": { 120 | "@img/sharp-libvips-darwin-arm64": "1.0.4" 121 | } 122 | }, 123 | "node_modules/@img/sharp-darwin-x64": { 124 | "version": "0.33.5", 125 | "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", 126 | "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", 127 | "cpu": [ 128 | "x64" 129 | ], 130 | "license": "Apache-2.0", 131 | "optional": true, 132 | "os": [ 133 | "darwin" 134 | ], 135 | "engines": { 136 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 137 | }, 138 | "funding": { 139 | "url": "https://opencollective.com/libvips" 140 | }, 141 | "optionalDependencies": { 142 | "@img/sharp-libvips-darwin-x64": "1.0.4" 143 | } 144 | }, 145 | "node_modules/@img/sharp-libvips-darwin-arm64": { 146 | "version": "1.0.4", 147 | "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", 148 | "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", 149 | "cpu": [ 150 | "arm64" 151 | ], 152 | "license": "LGPL-3.0-or-later", 153 | "optional": true, 154 | "os": [ 155 | "darwin" 156 | ], 157 | "funding": { 158 | "url": "https://opencollective.com/libvips" 159 | } 160 | }, 161 | "node_modules/@img/sharp-libvips-darwin-x64": { 162 | "version": "1.0.4", 163 | "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", 164 | "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", 165 | "cpu": [ 166 | "x64" 167 | ], 168 | "license": "LGPL-3.0-or-later", 169 | "optional": true, 170 | "os": [ 171 | "darwin" 172 | ], 173 | "funding": { 174 | "url": "https://opencollective.com/libvips" 175 | } 176 | }, 177 | "node_modules/@img/sharp-libvips-linux-arm": { 178 | "version": "1.0.5", 179 | "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", 180 | "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", 181 | "cpu": [ 182 | "arm" 183 | ], 184 | "license": "LGPL-3.0-or-later", 185 | "optional": true, 186 | "os": [ 187 | "linux" 188 | ], 189 | "funding": { 190 | "url": "https://opencollective.com/libvips" 191 | } 192 | }, 193 | "node_modules/@img/sharp-libvips-linux-arm64": { 194 | "version": "1.0.4", 195 | "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", 196 | "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", 197 | "cpu": [ 198 | "arm64" 199 | ], 200 | "license": "LGPL-3.0-or-later", 201 | "optional": true, 202 | "os": [ 203 | "linux" 204 | ], 205 | "funding": { 206 | "url": "https://opencollective.com/libvips" 207 | } 208 | }, 209 | "node_modules/@img/sharp-libvips-linux-s390x": { 210 | "version": "1.0.4", 211 | "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", 212 | "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", 213 | "cpu": [ 214 | "s390x" 215 | ], 216 | "license": "LGPL-3.0-or-later", 217 | "optional": true, 218 | "os": [ 219 | "linux" 220 | ], 221 | "funding": { 222 | "url": "https://opencollective.com/libvips" 223 | } 224 | }, 225 | "node_modules/@img/sharp-libvips-linux-x64": { 226 | "version": "1.0.4", 227 | "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", 228 | "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", 229 | "cpu": [ 230 | "x64" 231 | ], 232 | "license": "LGPL-3.0-or-later", 233 | "optional": true, 234 | "os": [ 235 | "linux" 236 | ], 237 | "funding": { 238 | "url": "https://opencollective.com/libvips" 239 | } 240 | }, 241 | "node_modules/@img/sharp-libvips-linuxmusl-arm64": { 242 | "version": "1.0.4", 243 | "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", 244 | "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", 245 | "cpu": [ 246 | "arm64" 247 | ], 248 | "license": "LGPL-3.0-or-later", 249 | "optional": true, 250 | "os": [ 251 | "linux" 252 | ], 253 | "funding": { 254 | "url": "https://opencollective.com/libvips" 255 | } 256 | }, 257 | "node_modules/@img/sharp-libvips-linuxmusl-x64": { 258 | "version": "1.0.4", 259 | "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", 260 | "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", 261 | "cpu": [ 262 | "x64" 263 | ], 264 | "license": "LGPL-3.0-or-later", 265 | "optional": true, 266 | "os": [ 267 | "linux" 268 | ], 269 | "funding": { 270 | "url": "https://opencollective.com/libvips" 271 | } 272 | }, 273 | "node_modules/@img/sharp-linux-arm": { 274 | "version": "0.33.5", 275 | "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", 276 | "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", 277 | "cpu": [ 278 | "arm" 279 | ], 280 | "license": "Apache-2.0", 281 | "optional": true, 282 | "os": [ 283 | "linux" 284 | ], 285 | "engines": { 286 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 287 | }, 288 | "funding": { 289 | "url": "https://opencollective.com/libvips" 290 | }, 291 | "optionalDependencies": { 292 | "@img/sharp-libvips-linux-arm": "1.0.5" 293 | } 294 | }, 295 | "node_modules/@img/sharp-linux-arm64": { 296 | "version": "0.33.5", 297 | "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", 298 | "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", 299 | "cpu": [ 300 | "arm64" 301 | ], 302 | "license": "Apache-2.0", 303 | "optional": true, 304 | "os": [ 305 | "linux" 306 | ], 307 | "engines": { 308 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 309 | }, 310 | "funding": { 311 | "url": "https://opencollective.com/libvips" 312 | }, 313 | "optionalDependencies": { 314 | "@img/sharp-libvips-linux-arm64": "1.0.4" 315 | } 316 | }, 317 | "node_modules/@img/sharp-linux-s390x": { 318 | "version": "0.33.5", 319 | "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", 320 | "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", 321 | "cpu": [ 322 | "s390x" 323 | ], 324 | "license": "Apache-2.0", 325 | "optional": true, 326 | "os": [ 327 | "linux" 328 | ], 329 | "engines": { 330 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 331 | }, 332 | "funding": { 333 | "url": "https://opencollective.com/libvips" 334 | }, 335 | "optionalDependencies": { 336 | "@img/sharp-libvips-linux-s390x": "1.0.4" 337 | } 338 | }, 339 | "node_modules/@img/sharp-linux-x64": { 340 | "version": "0.33.5", 341 | "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", 342 | "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", 343 | "cpu": [ 344 | "x64" 345 | ], 346 | "license": "Apache-2.0", 347 | "optional": true, 348 | "os": [ 349 | "linux" 350 | ], 351 | "engines": { 352 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 353 | }, 354 | "funding": { 355 | "url": "https://opencollective.com/libvips" 356 | }, 357 | "optionalDependencies": { 358 | "@img/sharp-libvips-linux-x64": "1.0.4" 359 | } 360 | }, 361 | "node_modules/@img/sharp-linuxmusl-arm64": { 362 | "version": "0.33.5", 363 | "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", 364 | "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", 365 | "cpu": [ 366 | "arm64" 367 | ], 368 | "license": "Apache-2.0", 369 | "optional": true, 370 | "os": [ 371 | "linux" 372 | ], 373 | "engines": { 374 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 375 | }, 376 | "funding": { 377 | "url": "https://opencollective.com/libvips" 378 | }, 379 | "optionalDependencies": { 380 | "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" 381 | } 382 | }, 383 | "node_modules/@img/sharp-linuxmusl-x64": { 384 | "version": "0.33.5", 385 | "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", 386 | "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", 387 | "cpu": [ 388 | "x64" 389 | ], 390 | "license": "Apache-2.0", 391 | "optional": true, 392 | "os": [ 393 | "linux" 394 | ], 395 | "engines": { 396 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 397 | }, 398 | "funding": { 399 | "url": "https://opencollective.com/libvips" 400 | }, 401 | "optionalDependencies": { 402 | "@img/sharp-libvips-linuxmusl-x64": "1.0.4" 403 | } 404 | }, 405 | "node_modules/@img/sharp-wasm32": { 406 | "version": "0.33.5", 407 | "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", 408 | "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", 409 | "cpu": [ 410 | "wasm32" 411 | ], 412 | "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", 413 | "optional": true, 414 | "dependencies": { 415 | "@emnapi/runtime": "^1.2.0" 416 | }, 417 | "engines": { 418 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 419 | }, 420 | "funding": { 421 | "url": "https://opencollective.com/libvips" 422 | } 423 | }, 424 | "node_modules/@img/sharp-win32-ia32": { 425 | "version": "0.33.5", 426 | "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", 427 | "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", 428 | "cpu": [ 429 | "ia32" 430 | ], 431 | "license": "Apache-2.0 AND LGPL-3.0-or-later", 432 | "optional": true, 433 | "os": [ 434 | "win32" 435 | ], 436 | "engines": { 437 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 438 | }, 439 | "funding": { 440 | "url": "https://opencollective.com/libvips" 441 | } 442 | }, 443 | "node_modules/@img/sharp-win32-x64": { 444 | "version": "0.33.5", 445 | "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", 446 | "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", 447 | "cpu": [ 448 | "x64" 449 | ], 450 | "license": "Apache-2.0 AND LGPL-3.0-or-later", 451 | "optional": true, 452 | "os": [ 453 | "win32" 454 | ], 455 | "engines": { 456 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 457 | }, 458 | "funding": { 459 | "url": "https://opencollective.com/libvips" 460 | } 461 | }, 462 | "node_modules/@isaacs/cliui": { 463 | "version": "8.0.2", 464 | "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", 465 | "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", 466 | "license": "ISC", 467 | "dependencies": { 468 | "string-width": "^5.1.2", 469 | "string-width-cjs": "npm:string-width@^4.2.0", 470 | "strip-ansi": "^7.0.1", 471 | "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", 472 | "wrap-ansi": "^8.1.0", 473 | "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" 474 | }, 475 | "engines": { 476 | "node": ">=12" 477 | } 478 | }, 479 | "node_modules/@isaacs/fs-minipass": { 480 | "version": "4.0.1", 481 | "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", 482 | "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", 483 | "license": "ISC", 484 | "dependencies": { 485 | "minipass": "^7.0.4" 486 | }, 487 | "engines": { 488 | "node": ">=18.0.0" 489 | } 490 | }, 491 | "node_modules/@jridgewell/resolve-uri": { 492 | "version": "3.1.2", 493 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 494 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 495 | "dev": true, 496 | "license": "MIT", 497 | "engines": { 498 | "node": ">=6.0.0" 499 | } 500 | }, 501 | "node_modules/@jridgewell/sourcemap-codec": { 502 | "version": "1.5.0", 503 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 504 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", 505 | "dev": true, 506 | "license": "MIT" 507 | }, 508 | "node_modules/@jridgewell/trace-mapping": { 509 | "version": "0.3.9", 510 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 511 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 512 | "dev": true, 513 | "license": "MIT", 514 | "dependencies": { 515 | "@jridgewell/resolve-uri": "^3.0.3", 516 | "@jridgewell/sourcemap-codec": "^1.4.10" 517 | } 518 | }, 519 | "node_modules/@llamaindex/core": { 520 | "version": "0.5.3", 521 | "resolved": "https://registry.npmjs.org/@llamaindex/core/-/core-0.5.3.tgz", 522 | "integrity": "sha512-bcikLmtJ/jJXnz0e6bej38L1RwyQQxFj8VX8TP6Js2b/UUSET4rMYxtT+sBIDXGSEy143vnq7F3+SSphB3yCRQ==", 523 | "dependencies": { 524 | "@llamaindex/env": "0.1.28", 525 | "@types/node": "^22.9.0", 526 | "magic-bytes.js": "^1.10.0", 527 | "zod": "^3.23.8", 528 | "zod-to-json-schema": "^3.23.3" 529 | } 530 | }, 531 | "node_modules/@llamaindex/core/node_modules/@types/node": { 532 | "version": "22.13.5", 533 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.5.tgz", 534 | "integrity": "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==", 535 | "license": "MIT", 536 | "dependencies": { 537 | "undici-types": "~6.20.0" 538 | } 539 | }, 540 | "node_modules/@llamaindex/core/node_modules/undici-types": { 541 | "version": "6.20.0", 542 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", 543 | "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", 544 | "license": "MIT" 545 | }, 546 | "node_modules/@llamaindex/env": { 547 | "version": "0.1.28", 548 | "resolved": "https://registry.npmjs.org/@llamaindex/env/-/env-0.1.28.tgz", 549 | "integrity": "sha512-ktAS9I2bJprUilBKpNLLGc2uHGyhFTVWaslSCord0PH4pTTs6OenJdtvG+ZaVkJZg6CLUZDF2e7Hcjwn/NzU+A==", 550 | "peerDependencies": { 551 | "@aws-crypto/sha256-js": "^5.2.0", 552 | "@huggingface/transformers": "^3.0.2", 553 | "gpt-tokenizer": "^2.5.0", 554 | "js-tiktoken": "^1.0.12", 555 | "pathe": "^1.1.2" 556 | }, 557 | "peerDependenciesMeta": { 558 | "@aws-crypto/sha256-js": { 559 | "optional": true 560 | }, 561 | "@huggingface/transformers": { 562 | "optional": true 563 | }, 564 | "js-tiktoken": { 565 | "optional": true 566 | }, 567 | "pathe": { 568 | "optional": true 569 | }, 570 | "tiktoken": { 571 | "optional": true 572 | } 573 | } 574 | }, 575 | "node_modules/@llamaindex/huggingface": { 576 | "version": "0.0.39", 577 | "resolved": "https://registry.npmjs.org/@llamaindex/huggingface/-/huggingface-0.0.39.tgz", 578 | "integrity": "sha512-CFni7yNoewDs8vc/ZHfvgeTYxHi4i9HOYZSwOmOk2ZPTeyehUJvEMl4xHIoYzUqDbFSG0KFVbk7bQ8ctSnplcg==", 579 | "dependencies": { 580 | "@huggingface/inference": "^2.8.1", 581 | "@huggingface/transformers": "^3.0.2", 582 | "@llamaindex/core": "0.5.3", 583 | "@llamaindex/env": "0.1.28", 584 | "@llamaindex/openai": "0.1.55" 585 | }, 586 | "peerDependencies": { 587 | "@huggingface/transformers": "^3.0.2" 588 | } 589 | }, 590 | "node_modules/@llamaindex/huggingface/node_modules/@huggingface/inference": { 591 | "version": "2.8.1", 592 | "resolved": "https://registry.npmjs.org/@huggingface/inference/-/inference-2.8.1.tgz", 593 | "integrity": "sha512-EfsNtY9OR6JCNaUa5bZu2mrs48iqeTz0Gutwf+fU0Kypx33xFQB4DKMhp8u4Ee6qVbLbNWvTHuWwlppLQl4p4Q==", 594 | "license": "MIT", 595 | "dependencies": { 596 | "@huggingface/tasks": "^0.12.9" 597 | }, 598 | "engines": { 599 | "node": ">=18" 600 | } 601 | }, 602 | "node_modules/@llamaindex/huggingface/node_modules/@huggingface/tasks": { 603 | "version": "0.12.30", 604 | "resolved": "https://registry.npmjs.org/@huggingface/tasks/-/tasks-0.12.30.tgz", 605 | "integrity": "sha512-A1ITdxbEzx9L8wKR8pF7swyrTLxWNDFIGDLUWInxvks2ruQ8PLRBZe8r0EcjC3CDdtlj9jV1V4cgV35K/iy3GQ==", 606 | "license": "MIT" 607 | }, 608 | "node_modules/@llamaindex/openai": { 609 | "version": "0.1.55", 610 | "resolved": "https://registry.npmjs.org/@llamaindex/openai/-/openai-0.1.55.tgz", 611 | "integrity": "sha512-cvmM5CKszynKctKF/fa0kec6RZb2W266qTbi+MjWwZEs3XGdV8Q8LTZNuDX29QIZbH7SQyX6rHfnf6FE4/WBlQ==", 612 | "dependencies": { 613 | "@llamaindex/core": "0.5.3", 614 | "@llamaindex/env": "0.1.28", 615 | "openai": "^4.86.0" 616 | } 617 | }, 618 | "node_modules/@llamaindex/qdrant": { 619 | "version": "0.1.3", 620 | "resolved": "https://registry.npmjs.org/@llamaindex/qdrant/-/qdrant-0.1.3.tgz", 621 | "integrity": "sha512-jZr7ia5s4TZCHfaRCFKsAf+16XcQ2Um+F4Nq7M3b9CvpZubClss565CJADWxw/+M6oTOimfNR8KwwMMRwQh4Ag==", 622 | "dependencies": { 623 | "@llamaindex/core": "0.5.3", 624 | "@llamaindex/env": "0.1.28", 625 | "@qdrant/js-client-rest": "^1.11.0" 626 | } 627 | }, 628 | "node_modules/@pkgjs/parseargs": { 629 | "version": "0.11.0", 630 | "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", 631 | "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", 632 | "license": "MIT", 633 | "optional": true, 634 | "engines": { 635 | "node": ">=14" 636 | } 637 | }, 638 | "node_modules/@protobufjs/aspromise": { 639 | "version": "1.1.2", 640 | "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", 641 | "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", 642 | "license": "BSD-3-Clause" 643 | }, 644 | "node_modules/@protobufjs/base64": { 645 | "version": "1.1.2", 646 | "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", 647 | "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", 648 | "license": "BSD-3-Clause" 649 | }, 650 | "node_modules/@protobufjs/codegen": { 651 | "version": "2.0.4", 652 | "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", 653 | "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", 654 | "license": "BSD-3-Clause" 655 | }, 656 | "node_modules/@protobufjs/eventemitter": { 657 | "version": "1.1.0", 658 | "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", 659 | "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", 660 | "license": "BSD-3-Clause" 661 | }, 662 | "node_modules/@protobufjs/fetch": { 663 | "version": "1.1.0", 664 | "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", 665 | "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", 666 | "license": "BSD-3-Clause", 667 | "dependencies": { 668 | "@protobufjs/aspromise": "^1.1.1", 669 | "@protobufjs/inquire": "^1.1.0" 670 | } 671 | }, 672 | "node_modules/@protobufjs/float": { 673 | "version": "1.0.2", 674 | "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", 675 | "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", 676 | "license": "BSD-3-Clause" 677 | }, 678 | "node_modules/@protobufjs/inquire": { 679 | "version": "1.1.0", 680 | "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", 681 | "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", 682 | "license": "BSD-3-Clause" 683 | }, 684 | "node_modules/@protobufjs/path": { 685 | "version": "1.1.2", 686 | "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", 687 | "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", 688 | "license": "BSD-3-Clause" 689 | }, 690 | "node_modules/@protobufjs/pool": { 691 | "version": "1.1.0", 692 | "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", 693 | "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", 694 | "license": "BSD-3-Clause" 695 | }, 696 | "node_modules/@protobufjs/utf8": { 697 | "version": "1.1.0", 698 | "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", 699 | "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", 700 | "license": "BSD-3-Clause" 701 | }, 702 | "node_modules/@qdrant/js-client-rest": { 703 | "version": "1.13.0", 704 | "resolved": "https://registry.npmjs.org/@qdrant/js-client-rest/-/js-client-rest-1.13.0.tgz", 705 | "integrity": "sha512-bewMtnXlGvhhnfXsp0sLoLXOGvnrCM15z9lNlG0Snp021OedNAnRtKkerjk5vkOcbQWUmJHXYCuxDfcT93aSkA==", 706 | "license": "Apache-2.0", 707 | "dependencies": { 708 | "@qdrant/openapi-typescript-fetch": "1.2.6", 709 | "@sevinf/maybe": "0.5.0", 710 | "undici": "~5.28.4" 711 | }, 712 | "engines": { 713 | "node": ">=18.0.0", 714 | "pnpm": ">=8" 715 | }, 716 | "peerDependencies": { 717 | "typescript": ">=4.7" 718 | } 719 | }, 720 | "node_modules/@qdrant/openapi-typescript-fetch": { 721 | "version": "1.2.6", 722 | "resolved": "https://registry.npmjs.org/@qdrant/openapi-typescript-fetch/-/openapi-typescript-fetch-1.2.6.tgz", 723 | "integrity": "sha512-oQG/FejNpItrxRHoyctYvT3rwGZOnK4jr3JdppO/c78ktDvkWiPXPHNsrDf33K9sZdRb6PR7gi4noIapu5q4HA==", 724 | "license": "MIT", 725 | "engines": { 726 | "node": ">=18.0.0", 727 | "pnpm": ">=8" 728 | } 729 | }, 730 | "node_modules/@selderee/plugin-htmlparser2": { 731 | "version": "0.11.0", 732 | "resolved": "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz", 733 | "integrity": "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==", 734 | "license": "MIT", 735 | "dependencies": { 736 | "domhandler": "^5.0.3", 737 | "selderee": "^0.11.0" 738 | }, 739 | "funding": { 740 | "url": "https://ko-fi.com/killymxi" 741 | } 742 | }, 743 | "node_modules/@sevinf/maybe": { 744 | "version": "0.5.0", 745 | "resolved": "https://registry.npmjs.org/@sevinf/maybe/-/maybe-0.5.0.tgz", 746 | "integrity": "sha512-ARhyoYDnY1LES3vYI0fiG6e9esWfTNcXcO6+MPJJXcnyMV3bim4lnFt45VXouV7y82F4x3YH8nOQ6VztuvUiWg==", 747 | "license": "MIT" 748 | }, 749 | "node_modules/@tsconfig/node10": { 750 | "version": "1.0.11", 751 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", 752 | "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", 753 | "dev": true, 754 | "license": "MIT" 755 | }, 756 | "node_modules/@tsconfig/node12": { 757 | "version": "1.0.11", 758 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", 759 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", 760 | "dev": true, 761 | "license": "MIT" 762 | }, 763 | "node_modules/@tsconfig/node14": { 764 | "version": "1.0.3", 765 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", 766 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", 767 | "dev": true, 768 | "license": "MIT" 769 | }, 770 | "node_modules/@tsconfig/node16": { 771 | "version": "1.0.4", 772 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", 773 | "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", 774 | "dev": true, 775 | "license": "MIT" 776 | }, 777 | "node_modules/@types/lodash": { 778 | "version": "4.17.15", 779 | "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.15.tgz", 780 | "integrity": "sha512-w/P33JFeySuhN6JLkysYUK2gEmy9kHHFN7E8ro0tkfmlDOgxBDzWEZ/J8cWA+fHqFevpswDTFZnDx+R9lbL6xw==", 781 | "license": "MIT" 782 | }, 783 | "node_modules/@types/node": { 784 | "version": "20.17.19", 785 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.19.tgz", 786 | "integrity": "sha512-LEwC7o1ifqg/6r2gn9Dns0f1rhK+fPFDoMiceTJ6kWmVk6bgXBI/9IOWfVan4WiAavK9pIVWdX0/e3J+eEUh5A==", 787 | "license": "MIT", 788 | "dependencies": { 789 | "undici-types": "~6.19.2" 790 | } 791 | }, 792 | "node_modules/@types/node-fetch": { 793 | "version": "2.6.12", 794 | "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.12.tgz", 795 | "integrity": "sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==", 796 | "license": "MIT", 797 | "dependencies": { 798 | "@types/node": "*", 799 | "form-data": "^4.0.0" 800 | } 801 | }, 802 | "node_modules/@types/papaparse": { 803 | "version": "5.3.15", 804 | "resolved": "https://registry.npmjs.org/@types/papaparse/-/papaparse-5.3.15.tgz", 805 | "integrity": "sha512-JHe6vF6x/8Z85nCX4yFdDslN11d+1pr12E526X8WAfhadOeaOTx5AuIkvDKIBopfvlzpzkdMx4YyvSKCM9oqtw==", 806 | "dev": true, 807 | "license": "MIT", 808 | "dependencies": { 809 | "@types/node": "*" 810 | } 811 | }, 812 | "node_modules/abort-controller": { 813 | "version": "3.0.0", 814 | "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", 815 | "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", 816 | "license": "MIT", 817 | "dependencies": { 818 | "event-target-shim": "^5.0.0" 819 | }, 820 | "engines": { 821 | "node": ">=6.5" 822 | } 823 | }, 824 | "node_modules/acorn": { 825 | "version": "8.14.0", 826 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", 827 | "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", 828 | "dev": true, 829 | "license": "MIT", 830 | "bin": { 831 | "acorn": "bin/acorn" 832 | }, 833 | "engines": { 834 | "node": ">=0.4.0" 835 | } 836 | }, 837 | "node_modules/acorn-walk": { 838 | "version": "8.3.4", 839 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", 840 | "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", 841 | "dev": true, 842 | "license": "MIT", 843 | "dependencies": { 844 | "acorn": "^8.11.0" 845 | }, 846 | "engines": { 847 | "node": ">=0.4.0" 848 | } 849 | }, 850 | "node_modules/agentkeepalive": { 851 | "version": "4.6.0", 852 | "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.6.0.tgz", 853 | "integrity": "sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==", 854 | "license": "MIT", 855 | "dependencies": { 856 | "humanize-ms": "^1.2.1" 857 | }, 858 | "engines": { 859 | "node": ">= 8.0.0" 860 | } 861 | }, 862 | "node_modules/ajv": { 863 | "version": "8.17.1", 864 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", 865 | "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", 866 | "license": "MIT", 867 | "dependencies": { 868 | "fast-deep-equal": "^3.1.3", 869 | "fast-uri": "^3.0.1", 870 | "json-schema-traverse": "^1.0.0", 871 | "require-from-string": "^2.0.2" 872 | }, 873 | "funding": { 874 | "type": "github", 875 | "url": "https://github.com/sponsors/epoberezkin" 876 | } 877 | }, 878 | "node_modules/ansi-regex": { 879 | "version": "6.1.0", 880 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", 881 | "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", 882 | "license": "MIT", 883 | "engines": { 884 | "node": ">=12" 885 | }, 886 | "funding": { 887 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 888 | } 889 | }, 890 | "node_modules/ansi-styles": { 891 | "version": "6.2.1", 892 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 893 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 894 | "license": "MIT", 895 | "engines": { 896 | "node": ">=12" 897 | }, 898 | "funding": { 899 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 900 | } 901 | }, 902 | "node_modules/arg": { 903 | "version": "4.1.3", 904 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", 905 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 906 | "dev": true, 907 | "license": "MIT" 908 | }, 909 | "node_modules/asynckit": { 910 | "version": "0.4.0", 911 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 912 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", 913 | "license": "MIT" 914 | }, 915 | "node_modules/balanced-match": { 916 | "version": "1.0.2", 917 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 918 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 919 | "license": "MIT" 920 | }, 921 | "node_modules/brace-expansion": { 922 | "version": "2.0.1", 923 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 924 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 925 | "license": "MIT", 926 | "dependencies": { 927 | "balanced-match": "^1.0.0" 928 | } 929 | }, 930 | "node_modules/call-bind-apply-helpers": { 931 | "version": "1.0.2", 932 | "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", 933 | "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", 934 | "license": "MIT", 935 | "dependencies": { 936 | "es-errors": "^1.3.0", 937 | "function-bind": "^1.1.2" 938 | }, 939 | "engines": { 940 | "node": ">= 0.4" 941 | } 942 | }, 943 | "node_modules/chownr": { 944 | "version": "3.0.0", 945 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", 946 | "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", 947 | "license": "BlueOak-1.0.0", 948 | "engines": { 949 | "node": ">=18" 950 | } 951 | }, 952 | "node_modules/color": { 953 | "version": "4.2.3", 954 | "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", 955 | "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", 956 | "license": "MIT", 957 | "dependencies": { 958 | "color-convert": "^2.0.1", 959 | "color-string": "^1.9.0" 960 | }, 961 | "engines": { 962 | "node": ">=12.5.0" 963 | } 964 | }, 965 | "node_modules/color-convert": { 966 | "version": "2.0.1", 967 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 968 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 969 | "license": "MIT", 970 | "dependencies": { 971 | "color-name": "~1.1.4" 972 | }, 973 | "engines": { 974 | "node": ">=7.0.0" 975 | } 976 | }, 977 | "node_modules/color-name": { 978 | "version": "1.1.4", 979 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 980 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 981 | "license": "MIT" 982 | }, 983 | "node_modules/color-string": { 984 | "version": "1.9.1", 985 | "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", 986 | "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", 987 | "license": "MIT", 988 | "dependencies": { 989 | "color-name": "^1.0.0", 990 | "simple-swizzle": "^0.2.2" 991 | } 992 | }, 993 | "node_modules/combined-stream": { 994 | "version": "1.0.8", 995 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 996 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 997 | "license": "MIT", 998 | "dependencies": { 999 | "delayed-stream": "~1.0.0" 1000 | }, 1001 | "engines": { 1002 | "node": ">= 0.8" 1003 | } 1004 | }, 1005 | "node_modules/create-require": { 1006 | "version": "1.1.1", 1007 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", 1008 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 1009 | "dev": true, 1010 | "license": "MIT" 1011 | }, 1012 | "node_modules/cross-spawn": { 1013 | "version": "7.0.6", 1014 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", 1015 | "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", 1016 | "license": "MIT", 1017 | "dependencies": { 1018 | "path-key": "^3.1.0", 1019 | "shebang-command": "^2.0.0", 1020 | "which": "^2.0.1" 1021 | }, 1022 | "engines": { 1023 | "node": ">= 8" 1024 | } 1025 | }, 1026 | "node_modules/deepmerge": { 1027 | "version": "4.3.1", 1028 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", 1029 | "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", 1030 | "license": "MIT", 1031 | "engines": { 1032 | "node": ">=0.10.0" 1033 | } 1034 | }, 1035 | "node_modules/delayed-stream": { 1036 | "version": "1.0.0", 1037 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 1038 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 1039 | "license": "MIT", 1040 | "engines": { 1041 | "node": ">=0.4.0" 1042 | } 1043 | }, 1044 | "node_modules/detect-libc": { 1045 | "version": "2.0.3", 1046 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", 1047 | "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", 1048 | "license": "Apache-2.0", 1049 | "engines": { 1050 | "node": ">=8" 1051 | } 1052 | }, 1053 | "node_modules/diff": { 1054 | "version": "4.0.2", 1055 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 1056 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 1057 | "dev": true, 1058 | "license": "BSD-3-Clause", 1059 | "engines": { 1060 | "node": ">=0.3.1" 1061 | } 1062 | }, 1063 | "node_modules/dom-serializer": { 1064 | "version": "2.0.0", 1065 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", 1066 | "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", 1067 | "license": "MIT", 1068 | "dependencies": { 1069 | "domelementtype": "^2.3.0", 1070 | "domhandler": "^5.0.2", 1071 | "entities": "^4.2.0" 1072 | }, 1073 | "funding": { 1074 | "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" 1075 | } 1076 | }, 1077 | "node_modules/domelementtype": { 1078 | "version": "2.3.0", 1079 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", 1080 | "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", 1081 | "funding": [ 1082 | { 1083 | "type": "github", 1084 | "url": "https://github.com/sponsors/fb55" 1085 | } 1086 | ], 1087 | "license": "BSD-2-Clause" 1088 | }, 1089 | "node_modules/domhandler": { 1090 | "version": "5.0.3", 1091 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", 1092 | "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", 1093 | "license": "BSD-2-Clause", 1094 | "dependencies": { 1095 | "domelementtype": "^2.3.0" 1096 | }, 1097 | "engines": { 1098 | "node": ">= 4" 1099 | }, 1100 | "funding": { 1101 | "url": "https://github.com/fb55/domhandler?sponsor=1" 1102 | } 1103 | }, 1104 | "node_modules/domutils": { 1105 | "version": "3.2.2", 1106 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", 1107 | "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", 1108 | "license": "BSD-2-Clause", 1109 | "dependencies": { 1110 | "dom-serializer": "^2.0.0", 1111 | "domelementtype": "^2.3.0", 1112 | "domhandler": "^5.0.3" 1113 | }, 1114 | "funding": { 1115 | "url": "https://github.com/fb55/domutils?sponsor=1" 1116 | } 1117 | }, 1118 | "node_modules/dotenv": { 1119 | "version": "16.4.7", 1120 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", 1121 | "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", 1122 | "license": "BSD-2-Clause", 1123 | "engines": { 1124 | "node": ">=12" 1125 | }, 1126 | "funding": { 1127 | "url": "https://dotenvx.com" 1128 | } 1129 | }, 1130 | "node_modules/dunder-proto": { 1131 | "version": "1.0.1", 1132 | "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", 1133 | "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", 1134 | "license": "MIT", 1135 | "dependencies": { 1136 | "call-bind-apply-helpers": "^1.0.1", 1137 | "es-errors": "^1.3.0", 1138 | "gopd": "^1.2.0" 1139 | }, 1140 | "engines": { 1141 | "node": ">= 0.4" 1142 | } 1143 | }, 1144 | "node_modules/eastasianwidth": { 1145 | "version": "0.2.0", 1146 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 1147 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 1148 | "license": "MIT" 1149 | }, 1150 | "node_modules/emoji-regex": { 1151 | "version": "9.2.2", 1152 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 1153 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 1154 | "license": "MIT" 1155 | }, 1156 | "node_modules/entities": { 1157 | "version": "4.5.0", 1158 | "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", 1159 | "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", 1160 | "license": "BSD-2-Clause", 1161 | "engines": { 1162 | "node": ">=0.12" 1163 | }, 1164 | "funding": { 1165 | "url": "https://github.com/fb55/entities?sponsor=1" 1166 | } 1167 | }, 1168 | "node_modules/es-define-property": { 1169 | "version": "1.0.1", 1170 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", 1171 | "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", 1172 | "license": "MIT", 1173 | "engines": { 1174 | "node": ">= 0.4" 1175 | } 1176 | }, 1177 | "node_modules/es-errors": { 1178 | "version": "1.3.0", 1179 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 1180 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 1181 | "license": "MIT", 1182 | "engines": { 1183 | "node": ">= 0.4" 1184 | } 1185 | }, 1186 | "node_modules/es-object-atoms": { 1187 | "version": "1.1.1", 1188 | "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", 1189 | "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", 1190 | "license": "MIT", 1191 | "dependencies": { 1192 | "es-errors": "^1.3.0" 1193 | }, 1194 | "engines": { 1195 | "node": ">= 0.4" 1196 | } 1197 | }, 1198 | "node_modules/es-set-tostringtag": { 1199 | "version": "2.1.0", 1200 | "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", 1201 | "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", 1202 | "license": "MIT", 1203 | "dependencies": { 1204 | "es-errors": "^1.3.0", 1205 | "get-intrinsic": "^1.2.6", 1206 | "has-tostringtag": "^1.0.2", 1207 | "hasown": "^2.0.2" 1208 | }, 1209 | "engines": { 1210 | "node": ">= 0.4" 1211 | } 1212 | }, 1213 | "node_modules/event-target-shim": { 1214 | "version": "5.0.1", 1215 | "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 1216 | "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", 1217 | "license": "MIT", 1218 | "engines": { 1219 | "node": ">=6" 1220 | } 1221 | }, 1222 | "node_modules/fast-deep-equal": { 1223 | "version": "3.1.3", 1224 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1225 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1226 | "license": "MIT" 1227 | }, 1228 | "node_modules/fast-uri": { 1229 | "version": "3.0.6", 1230 | "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", 1231 | "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", 1232 | "funding": [ 1233 | { 1234 | "type": "github", 1235 | "url": "https://github.com/sponsors/fastify" 1236 | }, 1237 | { 1238 | "type": "opencollective", 1239 | "url": "https://opencollective.com/fastify" 1240 | } 1241 | ], 1242 | "license": "BSD-3-Clause" 1243 | }, 1244 | "node_modules/flatbuffers": { 1245 | "version": "25.2.10", 1246 | "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-25.2.10.tgz", 1247 | "integrity": "sha512-7JlN9ZvLDG1McO3kbX0k4v+SUAg48L1rIwEvN6ZQl/eCtgJz9UylTMzE9wrmYrcorgxm3CX/3T/w5VAub99UUw==", 1248 | "license": "Apache-2.0" 1249 | }, 1250 | "node_modules/foreground-child": { 1251 | "version": "3.3.1", 1252 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", 1253 | "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", 1254 | "license": "ISC", 1255 | "dependencies": { 1256 | "cross-spawn": "^7.0.6", 1257 | "signal-exit": "^4.0.1" 1258 | }, 1259 | "engines": { 1260 | "node": ">=14" 1261 | }, 1262 | "funding": { 1263 | "url": "https://github.com/sponsors/isaacs" 1264 | } 1265 | }, 1266 | "node_modules/form-data": { 1267 | "version": "4.0.2", 1268 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", 1269 | "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", 1270 | "license": "MIT", 1271 | "dependencies": { 1272 | "asynckit": "^0.4.0", 1273 | "combined-stream": "^1.0.8", 1274 | "es-set-tostringtag": "^2.1.0", 1275 | "mime-types": "^2.1.12" 1276 | }, 1277 | "engines": { 1278 | "node": ">= 6" 1279 | } 1280 | }, 1281 | "node_modules/form-data-encoder": { 1282 | "version": "1.7.2", 1283 | "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", 1284 | "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==", 1285 | "license": "MIT" 1286 | }, 1287 | "node_modules/formdata-node": { 1288 | "version": "4.4.1", 1289 | "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", 1290 | "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", 1291 | "license": "MIT", 1292 | "dependencies": { 1293 | "node-domexception": "1.0.0", 1294 | "web-streams-polyfill": "4.0.0-beta.3" 1295 | }, 1296 | "engines": { 1297 | "node": ">= 12.20" 1298 | } 1299 | }, 1300 | "node_modules/function-bind": { 1301 | "version": "1.1.2", 1302 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 1303 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 1304 | "license": "MIT", 1305 | "funding": { 1306 | "url": "https://github.com/sponsors/ljharb" 1307 | } 1308 | }, 1309 | "node_modules/get-intrinsic": { 1310 | "version": "1.3.0", 1311 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", 1312 | "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", 1313 | "license": "MIT", 1314 | "dependencies": { 1315 | "call-bind-apply-helpers": "^1.0.2", 1316 | "es-define-property": "^1.0.1", 1317 | "es-errors": "^1.3.0", 1318 | "es-object-atoms": "^1.1.1", 1319 | "function-bind": "^1.1.2", 1320 | "get-proto": "^1.0.1", 1321 | "gopd": "^1.2.0", 1322 | "has-symbols": "^1.1.0", 1323 | "hasown": "^2.0.2", 1324 | "math-intrinsics": "^1.1.0" 1325 | }, 1326 | "engines": { 1327 | "node": ">= 0.4" 1328 | }, 1329 | "funding": { 1330 | "url": "https://github.com/sponsors/ljharb" 1331 | } 1332 | }, 1333 | "node_modules/get-proto": { 1334 | "version": "1.0.1", 1335 | "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", 1336 | "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", 1337 | "license": "MIT", 1338 | "dependencies": { 1339 | "dunder-proto": "^1.0.1", 1340 | "es-object-atoms": "^1.0.0" 1341 | }, 1342 | "engines": { 1343 | "node": ">= 0.4" 1344 | } 1345 | }, 1346 | "node_modules/glob": { 1347 | "version": "10.4.5", 1348 | "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", 1349 | "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", 1350 | "license": "ISC", 1351 | "dependencies": { 1352 | "foreground-child": "^3.1.0", 1353 | "jackspeak": "^3.1.2", 1354 | "minimatch": "^9.0.4", 1355 | "minipass": "^7.1.2", 1356 | "package-json-from-dist": "^1.0.0", 1357 | "path-scurry": "^1.11.1" 1358 | }, 1359 | "bin": { 1360 | "glob": "dist/esm/bin.mjs" 1361 | }, 1362 | "funding": { 1363 | "url": "https://github.com/sponsors/isaacs" 1364 | } 1365 | }, 1366 | "node_modules/gopd": { 1367 | "version": "1.2.0", 1368 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", 1369 | "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", 1370 | "license": "MIT", 1371 | "engines": { 1372 | "node": ">= 0.4" 1373 | }, 1374 | "funding": { 1375 | "url": "https://github.com/sponsors/ljharb" 1376 | } 1377 | }, 1378 | "node_modules/gpt-tokenizer": { 1379 | "version": "2.8.1", 1380 | "resolved": "https://registry.npmjs.org/gpt-tokenizer/-/gpt-tokenizer-2.8.1.tgz", 1381 | "integrity": "sha512-8+a9ojzqfgiF3TK4oivGYjlycD8g5igLt8NQw3ndOIgLVKSGJDhUDNAfYSbtyyuTkha3R/R9F8XrwC7/B5TKfQ==", 1382 | "license": "MIT" 1383 | }, 1384 | "node_modules/guid-typescript": { 1385 | "version": "1.0.9", 1386 | "resolved": "https://registry.npmjs.org/guid-typescript/-/guid-typescript-1.0.9.tgz", 1387 | "integrity": "sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ==", 1388 | "license": "ISC" 1389 | }, 1390 | "node_modules/has-symbols": { 1391 | "version": "1.1.0", 1392 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", 1393 | "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", 1394 | "license": "MIT", 1395 | "engines": { 1396 | "node": ">= 0.4" 1397 | }, 1398 | "funding": { 1399 | "url": "https://github.com/sponsors/ljharb" 1400 | } 1401 | }, 1402 | "node_modules/has-tostringtag": { 1403 | "version": "1.0.2", 1404 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", 1405 | "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", 1406 | "license": "MIT", 1407 | "dependencies": { 1408 | "has-symbols": "^1.0.3" 1409 | }, 1410 | "engines": { 1411 | "node": ">= 0.4" 1412 | }, 1413 | "funding": { 1414 | "url": "https://github.com/sponsors/ljharb" 1415 | } 1416 | }, 1417 | "node_modules/hasown": { 1418 | "version": "2.0.2", 1419 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 1420 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 1421 | "license": "MIT", 1422 | "dependencies": { 1423 | "function-bind": "^1.1.2" 1424 | }, 1425 | "engines": { 1426 | "node": ">= 0.4" 1427 | } 1428 | }, 1429 | "node_modules/html-to-text": { 1430 | "version": "9.0.5", 1431 | "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz", 1432 | "integrity": "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==", 1433 | "license": "MIT", 1434 | "dependencies": { 1435 | "@selderee/plugin-htmlparser2": "^0.11.0", 1436 | "deepmerge": "^4.3.1", 1437 | "dom-serializer": "^2.0.0", 1438 | "htmlparser2": "^8.0.2", 1439 | "selderee": "^0.11.0" 1440 | }, 1441 | "engines": { 1442 | "node": ">=14" 1443 | } 1444 | }, 1445 | "node_modules/htmlparser2": { 1446 | "version": "8.0.2", 1447 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", 1448 | "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", 1449 | "funding": [ 1450 | "https://github.com/fb55/htmlparser2?sponsor=1", 1451 | { 1452 | "type": "github", 1453 | "url": "https://github.com/sponsors/fb55" 1454 | } 1455 | ], 1456 | "license": "MIT", 1457 | "dependencies": { 1458 | "domelementtype": "^2.3.0", 1459 | "domhandler": "^5.0.3", 1460 | "domutils": "^3.0.1", 1461 | "entities": "^4.4.0" 1462 | } 1463 | }, 1464 | "node_modules/humanize-ms": { 1465 | "version": "1.2.1", 1466 | "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", 1467 | "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", 1468 | "license": "MIT", 1469 | "dependencies": { 1470 | "ms": "^2.0.0" 1471 | } 1472 | }, 1473 | "node_modules/is-arrayish": { 1474 | "version": "0.3.2", 1475 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", 1476 | "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", 1477 | "license": "MIT" 1478 | }, 1479 | "node_modules/is-fullwidth-code-point": { 1480 | "version": "3.0.0", 1481 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1482 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1483 | "license": "MIT", 1484 | "engines": { 1485 | "node": ">=8" 1486 | } 1487 | }, 1488 | "node_modules/isexe": { 1489 | "version": "2.0.0", 1490 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1491 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1492 | "license": "ISC" 1493 | }, 1494 | "node_modules/jackspeak": { 1495 | "version": "3.4.3", 1496 | "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", 1497 | "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", 1498 | "license": "BlueOak-1.0.0", 1499 | "dependencies": { 1500 | "@isaacs/cliui": "^8.0.2" 1501 | }, 1502 | "funding": { 1503 | "url": "https://github.com/sponsors/isaacs" 1504 | }, 1505 | "optionalDependencies": { 1506 | "@pkgjs/parseargs": "^0.11.0" 1507 | } 1508 | }, 1509 | "node_modules/json-schema-traverse": { 1510 | "version": "1.0.0", 1511 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 1512 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", 1513 | "license": "MIT" 1514 | }, 1515 | "node_modules/leac": { 1516 | "version": "0.6.0", 1517 | "resolved": "https://registry.npmjs.org/leac/-/leac-0.6.0.tgz", 1518 | "integrity": "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==", 1519 | "license": "MIT", 1520 | "funding": { 1521 | "url": "https://ko-fi.com/killymxi" 1522 | } 1523 | }, 1524 | "node_modules/llamaindex": { 1525 | "version": "0.9.4", 1526 | "resolved": "https://registry.npmjs.org/llamaindex/-/llamaindex-0.9.4.tgz", 1527 | "integrity": "sha512-fPFQjK+L0vz6C44F3er6wotbWBV3uu132AMTVt8HkdUQ9+2yRWE4u10yohCi2W2WEmTDRD29OmQHOJqph5munQ==", 1528 | "license": "MIT", 1529 | "dependencies": { 1530 | "@llamaindex/cloud": "3.0.4", 1531 | "@llamaindex/core": "0.5.3", 1532 | "@llamaindex/env": "0.1.28", 1533 | "@llamaindex/node-parser": "1.0.3", 1534 | "@llamaindex/openai": "0.1.55", 1535 | "@types/lodash": "^4.17.7", 1536 | "@types/node": "^22.9.0", 1537 | "ajv": "^8.17.1", 1538 | "gpt-tokenizer": "^2.6.2", 1539 | "lodash": "^4.17.21", 1540 | "magic-bytes.js": "^1.10.0" 1541 | }, 1542 | "engines": { 1543 | "node": ">=18.0.0" 1544 | } 1545 | }, 1546 | "node_modules/llamaindex/node_modules/@llamaindex/cloud": { 1547 | "version": "3.0.4", 1548 | "resolved": "https://registry.npmjs.org/@llamaindex/cloud/-/cloud-3.0.4.tgz", 1549 | "integrity": "sha512-XNDdL0CWtu8dJ17xuJHhql83CsyZWzxohZga/Pg08vFTucVAcxVU1OqFRfKeL53u+q7pxsGqJ9S4TzWzzxpOGA==", 1550 | "license": "MIT", 1551 | "peerDependencies": { 1552 | "@llamaindex/core": "0.5.3", 1553 | "@llamaindex/env": "0.1.28" 1554 | } 1555 | }, 1556 | "node_modules/llamaindex/node_modules/@llamaindex/node-parser": { 1557 | "version": "1.0.3", 1558 | "resolved": "https://registry.npmjs.org/@llamaindex/node-parser/-/node-parser-1.0.3.tgz", 1559 | "integrity": "sha512-qotsQ4OptJ7EYCnMBjVYwj47awZBuKYMCIloxWmauOpUQ83j831jkFsvOIjt6EMQexDScTG4cFihRul12aikNQ==", 1560 | "dependencies": { 1561 | "html-to-text": "^9.0.5" 1562 | }, 1563 | "peerDependencies": { 1564 | "@llamaindex/core": "0.5.3", 1565 | "@llamaindex/env": "0.1.28", 1566 | "tree-sitter": "^0.22.0", 1567 | "web-tree-sitter": "^0.24.3" 1568 | } 1569 | }, 1570 | "node_modules/llamaindex/node_modules/@types/node": { 1571 | "version": "22.13.5", 1572 | "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.5.tgz", 1573 | "integrity": "sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==", 1574 | "license": "MIT", 1575 | "dependencies": { 1576 | "undici-types": "~6.20.0" 1577 | } 1578 | }, 1579 | "node_modules/llamaindex/node_modules/undici-types": { 1580 | "version": "6.20.0", 1581 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", 1582 | "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", 1583 | "license": "MIT" 1584 | }, 1585 | "node_modules/lodash": { 1586 | "version": "4.17.21", 1587 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 1588 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", 1589 | "license": "MIT" 1590 | }, 1591 | "node_modules/long": { 1592 | "version": "5.3.1", 1593 | "resolved": "https://registry.npmjs.org/long/-/long-5.3.1.tgz", 1594 | "integrity": "sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==", 1595 | "license": "Apache-2.0" 1596 | }, 1597 | "node_modules/lru-cache": { 1598 | "version": "10.4.3", 1599 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", 1600 | "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", 1601 | "license": "ISC" 1602 | }, 1603 | "node_modules/magic-bytes.js": { 1604 | "version": "1.10.0", 1605 | "resolved": "https://registry.npmjs.org/magic-bytes.js/-/magic-bytes.js-1.10.0.tgz", 1606 | "integrity": "sha512-/k20Lg2q8LE5xiaaSkMXk4sfvI+9EGEykFS4b0CHHGWqDYU0bGUFSwchNOMA56D7TCs9GwVTkqe9als1/ns8UQ==", 1607 | "license": "MIT" 1608 | }, 1609 | "node_modules/make-error": { 1610 | "version": "1.3.6", 1611 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 1612 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 1613 | "dev": true, 1614 | "license": "ISC" 1615 | }, 1616 | "node_modules/math-intrinsics": { 1617 | "version": "1.1.0", 1618 | "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", 1619 | "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", 1620 | "license": "MIT", 1621 | "engines": { 1622 | "node": ">= 0.4" 1623 | } 1624 | }, 1625 | "node_modules/mime-db": { 1626 | "version": "1.52.0", 1627 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1628 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1629 | "license": "MIT", 1630 | "engines": { 1631 | "node": ">= 0.6" 1632 | } 1633 | }, 1634 | "node_modules/mime-types": { 1635 | "version": "2.1.35", 1636 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1637 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1638 | "license": "MIT", 1639 | "dependencies": { 1640 | "mime-db": "1.52.0" 1641 | }, 1642 | "engines": { 1643 | "node": ">= 0.6" 1644 | } 1645 | }, 1646 | "node_modules/minimatch": { 1647 | "version": "9.0.5", 1648 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 1649 | "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 1650 | "license": "ISC", 1651 | "dependencies": { 1652 | "brace-expansion": "^2.0.1" 1653 | }, 1654 | "engines": { 1655 | "node": ">=16 || 14 >=14.17" 1656 | }, 1657 | "funding": { 1658 | "url": "https://github.com/sponsors/isaacs" 1659 | } 1660 | }, 1661 | "node_modules/minipass": { 1662 | "version": "7.1.2", 1663 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", 1664 | "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", 1665 | "license": "ISC", 1666 | "engines": { 1667 | "node": ">=16 || 14 >=14.17" 1668 | } 1669 | }, 1670 | "node_modules/minizlib": { 1671 | "version": "3.0.1", 1672 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.1.tgz", 1673 | "integrity": "sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==", 1674 | "license": "MIT", 1675 | "dependencies": { 1676 | "minipass": "^7.0.4", 1677 | "rimraf": "^5.0.5" 1678 | }, 1679 | "engines": { 1680 | "node": ">= 18" 1681 | } 1682 | }, 1683 | "node_modules/mkdirp": { 1684 | "version": "3.0.1", 1685 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", 1686 | "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", 1687 | "license": "MIT", 1688 | "bin": { 1689 | "mkdirp": "dist/cjs/src/bin.js" 1690 | }, 1691 | "engines": { 1692 | "node": ">=10" 1693 | }, 1694 | "funding": { 1695 | "url": "https://github.com/sponsors/isaacs" 1696 | } 1697 | }, 1698 | "node_modules/ms": { 1699 | "version": "2.1.3", 1700 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1701 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", 1702 | "license": "MIT" 1703 | }, 1704 | "node_modules/node-addon-api": { 1705 | "version": "8.3.1", 1706 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.3.1.tgz", 1707 | "integrity": "sha512-lytcDEdxKjGJPTLEfW4mYMigRezMlyJY8W4wxJK8zE533Jlb8L8dRuObJFWg2P+AuOIxoCgKF+2Oq4d4Zd0OUA==", 1708 | "license": "MIT", 1709 | "peer": true, 1710 | "engines": { 1711 | "node": "^18 || ^20 || >= 21" 1712 | } 1713 | }, 1714 | "node_modules/node-domexception": { 1715 | "version": "1.0.0", 1716 | "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", 1717 | "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", 1718 | "funding": [ 1719 | { 1720 | "type": "github", 1721 | "url": "https://github.com/sponsors/jimmywarting" 1722 | }, 1723 | { 1724 | "type": "github", 1725 | "url": "https://paypal.me/jimmywarting" 1726 | } 1727 | ], 1728 | "license": "MIT", 1729 | "engines": { 1730 | "node": ">=10.5.0" 1731 | } 1732 | }, 1733 | "node_modules/node-fetch": { 1734 | "version": "2.7.0", 1735 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", 1736 | "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", 1737 | "license": "MIT", 1738 | "dependencies": { 1739 | "whatwg-url": "^5.0.0" 1740 | }, 1741 | "engines": { 1742 | "node": "4.x || >=6.0.0" 1743 | }, 1744 | "peerDependencies": { 1745 | "encoding": "^0.1.0" 1746 | }, 1747 | "peerDependenciesMeta": { 1748 | "encoding": { 1749 | "optional": true 1750 | } 1751 | } 1752 | }, 1753 | "node_modules/node-gyp-build": { 1754 | "version": "4.8.4", 1755 | "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", 1756 | "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", 1757 | "license": "MIT", 1758 | "peer": true, 1759 | "bin": { 1760 | "node-gyp-build": "bin.js", 1761 | "node-gyp-build-optional": "optional.js", 1762 | "node-gyp-build-test": "build-test.js" 1763 | } 1764 | }, 1765 | "node_modules/onnxruntime-common": { 1766 | "version": "1.20.1", 1767 | "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.20.1.tgz", 1768 | "integrity": "sha512-YiU0s0IzYYC+gWvqD1HzLc46Du1sXpSiwzKb63PACIJr6LfL27VsXSXQvt68EzD3V0D5Bc0vyJTjmMxp0ylQiw==", 1769 | "license": "MIT" 1770 | }, 1771 | "node_modules/onnxruntime-node": { 1772 | "version": "1.20.1", 1773 | "resolved": "https://registry.npmjs.org/onnxruntime-node/-/onnxruntime-node-1.20.1.tgz", 1774 | "integrity": "sha512-di/I4HDXRw+FLgq+TyHmQEDd3cEp9iFFZm0r4uJ1Wd7b/WE1VXtKWo8yemex347c6GNF/3Pv86ZfPhIWxORr0w==", 1775 | "hasInstallScript": true, 1776 | "license": "MIT", 1777 | "os": [ 1778 | "win32", 1779 | "darwin", 1780 | "linux" 1781 | ], 1782 | "dependencies": { 1783 | "onnxruntime-common": "1.20.1", 1784 | "tar": "^7.0.1" 1785 | } 1786 | }, 1787 | "node_modules/onnxruntime-web": { 1788 | "version": "1.21.0-dev.20250206-d981b153d3", 1789 | "resolved": "https://registry.npmjs.org/onnxruntime-web/-/onnxruntime-web-1.21.0-dev.20250206-d981b153d3.tgz", 1790 | "integrity": "sha512-esDVQdRic6J44VBMFLumYvcGfioMh80ceLmzF1yheJyuLKq/Th8VT2aj42XWQst+2bcWnAhw4IKmRQaqzU8ugg==", 1791 | "license": "MIT", 1792 | "dependencies": { 1793 | "flatbuffers": "^25.1.24", 1794 | "guid-typescript": "^1.0.9", 1795 | "long": "^5.2.3", 1796 | "onnxruntime-common": "1.21.0-dev.20250206-d981b153d3", 1797 | "platform": "^1.3.6", 1798 | "protobufjs": "^7.2.4" 1799 | } 1800 | }, 1801 | "node_modules/onnxruntime-web/node_modules/onnxruntime-common": { 1802 | "version": "1.21.0-dev.20250206-d981b153d3", 1803 | "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.21.0-dev.20250206-d981b153d3.tgz", 1804 | "integrity": "sha512-TwaE51xV9q2y8pM61q73rbywJnusw9ivTEHAJ39GVWNZqxCoDBpe/tQkh/w9S+o/g+zS7YeeL0I/2mEWd+dgyA==", 1805 | "license": "MIT" 1806 | }, 1807 | "node_modules/openai": { 1808 | "version": "4.86.0", 1809 | "resolved": "https://registry.npmjs.org/openai/-/openai-4.86.0.tgz", 1810 | "integrity": "sha512-ggnH3vm+o9UvVQl/MxzDgpxsH9j7UoD17AeICcLSr1NCNb8PfwgMlp/K56ErQUxpkkcIA5mNkTuJAFSnoHej8A==", 1811 | "license": "Apache-2.0", 1812 | "dependencies": { 1813 | "@types/node": "^18.11.18", 1814 | "@types/node-fetch": "^2.6.4", 1815 | "abort-controller": "^3.0.0", 1816 | "agentkeepalive": "^4.2.1", 1817 | "form-data-encoder": "1.7.2", 1818 | "formdata-node": "^4.3.2", 1819 | "node-fetch": "^2.6.7" 1820 | }, 1821 | "bin": { 1822 | "openai": "bin/cli" 1823 | }, 1824 | "peerDependencies": { 1825 | "ws": "^8.18.0", 1826 | "zod": "^3.23.8" 1827 | }, 1828 | "peerDependenciesMeta": { 1829 | "ws": { 1830 | "optional": true 1831 | }, 1832 | "zod": { 1833 | "optional": true 1834 | } 1835 | } 1836 | }, 1837 | "node_modules/openai/node_modules/@types/node": { 1838 | "version": "18.19.76", 1839 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.76.tgz", 1840 | "integrity": "sha512-yvR7Q9LdPz2vGpmpJX5LolrgRdWvB67MJKDPSgIIzpFbaf9a1j/f5DnLp5VDyHGMR0QZHlTr1afsD87QCXFHKw==", 1841 | "license": "MIT", 1842 | "dependencies": { 1843 | "undici-types": "~5.26.4" 1844 | } 1845 | }, 1846 | "node_modules/openai/node_modules/undici-types": { 1847 | "version": "5.26.5", 1848 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", 1849 | "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", 1850 | "license": "MIT" 1851 | }, 1852 | "node_modules/package-json-from-dist": { 1853 | "version": "1.0.1", 1854 | "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", 1855 | "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", 1856 | "license": "BlueOak-1.0.0" 1857 | }, 1858 | "node_modules/papaparse": { 1859 | "version": "5.5.2", 1860 | "resolved": "https://registry.npmjs.org/papaparse/-/papaparse-5.5.2.tgz", 1861 | "integrity": "sha512-PZXg8UuAc4PcVwLosEEDYjPyfWnTEhOrUfdv+3Bx+NuAb+5NhDmXzg5fHWmdCh1mP5p7JAZfFr3IMQfcntNAdA==", 1862 | "license": "MIT" 1863 | }, 1864 | "node_modules/parseley": { 1865 | "version": "0.12.1", 1866 | "resolved": "https://registry.npmjs.org/parseley/-/parseley-0.12.1.tgz", 1867 | "integrity": "sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==", 1868 | "license": "MIT", 1869 | "dependencies": { 1870 | "leac": "^0.6.0", 1871 | "peberminta": "^0.9.0" 1872 | }, 1873 | "funding": { 1874 | "url": "https://ko-fi.com/killymxi" 1875 | } 1876 | }, 1877 | "node_modules/path-key": { 1878 | "version": "3.1.1", 1879 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1880 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1881 | "license": "MIT", 1882 | "engines": { 1883 | "node": ">=8" 1884 | } 1885 | }, 1886 | "node_modules/path-scurry": { 1887 | "version": "1.11.1", 1888 | "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", 1889 | "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", 1890 | "license": "BlueOak-1.0.0", 1891 | "dependencies": { 1892 | "lru-cache": "^10.2.0", 1893 | "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" 1894 | }, 1895 | "engines": { 1896 | "node": ">=16 || 14 >=14.18" 1897 | }, 1898 | "funding": { 1899 | "url": "https://github.com/sponsors/isaacs" 1900 | } 1901 | }, 1902 | "node_modules/peberminta": { 1903 | "version": "0.9.0", 1904 | "resolved": "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz", 1905 | "integrity": "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==", 1906 | "license": "MIT", 1907 | "funding": { 1908 | "url": "https://ko-fi.com/killymxi" 1909 | } 1910 | }, 1911 | "node_modules/platform": { 1912 | "version": "1.3.6", 1913 | "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", 1914 | "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", 1915 | "license": "MIT" 1916 | }, 1917 | "node_modules/protobufjs": { 1918 | "version": "7.4.0", 1919 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.4.0.tgz", 1920 | "integrity": "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==", 1921 | "hasInstallScript": true, 1922 | "license": "BSD-3-Clause", 1923 | "dependencies": { 1924 | "@protobufjs/aspromise": "^1.1.2", 1925 | "@protobufjs/base64": "^1.1.2", 1926 | "@protobufjs/codegen": "^2.0.4", 1927 | "@protobufjs/eventemitter": "^1.1.0", 1928 | "@protobufjs/fetch": "^1.1.0", 1929 | "@protobufjs/float": "^1.0.2", 1930 | "@protobufjs/inquire": "^1.1.0", 1931 | "@protobufjs/path": "^1.1.2", 1932 | "@protobufjs/pool": "^1.1.0", 1933 | "@protobufjs/utf8": "^1.1.0", 1934 | "@types/node": ">=13.7.0", 1935 | "long": "^5.0.0" 1936 | }, 1937 | "engines": { 1938 | "node": ">=12.0.0" 1939 | } 1940 | }, 1941 | "node_modules/require-from-string": { 1942 | "version": "2.0.2", 1943 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 1944 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 1945 | "license": "MIT", 1946 | "engines": { 1947 | "node": ">=0.10.0" 1948 | } 1949 | }, 1950 | "node_modules/rimraf": { 1951 | "version": "5.0.10", 1952 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", 1953 | "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", 1954 | "license": "ISC", 1955 | "dependencies": { 1956 | "glob": "^10.3.7" 1957 | }, 1958 | "bin": { 1959 | "rimraf": "dist/esm/bin.mjs" 1960 | }, 1961 | "funding": { 1962 | "url": "https://github.com/sponsors/isaacs" 1963 | } 1964 | }, 1965 | "node_modules/selderee": { 1966 | "version": "0.11.0", 1967 | "resolved": "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz", 1968 | "integrity": "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==", 1969 | "license": "MIT", 1970 | "dependencies": { 1971 | "parseley": "^0.12.0" 1972 | }, 1973 | "funding": { 1974 | "url": "https://ko-fi.com/killymxi" 1975 | } 1976 | }, 1977 | "node_modules/semver": { 1978 | "version": "7.7.1", 1979 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", 1980 | "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", 1981 | "license": "ISC", 1982 | "bin": { 1983 | "semver": "bin/semver.js" 1984 | }, 1985 | "engines": { 1986 | "node": ">=10" 1987 | } 1988 | }, 1989 | "node_modules/sharp": { 1990 | "version": "0.33.5", 1991 | "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", 1992 | "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", 1993 | "hasInstallScript": true, 1994 | "license": "Apache-2.0", 1995 | "dependencies": { 1996 | "color": "^4.2.3", 1997 | "detect-libc": "^2.0.3", 1998 | "semver": "^7.6.3" 1999 | }, 2000 | "engines": { 2001 | "node": "^18.17.0 || ^20.3.0 || >=21.0.0" 2002 | }, 2003 | "funding": { 2004 | "url": "https://opencollective.com/libvips" 2005 | }, 2006 | "optionalDependencies": { 2007 | "@img/sharp-darwin-arm64": "0.33.5", 2008 | "@img/sharp-darwin-x64": "0.33.5", 2009 | "@img/sharp-libvips-darwin-arm64": "1.0.4", 2010 | "@img/sharp-libvips-darwin-x64": "1.0.4", 2011 | "@img/sharp-libvips-linux-arm": "1.0.5", 2012 | "@img/sharp-libvips-linux-arm64": "1.0.4", 2013 | "@img/sharp-libvips-linux-s390x": "1.0.4", 2014 | "@img/sharp-libvips-linux-x64": "1.0.4", 2015 | "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", 2016 | "@img/sharp-libvips-linuxmusl-x64": "1.0.4", 2017 | "@img/sharp-linux-arm": "0.33.5", 2018 | "@img/sharp-linux-arm64": "0.33.5", 2019 | "@img/sharp-linux-s390x": "0.33.5", 2020 | "@img/sharp-linux-x64": "0.33.5", 2021 | "@img/sharp-linuxmusl-arm64": "0.33.5", 2022 | "@img/sharp-linuxmusl-x64": "0.33.5", 2023 | "@img/sharp-wasm32": "0.33.5", 2024 | "@img/sharp-win32-ia32": "0.33.5", 2025 | "@img/sharp-win32-x64": "0.33.5" 2026 | } 2027 | }, 2028 | "node_modules/shebang-command": { 2029 | "version": "2.0.0", 2030 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2031 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2032 | "license": "MIT", 2033 | "dependencies": { 2034 | "shebang-regex": "^3.0.0" 2035 | }, 2036 | "engines": { 2037 | "node": ">=8" 2038 | } 2039 | }, 2040 | "node_modules/shebang-regex": { 2041 | "version": "3.0.0", 2042 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2043 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2044 | "license": "MIT", 2045 | "engines": { 2046 | "node": ">=8" 2047 | } 2048 | }, 2049 | "node_modules/signal-exit": { 2050 | "version": "4.1.0", 2051 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 2052 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 2053 | "license": "ISC", 2054 | "engines": { 2055 | "node": ">=14" 2056 | }, 2057 | "funding": { 2058 | "url": "https://github.com/sponsors/isaacs" 2059 | } 2060 | }, 2061 | "node_modules/simple-swizzle": { 2062 | "version": "0.2.2", 2063 | "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", 2064 | "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", 2065 | "license": "MIT", 2066 | "dependencies": { 2067 | "is-arrayish": "^0.3.1" 2068 | } 2069 | }, 2070 | "node_modules/string-width": { 2071 | "version": "5.1.2", 2072 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 2073 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 2074 | "license": "MIT", 2075 | "dependencies": { 2076 | "eastasianwidth": "^0.2.0", 2077 | "emoji-regex": "^9.2.2", 2078 | "strip-ansi": "^7.0.1" 2079 | }, 2080 | "engines": { 2081 | "node": ">=12" 2082 | }, 2083 | "funding": { 2084 | "url": "https://github.com/sponsors/sindresorhus" 2085 | } 2086 | }, 2087 | "node_modules/string-width-cjs": { 2088 | "name": "string-width", 2089 | "version": "4.2.3", 2090 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2091 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2092 | "license": "MIT", 2093 | "dependencies": { 2094 | "emoji-regex": "^8.0.0", 2095 | "is-fullwidth-code-point": "^3.0.0", 2096 | "strip-ansi": "^6.0.1" 2097 | }, 2098 | "engines": { 2099 | "node": ">=8" 2100 | } 2101 | }, 2102 | "node_modules/string-width-cjs/node_modules/ansi-regex": { 2103 | "version": "5.0.1", 2104 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2105 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2106 | "license": "MIT", 2107 | "engines": { 2108 | "node": ">=8" 2109 | } 2110 | }, 2111 | "node_modules/string-width-cjs/node_modules/emoji-regex": { 2112 | "version": "8.0.0", 2113 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 2114 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 2115 | "license": "MIT" 2116 | }, 2117 | "node_modules/string-width-cjs/node_modules/strip-ansi": { 2118 | "version": "6.0.1", 2119 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2120 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2121 | "license": "MIT", 2122 | "dependencies": { 2123 | "ansi-regex": "^5.0.1" 2124 | }, 2125 | "engines": { 2126 | "node": ">=8" 2127 | } 2128 | }, 2129 | "node_modules/strip-ansi": { 2130 | "version": "7.1.0", 2131 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 2132 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 2133 | "license": "MIT", 2134 | "dependencies": { 2135 | "ansi-regex": "^6.0.1" 2136 | }, 2137 | "engines": { 2138 | "node": ">=12" 2139 | }, 2140 | "funding": { 2141 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 2142 | } 2143 | }, 2144 | "node_modules/strip-ansi-cjs": { 2145 | "name": "strip-ansi", 2146 | "version": "6.0.1", 2147 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2148 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2149 | "license": "MIT", 2150 | "dependencies": { 2151 | "ansi-regex": "^5.0.1" 2152 | }, 2153 | "engines": { 2154 | "node": ">=8" 2155 | } 2156 | }, 2157 | "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { 2158 | "version": "5.0.1", 2159 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2160 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2161 | "license": "MIT", 2162 | "engines": { 2163 | "node": ">=8" 2164 | } 2165 | }, 2166 | "node_modules/tar": { 2167 | "version": "7.4.3", 2168 | "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", 2169 | "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", 2170 | "license": "ISC", 2171 | "dependencies": { 2172 | "@isaacs/fs-minipass": "^4.0.0", 2173 | "chownr": "^3.0.0", 2174 | "minipass": "^7.1.2", 2175 | "minizlib": "^3.0.1", 2176 | "mkdirp": "^3.0.1", 2177 | "yallist": "^5.0.0" 2178 | }, 2179 | "engines": { 2180 | "node": ">=18" 2181 | } 2182 | }, 2183 | "node_modules/tr46": { 2184 | "version": "0.0.3", 2185 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 2186 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", 2187 | "license": "MIT" 2188 | }, 2189 | "node_modules/tree-sitter": { 2190 | "version": "0.22.4", 2191 | "resolved": "https://registry.npmjs.org/tree-sitter/-/tree-sitter-0.22.4.tgz", 2192 | "integrity": "sha512-usbHZP9/oxNsUY65MQUsduGRqDHQOou1cagUSwjhoSYAmSahjQDAVsh9s+SlZkn8X8+O1FULRGwHu7AFP3kjzg==", 2193 | "hasInstallScript": true, 2194 | "license": "MIT", 2195 | "peer": true, 2196 | "dependencies": { 2197 | "node-addon-api": "^8.3.0", 2198 | "node-gyp-build": "^4.8.4" 2199 | } 2200 | }, 2201 | "node_modules/ts-node": { 2202 | "version": "10.9.2", 2203 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", 2204 | "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", 2205 | "dev": true, 2206 | "license": "MIT", 2207 | "dependencies": { 2208 | "@cspotcode/source-map-support": "^0.8.0", 2209 | "@tsconfig/node10": "^1.0.7", 2210 | "@tsconfig/node12": "^1.0.7", 2211 | "@tsconfig/node14": "^1.0.0", 2212 | "@tsconfig/node16": "^1.0.2", 2213 | "acorn": "^8.4.1", 2214 | "acorn-walk": "^8.1.1", 2215 | "arg": "^4.1.0", 2216 | "create-require": "^1.1.0", 2217 | "diff": "^4.0.1", 2218 | "make-error": "^1.1.1", 2219 | "v8-compile-cache-lib": "^3.0.1", 2220 | "yn": "3.1.1" 2221 | }, 2222 | "bin": { 2223 | "ts-node": "dist/bin.js", 2224 | "ts-node-cwd": "dist/bin-cwd.js", 2225 | "ts-node-esm": "dist/bin-esm.js", 2226 | "ts-node-script": "dist/bin-script.js", 2227 | "ts-node-transpile-only": "dist/bin-transpile.js", 2228 | "ts-script": "dist/bin-script-deprecated.js" 2229 | }, 2230 | "peerDependencies": { 2231 | "@swc/core": ">=1.2.50", 2232 | "@swc/wasm": ">=1.2.50", 2233 | "@types/node": "*", 2234 | "typescript": ">=2.7" 2235 | }, 2236 | "peerDependenciesMeta": { 2237 | "@swc/core": { 2238 | "optional": true 2239 | }, 2240 | "@swc/wasm": { 2241 | "optional": true 2242 | } 2243 | } 2244 | }, 2245 | "node_modules/tslib": { 2246 | "version": "2.8.1", 2247 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", 2248 | "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", 2249 | "license": "0BSD", 2250 | "optional": true 2251 | }, 2252 | "node_modules/typescript": { 2253 | "version": "5.7.3", 2254 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", 2255 | "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", 2256 | "license": "Apache-2.0", 2257 | "bin": { 2258 | "tsc": "bin/tsc", 2259 | "tsserver": "bin/tsserver" 2260 | }, 2261 | "engines": { 2262 | "node": ">=14.17" 2263 | } 2264 | }, 2265 | "node_modules/undici": { 2266 | "version": "5.28.5", 2267 | "resolved": "https://registry.npmjs.org/undici/-/undici-5.28.5.tgz", 2268 | "integrity": "sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA==", 2269 | "license": "MIT", 2270 | "dependencies": { 2271 | "@fastify/busboy": "^2.0.0" 2272 | }, 2273 | "engines": { 2274 | "node": ">=14.0" 2275 | } 2276 | }, 2277 | "node_modules/undici-types": { 2278 | "version": "6.19.8", 2279 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", 2280 | "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", 2281 | "license": "MIT" 2282 | }, 2283 | "node_modules/v8-compile-cache-lib": { 2284 | "version": "3.0.1", 2285 | "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", 2286 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", 2287 | "dev": true, 2288 | "license": "MIT" 2289 | }, 2290 | "node_modules/web-streams-polyfill": { 2291 | "version": "4.0.0-beta.3", 2292 | "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", 2293 | "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", 2294 | "license": "MIT", 2295 | "engines": { 2296 | "node": ">= 14" 2297 | } 2298 | }, 2299 | "node_modules/web-tree-sitter": { 2300 | "version": "0.24.7", 2301 | "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.24.7.tgz", 2302 | "integrity": "sha512-CdC/TqVFbXqR+C51v38hv6wOPatKEUGxa39scAeFSm98wIhZxAYonhRQPSMmfZ2w7JDI0zQDdzdmgtNk06/krQ==", 2303 | "license": "MIT", 2304 | "peer": true 2305 | }, 2306 | "node_modules/webidl-conversions": { 2307 | "version": "3.0.1", 2308 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 2309 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", 2310 | "license": "BSD-2-Clause" 2311 | }, 2312 | "node_modules/whatwg-url": { 2313 | "version": "5.0.0", 2314 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 2315 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 2316 | "license": "MIT", 2317 | "dependencies": { 2318 | "tr46": "~0.0.3", 2319 | "webidl-conversions": "^3.0.0" 2320 | } 2321 | }, 2322 | "node_modules/which": { 2323 | "version": "2.0.2", 2324 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 2325 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 2326 | "license": "ISC", 2327 | "dependencies": { 2328 | "isexe": "^2.0.0" 2329 | }, 2330 | "bin": { 2331 | "node-which": "bin/node-which" 2332 | }, 2333 | "engines": { 2334 | "node": ">= 8" 2335 | } 2336 | }, 2337 | "node_modules/wrap-ansi": { 2338 | "version": "8.1.0", 2339 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", 2340 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", 2341 | "license": "MIT", 2342 | "dependencies": { 2343 | "ansi-styles": "^6.1.0", 2344 | "string-width": "^5.0.1", 2345 | "strip-ansi": "^7.0.1" 2346 | }, 2347 | "engines": { 2348 | "node": ">=12" 2349 | }, 2350 | "funding": { 2351 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2352 | } 2353 | }, 2354 | "node_modules/wrap-ansi-cjs": { 2355 | "name": "wrap-ansi", 2356 | "version": "7.0.0", 2357 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 2358 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 2359 | "license": "MIT", 2360 | "dependencies": { 2361 | "ansi-styles": "^4.0.0", 2362 | "string-width": "^4.1.0", 2363 | "strip-ansi": "^6.0.0" 2364 | }, 2365 | "engines": { 2366 | "node": ">=10" 2367 | }, 2368 | "funding": { 2369 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2370 | } 2371 | }, 2372 | "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { 2373 | "version": "5.0.1", 2374 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2375 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2376 | "license": "MIT", 2377 | "engines": { 2378 | "node": ">=8" 2379 | } 2380 | }, 2381 | "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { 2382 | "version": "4.3.0", 2383 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2384 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2385 | "license": "MIT", 2386 | "dependencies": { 2387 | "color-convert": "^2.0.1" 2388 | }, 2389 | "engines": { 2390 | "node": ">=8" 2391 | }, 2392 | "funding": { 2393 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 2394 | } 2395 | }, 2396 | "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { 2397 | "version": "8.0.0", 2398 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 2399 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 2400 | "license": "MIT" 2401 | }, 2402 | "node_modules/wrap-ansi-cjs/node_modules/string-width": { 2403 | "version": "4.2.3", 2404 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2405 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2406 | "license": "MIT", 2407 | "dependencies": { 2408 | "emoji-regex": "^8.0.0", 2409 | "is-fullwidth-code-point": "^3.0.0", 2410 | "strip-ansi": "^6.0.1" 2411 | }, 2412 | "engines": { 2413 | "node": ">=8" 2414 | } 2415 | }, 2416 | "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { 2417 | "version": "6.0.1", 2418 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2419 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2420 | "license": "MIT", 2421 | "dependencies": { 2422 | "ansi-regex": "^5.0.1" 2423 | }, 2424 | "engines": { 2425 | "node": ">=8" 2426 | } 2427 | }, 2428 | "node_modules/yallist": { 2429 | "version": "5.0.0", 2430 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", 2431 | "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", 2432 | "license": "BlueOak-1.0.0", 2433 | "engines": { 2434 | "node": ">=18" 2435 | } 2436 | }, 2437 | "node_modules/yn": { 2438 | "version": "3.1.1", 2439 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", 2440 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 2441 | "dev": true, 2442 | "license": "MIT", 2443 | "engines": { 2444 | "node": ">=6" 2445 | } 2446 | }, 2447 | "node_modules/zod": { 2448 | "version": "3.24.2", 2449 | "resolved": "https://registry.npmjs.org/zod/-/zod-3.24.2.tgz", 2450 | "integrity": "sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==", 2451 | "license": "MIT", 2452 | "funding": { 2453 | "url": "https://github.com/sponsors/colinhacks" 2454 | } 2455 | }, 2456 | "node_modules/zod-to-json-schema": { 2457 | "version": "3.24.3", 2458 | "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.24.3.tgz", 2459 | "integrity": "sha512-HIAfWdYIt1sssHfYZFCXp4rU1w2r8hVVXYIlmoa0r0gABLs5di3RCqPU5DDROogVz1pAdYBaz7HK5n9pSUNs3A==", 2460 | "license": "ISC", 2461 | "peerDependencies": { 2462 | "zod": "^3.24.1" 2463 | } 2464 | } 2465 | } 2466 | } 2467 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "quick-rag", 3 | "version": "1.0.0", 4 | "description": "tutorial for a quick rag with llamaindex in typescript", 5 | "license": "ISC", 6 | "author": "salim laimeche", 7 | "type": "commonjs", 8 | "main": "dist/index.js", 9 | "scripts": { 10 | "build": "tsc", 11 | "start": "node dist/index.js", 12 | "dev": "ts-node src/index.ts" 13 | }, 14 | "dependencies": { 15 | "@huggingface/inference": "^3.4.0", 16 | "@llamaindex/core": "^0.5.3", 17 | "@llamaindex/huggingface": "^0.0.39", 18 | "@llamaindex/openai": "^0.1.55", 19 | "@llamaindex/qdrant": "^0.1.3", 20 | "@qdrant/js-client-rest": "^1.13.0", 21 | "dotenv": "^16.4.7", 22 | "llamaindex": "^0.9.4", 23 | "openai": "^4.86.0", 24 | "papaparse": "^5.5.2" 25 | }, 26 | "devDependencies": { 27 | "@types/node": "^20.11.19", 28 | "@types/papaparse": "^5.3.15", 29 | "ts-node": "^10.9.2", 30 | "typescript": "^5.3.3" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/bot.ts: -------------------------------------------------------------------------------- 1 | import { config } from "dotenv"; 2 | import { HuggingFaceEmbedding } from "@llamaindex/huggingface"; 3 | import { QdrantClient } from "@qdrant/js-client-rest"; 4 | 5 | // Charger les variables d'environnement 6 | config(); 7 | 8 | type CollectionName = "salim_embeddings" | "qdrant-doc"; 9 | 10 | const QDRANT_URL = process.env.QDRANT_URL; 11 | const QDRANT_API_KEY = process.env.QDRANT_API_KEY; 12 | const collectionName : CollectionName = "salim_embeddings" // or "qdrant-doc" 13 | 14 | async function demo() { 15 | try { 16 | // Générer l'embedding pour la requête 17 | 18 | const query = collectionName === "qdrant-doc" 19 | ? "Sparse Vectors in Qdrant: Pure Vector-based Hybrid Search - Qdrant" 20 | : "Ce blog est construit dans le but de vous aider dans vos projets impliquant l’intelligence artificielle." 21 | console.log(`❓ Requête: "${query}"`); 22 | 23 | // Obtenir l'embedding de la requête 24 | const embedding = await new HuggingFaceEmbedding({ 25 | modelType: collectionName === "salim_embeddings" ? "sentence-transformers/bert-base-nli-mean-tokens" : "sentence-transformers/all-MiniLM-L6-v2", 26 | //@ts-ignore 27 | quantized: false, 28 | }).getTextEmbedding(query); 29 | 30 | // Initialiser le client Qdrant 31 | const client = new QdrantClient({ 32 | url: QDRANT_URL, 33 | apiKey: QDRANT_API_KEY, 34 | }); 35 | 36 | // Rechercher dans Qdrant 37 | console.log("🔍 Recherche dans Qdrant..."); 38 | const searchResults = await client.search(collectionName, { 39 | vector: embedding, 40 | limit: 5, 41 | }); 42 | 43 | // Formater les résultats en JSON 44 | const formattedResults = searchResults.map((result, index) => ({ 45 | id: index + 1, 46 | score: (result.score * 100).toFixed(2) + "%", 47 | text: result.payload?.text || "Texte non disponible", 48 | content_type: result.payload?.content_type || null, 49 | model: result.payload?.model || null 50 | })); 51 | 52 | // Afficher les résultats au format JSON 53 | console.log(JSON.stringify({ 54 | query: query, 55 | results: formattedResults 56 | }, null, 2)); 57 | 58 | return formattedResults; 59 | } catch (error) { 60 | console.error("❌ Erreur dans la démo:", error); 61 | return []; 62 | } 63 | } 64 | 65 | export { demo }; 66 | -------------------------------------------------------------------------------- /src/config.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/salim4n/quick-rag-typescript-qdrant/7f6528fd2d31850275a70178588741e1b47f5559/src/config.ts -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { demo } from "./bot"; 2 | 3 | import "dotenv/config"; 4 | import { QdrantService } from "./qdrantService"; 5 | 6 | // Charger les variables d'environnement 7 | 8 | // Le programme principal 9 | async function main() { 10 | try { 11 | // Étape 1: Initialiser et charger les données dans Qdrant 12 | const qdrantService = new QdrantService(); 13 | await qdrantService.initializeCollection(768); 14 | await qdrantService.loadDataFromCSV(); 15 | // Étape 2: Exécuter la démonstration 16 | await demo(); 17 | 18 | console.log("✅ Démonstration terminée avec succès!"); 19 | } catch (error) { 20 | console.error("❌ Erreur dans le programme principal:", error); 21 | } 22 | } 23 | 24 | // Exécuter le programme principal 25 | main().catch((error) => { 26 | console.error("❌ Erreur non gérée:", error); 27 | process.exit(1); 28 | }); 29 | -------------------------------------------------------------------------------- /src/qdrantService.ts: -------------------------------------------------------------------------------- 1 | import { QdrantClient } from "@qdrant/js-client-rest"; 2 | import { fetch } from "undici"; 3 | import Papa from "papaparse"; 4 | import { config } from "dotenv"; 5 | 6 | // Charger les variables d'environnement 7 | config(); 8 | 9 | const QDRANT_URL = process.env.QDRANT_URL; 10 | const QDRANT_API_KEY = process.env.QDRANT_API_KEY; 11 | const CSV_URL = "https://huggingface.co/datasets/IgnitionAI/doc/resolve/main/salim-embeddings.csv"; 12 | 13 | // Interface pour les données CSV 14 | export interface CSVRow { 15 | id: number; 16 | project_id: string; 17 | asset_id: string; 18 | model_id: string; 19 | content_type: string; 20 | original_chunk: string; 21 | embedding: string; 22 | created_at: string; 23 | updated_at: string; 24 | } 25 | 26 | // Fonction pour télécharger et parser le CSV 27 | export async function fetchCSV(url: string = CSV_URL): Promise { 28 | try { 29 | const response = await fetch(url); 30 | if (!response.ok) { 31 | throw new Error(`HTTP error! status: ${response.status}`); 32 | } 33 | const csvText = await response.text(); 34 | 35 | // Afficher les 200 premiers caractères du CSV pour le débogage 36 | console.log(`📄 Aperçu du CSV brut: ${csvText.substring(0, 200)}...`); 37 | 38 | return new Promise((resolve, reject) => { 39 | Papa.parse(csvText, { 40 | header: true, 41 | delimiter: ";", 42 | dynamicTyping: true, 43 | complete: (results) => { 44 | const data = results.data as CSVRow[]; 45 | console.log(`📋 Nombre de colonnes: ${Object.keys(data[0] || {}).length}`); 46 | console.log(`📋 Noms des colonnes: ${Object.keys(data[0] || {}).join(', ')}`); 47 | resolve(data); 48 | }, 49 | error: (error: any) => reject(error), 50 | }); 51 | }); 52 | } catch (error) { 53 | console.error("Erreur lors du téléchargement du CSV:", error); 54 | throw error; 55 | } 56 | } 57 | 58 | // Convertir une chaîne "[x,y,z]" en tableau de nombres 59 | export function parseEmbedding(embeddingStr: string | undefined): number[] { 60 | if (!embeddingStr) { 61 | console.warn("Embedding manquant, utilisation d'un vecteur vide"); 62 | return []; // Retourner un tableau vide ou un vecteur par défaut 63 | } 64 | 65 | try { 66 | return JSON.parse(embeddingStr); 67 | } catch (error) { 68 | console.warn(`Erreur lors du parsing de l'embedding: ${embeddingStr.substring(0, 30)}...`); 69 | return []; // Retourner un tableau vide en cas d'erreur 70 | } 71 | } 72 | 73 | // Classe pour gérer l'interaction avec Qdrant 74 | export class QdrantService { 75 | private client: QdrantClient; 76 | private collectionName: string; 77 | 78 | constructor( 79 | collectionName: string = "salim_embeddings", 80 | url = QDRANT_URL, 81 | apiKey = QDRANT_API_KEY 82 | ) { 83 | this.client = new QdrantClient({ 84 | url, 85 | apiKey, 86 | }); 87 | this.collectionName = collectionName; 88 | } 89 | 90 | // Vérifier si la collection existe et la créer si nécessaire 91 | async initializeCollection(vectorSize: number): Promise { 92 | try { 93 | const collections = await this.client.getCollections(); 94 | const exists = collections.collections.some((c) => c.name === this.collectionName); 95 | 96 | if (!exists) { 97 | console.log(`🆕 Création de la collection ${this.collectionName}...`); 98 | await this.client.createCollection(this.collectionName, { 99 | vectors: { 100 | size: vectorSize, 101 | distance: "Cosine", 102 | }, 103 | }); 104 | console.log(`✅ Collection ${this.collectionName} créée.`); 105 | } else { 106 | console.log(`✅ Collection ${this.collectionName} existe déjà.`); 107 | } 108 | } catch (error) { 109 | console.error("Erreur lors de l'initialisation de la collection:", error); 110 | throw error; 111 | } 112 | } 113 | 114 | // Insérer des données dans Qdrant 115 | async upsertData(data: CSVRow[]): Promise { 116 | try { 117 | console.log("📤 Insertion des données dans Qdrant..."); 118 | 119 | const points = data 120 | .map((row) => { 121 | const vector = parseEmbedding(row.embedding); 122 | // Si le vecteur est vide, on ne crée pas de point 123 | if (vector.length === 0) { 124 | return null; 125 | } 126 | 127 | return { 128 | id: row.id, 129 | vector, 130 | payload: { 131 | // Métadonnées nécessaires pour LlamaIndex 132 | text: row.original_chunk, // LlamaIndex cherche 'text' ou 'content' 133 | id_: row.id.toString(), // LlamaIndex utilise id_ pour identifier les nœuds 134 | 135 | // Métadonnées supplémentaires 136 | project_id: row.project_id, 137 | asset_id: row.asset_id, 138 | model_id: row.model_id, 139 | content_type: row.content_type, 140 | created_at: row.created_at, 141 | updated_at: row.updated_at, 142 | }, 143 | }; 144 | }) 145 | .filter((point): point is NonNullable => point !== null); 146 | 147 | console.log(`🔢 Nombre de points valides à insérer: ${points.length}/${data.length}`); 148 | 149 | if (points.length === 0) { 150 | console.warn("⚠️ Aucun point valide à insérer !"); 151 | return; 152 | } 153 | 154 | await this.client.upsert(this.collectionName, { points }); 155 | console.log("✅ Données insérées dans Qdrant."); 156 | } catch (error) { 157 | console.error("Erreur lors de l'insertion des données:", error); 158 | throw error; 159 | } 160 | } 161 | 162 | // Fonction principale pour charger les données depuis CSV vers Qdrant 163 | async loadDataFromCSV(csvUrl: string = CSV_URL): Promise { 164 | try { 165 | console.log("📥 Téléchargement du CSV..."); 166 | const data = await fetchCSV(csvUrl); 167 | console.log(`✅ CSV chargé : ${data.length} lignes.`); 168 | 169 | // Afficher les premières lignes pour le débogage 170 | console.log("📊 Exemple de données (première ligne):"); 171 | if (data.length > 0) { 172 | const firstRow = data[0]; 173 | console.log({ 174 | id: firstRow.id, 175 | project_id: firstRow.project_id, 176 | embedding_preview: firstRow.embedding ? 177 | `${firstRow.embedding.substring(0, 30)}... (${firstRow.embedding.length} caractères)` : 178 | "undefined" 179 | }); 180 | } 181 | 182 | // Initialiser la collection avec la taille des vecteurs 183 | const firstValidEmbedding = data.find(row => row.embedding)?.embedding; 184 | if (!firstValidEmbedding) { 185 | throw new Error("Aucun embedding valide trouvé dans les données CSV"); 186 | } 187 | 188 | const vectorSize = parseEmbedding(firstValidEmbedding).length; 189 | if (vectorSize === 0) { 190 | throw new Error("Impossible de déterminer la taille des vecteurs d'embedding"); 191 | } 192 | 193 | console.log(`📏 Taille des vecteurs d'embedding: ${vectorSize}`); 194 | await this.initializeCollection(vectorSize); 195 | 196 | // Insérer les données 197 | await this.upsertData(data); 198 | } catch (error) { 199 | console.error("Erreur lors du chargement des données:", error); 200 | throw error; 201 | } 202 | } 203 | 204 | // Getter pour le client Qdrant (utile pour le chatbot) 205 | getClient(): QdrantClient { 206 | return this.client; 207 | } 208 | 209 | // Getter pour le nom de la collection 210 | getCollectionName(): string { 211 | return this.collectionName; 212 | } 213 | } 214 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "es2017", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 16 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 17 | // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ 18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 22 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 24 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 25 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 26 | 27 | /* Modules */ 28 | "module": "commonjs", /* Specify what module code is generated. */ 29 | // "rootDir": "./", /* Specify the root folder within your source files. */ 30 | // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ 31 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 32 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 33 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 34 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ 35 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 36 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 37 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 38 | // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ 39 | // "rewriteRelativeImportExtensions": true, /* Rewrite '.ts', '.tsx', '.mts', and '.cts' file extensions in relative import paths to their JavaScript equivalent in output files. */ 40 | // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ 41 | // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ 42 | // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ 43 | // "noUncheckedSideEffectImports": true, /* Check side effect imports. */ 44 | // "resolveJsonModule": true, /* Enable importing .json files. */ 45 | // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ 46 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ 47 | 48 | /* JavaScript Support */ 49 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 50 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 51 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 52 | 53 | /* Emit */ 54 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 55 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 56 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 57 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 58 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 59 | // "noEmit": true, /* Disable emitting files from a compilation. */ 60 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ 61 | // "outDir": "./", /* Specify an output folder for all emitted files. */ 62 | // "removeComments": true, /* Disable emitting comments. */ 63 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 64 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 65 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 66 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 67 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 68 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 69 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 70 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ 71 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ 72 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 73 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ 74 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 75 | 76 | /* Interop Constraints */ 77 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 78 | // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ 79 | // "isolatedDeclarations": true, /* Require sufficient annotation on exports so other tools can trivially generate declaration files. */ 80 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 81 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ 82 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 83 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 84 | 85 | /* Type Checking */ 86 | "strict": true, /* Enable all strict type-checking options. */ 87 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 88 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 89 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 90 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 91 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 92 | // "strictBuiltinIteratorReturn": true, /* Built-in iterators are instantiated with a 'TReturn' type of 'undefined' instead of 'any'. */ 93 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 94 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 95 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 96 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 97 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 98 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 99 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 100 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 101 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 102 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 103 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 104 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 105 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 106 | 107 | /* Completeness */ 108 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 109 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 110 | } 111 | } 112 | --------------------------------------------------------------------------------