Spaces:
				
			
			
	
			
			
		Runtime error
		
	
	
	
			
			
	
	
	
	
		
		
		Runtime error
		
	
		Thomas G. Lopes
		
	commited on
		
		
					update hf libs & update code snippets (#87)
Browse files- package.json +17 -6
- pnpm-lock.yaml +1067 -144
- src/lib/components/inference-playground/code-snippets.svelte +8 -21
- src/lib/components/inference-playground/snippets/curl.svelte.ts +0 -191
- src/lib/components/inference-playground/snippets/index.svelte.ts +0 -5
- src/lib/components/inference-playground/snippets/js.svelte.ts +0 -489
- src/lib/components/inference-playground/snippets/python.svelte.ts +0 -534
- src/lib/components/inference-playground/utils.svelte.ts +72 -57
- src/lib/state/conversations.svelte.ts +12 -2
- src/lib/types.ts +1 -1
- src/lib/utils/snippets.spec.ts +399 -0
- src/lib/utils/snippets.ts +294 -0
- vite.config.ts +28 -10
- vitest-setup-client.ts +18 -0
    	
        package.json
    CHANGED
    
    | @@ -12,16 +12,18 @@ | |
| 12 | 
             
            		"lint": "prettier . --check . && eslint src/",
         | 
| 13 | 
             
            		"format": "prettier . --write .",
         | 
| 14 | 
             
            		"clean": "rm -rf ./node_modules/ && rm -rf ./.svelte-kit/ && ni && echo 'Project cleaned!'",
         | 
| 15 | 
            -
            		"update-ctx-length": "jiti scripts/update-ctx-length.ts"
         | 
|  | |
|  | |
| 16 | 
             
            	},
         | 
| 17 | 
             
            	"devDependencies": {
         | 
| 18 | 
             
            		"@eslint/eslintrc": "^3.3.0",
         | 
| 19 | 
             
            		"@eslint/js": "^9.22.0",
         | 
| 20 | 
             
            		"@floating-ui/dom": "^1.6.13",
         | 
| 21 | 
            -
            		"@huggingface/hub": "^1.0 | 
| 22 | 
            -
            		"@huggingface/inference": "^3. | 
| 23 | 
            -
            		"@huggingface/tasks": "^0. | 
| 24 | 
            -
            		"@huggingface/transformers": "^3. | 
| 25 | 
             
            		"@iconify-json/carbon": "^1.2.8",
         | 
| 26 | 
             
            		"@iconify-json/material-symbols": "^1.2.15",
         | 
| 27 | 
             
            		"@ryoppippi/unplugin-typia": "^1.0.0",
         | 
| @@ -32,6 +34,8 @@ | |
| 32 | 
             
            		"@sveltejs/vite-plugin-svelte": "^4.0.0",
         | 
| 33 | 
             
            		"@tailwindcss/container-queries": "^0.1.1",
         | 
| 34 | 
             
            		"@tailwindcss/postcss": "^4.0.9",
         | 
|  | |
|  | |
| 35 | 
             
            		"@types/node": "^22.14.1",
         | 
| 36 | 
             
            		"clsx": "^2.1.1",
         | 
| 37 | 
             
            		"dotenv": "^16.5.0",
         | 
| @@ -41,6 +45,7 @@ | |
| 41 | 
             
            		"globals": "^16.0.0",
         | 
| 42 | 
             
            		"highlight.js": "^11.10.0",
         | 
| 43 | 
             
            		"jiti": "^2.4.2",
         | 
|  | |
| 44 | 
             
            		"melt": "^0.30.1",
         | 
| 45 | 
             
            		"openai": "^4.90.0",
         | 
| 46 | 
             
            		"postcss": "^8.4.38",
         | 
| @@ -58,7 +63,8 @@ | |
| 58 | 
             
            		"typescript": "^5.8.2",
         | 
| 59 | 
             
            		"typescript-eslint": "^8.26.1",
         | 
| 60 | 
             
            		"unplugin-icons": "^22.1.0",
         | 
| 61 | 
            -
            		"vite": "^5.4.4"
         | 
|  | |
| 62 | 
             
            	},
         | 
| 63 | 
             
            	"type": "module",
         | 
| 64 | 
             
            	"dependencies": {
         | 
| @@ -66,5 +72,10 @@ | |
| 66 | 
             
            		"eslint-plugin-svelte": "^3.6.0",
         | 
| 67 | 
             
            		"remult": "^3.0.2",
         | 
| 68 | 
             
            		"typia": "^8.0.0"
         | 
|  | |
|  | |
|  | |
|  | |
|  | |
| 69 | 
             
            	}
         | 
| 70 | 
             
            }
         | 
|  | |
| 12 | 
             
            		"lint": "prettier . --check . && eslint src/",
         | 
| 13 | 
             
            		"format": "prettier . --write .",
         | 
| 14 | 
             
            		"clean": "rm -rf ./node_modules/ && rm -rf ./.svelte-kit/ && ni && echo 'Project cleaned!'",
         | 
| 15 | 
            +
            		"update-ctx-length": "jiti scripts/update-ctx-length.ts",
         | 
| 16 | 
            +
            		"test:unit": "vitest",
         | 
| 17 | 
            +
            		"test": "npm run test:unit -- --run"
         | 
| 18 | 
             
            	},
         | 
| 19 | 
             
            	"devDependencies": {
         | 
| 20 | 
             
            		"@eslint/eslintrc": "^3.3.0",
         | 
| 21 | 
             
            		"@eslint/js": "^9.22.0",
         | 
| 22 | 
             
            		"@floating-ui/dom": "^1.6.13",
         | 
| 23 | 
            +
            		"@huggingface/hub": "^2.1.0",
         | 
| 24 | 
            +
            		"@huggingface/inference": "^3.13.2",
         | 
| 25 | 
            +
            		"@huggingface/tasks": "^0.19.8",
         | 
| 26 | 
            +
            		"@huggingface/transformers": "^3.5.1",
         | 
| 27 | 
             
            		"@iconify-json/carbon": "^1.2.8",
         | 
| 28 | 
             
            		"@iconify-json/material-symbols": "^1.2.15",
         | 
| 29 | 
             
            		"@ryoppippi/unplugin-typia": "^1.0.0",
         | 
|  | |
| 34 | 
             
            		"@sveltejs/vite-plugin-svelte": "^4.0.0",
         | 
| 35 | 
             
            		"@tailwindcss/container-queries": "^0.1.1",
         | 
| 36 | 
             
            		"@tailwindcss/postcss": "^4.0.9",
         | 
| 37 | 
            +
            		"@testing-library/jest-dom": "^6.6.3",
         | 
| 38 | 
            +
            		"@testing-library/svelte": "^5.2.4",
         | 
| 39 | 
             
            		"@types/node": "^22.14.1",
         | 
| 40 | 
             
            		"clsx": "^2.1.1",
         | 
| 41 | 
             
            		"dotenv": "^16.5.0",
         | 
|  | |
| 45 | 
             
            		"globals": "^16.0.0",
         | 
| 46 | 
             
            		"highlight.js": "^11.10.0",
         | 
| 47 | 
             
            		"jiti": "^2.4.2",
         | 
| 48 | 
            +
            		"jsdom": "^26.0.0",
         | 
| 49 | 
             
            		"melt": "^0.30.1",
         | 
| 50 | 
             
            		"openai": "^4.90.0",
         | 
| 51 | 
             
            		"postcss": "^8.4.38",
         | 
|  | |
| 63 | 
             
            		"typescript": "^5.8.2",
         | 
| 64 | 
             
            		"typescript-eslint": "^8.26.1",
         | 
| 65 | 
             
            		"unplugin-icons": "^22.1.0",
         | 
| 66 | 
            +
            		"vite": "^5.4.4",
         | 
| 67 | 
            +
            		"vitest": "^3.0.0"
         | 
| 68 | 
             
            	},
         | 
| 69 | 
             
            	"type": "module",
         | 
| 70 | 
             
            	"dependencies": {
         | 
|  | |
| 72 | 
             
            		"eslint-plugin-svelte": "^3.6.0",
         | 
| 73 | 
             
            		"remult": "^3.0.2",
         | 
| 74 | 
             
            		"typia": "^8.0.0"
         | 
| 75 | 
            +
            	},
         | 
| 76 | 
            +
            	"pnpm": {
         | 
| 77 | 
            +
            		"onlyBuiltDependencies": [
         | 
| 78 | 
            +
            			"esbuild"
         | 
| 79 | 
            +
            		]
         | 
| 80 | 
             
            	}
         | 
| 81 | 
             
            }
         | 
    	
        pnpm-lock.yaml
    CHANGED
    
    | @@ -31,17 +31,17 @@ importers: | |
| 31 | 
             
                    specifier: ^1.6.13
         | 
| 32 | 
             
                    version: 1.6.13
         | 
| 33 | 
             
                  '@huggingface/hub':
         | 
| 34 | 
            -
                    specifier: ^1.0 | 
| 35 | 
            -
                    version: 1.0 | 
| 36 | 
             
                  '@huggingface/inference':
         | 
| 37 | 
            -
                    specifier: ^3. | 
| 38 | 
            -
                    version: 3. | 
| 39 | 
             
                  '@huggingface/tasks':
         | 
| 40 | 
            -
                    specifier: ^0. | 
| 41 | 
            -
                    version: 0. | 
| 42 | 
             
                  '@huggingface/transformers':
         | 
| 43 | 
            -
                    specifier: ^3. | 
| 44 | 
            -
                    version: 3. | 
| 45 | 
             
                  '@iconify-json/carbon':
         | 
| 46 | 
             
                    specifier: ^1.2.8
         | 
| 47 | 
             
                    version: 1.2.8
         | 
| @@ -72,6 +72,12 @@ importers: | |
| 72 | 
             
                  '@tailwindcss/postcss':
         | 
| 73 | 
             
                    specifier: ^4.0.9
         | 
| 74 | 
             
                    version: 4.0.9
         | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 75 | 
             
                  '@types/node':
         | 
| 76 | 
             
                    specifier: ^22.14.1
         | 
| 77 | 
             
                    version: 22.14.1
         | 
| @@ -99,12 +105,15 @@ importers: | |
| 99 | 
             
                  jiti:
         | 
| 100 | 
             
                    specifier: ^2.4.2
         | 
| 101 | 
             
                    version: 2.4.2
         | 
|  | |
|  | |
|  | |
| 102 | 
             
                  melt:
         | 
| 103 | 
             
                    specifier: ^0.30.1
         | 
| 104 | 
             
                    version: 0.30.1(@floating-ui/dom@1.6.13)(svelte@5.30.1)
         | 
| 105 | 
             
                  openai:
         | 
| 106 | 
             
                    specifier: ^4.90.0
         | 
| 107 | 
            -
                    version: 4.90.0
         | 
| 108 | 
             
                  postcss:
         | 
| 109 | 
             
                    specifier: ^8.4.38
         | 
| 110 | 
             
                    version: 8.5.3
         | 
| @@ -153,9 +162,15 @@ importers: | |
| 153 | 
             
                  vite:
         | 
| 154 | 
             
                    specifier: ^5.4.4
         | 
| 155 | 
             
                    version: 5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)
         | 
|  | |
|  | |
|  | |
| 156 |  | 
| 157 | 
             
            packages:
         | 
| 158 |  | 
|  | |
|  | |
|  | |
| 159 | 
             
              '@alloc/quick-lru@5.2.0':
         | 
| 160 | 
             
                resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
         | 
| 161 | 
             
                engines: {node: '>=10'}
         | 
| @@ -170,8 +185,51 @@ packages: | |
| 170 | 
             
              '@antfu/utils@8.1.1':
         | 
| 171 | 
             
                resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==}
         | 
| 172 |  | 
| 173 | 
            -
              '@ | 
| 174 | 
            -
                resolution: {integrity: sha512- | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 175 |  | 
| 176 | 
             
              '@esbuild/aix-ppc64@0.21.5':
         | 
| 177 | 
             
                resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
         | 
| @@ -508,26 +566,28 @@ packages: | |
| 508 | 
             
              '@floating-ui/utils@0.2.9':
         | 
| 509 | 
             
                resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==}
         | 
| 510 |  | 
| 511 | 
            -
              '@huggingface/hub@1.0 | 
| 512 | 
            -
                resolution: {integrity: sha512- | 
| 513 | 
             
                engines: {node: '>=18'}
         | 
|  | |
| 514 |  | 
| 515 | 
            -
              '@huggingface/inference@3. | 
| 516 | 
            -
                resolution: {integrity: sha512- | 
| 517 | 
             
                engines: {node: '>=18'}
         | 
| 518 |  | 
| 519 | 
            -
              '@huggingface/jinja@0. | 
| 520 | 
            -
                resolution: {integrity: sha512- | 
| 521 | 
             
                engines: {node: '>=18'}
         | 
| 522 |  | 
| 523 | 
            -
              '@huggingface/ | 
| 524 | 
            -
                resolution: {integrity: sha512- | 
|  | |
| 525 |  | 
| 526 | 
            -
              '@huggingface/tasks@0. | 
| 527 | 
            -
                resolution: {integrity: sha512- | 
| 528 |  | 
| 529 | 
            -
              '@huggingface/transformers@3. | 
| 530 | 
            -
                resolution: {integrity: sha512- | 
| 531 |  | 
| 532 | 
             
              '@humanfs/core@0.19.1':
         | 
| 533 | 
             
                resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
         | 
| @@ -561,107 +621,118 @@ packages: | |
| 561 | 
             
              '@iconify/utils@2.3.0':
         | 
| 562 | 
             
                resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==}
         | 
| 563 |  | 
| 564 | 
            -
              '@img/sharp-darwin-arm64@0. | 
| 565 | 
            -
                resolution: {integrity: sha512- | 
| 566 | 
             
                engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
         | 
| 567 | 
             
                cpu: [arm64]
         | 
| 568 | 
             
                os: [darwin]
         | 
| 569 |  | 
| 570 | 
            -
              '@img/sharp-darwin-x64@0. | 
| 571 | 
            -
                resolution: {integrity: sha512- | 
| 572 | 
             
                engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
         | 
| 573 | 
             
                cpu: [x64]
         | 
| 574 | 
             
                os: [darwin]
         | 
| 575 |  | 
| 576 | 
            -
              '@img/sharp-libvips-darwin-arm64@1.0 | 
| 577 | 
            -
                resolution: {integrity: sha512- | 
| 578 | 
             
                cpu: [arm64]
         | 
| 579 | 
             
                os: [darwin]
         | 
| 580 |  | 
| 581 | 
            -
              '@img/sharp-libvips-darwin-x64@1.0 | 
| 582 | 
            -
                resolution: {integrity: sha512- | 
| 583 | 
             
                cpu: [x64]
         | 
| 584 | 
             
                os: [darwin]
         | 
| 585 |  | 
| 586 | 
            -
              '@img/sharp-libvips-linux-arm64@1.0 | 
| 587 | 
            -
                resolution: {integrity: sha512- | 
| 588 | 
             
                cpu: [arm64]
         | 
| 589 | 
             
                os: [linux]
         | 
| 590 |  | 
| 591 | 
            -
              '@img/sharp-libvips-linux-arm@1.0 | 
| 592 | 
            -
                resolution: {integrity: sha512- | 
| 593 | 
             
                cpu: [arm]
         | 
| 594 | 
             
                os: [linux]
         | 
| 595 |  | 
| 596 | 
            -
              '@img/sharp-libvips-linux- | 
| 597 | 
            -
                resolution: {integrity: sha512- | 
|  | |
|  | |
|  | |
|  | |
|  | |
| 598 | 
             
                cpu: [s390x]
         | 
| 599 | 
             
                os: [linux]
         | 
| 600 |  | 
| 601 | 
            -
              '@img/sharp-libvips-linux-x64@1.0 | 
| 602 | 
            -
                resolution: {integrity: sha512- | 
| 603 | 
             
                cpu: [x64]
         | 
| 604 | 
             
                os: [linux]
         | 
| 605 |  | 
| 606 | 
            -
              '@img/sharp-libvips-linuxmusl-arm64@1.0 | 
| 607 | 
            -
                resolution: {integrity: sha512- | 
| 608 | 
             
                cpu: [arm64]
         | 
| 609 | 
             
                os: [linux]
         | 
| 610 |  | 
| 611 | 
            -
              '@img/sharp-libvips-linuxmusl-x64@1.0 | 
| 612 | 
            -
                resolution: {integrity: sha512- | 
| 613 | 
             
                cpu: [x64]
         | 
| 614 | 
             
                os: [linux]
         | 
| 615 |  | 
| 616 | 
            -
              '@img/sharp-linux-arm64@0. | 
| 617 | 
            -
                resolution: {integrity: sha512- | 
| 618 | 
             
                engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
         | 
| 619 | 
             
                cpu: [arm64]
         | 
| 620 | 
             
                os: [linux]
         | 
| 621 |  | 
| 622 | 
            -
              '@img/sharp-linux-arm@0. | 
| 623 | 
            -
                resolution: {integrity: sha512- | 
| 624 | 
             
                engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
         | 
| 625 | 
             
                cpu: [arm]
         | 
| 626 | 
             
                os: [linux]
         | 
| 627 |  | 
| 628 | 
            -
              '@img/sharp-linux-s390x@0. | 
| 629 | 
            -
                resolution: {integrity: sha512- | 
| 630 | 
             
                engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
         | 
| 631 | 
             
                cpu: [s390x]
         | 
| 632 | 
             
                os: [linux]
         | 
| 633 |  | 
| 634 | 
            -
              '@img/sharp-linux-x64@0. | 
| 635 | 
            -
                resolution: {integrity: sha512- | 
| 636 | 
             
                engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
         | 
| 637 | 
             
                cpu: [x64]
         | 
| 638 | 
             
                os: [linux]
         | 
| 639 |  | 
| 640 | 
            -
              '@img/sharp-linuxmusl-arm64@0. | 
| 641 | 
            -
                resolution: {integrity: sha512- | 
| 642 | 
             
                engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
         | 
| 643 | 
             
                cpu: [arm64]
         | 
| 644 | 
             
                os: [linux]
         | 
| 645 |  | 
| 646 | 
            -
              '@img/sharp-linuxmusl-x64@0. | 
| 647 | 
            -
                resolution: {integrity: sha512- | 
| 648 | 
             
                engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
         | 
| 649 | 
             
                cpu: [x64]
         | 
| 650 | 
             
                os: [linux]
         | 
| 651 |  | 
| 652 | 
            -
              '@img/sharp-wasm32@0. | 
| 653 | 
            -
                resolution: {integrity: sha512 | 
| 654 | 
             
                engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
         | 
| 655 | 
             
                cpu: [wasm32]
         | 
| 656 |  | 
| 657 | 
            -
              '@img/sharp-win32- | 
| 658 | 
            -
                resolution: {integrity: sha512- | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 659 | 
             
                engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
         | 
| 660 | 
             
                cpu: [ia32]
         | 
| 661 | 
             
                os: [win32]
         | 
| 662 |  | 
| 663 | 
            -
              '@img/sharp-win32-x64@0. | 
| 664 | 
            -
                resolution: {integrity: sha512- | 
| 665 | 
             
                engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
         | 
| 666 | 
             
                cpu: [x64]
         | 
| 667 | 
             
                os: [win32]
         | 
| @@ -1029,6 +1100,30 @@ packages: | |
| 1029 | 
             
              '@tailwindcss/postcss@4.0.9':
         | 
| 1030 | 
             
                resolution: {integrity: sha512-BT/E+pdMqulavEAVM5NCpxmGEwHiLDPpkmg/c/X25ZBW+izTe+aZ+v1gf/HXTrihRoCxrUp5U4YyHsBTzspQKQ==}
         | 
| 1031 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 1032 | 
             
              '@types/cookie@0.6.0':
         | 
| 1033 | 
             
                resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
         | 
| 1034 |  | 
| @@ -1109,6 +1204,35 @@ packages: | |
| 1109 | 
             
              '@ungap/structured-clone@1.3.0':
         | 
| 1110 | 
             
                resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
         | 
| 1111 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 1112 | 
             
              abort-controller@3.0.0:
         | 
| 1113 | 
             
                resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
         | 
| 1114 | 
             
                engines: {node: '>=6.5'}
         | 
| @@ -1123,6 +1247,10 @@ packages: | |
| 1123 | 
             
                engines: {node: '>=0.4.0'}
         | 
| 1124 | 
             
                hasBin: true
         | 
| 1125 |  | 
|  | |
|  | |
|  | |
|  | |
| 1126 | 
             
              agentkeepalive@4.6.0:
         | 
| 1127 | 
             
                resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
         | 
| 1128 | 
             
                engines: {node: '>= 8.0.0'}
         | 
| @@ -1149,6 +1277,9 @@ packages: | |
| 1149 | 
             
              argparse@2.0.1:
         | 
| 1150 | 
             
                resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
         | 
| 1151 |  | 
|  | |
|  | |
|  | |
| 1152 | 
             
              aria-query@5.3.2:
         | 
| 1153 | 
             
                resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
         | 
| 1154 | 
             
                engines: {node: '>= 0.4'}
         | 
| @@ -1156,6 +1287,10 @@ packages: | |
| 1156 | 
             
              array-timsort@1.0.3:
         | 
| 1157 | 
             
                resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==}
         | 
| 1158 |  | 
|  | |
|  | |
|  | |
|  | |
| 1159 | 
             
              asynckit@0.4.0:
         | 
| 1160 | 
             
                resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
         | 
| 1161 |  | 
| @@ -1176,6 +1311,10 @@ packages: | |
| 1176 | 
             
              bl@4.1.0:
         | 
| 1177 | 
             
                resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
         | 
| 1178 |  | 
|  | |
|  | |
|  | |
|  | |
| 1179 | 
             
              brace-expansion@1.1.11:
         | 
| 1180 | 
             
                resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
         | 
| 1181 |  | 
| @@ -1189,6 +1328,10 @@ packages: | |
| 1189 | 
             
              buffer@5.7.1:
         | 
| 1190 | 
             
                resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
         | 
| 1191 |  | 
|  | |
|  | |
|  | |
|  | |
| 1192 | 
             
              call-bind-apply-helpers@1.0.2:
         | 
| 1193 | 
             
                resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
         | 
| 1194 | 
             
                engines: {node: '>= 0.4'}
         | 
| @@ -1200,6 +1343,14 @@ packages: | |
| 1200 | 
             
              ccount@2.0.1:
         | 
| 1201 | 
             
                resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
         | 
| 1202 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 1203 | 
             
              chalk@4.1.2:
         | 
| 1204 | 
             
                resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
         | 
| 1205 | 
             
                engines: {node: '>=10'}
         | 
| @@ -1213,6 +1364,10 @@ packages: | |
| 1213 | 
             
              chardet@0.7.0:
         | 
| 1214 | 
             
                resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
         | 
| 1215 |  | 
|  | |
|  | |
|  | |
|  | |
| 1216 | 
             
              chokidar@4.0.3:
         | 
| 1217 | 
             
                resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
         | 
| 1218 | 
             
                engines: {node: '>= 14.16.0'}
         | 
| @@ -1300,11 +1455,22 @@ packages: | |
| 1300 | 
             
                resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
         | 
| 1301 | 
             
                engines: {node: '>= 8'}
         | 
| 1302 |  | 
|  | |
|  | |
|  | |
| 1303 | 
             
              cssesc@3.0.0:
         | 
| 1304 | 
             
                resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
         | 
| 1305 | 
             
                engines: {node: '>=4'}
         | 
| 1306 | 
             
                hasBin: true
         | 
| 1307 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 1308 | 
             
              debug@4.4.0:
         | 
| 1309 | 
             
                resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
         | 
| 1310 | 
             
                engines: {node: '>=6.0'}
         | 
| @@ -1314,6 +1480,13 @@ packages: | |
| 1314 | 
             
                  supports-color:
         | 
| 1315 | 
             
                    optional: true
         | 
| 1316 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 1317 | 
             
              deep-is@0.1.4:
         | 
| 1318 | 
             
                resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
         | 
| 1319 |  | 
| @@ -1324,6 +1497,14 @@ packages: | |
| 1324 | 
             
              defaults@1.0.4:
         | 
| 1325 | 
             
                resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
         | 
| 1326 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 1327 | 
             
              defu@6.1.4:
         | 
| 1328 | 
             
                resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
         | 
| 1329 |  | 
| @@ -1340,10 +1521,13 @@ packages: | |
| 1340 | 
             
                engines: {node: '>=0.10'}
         | 
| 1341 | 
             
                hasBin: true
         | 
| 1342 |  | 
| 1343 | 
            -
              detect-libc@2.0. | 
| 1344 | 
            -
                resolution: {integrity: sha512- | 
| 1345 | 
             
                engines: {node: '>=8'}
         | 
| 1346 |  | 
|  | |
|  | |
|  | |
| 1347 | 
             
              devalue@5.1.1:
         | 
| 1348 | 
             
                resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==}
         | 
| 1349 |  | 
| @@ -1357,6 +1541,12 @@ packages: | |
| 1357 | 
             
                resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
         | 
| 1358 | 
             
                engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
         | 
| 1359 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 1360 | 
             
              dotenv@16.5.0:
         | 
| 1361 | 
             
                resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==}
         | 
| 1362 | 
             
                engines: {node: '>=12'}
         | 
| @@ -1376,6 +1566,10 @@ packages: | |
| 1376 | 
             
                resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==}
         | 
| 1377 | 
             
                engines: {node: '>=10.13.0'}
         | 
| 1378 |  | 
|  | |
|  | |
|  | |
|  | |
| 1379 | 
             
              es-define-property@1.0.1:
         | 
| 1380 | 
             
                resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
         | 
| 1381 | 
             
                engines: {node: '>= 0.4'}
         | 
| @@ -1384,6 +1578,9 @@ packages: | |
| 1384 | 
             
                resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
         | 
| 1385 | 
             
                engines: {node: '>= 0.4'}
         | 
| 1386 |  | 
|  | |
|  | |
|  | |
| 1387 | 
             
              es-object-atoms@1.1.1:
         | 
| 1388 | 
             
                resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
         | 
| 1389 | 
             
                engines: {node: '>= 0.4'}
         | 
| @@ -1392,6 +1589,9 @@ packages: | |
| 1392 | 
             
                resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
         | 
| 1393 | 
             
                engines: {node: '>= 0.4'}
         | 
| 1394 |  | 
|  | |
|  | |
|  | |
| 1395 | 
             
              esbuild@0.21.5:
         | 
| 1396 | 
             
                resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
         | 
| 1397 | 
             
                engines: {node: '>=12'}
         | 
| @@ -1492,6 +1692,9 @@ packages: | |
| 1492 | 
             
              estree-walker@2.0.2:
         | 
| 1493 | 
             
                resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
         | 
| 1494 |  | 
|  | |
|  | |
|  | |
| 1495 | 
             
              esutils@2.0.3:
         | 
| 1496 | 
             
                resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
         | 
| 1497 | 
             
                engines: {node: '>=0.10.0'}
         | 
| @@ -1500,6 +1703,10 @@ packages: | |
| 1500 | 
             
                resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
         | 
| 1501 | 
             
                engines: {node: '>=6'}
         | 
| 1502 |  | 
|  | |
|  | |
|  | |
|  | |
| 1503 | 
             
              exsolve@1.0.4:
         | 
| 1504 | 
             
                resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==}
         | 
| 1505 |  | 
| @@ -1534,6 +1741,14 @@ packages: | |
| 1534 | 
             
                  picomatch:
         | 
| 1535 | 
             
                    optional: true
         | 
| 1536 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 1537 | 
             
              figures@3.2.0:
         | 
| 1538 | 
             
                resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
         | 
| 1539 | 
             
                engines: {node: '>=8'}
         | 
| @@ -1603,6 +1818,10 @@ packages: | |
| 1603 | 
             
                resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
         | 
| 1604 | 
             
                engines: {node: '>=10.13.0'}
         | 
| 1605 |  | 
|  | |
|  | |
|  | |
|  | |
| 1606 | 
             
              global-prefix@4.0.0:
         | 
| 1607 | 
             
                resolution: {integrity: sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==}
         | 
| 1608 | 
             
                engines: {node: '>=16'}
         | 
| @@ -1619,6 +1838,10 @@ packages: | |
| 1619 | 
             
                resolution: {integrity: sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==}
         | 
| 1620 | 
             
                engines: {node: '>=18'}
         | 
| 1621 |  | 
|  | |
|  | |
|  | |
|  | |
| 1622 | 
             
              gopd@1.2.0:
         | 
| 1623 | 
             
                resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
         | 
| 1624 | 
             
                engines: {node: '>= 0.4'}
         | 
| @@ -1640,6 +1863,9 @@ packages: | |
| 1640 | 
             
                resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==}
         | 
| 1641 | 
             
                engines: {node: '>=8'}
         | 
| 1642 |  | 
|  | |
|  | |
|  | |
| 1643 | 
             
              has-symbols@1.1.0:
         | 
| 1644 | 
             
                resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
         | 
| 1645 | 
             
                engines: {node: '>= 0.4'}
         | 
| @@ -1662,9 +1888,21 @@ packages: | |
| 1662 | 
             
                resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==}
         | 
| 1663 | 
             
                engines: {node: '>=12.0.0'}
         | 
| 1664 |  | 
|  | |
|  | |
|  | |
|  | |
| 1665 | 
             
              html-void-elements@3.0.0:
         | 
| 1666 | 
             
                resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
         | 
| 1667 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 1668 | 
             
              humanize-ms@1.2.1:
         | 
| 1669 | 
             
                resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
         | 
| 1670 |  | 
| @@ -1672,6 +1910,10 @@ packages: | |
| 1672 | 
             
                resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
         | 
| 1673 | 
             
                engines: {node: '>=0.10.0'}
         | 
| 1674 |  | 
|  | |
|  | |
|  | |
|  | |
| 1675 | 
             
              ieee754@1.2.1:
         | 
| 1676 | 
             
                resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
         | 
| 1677 |  | 
| @@ -1690,6 +1932,10 @@ packages: | |
| 1690 | 
             
                resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
         | 
| 1691 | 
             
                engines: {node: '>=0.8.19'}
         | 
| 1692 |  | 
|  | |
|  | |
|  | |
|  | |
| 1693 | 
             
              inherits@2.0.4:
         | 
| 1694 | 
             
                resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
         | 
| 1695 |  | 
| @@ -1731,6 +1977,9 @@ packages: | |
| 1731 | 
             
                resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
         | 
| 1732 | 
             
                engines: {node: '>=0.12.0'}
         | 
| 1733 |  | 
|  | |
|  | |
|  | |
| 1734 | 
             
              is-reference@1.2.1:
         | 
| 1735 | 
             
                resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
         | 
| 1736 |  | 
| @@ -1768,10 +2017,22 @@ packages: | |
| 1768 | 
             
                resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
         | 
| 1769 | 
             
                hasBin: true
         | 
| 1770 |  | 
|  | |
|  | |
|  | |
| 1771 | 
             
              js-yaml@4.1.0:
         | 
| 1772 | 
             
                resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
         | 
| 1773 | 
             
                hasBin: true
         | 
| 1774 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 1775 | 
             
              json-buffer@3.0.1:
         | 
| 1776 | 
             
                resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
         | 
| 1777 |  | 
| @@ -1781,6 +2042,9 @@ packages: | |
| 1781 | 
             
              json-stable-stringify-without-jsonify@1.0.1:
         | 
| 1782 | 
             
                resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
         | 
| 1783 |  | 
|  | |
|  | |
|  | |
| 1784 | 
             
              keyv@4.5.4:
         | 
| 1785 | 
             
                resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
         | 
| 1786 |  | 
| @@ -1898,9 +2162,23 @@ packages: | |
| 1898 | 
             
              long@5.3.1:
         | 
| 1899 | 
             
                resolution: {integrity: sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==}
         | 
| 1900 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 1901 | 
             
              magic-string@0.30.17:
         | 
| 1902 | 
             
                resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
         | 
| 1903 |  | 
|  | |
|  | |
|  | |
|  | |
| 1904 | 
             
              math-intrinsics@1.1.0:
         | 
| 1905 | 
             
                resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
         | 
| 1906 | 
             
                engines: {node: '>= 0.4'}
         | 
| @@ -1949,6 +2227,10 @@ packages: | |
| 1949 | 
             
                resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
         | 
| 1950 | 
             
                engines: {node: '>=6'}
         | 
| 1951 |  | 
|  | |
|  | |
|  | |
|  | |
| 1952 | 
             
              minimatch@3.1.2:
         | 
| 1953 | 
             
                resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
         | 
| 1954 |  | 
| @@ -2015,6 +2297,13 @@ packages: | |
| 2015 | 
             
                  encoding:
         | 
| 2016 | 
             
                    optional: true
         | 
| 2017 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 2018 | 
             
              onetime@5.1.2:
         | 
| 2019 | 
             
                resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
         | 
| 2020 | 
             
                engines: {node: '>=6'}
         | 
| @@ -2025,18 +2314,18 @@ packages: | |
| 2025 | 
             
              oniguruma-to-es@4.3.3:
         | 
| 2026 | 
             
                resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==}
         | 
| 2027 |  | 
| 2028 | 
            -
              onnxruntime-common@1. | 
| 2029 | 
            -
                resolution: {integrity: sha512- | 
| 2030 |  | 
| 2031 | 
            -
              onnxruntime-common@1.22.0-dev. | 
| 2032 | 
            -
                resolution: {integrity: sha512- | 
| 2033 |  | 
| 2034 | 
            -
              onnxruntime-node@1. | 
| 2035 | 
            -
                resolution: {integrity: sha512- | 
| 2036 | 
             
                os: [win32, darwin, linux]
         | 
| 2037 |  | 
| 2038 | 
            -
              onnxruntime-web@1.22.0-dev. | 
| 2039 | 
            -
                resolution: {integrity: sha512- | 
| 2040 |  | 
| 2041 | 
             
              openai@4.90.0:
         | 
| 2042 | 
             
                resolution: {integrity: sha512-YCuHMMycqtCg1B8G9ezkOF0j8UnBWD3Al/zYaelpuXwU1yhCEv+Y4n9G20MnyGy6cH4GsFwOMrgstQ+bgG1PtA==}
         | 
| @@ -2085,6 +2374,9 @@ packages: | |
| 2085 | 
             
                resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
         | 
| 2086 | 
             
                engines: {node: '>=6'}
         | 
| 2087 |  | 
|  | |
|  | |
|  | |
| 2088 | 
             
              path-exists@4.0.0:
         | 
| 2089 | 
             
                resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
         | 
| 2090 | 
             
                engines: {node: '>=8'}
         | 
| @@ -2106,6 +2398,10 @@ packages: | |
| 2106 | 
             
              pathe@2.0.3:
         | 
| 2107 | 
             
                resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
         | 
| 2108 |  | 
|  | |
|  | |
|  | |
|  | |
| 2109 | 
             
              picocolors@1.1.1:
         | 
| 2110 | 
             
                resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
         | 
| 2111 |  | 
| @@ -2236,6 +2532,10 @@ packages: | |
| 2236 | 
             
                engines: {node: '>=14'}
         | 
| 2237 | 
             
                hasBin: true
         | 
| 2238 |  | 
|  | |
|  | |
|  | |
|  | |
| 2239 | 
             
              pretty-format@29.7.0:
         | 
| 2240 | 
             
                resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
         | 
| 2241 | 
             
                engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
         | 
| @@ -2261,6 +2561,9 @@ packages: | |
| 2261 | 
             
                resolution: {integrity: sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==}
         | 
| 2262 | 
             
                engines: {node: '>=4'}
         | 
| 2263 |  | 
|  | |
|  | |
|  | |
| 2264 | 
             
              react-is@18.3.1:
         | 
| 2265 | 
             
                resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
         | 
| 2266 |  | 
| @@ -2272,6 +2575,10 @@ packages: | |
| 2272 | 
             
                resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
         | 
| 2273 | 
             
                engines: {node: '>= 14.18.0'}
         | 
| 2274 |  | 
|  | |
|  | |
|  | |
|  | |
| 2275 | 
             
              reflect-metadata@0.1.14:
         | 
| 2276 | 
             
                resolution: {integrity: sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==}
         | 
| 2277 |  | 
| @@ -2312,11 +2619,18 @@ packages: | |
| 2312 | 
             
                resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
         | 
| 2313 | 
             
                engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
         | 
| 2314 |  | 
|  | |
|  | |
|  | |
|  | |
| 2315 | 
             
              rollup@4.34.9:
         | 
| 2316 | 
             
                resolution: {integrity: sha512-nF5XYqWWp9hx/LrpC8sZvvvmq0TeTjQgaZHYmAgwysT9nh8sWnZhBnM8ZyVbbJFIQBLwHDNoMqsBZBbUo4U8sQ==}
         | 
| 2317 | 
             
                engines: {node: '>=18.0.0', npm: '>=8.0.0'}
         | 
| 2318 | 
             
                hasBin: true
         | 
| 2319 |  | 
|  | |
|  | |
|  | |
| 2320 | 
             
              run-async@2.4.1:
         | 
| 2321 | 
             
                resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
         | 
| 2322 | 
             
                engines: {node: '>=0.12.0'}
         | 
| @@ -2347,16 +2661,32 @@ packages: | |
| 2347 | 
             
              safer-buffer@2.1.2:
         | 
| 2348 | 
             
                resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
         | 
| 2349 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 2350 | 
             
              semver@7.7.1:
         | 
| 2351 | 
             
                resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
         | 
| 2352 | 
             
                engines: {node: '>=10'}
         | 
| 2353 | 
             
                hasBin: true
         | 
| 2354 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 2355 | 
             
              set-cookie-parser@2.7.1:
         | 
| 2356 | 
             
                resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==}
         | 
| 2357 |  | 
| 2358 | 
            -
              sharp@0. | 
| 2359 | 
            -
                resolution: {integrity: sha512- | 
| 2360 | 
             
                engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
         | 
| 2361 |  | 
| 2362 | 
             
              shebang-command@2.0.0:
         | 
| @@ -2370,6 +2700,9 @@ packages: | |
| 2370 | 
             
              shiki@3.4.0:
         | 
| 2371 | 
             
                resolution: {integrity: sha512-Ni80XHcqhOEXv5mmDAvf5p6PAJqbUc/RzFeaOqk+zP5DLvTPS3j0ckvA+MI87qoxTQ5RGJDVTbdl/ENLSyyAnQ==}
         | 
| 2372 |  | 
|  | |
|  | |
|  | |
| 2373 | 
             
              signal-exit@3.0.7:
         | 
| 2374 | 
             
                resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
         | 
| 2375 |  | 
| @@ -2387,6 +2720,15 @@ packages: | |
| 2387 | 
             
              space-separated-tokens@2.0.2:
         | 
| 2388 | 
             
                resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
         | 
| 2389 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 2390 | 
             
              string-width@4.2.3:
         | 
| 2391 | 
             
                resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
         | 
| 2392 | 
             
                engines: {node: '>=8'}
         | 
| @@ -2401,6 +2743,10 @@ packages: | |
| 2401 | 
             
                resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
         | 
| 2402 | 
             
                engines: {node: '>=8'}
         | 
| 2403 |  | 
|  | |
|  | |
|  | |
|  | |
| 2404 | 
             
              strip-json-comments@3.1.1:
         | 
| 2405 | 
             
                resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
         | 
| 2406 | 
             
                engines: {node: '>=8'}
         | 
| @@ -2434,6 +2780,9 @@ packages: | |
| 2434 | 
             
                resolution: {integrity: sha512-QIYtKnJGkubWXtNkrUBKVCvyo9gjcccdbnvXfwsGNhvbeNNdQjRDTa/BiQcJ2kWXbXPQbWKyT7CUu53KIj1rfw==}
         | 
| 2435 | 
             
                engines: {node: '>=18'}
         | 
| 2436 |  | 
|  | |
|  | |
|  | |
| 2437 | 
             
              synckit@0.9.2:
         | 
| 2438 | 
             
                resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==}
         | 
| 2439 | 
             
                engines: {node: ^14.18.0 || >=16.0.0}
         | 
| @@ -2455,9 +2804,35 @@ packages: | |
| 2455 | 
             
              through@2.3.8:
         | 
| 2456 | 
             
                resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
         | 
| 2457 |  | 
|  | |
|  | |
|  | |
| 2458 | 
             
              tinyexec@0.3.2:
         | 
| 2459 | 
             
                resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
         | 
| 2460 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 2461 | 
             
              tmp@0.0.33:
         | 
| 2462 | 
             
                resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
         | 
| 2463 | 
             
                engines: {node: '>=0.6.0'}
         | 
| @@ -2470,9 +2845,17 @@ packages: | |
| 2470 | 
             
                resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
         | 
| 2471 | 
             
                engines: {node: '>=6'}
         | 
| 2472 |  | 
|  | |
|  | |
|  | |
|  | |
| 2473 | 
             
              tr46@0.0.3:
         | 
| 2474 | 
             
                resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
         | 
| 2475 |  | 
|  | |
|  | |
|  | |
|  | |
| 2476 | 
             
              trim-lines@3.0.1:
         | 
| 2477 | 
             
                resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
         | 
| 2478 |  | 
| @@ -2493,6 +2876,10 @@ packages: | |
| 2493 | 
             
                resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
         | 
| 2494 | 
             
                engines: {node: '>= 0.8.0'}
         | 
| 2495 |  | 
|  | |
|  | |
|  | |
|  | |
| 2496 | 
             
              type-fest@0.21.3:
         | 
| 2497 | 
             
                resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
         | 
| 2498 | 
             
                engines: {node: '>=10'}
         | 
| @@ -2603,6 +2990,11 @@ packages: | |
| 2603 | 
             
              vfile@6.0.3:
         | 
| 2604 | 
             
                resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
         | 
| 2605 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
| 2606 | 
             
              vite@5.4.14:
         | 
| 2607 | 
             
                resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==}
         | 
| 2608 | 
             
                engines: {node: ^18.0.0 || >=20.0.0}
         | 
| @@ -2682,6 +3074,38 @@ packages: | |
| 2682 | 
             
                  vite:
         | 
| 2683 | 
             
                    optional: true
         | 
| 2684 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 2685 | 
             
              wcwidth@1.0.1:
         | 
| 2686 | 
             
                resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
         | 
| 2687 |  | 
| @@ -2692,9 +3116,25 @@ packages: | |
| 2692 | 
             
              webidl-conversions@3.0.1:
         | 
| 2693 | 
             
                resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
         | 
| 2694 |  | 
|  | |
|  | |
|  | |
|  | |
| 2695 | 
             
              webpack-virtual-modules@0.6.2:
         | 
| 2696 | 
             
                resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
         | 
| 2697 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 2698 | 
             
              whatwg-url@5.0.0:
         | 
| 2699 | 
             
                resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
         | 
| 2700 |  | 
| @@ -2708,6 +3148,11 @@ packages: | |
| 2708 | 
             
                engines: {node: ^16.13.0 || >=18.0.0}
         | 
| 2709 | 
             
                hasBin: true
         | 
| 2710 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
| 2711 | 
             
              word-wrap@1.2.5:
         | 
| 2712 | 
             
                resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
         | 
| 2713 | 
             
                engines: {node: '>=0.10.0'}
         | 
| @@ -2716,6 +3161,25 @@ packages: | |
| 2716 | 
             
                resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
         | 
| 2717 | 
             
                engines: {node: '>=8'}
         | 
| 2718 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 2719 | 
             
              yallist@5.0.0:
         | 
| 2720 | 
             
                resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
         | 
| 2721 | 
             
                engines: {node: '>=18'}
         | 
| @@ -2745,6 +3209,8 @@ packages: | |
| 2745 |  | 
| 2746 | 
             
            snapshots:
         | 
| 2747 |  | 
|  | |
|  | |
| 2748 | 
             
              '@alloc/quick-lru@5.2.0': {}
         | 
| 2749 |  | 
| 2750 | 
             
              '@ampproject/remapping@2.3.0':
         | 
| @@ -2759,7 +3225,45 @@ snapshots: | |
| 2759 |  | 
| 2760 | 
             
              '@antfu/utils@8.1.1': {}
         | 
| 2761 |  | 
| 2762 | 
            -
              '@ | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 2763 | 
             
                dependencies:
         | 
| 2764 | 
             
                  tslib: 2.8.1
         | 
| 2765 | 
             
                optional: true
         | 
| @@ -2963,26 +3467,27 @@ snapshots: | |
| 2963 |  | 
| 2964 | 
             
              '@floating-ui/utils@0.2.9': {}
         | 
| 2965 |  | 
| 2966 | 
            -
              '@huggingface/hub@1.0 | 
| 2967 | 
             
                dependencies:
         | 
| 2968 | 
            -
                  '@huggingface/tasks': 0. | 
| 2969 |  | 
| 2970 | 
            -
              '@huggingface/inference@3. | 
| 2971 | 
             
                dependencies:
         | 
| 2972 | 
            -
                  '@huggingface/ | 
|  | |
| 2973 |  | 
| 2974 | 
            -
              '@huggingface/jinja@0. | 
| 2975 |  | 
| 2976 | 
            -
              '@huggingface/ | 
| 2977 |  | 
| 2978 | 
            -
              '@huggingface/tasks@0. | 
| 2979 |  | 
| 2980 | 
            -
              '@huggingface/transformers@3. | 
| 2981 | 
             
                dependencies:
         | 
| 2982 | 
            -
                  '@huggingface/jinja': 0. | 
| 2983 | 
            -
                  onnxruntime-node: 1. | 
| 2984 | 
            -
                  onnxruntime-web: 1.22.0-dev. | 
| 2985 | 
            -
                  sharp: 0. | 
| 2986 |  | 
| 2987 | 
             
              '@humanfs/core@0.19.1': {}
         | 
| 2988 |  | 
| @@ -3020,79 +3525,85 @@ snapshots: | |
| 3020 | 
             
                transitivePeerDependencies:
         | 
| 3021 | 
             
                  - supports-color
         | 
| 3022 |  | 
| 3023 | 
            -
              '@img/sharp-darwin-arm64@0. | 
| 3024 | 
             
                optionalDependencies:
         | 
| 3025 | 
            -
                  '@img/sharp-libvips-darwin-arm64': 1.0 | 
| 3026 | 
             
                optional: true
         | 
| 3027 |  | 
| 3028 | 
            -
              '@img/sharp-darwin-x64@0. | 
| 3029 | 
             
                optionalDependencies:
         | 
| 3030 | 
            -
                  '@img/sharp-libvips-darwin-x64': 1.0 | 
| 3031 | 
             
                optional: true
         | 
| 3032 |  | 
| 3033 | 
            -
              '@img/sharp-libvips-darwin-arm64@1.0 | 
| 3034 | 
             
                optional: true
         | 
| 3035 |  | 
| 3036 | 
            -
              '@img/sharp-libvips-darwin-x64@1.0 | 
| 3037 | 
             
                optional: true
         | 
| 3038 |  | 
| 3039 | 
            -
              '@img/sharp-libvips-linux-arm64@1.0 | 
| 3040 | 
             
                optional: true
         | 
| 3041 |  | 
| 3042 | 
            -
              '@img/sharp-libvips-linux-arm@1.0 | 
| 3043 | 
             
                optional: true
         | 
| 3044 |  | 
| 3045 | 
            -
              '@img/sharp-libvips-linux- | 
| 3046 | 
             
                optional: true
         | 
| 3047 |  | 
| 3048 | 
            -
              '@img/sharp-libvips-linux- | 
| 3049 | 
             
                optional: true
         | 
| 3050 |  | 
| 3051 | 
            -
              '@img/sharp-libvips- | 
| 3052 | 
             
                optional: true
         | 
| 3053 |  | 
| 3054 | 
            -
              '@img/sharp-libvips-linuxmusl- | 
| 3055 | 
             
                optional: true
         | 
| 3056 |  | 
| 3057 | 
            -
              '@img/sharp- | 
|  | |
|  | |
|  | |
| 3058 | 
             
                optionalDependencies:
         | 
| 3059 | 
            -
                  '@img/sharp-libvips-linux-arm64': 1.0 | 
| 3060 | 
             
                optional: true
         | 
| 3061 |  | 
| 3062 | 
            -
              '@img/sharp-linux-arm@0. | 
| 3063 | 
             
                optionalDependencies:
         | 
| 3064 | 
            -
                  '@img/sharp-libvips-linux-arm': 1.0 | 
| 3065 | 
             
                optional: true
         | 
| 3066 |  | 
| 3067 | 
            -
              '@img/sharp-linux-s390x@0. | 
| 3068 | 
             
                optionalDependencies:
         | 
| 3069 | 
            -
                  '@img/sharp-libvips-linux-s390x': 1.0 | 
| 3070 | 
             
                optional: true
         | 
| 3071 |  | 
| 3072 | 
            -
              '@img/sharp-linux-x64@0. | 
| 3073 | 
             
                optionalDependencies:
         | 
| 3074 | 
            -
                  '@img/sharp-libvips-linux-x64': 1.0 | 
| 3075 | 
             
                optional: true
         | 
| 3076 |  | 
| 3077 | 
            -
              '@img/sharp-linuxmusl-arm64@0. | 
| 3078 | 
             
                optionalDependencies:
         | 
| 3079 | 
            -
                  '@img/sharp-libvips-linuxmusl-arm64': 1.0 | 
| 3080 | 
             
                optional: true
         | 
| 3081 |  | 
| 3082 | 
            -
              '@img/sharp-linuxmusl-x64@0. | 
| 3083 | 
             
                optionalDependencies:
         | 
| 3084 | 
            -
                  '@img/sharp-libvips-linuxmusl-x64': 1.0 | 
| 3085 | 
             
                optional: true
         | 
| 3086 |  | 
| 3087 | 
            -
              '@img/sharp-wasm32@0. | 
| 3088 | 
             
                dependencies:
         | 
| 3089 | 
            -
                  '@emnapi/runtime': 1.4. | 
|  | |
|  | |
|  | |
| 3090 | 
             
                optional: true
         | 
| 3091 |  | 
| 3092 | 
            -
              '@img/sharp-win32-ia32@0. | 
| 3093 | 
             
                optional: true
         | 
| 3094 |  | 
| 3095 | 
            -
              '@img/sharp-win32-x64@0. | 
| 3096 | 
             
                optional: true
         | 
| 3097 |  | 
| 3098 | 
             
              '@isaacs/fs-minipass@4.0.1':
         | 
| @@ -3447,6 +3958,37 @@ snapshots: | |
| 3447 | 
             
                  postcss: 8.5.3
         | 
| 3448 | 
             
                  tailwindcss: 4.0.9
         | 
| 3449 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 3450 | 
             
              '@types/cookie@0.6.0': {}
         | 
| 3451 |  | 
| 3452 | 
             
              '@types/estree@1.0.6': {}
         | 
| @@ -3557,6 +4099,46 @@ snapshots: | |
| 3557 |  | 
| 3558 | 
             
              '@ungap/structured-clone@1.3.0': {}
         | 
| 3559 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 3560 | 
             
              abort-controller@3.0.0:
         | 
| 3561 | 
             
                dependencies:
         | 
| 3562 | 
             
                  event-target-shim: 5.0.1
         | 
| @@ -3567,6 +4149,8 @@ snapshots: | |
| 3567 |  | 
| 3568 | 
             
              acorn@8.14.0: {}
         | 
| 3569 |  | 
|  | |
|  | |
| 3570 | 
             
              agentkeepalive@4.6.0:
         | 
| 3571 | 
             
                dependencies:
         | 
| 3572 | 
             
                  humanize-ms: 1.2.1
         | 
| @@ -3592,10 +4176,16 @@ snapshots: | |
| 3592 |  | 
| 3593 | 
             
              argparse@2.0.1: {}
         | 
| 3594 |  | 
|  | |
|  | |
|  | |
|  | |
| 3595 | 
             
              aria-query@5.3.2: {}
         | 
| 3596 |  | 
| 3597 | 
             
              array-timsort@1.0.3: {}
         | 
| 3598 |  | 
|  | |
|  | |
| 3599 | 
             
              asynckit@0.4.0: {}
         | 
| 3600 |  | 
| 3601 | 
             
              axe-core@4.9.1: {}
         | 
| @@ -3612,6 +4202,8 @@ snapshots: | |
| 3612 | 
             
                  inherits: 2.0.4
         | 
| 3613 | 
             
                  readable-stream: 3.6.2
         | 
| 3614 |  | 
|  | |
|  | |
| 3615 | 
             
              brace-expansion@1.1.11:
         | 
| 3616 | 
             
                dependencies:
         | 
| 3617 | 
             
                  balanced-match: 1.0.2
         | 
| @@ -3630,6 +4222,8 @@ snapshots: | |
| 3630 | 
             
                  base64-js: 1.5.1
         | 
| 3631 | 
             
                  ieee754: 1.2.1
         | 
| 3632 |  | 
|  | |
|  | |
| 3633 | 
             
              call-bind-apply-helpers@1.0.2:
         | 
| 3634 | 
             
                dependencies:
         | 
| 3635 | 
             
                  es-errors: 1.3.0
         | 
| @@ -3639,6 +4233,19 @@ snapshots: | |
| 3639 |  | 
| 3640 | 
             
              ccount@2.0.1: {}
         | 
| 3641 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 3642 | 
             
              chalk@4.1.2:
         | 
| 3643 | 
             
                dependencies:
         | 
| 3644 | 
             
                  ansi-styles: 4.3.0
         | 
| @@ -3650,6 +4257,8 @@ snapshots: | |
| 3650 |  | 
| 3651 | 
             
              chardet@0.7.0: {}
         | 
| 3652 |  | 
|  | |
|  | |
| 3653 | 
             
              chokidar@4.0.3:
         | 
| 3654 | 
             
                dependencies:
         | 
| 3655 | 
             
                  readdirp: 4.1.2
         | 
| @@ -3722,12 +4331,28 @@ snapshots: | |
| 3722 | 
             
                  shebang-command: 2.0.0
         | 
| 3723 | 
             
                  which: 2.0.2
         | 
| 3724 |  | 
|  | |
|  | |
| 3725 | 
             
              cssesc@3.0.0: {}
         | 
| 3726 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 3727 | 
             
              debug@4.4.0:
         | 
| 3728 | 
             
                dependencies:
         | 
| 3729 | 
             
                  ms: 2.1.3
         | 
| 3730 |  | 
|  | |
|  | |
|  | |
|  | |
| 3731 | 
             
              deep-is@0.1.4: {}
         | 
| 3732 |  | 
| 3733 | 
             
              deepmerge@4.3.1: {}
         | 
| @@ -3736,6 +4361,18 @@ snapshots: | |
| 3736 | 
             
                dependencies:
         | 
| 3737 | 
             
                  clone: 1.0.4
         | 
| 3738 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 3739 | 
             
              defu@6.1.4: {}
         | 
| 3740 |  | 
| 3741 | 
             
              delayed-stream@1.0.0: {}
         | 
| @@ -3744,7 +4381,9 @@ snapshots: | |
| 3744 |  | 
| 3745 | 
             
              detect-libc@1.0.3: {}
         | 
| 3746 |  | 
| 3747 | 
            -
              detect-libc@2.0. | 
|  | |
|  | |
| 3748 |  | 
| 3749 | 
             
              devalue@5.1.1: {}
         | 
| 3750 |  | 
| @@ -3756,6 +4395,10 @@ snapshots: | |
| 3756 |  | 
| 3757 | 
             
              diff-sequences@29.6.3: {}
         | 
| 3758 |  | 
|  | |
|  | |
|  | |
|  | |
| 3759 | 
             
              dotenv@16.5.0: {}
         | 
| 3760 |  | 
| 3761 | 
             
              drange@1.1.1: {}
         | 
| @@ -3773,10 +4416,14 @@ snapshots: | |
| 3773 | 
             
                  graceful-fs: 4.2.11
         | 
| 3774 | 
             
                  tapable: 2.2.1
         | 
| 3775 |  | 
|  | |
|  | |
| 3776 | 
             
              es-define-property@1.0.1: {}
         | 
| 3777 |  | 
| 3778 | 
             
              es-errors@1.3.0: {}
         | 
| 3779 |  | 
|  | |
|  | |
| 3780 | 
             
              es-object-atoms@1.1.1:
         | 
| 3781 | 
             
                dependencies:
         | 
| 3782 | 
             
                  es-errors: 1.3.0
         | 
| @@ -3788,6 +4435,8 @@ snapshots: | |
| 3788 | 
             
                  has-tostringtag: 1.0.2
         | 
| 3789 | 
             
                  hasown: 2.0.2
         | 
| 3790 |  | 
|  | |
|  | |
| 3791 | 
             
              esbuild@0.21.5:
         | 
| 3792 | 
             
                optionalDependencies:
         | 
| 3793 | 
             
                  '@esbuild/aix-ppc64': 0.21.5
         | 
| @@ -3953,10 +4602,16 @@ snapshots: | |
| 3953 |  | 
| 3954 | 
             
              estree-walker@2.0.2: {}
         | 
| 3955 |  | 
|  | |
|  | |
|  | |
|  | |
| 3956 | 
             
              esutils@2.0.3: {}
         | 
| 3957 |  | 
| 3958 | 
             
              event-target-shim@5.0.1: {}
         | 
| 3959 |  | 
|  | |
|  | |
| 3960 | 
             
              exsolve@1.0.4: {}
         | 
| 3961 |  | 
| 3962 | 
             
              external-editor@3.1.0:
         | 
| @@ -3989,6 +4644,10 @@ snapshots: | |
| 3989 | 
             
                optionalDependencies:
         | 
| 3990 | 
             
                  picomatch: 4.0.2
         | 
| 3991 |  | 
|  | |
|  | |
|  | |
|  | |
| 3992 | 
             
              figures@3.2.0:
         | 
| 3993 | 
             
                dependencies:
         | 
| 3994 | 
             
                  escape-string-regexp: 1.0.5
         | 
| @@ -4070,6 +4729,15 @@ snapshots: | |
| 4070 | 
             
                dependencies:
         | 
| 4071 | 
             
                  is-glob: 4.0.3
         | 
| 4072 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 4073 | 
             
              global-prefix@4.0.0:
         | 
| 4074 | 
             
                dependencies:
         | 
| 4075 | 
             
                  ini: 4.1.3
         | 
| @@ -4082,6 +4750,11 @@ snapshots: | |
| 4082 |  | 
| 4083 | 
             
              globals@16.0.0: {}
         | 
| 4084 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
| 4085 | 
             
              gopd@1.2.0: {}
         | 
| 4086 |  | 
| 4087 | 
             
              graceful-fs@4.2.11: {}
         | 
| @@ -4094,6 +4767,10 @@ snapshots: | |
| 4094 |  | 
| 4095 | 
             
              has-own-prop@2.0.0: {}
         | 
| 4096 |  | 
|  | |
|  | |
|  | |
|  | |
| 4097 | 
             
              has-symbols@1.1.0: {}
         | 
| 4098 |  | 
| 4099 | 
             
              has-tostringtag@1.0.2:
         | 
| @@ -4124,8 +4801,26 @@ snapshots: | |
| 4124 |  | 
| 4125 | 
             
              highlight.js@11.11.1: {}
         | 
| 4126 |  | 
|  | |
|  | |
|  | |
|  | |
| 4127 | 
             
              html-void-elements@3.0.0: {}
         | 
| 4128 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 4129 | 
             
              humanize-ms@1.2.1:
         | 
| 4130 | 
             
                dependencies:
         | 
| 4131 | 
             
                  ms: 2.1.3
         | 
| @@ -4134,6 +4829,10 @@ snapshots: | |
| 4134 | 
             
                dependencies:
         | 
| 4135 | 
             
                  safer-buffer: 2.1.2
         | 
| 4136 |  | 
|  | |
|  | |
|  | |
|  | |
| 4137 | 
             
              ieee754@1.2.1: {}
         | 
| 4138 |  | 
| 4139 | 
             
              ignore@5.3.2: {}
         | 
| @@ -4147,6 +4846,8 @@ snapshots: | |
| 4147 |  | 
| 4148 | 
             
              imurmurhash@0.1.4: {}
         | 
| 4149 |  | 
|  | |
|  | |
| 4150 | 
             
              inherits@2.0.4: {}
         | 
| 4151 |  | 
| 4152 | 
             
              ini@4.1.3: {}
         | 
| @@ -4189,6 +4890,8 @@ snapshots: | |
| 4189 |  | 
| 4190 | 
             
              is-number@7.0.0: {}
         | 
| 4191 |  | 
|  | |
|  | |
| 4192 | 
             
              is-reference@1.2.1:
         | 
| 4193 | 
             
                dependencies:
         | 
| 4194 | 
             
                  '@types/estree': 1.0.6
         | 
| @@ -4228,16 +4931,47 @@ snapshots: | |
| 4228 |  | 
| 4229 | 
             
              jiti@2.4.2: {}
         | 
| 4230 |  | 
|  | |
|  | |
| 4231 | 
             
              js-yaml@4.1.0:
         | 
| 4232 | 
             
                dependencies:
         | 
| 4233 | 
             
                  argparse: 2.0.1
         | 
| 4234 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 4235 | 
             
              json-buffer@3.0.1: {}
         | 
| 4236 |  | 
| 4237 | 
             
              json-schema-traverse@0.4.1: {}
         | 
| 4238 |  | 
| 4239 | 
             
              json-stable-stringify-without-jsonify@1.0.1: {}
         | 
| 4240 |  | 
|  | |
|  | |
| 4241 | 
             
              keyv@4.5.4:
         | 
| 4242 | 
             
                dependencies:
         | 
| 4243 | 
             
                  json-buffer: 3.0.1
         | 
| @@ -4329,10 +5063,20 @@ snapshots: | |
| 4329 |  | 
| 4330 | 
             
              long@5.3.1: {}
         | 
| 4331 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 4332 | 
             
              magic-string@0.30.17:
         | 
| 4333 | 
             
                dependencies:
         | 
| 4334 | 
             
                  '@jridgewell/sourcemap-codec': 1.5.0
         | 
| 4335 |  | 
|  | |
|  | |
|  | |
|  | |
| 4336 | 
             
              math-intrinsics@1.1.0: {}
         | 
| 4337 |  | 
| 4338 | 
             
              mdast-util-to-hast@13.2.0:
         | 
| @@ -4388,6 +5132,8 @@ snapshots: | |
| 4388 |  | 
| 4389 | 
             
              mimic-fn@2.1.0: {}
         | 
| 4390 |  | 
|  | |
|  | |
| 4391 | 
             
              minimatch@3.1.2:
         | 
| 4392 | 
             
                dependencies:
         | 
| 4393 | 
             
                  brace-expansion: 1.1.11
         | 
| @@ -4433,6 +5179,10 @@ snapshots: | |
| 4433 | 
             
                dependencies:
         | 
| 4434 | 
             
                  whatwg-url: 5.0.0
         | 
| 4435 |  | 
|  | |
|  | |
|  | |
|  | |
| 4436 | 
             
              onetime@5.1.2:
         | 
| 4437 | 
             
                dependencies:
         | 
| 4438 | 
             
                  mimic-fn: 2.1.0
         | 
| @@ -4445,25 +5195,26 @@ snapshots: | |
| 4445 | 
             
                  regex: 6.0.1
         | 
| 4446 | 
             
                  regex-recursion: 6.0.2
         | 
| 4447 |  | 
| 4448 | 
            -
              onnxruntime-common@1. | 
| 4449 |  | 
| 4450 | 
            -
              onnxruntime-common@1.22.0-dev. | 
| 4451 |  | 
| 4452 | 
            -
              onnxruntime-node@1. | 
| 4453 | 
             
                dependencies:
         | 
| 4454 | 
            -
                   | 
|  | |
| 4455 | 
             
                  tar: 7.4.3
         | 
| 4456 |  | 
| 4457 | 
            -
              onnxruntime-web@1.22.0-dev. | 
| 4458 | 
             
                dependencies:
         | 
| 4459 | 
             
                  flatbuffers: 25.2.10
         | 
| 4460 | 
             
                  guid-typescript: 1.0.9
         | 
| 4461 | 
             
                  long: 5.3.1
         | 
| 4462 | 
            -
                  onnxruntime-common: 1.22.0-dev. | 
| 4463 | 
             
                  platform: 1.3.6
         | 
| 4464 | 
             
                  protobufjs: 7.4.0
         | 
| 4465 |  | 
| 4466 | 
            -
              openai@4.90.0:
         | 
| 4467 | 
             
                dependencies:
         | 
| 4468 | 
             
                  '@types/node': 18.19.84
         | 
| 4469 | 
             
                  '@types/node-fetch': 2.6.12
         | 
| @@ -4472,6 +5223,8 @@ snapshots: | |
| 4472 | 
             
                  form-data-encoder: 1.7.2
         | 
| 4473 | 
             
                  formdata-node: 4.4.1
         | 
| 4474 | 
             
                  node-fetch: 2.7.0
         | 
|  | |
|  | |
| 4475 | 
             
                transitivePeerDependencies:
         | 
| 4476 | 
             
                  - encoding
         | 
| 4477 |  | 
| @@ -4522,6 +5275,10 @@ snapshots: | |
| 4522 | 
             
                dependencies:
         | 
| 4523 | 
             
                  callsites: 3.1.0
         | 
| 4524 |  | 
|  | |
|  | |
|  | |
|  | |
| 4525 | 
             
              path-exists@4.0.0: {}
         | 
| 4526 |  | 
| 4527 | 
             
              path-exists@5.0.0: {}
         | 
| @@ -4534,6 +5291,8 @@ snapshots: | |
| 4534 |  | 
| 4535 | 
             
              pathe@2.0.3: {}
         | 
| 4536 |  | 
|  | |
|  | |
| 4537 | 
             
              picocolors@1.1.1: {}
         | 
| 4538 |  | 
| 4539 | 
             
              picomatch@2.3.1: {}
         | 
| @@ -4603,6 +5362,12 @@ snapshots: | |
| 4603 |  | 
| 4604 | 
             
              prettier@3.5.3: {}
         | 
| 4605 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 4606 | 
             
              pretty-format@29.7.0:
         | 
| 4607 | 
             
                dependencies:
         | 
| 4608 | 
             
                  '@jest/schemas': 29.6.3
         | 
| @@ -4637,6 +5402,8 @@ snapshots: | |
| 4637 | 
             
                  drange: 1.1.1
         | 
| 4638 | 
             
                  ret: 0.2.2
         | 
| 4639 |  | 
|  | |
|  | |
| 4640 | 
             
              react-is@18.3.1: {}
         | 
| 4641 |  | 
| 4642 | 
             
              readable-stream@3.6.2:
         | 
| @@ -4647,6 +5414,11 @@ snapshots: | |
| 4647 |  | 
| 4648 | 
             
              readdirp@4.1.2: {}
         | 
| 4649 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
| 4650 | 
             
              reflect-metadata@0.1.14: {}
         | 
| 4651 |  | 
| 4652 | 
             
              regex-recursion@6.0.2:
         | 
| @@ -4685,6 +5457,15 @@ snapshots: | |
| 4685 |  | 
| 4686 | 
             
              reusify@1.1.0: {}
         | 
| 4687 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 4688 | 
             
              rollup@4.34.9:
         | 
| 4689 | 
             
                dependencies:
         | 
| 4690 | 
             
                  '@types/estree': 1.0.6
         | 
| @@ -4710,6 +5491,8 @@ snapshots: | |
| 4710 | 
             
                  '@rollup/rollup-win32-x64-msvc': 4.34.9
         | 
| 4711 | 
             
                  fsevents: 2.3.3
         | 
| 4712 |  | 
|  | |
|  | |
| 4713 | 
             
              run-async@2.4.1: {}
         | 
| 4714 |  | 
| 4715 | 
             
              run-parallel@1.2.0:
         | 
| @@ -4738,35 +5521,49 @@ snapshots: | |
| 4738 |  | 
| 4739 | 
             
              safer-buffer@2.1.2: {}
         | 
| 4740 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 4741 | 
             
              semver@7.7.1: {}
         | 
| 4742 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 4743 | 
             
              set-cookie-parser@2.7.1: {}
         | 
| 4744 |  | 
| 4745 | 
            -
              sharp@0. | 
| 4746 | 
             
                dependencies:
         | 
| 4747 | 
             
                  color: 4.2.3
         | 
| 4748 | 
            -
                  detect-libc: 2.0. | 
| 4749 | 
            -
                  semver: 7.7. | 
| 4750 | 
             
                optionalDependencies:
         | 
| 4751 | 
            -
                  '@img/sharp-darwin-arm64': 0. | 
| 4752 | 
            -
                  '@img/sharp-darwin-x64': 0. | 
| 4753 | 
            -
                  '@img/sharp-libvips-darwin-arm64': 1.0 | 
| 4754 | 
            -
                  '@img/sharp-libvips-darwin-x64': 1.0 | 
| 4755 | 
            -
                  '@img/sharp-libvips-linux-arm': 1.0 | 
| 4756 | 
            -
                  '@img/sharp-libvips-linux-arm64': 1.0 | 
| 4757 | 
            -
                  '@img/sharp-libvips-linux- | 
| 4758 | 
            -
                  '@img/sharp-libvips-linux- | 
| 4759 | 
            -
                  '@img/sharp-libvips- | 
| 4760 | 
            -
                  '@img/sharp-libvips-linuxmusl- | 
| 4761 | 
            -
                  '@img/sharp- | 
| 4762 | 
            -
                  '@img/sharp-linux- | 
| 4763 | 
            -
                  '@img/sharp-linux- | 
| 4764 | 
            -
                  '@img/sharp-linux- | 
| 4765 | 
            -
                  '@img/sharp- | 
| 4766 | 
            -
                  '@img/sharp-linuxmusl- | 
| 4767 | 
            -
                  '@img/sharp- | 
| 4768 | 
            -
                  '@img/sharp- | 
| 4769 | 
            -
                  '@img/sharp-win32- | 
|  | |
|  | |
| 4770 |  | 
| 4771 | 
             
              shebang-command@2.0.0:
         | 
| 4772 | 
             
                dependencies:
         | 
| @@ -4785,6 +5582,8 @@ snapshots: | |
| 4785 | 
             
                  '@shikijs/vscode-textmate': 10.0.2
         | 
| 4786 | 
             
                  '@types/hast': 3.0.4
         | 
| 4787 |  | 
|  | |
|  | |
| 4788 | 
             
              signal-exit@3.0.7: {}
         | 
| 4789 |  | 
| 4790 | 
             
              simple-swizzle@0.2.2:
         | 
| @@ -4801,6 +5600,12 @@ snapshots: | |
| 4801 |  | 
| 4802 | 
             
              space-separated-tokens@2.0.2: {}
         | 
| 4803 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 4804 | 
             
              string-width@4.2.3:
         | 
| 4805 | 
             
                dependencies:
         | 
| 4806 | 
             
                  emoji-regex: 8.0.0
         | 
| @@ -4820,6 +5625,10 @@ snapshots: | |
| 4820 | 
             
                dependencies:
         | 
| 4821 | 
             
                  ansi-regex: 5.0.1
         | 
| 4822 |  | 
|  | |
|  | |
|  | |
|  | |
| 4823 | 
             
              strip-json-comments@3.1.1: {}
         | 
| 4824 |  | 
| 4825 | 
             
              supports-color@7.2.0:
         | 
| @@ -4868,6 +5677,8 @@ snapshots: | |
| 4868 | 
             
                  magic-string: 0.30.17
         | 
| 4869 | 
             
                  zimmerframe: 1.1.2
         | 
| 4870 |  | 
|  | |
|  | |
| 4871 | 
             
              synckit@0.9.2:
         | 
| 4872 | 
             
                dependencies:
         | 
| 4873 | 
             
                  '@pkgr/core': 0.1.1
         | 
| @@ -4890,8 +5701,27 @@ snapshots: | |
| 4890 |  | 
| 4891 | 
             
              through@2.3.8: {}
         | 
| 4892 |  | 
|  | |
|  | |
| 4893 | 
             
              tinyexec@0.3.2: {}
         | 
| 4894 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 4895 | 
             
              tmp@0.0.33:
         | 
| 4896 | 
             
                dependencies:
         | 
| 4897 | 
             
                  os-tmpdir: 1.0.2
         | 
| @@ -4902,8 +5732,16 @@ snapshots: | |
| 4902 |  | 
| 4903 | 
             
              totalist@3.0.1: {}
         | 
| 4904 |  | 
|  | |
|  | |
|  | |
|  | |
| 4905 | 
             
              tr46@0.0.3: {}
         | 
| 4906 |  | 
|  | |
|  | |
|  | |
|  | |
| 4907 | 
             
              trim-lines@3.0.1: {}
         | 
| 4908 |  | 
| 4909 | 
             
              ts-api-utils@2.0.1(typescript@5.8.2):
         | 
| @@ -4925,6 +5763,8 @@ snapshots: | |
| 4925 | 
             
                dependencies:
         | 
| 4926 | 
             
                  prelude-ls: 1.2.1
         | 
| 4927 |  | 
|  | |
|  | |
| 4928 | 
             
              type-fest@0.21.3: {}
         | 
| 4929 |  | 
| 4930 | 
             
              type-fest@4.37.0: {}
         | 
| @@ -5032,6 +5872,24 @@ snapshots: | |
| 5032 | 
             
                  '@types/unist': 3.0.3
         | 
| 5033 | 
             
                  vfile-message: 4.0.2
         | 
| 5034 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 5035 | 
             
              vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1):
         | 
| 5036 | 
             
                dependencies:
         | 
| 5037 | 
             
                  esbuild: 0.21.5
         | 
| @@ -5058,6 +5916,47 @@ snapshots: | |
| 5058 | 
             
                optionalDependencies:
         | 
| 5059 | 
             
                  vite: 5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)
         | 
| 5060 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 5061 | 
             
              wcwidth@1.0.1:
         | 
| 5062 | 
             
                dependencies:
         | 
| 5063 | 
             
                  defaults: 1.0.4
         | 
| @@ -5066,8 +5965,21 @@ snapshots: | |
| 5066 |  | 
| 5067 | 
             
              webidl-conversions@3.0.1: {}
         | 
| 5068 |  | 
|  | |
|  | |
| 5069 | 
             
              webpack-virtual-modules@0.6.2: {}
         | 
| 5070 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 5071 | 
             
              whatwg-url@5.0.0:
         | 
| 5072 | 
             
                dependencies:
         | 
| 5073 | 
             
                  tr46: 0.0.3
         | 
| @@ -5081,6 +5993,11 @@ snapshots: | |
| 5081 | 
             
                dependencies:
         | 
| 5082 | 
             
                  isexe: 3.1.1
         | 
| 5083 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
| 5084 | 
             
              word-wrap@1.2.5: {}
         | 
| 5085 |  | 
| 5086 | 
             
              wrap-ansi@6.2.0:
         | 
| @@ -5089,6 +6006,12 @@ snapshots: | |
| 5089 | 
             
                  string-width: 4.2.3
         | 
| 5090 | 
             
                  strip-ansi: 6.0.1
         | 
| 5091 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 5092 | 
             
              yallist@5.0.0: {}
         | 
| 5093 |  | 
| 5094 | 
             
              yaml@1.10.2: {}
         | 
|  | |
| 31 | 
             
                    specifier: ^1.6.13
         | 
| 32 | 
             
                    version: 1.6.13
         | 
| 33 | 
             
                  '@huggingface/hub':
         | 
| 34 | 
            +
                    specifier: ^2.1.0
         | 
| 35 | 
            +
                    version: 2.1.0
         | 
| 36 | 
             
                  '@huggingface/inference':
         | 
| 37 | 
            +
                    specifier: ^3.13.2
         | 
| 38 | 
            +
                    version: 3.13.2
         | 
| 39 | 
             
                  '@huggingface/tasks':
         | 
| 40 | 
            +
                    specifier: ^0.19.8
         | 
| 41 | 
            +
                    version: 0.19.8
         | 
| 42 | 
             
                  '@huggingface/transformers':
         | 
| 43 | 
            +
                    specifier: ^3.5.1
         | 
| 44 | 
            +
                    version: 3.5.1
         | 
| 45 | 
             
                  '@iconify-json/carbon':
         | 
| 46 | 
             
                    specifier: ^1.2.8
         | 
| 47 | 
             
                    version: 1.2.8
         | 
|  | |
| 72 | 
             
                  '@tailwindcss/postcss':
         | 
| 73 | 
             
                    specifier: ^4.0.9
         | 
| 74 | 
             
                    version: 4.0.9
         | 
| 75 | 
            +
                  '@testing-library/jest-dom':
         | 
| 76 | 
            +
                    specifier: ^6.6.3
         | 
| 77 | 
            +
                    version: 6.6.3
         | 
| 78 | 
            +
                  '@testing-library/svelte':
         | 
| 79 | 
            +
                    specifier: ^5.2.4
         | 
| 80 | 
            +
                    version: 5.2.8(svelte@5.30.1)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1))(vitest@3.1.4(@types/node@22.14.1)(jsdom@26.1.0)(lightningcss@1.29.1))
         | 
| 81 | 
             
                  '@types/node':
         | 
| 82 | 
             
                    specifier: ^22.14.1
         | 
| 83 | 
             
                    version: 22.14.1
         | 
|  | |
| 105 | 
             
                  jiti:
         | 
| 106 | 
             
                    specifier: ^2.4.2
         | 
| 107 | 
             
                    version: 2.4.2
         | 
| 108 | 
            +
                  jsdom:
         | 
| 109 | 
            +
                    specifier: ^26.0.0
         | 
| 110 | 
            +
                    version: 26.1.0
         | 
| 111 | 
             
                  melt:
         | 
| 112 | 
             
                    specifier: ^0.30.1
         | 
| 113 | 
             
                    version: 0.30.1(@floating-ui/dom@1.6.13)(svelte@5.30.1)
         | 
| 114 | 
             
                  openai:
         | 
| 115 | 
             
                    specifier: ^4.90.0
         | 
| 116 | 
            +
                    version: 4.90.0(ws@8.18.2)
         | 
| 117 | 
             
                  postcss:
         | 
| 118 | 
             
                    specifier: ^8.4.38
         | 
| 119 | 
             
                    version: 8.5.3
         | 
|  | |
| 162 | 
             
                  vite:
         | 
| 163 | 
             
                    specifier: ^5.4.4
         | 
| 164 | 
             
                    version: 5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)
         | 
| 165 | 
            +
                  vitest:
         | 
| 166 | 
            +
                    specifier: ^3.0.0
         | 
| 167 | 
            +
                    version: 3.1.4(@types/node@22.14.1)(jsdom@26.1.0)(lightningcss@1.29.1)
         | 
| 168 |  | 
| 169 | 
             
            packages:
         | 
| 170 |  | 
| 171 | 
            +
              '@adobe/css-tools@4.4.3':
         | 
| 172 | 
            +
                resolution: {integrity: sha512-VQKMkwriZbaOgVCby1UDY/LDk5fIjhQicCvVPFqfe+69fWaPWydbWJ3wRt59/YzIwda1I81loas3oCoHxnqvdA==}
         | 
| 173 | 
            +
             | 
| 174 | 
             
              '@alloc/quick-lru@5.2.0':
         | 
| 175 | 
             
                resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
         | 
| 176 | 
             
                engines: {node: '>=10'}
         | 
|  | |
| 185 | 
             
              '@antfu/utils@8.1.1':
         | 
| 186 | 
             
                resolution: {integrity: sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==}
         | 
| 187 |  | 
| 188 | 
            +
              '@asamuzakjp/css-color@3.2.0':
         | 
| 189 | 
            +
                resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==}
         | 
| 190 | 
            +
             | 
| 191 | 
            +
              '@babel/code-frame@7.27.1':
         | 
| 192 | 
            +
                resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==}
         | 
| 193 | 
            +
                engines: {node: '>=6.9.0'}
         | 
| 194 | 
            +
             | 
| 195 | 
            +
              '@babel/helper-validator-identifier@7.27.1':
         | 
| 196 | 
            +
                resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
         | 
| 197 | 
            +
                engines: {node: '>=6.9.0'}
         | 
| 198 | 
            +
             | 
| 199 | 
            +
              '@babel/runtime@7.27.1':
         | 
| 200 | 
            +
                resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==}
         | 
| 201 | 
            +
                engines: {node: '>=6.9.0'}
         | 
| 202 | 
            +
             | 
| 203 | 
            +
              '@csstools/color-helpers@5.0.2':
         | 
| 204 | 
            +
                resolution: {integrity: sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==}
         | 
| 205 | 
            +
                engines: {node: '>=18'}
         | 
| 206 | 
            +
             | 
| 207 | 
            +
              '@csstools/css-calc@2.1.3':
         | 
| 208 | 
            +
                resolution: {integrity: sha512-XBG3talrhid44BY1x3MHzUx/aTG8+x/Zi57M4aTKK9RFB4aLlF3TTSzfzn8nWVHWL3FgAXAxmupmDd6VWww+pw==}
         | 
| 209 | 
            +
                engines: {node: '>=18'}
         | 
| 210 | 
            +
                peerDependencies:
         | 
| 211 | 
            +
                  '@csstools/css-parser-algorithms': ^3.0.4
         | 
| 212 | 
            +
                  '@csstools/css-tokenizer': ^3.0.3
         | 
| 213 | 
            +
             | 
| 214 | 
            +
              '@csstools/css-color-parser@3.0.9':
         | 
| 215 | 
            +
                resolution: {integrity: sha512-wILs5Zk7BU86UArYBJTPy/FMPPKVKHMj1ycCEyf3VUptol0JNRLFU/BZsJ4aiIHJEbSLiizzRrw8Pc1uAEDrXw==}
         | 
| 216 | 
            +
                engines: {node: '>=18'}
         | 
| 217 | 
            +
                peerDependencies:
         | 
| 218 | 
            +
                  '@csstools/css-parser-algorithms': ^3.0.4
         | 
| 219 | 
            +
                  '@csstools/css-tokenizer': ^3.0.3
         | 
| 220 | 
            +
             | 
| 221 | 
            +
              '@csstools/css-parser-algorithms@3.0.4':
         | 
| 222 | 
            +
                resolution: {integrity: sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==}
         | 
| 223 | 
            +
                engines: {node: '>=18'}
         | 
| 224 | 
            +
                peerDependencies:
         | 
| 225 | 
            +
                  '@csstools/css-tokenizer': ^3.0.3
         | 
| 226 | 
            +
             | 
| 227 | 
            +
              '@csstools/css-tokenizer@3.0.3':
         | 
| 228 | 
            +
                resolution: {integrity: sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==}
         | 
| 229 | 
            +
                engines: {node: '>=18'}
         | 
| 230 | 
            +
             | 
| 231 | 
            +
              '@emnapi/runtime@1.4.3':
         | 
| 232 | 
            +
                resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==}
         | 
| 233 |  | 
| 234 | 
             
              '@esbuild/aix-ppc64@0.21.5':
         | 
| 235 | 
             
                resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
         | 
|  | |
| 566 | 
             
              '@floating-ui/utils@0.2.9':
         | 
| 567 | 
             
                resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==}
         | 
| 568 |  | 
| 569 | 
            +
              '@huggingface/hub@2.1.0':
         | 
| 570 | 
            +
                resolution: {integrity: sha512-L+125tAXwCOwVd8n4qQlT20ZJP7I5sEXOLNrIzpgkUG6eMIsGlxT+9hmmiCH/LGmjbXjlcRHoPB8GGT3zCws4A==}
         | 
| 571 | 
             
                engines: {node: '>=18'}
         | 
| 572 | 
            +
                hasBin: true
         | 
| 573 |  | 
| 574 | 
            +
              '@huggingface/inference@3.13.2':
         | 
| 575 | 
            +
                resolution: {integrity: sha512-s9grNTO33FeBIvKg4KjnG3sTQWppGDTdQxtpaVqKtn2Hl24yKwc59TfwNAKDzW12aZrc9njYBPwA/Y/mxX/kew==}
         | 
| 576 | 
             
                engines: {node: '>=18'}
         | 
| 577 |  | 
| 578 | 
            +
              '@huggingface/jinja@0.4.1':
         | 
| 579 | 
            +
                resolution: {integrity: sha512-3WXbMFaPkk03LRCM0z0sylmn8ddDm4ubjU7X+Hg4M2GOuMklwoGAFXp9V2keq7vltoB/c7McE5aHUVVddAewsw==}
         | 
| 580 | 
             
                engines: {node: '>=18'}
         | 
| 581 |  | 
| 582 | 
            +
              '@huggingface/jinja@0.5.0':
         | 
| 583 | 
            +
                resolution: {integrity: sha512-Ptc03/jGRiYRoi0bUYKZ14MkDslsBRT24oxmsvUlfYrvQMldrxCevhPnT+hfX8awKTT8/f/0ZBBWldoeAcMHdQ==}
         | 
| 584 | 
            +
                engines: {node: '>=18'}
         | 
| 585 |  | 
| 586 | 
            +
              '@huggingface/tasks@0.19.8':
         | 
| 587 | 
            +
                resolution: {integrity: sha512-gR88OvYQQ2zu1Dt/tfFRVWJRfsKCdssxJBb8bz3tVd9fh3rneNE/pjkaGyG3oT1VlHv7wEmrqrnkmMcXy8O0rg==}
         | 
| 588 |  | 
| 589 | 
            +
              '@huggingface/transformers@3.5.1':
         | 
| 590 | 
            +
                resolution: {integrity: sha512-qWsPoJMBPYcrGuzRMVL//3dwcLXED9r+j+Hzw+hZpBfrMPdyq57ehNs7lew0D34Paj0DO0E0kZQjOZcIVN17hQ==}
         | 
| 591 |  | 
| 592 | 
             
              '@humanfs/core@0.19.1':
         | 
| 593 | 
             
                resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
         | 
|  | |
| 621 | 
             
              '@iconify/utils@2.3.0':
         | 
| 622 | 
             
                resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==}
         | 
| 623 |  | 
| 624 | 
            +
              '@img/sharp-darwin-arm64@0.34.2':
         | 
| 625 | 
            +
                resolution: {integrity: sha512-OfXHZPppddivUJnqyKoi5YVeHRkkNE2zUFT2gbpKxp/JZCFYEYubnMg+gOp6lWfasPrTS+KPosKqdI+ELYVDtg==}
         | 
| 626 | 
             
                engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
         | 
| 627 | 
             
                cpu: [arm64]
         | 
| 628 | 
             
                os: [darwin]
         | 
| 629 |  | 
| 630 | 
            +
              '@img/sharp-darwin-x64@0.34.2':
         | 
| 631 | 
            +
                resolution: {integrity: sha512-dYvWqmjU9VxqXmjEtjmvHnGqF8GrVjM2Epj9rJ6BUIXvk8slvNDJbhGFvIoXzkDhrJC2jUxNLz/GUjjvSzfw+g==}
         | 
| 632 | 
             
                engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
         | 
| 633 | 
             
                cpu: [x64]
         | 
| 634 | 
             
                os: [darwin]
         | 
| 635 |  | 
| 636 | 
            +
              '@img/sharp-libvips-darwin-arm64@1.1.0':
         | 
| 637 | 
            +
                resolution: {integrity: sha512-HZ/JUmPwrJSoM4DIQPv/BfNh9yrOA8tlBbqbLz4JZ5uew2+o22Ik+tHQJcih7QJuSa0zo5coHTfD5J8inqj9DA==}
         | 
| 638 | 
             
                cpu: [arm64]
         | 
| 639 | 
             
                os: [darwin]
         | 
| 640 |  | 
| 641 | 
            +
              '@img/sharp-libvips-darwin-x64@1.1.0':
         | 
| 642 | 
            +
                resolution: {integrity: sha512-Xzc2ToEmHN+hfvsl9wja0RlnXEgpKNmftriQp6XzY/RaSfwD9th+MSh0WQKzUreLKKINb3afirxW7A0fz2YWuQ==}
         | 
| 643 | 
             
                cpu: [x64]
         | 
| 644 | 
             
                os: [darwin]
         | 
| 645 |  | 
| 646 | 
            +
              '@img/sharp-libvips-linux-arm64@1.1.0':
         | 
| 647 | 
            +
                resolution: {integrity: sha512-IVfGJa7gjChDET1dK9SekxFFdflarnUB8PwW8aGwEoF3oAsSDuNUTYS+SKDOyOJxQyDC1aPFMuRYLoDInyV9Ew==}
         | 
| 648 | 
             
                cpu: [arm64]
         | 
| 649 | 
             
                os: [linux]
         | 
| 650 |  | 
| 651 | 
            +
              '@img/sharp-libvips-linux-arm@1.1.0':
         | 
| 652 | 
            +
                resolution: {integrity: sha512-s8BAd0lwUIvYCJyRdFqvsj+BJIpDBSxs6ivrOPm/R7piTs5UIwY5OjXrP2bqXC9/moGsyRa37eYWYCOGVXxVrA==}
         | 
| 653 | 
             
                cpu: [arm]
         | 
| 654 | 
             
                os: [linux]
         | 
| 655 |  | 
| 656 | 
            +
              '@img/sharp-libvips-linux-ppc64@1.1.0':
         | 
| 657 | 
            +
                resolution: {integrity: sha512-tiXxFZFbhnkWE2LA8oQj7KYR+bWBkiV2nilRldT7bqoEZ4HiDOcePr9wVDAZPi/Id5fT1oY9iGnDq20cwUz8lQ==}
         | 
| 658 | 
            +
                cpu: [ppc64]
         | 
| 659 | 
            +
                os: [linux]
         | 
| 660 | 
            +
             | 
| 661 | 
            +
              '@img/sharp-libvips-linux-s390x@1.1.0':
         | 
| 662 | 
            +
                resolution: {integrity: sha512-xukSwvhguw7COyzvmjydRb3x/09+21HykyapcZchiCUkTThEQEOMtBj9UhkaBRLuBrgLFzQ2wbxdeCCJW/jgJA==}
         | 
| 663 | 
             
                cpu: [s390x]
         | 
| 664 | 
             
                os: [linux]
         | 
| 665 |  | 
| 666 | 
            +
              '@img/sharp-libvips-linux-x64@1.1.0':
         | 
| 667 | 
            +
                resolution: {integrity: sha512-yRj2+reB8iMg9W5sULM3S74jVS7zqSzHG3Ol/twnAAkAhnGQnpjj6e4ayUz7V+FpKypwgs82xbRdYtchTTUB+Q==}
         | 
| 668 | 
             
                cpu: [x64]
         | 
| 669 | 
             
                os: [linux]
         | 
| 670 |  | 
| 671 | 
            +
              '@img/sharp-libvips-linuxmusl-arm64@1.1.0':
         | 
| 672 | 
            +
                resolution: {integrity: sha512-jYZdG+whg0MDK+q2COKbYidaqW/WTz0cc1E+tMAusiDygrM4ypmSCjOJPmFTvHHJ8j/6cAGyeDWZOsK06tP33w==}
         | 
| 673 | 
             
                cpu: [arm64]
         | 
| 674 | 
             
                os: [linux]
         | 
| 675 |  | 
| 676 | 
            +
              '@img/sharp-libvips-linuxmusl-x64@1.1.0':
         | 
| 677 | 
            +
                resolution: {integrity: sha512-wK7SBdwrAiycjXdkPnGCPLjYb9lD4l6Ze2gSdAGVZrEL05AOUJESWU2lhlC+Ffn5/G+VKuSm6zzbQSzFX/P65A==}
         | 
| 678 | 
             
                cpu: [x64]
         | 
| 679 | 
             
                os: [linux]
         | 
| 680 |  | 
| 681 | 
            +
              '@img/sharp-linux-arm64@0.34.2':
         | 
| 682 | 
            +
                resolution: {integrity: sha512-D8n8wgWmPDakc83LORcfJepdOSN6MvWNzzz2ux0MnIbOqdieRZwVYY32zxVx+IFUT8er5KPcyU3XXsn+GzG/0Q==}
         | 
| 683 | 
             
                engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
         | 
| 684 | 
             
                cpu: [arm64]
         | 
| 685 | 
             
                os: [linux]
         | 
| 686 |  | 
| 687 | 
            +
              '@img/sharp-linux-arm@0.34.2':
         | 
| 688 | 
            +
                resolution: {integrity: sha512-0DZzkvuEOqQUP9mo2kjjKNok5AmnOr1jB2XYjkaoNRwpAYMDzRmAqUIa1nRi58S2WswqSfPOWLNOr0FDT3H5RQ==}
         | 
| 689 | 
             
                engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
         | 
| 690 | 
             
                cpu: [arm]
         | 
| 691 | 
             
                os: [linux]
         | 
| 692 |  | 
| 693 | 
            +
              '@img/sharp-linux-s390x@0.34.2':
         | 
| 694 | 
            +
                resolution: {integrity: sha512-EGZ1xwhBI7dNISwxjChqBGELCWMGDvmxZXKjQRuqMrakhO8QoMgqCrdjnAqJq/CScxfRn+Bb7suXBElKQpPDiw==}
         | 
| 695 | 
             
                engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
         | 
| 696 | 
             
                cpu: [s390x]
         | 
| 697 | 
             
                os: [linux]
         | 
| 698 |  | 
| 699 | 
            +
              '@img/sharp-linux-x64@0.34.2':
         | 
| 700 | 
            +
                resolution: {integrity: sha512-sD7J+h5nFLMMmOXYH4DD9UtSNBD05tWSSdWAcEyzqW8Cn5UxXvsHAxmxSesYUsTOBmUnjtxghKDl15EvfqLFbQ==}
         | 
| 701 | 
             
                engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
         | 
| 702 | 
             
                cpu: [x64]
         | 
| 703 | 
             
                os: [linux]
         | 
| 704 |  | 
| 705 | 
            +
              '@img/sharp-linuxmusl-arm64@0.34.2':
         | 
| 706 | 
            +
                resolution: {integrity: sha512-NEE2vQ6wcxYav1/A22OOxoSOGiKnNmDzCYFOZ949xFmrWZOVII1Bp3NqVVpvj+3UeHMFyN5eP/V5hzViQ5CZNA==}
         | 
| 707 | 
             
                engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
         | 
| 708 | 
             
                cpu: [arm64]
         | 
| 709 | 
             
                os: [linux]
         | 
| 710 |  | 
| 711 | 
            +
              '@img/sharp-linuxmusl-x64@0.34.2':
         | 
| 712 | 
            +
                resolution: {integrity: sha512-DOYMrDm5E6/8bm/yQLCWyuDJwUnlevR8xtF8bs+gjZ7cyUNYXiSf/E8Kp0Ss5xasIaXSHzb888V1BE4i1hFhAA==}
         | 
| 713 | 
             
                engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
         | 
| 714 | 
             
                cpu: [x64]
         | 
| 715 | 
             
                os: [linux]
         | 
| 716 |  | 
| 717 | 
            +
              '@img/sharp-wasm32@0.34.2':
         | 
| 718 | 
            +
                resolution: {integrity: sha512-/VI4mdlJ9zkaq53MbIG6rZY+QRN3MLbR6usYlgITEzi4Rpx5S6LFKsycOQjkOGmqTNmkIdLjEvooFKwww6OpdQ==}
         | 
| 719 | 
             
                engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
         | 
| 720 | 
             
                cpu: [wasm32]
         | 
| 721 |  | 
| 722 | 
            +
              '@img/sharp-win32-arm64@0.34.2':
         | 
| 723 | 
            +
                resolution: {integrity: sha512-cfP/r9FdS63VA5k0xiqaNaEoGxBg9k7uE+RQGzuK9fHt7jib4zAVVseR9LsE4gJcNWgT6APKMNnCcnyOtmSEUQ==}
         | 
| 724 | 
            +
                engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
         | 
| 725 | 
            +
                cpu: [arm64]
         | 
| 726 | 
            +
                os: [win32]
         | 
| 727 | 
            +
             | 
| 728 | 
            +
              '@img/sharp-win32-ia32@0.34.2':
         | 
| 729 | 
            +
                resolution: {integrity: sha512-QLjGGvAbj0X/FXl8n1WbtQ6iVBpWU7JO94u/P2M4a8CFYsvQi4GW2mRy/JqkRx0qpBzaOdKJKw8uc930EX2AHw==}
         | 
| 730 | 
             
                engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
         | 
| 731 | 
             
                cpu: [ia32]
         | 
| 732 | 
             
                os: [win32]
         | 
| 733 |  | 
| 734 | 
            +
              '@img/sharp-win32-x64@0.34.2':
         | 
| 735 | 
            +
                resolution: {integrity: sha512-aUdT6zEYtDKCaxkofmmJDJYGCf0+pJg3eU9/oBuqvEeoB9dKI6ZLc/1iLJCTuJQDO4ptntAlkUmHgGjyuobZbw==}
         | 
| 736 | 
             
                engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
         | 
| 737 | 
             
                cpu: [x64]
         | 
| 738 | 
             
                os: [win32]
         | 
|  | |
| 1100 | 
             
              '@tailwindcss/postcss@4.0.9':
         | 
| 1101 | 
             
                resolution: {integrity: sha512-BT/E+pdMqulavEAVM5NCpxmGEwHiLDPpkmg/c/X25ZBW+izTe+aZ+v1gf/HXTrihRoCxrUp5U4YyHsBTzspQKQ==}
         | 
| 1102 |  | 
| 1103 | 
            +
              '@testing-library/dom@10.4.0':
         | 
| 1104 | 
            +
                resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==}
         | 
| 1105 | 
            +
                engines: {node: '>=18'}
         | 
| 1106 | 
            +
             | 
| 1107 | 
            +
              '@testing-library/jest-dom@6.6.3':
         | 
| 1108 | 
            +
                resolution: {integrity: sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==}
         | 
| 1109 | 
            +
                engines: {node: '>=14', npm: '>=6', yarn: '>=1'}
         | 
| 1110 | 
            +
             | 
| 1111 | 
            +
              '@testing-library/svelte@5.2.8':
         | 
| 1112 | 
            +
                resolution: {integrity: sha512-ucQOtGsJhtawOEtUmbR4rRh53e6RbM1KUluJIXRmh6D4UzxR847iIqqjRtg9mHNFmGQ8Vkam9yVcR5d1mhIHKA==}
         | 
| 1113 | 
            +
                engines: {node: '>= 10'}
         | 
| 1114 | 
            +
                peerDependencies:
         | 
| 1115 | 
            +
                  svelte: ^3 || ^4 || ^5 || ^5.0.0-next.0
         | 
| 1116 | 
            +
                  vite: '*'
         | 
| 1117 | 
            +
                  vitest: '*'
         | 
| 1118 | 
            +
                peerDependenciesMeta:
         | 
| 1119 | 
            +
                  vite:
         | 
| 1120 | 
            +
                    optional: true
         | 
| 1121 | 
            +
                  vitest:
         | 
| 1122 | 
            +
                    optional: true
         | 
| 1123 | 
            +
             | 
| 1124 | 
            +
              '@types/aria-query@5.0.4':
         | 
| 1125 | 
            +
                resolution: {integrity: sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==}
         | 
| 1126 | 
            +
             | 
| 1127 | 
             
              '@types/cookie@0.6.0':
         | 
| 1128 | 
             
                resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
         | 
| 1129 |  | 
|  | |
| 1204 | 
             
              '@ungap/structured-clone@1.3.0':
         | 
| 1205 | 
             
                resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
         | 
| 1206 |  | 
| 1207 | 
            +
              '@vitest/expect@3.1.4':
         | 
| 1208 | 
            +
                resolution: {integrity: sha512-xkD/ljeliyaClDYqHPNCiJ0plY5YIcM0OlRiZizLhlPmpXWpxnGMyTZXOHFhFeG7w9P5PBeL4IdtJ/HeQwTbQA==}
         | 
| 1209 | 
            +
             | 
| 1210 | 
            +
              '@vitest/mocker@3.1.4':
         | 
| 1211 | 
            +
                resolution: {integrity: sha512-8IJ3CvwtSw/EFXqWFL8aCMu+YyYXG2WUSrQbViOZkWTKTVicVwZ/YiEZDSqD00kX+v/+W+OnxhNWoeVKorHygA==}
         | 
| 1212 | 
            +
                peerDependencies:
         | 
| 1213 | 
            +
                  msw: ^2.4.9
         | 
| 1214 | 
            +
                  vite: ^5.0.0 || ^6.0.0
         | 
| 1215 | 
            +
                peerDependenciesMeta:
         | 
| 1216 | 
            +
                  msw:
         | 
| 1217 | 
            +
                    optional: true
         | 
| 1218 | 
            +
                  vite:
         | 
| 1219 | 
            +
                    optional: true
         | 
| 1220 | 
            +
             | 
| 1221 | 
            +
              '@vitest/pretty-format@3.1.4':
         | 
| 1222 | 
            +
                resolution: {integrity: sha512-cqv9H9GvAEoTaoq+cYqUTCGscUjKqlJZC7PRwY5FMySVj5J+xOm1KQcCiYHJOEzOKRUhLH4R2pTwvFlWCEScsg==}
         | 
| 1223 | 
            +
             | 
| 1224 | 
            +
              '@vitest/runner@3.1.4':
         | 
| 1225 | 
            +
                resolution: {integrity: sha512-djTeF1/vt985I/wpKVFBMWUlk/I7mb5hmD5oP8K9ACRmVXgKTae3TUOtXAEBfslNKPzUQvnKhNd34nnRSYgLNQ==}
         | 
| 1226 | 
            +
             | 
| 1227 | 
            +
              '@vitest/snapshot@3.1.4':
         | 
| 1228 | 
            +
                resolution: {integrity: sha512-JPHf68DvuO7vilmvwdPr9TS0SuuIzHvxeaCkxYcCD4jTk67XwL45ZhEHFKIuCm8CYstgI6LZ4XbwD6ANrwMpFg==}
         | 
| 1229 | 
            +
             | 
| 1230 | 
            +
              '@vitest/spy@3.1.4':
         | 
| 1231 | 
            +
                resolution: {integrity: sha512-Xg1bXhu+vtPXIodYN369M86K8shGLouNjoVI78g8iAq2rFoHFdajNvJJ5A/9bPMFcfQqdaCpOgWKEoMQg/s0Yg==}
         | 
| 1232 | 
            +
             | 
| 1233 | 
            +
              '@vitest/utils@3.1.4':
         | 
| 1234 | 
            +
                resolution: {integrity: sha512-yriMuO1cfFhmiGc8ataN51+9ooHRuURdfAZfwFd3usWynjzpLslZdYnRegTv32qdgtJTsj15FoeZe2g15fY1gg==}
         | 
| 1235 | 
            +
             | 
| 1236 | 
             
              abort-controller@3.0.0:
         | 
| 1237 | 
             
                resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
         | 
| 1238 | 
             
                engines: {node: '>=6.5'}
         | 
|  | |
| 1247 | 
             
                engines: {node: '>=0.4.0'}
         | 
| 1248 | 
             
                hasBin: true
         | 
| 1249 |  | 
| 1250 | 
            +
              agent-base@7.1.3:
         | 
| 1251 | 
            +
                resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==}
         | 
| 1252 | 
            +
                engines: {node: '>= 14'}
         | 
| 1253 | 
            +
             | 
| 1254 | 
             
              agentkeepalive@4.6.0:
         | 
| 1255 | 
             
                resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
         | 
| 1256 | 
             
                engines: {node: '>= 8.0.0'}
         | 
|  | |
| 1277 | 
             
              argparse@2.0.1:
         | 
| 1278 | 
             
                resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
         | 
| 1279 |  | 
| 1280 | 
            +
              aria-query@5.3.0:
         | 
| 1281 | 
            +
                resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
         | 
| 1282 | 
            +
             | 
| 1283 | 
             
              aria-query@5.3.2:
         | 
| 1284 | 
             
                resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
         | 
| 1285 | 
             
                engines: {node: '>= 0.4'}
         | 
|  | |
| 1287 | 
             
              array-timsort@1.0.3:
         | 
| 1288 | 
             
                resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==}
         | 
| 1289 |  | 
| 1290 | 
            +
              assertion-error@2.0.1:
         | 
| 1291 | 
            +
                resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
         | 
| 1292 | 
            +
                engines: {node: '>=12'}
         | 
| 1293 | 
            +
             | 
| 1294 | 
             
              asynckit@0.4.0:
         | 
| 1295 | 
             
                resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
         | 
| 1296 |  | 
|  | |
| 1311 | 
             
              bl@4.1.0:
         | 
| 1312 | 
             
                resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
         | 
| 1313 |  | 
| 1314 | 
            +
              boolean@3.2.0:
         | 
| 1315 | 
            +
                resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==}
         | 
| 1316 | 
            +
                deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
         | 
| 1317 | 
            +
             | 
| 1318 | 
             
              brace-expansion@1.1.11:
         | 
| 1319 | 
             
                resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
         | 
| 1320 |  | 
|  | |
| 1328 | 
             
              buffer@5.7.1:
         | 
| 1329 | 
             
                resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
         | 
| 1330 |  | 
| 1331 | 
            +
              cac@6.7.14:
         | 
| 1332 | 
            +
                resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
         | 
| 1333 | 
            +
                engines: {node: '>=8'}
         | 
| 1334 | 
            +
             | 
| 1335 | 
             
              call-bind-apply-helpers@1.0.2:
         | 
| 1336 | 
             
                resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
         | 
| 1337 | 
             
                engines: {node: '>= 0.4'}
         | 
|  | |
| 1343 | 
             
              ccount@2.0.1:
         | 
| 1344 | 
             
                resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
         | 
| 1345 |  | 
| 1346 | 
            +
              chai@5.2.0:
         | 
| 1347 | 
            +
                resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==}
         | 
| 1348 | 
            +
                engines: {node: '>=12'}
         | 
| 1349 | 
            +
             | 
| 1350 | 
            +
              chalk@3.0.0:
         | 
| 1351 | 
            +
                resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==}
         | 
| 1352 | 
            +
                engines: {node: '>=8'}
         | 
| 1353 | 
            +
             | 
| 1354 | 
             
              chalk@4.1.2:
         | 
| 1355 | 
             
                resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
         | 
| 1356 | 
             
                engines: {node: '>=10'}
         | 
|  | |
| 1364 | 
             
              chardet@0.7.0:
         | 
| 1365 | 
             
                resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
         | 
| 1366 |  | 
| 1367 | 
            +
              check-error@2.1.1:
         | 
| 1368 | 
            +
                resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
         | 
| 1369 | 
            +
                engines: {node: '>= 16'}
         | 
| 1370 | 
            +
             | 
| 1371 | 
             
              chokidar@4.0.3:
         | 
| 1372 | 
             
                resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
         | 
| 1373 | 
             
                engines: {node: '>= 14.16.0'}
         | 
|  | |
| 1455 | 
             
                resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
         | 
| 1456 | 
             
                engines: {node: '>= 8'}
         | 
| 1457 |  | 
| 1458 | 
            +
              css.escape@1.5.1:
         | 
| 1459 | 
            +
                resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==}
         | 
| 1460 | 
            +
             | 
| 1461 | 
             
              cssesc@3.0.0:
         | 
| 1462 | 
             
                resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
         | 
| 1463 | 
             
                engines: {node: '>=4'}
         | 
| 1464 | 
             
                hasBin: true
         | 
| 1465 |  | 
| 1466 | 
            +
              cssstyle@4.3.1:
         | 
| 1467 | 
            +
                resolution: {integrity: sha512-ZgW+Jgdd7i52AaLYCriF8Mxqft0gD/R9i9wi6RWBhs1pqdPEzPjym7rvRKi397WmQFf3SlyUsszhw+VVCbx79Q==}
         | 
| 1468 | 
            +
                engines: {node: '>=18'}
         | 
| 1469 | 
            +
             | 
| 1470 | 
            +
              data-urls@5.0.0:
         | 
| 1471 | 
            +
                resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==}
         | 
| 1472 | 
            +
                engines: {node: '>=18'}
         | 
| 1473 | 
            +
             | 
| 1474 | 
             
              debug@4.4.0:
         | 
| 1475 | 
             
                resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
         | 
| 1476 | 
             
                engines: {node: '>=6.0'}
         | 
|  | |
| 1480 | 
             
                  supports-color:
         | 
| 1481 | 
             
                    optional: true
         | 
| 1482 |  | 
| 1483 | 
            +
              decimal.js@10.5.0:
         | 
| 1484 | 
            +
                resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==}
         | 
| 1485 | 
            +
             | 
| 1486 | 
            +
              deep-eql@5.0.2:
         | 
| 1487 | 
            +
                resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
         | 
| 1488 | 
            +
                engines: {node: '>=6'}
         | 
| 1489 | 
            +
             | 
| 1490 | 
             
              deep-is@0.1.4:
         | 
| 1491 | 
             
                resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
         | 
| 1492 |  | 
|  | |
| 1497 | 
             
              defaults@1.0.4:
         | 
| 1498 | 
             
                resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
         | 
| 1499 |  | 
| 1500 | 
            +
              define-data-property@1.1.4:
         | 
| 1501 | 
            +
                resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
         | 
| 1502 | 
            +
                engines: {node: '>= 0.4'}
         | 
| 1503 | 
            +
             | 
| 1504 | 
            +
              define-properties@1.2.1:
         | 
| 1505 | 
            +
                resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
         | 
| 1506 | 
            +
                engines: {node: '>= 0.4'}
         | 
| 1507 | 
            +
             | 
| 1508 | 
             
              defu@6.1.4:
         | 
| 1509 | 
             
                resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
         | 
| 1510 |  | 
|  | |
| 1521 | 
             
                engines: {node: '>=0.10'}
         | 
| 1522 | 
             
                hasBin: true
         | 
| 1523 |  | 
| 1524 | 
            +
              detect-libc@2.0.4:
         | 
| 1525 | 
            +
                resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==}
         | 
| 1526 | 
             
                engines: {node: '>=8'}
         | 
| 1527 |  | 
| 1528 | 
            +
              detect-node@2.1.0:
         | 
| 1529 | 
            +
                resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
         | 
| 1530 | 
            +
             | 
| 1531 | 
             
              devalue@5.1.1:
         | 
| 1532 | 
             
                resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==}
         | 
| 1533 |  | 
|  | |
| 1541 | 
             
                resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
         | 
| 1542 | 
             
                engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
         | 
| 1543 |  | 
| 1544 | 
            +
              dom-accessibility-api@0.5.16:
         | 
| 1545 | 
            +
                resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==}
         | 
| 1546 | 
            +
             | 
| 1547 | 
            +
              dom-accessibility-api@0.6.3:
         | 
| 1548 | 
            +
                resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==}
         | 
| 1549 | 
            +
             | 
| 1550 | 
             
              dotenv@16.5.0:
         | 
| 1551 | 
             
                resolution: {integrity: sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==}
         | 
| 1552 | 
             
                engines: {node: '>=12'}
         | 
|  | |
| 1566 | 
             
                resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==}
         | 
| 1567 | 
             
                engines: {node: '>=10.13.0'}
         | 
| 1568 |  | 
| 1569 | 
            +
              entities@6.0.0:
         | 
| 1570 | 
            +
                resolution: {integrity: sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==}
         | 
| 1571 | 
            +
                engines: {node: '>=0.12'}
         | 
| 1572 | 
            +
             | 
| 1573 | 
             
              es-define-property@1.0.1:
         | 
| 1574 | 
             
                resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
         | 
| 1575 | 
             
                engines: {node: '>= 0.4'}
         | 
|  | |
| 1578 | 
             
                resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
         | 
| 1579 | 
             
                engines: {node: '>= 0.4'}
         | 
| 1580 |  | 
| 1581 | 
            +
              es-module-lexer@1.7.0:
         | 
| 1582 | 
            +
                resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==}
         | 
| 1583 | 
            +
             | 
| 1584 | 
             
              es-object-atoms@1.1.1:
         | 
| 1585 | 
             
                resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
         | 
| 1586 | 
             
                engines: {node: '>= 0.4'}
         | 
|  | |
| 1589 | 
             
                resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
         | 
| 1590 | 
             
                engines: {node: '>= 0.4'}
         | 
| 1591 |  | 
| 1592 | 
            +
              es6-error@4.1.1:
         | 
| 1593 | 
            +
                resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==}
         | 
| 1594 | 
            +
             | 
| 1595 | 
             
              esbuild@0.21.5:
         | 
| 1596 | 
             
                resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
         | 
| 1597 | 
             
                engines: {node: '>=12'}
         | 
|  | |
| 1692 | 
             
              estree-walker@2.0.2:
         | 
| 1693 | 
             
                resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
         | 
| 1694 |  | 
| 1695 | 
            +
              estree-walker@3.0.3:
         | 
| 1696 | 
            +
                resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
         | 
| 1697 | 
            +
             | 
| 1698 | 
             
              esutils@2.0.3:
         | 
| 1699 | 
             
                resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
         | 
| 1700 | 
             
                engines: {node: '>=0.10.0'}
         | 
|  | |
| 1703 | 
             
                resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
         | 
| 1704 | 
             
                engines: {node: '>=6'}
         | 
| 1705 |  | 
| 1706 | 
            +
              expect-type@1.2.1:
         | 
| 1707 | 
            +
                resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==}
         | 
| 1708 | 
            +
                engines: {node: '>=12.0.0'}
         | 
| 1709 | 
            +
             | 
| 1710 | 
             
              exsolve@1.0.4:
         | 
| 1711 | 
             
                resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==}
         | 
| 1712 |  | 
|  | |
| 1741 | 
             
                  picomatch:
         | 
| 1742 | 
             
                    optional: true
         | 
| 1743 |  | 
| 1744 | 
            +
              fdir@6.4.4:
         | 
| 1745 | 
            +
                resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==}
         | 
| 1746 | 
            +
                peerDependencies:
         | 
| 1747 | 
            +
                  picomatch: ^3 || ^4
         | 
| 1748 | 
            +
                peerDependenciesMeta:
         | 
| 1749 | 
            +
                  picomatch:
         | 
| 1750 | 
            +
                    optional: true
         | 
| 1751 | 
            +
             | 
| 1752 | 
             
              figures@3.2.0:
         | 
| 1753 | 
             
                resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
         | 
| 1754 | 
             
                engines: {node: '>=8'}
         | 
|  | |
| 1818 | 
             
                resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
         | 
| 1819 | 
             
                engines: {node: '>=10.13.0'}
         | 
| 1820 |  | 
| 1821 | 
            +
              global-agent@3.0.0:
         | 
| 1822 | 
            +
                resolution: {integrity: sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==}
         | 
| 1823 | 
            +
                engines: {node: '>=10.0'}
         | 
| 1824 | 
            +
             | 
| 1825 | 
             
              global-prefix@4.0.0:
         | 
| 1826 | 
             
                resolution: {integrity: sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==}
         | 
| 1827 | 
             
                engines: {node: '>=16'}
         | 
|  | |
| 1838 | 
             
                resolution: {integrity: sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==}
         | 
| 1839 | 
             
                engines: {node: '>=18'}
         | 
| 1840 |  | 
| 1841 | 
            +
              globalthis@1.0.4:
         | 
| 1842 | 
            +
                resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
         | 
| 1843 | 
            +
                engines: {node: '>= 0.4'}
         | 
| 1844 | 
            +
             | 
| 1845 | 
             
              gopd@1.2.0:
         | 
| 1846 | 
             
                resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
         | 
| 1847 | 
             
                engines: {node: '>= 0.4'}
         | 
|  | |
| 1863 | 
             
                resolution: {integrity: sha512-Pq0h+hvsVm6dDEa8x82GnLSYHOzNDt7f0ddFa3FqcQlgzEiptPqL+XrOJNavjOzSYiYWIrgeVYYgGlLmnxwilQ==}
         | 
| 1864 | 
             
                engines: {node: '>=8'}
         | 
| 1865 |  | 
| 1866 | 
            +
              has-property-descriptors@1.0.2:
         | 
| 1867 | 
            +
                resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
         | 
| 1868 | 
            +
             | 
| 1869 | 
             
              has-symbols@1.1.0:
         | 
| 1870 | 
             
                resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
         | 
| 1871 | 
             
                engines: {node: '>= 0.4'}
         | 
|  | |
| 1888 | 
             
                resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==}
         | 
| 1889 | 
             
                engines: {node: '>=12.0.0'}
         | 
| 1890 |  | 
| 1891 | 
            +
              html-encoding-sniffer@4.0.0:
         | 
| 1892 | 
            +
                resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==}
         | 
| 1893 | 
            +
                engines: {node: '>=18'}
         | 
| 1894 | 
            +
             | 
| 1895 | 
             
              html-void-elements@3.0.0:
         | 
| 1896 | 
             
                resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
         | 
| 1897 |  | 
| 1898 | 
            +
              http-proxy-agent@7.0.2:
         | 
| 1899 | 
            +
                resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
         | 
| 1900 | 
            +
                engines: {node: '>= 14'}
         | 
| 1901 | 
            +
             | 
| 1902 | 
            +
              https-proxy-agent@7.0.6:
         | 
| 1903 | 
            +
                resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
         | 
| 1904 | 
            +
                engines: {node: '>= 14'}
         | 
| 1905 | 
            +
             | 
| 1906 | 
             
              humanize-ms@1.2.1:
         | 
| 1907 | 
             
                resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
         | 
| 1908 |  | 
|  | |
| 1910 | 
             
                resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
         | 
| 1911 | 
             
                engines: {node: '>=0.10.0'}
         | 
| 1912 |  | 
| 1913 | 
            +
              iconv-lite@0.6.3:
         | 
| 1914 | 
            +
                resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
         | 
| 1915 | 
            +
                engines: {node: '>=0.10.0'}
         | 
| 1916 | 
            +
             | 
| 1917 | 
             
              ieee754@1.2.1:
         | 
| 1918 | 
             
                resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
         | 
| 1919 |  | 
|  | |
| 1932 | 
             
                resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
         | 
| 1933 | 
             
                engines: {node: '>=0.8.19'}
         | 
| 1934 |  | 
| 1935 | 
            +
              indent-string@4.0.0:
         | 
| 1936 | 
            +
                resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
         | 
| 1937 | 
            +
                engines: {node: '>=8'}
         | 
| 1938 | 
            +
             | 
| 1939 | 
             
              inherits@2.0.4:
         | 
| 1940 | 
             
                resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
         | 
| 1941 |  | 
|  | |
| 1977 | 
             
                resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
         | 
| 1978 | 
             
                engines: {node: '>=0.12.0'}
         | 
| 1979 |  | 
| 1980 | 
            +
              is-potential-custom-element-name@1.0.1:
         | 
| 1981 | 
            +
                resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
         | 
| 1982 | 
            +
             | 
| 1983 | 
             
              is-reference@1.2.1:
         | 
| 1984 | 
             
                resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
         | 
| 1985 |  | 
|  | |
| 2017 | 
             
                resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
         | 
| 2018 | 
             
                hasBin: true
         | 
| 2019 |  | 
| 2020 | 
            +
              js-tokens@4.0.0:
         | 
| 2021 | 
            +
                resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
         | 
| 2022 | 
            +
             | 
| 2023 | 
             
              js-yaml@4.1.0:
         | 
| 2024 | 
             
                resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
         | 
| 2025 | 
             
                hasBin: true
         | 
| 2026 |  | 
| 2027 | 
            +
              jsdom@26.1.0:
         | 
| 2028 | 
            +
                resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==}
         | 
| 2029 | 
            +
                engines: {node: '>=18'}
         | 
| 2030 | 
            +
                peerDependencies:
         | 
| 2031 | 
            +
                  canvas: ^3.0.0
         | 
| 2032 | 
            +
                peerDependenciesMeta:
         | 
| 2033 | 
            +
                  canvas:
         | 
| 2034 | 
            +
                    optional: true
         | 
| 2035 | 
            +
             | 
| 2036 | 
             
              json-buffer@3.0.1:
         | 
| 2037 | 
             
                resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
         | 
| 2038 |  | 
|  | |
| 2042 | 
             
              json-stable-stringify-without-jsonify@1.0.1:
         | 
| 2043 | 
             
                resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
         | 
| 2044 |  | 
| 2045 | 
            +
              json-stringify-safe@5.0.1:
         | 
| 2046 | 
            +
                resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
         | 
| 2047 | 
            +
             | 
| 2048 | 
             
              keyv@4.5.4:
         | 
| 2049 | 
             
                resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
         | 
| 2050 |  | 
|  | |
| 2162 | 
             
              long@5.3.1:
         | 
| 2163 | 
             
                resolution: {integrity: sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==}
         | 
| 2164 |  | 
| 2165 | 
            +
              loupe@3.1.3:
         | 
| 2166 | 
            +
                resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==}
         | 
| 2167 | 
            +
             | 
| 2168 | 
            +
              lru-cache@10.4.3:
         | 
| 2169 | 
            +
                resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
         | 
| 2170 | 
            +
             | 
| 2171 | 
            +
              lz-string@1.5.0:
         | 
| 2172 | 
            +
                resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==}
         | 
| 2173 | 
            +
                hasBin: true
         | 
| 2174 | 
            +
             | 
| 2175 | 
             
              magic-string@0.30.17:
         | 
| 2176 | 
             
                resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
         | 
| 2177 |  | 
| 2178 | 
            +
              matcher@3.0.0:
         | 
| 2179 | 
            +
                resolution: {integrity: sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==}
         | 
| 2180 | 
            +
                engines: {node: '>=10'}
         | 
| 2181 | 
            +
             | 
| 2182 | 
             
              math-intrinsics@1.1.0:
         | 
| 2183 | 
             
                resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
         | 
| 2184 | 
             
                engines: {node: '>= 0.4'}
         | 
|  | |
| 2227 | 
             
                resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
         | 
| 2228 | 
             
                engines: {node: '>=6'}
         | 
| 2229 |  | 
| 2230 | 
            +
              min-indent@1.0.1:
         | 
| 2231 | 
            +
                resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
         | 
| 2232 | 
            +
                engines: {node: '>=4'}
         | 
| 2233 | 
            +
             | 
| 2234 | 
             
              minimatch@3.1.2:
         | 
| 2235 | 
             
                resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
         | 
| 2236 |  | 
|  | |
| 2297 | 
             
                  encoding:
         | 
| 2298 | 
             
                    optional: true
         | 
| 2299 |  | 
| 2300 | 
            +
              nwsapi@2.2.20:
         | 
| 2301 | 
            +
                resolution: {integrity: sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==}
         | 
| 2302 | 
            +
             | 
| 2303 | 
            +
              object-keys@1.1.1:
         | 
| 2304 | 
            +
                resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
         | 
| 2305 | 
            +
                engines: {node: '>= 0.4'}
         | 
| 2306 | 
            +
             | 
| 2307 | 
             
              onetime@5.1.2:
         | 
| 2308 | 
             
                resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
         | 
| 2309 | 
             
                engines: {node: '>=6'}
         | 
|  | |
| 2314 | 
             
              oniguruma-to-es@4.3.3:
         | 
| 2315 | 
             
                resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==}
         | 
| 2316 |  | 
| 2317 | 
            +
              onnxruntime-common@1.21.0:
         | 
| 2318 | 
            +
                resolution: {integrity: sha512-Q632iLLrtCAVOTO65dh2+mNbQir/QNTVBG3h/QdZBpns7mZ0RYbLRBgGABPbpU9351AgYy7SJf1WaeVwMrBFPQ==}
         | 
| 2319 |  | 
| 2320 | 
            +
              onnxruntime-common@1.22.0-dev.20250409-89f8206ba4:
         | 
| 2321 | 
            +
                resolution: {integrity: sha512-vDJMkfCfb0b1A836rgHj+ORuZf4B4+cc2bASQtpeoJLueuFc5DuYwjIZUBrSvx/fO5IrLjLz+oTrB3pcGlhovQ==}
         | 
| 2322 |  | 
| 2323 | 
            +
              onnxruntime-node@1.21.0:
         | 
| 2324 | 
            +
                resolution: {integrity: sha512-NeaCX6WW2L8cRCSqy3bInlo5ojjQqu2fD3D+9W5qb5irwxhEyWKXeH2vZ8W9r6VxaMPUan+4/7NDwZMtouZxEw==}
         | 
| 2325 | 
             
                os: [win32, darwin, linux]
         | 
| 2326 |  | 
| 2327 | 
            +
              onnxruntime-web@1.22.0-dev.20250409-89f8206ba4:
         | 
| 2328 | 
            +
                resolution: {integrity: sha512-0uS76OPgH0hWCPrFKlL8kYVV7ckM7t/36HfbgoFw6Nd0CZVVbQC4PkrR8mBX8LtNUFZO25IQBqV2Hx2ho3FlbQ==}
         | 
| 2329 |  | 
| 2330 | 
             
              openai@4.90.0:
         | 
| 2331 | 
             
                resolution: {integrity: sha512-YCuHMMycqtCg1B8G9ezkOF0j8UnBWD3Al/zYaelpuXwU1yhCEv+Y4n9G20MnyGy6cH4GsFwOMrgstQ+bgG1PtA==}
         | 
|  | |
| 2374 | 
             
                resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
         | 
| 2375 | 
             
                engines: {node: '>=6'}
         | 
| 2376 |  | 
| 2377 | 
            +
              parse5@7.3.0:
         | 
| 2378 | 
            +
                resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
         | 
| 2379 | 
            +
             | 
| 2380 | 
             
              path-exists@4.0.0:
         | 
| 2381 | 
             
                resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
         | 
| 2382 | 
             
                engines: {node: '>=8'}
         | 
|  | |
| 2398 | 
             
              pathe@2.0.3:
         | 
| 2399 | 
             
                resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
         | 
| 2400 |  | 
| 2401 | 
            +
              pathval@2.0.0:
         | 
| 2402 | 
            +
                resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==}
         | 
| 2403 | 
            +
                engines: {node: '>= 14.16'}
         | 
| 2404 | 
            +
             | 
| 2405 | 
             
              picocolors@1.1.1:
         | 
| 2406 | 
             
                resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
         | 
| 2407 |  | 
|  | |
| 2532 | 
             
                engines: {node: '>=14'}
         | 
| 2533 | 
             
                hasBin: true
         | 
| 2534 |  | 
| 2535 | 
            +
              pretty-format@27.5.1:
         | 
| 2536 | 
            +
                resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==}
         | 
| 2537 | 
            +
                engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
         | 
| 2538 | 
            +
             | 
| 2539 | 
             
              pretty-format@29.7.0:
         | 
| 2540 | 
             
                resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
         | 
| 2541 | 
             
                engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
         | 
|  | |
| 2561 | 
             
                resolution: {integrity: sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==}
         | 
| 2562 | 
             
                engines: {node: '>=4'}
         | 
| 2563 |  | 
| 2564 | 
            +
              react-is@17.0.2:
         | 
| 2565 | 
            +
                resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
         | 
| 2566 | 
            +
             | 
| 2567 | 
             
              react-is@18.3.1:
         | 
| 2568 | 
             
                resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
         | 
| 2569 |  | 
|  | |
| 2575 | 
             
                resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
         | 
| 2576 | 
             
                engines: {node: '>= 14.18.0'}
         | 
| 2577 |  | 
| 2578 | 
            +
              redent@3.0.0:
         | 
| 2579 | 
            +
                resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
         | 
| 2580 | 
            +
                engines: {node: '>=8'}
         | 
| 2581 | 
            +
             | 
| 2582 | 
             
              reflect-metadata@0.1.14:
         | 
| 2583 | 
             
                resolution: {integrity: sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==}
         | 
| 2584 |  | 
|  | |
| 2619 | 
             
                resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
         | 
| 2620 | 
             
                engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
         | 
| 2621 |  | 
| 2622 | 
            +
              roarr@2.15.4:
         | 
| 2623 | 
            +
                resolution: {integrity: sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==}
         | 
| 2624 | 
            +
                engines: {node: '>=8.0'}
         | 
| 2625 | 
            +
             | 
| 2626 | 
             
              rollup@4.34.9:
         | 
| 2627 | 
             
                resolution: {integrity: sha512-nF5XYqWWp9hx/LrpC8sZvvvmq0TeTjQgaZHYmAgwysT9nh8sWnZhBnM8ZyVbbJFIQBLwHDNoMqsBZBbUo4U8sQ==}
         | 
| 2628 | 
             
                engines: {node: '>=18.0.0', npm: '>=8.0.0'}
         | 
| 2629 | 
             
                hasBin: true
         | 
| 2630 |  | 
| 2631 | 
            +
              rrweb-cssom@0.8.0:
         | 
| 2632 | 
            +
                resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==}
         | 
| 2633 | 
            +
             | 
| 2634 | 
             
              run-async@2.4.1:
         | 
| 2635 | 
             
                resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
         | 
| 2636 | 
             
                engines: {node: '>=0.12.0'}
         | 
|  | |
| 2661 | 
             
              safer-buffer@2.1.2:
         | 
| 2662 | 
             
                resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
         | 
| 2663 |  | 
| 2664 | 
            +
              saxes@6.0.0:
         | 
| 2665 | 
            +
                resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
         | 
| 2666 | 
            +
                engines: {node: '>=v12.22.7'}
         | 
| 2667 | 
            +
             | 
| 2668 | 
            +
              semver-compare@1.0.0:
         | 
| 2669 | 
            +
                resolution: {integrity: sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==}
         | 
| 2670 | 
            +
             | 
| 2671 | 
             
              semver@7.7.1:
         | 
| 2672 | 
             
                resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
         | 
| 2673 | 
             
                engines: {node: '>=10'}
         | 
| 2674 | 
             
                hasBin: true
         | 
| 2675 |  | 
| 2676 | 
            +
              semver@7.7.2:
         | 
| 2677 | 
            +
                resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==}
         | 
| 2678 | 
            +
                engines: {node: '>=10'}
         | 
| 2679 | 
            +
                hasBin: true
         | 
| 2680 | 
            +
             | 
| 2681 | 
            +
              serialize-error@7.0.1:
         | 
| 2682 | 
            +
                resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==}
         | 
| 2683 | 
            +
                engines: {node: '>=10'}
         | 
| 2684 | 
            +
             | 
| 2685 | 
             
              set-cookie-parser@2.7.1:
         | 
| 2686 | 
             
                resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==}
         | 
| 2687 |  | 
| 2688 | 
            +
              sharp@0.34.2:
         | 
| 2689 | 
            +
                resolution: {integrity: sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==}
         | 
| 2690 | 
             
                engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
         | 
| 2691 |  | 
| 2692 | 
             
              shebang-command@2.0.0:
         | 
|  | |
| 2700 | 
             
              shiki@3.4.0:
         | 
| 2701 | 
             
                resolution: {integrity: sha512-Ni80XHcqhOEXv5mmDAvf5p6PAJqbUc/RzFeaOqk+zP5DLvTPS3j0ckvA+MI87qoxTQ5RGJDVTbdl/ENLSyyAnQ==}
         | 
| 2702 |  | 
| 2703 | 
            +
              siginfo@2.0.0:
         | 
| 2704 | 
            +
                resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
         | 
| 2705 | 
            +
             | 
| 2706 | 
             
              signal-exit@3.0.7:
         | 
| 2707 | 
             
                resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
         | 
| 2708 |  | 
|  | |
| 2720 | 
             
              space-separated-tokens@2.0.2:
         | 
| 2721 | 
             
                resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
         | 
| 2722 |  | 
| 2723 | 
            +
              sprintf-js@1.1.3:
         | 
| 2724 | 
            +
                resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==}
         | 
| 2725 | 
            +
             | 
| 2726 | 
            +
              stackback@0.0.2:
         | 
| 2727 | 
            +
                resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
         | 
| 2728 | 
            +
             | 
| 2729 | 
            +
              std-env@3.9.0:
         | 
| 2730 | 
            +
                resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==}
         | 
| 2731 | 
            +
             | 
| 2732 | 
             
              string-width@4.2.3:
         | 
| 2733 | 
             
                resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
         | 
| 2734 | 
             
                engines: {node: '>=8'}
         | 
|  | |
| 2743 | 
             
                resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
         | 
| 2744 | 
             
                engines: {node: '>=8'}
         | 
| 2745 |  | 
| 2746 | 
            +
              strip-indent@3.0.0:
         | 
| 2747 | 
            +
                resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
         | 
| 2748 | 
            +
                engines: {node: '>=8'}
         | 
| 2749 | 
            +
             | 
| 2750 | 
             
              strip-json-comments@3.1.1:
         | 
| 2751 | 
             
                resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
         | 
| 2752 | 
             
                engines: {node: '>=8'}
         | 
|  | |
| 2780 | 
             
                resolution: {integrity: sha512-QIYtKnJGkubWXtNkrUBKVCvyo9gjcccdbnvXfwsGNhvbeNNdQjRDTa/BiQcJ2kWXbXPQbWKyT7CUu53KIj1rfw==}
         | 
| 2781 | 
             
                engines: {node: '>=18'}
         | 
| 2782 |  | 
| 2783 | 
            +
              symbol-tree@3.2.4:
         | 
| 2784 | 
            +
                resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
         | 
| 2785 | 
            +
             | 
| 2786 | 
             
              synckit@0.9.2:
         | 
| 2787 | 
             
                resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==}
         | 
| 2788 | 
             
                engines: {node: ^14.18.0 || >=16.0.0}
         | 
|  | |
| 2804 | 
             
              through@2.3.8:
         | 
| 2805 | 
             
                resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
         | 
| 2806 |  | 
| 2807 | 
            +
              tinybench@2.9.0:
         | 
| 2808 | 
            +
                resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
         | 
| 2809 | 
            +
             | 
| 2810 | 
             
              tinyexec@0.3.2:
         | 
| 2811 | 
             
                resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
         | 
| 2812 |  | 
| 2813 | 
            +
              tinyglobby@0.2.13:
         | 
| 2814 | 
            +
                resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==}
         | 
| 2815 | 
            +
                engines: {node: '>=12.0.0'}
         | 
| 2816 | 
            +
             | 
| 2817 | 
            +
              tinypool@1.0.2:
         | 
| 2818 | 
            +
                resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==}
         | 
| 2819 | 
            +
                engines: {node: ^18.0.0 || >=20.0.0}
         | 
| 2820 | 
            +
             | 
| 2821 | 
            +
              tinyrainbow@2.0.0:
         | 
| 2822 | 
            +
                resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
         | 
| 2823 | 
            +
                engines: {node: '>=14.0.0'}
         | 
| 2824 | 
            +
             | 
| 2825 | 
            +
              tinyspy@3.0.2:
         | 
| 2826 | 
            +
                resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==}
         | 
| 2827 | 
            +
                engines: {node: '>=14.0.0'}
         | 
| 2828 | 
            +
             | 
| 2829 | 
            +
              tldts-core@6.1.86:
         | 
| 2830 | 
            +
                resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==}
         | 
| 2831 | 
            +
             | 
| 2832 | 
            +
              tldts@6.1.86:
         | 
| 2833 | 
            +
                resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==}
         | 
| 2834 | 
            +
                hasBin: true
         | 
| 2835 | 
            +
             | 
| 2836 | 
             
              tmp@0.0.33:
         | 
| 2837 | 
             
                resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
         | 
| 2838 | 
             
                engines: {node: '>=0.6.0'}
         | 
|  | |
| 2845 | 
             
                resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
         | 
| 2846 | 
             
                engines: {node: '>=6'}
         | 
| 2847 |  | 
| 2848 | 
            +
              tough-cookie@5.1.2:
         | 
| 2849 | 
            +
                resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==}
         | 
| 2850 | 
            +
                engines: {node: '>=16'}
         | 
| 2851 | 
            +
             | 
| 2852 | 
             
              tr46@0.0.3:
         | 
| 2853 | 
             
                resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
         | 
| 2854 |  | 
| 2855 | 
            +
              tr46@5.1.1:
         | 
| 2856 | 
            +
                resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==}
         | 
| 2857 | 
            +
                engines: {node: '>=18'}
         | 
| 2858 | 
            +
             | 
| 2859 | 
             
              trim-lines@3.0.1:
         | 
| 2860 | 
             
                resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
         | 
| 2861 |  | 
|  | |
| 2876 | 
             
                resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
         | 
| 2877 | 
             
                engines: {node: '>= 0.8.0'}
         | 
| 2878 |  | 
| 2879 | 
            +
              type-fest@0.13.1:
         | 
| 2880 | 
            +
                resolution: {integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==}
         | 
| 2881 | 
            +
                engines: {node: '>=10'}
         | 
| 2882 | 
            +
             | 
| 2883 | 
             
              type-fest@0.21.3:
         | 
| 2884 | 
             
                resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
         | 
| 2885 | 
             
                engines: {node: '>=10'}
         | 
|  | |
| 2990 | 
             
              vfile@6.0.3:
         | 
| 2991 | 
             
                resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
         | 
| 2992 |  | 
| 2993 | 
            +
              vite-node@3.1.4:
         | 
| 2994 | 
            +
                resolution: {integrity: sha512-6enNwYnpyDo4hEgytbmc6mYWHXDHYEn0D1/rw4Q+tnHUGtKTJsn8T1YkX6Q18wI5LCrS8CTYlBaiCqxOy2kvUA==}
         | 
| 2995 | 
            +
                engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
         | 
| 2996 | 
            +
                hasBin: true
         | 
| 2997 | 
            +
             | 
| 2998 | 
             
              vite@5.4.14:
         | 
| 2999 | 
             
                resolution: {integrity: sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==}
         | 
| 3000 | 
             
                engines: {node: ^18.0.0 || >=20.0.0}
         | 
|  | |
| 3074 | 
             
                  vite:
         | 
| 3075 | 
             
                    optional: true
         | 
| 3076 |  | 
| 3077 | 
            +
              vitest@3.1.4:
         | 
| 3078 | 
            +
                resolution: {integrity: sha512-Ta56rT7uWxCSJXlBtKgIlApJnT6e6IGmTYxYcmxjJ4ujuZDI59GUQgVDObXXJujOmPDBYXHK1qmaGtneu6TNIQ==}
         | 
| 3079 | 
            +
                engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
         | 
| 3080 | 
            +
                hasBin: true
         | 
| 3081 | 
            +
                peerDependencies:
         | 
| 3082 | 
            +
                  '@edge-runtime/vm': '*'
         | 
| 3083 | 
            +
                  '@types/debug': ^4.1.12
         | 
| 3084 | 
            +
                  '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
         | 
| 3085 | 
            +
                  '@vitest/browser': 3.1.4
         | 
| 3086 | 
            +
                  '@vitest/ui': 3.1.4
         | 
| 3087 | 
            +
                  happy-dom: '*'
         | 
| 3088 | 
            +
                  jsdom: '*'
         | 
| 3089 | 
            +
                peerDependenciesMeta:
         | 
| 3090 | 
            +
                  '@edge-runtime/vm':
         | 
| 3091 | 
            +
                    optional: true
         | 
| 3092 | 
            +
                  '@types/debug':
         | 
| 3093 | 
            +
                    optional: true
         | 
| 3094 | 
            +
                  '@types/node':
         | 
| 3095 | 
            +
                    optional: true
         | 
| 3096 | 
            +
                  '@vitest/browser':
         | 
| 3097 | 
            +
                    optional: true
         | 
| 3098 | 
            +
                  '@vitest/ui':
         | 
| 3099 | 
            +
                    optional: true
         | 
| 3100 | 
            +
                  happy-dom:
         | 
| 3101 | 
            +
                    optional: true
         | 
| 3102 | 
            +
                  jsdom:
         | 
| 3103 | 
            +
                    optional: true
         | 
| 3104 | 
            +
             | 
| 3105 | 
            +
              w3c-xmlserializer@5.0.0:
         | 
| 3106 | 
            +
                resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
         | 
| 3107 | 
            +
                engines: {node: '>=18'}
         | 
| 3108 | 
            +
             | 
| 3109 | 
             
              wcwidth@1.0.1:
         | 
| 3110 | 
             
                resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
         | 
| 3111 |  | 
|  | |
| 3116 | 
             
              webidl-conversions@3.0.1:
         | 
| 3117 | 
             
                resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
         | 
| 3118 |  | 
| 3119 | 
            +
              webidl-conversions@7.0.0:
         | 
| 3120 | 
            +
                resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
         | 
| 3121 | 
            +
                engines: {node: '>=12'}
         | 
| 3122 | 
            +
             | 
| 3123 | 
             
              webpack-virtual-modules@0.6.2:
         | 
| 3124 | 
             
                resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
         | 
| 3125 |  | 
| 3126 | 
            +
              whatwg-encoding@3.1.1:
         | 
| 3127 | 
            +
                resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
         | 
| 3128 | 
            +
                engines: {node: '>=18'}
         | 
| 3129 | 
            +
             | 
| 3130 | 
            +
              whatwg-mimetype@4.0.0:
         | 
| 3131 | 
            +
                resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==}
         | 
| 3132 | 
            +
                engines: {node: '>=18'}
         | 
| 3133 | 
            +
             | 
| 3134 | 
            +
              whatwg-url@14.2.0:
         | 
| 3135 | 
            +
                resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==}
         | 
| 3136 | 
            +
                engines: {node: '>=18'}
         | 
| 3137 | 
            +
             | 
| 3138 | 
             
              whatwg-url@5.0.0:
         | 
| 3139 | 
             
                resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
         | 
| 3140 |  | 
|  | |
| 3148 | 
             
                engines: {node: ^16.13.0 || >=18.0.0}
         | 
| 3149 | 
             
                hasBin: true
         | 
| 3150 |  | 
| 3151 | 
            +
              why-is-node-running@2.3.0:
         | 
| 3152 | 
            +
                resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
         | 
| 3153 | 
            +
                engines: {node: '>=8'}
         | 
| 3154 | 
            +
                hasBin: true
         | 
| 3155 | 
            +
             | 
| 3156 | 
             
              word-wrap@1.2.5:
         | 
| 3157 | 
             
                resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
         | 
| 3158 | 
             
                engines: {node: '>=0.10.0'}
         | 
|  | |
| 3161 | 
             
                resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
         | 
| 3162 | 
             
                engines: {node: '>=8'}
         | 
| 3163 |  | 
| 3164 | 
            +
              ws@8.18.2:
         | 
| 3165 | 
            +
                resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==}
         | 
| 3166 | 
            +
                engines: {node: '>=10.0.0'}
         | 
| 3167 | 
            +
                peerDependencies:
         | 
| 3168 | 
            +
                  bufferutil: ^4.0.1
         | 
| 3169 | 
            +
                  utf-8-validate: '>=5.0.2'
         | 
| 3170 | 
            +
                peerDependenciesMeta:
         | 
| 3171 | 
            +
                  bufferutil:
         | 
| 3172 | 
            +
                    optional: true
         | 
| 3173 | 
            +
                  utf-8-validate:
         | 
| 3174 | 
            +
                    optional: true
         | 
| 3175 | 
            +
             | 
| 3176 | 
            +
              xml-name-validator@5.0.0:
         | 
| 3177 | 
            +
                resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==}
         | 
| 3178 | 
            +
                engines: {node: '>=18'}
         | 
| 3179 | 
            +
             | 
| 3180 | 
            +
              xmlchars@2.2.0:
         | 
| 3181 | 
            +
                resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==}
         | 
| 3182 | 
            +
             | 
| 3183 | 
             
              yallist@5.0.0:
         | 
| 3184 | 
             
                resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
         | 
| 3185 | 
             
                engines: {node: '>=18'}
         | 
|  | |
| 3209 |  | 
| 3210 | 
             
            snapshots:
         | 
| 3211 |  | 
| 3212 | 
            +
              '@adobe/css-tools@4.4.3': {}
         | 
| 3213 | 
            +
             | 
| 3214 | 
             
              '@alloc/quick-lru@5.2.0': {}
         | 
| 3215 |  | 
| 3216 | 
             
              '@ampproject/remapping@2.3.0':
         | 
|  | |
| 3225 |  | 
| 3226 | 
             
              '@antfu/utils@8.1.1': {}
         | 
| 3227 |  | 
| 3228 | 
            +
              '@asamuzakjp/css-color@3.2.0':
         | 
| 3229 | 
            +
                dependencies:
         | 
| 3230 | 
            +
                  '@csstools/css-calc': 2.1.3(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)
         | 
| 3231 | 
            +
                  '@csstools/css-color-parser': 3.0.9(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)
         | 
| 3232 | 
            +
                  '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
         | 
| 3233 | 
            +
                  '@csstools/css-tokenizer': 3.0.3
         | 
| 3234 | 
            +
                  lru-cache: 10.4.3
         | 
| 3235 | 
            +
             | 
| 3236 | 
            +
              '@babel/code-frame@7.27.1':
         | 
| 3237 | 
            +
                dependencies:
         | 
| 3238 | 
            +
                  '@babel/helper-validator-identifier': 7.27.1
         | 
| 3239 | 
            +
                  js-tokens: 4.0.0
         | 
| 3240 | 
            +
                  picocolors: 1.1.1
         | 
| 3241 | 
            +
             | 
| 3242 | 
            +
              '@babel/helper-validator-identifier@7.27.1': {}
         | 
| 3243 | 
            +
             | 
| 3244 | 
            +
              '@babel/runtime@7.27.1': {}
         | 
| 3245 | 
            +
             | 
| 3246 | 
            +
              '@csstools/color-helpers@5.0.2': {}
         | 
| 3247 | 
            +
             | 
| 3248 | 
            +
              '@csstools/css-calc@2.1.3(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)':
         | 
| 3249 | 
            +
                dependencies:
         | 
| 3250 | 
            +
                  '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
         | 
| 3251 | 
            +
                  '@csstools/css-tokenizer': 3.0.3
         | 
| 3252 | 
            +
             | 
| 3253 | 
            +
              '@csstools/css-color-parser@3.0.9(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)':
         | 
| 3254 | 
            +
                dependencies:
         | 
| 3255 | 
            +
                  '@csstools/color-helpers': 5.0.2
         | 
| 3256 | 
            +
                  '@csstools/css-calc': 2.1.3(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)
         | 
| 3257 | 
            +
                  '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
         | 
| 3258 | 
            +
                  '@csstools/css-tokenizer': 3.0.3
         | 
| 3259 | 
            +
             | 
| 3260 | 
            +
              '@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)':
         | 
| 3261 | 
            +
                dependencies:
         | 
| 3262 | 
            +
                  '@csstools/css-tokenizer': 3.0.3
         | 
| 3263 | 
            +
             | 
| 3264 | 
            +
              '@csstools/css-tokenizer@3.0.3': {}
         | 
| 3265 | 
            +
             | 
| 3266 | 
            +
              '@emnapi/runtime@1.4.3':
         | 
| 3267 | 
             
                dependencies:
         | 
| 3268 | 
             
                  tslib: 2.8.1
         | 
| 3269 | 
             
                optional: true
         | 
|  | |
| 3467 |  | 
| 3468 | 
             
              '@floating-ui/utils@0.2.9': {}
         | 
| 3469 |  | 
| 3470 | 
            +
              '@huggingface/hub@2.1.0':
         | 
| 3471 | 
             
                dependencies:
         | 
| 3472 | 
            +
                  '@huggingface/tasks': 0.19.8
         | 
| 3473 |  | 
| 3474 | 
            +
              '@huggingface/inference@3.13.2':
         | 
| 3475 | 
             
                dependencies:
         | 
| 3476 | 
            +
                  '@huggingface/jinja': 0.5.0
         | 
| 3477 | 
            +
                  '@huggingface/tasks': 0.19.8
         | 
| 3478 |  | 
| 3479 | 
            +
              '@huggingface/jinja@0.4.1': {}
         | 
| 3480 |  | 
| 3481 | 
            +
              '@huggingface/jinja@0.5.0': {}
         | 
| 3482 |  | 
| 3483 | 
            +
              '@huggingface/tasks@0.19.8': {}
         | 
| 3484 |  | 
| 3485 | 
            +
              '@huggingface/transformers@3.5.1':
         | 
| 3486 | 
             
                dependencies:
         | 
| 3487 | 
            +
                  '@huggingface/jinja': 0.4.1
         | 
| 3488 | 
            +
                  onnxruntime-node: 1.21.0
         | 
| 3489 | 
            +
                  onnxruntime-web: 1.22.0-dev.20250409-89f8206ba4
         | 
| 3490 | 
            +
                  sharp: 0.34.2
         | 
| 3491 |  | 
| 3492 | 
             
              '@humanfs/core@0.19.1': {}
         | 
| 3493 |  | 
|  | |
| 3525 | 
             
                transitivePeerDependencies:
         | 
| 3526 | 
             
                  - supports-color
         | 
| 3527 |  | 
| 3528 | 
            +
              '@img/sharp-darwin-arm64@0.34.2':
         | 
| 3529 | 
             
                optionalDependencies:
         | 
| 3530 | 
            +
                  '@img/sharp-libvips-darwin-arm64': 1.1.0
         | 
| 3531 | 
             
                optional: true
         | 
| 3532 |  | 
| 3533 | 
            +
              '@img/sharp-darwin-x64@0.34.2':
         | 
| 3534 | 
             
                optionalDependencies:
         | 
| 3535 | 
            +
                  '@img/sharp-libvips-darwin-x64': 1.1.0
         | 
| 3536 | 
             
                optional: true
         | 
| 3537 |  | 
| 3538 | 
            +
              '@img/sharp-libvips-darwin-arm64@1.1.0':
         | 
| 3539 | 
             
                optional: true
         | 
| 3540 |  | 
| 3541 | 
            +
              '@img/sharp-libvips-darwin-x64@1.1.0':
         | 
| 3542 | 
             
                optional: true
         | 
| 3543 |  | 
| 3544 | 
            +
              '@img/sharp-libvips-linux-arm64@1.1.0':
         | 
| 3545 | 
             
                optional: true
         | 
| 3546 |  | 
| 3547 | 
            +
              '@img/sharp-libvips-linux-arm@1.1.0':
         | 
| 3548 | 
             
                optional: true
         | 
| 3549 |  | 
| 3550 | 
            +
              '@img/sharp-libvips-linux-ppc64@1.1.0':
         | 
| 3551 | 
             
                optional: true
         | 
| 3552 |  | 
| 3553 | 
            +
              '@img/sharp-libvips-linux-s390x@1.1.0':
         | 
| 3554 | 
             
                optional: true
         | 
| 3555 |  | 
| 3556 | 
            +
              '@img/sharp-libvips-linux-x64@1.1.0':
         | 
| 3557 | 
             
                optional: true
         | 
| 3558 |  | 
| 3559 | 
            +
              '@img/sharp-libvips-linuxmusl-arm64@1.1.0':
         | 
| 3560 | 
             
                optional: true
         | 
| 3561 |  | 
| 3562 | 
            +
              '@img/sharp-libvips-linuxmusl-x64@1.1.0':
         | 
| 3563 | 
            +
                optional: true
         | 
| 3564 | 
            +
             | 
| 3565 | 
            +
              '@img/sharp-linux-arm64@0.34.2':
         | 
| 3566 | 
             
                optionalDependencies:
         | 
| 3567 | 
            +
                  '@img/sharp-libvips-linux-arm64': 1.1.0
         | 
| 3568 | 
             
                optional: true
         | 
| 3569 |  | 
| 3570 | 
            +
              '@img/sharp-linux-arm@0.34.2':
         | 
| 3571 | 
             
                optionalDependencies:
         | 
| 3572 | 
            +
                  '@img/sharp-libvips-linux-arm': 1.1.0
         | 
| 3573 | 
             
                optional: true
         | 
| 3574 |  | 
| 3575 | 
            +
              '@img/sharp-linux-s390x@0.34.2':
         | 
| 3576 | 
             
                optionalDependencies:
         | 
| 3577 | 
            +
                  '@img/sharp-libvips-linux-s390x': 1.1.0
         | 
| 3578 | 
             
                optional: true
         | 
| 3579 |  | 
| 3580 | 
            +
              '@img/sharp-linux-x64@0.34.2':
         | 
| 3581 | 
             
                optionalDependencies:
         | 
| 3582 | 
            +
                  '@img/sharp-libvips-linux-x64': 1.1.0
         | 
| 3583 | 
             
                optional: true
         | 
| 3584 |  | 
| 3585 | 
            +
              '@img/sharp-linuxmusl-arm64@0.34.2':
         | 
| 3586 | 
             
                optionalDependencies:
         | 
| 3587 | 
            +
                  '@img/sharp-libvips-linuxmusl-arm64': 1.1.0
         | 
| 3588 | 
             
                optional: true
         | 
| 3589 |  | 
| 3590 | 
            +
              '@img/sharp-linuxmusl-x64@0.34.2':
         | 
| 3591 | 
             
                optionalDependencies:
         | 
| 3592 | 
            +
                  '@img/sharp-libvips-linuxmusl-x64': 1.1.0
         | 
| 3593 | 
             
                optional: true
         | 
| 3594 |  | 
| 3595 | 
            +
              '@img/sharp-wasm32@0.34.2':
         | 
| 3596 | 
             
                dependencies:
         | 
| 3597 | 
            +
                  '@emnapi/runtime': 1.4.3
         | 
| 3598 | 
            +
                optional: true
         | 
| 3599 | 
            +
             | 
| 3600 | 
            +
              '@img/sharp-win32-arm64@0.34.2':
         | 
| 3601 | 
             
                optional: true
         | 
| 3602 |  | 
| 3603 | 
            +
              '@img/sharp-win32-ia32@0.34.2':
         | 
| 3604 | 
             
                optional: true
         | 
| 3605 |  | 
| 3606 | 
            +
              '@img/sharp-win32-x64@0.34.2':
         | 
| 3607 | 
             
                optional: true
         | 
| 3608 |  | 
| 3609 | 
             
              '@isaacs/fs-minipass@4.0.1':
         | 
|  | |
| 3958 | 
             
                  postcss: 8.5.3
         | 
| 3959 | 
             
                  tailwindcss: 4.0.9
         | 
| 3960 |  | 
| 3961 | 
            +
              '@testing-library/dom@10.4.0':
         | 
| 3962 | 
            +
                dependencies:
         | 
| 3963 | 
            +
                  '@babel/code-frame': 7.27.1
         | 
| 3964 | 
            +
                  '@babel/runtime': 7.27.1
         | 
| 3965 | 
            +
                  '@types/aria-query': 5.0.4
         | 
| 3966 | 
            +
                  aria-query: 5.3.0
         | 
| 3967 | 
            +
                  chalk: 4.1.2
         | 
| 3968 | 
            +
                  dom-accessibility-api: 0.5.16
         | 
| 3969 | 
            +
                  lz-string: 1.5.0
         | 
| 3970 | 
            +
                  pretty-format: 27.5.1
         | 
| 3971 | 
            +
             | 
| 3972 | 
            +
              '@testing-library/jest-dom@6.6.3':
         | 
| 3973 | 
            +
                dependencies:
         | 
| 3974 | 
            +
                  '@adobe/css-tools': 4.4.3
         | 
| 3975 | 
            +
                  aria-query: 5.3.2
         | 
| 3976 | 
            +
                  chalk: 3.0.0
         | 
| 3977 | 
            +
                  css.escape: 1.5.1
         | 
| 3978 | 
            +
                  dom-accessibility-api: 0.6.3
         | 
| 3979 | 
            +
                  lodash: 4.17.21
         | 
| 3980 | 
            +
                  redent: 3.0.0
         | 
| 3981 | 
            +
             | 
| 3982 | 
            +
              '@testing-library/svelte@5.2.8(svelte@5.30.1)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1))(vitest@3.1.4(@types/node@22.14.1)(jsdom@26.1.0)(lightningcss@1.29.1))':
         | 
| 3983 | 
            +
                dependencies:
         | 
| 3984 | 
            +
                  '@testing-library/dom': 10.4.0
         | 
| 3985 | 
            +
                  svelte: 5.30.1
         | 
| 3986 | 
            +
                optionalDependencies:
         | 
| 3987 | 
            +
                  vite: 5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)
         | 
| 3988 | 
            +
                  vitest: 3.1.4(@types/node@22.14.1)(jsdom@26.1.0)(lightningcss@1.29.1)
         | 
| 3989 | 
            +
             | 
| 3990 | 
            +
              '@types/aria-query@5.0.4': {}
         | 
| 3991 | 
            +
             | 
| 3992 | 
             
              '@types/cookie@0.6.0': {}
         | 
| 3993 |  | 
| 3994 | 
             
              '@types/estree@1.0.6': {}
         | 
|  | |
| 4099 |  | 
| 4100 | 
             
              '@ungap/structured-clone@1.3.0': {}
         | 
| 4101 |  | 
| 4102 | 
            +
              '@vitest/expect@3.1.4':
         | 
| 4103 | 
            +
                dependencies:
         | 
| 4104 | 
            +
                  '@vitest/spy': 3.1.4
         | 
| 4105 | 
            +
                  '@vitest/utils': 3.1.4
         | 
| 4106 | 
            +
                  chai: 5.2.0
         | 
| 4107 | 
            +
                  tinyrainbow: 2.0.0
         | 
| 4108 | 
            +
             | 
| 4109 | 
            +
              '@vitest/mocker@3.1.4(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1))':
         | 
| 4110 | 
            +
                dependencies:
         | 
| 4111 | 
            +
                  '@vitest/spy': 3.1.4
         | 
| 4112 | 
            +
                  estree-walker: 3.0.3
         | 
| 4113 | 
            +
                  magic-string: 0.30.17
         | 
| 4114 | 
            +
                optionalDependencies:
         | 
| 4115 | 
            +
                  vite: 5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)
         | 
| 4116 | 
            +
             | 
| 4117 | 
            +
              '@vitest/pretty-format@3.1.4':
         | 
| 4118 | 
            +
                dependencies:
         | 
| 4119 | 
            +
                  tinyrainbow: 2.0.0
         | 
| 4120 | 
            +
             | 
| 4121 | 
            +
              '@vitest/runner@3.1.4':
         | 
| 4122 | 
            +
                dependencies:
         | 
| 4123 | 
            +
                  '@vitest/utils': 3.1.4
         | 
| 4124 | 
            +
                  pathe: 2.0.3
         | 
| 4125 | 
            +
             | 
| 4126 | 
            +
              '@vitest/snapshot@3.1.4':
         | 
| 4127 | 
            +
                dependencies:
         | 
| 4128 | 
            +
                  '@vitest/pretty-format': 3.1.4
         | 
| 4129 | 
            +
                  magic-string: 0.30.17
         | 
| 4130 | 
            +
                  pathe: 2.0.3
         | 
| 4131 | 
            +
             | 
| 4132 | 
            +
              '@vitest/spy@3.1.4':
         | 
| 4133 | 
            +
                dependencies:
         | 
| 4134 | 
            +
                  tinyspy: 3.0.2
         | 
| 4135 | 
            +
             | 
| 4136 | 
            +
              '@vitest/utils@3.1.4':
         | 
| 4137 | 
            +
                dependencies:
         | 
| 4138 | 
            +
                  '@vitest/pretty-format': 3.1.4
         | 
| 4139 | 
            +
                  loupe: 3.1.3
         | 
| 4140 | 
            +
                  tinyrainbow: 2.0.0
         | 
| 4141 | 
            +
             | 
| 4142 | 
             
              abort-controller@3.0.0:
         | 
| 4143 | 
             
                dependencies:
         | 
| 4144 | 
             
                  event-target-shim: 5.0.1
         | 
|  | |
| 4149 |  | 
| 4150 | 
             
              acorn@8.14.0: {}
         | 
| 4151 |  | 
| 4152 | 
            +
              agent-base@7.1.3: {}
         | 
| 4153 | 
            +
             | 
| 4154 | 
             
              agentkeepalive@4.6.0:
         | 
| 4155 | 
             
                dependencies:
         | 
| 4156 | 
             
                  humanize-ms: 1.2.1
         | 
|  | |
| 4176 |  | 
| 4177 | 
             
              argparse@2.0.1: {}
         | 
| 4178 |  | 
| 4179 | 
            +
              aria-query@5.3.0:
         | 
| 4180 | 
            +
                dependencies:
         | 
| 4181 | 
            +
                  dequal: 2.0.3
         | 
| 4182 | 
            +
             | 
| 4183 | 
             
              aria-query@5.3.2: {}
         | 
| 4184 |  | 
| 4185 | 
             
              array-timsort@1.0.3: {}
         | 
| 4186 |  | 
| 4187 | 
            +
              assertion-error@2.0.1: {}
         | 
| 4188 | 
            +
             | 
| 4189 | 
             
              asynckit@0.4.0: {}
         | 
| 4190 |  | 
| 4191 | 
             
              axe-core@4.9.1: {}
         | 
|  | |
| 4202 | 
             
                  inherits: 2.0.4
         | 
| 4203 | 
             
                  readable-stream: 3.6.2
         | 
| 4204 |  | 
| 4205 | 
            +
              boolean@3.2.0: {}
         | 
| 4206 | 
            +
             | 
| 4207 | 
             
              brace-expansion@1.1.11:
         | 
| 4208 | 
             
                dependencies:
         | 
| 4209 | 
             
                  balanced-match: 1.0.2
         | 
|  | |
| 4222 | 
             
                  base64-js: 1.5.1
         | 
| 4223 | 
             
                  ieee754: 1.2.1
         | 
| 4224 |  | 
| 4225 | 
            +
              cac@6.7.14: {}
         | 
| 4226 | 
            +
             | 
| 4227 | 
             
              call-bind-apply-helpers@1.0.2:
         | 
| 4228 | 
             
                dependencies:
         | 
| 4229 | 
             
                  es-errors: 1.3.0
         | 
|  | |
| 4233 |  | 
| 4234 | 
             
              ccount@2.0.1: {}
         | 
| 4235 |  | 
| 4236 | 
            +
              chai@5.2.0:
         | 
| 4237 | 
            +
                dependencies:
         | 
| 4238 | 
            +
                  assertion-error: 2.0.1
         | 
| 4239 | 
            +
                  check-error: 2.1.1
         | 
| 4240 | 
            +
                  deep-eql: 5.0.2
         | 
| 4241 | 
            +
                  loupe: 3.1.3
         | 
| 4242 | 
            +
                  pathval: 2.0.0
         | 
| 4243 | 
            +
             | 
| 4244 | 
            +
              chalk@3.0.0:
         | 
| 4245 | 
            +
                dependencies:
         | 
| 4246 | 
            +
                  ansi-styles: 4.3.0
         | 
| 4247 | 
            +
                  supports-color: 7.2.0
         | 
| 4248 | 
            +
             | 
| 4249 | 
             
              chalk@4.1.2:
         | 
| 4250 | 
             
                dependencies:
         | 
| 4251 | 
             
                  ansi-styles: 4.3.0
         | 
|  | |
| 4257 |  | 
| 4258 | 
             
              chardet@0.7.0: {}
         | 
| 4259 |  | 
| 4260 | 
            +
              check-error@2.1.1: {}
         | 
| 4261 | 
            +
             | 
| 4262 | 
             
              chokidar@4.0.3:
         | 
| 4263 | 
             
                dependencies:
         | 
| 4264 | 
             
                  readdirp: 4.1.2
         | 
|  | |
| 4331 | 
             
                  shebang-command: 2.0.0
         | 
| 4332 | 
             
                  which: 2.0.2
         | 
| 4333 |  | 
| 4334 | 
            +
              css.escape@1.5.1: {}
         | 
| 4335 | 
            +
             | 
| 4336 | 
             
              cssesc@3.0.0: {}
         | 
| 4337 |  | 
| 4338 | 
            +
              cssstyle@4.3.1:
         | 
| 4339 | 
            +
                dependencies:
         | 
| 4340 | 
            +
                  '@asamuzakjp/css-color': 3.2.0
         | 
| 4341 | 
            +
                  rrweb-cssom: 0.8.0
         | 
| 4342 | 
            +
             | 
| 4343 | 
            +
              data-urls@5.0.0:
         | 
| 4344 | 
            +
                dependencies:
         | 
| 4345 | 
            +
                  whatwg-mimetype: 4.0.0
         | 
| 4346 | 
            +
                  whatwg-url: 14.2.0
         | 
| 4347 | 
            +
             | 
| 4348 | 
             
              debug@4.4.0:
         | 
| 4349 | 
             
                dependencies:
         | 
| 4350 | 
             
                  ms: 2.1.3
         | 
| 4351 |  | 
| 4352 | 
            +
              decimal.js@10.5.0: {}
         | 
| 4353 | 
            +
             | 
| 4354 | 
            +
              deep-eql@5.0.2: {}
         | 
| 4355 | 
            +
             | 
| 4356 | 
             
              deep-is@0.1.4: {}
         | 
| 4357 |  | 
| 4358 | 
             
              deepmerge@4.3.1: {}
         | 
|  | |
| 4361 | 
             
                dependencies:
         | 
| 4362 | 
             
                  clone: 1.0.4
         | 
| 4363 |  | 
| 4364 | 
            +
              define-data-property@1.1.4:
         | 
| 4365 | 
            +
                dependencies:
         | 
| 4366 | 
            +
                  es-define-property: 1.0.1
         | 
| 4367 | 
            +
                  es-errors: 1.3.0
         | 
| 4368 | 
            +
                  gopd: 1.2.0
         | 
| 4369 | 
            +
             | 
| 4370 | 
            +
              define-properties@1.2.1:
         | 
| 4371 | 
            +
                dependencies:
         | 
| 4372 | 
            +
                  define-data-property: 1.1.4
         | 
| 4373 | 
            +
                  has-property-descriptors: 1.0.2
         | 
| 4374 | 
            +
                  object-keys: 1.1.1
         | 
| 4375 | 
            +
             | 
| 4376 | 
             
              defu@6.1.4: {}
         | 
| 4377 |  | 
| 4378 | 
             
              delayed-stream@1.0.0: {}
         | 
|  | |
| 4381 |  | 
| 4382 | 
             
              detect-libc@1.0.3: {}
         | 
| 4383 |  | 
| 4384 | 
            +
              detect-libc@2.0.4: {}
         | 
| 4385 | 
            +
             | 
| 4386 | 
            +
              detect-node@2.1.0: {}
         | 
| 4387 |  | 
| 4388 | 
             
              devalue@5.1.1: {}
         | 
| 4389 |  | 
|  | |
| 4395 |  | 
| 4396 | 
             
              diff-sequences@29.6.3: {}
         | 
| 4397 |  | 
| 4398 | 
            +
              dom-accessibility-api@0.5.16: {}
         | 
| 4399 | 
            +
             | 
| 4400 | 
            +
              dom-accessibility-api@0.6.3: {}
         | 
| 4401 | 
            +
             | 
| 4402 | 
             
              dotenv@16.5.0: {}
         | 
| 4403 |  | 
| 4404 | 
             
              drange@1.1.1: {}
         | 
|  | |
| 4416 | 
             
                  graceful-fs: 4.2.11
         | 
| 4417 | 
             
                  tapable: 2.2.1
         | 
| 4418 |  | 
| 4419 | 
            +
              entities@6.0.0: {}
         | 
| 4420 | 
            +
             | 
| 4421 | 
             
              es-define-property@1.0.1: {}
         | 
| 4422 |  | 
| 4423 | 
             
              es-errors@1.3.0: {}
         | 
| 4424 |  | 
| 4425 | 
            +
              es-module-lexer@1.7.0: {}
         | 
| 4426 | 
            +
             | 
| 4427 | 
             
              es-object-atoms@1.1.1:
         | 
| 4428 | 
             
                dependencies:
         | 
| 4429 | 
             
                  es-errors: 1.3.0
         | 
|  | |
| 4435 | 
             
                  has-tostringtag: 1.0.2
         | 
| 4436 | 
             
                  hasown: 2.0.2
         | 
| 4437 |  | 
| 4438 | 
            +
              es6-error@4.1.1: {}
         | 
| 4439 | 
            +
             | 
| 4440 | 
             
              esbuild@0.21.5:
         | 
| 4441 | 
             
                optionalDependencies:
         | 
| 4442 | 
             
                  '@esbuild/aix-ppc64': 0.21.5
         | 
|  | |
| 4602 |  | 
| 4603 | 
             
              estree-walker@2.0.2: {}
         | 
| 4604 |  | 
| 4605 | 
            +
              estree-walker@3.0.3:
         | 
| 4606 | 
            +
                dependencies:
         | 
| 4607 | 
            +
                  '@types/estree': 1.0.6
         | 
| 4608 | 
            +
             | 
| 4609 | 
             
              esutils@2.0.3: {}
         | 
| 4610 |  | 
| 4611 | 
             
              event-target-shim@5.0.1: {}
         | 
| 4612 |  | 
| 4613 | 
            +
              expect-type@1.2.1: {}
         | 
| 4614 | 
            +
             | 
| 4615 | 
             
              exsolve@1.0.4: {}
         | 
| 4616 |  | 
| 4617 | 
             
              external-editor@3.1.0:
         | 
|  | |
| 4644 | 
             
                optionalDependencies:
         | 
| 4645 | 
             
                  picomatch: 4.0.2
         | 
| 4646 |  | 
| 4647 | 
            +
              fdir@6.4.4(picomatch@4.0.2):
         | 
| 4648 | 
            +
                optionalDependencies:
         | 
| 4649 | 
            +
                  picomatch: 4.0.2
         | 
| 4650 | 
            +
             | 
| 4651 | 
             
              figures@3.2.0:
         | 
| 4652 | 
             
                dependencies:
         | 
| 4653 | 
             
                  escape-string-regexp: 1.0.5
         | 
|  | |
| 4729 | 
             
                dependencies:
         | 
| 4730 | 
             
                  is-glob: 4.0.3
         | 
| 4731 |  | 
| 4732 | 
            +
              global-agent@3.0.0:
         | 
| 4733 | 
            +
                dependencies:
         | 
| 4734 | 
            +
                  boolean: 3.2.0
         | 
| 4735 | 
            +
                  es6-error: 4.1.1
         | 
| 4736 | 
            +
                  matcher: 3.0.0
         | 
| 4737 | 
            +
                  roarr: 2.15.4
         | 
| 4738 | 
            +
                  semver: 7.7.1
         | 
| 4739 | 
            +
                  serialize-error: 7.0.1
         | 
| 4740 | 
            +
             | 
| 4741 | 
             
              global-prefix@4.0.0:
         | 
| 4742 | 
             
                dependencies:
         | 
| 4743 | 
             
                  ini: 4.1.3
         | 
|  | |
| 4750 |  | 
| 4751 | 
             
              globals@16.0.0: {}
         | 
| 4752 |  | 
| 4753 | 
            +
              globalthis@1.0.4:
         | 
| 4754 | 
            +
                dependencies:
         | 
| 4755 | 
            +
                  define-properties: 1.2.1
         | 
| 4756 | 
            +
                  gopd: 1.2.0
         | 
| 4757 | 
            +
             | 
| 4758 | 
             
              gopd@1.2.0: {}
         | 
| 4759 |  | 
| 4760 | 
             
              graceful-fs@4.2.11: {}
         | 
|  | |
| 4767 |  | 
| 4768 | 
             
              has-own-prop@2.0.0: {}
         | 
| 4769 |  | 
| 4770 | 
            +
              has-property-descriptors@1.0.2:
         | 
| 4771 | 
            +
                dependencies:
         | 
| 4772 | 
            +
                  es-define-property: 1.0.1
         | 
| 4773 | 
            +
             | 
| 4774 | 
             
              has-symbols@1.1.0: {}
         | 
| 4775 |  | 
| 4776 | 
             
              has-tostringtag@1.0.2:
         | 
|  | |
| 4801 |  | 
| 4802 | 
             
              highlight.js@11.11.1: {}
         | 
| 4803 |  | 
| 4804 | 
            +
              html-encoding-sniffer@4.0.0:
         | 
| 4805 | 
            +
                dependencies:
         | 
| 4806 | 
            +
                  whatwg-encoding: 3.1.1
         | 
| 4807 | 
            +
             | 
| 4808 | 
             
              html-void-elements@3.0.0: {}
         | 
| 4809 |  | 
| 4810 | 
            +
              http-proxy-agent@7.0.2:
         | 
| 4811 | 
            +
                dependencies:
         | 
| 4812 | 
            +
                  agent-base: 7.1.3
         | 
| 4813 | 
            +
                  debug: 4.4.0
         | 
| 4814 | 
            +
                transitivePeerDependencies:
         | 
| 4815 | 
            +
                  - supports-color
         | 
| 4816 | 
            +
             | 
| 4817 | 
            +
              https-proxy-agent@7.0.6:
         | 
| 4818 | 
            +
                dependencies:
         | 
| 4819 | 
            +
                  agent-base: 7.1.3
         | 
| 4820 | 
            +
                  debug: 4.4.0
         | 
| 4821 | 
            +
                transitivePeerDependencies:
         | 
| 4822 | 
            +
                  - supports-color
         | 
| 4823 | 
            +
             | 
| 4824 | 
             
              humanize-ms@1.2.1:
         | 
| 4825 | 
             
                dependencies:
         | 
| 4826 | 
             
                  ms: 2.1.3
         | 
|  | |
| 4829 | 
             
                dependencies:
         | 
| 4830 | 
             
                  safer-buffer: 2.1.2
         | 
| 4831 |  | 
| 4832 | 
            +
              iconv-lite@0.6.3:
         | 
| 4833 | 
            +
                dependencies:
         | 
| 4834 | 
            +
                  safer-buffer: 2.1.2
         | 
| 4835 | 
            +
             | 
| 4836 | 
             
              ieee754@1.2.1: {}
         | 
| 4837 |  | 
| 4838 | 
             
              ignore@5.3.2: {}
         | 
|  | |
| 4846 |  | 
| 4847 | 
             
              imurmurhash@0.1.4: {}
         | 
| 4848 |  | 
| 4849 | 
            +
              indent-string@4.0.0: {}
         | 
| 4850 | 
            +
             | 
| 4851 | 
             
              inherits@2.0.4: {}
         | 
| 4852 |  | 
| 4853 | 
             
              ini@4.1.3: {}
         | 
|  | |
| 4890 |  | 
| 4891 | 
             
              is-number@7.0.0: {}
         | 
| 4892 |  | 
| 4893 | 
            +
              is-potential-custom-element-name@1.0.1: {}
         | 
| 4894 | 
            +
             | 
| 4895 | 
             
              is-reference@1.2.1:
         | 
| 4896 | 
             
                dependencies:
         | 
| 4897 | 
             
                  '@types/estree': 1.0.6
         | 
|  | |
| 4931 |  | 
| 4932 | 
             
              jiti@2.4.2: {}
         | 
| 4933 |  | 
| 4934 | 
            +
              js-tokens@4.0.0: {}
         | 
| 4935 | 
            +
             | 
| 4936 | 
             
              js-yaml@4.1.0:
         | 
| 4937 | 
             
                dependencies:
         | 
| 4938 | 
             
                  argparse: 2.0.1
         | 
| 4939 |  | 
| 4940 | 
            +
              jsdom@26.1.0:
         | 
| 4941 | 
            +
                dependencies:
         | 
| 4942 | 
            +
                  cssstyle: 4.3.1
         | 
| 4943 | 
            +
                  data-urls: 5.0.0
         | 
| 4944 | 
            +
                  decimal.js: 10.5.0
         | 
| 4945 | 
            +
                  html-encoding-sniffer: 4.0.0
         | 
| 4946 | 
            +
                  http-proxy-agent: 7.0.2
         | 
| 4947 | 
            +
                  https-proxy-agent: 7.0.6
         | 
| 4948 | 
            +
                  is-potential-custom-element-name: 1.0.1
         | 
| 4949 | 
            +
                  nwsapi: 2.2.20
         | 
| 4950 | 
            +
                  parse5: 7.3.0
         | 
| 4951 | 
            +
                  rrweb-cssom: 0.8.0
         | 
| 4952 | 
            +
                  saxes: 6.0.0
         | 
| 4953 | 
            +
                  symbol-tree: 3.2.4
         | 
| 4954 | 
            +
                  tough-cookie: 5.1.2
         | 
| 4955 | 
            +
                  w3c-xmlserializer: 5.0.0
         | 
| 4956 | 
            +
                  webidl-conversions: 7.0.0
         | 
| 4957 | 
            +
                  whatwg-encoding: 3.1.1
         | 
| 4958 | 
            +
                  whatwg-mimetype: 4.0.0
         | 
| 4959 | 
            +
                  whatwg-url: 14.2.0
         | 
| 4960 | 
            +
                  ws: 8.18.2
         | 
| 4961 | 
            +
                  xml-name-validator: 5.0.0
         | 
| 4962 | 
            +
                transitivePeerDependencies:
         | 
| 4963 | 
            +
                  - bufferutil
         | 
| 4964 | 
            +
                  - supports-color
         | 
| 4965 | 
            +
                  - utf-8-validate
         | 
| 4966 | 
            +
             | 
| 4967 | 
             
              json-buffer@3.0.1: {}
         | 
| 4968 |  | 
| 4969 | 
             
              json-schema-traverse@0.4.1: {}
         | 
| 4970 |  | 
| 4971 | 
             
              json-stable-stringify-without-jsonify@1.0.1: {}
         | 
| 4972 |  | 
| 4973 | 
            +
              json-stringify-safe@5.0.1: {}
         | 
| 4974 | 
            +
             | 
| 4975 | 
             
              keyv@4.5.4:
         | 
| 4976 | 
             
                dependencies:
         | 
| 4977 | 
             
                  json-buffer: 3.0.1
         | 
|  | |
| 5063 |  | 
| 5064 | 
             
              long@5.3.1: {}
         | 
| 5065 |  | 
| 5066 | 
            +
              loupe@3.1.3: {}
         | 
| 5067 | 
            +
             | 
| 5068 | 
            +
              lru-cache@10.4.3: {}
         | 
| 5069 | 
            +
             | 
| 5070 | 
            +
              lz-string@1.5.0: {}
         | 
| 5071 | 
            +
             | 
| 5072 | 
             
              magic-string@0.30.17:
         | 
| 5073 | 
             
                dependencies:
         | 
| 5074 | 
             
                  '@jridgewell/sourcemap-codec': 1.5.0
         | 
| 5075 |  | 
| 5076 | 
            +
              matcher@3.0.0:
         | 
| 5077 | 
            +
                dependencies:
         | 
| 5078 | 
            +
                  escape-string-regexp: 4.0.0
         | 
| 5079 | 
            +
             | 
| 5080 | 
             
              math-intrinsics@1.1.0: {}
         | 
| 5081 |  | 
| 5082 | 
             
              mdast-util-to-hast@13.2.0:
         | 
|  | |
| 5132 |  | 
| 5133 | 
             
              mimic-fn@2.1.0: {}
         | 
| 5134 |  | 
| 5135 | 
            +
              min-indent@1.0.1: {}
         | 
| 5136 | 
            +
             | 
| 5137 | 
             
              minimatch@3.1.2:
         | 
| 5138 | 
             
                dependencies:
         | 
| 5139 | 
             
                  brace-expansion: 1.1.11
         | 
|  | |
| 5179 | 
             
                dependencies:
         | 
| 5180 | 
             
                  whatwg-url: 5.0.0
         | 
| 5181 |  | 
| 5182 | 
            +
              nwsapi@2.2.20: {}
         | 
| 5183 | 
            +
             | 
| 5184 | 
            +
              object-keys@1.1.1: {}
         | 
| 5185 | 
            +
             | 
| 5186 | 
             
              onetime@5.1.2:
         | 
| 5187 | 
             
                dependencies:
         | 
| 5188 | 
             
                  mimic-fn: 2.1.0
         | 
|  | |
| 5195 | 
             
                  regex: 6.0.1
         | 
| 5196 | 
             
                  regex-recursion: 6.0.2
         | 
| 5197 |  | 
| 5198 | 
            +
              onnxruntime-common@1.21.0: {}
         | 
| 5199 |  | 
| 5200 | 
            +
              onnxruntime-common@1.22.0-dev.20250409-89f8206ba4: {}
         | 
| 5201 |  | 
| 5202 | 
            +
              onnxruntime-node@1.21.0:
         | 
| 5203 | 
             
                dependencies:
         | 
| 5204 | 
            +
                  global-agent: 3.0.0
         | 
| 5205 | 
            +
                  onnxruntime-common: 1.21.0
         | 
| 5206 | 
             
                  tar: 7.4.3
         | 
| 5207 |  | 
| 5208 | 
            +
              onnxruntime-web@1.22.0-dev.20250409-89f8206ba4:
         | 
| 5209 | 
             
                dependencies:
         | 
| 5210 | 
             
                  flatbuffers: 25.2.10
         | 
| 5211 | 
             
                  guid-typescript: 1.0.9
         | 
| 5212 | 
             
                  long: 5.3.1
         | 
| 5213 | 
            +
                  onnxruntime-common: 1.22.0-dev.20250409-89f8206ba4
         | 
| 5214 | 
             
                  platform: 1.3.6
         | 
| 5215 | 
             
                  protobufjs: 7.4.0
         | 
| 5216 |  | 
| 5217 | 
            +
              openai@4.90.0(ws@8.18.2):
         | 
| 5218 | 
             
                dependencies:
         | 
| 5219 | 
             
                  '@types/node': 18.19.84
         | 
| 5220 | 
             
                  '@types/node-fetch': 2.6.12
         | 
|  | |
| 5223 | 
             
                  form-data-encoder: 1.7.2
         | 
| 5224 | 
             
                  formdata-node: 4.4.1
         | 
| 5225 | 
             
                  node-fetch: 2.7.0
         | 
| 5226 | 
            +
                optionalDependencies:
         | 
| 5227 | 
            +
                  ws: 8.18.2
         | 
| 5228 | 
             
                transitivePeerDependencies:
         | 
| 5229 | 
             
                  - encoding
         | 
| 5230 |  | 
|  | |
| 5275 | 
             
                dependencies:
         | 
| 5276 | 
             
                  callsites: 3.1.0
         | 
| 5277 |  | 
| 5278 | 
            +
              parse5@7.3.0:
         | 
| 5279 | 
            +
                dependencies:
         | 
| 5280 | 
            +
                  entities: 6.0.0
         | 
| 5281 | 
            +
             | 
| 5282 | 
             
              path-exists@4.0.0: {}
         | 
| 5283 |  | 
| 5284 | 
             
              path-exists@5.0.0: {}
         | 
|  | |
| 5291 |  | 
| 5292 | 
             
              pathe@2.0.3: {}
         | 
| 5293 |  | 
| 5294 | 
            +
              pathval@2.0.0: {}
         | 
| 5295 | 
            +
             | 
| 5296 | 
             
              picocolors@1.1.1: {}
         | 
| 5297 |  | 
| 5298 | 
             
              picomatch@2.3.1: {}
         | 
|  | |
| 5362 |  | 
| 5363 | 
             
              prettier@3.5.3: {}
         | 
| 5364 |  | 
| 5365 | 
            +
              pretty-format@27.5.1:
         | 
| 5366 | 
            +
                dependencies:
         | 
| 5367 | 
            +
                  ansi-regex: 5.0.1
         | 
| 5368 | 
            +
                  ansi-styles: 5.2.0
         | 
| 5369 | 
            +
                  react-is: 17.0.2
         | 
| 5370 | 
            +
             | 
| 5371 | 
             
              pretty-format@29.7.0:
         | 
| 5372 | 
             
                dependencies:
         | 
| 5373 | 
             
                  '@jest/schemas': 29.6.3
         | 
|  | |
| 5402 | 
             
                  drange: 1.1.1
         | 
| 5403 | 
             
                  ret: 0.2.2
         | 
| 5404 |  | 
| 5405 | 
            +
              react-is@17.0.2: {}
         | 
| 5406 | 
            +
             | 
| 5407 | 
             
              react-is@18.3.1: {}
         | 
| 5408 |  | 
| 5409 | 
             
              readable-stream@3.6.2:
         | 
|  | |
| 5414 |  | 
| 5415 | 
             
              readdirp@4.1.2: {}
         | 
| 5416 |  | 
| 5417 | 
            +
              redent@3.0.0:
         | 
| 5418 | 
            +
                dependencies:
         | 
| 5419 | 
            +
                  indent-string: 4.0.0
         | 
| 5420 | 
            +
                  strip-indent: 3.0.0
         | 
| 5421 | 
            +
             | 
| 5422 | 
             
              reflect-metadata@0.1.14: {}
         | 
| 5423 |  | 
| 5424 | 
             
              regex-recursion@6.0.2:
         | 
|  | |
| 5457 |  | 
| 5458 | 
             
              reusify@1.1.0: {}
         | 
| 5459 |  | 
| 5460 | 
            +
              roarr@2.15.4:
         | 
| 5461 | 
            +
                dependencies:
         | 
| 5462 | 
            +
                  boolean: 3.2.0
         | 
| 5463 | 
            +
                  detect-node: 2.1.0
         | 
| 5464 | 
            +
                  globalthis: 1.0.4
         | 
| 5465 | 
            +
                  json-stringify-safe: 5.0.1
         | 
| 5466 | 
            +
                  semver-compare: 1.0.0
         | 
| 5467 | 
            +
                  sprintf-js: 1.1.3
         | 
| 5468 | 
            +
             | 
| 5469 | 
             
              rollup@4.34.9:
         | 
| 5470 | 
             
                dependencies:
         | 
| 5471 | 
             
                  '@types/estree': 1.0.6
         | 
|  | |
| 5491 | 
             
                  '@rollup/rollup-win32-x64-msvc': 4.34.9
         | 
| 5492 | 
             
                  fsevents: 2.3.3
         | 
| 5493 |  | 
| 5494 | 
            +
              rrweb-cssom@0.8.0: {}
         | 
| 5495 | 
            +
             | 
| 5496 | 
             
              run-async@2.4.1: {}
         | 
| 5497 |  | 
| 5498 | 
             
              run-parallel@1.2.0:
         | 
|  | |
| 5521 |  | 
| 5522 | 
             
              safer-buffer@2.1.2: {}
         | 
| 5523 |  | 
| 5524 | 
            +
              saxes@6.0.0:
         | 
| 5525 | 
            +
                dependencies:
         | 
| 5526 | 
            +
                  xmlchars: 2.2.0
         | 
| 5527 | 
            +
             | 
| 5528 | 
            +
              semver-compare@1.0.0: {}
         | 
| 5529 | 
            +
             | 
| 5530 | 
             
              semver@7.7.1: {}
         | 
| 5531 |  | 
| 5532 | 
            +
              semver@7.7.2: {}
         | 
| 5533 | 
            +
             | 
| 5534 | 
            +
              serialize-error@7.0.1:
         | 
| 5535 | 
            +
                dependencies:
         | 
| 5536 | 
            +
                  type-fest: 0.13.1
         | 
| 5537 | 
            +
             | 
| 5538 | 
             
              set-cookie-parser@2.7.1: {}
         | 
| 5539 |  | 
| 5540 | 
            +
              sharp@0.34.2:
         | 
| 5541 | 
             
                dependencies:
         | 
| 5542 | 
             
                  color: 4.2.3
         | 
| 5543 | 
            +
                  detect-libc: 2.0.4
         | 
| 5544 | 
            +
                  semver: 7.7.2
         | 
| 5545 | 
             
                optionalDependencies:
         | 
| 5546 | 
            +
                  '@img/sharp-darwin-arm64': 0.34.2
         | 
| 5547 | 
            +
                  '@img/sharp-darwin-x64': 0.34.2
         | 
| 5548 | 
            +
                  '@img/sharp-libvips-darwin-arm64': 1.1.0
         | 
| 5549 | 
            +
                  '@img/sharp-libvips-darwin-x64': 1.1.0
         | 
| 5550 | 
            +
                  '@img/sharp-libvips-linux-arm': 1.1.0
         | 
| 5551 | 
            +
                  '@img/sharp-libvips-linux-arm64': 1.1.0
         | 
| 5552 | 
            +
                  '@img/sharp-libvips-linux-ppc64': 1.1.0
         | 
| 5553 | 
            +
                  '@img/sharp-libvips-linux-s390x': 1.1.0
         | 
| 5554 | 
            +
                  '@img/sharp-libvips-linux-x64': 1.1.0
         | 
| 5555 | 
            +
                  '@img/sharp-libvips-linuxmusl-arm64': 1.1.0
         | 
| 5556 | 
            +
                  '@img/sharp-libvips-linuxmusl-x64': 1.1.0
         | 
| 5557 | 
            +
                  '@img/sharp-linux-arm': 0.34.2
         | 
| 5558 | 
            +
                  '@img/sharp-linux-arm64': 0.34.2
         | 
| 5559 | 
            +
                  '@img/sharp-linux-s390x': 0.34.2
         | 
| 5560 | 
            +
                  '@img/sharp-linux-x64': 0.34.2
         | 
| 5561 | 
            +
                  '@img/sharp-linuxmusl-arm64': 0.34.2
         | 
| 5562 | 
            +
                  '@img/sharp-linuxmusl-x64': 0.34.2
         | 
| 5563 | 
            +
                  '@img/sharp-wasm32': 0.34.2
         | 
| 5564 | 
            +
                  '@img/sharp-win32-arm64': 0.34.2
         | 
| 5565 | 
            +
                  '@img/sharp-win32-ia32': 0.34.2
         | 
| 5566 | 
            +
                  '@img/sharp-win32-x64': 0.34.2
         | 
| 5567 |  | 
| 5568 | 
             
              shebang-command@2.0.0:
         | 
| 5569 | 
             
                dependencies:
         | 
|  | |
| 5582 | 
             
                  '@shikijs/vscode-textmate': 10.0.2
         | 
| 5583 | 
             
                  '@types/hast': 3.0.4
         | 
| 5584 |  | 
| 5585 | 
            +
              siginfo@2.0.0: {}
         | 
| 5586 | 
            +
             | 
| 5587 | 
             
              signal-exit@3.0.7: {}
         | 
| 5588 |  | 
| 5589 | 
             
              simple-swizzle@0.2.2:
         | 
|  | |
| 5600 |  | 
| 5601 | 
             
              space-separated-tokens@2.0.2: {}
         | 
| 5602 |  | 
| 5603 | 
            +
              sprintf-js@1.1.3: {}
         | 
| 5604 | 
            +
             | 
| 5605 | 
            +
              stackback@0.0.2: {}
         | 
| 5606 | 
            +
             | 
| 5607 | 
            +
              std-env@3.9.0: {}
         | 
| 5608 | 
            +
             | 
| 5609 | 
             
              string-width@4.2.3:
         | 
| 5610 | 
             
                dependencies:
         | 
| 5611 | 
             
                  emoji-regex: 8.0.0
         | 
|  | |
| 5625 | 
             
                dependencies:
         | 
| 5626 | 
             
                  ansi-regex: 5.0.1
         | 
| 5627 |  | 
| 5628 | 
            +
              strip-indent@3.0.0:
         | 
| 5629 | 
            +
                dependencies:
         | 
| 5630 | 
            +
                  min-indent: 1.0.1
         | 
| 5631 | 
            +
             | 
| 5632 | 
             
              strip-json-comments@3.1.1: {}
         | 
| 5633 |  | 
| 5634 | 
             
              supports-color@7.2.0:
         | 
|  | |
| 5677 | 
             
                  magic-string: 0.30.17
         | 
| 5678 | 
             
                  zimmerframe: 1.1.2
         | 
| 5679 |  | 
| 5680 | 
            +
              symbol-tree@3.2.4: {}
         | 
| 5681 | 
            +
             | 
| 5682 | 
             
              synckit@0.9.2:
         | 
| 5683 | 
             
                dependencies:
         | 
| 5684 | 
             
                  '@pkgr/core': 0.1.1
         | 
|  | |
| 5701 |  | 
| 5702 | 
             
              through@2.3.8: {}
         | 
| 5703 |  | 
| 5704 | 
            +
              tinybench@2.9.0: {}
         | 
| 5705 | 
            +
             | 
| 5706 | 
             
              tinyexec@0.3.2: {}
         | 
| 5707 |  | 
| 5708 | 
            +
              tinyglobby@0.2.13:
         | 
| 5709 | 
            +
                dependencies:
         | 
| 5710 | 
            +
                  fdir: 6.4.4(picomatch@4.0.2)
         | 
| 5711 | 
            +
                  picomatch: 4.0.2
         | 
| 5712 | 
            +
             | 
| 5713 | 
            +
              tinypool@1.0.2: {}
         | 
| 5714 | 
            +
             | 
| 5715 | 
            +
              tinyrainbow@2.0.0: {}
         | 
| 5716 | 
            +
             | 
| 5717 | 
            +
              tinyspy@3.0.2: {}
         | 
| 5718 | 
            +
             | 
| 5719 | 
            +
              tldts-core@6.1.86: {}
         | 
| 5720 | 
            +
             | 
| 5721 | 
            +
              tldts@6.1.86:
         | 
| 5722 | 
            +
                dependencies:
         | 
| 5723 | 
            +
                  tldts-core: 6.1.86
         | 
| 5724 | 
            +
             | 
| 5725 | 
             
              tmp@0.0.33:
         | 
| 5726 | 
             
                dependencies:
         | 
| 5727 | 
             
                  os-tmpdir: 1.0.2
         | 
|  | |
| 5732 |  | 
| 5733 | 
             
              totalist@3.0.1: {}
         | 
| 5734 |  | 
| 5735 | 
            +
              tough-cookie@5.1.2:
         | 
| 5736 | 
            +
                dependencies:
         | 
| 5737 | 
            +
                  tldts: 6.1.86
         | 
| 5738 | 
            +
             | 
| 5739 | 
             
              tr46@0.0.3: {}
         | 
| 5740 |  | 
| 5741 | 
            +
              tr46@5.1.1:
         | 
| 5742 | 
            +
                dependencies:
         | 
| 5743 | 
            +
                  punycode: 2.3.1
         | 
| 5744 | 
            +
             | 
| 5745 | 
             
              trim-lines@3.0.1: {}
         | 
| 5746 |  | 
| 5747 | 
             
              ts-api-utils@2.0.1(typescript@5.8.2):
         | 
|  | |
| 5763 | 
             
                dependencies:
         | 
| 5764 | 
             
                  prelude-ls: 1.2.1
         | 
| 5765 |  | 
| 5766 | 
            +
              type-fest@0.13.1: {}
         | 
| 5767 | 
            +
             | 
| 5768 | 
             
              type-fest@0.21.3: {}
         | 
| 5769 |  | 
| 5770 | 
             
              type-fest@4.37.0: {}
         | 
|  | |
| 5872 | 
             
                  '@types/unist': 3.0.3
         | 
| 5873 | 
             
                  vfile-message: 4.0.2
         | 
| 5874 |  | 
| 5875 | 
            +
              vite-node@3.1.4(@types/node@22.14.1)(lightningcss@1.29.1):
         | 
| 5876 | 
            +
                dependencies:
         | 
| 5877 | 
            +
                  cac: 6.7.14
         | 
| 5878 | 
            +
                  debug: 4.4.0
         | 
| 5879 | 
            +
                  es-module-lexer: 1.7.0
         | 
| 5880 | 
            +
                  pathe: 2.0.3
         | 
| 5881 | 
            +
                  vite: 5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)
         | 
| 5882 | 
            +
                transitivePeerDependencies:
         | 
| 5883 | 
            +
                  - '@types/node'
         | 
| 5884 | 
            +
                  - less
         | 
| 5885 | 
            +
                  - lightningcss
         | 
| 5886 | 
            +
                  - sass
         | 
| 5887 | 
            +
                  - sass-embedded
         | 
| 5888 | 
            +
                  - stylus
         | 
| 5889 | 
            +
                  - sugarss
         | 
| 5890 | 
            +
                  - supports-color
         | 
| 5891 | 
            +
                  - terser
         | 
| 5892 | 
            +
             | 
| 5893 | 
             
              vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1):
         | 
| 5894 | 
             
                dependencies:
         | 
| 5895 | 
             
                  esbuild: 0.21.5
         | 
|  | |
| 5916 | 
             
                optionalDependencies:
         | 
| 5917 | 
             
                  vite: 5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)
         | 
| 5918 |  | 
| 5919 | 
            +
              vitest@3.1.4(@types/node@22.14.1)(jsdom@26.1.0)(lightningcss@1.29.1):
         | 
| 5920 | 
            +
                dependencies:
         | 
| 5921 | 
            +
                  '@vitest/expect': 3.1.4
         | 
| 5922 | 
            +
                  '@vitest/mocker': 3.1.4(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1))
         | 
| 5923 | 
            +
                  '@vitest/pretty-format': 3.1.4
         | 
| 5924 | 
            +
                  '@vitest/runner': 3.1.4
         | 
| 5925 | 
            +
                  '@vitest/snapshot': 3.1.4
         | 
| 5926 | 
            +
                  '@vitest/spy': 3.1.4
         | 
| 5927 | 
            +
                  '@vitest/utils': 3.1.4
         | 
| 5928 | 
            +
                  chai: 5.2.0
         | 
| 5929 | 
            +
                  debug: 4.4.0
         | 
| 5930 | 
            +
                  expect-type: 1.2.1
         | 
| 5931 | 
            +
                  magic-string: 0.30.17
         | 
| 5932 | 
            +
                  pathe: 2.0.3
         | 
| 5933 | 
            +
                  std-env: 3.9.0
         | 
| 5934 | 
            +
                  tinybench: 2.9.0
         | 
| 5935 | 
            +
                  tinyexec: 0.3.2
         | 
| 5936 | 
            +
                  tinyglobby: 0.2.13
         | 
| 5937 | 
            +
                  tinypool: 1.0.2
         | 
| 5938 | 
            +
                  tinyrainbow: 2.0.0
         | 
| 5939 | 
            +
                  vite: 5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)
         | 
| 5940 | 
            +
                  vite-node: 3.1.4(@types/node@22.14.1)(lightningcss@1.29.1)
         | 
| 5941 | 
            +
                  why-is-node-running: 2.3.0
         | 
| 5942 | 
            +
                optionalDependencies:
         | 
| 5943 | 
            +
                  '@types/node': 22.14.1
         | 
| 5944 | 
            +
                  jsdom: 26.1.0
         | 
| 5945 | 
            +
                transitivePeerDependencies:
         | 
| 5946 | 
            +
                  - less
         | 
| 5947 | 
            +
                  - lightningcss
         | 
| 5948 | 
            +
                  - msw
         | 
| 5949 | 
            +
                  - sass
         | 
| 5950 | 
            +
                  - sass-embedded
         | 
| 5951 | 
            +
                  - stylus
         | 
| 5952 | 
            +
                  - sugarss
         | 
| 5953 | 
            +
                  - supports-color
         | 
| 5954 | 
            +
                  - terser
         | 
| 5955 | 
            +
             | 
| 5956 | 
            +
              w3c-xmlserializer@5.0.0:
         | 
| 5957 | 
            +
                dependencies:
         | 
| 5958 | 
            +
                  xml-name-validator: 5.0.0
         | 
| 5959 | 
            +
             | 
| 5960 | 
             
              wcwidth@1.0.1:
         | 
| 5961 | 
             
                dependencies:
         | 
| 5962 | 
             
                  defaults: 1.0.4
         | 
|  | |
| 5965 |  | 
| 5966 | 
             
              webidl-conversions@3.0.1: {}
         | 
| 5967 |  | 
| 5968 | 
            +
              webidl-conversions@7.0.0: {}
         | 
| 5969 | 
            +
             | 
| 5970 | 
             
              webpack-virtual-modules@0.6.2: {}
         | 
| 5971 |  | 
| 5972 | 
            +
              whatwg-encoding@3.1.1:
         | 
| 5973 | 
            +
                dependencies:
         | 
| 5974 | 
            +
                  iconv-lite: 0.6.3
         | 
| 5975 | 
            +
             | 
| 5976 | 
            +
              whatwg-mimetype@4.0.0: {}
         | 
| 5977 | 
            +
             | 
| 5978 | 
            +
              whatwg-url@14.2.0:
         | 
| 5979 | 
            +
                dependencies:
         | 
| 5980 | 
            +
                  tr46: 5.1.1
         | 
| 5981 | 
            +
                  webidl-conversions: 7.0.0
         | 
| 5982 | 
            +
             | 
| 5983 | 
             
              whatwg-url@5.0.0:
         | 
| 5984 | 
             
                dependencies:
         | 
| 5985 | 
             
                  tr46: 0.0.3
         | 
|  | |
| 5993 | 
             
                dependencies:
         | 
| 5994 | 
             
                  isexe: 3.1.1
         | 
| 5995 |  | 
| 5996 | 
            +
              why-is-node-running@2.3.0:
         | 
| 5997 | 
            +
                dependencies:
         | 
| 5998 | 
            +
                  siginfo: 2.0.0
         | 
| 5999 | 
            +
                  stackback: 0.0.2
         | 
| 6000 | 
            +
             | 
| 6001 | 
             
              word-wrap@1.2.5: {}
         | 
| 6002 |  | 
| 6003 | 
             
              wrap-ansi@6.2.0:
         | 
|  | |
| 6006 | 
             
                  string-width: 4.2.3
         | 
| 6007 | 
             
                  strip-ansi: 6.0.1
         | 
| 6008 |  | 
| 6009 | 
            +
              ws@8.18.2: {}
         | 
| 6010 | 
            +
             | 
| 6011 | 
            +
              xml-name-validator@5.0.0: {}
         | 
| 6012 | 
            +
             | 
| 6013 | 
            +
              xmlchars@2.2.0: {}
         | 
| 6014 | 
            +
             | 
| 6015 | 
             
              yallist@5.0.0: {}
         | 
| 6016 |  | 
| 6017 | 
             
              yaml@1.10.2: {}
         | 
    	
        src/lib/components/inference-playground/code-snippets.svelte
    CHANGED
    
    | @@ -1,10 +1,10 @@ | |
| 1 | 
             
            <script lang="ts">
         | 
| 2 | 
            -
            	import {  | 
|  | |
| 3 | 
             
            	import { token } from "$lib/state/token.svelte.js";
         | 
| 4 | 
            -
            	import { isCustomModel | 
| 5 | 
             
            	import { copyToClipboard } from "$lib/utils/copy.js";
         | 
| 6 | 
             
            	import { entries, fromEntries, keys } from "$lib/utils/object.svelte.js";
         | 
| 7 | 
            -
            	import type { InferenceProvider } from "@huggingface/inference";
         | 
| 8 | 
             
            	import hljs from "highlight.js/lib/core";
         | 
| 9 | 
             
            	import http from "highlight.js/lib/languages/http";
         | 
| 10 | 
             
            	import javascript from "highlight.js/lib/languages/javascript";
         | 
| @@ -17,7 +17,6 @@ | |
| 17 | 
             
            		type GetInferenceSnippetReturn,
         | 
| 18 | 
             
            		type InferenceSnippetLanguage,
         | 
| 19 | 
             
            	} from "./utils.svelte.js";
         | 
| 20 | 
            -
            	import { structuredForbiddenProviders } from "$lib/state/models.svelte";
         | 
| 21 |  | 
| 22 | 
             
            	hljs.registerLanguage("javascript", javascript);
         | 
| 23 | 
             
            	hljs.registerLanguage("python", python);
         | 
| @@ -62,21 +61,9 @@ | |
| 62 | 
             
            		}
         | 
| 63 |  | 
| 64 | 
             
            		if (isCustomModel(model)) {
         | 
| 65 | 
            -
            			const snippets = getInferenceSnippet(
         | 
| 66 | 
            -
            				{
         | 
| 67 | 
            -
            					...emptyModel,
         | 
| 68 | 
            -
            					_id: model._id,
         | 
| 69 | 
            -
            					id: model.id,
         | 
| 70 | 
            -
            					pipeline_tag: PipelineTag.TextGeneration,
         | 
| 71 | 
            -
            					tags: ["conversational"],
         | 
| 72 | 
            -
            				},
         | 
| 73 | 
            -
            				"hf-inference",
         | 
| 74 | 
            -
            				lang,
         | 
| 75 | 
            -
            				tokenStr,
         | 
| 76 | 
            -
            				opts
         | 
| 77 | 
            -
            			);
         | 
| 78 | 
             
            			return snippets
         | 
| 79 | 
            -
            				.filter(s => s.client.startsWith("open") || lang === " | 
| 80 | 
             
            				.map(s => {
         | 
| 81 | 
             
            					return {
         | 
| 82 | 
             
            						...s,
         | 
| @@ -87,7 +74,7 @@ | |
| 87 | 
             
            				});
         | 
| 88 | 
             
            		}
         | 
| 89 |  | 
| 90 | 
            -
            		return getInferenceSnippet( | 
| 91 | 
             
            	}
         | 
| 92 |  | 
| 93 | 
             
            	// { javascript: 0, python: 0, http: 0 } at first
         | 
| @@ -107,7 +94,7 @@ | |
| 107 |  | 
| 108 | 
             
            	function highlight(code?: string, language?: InferenceSnippetLanguage) {
         | 
| 109 | 
             
            		if (!code || !language) return "";
         | 
| 110 | 
            -
            		return hljs.highlight(code, { language: language === " | 
| 111 | 
             
            	}
         | 
| 112 |  | 
| 113 | 
             
            	const tokenStr = $derived.by(() => {
         | 
| @@ -123,7 +110,7 @@ | |
| 123 | 
             
            	const snippetsByLang = $derived({
         | 
| 124 | 
             
            		javascript: getSnippet({ lang: "js", tokenStr, conversation }),
         | 
| 125 | 
             
            		python: getSnippet({ lang: "python", tokenStr, conversation }),
         | 
| 126 | 
            -
            		http: getSnippet({ lang: " | 
| 127 | 
             
            	} as Record<Language, GetInferenceSnippetReturn>);
         | 
| 128 |  | 
| 129 | 
             
            	const selectedSnippet = $derived(snippetsByLang[lang][selectedSnippetIdxByLang[lang]]);
         | 
|  | |
| 1 | 
             
            <script lang="ts">
         | 
| 2 | 
            +
            	import { type ConversationClass } from "$lib/state/conversations.svelte";
         | 
| 3 | 
            +
            	import { structuredForbiddenProviders } from "$lib/state/models.svelte";
         | 
| 4 | 
             
            	import { token } from "$lib/state/token.svelte.js";
         | 
| 5 | 
            +
            	import { isCustomModel } from "$lib/types.js";
         | 
| 6 | 
             
            	import { copyToClipboard } from "$lib/utils/copy.js";
         | 
| 7 | 
             
            	import { entries, fromEntries, keys } from "$lib/utils/object.svelte.js";
         | 
|  | |
| 8 | 
             
            	import hljs from "highlight.js/lib/core";
         | 
| 9 | 
             
            	import http from "highlight.js/lib/languages/http";
         | 
| 10 | 
             
            	import javascript from "highlight.js/lib/languages/javascript";
         | 
|  | |
| 17 | 
             
            		type GetInferenceSnippetReturn,
         | 
| 18 | 
             
            		type InferenceSnippetLanguage,
         | 
| 19 | 
             
            	} from "./utils.svelte.js";
         | 
|  | |
| 20 |  | 
| 21 | 
             
            	hljs.registerLanguage("javascript", javascript);
         | 
| 22 | 
             
            	hljs.registerLanguage("python", python);
         | 
|  | |
| 61 | 
             
            		}
         | 
| 62 |  | 
| 63 | 
             
            		if (isCustomModel(model)) {
         | 
| 64 | 
            +
            			const snippets = getInferenceSnippet(conversation, lang, tokenStr, opts);
         | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 65 | 
             
            			return snippets
         | 
| 66 | 
            +
            				.filter(s => s.client.startsWith("open") || lang === "sh")
         | 
| 67 | 
             
            				.map(s => {
         | 
| 68 | 
             
            					return {
         | 
| 69 | 
             
            						...s,
         | 
|  | |
| 74 | 
             
            				});
         | 
| 75 | 
             
            		}
         | 
| 76 |  | 
| 77 | 
            +
            		return getInferenceSnippet(conversation, lang, tokenStr, opts);
         | 
| 78 | 
             
            	}
         | 
| 79 |  | 
| 80 | 
             
            	// { javascript: 0, python: 0, http: 0 } at first
         | 
|  | |
| 94 |  | 
| 95 | 
             
            	function highlight(code?: string, language?: InferenceSnippetLanguage) {
         | 
| 96 | 
             
            		if (!code || !language) return "";
         | 
| 97 | 
            +
            		return hljs.highlight(code, { language: language === "sh" ? "http" : language }).value;
         | 
| 98 | 
             
            	}
         | 
| 99 |  | 
| 100 | 
             
            	const tokenStr = $derived.by(() => {
         | 
|  | |
| 110 | 
             
            	const snippetsByLang = $derived({
         | 
| 111 | 
             
            		javascript: getSnippet({ lang: "js", tokenStr, conversation }),
         | 
| 112 | 
             
            		python: getSnippet({ lang: "python", tokenStr, conversation }),
         | 
| 113 | 
            +
            		http: getSnippet({ lang: "sh", tokenStr, conversation }),
         | 
| 114 | 
             
            	} as Record<Language, GetInferenceSnippetReturn>);
         | 
| 115 |  | 
| 116 | 
             
            	const selectedSnippet = $derived(snippetsByLang[lang][selectedSnippetIdxByLang[lang]]);
         | 
    	
        src/lib/components/inference-playground/snippets/curl.svelte.ts
    DELETED
    
    | @@ -1,191 +0,0 @@ | |
| 1 | 
            -
            import type { ConversationEntityMembers } from "$lib/state/conversations.svelte";
         | 
| 2 | 
            -
            import type { ChatCompletionInputMessage, GenerationParameters, PipelineType } from "@huggingface/tasks";
         | 
| 3 | 
            -
            import {
         | 
| 4 | 
            -
            	HF_HUB_INFERENCE_PROXY_TEMPLATE,
         | 
| 5 | 
            -
            	type InferenceSnippet,
         | 
| 6 | 
            -
            	type ModelDataMinimal,
         | 
| 7 | 
            -
            	type SnippetInferenceProvider,
         | 
| 8 | 
            -
            	getModelInputSnippet,
         | 
| 9 | 
            -
            	stringifyGenerationConfig,
         | 
| 10 | 
            -
            	stringifyMessages,
         | 
| 11 | 
            -
            } from "@huggingface/tasks";
         | 
| 12 | 
            -
             | 
| 13 | 
            -
            export const snippetBasic = (
         | 
| 14 | 
            -
            	model: ModelDataMinimal,
         | 
| 15 | 
            -
            	accessToken: string,
         | 
| 16 | 
            -
            	provider: SnippetInferenceProvider
         | 
| 17 | 
            -
            ): InferenceSnippet[] => {
         | 
| 18 | 
            -
            	if (provider !== "hf-inference") {
         | 
| 19 | 
            -
            		return [];
         | 
| 20 | 
            -
            	}
         | 
| 21 | 
            -
            	return [
         | 
| 22 | 
            -
            		{
         | 
| 23 | 
            -
            			client: "curl",
         | 
| 24 | 
            -
            			content: `\
         | 
| 25 | 
            -
            curl https://router.huggingface.co/hf-inference/models/${model.id} \\
         | 
| 26 | 
            -
            	-X POST \\
         | 
| 27 | 
            -
            	-d '{"inputs": ${getModelInputSnippet(model, true)}}' \\
         | 
| 28 | 
            -
            	-H 'Content-Type: application/json' \\
         | 
| 29 | 
            -
            	-H 'Authorization: Bearer ${accessToken || `{API_TOKEN}`}'`,
         | 
| 30 | 
            -
            		},
         | 
| 31 | 
            -
            	];
         | 
| 32 | 
            -
            };
         | 
| 33 | 
            -
             | 
| 34 | 
            -
            export const snippetTextGeneration = (
         | 
| 35 | 
            -
            	model: ModelDataMinimal,
         | 
| 36 | 
            -
            	accessToken: string,
         | 
| 37 | 
            -
            	provider: SnippetInferenceProvider,
         | 
| 38 | 
            -
            	providerModelId?: string,
         | 
| 39 | 
            -
            	opts?: {
         | 
| 40 | 
            -
            		streaming?: boolean;
         | 
| 41 | 
            -
            		messages?: ChatCompletionInputMessage[];
         | 
| 42 | 
            -
            		temperature?: GenerationParameters["temperature"];
         | 
| 43 | 
            -
            		max_tokens?: GenerationParameters["max_tokens"];
         | 
| 44 | 
            -
            		top_p?: GenerationParameters["top_p"];
         | 
| 45 | 
            -
            		structured_output?: ConversationEntityMembers["structuredOutput"];
         | 
| 46 | 
            -
            	}
         | 
| 47 | 
            -
            ): InferenceSnippet[] => {
         | 
| 48 | 
            -
            	if (model.tags.includes("conversational")) {
         | 
| 49 | 
            -
            		const baseUrl =
         | 
| 50 | 
            -
            			provider === "hf-inference"
         | 
| 51 | 
            -
            				? `https://router.huggingface.co/hf-inference/models/${model.id}/v1/chat/completions`
         | 
| 52 | 
            -
            				: HF_HUB_INFERENCE_PROXY_TEMPLATE.replace("{{PROVIDER}}", provider) + "/v1/chat/completions";
         | 
| 53 | 
            -
            		const modelId = providerModelId ?? model.id;
         | 
| 54 | 
            -
             | 
| 55 | 
            -
            		// Conversational model detected, so we display a code snippet that features the Messages API
         | 
| 56 | 
            -
            		const streaming = opts?.streaming ?? true;
         | 
| 57 | 
            -
            		const exampleMessages = getModelInputSnippet(model) as ChatCompletionInputMessage[];
         | 
| 58 | 
            -
            		const messages = opts?.messages ?? exampleMessages;
         | 
| 59 | 
            -
             | 
| 60 | 
            -
            		const config = {
         | 
| 61 | 
            -
            			...(opts?.temperature ? { temperature: opts.temperature } : undefined),
         | 
| 62 | 
            -
            			max_tokens: opts?.max_tokens ?? 500,
         | 
| 63 | 
            -
            			...(opts?.top_p ? { top_p: opts.top_p } : undefined),
         | 
| 64 | 
            -
            			...(opts?.structured_output?.enabled
         | 
| 65 | 
            -
            				? {
         | 
| 66 | 
            -
            						response_format: JSON.stringify(
         | 
| 67 | 
            -
            							{
         | 
| 68 | 
            -
            								type: "json_schema",
         | 
| 69 | 
            -
            								json_schema: JSON.parse(opts.structured_output.schema ?? ""),
         | 
| 70 | 
            -
            							},
         | 
| 71 | 
            -
            							null,
         | 
| 72 | 
            -
            							6
         | 
| 73 | 
            -
            						),
         | 
| 74 | 
            -
            					}
         | 
| 75 | 
            -
            				: undefined),
         | 
| 76 | 
            -
            		};
         | 
| 77 | 
            -
            		return [
         | 
| 78 | 
            -
            			{
         | 
| 79 | 
            -
            				client: "curl",
         | 
| 80 | 
            -
            				content: `curl '${baseUrl}' \\
         | 
| 81 | 
            -
            -H 'Authorization: Bearer ${accessToken || `{API_TOKEN}`}' \\
         | 
| 82 | 
            -
            -H 'Content-Type: application/json' \\
         | 
| 83 | 
            -
            --data '{
         | 
| 84 | 
            -
                "model": "${modelId}",
         | 
| 85 | 
            -
                "messages": ${stringifyMessages(messages, {
         | 
| 86 | 
            -
            			indent: "\t",
         | 
| 87 | 
            -
            			attributeKeyQuotes: true,
         | 
| 88 | 
            -
            			customContentEscaper: str => str.replace(/'/g, "'\\''"),
         | 
| 89 | 
            -
            		})},
         | 
| 90 | 
            -
                ${stringifyGenerationConfig(config, {
         | 
| 91 | 
            -
            			indent: "\n    ",
         | 
| 92 | 
            -
            			attributeKeyQuotes: true,
         | 
| 93 | 
            -
            			attributeValueConnector: ": ",
         | 
| 94 | 
            -
            		})}
         | 
| 95 | 
            -
                "stream": ${!!streaming}
         | 
| 96 | 
            -
            }'`,
         | 
| 97 | 
            -
            			},
         | 
| 98 | 
            -
            		];
         | 
| 99 | 
            -
            	} else {
         | 
| 100 | 
            -
            		return snippetBasic(model, accessToken, provider);
         | 
| 101 | 
            -
            	}
         | 
| 102 | 
            -
            };
         | 
| 103 | 
            -
             | 
| 104 | 
            -
            export const snippetZeroShotClassification = (
         | 
| 105 | 
            -
            	model: ModelDataMinimal,
         | 
| 106 | 
            -
            	accessToken: string,
         | 
| 107 | 
            -
            	provider: SnippetInferenceProvider
         | 
| 108 | 
            -
            ): InferenceSnippet[] => {
         | 
| 109 | 
            -
            	if (provider !== "hf-inference") {
         | 
| 110 | 
            -
            		return [];
         | 
| 111 | 
            -
            	}
         | 
| 112 | 
            -
            	return [
         | 
| 113 | 
            -
            		{
         | 
| 114 | 
            -
            			client: "curl",
         | 
| 115 | 
            -
            			content: `curl https://router.huggingface.co/hf-inference/models/${model.id} \\
         | 
| 116 | 
            -
            	-X POST \\
         | 
| 117 | 
            -
            	-d '{"inputs": ${getModelInputSnippet(model, true)}, "parameters": {"candidate_labels": ["refund", "legal", "faq"]}}' \\
         | 
| 118 | 
            -
            	-H 'Content-Type: application/json' \\
         | 
| 119 | 
            -
            	-H 'Authorization: Bearer ${accessToken || `{API_TOKEN}`}'`,
         | 
| 120 | 
            -
            		},
         | 
| 121 | 
            -
            	];
         | 
| 122 | 
            -
            };
         | 
| 123 | 
            -
             | 
| 124 | 
            -
            export const snippetFile = (
         | 
| 125 | 
            -
            	model: ModelDataMinimal,
         | 
| 126 | 
            -
            	accessToken: string,
         | 
| 127 | 
            -
            	provider: SnippetInferenceProvider
         | 
| 128 | 
            -
            ): InferenceSnippet[] => {
         | 
| 129 | 
            -
            	if (provider !== "hf-inference") {
         | 
| 130 | 
            -
            		return [];
         | 
| 131 | 
            -
            	}
         | 
| 132 | 
            -
            	return [
         | 
| 133 | 
            -
            		{
         | 
| 134 | 
            -
            			client: "curl",
         | 
| 135 | 
            -
            			content: `curl https://router.huggingface.co/hf-inference/models/${model.id} \\
         | 
| 136 | 
            -
            	-X POST \\
         | 
| 137 | 
            -
            	--data-binary '@${getModelInputSnippet(model, true, true)}' \\
         | 
| 138 | 
            -
            	-H 'Authorization: Bearer ${accessToken || `{API_TOKEN}`}'`,
         | 
| 139 | 
            -
            		},
         | 
| 140 | 
            -
            	];
         | 
| 141 | 
            -
            };
         | 
| 142 | 
            -
             | 
| 143 | 
            -
            export const curlSnippets: Partial<
         | 
| 144 | 
            -
            	Record<
         | 
| 145 | 
            -
            		PipelineType,
         | 
| 146 | 
            -
            		(
         | 
| 147 | 
            -
            			model: ModelDataMinimal,
         | 
| 148 | 
            -
            			accessToken: string,
         | 
| 149 | 
            -
            			provider: SnippetInferenceProvider,
         | 
| 150 | 
            -
            			providerModelId?: string,
         | 
| 151 | 
            -
            			opts?: Record<string, unknown>
         | 
| 152 | 
            -
            		) => InferenceSnippet[]
         | 
| 153 | 
            -
            	>
         | 
| 154 | 
            -
            > = {
         | 
| 155 | 
            -
            	// Same order as in tasks/src/pipelines.ts
         | 
| 156 | 
            -
            	"text-classification": snippetBasic,
         | 
| 157 | 
            -
            	"token-classification": snippetBasic,
         | 
| 158 | 
            -
            	"table-question-answering": snippetBasic,
         | 
| 159 | 
            -
            	"question-answering": snippetBasic,
         | 
| 160 | 
            -
            	"zero-shot-classification": snippetZeroShotClassification,
         | 
| 161 | 
            -
            	"translation": snippetBasic,
         | 
| 162 | 
            -
            	"summarization": snippetBasic,
         | 
| 163 | 
            -
            	"feature-extraction": snippetBasic,
         | 
| 164 | 
            -
            	"text-generation": snippetTextGeneration,
         | 
| 165 | 
            -
            	"image-text-to-text": snippetTextGeneration,
         | 
| 166 | 
            -
            	"text2text-generation": snippetBasic,
         | 
| 167 | 
            -
            	"fill-mask": snippetBasic,
         | 
| 168 | 
            -
            	"sentence-similarity": snippetBasic,
         | 
| 169 | 
            -
            	"automatic-speech-recognition": snippetFile,
         | 
| 170 | 
            -
            	"text-to-image": snippetBasic,
         | 
| 171 | 
            -
            	"text-to-speech": snippetBasic,
         | 
| 172 | 
            -
            	"text-to-audio": snippetBasic,
         | 
| 173 | 
            -
            	"audio-to-audio": snippetFile,
         | 
| 174 | 
            -
            	"audio-classification": snippetFile,
         | 
| 175 | 
            -
            	"image-classification": snippetFile,
         | 
| 176 | 
            -
            	"image-to-text": snippetFile,
         | 
| 177 | 
            -
            	"object-detection": snippetFile,
         | 
| 178 | 
            -
            	"image-segmentation": snippetFile,
         | 
| 179 | 
            -
            };
         | 
| 180 | 
            -
             | 
| 181 | 
            -
            export function getCurlInferenceSnippet(
         | 
| 182 | 
            -
            	model: ModelDataMinimal,
         | 
| 183 | 
            -
            	accessToken: string,
         | 
| 184 | 
            -
            	provider: SnippetInferenceProvider,
         | 
| 185 | 
            -
            	providerModelId?: string,
         | 
| 186 | 
            -
            	opts?: Record<string, unknown>
         | 
| 187 | 
            -
            ): InferenceSnippet[] {
         | 
| 188 | 
            -
            	return model.pipeline_tag && model.pipeline_tag in curlSnippets
         | 
| 189 | 
            -
            		? (curlSnippets[model.pipeline_tag]?.(model, accessToken, provider, providerModelId, opts) ?? [])
         | 
| 190 | 
            -
            		: [];
         | 
| 191 | 
            -
            }
         | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | 
    	
        src/lib/components/inference-playground/snippets/index.svelte.ts
    DELETED
    
    | @@ -1,5 +0,0 @@ | |
| 1 | 
            -
            import * as curl from "./curl.svelte.js";
         | 
| 2 | 
            -
            import * as python from "./python.svelte.js";
         | 
| 3 | 
            -
            import * as js from "./js.svelte.js";
         | 
| 4 | 
            -
             | 
| 5 | 
            -
            export const snippets = { curl, python, js };
         | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | 
    	
        src/lib/components/inference-playground/snippets/js.svelte.ts
    DELETED
    
    | @@ -1,489 +0,0 @@ | |
| 1 | 
            -
            import type { ConversationEntityMembers } from "$lib/state/conversations.svelte";
         | 
| 2 | 
            -
            import type { ChatCompletionInputMessage, GenerationParameters, PipelineType, WidgetType } from "@huggingface/tasks";
         | 
| 3 | 
            -
            import {
         | 
| 4 | 
            -
            	getModelInputSnippet,
         | 
| 5 | 
            -
            	openAIbaseUrl,
         | 
| 6 | 
            -
            	stringifyGenerationConfig,
         | 
| 7 | 
            -
            	stringifyMessages,
         | 
| 8 | 
            -
            	type InferenceSnippet,
         | 
| 9 | 
            -
            	type ModelDataMinimal,
         | 
| 10 | 
            -
            	type SnippetInferenceProvider,
         | 
| 11 | 
            -
            } from "@huggingface/tasks";
         | 
| 12 | 
            -
             | 
| 13 | 
            -
            const HFJS_METHODS: Partial<Record<WidgetType, string>> = {
         | 
| 14 | 
            -
            	"text-classification": "textClassification",
         | 
| 15 | 
            -
            	"token-classification": "tokenClassification",
         | 
| 16 | 
            -
            	"table-question-answering": "tableQuestionAnswering",
         | 
| 17 | 
            -
            	"question-answering": "questionAnswering",
         | 
| 18 | 
            -
            	"translation": "translation",
         | 
| 19 | 
            -
            	"summarization": "summarization",
         | 
| 20 | 
            -
            	"feature-extraction": "featureExtraction",
         | 
| 21 | 
            -
            	"text-generation": "textGeneration",
         | 
| 22 | 
            -
            	"text2text-generation": "textGeneration",
         | 
| 23 | 
            -
            	"fill-mask": "fillMask",
         | 
| 24 | 
            -
            	"sentence-similarity": "sentenceSimilarity",
         | 
| 25 | 
            -
            };
         | 
| 26 | 
            -
             | 
| 27 | 
            -
            export const snippetBasic = (
         | 
| 28 | 
            -
            	model: ModelDataMinimal,
         | 
| 29 | 
            -
            	accessToken: string,
         | 
| 30 | 
            -
            	provider: SnippetInferenceProvider
         | 
| 31 | 
            -
            ): InferenceSnippet[] => {
         | 
| 32 | 
            -
            	return [
         | 
| 33 | 
            -
            		...(model.pipeline_tag && model.pipeline_tag in HFJS_METHODS
         | 
| 34 | 
            -
            			? [
         | 
| 35 | 
            -
            					{
         | 
| 36 | 
            -
            						client: "huggingface.js",
         | 
| 37 | 
            -
            						content: `\
         | 
| 38 | 
            -
            import { HfInference } from "@huggingface/inference";
         | 
| 39 | 
            -
             | 
| 40 | 
            -
            const client = new HfInference("${accessToken || `{API_TOKEN}`}");
         | 
| 41 | 
            -
             | 
| 42 | 
            -
            const output = await client.${HFJS_METHODS[model.pipeline_tag]}({
         | 
| 43 | 
            -
            	model: "${model.id}",
         | 
| 44 | 
            -
            	inputs: ${getModelInputSnippet(model)},
         | 
| 45 | 
            -
            	provider: "${provider}",
         | 
| 46 | 
            -
            });
         | 
| 47 | 
            -
             | 
| 48 | 
            -
            console.log(output);
         | 
| 49 | 
            -
            `,
         | 
| 50 | 
            -
            					},
         | 
| 51 | 
            -
            				]
         | 
| 52 | 
            -
            			: []),
         | 
| 53 | 
            -
            		{
         | 
| 54 | 
            -
            			client: "fetch",
         | 
| 55 | 
            -
            			content: `\
         | 
| 56 | 
            -
            async function query(data) {
         | 
| 57 | 
            -
            	const response = await fetch(
         | 
| 58 | 
            -
            		"https://router.huggingface.co/hf-inference/models/${model.id}",
         | 
| 59 | 
            -
            		{
         | 
| 60 | 
            -
            			headers: {
         | 
| 61 | 
            -
            				Authorization: "Bearer ${accessToken || `{API_TOKEN}`}",
         | 
| 62 | 
            -
            				"Content-Type": "application/json",
         | 
| 63 | 
            -
            			},
         | 
| 64 | 
            -
            			method: "POST",
         | 
| 65 | 
            -
            			body: JSON.stringify(data),
         | 
| 66 | 
            -
            		}
         | 
| 67 | 
            -
            	);
         | 
| 68 | 
            -
            	const result = await response.json();
         | 
| 69 | 
            -
            	return result;
         | 
| 70 | 
            -
            }
         | 
| 71 | 
            -
             | 
| 72 | 
            -
            query({"inputs": ${getModelInputSnippet(model)}}).then((response) => {
         | 
| 73 | 
            -
            	console.log(JSON.stringify(response));
         | 
| 74 | 
            -
            });`,
         | 
| 75 | 
            -
            		},
         | 
| 76 | 
            -
            	];
         | 
| 77 | 
            -
            };
         | 
| 78 | 
            -
             | 
| 79 | 
            -
            export const snippetTextGeneration = (
         | 
| 80 | 
            -
            	model: ModelDataMinimal,
         | 
| 81 | 
            -
            	accessToken: string,
         | 
| 82 | 
            -
            	provider: SnippetInferenceProvider,
         | 
| 83 | 
            -
            	providerModelId?: string,
         | 
| 84 | 
            -
            	opts?: {
         | 
| 85 | 
            -
            		streaming?: boolean;
         | 
| 86 | 
            -
            		messages?: ChatCompletionInputMessage[];
         | 
| 87 | 
            -
            		temperature?: GenerationParameters["temperature"];
         | 
| 88 | 
            -
            		max_tokens?: GenerationParameters["max_tokens"];
         | 
| 89 | 
            -
            		top_p?: GenerationParameters["top_p"];
         | 
| 90 | 
            -
            		structured_output?: ConversationEntityMembers["structuredOutput"];
         | 
| 91 | 
            -
            	}
         | 
| 92 | 
            -
            ): InferenceSnippet[] => {
         | 
| 93 | 
            -
            	if (model.tags.includes("conversational")) {
         | 
| 94 | 
            -
            		// Conversational model detected, so we display a code snippet that features the Messages API
         | 
| 95 | 
            -
            		const streaming = opts?.streaming ?? true;
         | 
| 96 | 
            -
            		const exampleMessages = getModelInputSnippet(model) as ChatCompletionInputMessage[];
         | 
| 97 | 
            -
            		const messages = opts?.messages ?? exampleMessages;
         | 
| 98 | 
            -
            		const messagesStr = stringifyMessages(messages, { indent: "\t" });
         | 
| 99 | 
            -
             | 
| 100 | 
            -
            		const config = {
         | 
| 101 | 
            -
            			...(opts?.temperature ? { temperature: opts.temperature } : undefined),
         | 
| 102 | 
            -
            			max_tokens: opts?.max_tokens ?? 500,
         | 
| 103 | 
            -
            			...(opts?.top_p ? { top_p: opts.top_p } : undefined),
         | 
| 104 | 
            -
            			...(opts?.structured_output?.enabled
         | 
| 105 | 
            -
            				? {
         | 
| 106 | 
            -
            						response_format: JSON.stringify(
         | 
| 107 | 
            -
            							{
         | 
| 108 | 
            -
            								type: "json_schema",
         | 
| 109 | 
            -
            								json_schema: JSON.parse(opts.structured_output.schema ?? ""),
         | 
| 110 | 
            -
            							},
         | 
| 111 | 
            -
            							null,
         | 
| 112 | 
            -
            							6
         | 
| 113 | 
            -
            						),
         | 
| 114 | 
            -
            					}
         | 
| 115 | 
            -
            				: undefined),
         | 
| 116 | 
            -
            		};
         | 
| 117 | 
            -
            		const configStr = stringifyGenerationConfig(config, {
         | 
| 118 | 
            -
            			indent: "\n\t",
         | 
| 119 | 
            -
            			attributeValueConnector: ": ",
         | 
| 120 | 
            -
            		});
         | 
| 121 | 
            -
             | 
| 122 | 
            -
            		if (streaming) {
         | 
| 123 | 
            -
            			return [
         | 
| 124 | 
            -
            				{
         | 
| 125 | 
            -
            					client: "huggingface.js",
         | 
| 126 | 
            -
            					content: `import { HfInference } from "@huggingface/inference";
         | 
| 127 | 
            -
             | 
| 128 | 
            -
            const client = new HfInference("${accessToken || `{API_TOKEN}`}");
         | 
| 129 | 
            -
             | 
| 130 | 
            -
            let out = "";
         | 
| 131 | 
            -
             | 
| 132 | 
            -
            const stream = client.chatCompletionStream({
         | 
| 133 | 
            -
            	model: "${model.id}",
         | 
| 134 | 
            -
            	messages: ${messagesStr},
         | 
| 135 | 
            -
            	provider: "${provider}",
         | 
| 136 | 
            -
            	${configStr}
         | 
| 137 | 
            -
            });
         | 
| 138 | 
            -
             | 
| 139 | 
            -
            for await (const chunk of stream) {
         | 
| 140 | 
            -
            	if (chunk.choices && chunk.choices.length > 0) {
         | 
| 141 | 
            -
            		const newContent = chunk.choices[0].delta.content;
         | 
| 142 | 
            -
            		out += newContent;
         | 
| 143 | 
            -
            		console.log(newContent);
         | 
| 144 | 
            -
            	}
         | 
| 145 | 
            -
            }`,
         | 
| 146 | 
            -
            				},
         | 
| 147 | 
            -
            				{
         | 
| 148 | 
            -
            					client: "openai",
         | 
| 149 | 
            -
            					content: `import { OpenAI } from "openai";
         | 
| 150 | 
            -
             | 
| 151 | 
            -
            const client = new OpenAI({
         | 
| 152 | 
            -
            	baseURL: "${openAIbaseUrl(provider)}",
         | 
| 153 | 
            -
            	apiKey: "${accessToken || `{API_TOKEN}`}"
         | 
| 154 | 
            -
            });
         | 
| 155 | 
            -
            data.
         | 
| 156 | 
            -
            let out = "";
         | 
| 157 | 
            -
             | 
| 158 | 
            -
            const stream = await client.chat.completions.create({
         | 
| 159 | 
            -
            	model: "${providerModelId ?? model.id}",
         | 
| 160 | 
            -
            	messages: ${messagesStr},
         | 
| 161 | 
            -
            	${configStr}
         | 
| 162 | 
            -
            	stream: true,
         | 
| 163 | 
            -
            });
         | 
| 164 | 
            -
             | 
| 165 | 
            -
            for await (const chunk of stream) {
         | 
| 166 | 
            -
            	if (chunk.choices && chunk.choices.length > 0) {
         | 
| 167 | 
            -
            		const newContent = chunk.choices[0].delta.content;
         | 
| 168 | 
            -
            		out += newContent;
         | 
| 169 | 
            -
            		console.log(newContent);
         | 
| 170 | 
            -
            	}
         | 
| 171 | 
            -
            }`,
         | 
| 172 | 
            -
            				},
         | 
| 173 | 
            -
            			];
         | 
| 174 | 
            -
            		} else {
         | 
| 175 | 
            -
            			return [
         | 
| 176 | 
            -
            				{
         | 
| 177 | 
            -
            					client: "huggingface.js",
         | 
| 178 | 
            -
            					content: `import { HfInference } from "@huggingface/inference";
         | 
| 179 | 
            -
             | 
| 180 | 
            -
            const client = new HfInference("${accessToken || `{API_TOKEN}`}");
         | 
| 181 | 
            -
             | 
| 182 | 
            -
            const chatCompletion = await client.chatCompletion({
         | 
| 183 | 
            -
            	model: "${model.id}",
         | 
| 184 | 
            -
            	messages: ${messagesStr},
         | 
| 185 | 
            -
            	provider: "${provider}",
         | 
| 186 | 
            -
            	${configStr}
         | 
| 187 | 
            -
            });
         | 
| 188 | 
            -
             | 
| 189 | 
            -
            console.log(chatCompletion.choices[0].message);
         | 
| 190 | 
            -
            `,
         | 
| 191 | 
            -
            				},
         | 
| 192 | 
            -
            				{
         | 
| 193 | 
            -
            					client: "openai",
         | 
| 194 | 
            -
            					content: `import { OpenAI } from "openai";
         | 
| 195 | 
            -
             | 
| 196 | 
            -
            const client = new OpenAI({
         | 
| 197 | 
            -
            	baseURL: "${openAIbaseUrl(provider)}",
         | 
| 198 | 
            -
            	apiKey: "${accessToken || `{API_TOKEN}`}"
         | 
| 199 | 
            -
            });
         | 
| 200 | 
            -
             | 
| 201 | 
            -
            const chatCompletion = await client.chat.completions.create({
         | 
| 202 | 
            -
            	model: "${providerModelId ?? model.id}",
         | 
| 203 | 
            -
            	messages: ${messagesStr},
         | 
| 204 | 
            -
            	${configStr}
         | 
| 205 | 
            -
            });
         | 
| 206 | 
            -
             | 
| 207 | 
            -
            console.log(chatCompletion.choices[0].message);
         | 
| 208 | 
            -
            `,
         | 
| 209 | 
            -
            				},
         | 
| 210 | 
            -
            			];
         | 
| 211 | 
            -
            		}
         | 
| 212 | 
            -
            	} else {
         | 
| 213 | 
            -
            		return snippetBasic(model, accessToken, provider);
         | 
| 214 | 
            -
            	}
         | 
| 215 | 
            -
            };
         | 
| 216 | 
            -
             | 
| 217 | 
            -
            export const snippetZeroShotClassification = (model: ModelDataMinimal, accessToken: string): InferenceSnippet[] => {
         | 
| 218 | 
            -
            	return [
         | 
| 219 | 
            -
            		{
         | 
| 220 | 
            -
            			client: "fetch",
         | 
| 221 | 
            -
            			content: `async function query(data) {
         | 
| 222 | 
            -
            			const response = await fetch(
         | 
| 223 | 
            -
            				"https://router.huggingface.co/hf-inference/models/${model.id}",
         | 
| 224 | 
            -
            				{
         | 
| 225 | 
            -
            					headers: {
         | 
| 226 | 
            -
            						Authorization: "Bearer ${accessToken || `{API_TOKEN}`}",
         | 
| 227 | 
            -
            						"Content-Type": "application/json",
         | 
| 228 | 
            -
            					},
         | 
| 229 | 
            -
            					method: "POST",
         | 
| 230 | 
            -
            					body: JSON.stringify(data),
         | 
| 231 | 
            -
            				}
         | 
| 232 | 
            -
            			);
         | 
| 233 | 
            -
            			const result = await response.json();
         | 
| 234 | 
            -
            			return result;
         | 
| 235 | 
            -
            		}
         | 
| 236 | 
            -
             | 
| 237 | 
            -
            		query({"inputs": ${getModelInputSnippet(
         | 
| 238 | 
            -
            			model
         | 
| 239 | 
            -
            		)}, "parameters": {"candidate_labels": ["refund", "legal", "faq"]}}).then((response) => {
         | 
| 240 | 
            -
            			console.log(JSON.stringify(response));
         | 
| 241 | 
            -
            		});`,
         | 
| 242 | 
            -
            		},
         | 
| 243 | 
            -
            	];
         | 
| 244 | 
            -
            };
         | 
| 245 | 
            -
             | 
| 246 | 
            -
            export const snippetTextToImage = (
         | 
| 247 | 
            -
            	model: ModelDataMinimal,
         | 
| 248 | 
            -
            	accessToken: string,
         | 
| 249 | 
            -
            	provider: SnippetInferenceProvider
         | 
| 250 | 
            -
            ): InferenceSnippet[] => {
         | 
| 251 | 
            -
            	return [
         | 
| 252 | 
            -
            		{
         | 
| 253 | 
            -
            			client: "huggingface.js",
         | 
| 254 | 
            -
            			content: `\
         | 
| 255 | 
            -
            import { HfInference } from "@huggingface/inference";
         | 
| 256 | 
            -
             | 
| 257 | 
            -
            const client = new HfInference("${accessToken || `{API_TOKEN}`}");
         | 
| 258 | 
            -
             | 
| 259 | 
            -
            const image = await client.textToImage({
         | 
| 260 | 
            -
            	model: "${model.id}",
         | 
| 261 | 
            -
            	inputs: ${getModelInputSnippet(model)},
         | 
| 262 | 
            -
            	parameters: { num_inference_steps: 5 },
         | 
| 263 | 
            -
            	provider: "${provider}",
         | 
| 264 | 
            -
            });
         | 
| 265 | 
            -
            /// Use the generated image (it's a Blob)
         | 
| 266 | 
            -
            `,
         | 
| 267 | 
            -
            		},
         | 
| 268 | 
            -
            		...(provider === "hf-inference"
         | 
| 269 | 
            -
            			? [
         | 
| 270 | 
            -
            					{
         | 
| 271 | 
            -
            						client: "fetch",
         | 
| 272 | 
            -
            						content: `async function query(data) {
         | 
| 273 | 
            -
            	const response = await fetch(
         | 
| 274 | 
            -
            		"https://router.huggingface.co/hf-inference/models/${model.id}",
         | 
| 275 | 
            -
            		{
         | 
| 276 | 
            -
            			headers: {
         | 
| 277 | 
            -
            				Authorization: "Bearer ${accessToken || `{API_TOKEN}`}",
         | 
| 278 | 
            -
            				"Content-Type": "application/json",
         | 
| 279 | 
            -
            			},
         | 
| 280 | 
            -
            			method: "POST",
         | 
| 281 | 
            -
            			body: JSON.stringify(data),
         | 
| 282 | 
            -
            		}
         | 
| 283 | 
            -
            	);
         | 
| 284 | 
            -
            	const result = await response.blob();
         | 
| 285 | 
            -
            	return result;
         | 
| 286 | 
            -
            }
         | 
| 287 | 
            -
            query({"inputs": ${getModelInputSnippet(model)}}).then((response) => {
         | 
| 288 | 
            -
            	// Use image
         | 
| 289 | 
            -
            });`,
         | 
| 290 | 
            -
            					},
         | 
| 291 | 
            -
            				]
         | 
| 292 | 
            -
            			: []),
         | 
| 293 | 
            -
            	];
         | 
| 294 | 
            -
            };
         | 
| 295 | 
            -
             | 
| 296 | 
            -
            export const snippetTextToVideo = (
         | 
| 297 | 
            -
            	model: ModelDataMinimal,
         | 
| 298 | 
            -
            	accessToken: string,
         | 
| 299 | 
            -
            	provider: SnippetInferenceProvider
         | 
| 300 | 
            -
            ): InferenceSnippet[] => {
         | 
| 301 | 
            -
            	return ["fal-ai", "replicate"].includes(provider)
         | 
| 302 | 
            -
            		? [
         | 
| 303 | 
            -
            				{
         | 
| 304 | 
            -
            					client: "huggingface.js",
         | 
| 305 | 
            -
            					content: `\
         | 
| 306 | 
            -
            import { HfInference } from "@huggingface/inference";
         | 
| 307 | 
            -
             | 
| 308 | 
            -
            const client = new HfInference("${accessToken || `{API_TOKEN}`}");
         | 
| 309 | 
            -
             | 
| 310 | 
            -
            const video = await client.textToVideo({
         | 
| 311 | 
            -
            	model: "${model.id}",
         | 
| 312 | 
            -
            	provider: "${provider}",
         | 
| 313 | 
            -
            	inputs: ${getModelInputSnippet(model)},
         | 
| 314 | 
            -
            	parameters: { num_inference_steps: 5 },
         | 
| 315 | 
            -
            });
         | 
| 316 | 
            -
            // Use the generated video (it's a Blob)
         | 
| 317 | 
            -
            `,
         | 
| 318 | 
            -
            				},
         | 
| 319 | 
            -
            			]
         | 
| 320 | 
            -
            		: [];
         | 
| 321 | 
            -
            };
         | 
| 322 | 
            -
             | 
| 323 | 
            -
            export const snippetTextToAudio = (
         | 
| 324 | 
            -
            	model: ModelDataMinimal,
         | 
| 325 | 
            -
            	accessToken: string,
         | 
| 326 | 
            -
            	provider: SnippetInferenceProvider
         | 
| 327 | 
            -
            ): InferenceSnippet[] => {
         | 
| 328 | 
            -
            	if (provider !== "hf-inference") {
         | 
| 329 | 
            -
            		return [];
         | 
| 330 | 
            -
            	}
         | 
| 331 | 
            -
            	const commonSnippet = `async function query(data) {
         | 
| 332 | 
            -
            		const response = await fetch(
         | 
| 333 | 
            -
            			"https://router.huggingface.co/hf-inference/models/${model.id}",
         | 
| 334 | 
            -
            			{
         | 
| 335 | 
            -
            				headers: {
         | 
| 336 | 
            -
            					Authorization: "Bearer ${accessToken || `{API_TOKEN}`}",
         | 
| 337 | 
            -
            					"Content-Type": "application/json",
         | 
| 338 | 
            -
            				},
         | 
| 339 | 
            -
            				method: "POST",
         | 
| 340 | 
            -
            				body: JSON.stringify(data),
         | 
| 341 | 
            -
            			}
         | 
| 342 | 
            -
            		);`;
         | 
| 343 | 
            -
            	if (model.library_name === "transformers") {
         | 
| 344 | 
            -
            		return [
         | 
| 345 | 
            -
            			{
         | 
| 346 | 
            -
            				client: "fetch",
         | 
| 347 | 
            -
            				content:
         | 
| 348 | 
            -
            					commonSnippet +
         | 
| 349 | 
            -
            					`
         | 
| 350 | 
            -
            			const result = await response.blob();
         | 
| 351 | 
            -
            			return result;
         | 
| 352 | 
            -
            		}
         | 
| 353 | 
            -
            		query({"inputs": ${getModelInputSnippet(model)}}).then((response) => {
         | 
| 354 | 
            -
            			// Returns a byte object of the Audio wavform. Use it directly!
         | 
| 355 | 
            -
            		});`,
         | 
| 356 | 
            -
            			},
         | 
| 357 | 
            -
            		];
         | 
| 358 | 
            -
            	} else {
         | 
| 359 | 
            -
            		return [
         | 
| 360 | 
            -
            			{
         | 
| 361 | 
            -
            				client: "fetch",
         | 
| 362 | 
            -
            				content:
         | 
| 363 | 
            -
            					commonSnippet +
         | 
| 364 | 
            -
            					`
         | 
| 365 | 
            -
            			const result = await response.json();
         | 
| 366 | 
            -
            			return result;
         | 
| 367 | 
            -
            		}
         | 
| 368 | 
            -
             | 
| 369 | 
            -
            		query({"inputs": ${getModelInputSnippet(model)}}).then((response) => {
         | 
| 370 | 
            -
            			console.log(JSON.stringify(response));
         | 
| 371 | 
            -
            		});`,
         | 
| 372 | 
            -
            			},
         | 
| 373 | 
            -
            		];
         | 
| 374 | 
            -
            	}
         | 
| 375 | 
            -
            };
         | 
| 376 | 
            -
             | 
| 377 | 
            -
            export const snippetAutomaticSpeechRecognition = (
         | 
| 378 | 
            -
            	model: ModelDataMinimal,
         | 
| 379 | 
            -
            	accessToken: string,
         | 
| 380 | 
            -
            	provider: SnippetInferenceProvider
         | 
| 381 | 
            -
            ): InferenceSnippet[] => {
         | 
| 382 | 
            -
            	return [
         | 
| 383 | 
            -
            		{
         | 
| 384 | 
            -
            			client: "huggingface.js",
         | 
| 385 | 
            -
            			content: `\
         | 
| 386 | 
            -
            import { HfInference } from "@huggingface/inference";
         | 
| 387 | 
            -
             | 
| 388 | 
            -
            const client = new HfInference("${accessToken || `{API_TOKEN}`}");
         | 
| 389 | 
            -
             | 
| 390 | 
            -
            const data = fs.readFileSync(${getModelInputSnippet(model)});
         | 
| 391 | 
            -
             | 
| 392 | 
            -
            const output = await client.automaticSpeechRecognition({
         | 
| 393 | 
            -
            	data,
         | 
| 394 | 
            -
            	model: "${model.id}",
         | 
| 395 | 
            -
            	provider: "${provider}",
         | 
| 396 | 
            -
            });
         | 
| 397 | 
            -
             | 
| 398 | 
            -
            console.log(output);
         | 
| 399 | 
            -
            `,
         | 
| 400 | 
            -
            		},
         | 
| 401 | 
            -
            		...(provider === "hf-inference" ? snippetFile(model, accessToken, provider) : []),
         | 
| 402 | 
            -
            	];
         | 
| 403 | 
            -
            };
         | 
| 404 | 
            -
             | 
| 405 | 
            -
            export const snippetFile = (
         | 
| 406 | 
            -
            	model: ModelDataMinimal,
         | 
| 407 | 
            -
            	accessToken: string,
         | 
| 408 | 
            -
            	provider: SnippetInferenceProvider
         | 
| 409 | 
            -
            ): InferenceSnippet[] => {
         | 
| 410 | 
            -
            	if (provider !== "hf-inference") {
         | 
| 411 | 
            -
            		return [];
         | 
| 412 | 
            -
            	}
         | 
| 413 | 
            -
            	return [
         | 
| 414 | 
            -
            		{
         | 
| 415 | 
            -
            			client: "fetch",
         | 
| 416 | 
            -
            			content: `async function query(filename) {
         | 
| 417 | 
            -
            	const data = fs.readFileSync(filename);
         | 
| 418 | 
            -
            	const response = await fetch(
         | 
| 419 | 
            -
            		"https://router.huggingface.co/hf-inference/models/${model.id}",
         | 
| 420 | 
            -
            		{
         | 
| 421 | 
            -
            			headers: {
         | 
| 422 | 
            -
            				Authorization: "Bearer ${accessToken || `{API_TOKEN}`}",
         | 
| 423 | 
            -
            				"Content-Type": "application/json",
         | 
| 424 | 
            -
            			},
         | 
| 425 | 
            -
            			method: "POST",
         | 
| 426 | 
            -
            			body: data,
         | 
| 427 | 
            -
            		}
         | 
| 428 | 
            -
            	);
         | 
| 429 | 
            -
            	const result = await response.json();
         | 
| 430 | 
            -
            	return result;
         | 
| 431 | 
            -
            }
         | 
| 432 | 
            -
             | 
| 433 | 
            -
            query(${getModelInputSnippet(model)}).then((response) => {
         | 
| 434 | 
            -
            	console.log(JSON.stringify(response));
         | 
| 435 | 
            -
            });`,
         | 
| 436 | 
            -
            		},
         | 
| 437 | 
            -
            	];
         | 
| 438 | 
            -
            };
         | 
| 439 | 
            -
             | 
| 440 | 
            -
            export const jsSnippets: Partial<
         | 
| 441 | 
            -
            	Record<
         | 
| 442 | 
            -
            		PipelineType,
         | 
| 443 | 
            -
            		(
         | 
| 444 | 
            -
            			model: ModelDataMinimal,
         | 
| 445 | 
            -
            			accessToken: string,
         | 
| 446 | 
            -
            			provider: SnippetInferenceProvider,
         | 
| 447 | 
            -
            			providerModelId?: string,
         | 
| 448 | 
            -
            			opts?: Record<string, unknown>
         | 
| 449 | 
            -
            		) => InferenceSnippet[]
         | 
| 450 | 
            -
            	>
         | 
| 451 | 
            -
            > = {
         | 
| 452 | 
            -
            	// Same order as in tasks/src/pipelines.ts
         | 
| 453 | 
            -
            	"text-classification": snippetBasic,
         | 
| 454 | 
            -
            	"token-classification": snippetBasic,
         | 
| 455 | 
            -
            	"table-question-answering": snippetBasic,
         | 
| 456 | 
            -
            	"question-answering": snippetBasic,
         | 
| 457 | 
            -
            	"zero-shot-classification": snippetZeroShotClassification,
         | 
| 458 | 
            -
            	"translation": snippetBasic,
         | 
| 459 | 
            -
            	"summarization": snippetBasic,
         | 
| 460 | 
            -
            	"feature-extraction": snippetBasic,
         | 
| 461 | 
            -
            	"text-generation": snippetTextGeneration,
         | 
| 462 | 
            -
            	"image-text-to-text": snippetTextGeneration,
         | 
| 463 | 
            -
            	"text2text-generation": snippetBasic,
         | 
| 464 | 
            -
            	"fill-mask": snippetBasic,
         | 
| 465 | 
            -
            	"sentence-similarity": snippetBasic,
         | 
| 466 | 
            -
            	"automatic-speech-recognition": snippetAutomaticSpeechRecognition,
         | 
| 467 | 
            -
            	"text-to-image": snippetTextToImage,
         | 
| 468 | 
            -
            	"text-to-video": snippetTextToVideo,
         | 
| 469 | 
            -
            	"text-to-speech": snippetTextToAudio,
         | 
| 470 | 
            -
            	"text-to-audio": snippetTextToAudio,
         | 
| 471 | 
            -
            	"audio-to-audio": snippetFile,
         | 
| 472 | 
            -
            	"audio-classification": snippetFile,
         | 
| 473 | 
            -
            	"image-classification": snippetFile,
         | 
| 474 | 
            -
            	"image-to-text": snippetFile,
         | 
| 475 | 
            -
            	"object-detection": snippetFile,
         | 
| 476 | 
            -
            	"image-segmentation": snippetFile,
         | 
| 477 | 
            -
            };
         | 
| 478 | 
            -
             | 
| 479 | 
            -
            export function getJsInferenceSnippet(
         | 
| 480 | 
            -
            	model: ModelDataMinimal,
         | 
| 481 | 
            -
            	accessToken: string,
         | 
| 482 | 
            -
            	provider: SnippetInferenceProvider,
         | 
| 483 | 
            -
            	providerModelId?: string,
         | 
| 484 | 
            -
            	opts?: Record<string, unknown>
         | 
| 485 | 
            -
            ): InferenceSnippet[] {
         | 
| 486 | 
            -
            	return model.pipeline_tag && model.pipeline_tag in jsSnippets
         | 
| 487 | 
            -
            		? (jsSnippets[model.pipeline_tag]?.(model, accessToken, provider, providerModelId, opts) ?? [])
         | 
| 488 | 
            -
            		: [];
         | 
| 489 | 
            -
            }
         | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | 
    	
        src/lib/components/inference-playground/snippets/python.svelte.ts
    DELETED
    
    | @@ -1,534 +0,0 @@ | |
| 1 | 
            -
            import type { ConversationEntityMembers } from "$lib/state/conversations.svelte";
         | 
| 2 | 
            -
            import type { ChatCompletionInputMessage, GenerationParameters, PipelineType, WidgetType } from "@huggingface/tasks";
         | 
| 3 | 
            -
            import {
         | 
| 4 | 
            -
            	getModelInputSnippet,
         | 
| 5 | 
            -
            	openAIbaseUrl,
         | 
| 6 | 
            -
            	stringifyGenerationConfig,
         | 
| 7 | 
            -
            	stringifyMessages,
         | 
| 8 | 
            -
            	type InferenceSnippet,
         | 
| 9 | 
            -
            	type ModelDataMinimal,
         | 
| 10 | 
            -
            	type SnippetInferenceProvider,
         | 
| 11 | 
            -
            } from "@huggingface/tasks";
         | 
| 12 | 
            -
             | 
| 13 | 
            -
            const HFH_INFERENCE_CLIENT_METHODS: Partial<Record<WidgetType, string>> = {
         | 
| 14 | 
            -
            	"audio-classification": "audio_classification",
         | 
| 15 | 
            -
            	"audio-to-audio": "audio_to_audio",
         | 
| 16 | 
            -
            	"automatic-speech-recognition": "automatic_speech_recognition",
         | 
| 17 | 
            -
            	"text-to-speech": "text_to_speech",
         | 
| 18 | 
            -
            	"image-classification": "image_classification",
         | 
| 19 | 
            -
            	"image-segmentation": "image_segmentation",
         | 
| 20 | 
            -
            	"image-to-image": "image_to_image",
         | 
| 21 | 
            -
            	"image-to-text": "image_to_text",
         | 
| 22 | 
            -
            	"object-detection": "object_detection",
         | 
| 23 | 
            -
            	"text-to-image": "text_to_image",
         | 
| 24 | 
            -
            	"text-to-video": "text_to_video",
         | 
| 25 | 
            -
            	"zero-shot-image-classification": "zero_shot_image_classification",
         | 
| 26 | 
            -
            	"document-question-answering": "document_question_answering",
         | 
| 27 | 
            -
            	"visual-question-answering": "visual_question_answering",
         | 
| 28 | 
            -
            	"feature-extraction": "feature_extraction",
         | 
| 29 | 
            -
            	"fill-mask": "fill_mask",
         | 
| 30 | 
            -
            	"question-answering": "question_answering",
         | 
| 31 | 
            -
            	"sentence-similarity": "sentence_similarity",
         | 
| 32 | 
            -
            	"summarization": "summarization",
         | 
| 33 | 
            -
            	"table-question-answering": "table_question_answering",
         | 
| 34 | 
            -
            	"text-classification": "text_classification",
         | 
| 35 | 
            -
            	"text-generation": "text_generation",
         | 
| 36 | 
            -
            	"token-classification": "token_classification",
         | 
| 37 | 
            -
            	"translation": "translation",
         | 
| 38 | 
            -
            	"zero-shot-classification": "zero_shot_classification",
         | 
| 39 | 
            -
            	"tabular-classification": "tabular_classification",
         | 
| 40 | 
            -
            	"tabular-regression": "tabular_regression",
         | 
| 41 | 
            -
            };
         | 
| 42 | 
            -
             | 
| 43 | 
            -
            const snippetImportInferenceClient = (accessToken: string, provider: SnippetInferenceProvider): string =>
         | 
| 44 | 
            -
            	`\
         | 
| 45 | 
            -
            from huggingface_hub import InferenceClient
         | 
| 46 | 
            -
             | 
| 47 | 
            -
            client = InferenceClient(
         | 
| 48 | 
            -
            	provider="${provider}",
         | 
| 49 | 
            -
            	api_key="${accessToken || "{API_TOKEN}"}"
         | 
| 50 | 
            -
            )`;
         | 
| 51 | 
            -
             | 
| 52 | 
            -
            // eslint-disable-next-line @typescript-eslint/no-explicit-any
         | 
| 53 | 
            -
            function toPythonDict(obj: any, indent: number = 6, level: number = 0): string {
         | 
| 54 | 
            -
            	const pad = (lvl: number) => " ".repeat(indent * lvl);
         | 
| 55 | 
            -
             | 
| 56 | 
            -
            	if (obj === null) {
         | 
| 57 | 
            -
            		return "None";
         | 
| 58 | 
            -
            	}
         | 
| 59 | 
            -
            	if (typeof obj === "string") {
         | 
| 60 | 
            -
            		// Escape single quotes and backslashes
         | 
| 61 | 
            -
            		return `'${obj.replace(/\\/g, "\\\\").replace(/'/g, "\\'")}'`;
         | 
| 62 | 
            -
            	}
         | 
| 63 | 
            -
            	if (typeof obj === "number" || typeof obj === "bigint") {
         | 
| 64 | 
            -
            		return obj.toString();
         | 
| 65 | 
            -
            	}
         | 
| 66 | 
            -
            	if (typeof obj === "boolean") {
         | 
| 67 | 
            -
            		return obj ? "True" : "False";
         | 
| 68 | 
            -
            	}
         | 
| 69 | 
            -
            	if (Array.isArray(obj)) {
         | 
| 70 | 
            -
            		if (obj.length === 0) return "[]";
         | 
| 71 | 
            -
            		const items = obj.map(item => `${pad(level + 1)}${toPythonDict(item, indent, level + 1)}`).join(",\n");
         | 
| 72 | 
            -
            		return `[\n${items}\n${pad(level)}]`;
         | 
| 73 | 
            -
            	}
         | 
| 74 | 
            -
            	if (typeof obj === "object") {
         | 
| 75 | 
            -
            		const keys = Object.keys(obj);
         | 
| 76 | 
            -
            		if (keys.length === 0) return "{}";
         | 
| 77 | 
            -
            		const items = keys
         | 
| 78 | 
            -
            			.map(key => `${pad(level + 1)}'${key}': ${toPythonDict(obj[key], indent, level + 1)}`)
         | 
| 79 | 
            -
            			.join(",\n");
         | 
| 80 | 
            -
            		return `{\n${items}\n${pad(level)}}`;
         | 
| 81 | 
            -
            	}
         | 
| 82 | 
            -
            	// Fallback for undefined or functions
         | 
| 83 | 
            -
            	return "None";
         | 
| 84 | 
            -
            }
         | 
| 85 | 
            -
             | 
| 86 | 
            -
            export const snippetConversational = (
         | 
| 87 | 
            -
            	model: ModelDataMinimal,
         | 
| 88 | 
            -
            	accessToken: string,
         | 
| 89 | 
            -
            	provider: SnippetInferenceProvider,
         | 
| 90 | 
            -
            	providerModelId?: string,
         | 
| 91 | 
            -
            	opts?: {
         | 
| 92 | 
            -
            		streaming?: boolean;
         | 
| 93 | 
            -
            		messages?: ChatCompletionInputMessage[];
         | 
| 94 | 
            -
            		temperature?: GenerationParameters["temperature"];
         | 
| 95 | 
            -
            		max_tokens?: GenerationParameters["max_tokens"];
         | 
| 96 | 
            -
            		top_p?: GenerationParameters["top_p"];
         | 
| 97 | 
            -
            		structured_output?: ConversationEntityMembers["structuredOutput"];
         | 
| 98 | 
            -
            	}
         | 
| 99 | 
            -
            ): InferenceSnippet[] => {
         | 
| 100 | 
            -
            	const streaming = opts?.streaming ?? true;
         | 
| 101 | 
            -
            	const exampleMessages = getModelInputSnippet(model) as ChatCompletionInputMessage[];
         | 
| 102 | 
            -
            	const messages = opts?.messages ?? exampleMessages;
         | 
| 103 | 
            -
            	const messagesStr = stringifyMessages(messages, { attributeKeyQuotes: true });
         | 
| 104 | 
            -
             | 
| 105 | 
            -
            	const config = {
         | 
| 106 | 
            -
            		...(opts?.temperature ? { temperature: opts.temperature } : undefined),
         | 
| 107 | 
            -
            		max_tokens: opts?.max_tokens ?? 500,
         | 
| 108 | 
            -
            		...(opts?.top_p ? { top_p: opts.top_p } : undefined),
         | 
| 109 | 
            -
            		...(opts?.structured_output?.enabled
         | 
| 110 | 
            -
            			? {
         | 
| 111 | 
            -
            					response_format: toPythonDict(
         | 
| 112 | 
            -
            						{
         | 
| 113 | 
            -
            							type: "json_schema",
         | 
| 114 | 
            -
            							json_schema: JSON.parse(opts.structured_output.schema ?? ""),
         | 
| 115 | 
            -
            						},
         | 
| 116 | 
            -
            						6
         | 
| 117 | 
            -
            					),
         | 
| 118 | 
            -
            				}
         | 
| 119 | 
            -
            			: undefined),
         | 
| 120 | 
            -
            	};
         | 
| 121 | 
            -
            	const configStr = stringifyGenerationConfig(config, {
         | 
| 122 | 
            -
            		indent: "\n\t",
         | 
| 123 | 
            -
            		attributeValueConnector: "=",
         | 
| 124 | 
            -
            	});
         | 
| 125 | 
            -
             | 
| 126 | 
            -
            	if (streaming) {
         | 
| 127 | 
            -
            		return [
         | 
| 128 | 
            -
            			{
         | 
| 129 | 
            -
            				client: "huggingface_hub",
         | 
| 130 | 
            -
            				content: `\
         | 
| 131 | 
            -
            ${snippetImportInferenceClient(accessToken, provider)}
         | 
| 132 | 
            -
             | 
| 133 | 
            -
            messages = ${messagesStr}
         | 
| 134 | 
            -
             | 
| 135 | 
            -
            stream = client.chat.completions.create(
         | 
| 136 | 
            -
            	model="${model.id}",
         | 
| 137 | 
            -
            	messages=messages,
         | 
| 138 | 
            -
            	${configStr}
         | 
| 139 | 
            -
            	stream=True
         | 
| 140 | 
            -
            )
         | 
| 141 | 
            -
             | 
| 142 | 
            -
            for chunk in stream:
         | 
| 143 | 
            -
                print(chunk.choices[0].delta.content, end="")`,
         | 
| 144 | 
            -
            			},
         | 
| 145 | 
            -
            			{
         | 
| 146 | 
            -
            				client: "openai",
         | 
| 147 | 
            -
            				content: `\
         | 
| 148 | 
            -
            from openai import OpenAI
         | 
| 149 | 
            -
             | 
| 150 | 
            -
            client = OpenAI(
         | 
| 151 | 
            -
            	base_url="${openAIbaseUrl(provider)}",
         | 
| 152 | 
            -
            	api_key="${accessToken || "{API_TOKEN}"}"
         | 
| 153 | 
            -
            )
         | 
| 154 | 
            -
             | 
| 155 | 
            -
            messages = ${messagesStr}
         | 
| 156 | 
            -
             | 
| 157 | 
            -
            stream = client.chat.completions.create(
         | 
| 158 | 
            -
                model="${providerModelId ?? model.id}",
         | 
| 159 | 
            -
            	messages=messages,
         | 
| 160 | 
            -
            	${configStr}
         | 
| 161 | 
            -
            	stream=True
         | 
| 162 | 
            -
            )
         | 
| 163 | 
            -
             | 
| 164 | 
            -
            for chunk in stream:
         | 
| 165 | 
            -
            	print(chunk.choices[0].delta.content, end="")`,
         | 
| 166 | 
            -
            			},
         | 
| 167 | 
            -
            		];
         | 
| 168 | 
            -
            	} else {
         | 
| 169 | 
            -
            		return [
         | 
| 170 | 
            -
            			{
         | 
| 171 | 
            -
            				client: "huggingface_hub",
         | 
| 172 | 
            -
            				content: `\
         | 
| 173 | 
            -
            ${snippetImportInferenceClient(accessToken, provider)}
         | 
| 174 | 
            -
             | 
| 175 | 
            -
            messages = ${messagesStr}
         | 
| 176 | 
            -
             | 
| 177 | 
            -
            completion = client.chat.completions.create(
         | 
| 178 | 
            -
                model="${model.id}",
         | 
| 179 | 
            -
            	messages=messages,
         | 
| 180 | 
            -
            	${configStr}
         | 
| 181 | 
            -
            )
         | 
| 182 | 
            -
             | 
| 183 | 
            -
            print(completion.choices[0].message)`,
         | 
| 184 | 
            -
            			},
         | 
| 185 | 
            -
            			{
         | 
| 186 | 
            -
            				client: "openai",
         | 
| 187 | 
            -
            				content: `\
         | 
| 188 | 
            -
            from openai import OpenAI
         | 
| 189 | 
            -
             | 
| 190 | 
            -
            client = OpenAI(
         | 
| 191 | 
            -
            	base_url="${openAIbaseUrl(provider)}",
         | 
| 192 | 
            -
            	api_key="${accessToken || "{API_TOKEN}"}"
         | 
| 193 | 
            -
            )
         | 
| 194 | 
            -
             | 
| 195 | 
            -
            messages = ${messagesStr}
         | 
| 196 | 
            -
             | 
| 197 | 
            -
            completion = client.chat.completions.create(
         | 
| 198 | 
            -
            	model="${providerModelId ?? model.id}",
         | 
| 199 | 
            -
            	messages=messages,
         | 
| 200 | 
            -
            	${configStr}
         | 
| 201 | 
            -
            )
         | 
| 202 | 
            -
             | 
| 203 | 
            -
            print(completion.choices[0].message)`,
         | 
| 204 | 
            -
            			},
         | 
| 205 | 
            -
            		];
         | 
| 206 | 
            -
            	}
         | 
| 207 | 
            -
            };
         | 
| 208 | 
            -
             | 
| 209 | 
            -
            export const snippetZeroShotClassification = (model: ModelDataMinimal): InferenceSnippet[] => {
         | 
| 210 | 
            -
            	return [
         | 
| 211 | 
            -
            		{
         | 
| 212 | 
            -
            			client: "requests",
         | 
| 213 | 
            -
            			content: `\
         | 
| 214 | 
            -
            def query(payload):
         | 
| 215 | 
            -
            	response = requests.post(API_URL, headers=headers, json=payload)
         | 
| 216 | 
            -
            	return response.json()
         | 
| 217 | 
            -
             | 
| 218 | 
            -
            output = query({
         | 
| 219 | 
            -
                "inputs": ${getModelInputSnippet(model)},
         | 
| 220 | 
            -
                "parameters": {"candidate_labels": ["refund", "legal", "faq"]},
         | 
| 221 | 
            -
            })`,
         | 
| 222 | 
            -
            		},
         | 
| 223 | 
            -
            	];
         | 
| 224 | 
            -
            };
         | 
| 225 | 
            -
             | 
| 226 | 
            -
            export const snippetZeroShotImageClassification = (model: ModelDataMinimal): InferenceSnippet[] => {
         | 
| 227 | 
            -
            	return [
         | 
| 228 | 
            -
            		{
         | 
| 229 | 
            -
            			client: "requests",
         | 
| 230 | 
            -
            			content: `\
         | 
| 231 | 
            -
            def query(data):
         | 
| 232 | 
            -
            	with open(data["image_path"], "rb") as f:
         | 
| 233 | 
            -
            		img = f.read()
         | 
| 234 | 
            -
            	payload={
         | 
| 235 | 
            -
            		"parameters": data["parameters"],
         | 
| 236 | 
            -
            		"inputs": base64.b64encode(img).decode("utf-8")
         | 
| 237 | 
            -
            	}
         | 
| 238 | 
            -
            	response = requests.post(API_URL, headers=headers, json=payload)
         | 
| 239 | 
            -
            	return response.json()
         | 
| 240 | 
            -
             | 
| 241 | 
            -
            output = query({
         | 
| 242 | 
            -
            	"image_path": ${getModelInputSnippet(model)},
         | 
| 243 | 
            -
            	"parameters": {"candidate_labels": ["cat", "dog", "llama"]},
         | 
| 244 | 
            -
            })`,
         | 
| 245 | 
            -
            		},
         | 
| 246 | 
            -
            	];
         | 
| 247 | 
            -
            };
         | 
| 248 | 
            -
             | 
| 249 | 
            -
            export const snippetBasic = (
         | 
| 250 | 
            -
            	model: ModelDataMinimal,
         | 
| 251 | 
            -
            	accessToken: string,
         | 
| 252 | 
            -
            	provider: SnippetInferenceProvider
         | 
| 253 | 
            -
            ): InferenceSnippet[] => {
         | 
| 254 | 
            -
            	return [
         | 
| 255 | 
            -
            		...(model.pipeline_tag && model.pipeline_tag in HFH_INFERENCE_CLIENT_METHODS
         | 
| 256 | 
            -
            			? [
         | 
| 257 | 
            -
            					{
         | 
| 258 | 
            -
            						client: "huggingface_hub",
         | 
| 259 | 
            -
            						content: `\
         | 
| 260 | 
            -
            ${snippetImportInferenceClient(accessToken, provider)}
         | 
| 261 | 
            -
             | 
| 262 | 
            -
            result = client.${HFH_INFERENCE_CLIENT_METHODS[model.pipeline_tag]}(
         | 
| 263 | 
            -
            	model="${model.id}",
         | 
| 264 | 
            -
            	inputs=${getModelInputSnippet(model)},
         | 
| 265 | 
            -
            	provider="${provider}",
         | 
| 266 | 
            -
            )
         | 
| 267 | 
            -
             | 
| 268 | 
            -
            print(result)
         | 
| 269 | 
            -
            `,
         | 
| 270 | 
            -
            					},
         | 
| 271 | 
            -
            				]
         | 
| 272 | 
            -
            			: []),
         | 
| 273 | 
            -
            		{
         | 
| 274 | 
            -
            			client: "requests",
         | 
| 275 | 
            -
            			content: `\
         | 
| 276 | 
            -
            def query(payload):
         | 
| 277 | 
            -
            	response = requests.post(API_URL, headers=headers, json=payload)
         | 
| 278 | 
            -
            	return response.json()
         | 
| 279 | 
            -
             | 
| 280 | 
            -
            output = query({
         | 
| 281 | 
            -
            	"inputs": ${getModelInputSnippet(model)},
         | 
| 282 | 
            -
            })`,
         | 
| 283 | 
            -
            		},
         | 
| 284 | 
            -
            	];
         | 
| 285 | 
            -
            };
         | 
| 286 | 
            -
             | 
| 287 | 
            -
            export const snippetFile = (model: ModelDataMinimal): InferenceSnippet[] => {
         | 
| 288 | 
            -
            	return [
         | 
| 289 | 
            -
            		{
         | 
| 290 | 
            -
            			client: "requests",
         | 
| 291 | 
            -
            			content: `\
         | 
| 292 | 
            -
            def query(filename):
         | 
| 293 | 
            -
            	with open(filename, "rb") as f:
         | 
| 294 | 
            -
            		data = f.read()
         | 
| 295 | 
            -
            	response = requests.post(API_URL, headers=headers, data=data)
         | 
| 296 | 
            -
            	return response.json()
         | 
| 297 | 
            -
             | 
| 298 | 
            -
            output = query(${getModelInputSnippet(model)})`,
         | 
| 299 | 
            -
            		},
         | 
| 300 | 
            -
            	];
         | 
| 301 | 
            -
            };
         | 
| 302 | 
            -
             | 
| 303 | 
            -
            export const snippetTextToImage = (
         | 
| 304 | 
            -
            	model: ModelDataMinimal,
         | 
| 305 | 
            -
            	accessToken: string,
         | 
| 306 | 
            -
            	provider: SnippetInferenceProvider,
         | 
| 307 | 
            -
            	providerModelId?: string
         | 
| 308 | 
            -
            ): InferenceSnippet[] => {
         | 
| 309 | 
            -
            	return [
         | 
| 310 | 
            -
            		{
         | 
| 311 | 
            -
            			client: "huggingface_hub",
         | 
| 312 | 
            -
            			content: `\
         | 
| 313 | 
            -
            ${snippetImportInferenceClient(accessToken, provider)}
         | 
| 314 | 
            -
             | 
| 315 | 
            -
            # output is a PIL.Image object
         | 
| 316 | 
            -
            image = client.text_to_image(
         | 
| 317 | 
            -
            	${getModelInputSnippet(model)},
         | 
| 318 | 
            -
            	model="${model.id}"
         | 
| 319 | 
            -
            )`,
         | 
| 320 | 
            -
            		},
         | 
| 321 | 
            -
            		...(provider === "fal-ai"
         | 
| 322 | 
            -
            			? [
         | 
| 323 | 
            -
            					{
         | 
| 324 | 
            -
            						client: "fal-client",
         | 
| 325 | 
            -
            						content: `\
         | 
| 326 | 
            -
            import fal_client
         | 
| 327 | 
            -
             | 
| 328 | 
            -
            result = fal_client.subscribe(
         | 
| 329 | 
            -
            	"${providerModelId ?? model.id}",
         | 
| 330 | 
            -
            	arguments={
         | 
| 331 | 
            -
            		"prompt": ${getModelInputSnippet(model)},
         | 
| 332 | 
            -
            	},
         | 
| 333 | 
            -
            )
         | 
| 334 | 
            -
            print(result)
         | 
| 335 | 
            -
            `,
         | 
| 336 | 
            -
            					},
         | 
| 337 | 
            -
            				]
         | 
| 338 | 
            -
            			: []),
         | 
| 339 | 
            -
            		...(provider === "hf-inference"
         | 
| 340 | 
            -
            			? [
         | 
| 341 | 
            -
            					{
         | 
| 342 | 
            -
            						client: "requests",
         | 
| 343 | 
            -
            						content: `\
         | 
| 344 | 
            -
            def query(payload):
         | 
| 345 | 
            -
            	response = requests.post(API_URL, headers=headers, json=payload)
         | 
| 346 | 
            -
            	return response.content
         | 
| 347 | 
            -
             | 
| 348 | 
            -
            image_bytes = query({
         | 
| 349 | 
            -
            	"inputs": ${getModelInputSnippet(model)},
         | 
| 350 | 
            -
            })
         | 
| 351 | 
            -
             | 
| 352 | 
            -
            # You can access the image with PIL.Image for example
         | 
| 353 | 
            -
            import io
         | 
| 354 | 
            -
            from PIL import Image
         | 
| 355 | 
            -
            image = Image.open(io.BytesIO(image_bytes))`,
         | 
| 356 | 
            -
            					},
         | 
| 357 | 
            -
            				]
         | 
| 358 | 
            -
            			: []),
         | 
| 359 | 
            -
            	];
         | 
| 360 | 
            -
            };
         | 
| 361 | 
            -
             | 
| 362 | 
            -
            export const snippetTextToVideo = (
         | 
| 363 | 
            -
            	model: ModelDataMinimal,
         | 
| 364 | 
            -
            	accessToken: string,
         | 
| 365 | 
            -
            	provider: SnippetInferenceProvider
         | 
| 366 | 
            -
            ): InferenceSnippet[] => {
         | 
| 367 | 
            -
            	return ["fal-ai", "replicate"].includes(provider)
         | 
| 368 | 
            -
            		? [
         | 
| 369 | 
            -
            				{
         | 
| 370 | 
            -
            					client: "huggingface_hub",
         | 
| 371 | 
            -
            					content: `\
         | 
| 372 | 
            -
            ${snippetImportInferenceClient(accessToken, provider)}
         | 
| 373 | 
            -
             | 
| 374 | 
            -
            video = client.text_to_video(
         | 
| 375 | 
            -
            	${getModelInputSnippet(model)},
         | 
| 376 | 
            -
            	model="${model.id}"
         | 
| 377 | 
            -
            )`,
         | 
| 378 | 
            -
            				},
         | 
| 379 | 
            -
            			]
         | 
| 380 | 
            -
            		: [];
         | 
| 381 | 
            -
            };
         | 
| 382 | 
            -
             | 
| 383 | 
            -
            export const snippetTabular = (model: ModelDataMinimal): InferenceSnippet[] => {
         | 
| 384 | 
            -
            	return [
         | 
| 385 | 
            -
            		{
         | 
| 386 | 
            -
            			client: "requests",
         | 
| 387 | 
            -
            			content: `\
         | 
| 388 | 
            -
            def query(payload):
         | 
| 389 | 
            -
            	response = requests.post(API_URL, headers=headers, json=payload)
         | 
| 390 | 
            -
            	return response.content
         | 
| 391 | 
            -
             | 
| 392 | 
            -
            response = query({
         | 
| 393 | 
            -
            	"inputs": {"data": ${getModelInputSnippet(model)}},
         | 
| 394 | 
            -
            })`,
         | 
| 395 | 
            -
            		},
         | 
| 396 | 
            -
            	];
         | 
| 397 | 
            -
            };
         | 
| 398 | 
            -
             | 
| 399 | 
            -
            export const snippetTextToAudio = (model: ModelDataMinimal): InferenceSnippet[] => {
         | 
| 400 | 
            -
            	// Transformers TTS pipeline and api-inference-community (AIC) pipeline outputs are diverged
         | 
| 401 | 
            -
            	// with the latest update to inference-api (IA).
         | 
| 402 | 
            -
            	// Transformers IA returns a byte object (wav file), whereas AIC returns wav and sampling_rate.
         | 
| 403 | 
            -
            	if (model.library_name === "transformers") {
         | 
| 404 | 
            -
            		return [
         | 
| 405 | 
            -
            			{
         | 
| 406 | 
            -
            				client: "requests",
         | 
| 407 | 
            -
            				content: `\
         | 
| 408 | 
            -
            def query(payload):
         | 
| 409 | 
            -
            	response = requests.post(API_URL, headers=headers, json=payload)
         | 
| 410 | 
            -
            	return response.content
         | 
| 411 | 
            -
             | 
| 412 | 
            -
            audio_bytes = query({
         | 
| 413 | 
            -
            	"inputs": ${getModelInputSnippet(model)},
         | 
| 414 | 
            -
            })
         | 
| 415 | 
            -
            # You can access the audio with IPython.display for example
         | 
| 416 | 
            -
            from IPython.display import Audio
         | 
| 417 | 
            -
            Audio(audio_bytes)`,
         | 
| 418 | 
            -
            			},
         | 
| 419 | 
            -
            		];
         | 
| 420 | 
            -
            	} else {
         | 
| 421 | 
            -
            		return [
         | 
| 422 | 
            -
            			{
         | 
| 423 | 
            -
            				client: "requests",
         | 
| 424 | 
            -
            				content: `\
         | 
| 425 | 
            -
            def query(payload):
         | 
| 426 | 
            -
            	response = requests.post(API_URL, headers=headers, json=payload)
         | 
| 427 | 
            -
            	return response.json()
         | 
| 428 | 
            -
             | 
| 429 | 
            -
            audio, sampling_rate = query({
         | 
| 430 | 
            -
            	"inputs": ${getModelInputSnippet(model)},
         | 
| 431 | 
            -
            })
         | 
| 432 | 
            -
            # You can access the audio with IPython.display for example
         | 
| 433 | 
            -
            from IPython.display import Audio
         | 
| 434 | 
            -
            Audio(audio, rate=sampling_rate)`,
         | 
| 435 | 
            -
            			},
         | 
| 436 | 
            -
            		];
         | 
| 437 | 
            -
            	}
         | 
| 438 | 
            -
            };
         | 
| 439 | 
            -
             | 
| 440 | 
            -
            export const snippetDocumentQuestionAnswering = (model: ModelDataMinimal): InferenceSnippet[] => {
         | 
| 441 | 
            -
            	return [
         | 
| 442 | 
            -
            		{
         | 
| 443 | 
            -
            			client: "requests",
         | 
| 444 | 
            -
            			content: `\
         | 
| 445 | 
            -
            def query(payload):
         | 
| 446 | 
            -
            	with open(payload["image"], "rb") as f:
         | 
| 447 | 
            -
            		img = f.read()
         | 
| 448 | 
            -
            		payload["image"] = base64.b64encode(img).decode("utf-8")
         | 
| 449 | 
            -
            	response = requests.post(API_URL, headers=headers, json=payload)
         | 
| 450 | 
            -
            	return response.json()
         | 
| 451 | 
            -
             | 
| 452 | 
            -
            output = query({
         | 
| 453 | 
            -
                "inputs": ${getModelInputSnippet(model)},
         | 
| 454 | 
            -
            })`,
         | 
| 455 | 
            -
            		},
         | 
| 456 | 
            -
            	];
         | 
| 457 | 
            -
            };
         | 
| 458 | 
            -
             | 
| 459 | 
            -
            export const pythonSnippets: Partial<
         | 
| 460 | 
            -
            	Record<
         | 
| 461 | 
            -
            		PipelineType,
         | 
| 462 | 
            -
            		(
         | 
| 463 | 
            -
            			model: ModelDataMinimal,
         | 
| 464 | 
            -
            			accessToken: string,
         | 
| 465 | 
            -
            			provider: SnippetInferenceProvider,
         | 
| 466 | 
            -
            			providerModelId?: string,
         | 
| 467 | 
            -
            			opts?: Record<string, unknown>
         | 
| 468 | 
            -
            		) => InferenceSnippet[]
         | 
| 469 | 
            -
            	>
         | 
| 470 | 
            -
            > = {
         | 
| 471 | 
            -
            	// Same order as in tasks/src/pipelines.ts
         | 
| 472 | 
            -
            	"text-classification": snippetBasic,
         | 
| 473 | 
            -
            	"token-classification": snippetBasic,
         | 
| 474 | 
            -
            	"table-question-answering": snippetBasic,
         | 
| 475 | 
            -
            	"question-answering": snippetBasic,
         | 
| 476 | 
            -
            	"zero-shot-classification": snippetZeroShotClassification,
         | 
| 477 | 
            -
            	"translation": snippetBasic,
         | 
| 478 | 
            -
            	"summarization": snippetBasic,
         | 
| 479 | 
            -
            	"feature-extraction": snippetBasic,
         | 
| 480 | 
            -
            	"text-generation": snippetBasic,
         | 
| 481 | 
            -
            	"text2text-generation": snippetBasic,
         | 
| 482 | 
            -
            	"image-text-to-text": snippetConversational,
         | 
| 483 | 
            -
            	"fill-mask": snippetBasic,
         | 
| 484 | 
            -
            	"sentence-similarity": snippetBasic,
         | 
| 485 | 
            -
            	"automatic-speech-recognition": snippetFile,
         | 
| 486 | 
            -
            	"text-to-image": snippetTextToImage,
         | 
| 487 | 
            -
            	"text-to-video": snippetTextToVideo,
         | 
| 488 | 
            -
            	"text-to-speech": snippetTextToAudio,
         | 
| 489 | 
            -
            	"text-to-audio": snippetTextToAudio,
         | 
| 490 | 
            -
            	"audio-to-audio": snippetFile,
         | 
| 491 | 
            -
            	"audio-classification": snippetFile,
         | 
| 492 | 
            -
            	"image-classification": snippetFile,
         | 
| 493 | 
            -
            	"tabular-regression": snippetTabular,
         | 
| 494 | 
            -
            	"tabular-classification": snippetTabular,
         | 
| 495 | 
            -
            	"object-detection": snippetFile,
         | 
| 496 | 
            -
            	"image-segmentation": snippetFile,
         | 
| 497 | 
            -
            	"document-question-answering": snippetDocumentQuestionAnswering,
         | 
| 498 | 
            -
            	"image-to-text": snippetFile,
         | 
| 499 | 
            -
            	"zero-shot-image-classification": snippetZeroShotImageClassification,
         | 
| 500 | 
            -
            };
         | 
| 501 | 
            -
             | 
| 502 | 
            -
            export function getPythonInferenceSnippet(
         | 
| 503 | 
            -
            	model: ModelDataMinimal,
         | 
| 504 | 
            -
            	accessToken: string,
         | 
| 505 | 
            -
            	provider: SnippetInferenceProvider,
         | 
| 506 | 
            -
            	providerModelId?: string,
         | 
| 507 | 
            -
            	opts?: Record<string, unknown>
         | 
| 508 | 
            -
            ): InferenceSnippet[] {
         | 
| 509 | 
            -
            	if (model.tags.includes("conversational")) {
         | 
| 510 | 
            -
            		// Conversational model detected, so we display a code snippet that features the Messages API
         | 
| 511 | 
            -
            		return snippetConversational(model, accessToken, provider, providerModelId, opts);
         | 
| 512 | 
            -
            	} else {
         | 
| 513 | 
            -
            		const snippets =
         | 
| 514 | 
            -
            			model.pipeline_tag && model.pipeline_tag in pythonSnippets
         | 
| 515 | 
            -
            				? (pythonSnippets[model.pipeline_tag]?.(model, accessToken, provider, providerModelId) ?? [])
         | 
| 516 | 
            -
            				: [];
         | 
| 517 | 
            -
             | 
| 518 | 
            -
            		return snippets.map(snippet => {
         | 
| 519 | 
            -
            			return {
         | 
| 520 | 
            -
            				...snippet,
         | 
| 521 | 
            -
            				content:
         | 
| 522 | 
            -
            					snippet.client === "requests"
         | 
| 523 | 
            -
            						? `\
         | 
| 524 | 
            -
            import requests
         | 
| 525 | 
            -
             | 
| 526 | 
            -
            API_URL = "${openAIbaseUrl(provider)}"
         | 
| 527 | 
            -
            headers = {"Authorization": ${accessToken ? `"Bearer ${accessToken}"` : `f"Bearer {API_TOKEN}"`}}
         | 
| 528 | 
            -
             | 
| 529 | 
            -
            ${snippet.content}`
         | 
| 530 | 
            -
            						: snippet.content,
         | 
| 531 | 
            -
            			};
         | 
| 532 | 
            -
            		});
         | 
| 533 | 
            -
            	}
         | 
| 534 | 
            -
            }
         | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | 
    	
        src/lib/components/inference-playground/utils.svelte.ts
    CHANGED
    
    | @@ -1,4 +1,5 @@ | |
| 1 | 
             
            import ctxLengthData from "$lib/data/context_length.json";
         | 
|  | |
| 2 | 
             
            import { ConversationClass, type ConversationEntityMembers } from "$lib/state/conversations.svelte";
         | 
| 3 | 
             
            import { token } from "$lib/state/token.svelte";
         | 
| 4 | 
             
            import {
         | 
| @@ -12,8 +13,7 @@ import { | |
| 12 | 
             
            } from "$lib/types.js";
         | 
| 13 | 
             
            import { safeParse } from "$lib/utils/json.js";
         | 
| 14 | 
             
            import { omit, tryGet } from "$lib/utils/object.svelte.js";
         | 
| 15 | 
            -
            import {  | 
| 16 | 
            -
            import { snippets } from "./snippets/index.svelte.js";
         | 
| 17 | 
             
            import type { ChatCompletionInputMessage, InferenceSnippet } from "@huggingface/tasks";
         | 
| 18 | 
             
            import { type ChatCompletionOutputMessage } from "@huggingface/tasks";
         | 
| 19 | 
             
            import { AutoTokenizer, PreTrainedTokenizer } from "@huggingface/transformers";
         | 
| @@ -21,6 +21,7 @@ import OpenAI from "openai"; | |
| 21 | 
             
            import { images } from "$lib/state/images.svelte.js";
         | 
| 22 | 
             
            import { projects } from "$lib/state/projects.svelte.js";
         | 
| 23 | 
             
            import { structuredForbiddenProviders } from "$lib/state/models.svelte.js";
         | 
|  | |
| 24 |  | 
| 25 | 
             
            type ChatCompletionInputMessageChunk =
         | 
| 26 | 
             
            	NonNullable<ChatCompletionInputMessage["content"]> extends string | (infer U)[] ? U : never;
         | 
| @@ -49,8 +50,8 @@ async function parseMessage(message: ConversationMessage): Promise<ChatCompletio | |
| 49 |  | 
| 50 | 
             
            type HFCompletionMetadata = {
         | 
| 51 | 
             
            	type: "huggingface";
         | 
| 52 | 
            -
            	client:  | 
| 53 | 
            -
            	args: Parameters< | 
| 54 | 
             
            };
         | 
| 55 |  | 
| 56 | 
             
            type OpenAICompletionMetadata = {
         | 
| @@ -81,55 +82,55 @@ export function maxAllowedTokens(conversation: ConversationClass) { | |
| 81 | 
             
            	return ctxLength;
         | 
| 82 | 
             
            }
         | 
| 83 |  | 
| 84 | 
            -
             | 
| 85 | 
            -
            	conversation: ConversationClass | Conversation,
         | 
| 86 | 
            -
            	signal?: AbortSignal
         | 
| 87 | 
            -
            ): Promise<CompletionMetadata> {
         | 
| 88 | 
             
            	const data = conversation instanceof ConversationClass ? conversation.data : conversation;
         | 
| 89 | 
            -
            	const model = conversation.model;
         | 
| 90 | 
            -
            	const systemMessage = projects.current?.systemMessage;
         | 
| 91 | 
            -
             | 
| 92 | 
            -
            	const messages: ConversationMessage[] = [
         | 
| 93 | 
            -
            		...(isSystemPromptSupported(model) && systemMessage?.length ? [{ role: "system", content: systemMessage }] : []),
         | 
| 94 | 
            -
            		...data.messages,
         | 
| 95 | 
            -
            	];
         | 
| 96 | 
            -
            	const parsed = await Promise.all(messages.map(parseMessage));
         | 
| 97 | 
            -
             | 
| 98 | 
            -
            	const baseArgs = {
         | 
| 99 | 
            -
            		...data.config,
         | 
| 100 | 
            -
            		messages: parsed,
         | 
| 101 | 
            -
            		model: model.id,
         | 
| 102 | 
            -
            		// eslint-disable-next-line @typescript-eslint/no-explicit-any
         | 
| 103 | 
            -
            	} as any;
         | 
| 104 | 
            -
             | 
| 105 | 
             
            	const json = safeParse(data.structuredOutput?.schema ?? "");
         | 
| 106 | 
             
            	// eslint-disable-next-line @typescript-eslint/no-explicit-any
         | 
| 107 | 
             
            	if (json && data.structuredOutput?.enabled && !structuredForbiddenProviders.includes(data.provider as any)) {
         | 
| 108 | 
             
            		switch (data.provider) {
         | 
| 109 | 
             
            			case "cohere": {
         | 
| 110 | 
            -
            				 | 
| 111 | 
             
            					type: "json_object",
         | 
| 112 | 
             
            					...json,
         | 
| 113 | 
             
            				};
         | 
| 114 | 
            -
            				break;
         | 
| 115 | 
             
            			}
         | 
| 116 | 
             
            			case Provider.Cerebras: {
         | 
| 117 | 
            -
            				 | 
| 118 | 
             
            					type: "json_schema",
         | 
| 119 | 
             
            					json_schema: { ...json, name: "schema" },
         | 
| 120 | 
             
            				};
         | 
| 121 | 
            -
            				break;
         | 
| 122 | 
             
            			}
         | 
| 123 | 
             
            			default: {
         | 
| 124 | 
            -
            				 | 
| 125 | 
             
            					type: "json_schema",
         | 
| 126 | 
             
            					json_schema: json,
         | 
| 127 | 
             
            				};
         | 
| 128 | 
            -
             | 
| 129 | 
            -
            				break;
         | 
| 130 | 
             
            			}
         | 
| 131 | 
             
            		}
         | 
| 132 | 
             
            	}
         | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 133 |  | 
| 134 | 
             
            	// Handle OpenAI-compatible models
         | 
| 135 | 
             
            	if (isCustomModel(model)) {
         | 
| @@ -163,7 +164,7 @@ async function getCompletionMetadata( | |
| 163 | 
             
            	// Handle HuggingFace models
         | 
| 164 | 
             
            	return {
         | 
| 165 | 
             
            		type: "huggingface",
         | 
| 166 | 
            -
            		client: new  | 
| 167 | 
             
            		args,
         | 
| 168 | 
             
            	};
         | 
| 169 | 
             
            }
         | 
| @@ -299,21 +300,14 @@ export const customMaxTokens: { [key: string]: number } = { | |
| 299 | 
             
            } as const;
         | 
| 300 |  | 
| 301 | 
             
            // Order of the elements in InferenceModal.svelte is determined by this const
         | 
| 302 | 
            -
            export const inferenceSnippetLanguages = ["python", "js", " | 
| 303 |  | 
| 304 | 
             
            export type InferenceSnippetLanguage = (typeof inferenceSnippetLanguages)[number];
         | 
| 305 |  | 
| 306 | 
            -
             | 
| 307 | 
            -
            	curl: snippets.curl.getCurlInferenceSnippet,
         | 
| 308 | 
            -
            	js: snippets.js.getJsInferenceSnippet,
         | 
| 309 | 
            -
            	python: snippets.python.getPythonInferenceSnippet,
         | 
| 310 | 
            -
            } as const;
         | 
| 311 | 
            -
             | 
| 312 | 
            -
            export type GetInferenceSnippetReturn = (InferenceSnippet & { language: InferenceSnippetLanguage })[];
         | 
| 313 |  | 
| 314 | 
             
            export function getInferenceSnippet(
         | 
| 315 | 
            -
            	 | 
| 316 | 
            -
            	provider: InferenceProvider,
         | 
| 317 | 
             
            	language: InferenceSnippetLanguage,
         | 
| 318 | 
             
            	accessToken: string,
         | 
| 319 | 
             
            	opts?: {
         | 
| @@ -325,32 +319,53 @@ export function getInferenceSnippet( | |
| 325 | 
             
            		structured_output?: ConversationEntityMembers["structuredOutput"];
         | 
| 326 | 
             
            	}
         | 
| 327 | 
             
            ): GetInferenceSnippetReturn {
         | 
|  | |
|  | |
|  | |
|  | |
| 328 | 
             
            	// If it's a custom model, we don't generate inference snippets
         | 
| 329 | 
             
            	if (isCustomModel(model)) {
         | 
| 330 | 
             
            		return [];
         | 
| 331 | 
             
            	}
         | 
| 332 |  | 
| 333 | 
            -
            	const  | 
| 334 | 
            -
            	 | 
|  | |
| 335 | 
             
            		{ ...model, inference: "" },
         | 
| 336 | 
             
            		accessToken,
         | 
| 337 | 
             
            		provider,
         | 
| 338 | 
            -
            		 | 
| 339 | 
             
            		opts
         | 
| 340 | 
             
            	);
         | 
| 341 | 
            -
            	return snippetsByClient.map(snippetByClient => ({ ...snippetByClient, language }));
         | 
| 342 | 
            -
            }
         | 
| 343 |  | 
| 344 | 
            -
             | 
| 345 | 
            -
              | 
| 346 | 
            -
              | 
| 347 | 
            -
             | 
| 348 | 
            -
             | 
| 349 | 
            -
             | 
| 350 | 
            -
             | 
| 351 | 
            -
            ) | 
| 352 | 
            -
             | 
| 353 | 
            -
             | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 354 | 
             
            }
         | 
| 355 |  | 
| 356 | 
             
            const tokenizers = new Map<string, PreTrainedTokenizer | null>();
         | 
|  | |
| 1 | 
             
            import ctxLengthData from "$lib/data/context_length.json";
         | 
| 2 | 
            +
            import { InferenceClient, snippets } from "@huggingface/inference";
         | 
| 3 | 
             
            import { ConversationClass, type ConversationEntityMembers } from "$lib/state/conversations.svelte";
         | 
| 4 | 
             
            import { token } from "$lib/state/token.svelte";
         | 
| 5 | 
             
            import {
         | 
|  | |
| 13 | 
             
            } from "$lib/types.js";
         | 
| 14 | 
             
            import { safeParse } from "$lib/utils/json.js";
         | 
| 15 | 
             
            import { omit, tryGet } from "$lib/utils/object.svelte.js";
         | 
| 16 | 
            +
            import { type InferenceProvider } from "@huggingface/inference";
         | 
|  | |
| 17 | 
             
            import type { ChatCompletionInputMessage, InferenceSnippet } from "@huggingface/tasks";
         | 
| 18 | 
             
            import { type ChatCompletionOutputMessage } from "@huggingface/tasks";
         | 
| 19 | 
             
            import { AutoTokenizer, PreTrainedTokenizer } from "@huggingface/transformers";
         | 
|  | |
| 21 | 
             
            import { images } from "$lib/state/images.svelte.js";
         | 
| 22 | 
             
            import { projects } from "$lib/state/projects.svelte.js";
         | 
| 23 | 
             
            import { structuredForbiddenProviders } from "$lib/state/models.svelte.js";
         | 
| 24 | 
            +
            import { modifySnippet } from "$lib/utils/snippets.js";
         | 
| 25 |  | 
| 26 | 
             
            type ChatCompletionInputMessageChunk =
         | 
| 27 | 
             
            	NonNullable<ChatCompletionInputMessage["content"]> extends string | (infer U)[] ? U : never;
         | 
|  | |
| 50 |  | 
| 51 | 
             
            type HFCompletionMetadata = {
         | 
| 52 | 
             
            	type: "huggingface";
         | 
| 53 | 
            +
            	client: InferenceClient;
         | 
| 54 | 
            +
            	args: Parameters<InferenceClient["chatCompletion"]>[0];
         | 
| 55 | 
             
            };
         | 
| 56 |  | 
| 57 | 
             
            type OpenAICompletionMetadata = {
         | 
|  | |
| 82 | 
             
            	return ctxLength;
         | 
| 83 | 
             
            }
         | 
| 84 |  | 
| 85 | 
            +
            function getResponseFormatObj(conversation: ConversationClass | Conversation) {
         | 
|  | |
|  | |
|  | |
| 86 | 
             
            	const data = conversation instanceof ConversationClass ? conversation.data : conversation;
         | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 87 | 
             
            	const json = safeParse(data.structuredOutput?.schema ?? "");
         | 
| 88 | 
             
            	// eslint-disable-next-line @typescript-eslint/no-explicit-any
         | 
| 89 | 
             
            	if (json && data.structuredOutput?.enabled && !structuredForbiddenProviders.includes(data.provider as any)) {
         | 
| 90 | 
             
            		switch (data.provider) {
         | 
| 91 | 
             
            			case "cohere": {
         | 
| 92 | 
            +
            				return {
         | 
| 93 | 
             
            					type: "json_object",
         | 
| 94 | 
             
            					...json,
         | 
| 95 | 
             
            				};
         | 
|  | |
| 96 | 
             
            			}
         | 
| 97 | 
             
            			case Provider.Cerebras: {
         | 
| 98 | 
            +
            				return {
         | 
| 99 | 
             
            					type: "json_schema",
         | 
| 100 | 
             
            					json_schema: { ...json, name: "schema" },
         | 
| 101 | 
             
            				};
         | 
|  | |
| 102 | 
             
            			}
         | 
| 103 | 
             
            			default: {
         | 
| 104 | 
            +
            				return {
         | 
| 105 | 
             
            					type: "json_schema",
         | 
| 106 | 
             
            					json_schema: json,
         | 
| 107 | 
             
            				};
         | 
|  | |
|  | |
| 108 | 
             
            			}
         | 
| 109 | 
             
            		}
         | 
| 110 | 
             
            	}
         | 
| 111 | 
            +
            }
         | 
| 112 | 
            +
             | 
| 113 | 
            +
            async function getCompletionMetadata(
         | 
| 114 | 
            +
            	conversation: ConversationClass | Conversation,
         | 
| 115 | 
            +
            	signal?: AbortSignal
         | 
| 116 | 
            +
            ): Promise<CompletionMetadata> {
         | 
| 117 | 
            +
            	const data = conversation instanceof ConversationClass ? conversation.data : conversation;
         | 
| 118 | 
            +
            	const model = conversation.model;
         | 
| 119 | 
            +
            	const systemMessage = projects.current?.systemMessage;
         | 
| 120 | 
            +
             | 
| 121 | 
            +
            	const messages: ConversationMessage[] = [
         | 
| 122 | 
            +
            		...(isSystemPromptSupported(model) && systemMessage?.length ? [{ role: "system", content: systemMessage }] : []),
         | 
| 123 | 
            +
            		...data.messages,
         | 
| 124 | 
            +
            	];
         | 
| 125 | 
            +
            	const parsed = await Promise.all(messages.map(parseMessage));
         | 
| 126 | 
            +
             | 
| 127 | 
            +
            	const baseArgs = {
         | 
| 128 | 
            +
            		...data.config,
         | 
| 129 | 
            +
            		messages: parsed,
         | 
| 130 | 
            +
            		model: model.id,
         | 
| 131 | 
            +
            		response_format: getResponseFormatObj(conversation),
         | 
| 132 | 
            +
            		// eslint-disable-next-line @typescript-eslint/no-explicit-any
         | 
| 133 | 
            +
            	} as any;
         | 
| 134 |  | 
| 135 | 
             
            	// Handle OpenAI-compatible models
         | 
| 136 | 
             
            	if (isCustomModel(model)) {
         | 
|  | |
| 164 | 
             
            	// Handle HuggingFace models
         | 
| 165 | 
             
            	return {
         | 
| 166 | 
             
            		type: "huggingface",
         | 
| 167 | 
            +
            		client: new InferenceClient(token.value),
         | 
| 168 | 
             
            		args,
         | 
| 169 | 
             
            	};
         | 
| 170 | 
             
            }
         | 
|  | |
| 300 | 
             
            } as const;
         | 
| 301 |  | 
| 302 | 
             
            // Order of the elements in InferenceModal.svelte is determined by this const
         | 
| 303 | 
            +
            export const inferenceSnippetLanguages = ["python", "js", "sh"] as const;
         | 
| 304 |  | 
| 305 | 
             
            export type InferenceSnippetLanguage = (typeof inferenceSnippetLanguages)[number];
         | 
| 306 |  | 
| 307 | 
            +
            export type GetInferenceSnippetReturn = InferenceSnippet[];
         | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 308 |  | 
| 309 | 
             
            export function getInferenceSnippet(
         | 
| 310 | 
            +
            	conversation: ConversationClass,
         | 
|  | |
| 311 | 
             
            	language: InferenceSnippetLanguage,
         | 
| 312 | 
             
            	accessToken: string,
         | 
| 313 | 
             
            	opts?: {
         | 
|  | |
| 319 | 
             
            		structured_output?: ConversationEntityMembers["structuredOutput"];
         | 
| 320 | 
             
            	}
         | 
| 321 | 
             
            ): GetInferenceSnippetReturn {
         | 
| 322 | 
            +
            	const model = conversation.model;
         | 
| 323 | 
            +
            	const data = conversation.data;
         | 
| 324 | 
            +
            	const provider = (isCustomModel(model) ? "hf-inference" : data.provider) as InferenceProvider;
         | 
| 325 | 
            +
             | 
| 326 | 
             
            	// If it's a custom model, we don't generate inference snippets
         | 
| 327 | 
             
            	if (isCustomModel(model)) {
         | 
| 328 | 
             
            		return [];
         | 
| 329 | 
             
            	}
         | 
| 330 |  | 
| 331 | 
            +
            	const providerMapping = model.inferenceProviderMapping.find(p => p.provider === provider);
         | 
| 332 | 
            +
            	if (!providerMapping) return [];
         | 
| 333 | 
            +
            	const allSnippets = snippets.getInferenceSnippets(
         | 
| 334 | 
             
            		{ ...model, inference: "" },
         | 
| 335 | 
             
            		accessToken,
         | 
| 336 | 
             
            		provider,
         | 
| 337 | 
            +
            		{ ...providerMapping, hfModelId: model.id },
         | 
| 338 | 
             
            		opts
         | 
| 339 | 
             
            	);
         | 
|  | |
|  | |
| 340 |  | 
| 341 | 
            +
            	if (opts?.structured_output && !structuredForbiddenProviders.includes(provider as Provider)) {
         | 
| 342 | 
            +
            		allSnippets.forEach(s => {
         | 
| 343 | 
            +
            			const modified = modifySnippet(s.content, { prop: "hi" });
         | 
| 344 | 
            +
            			if (s.content === modified) {
         | 
| 345 | 
            +
            				console.log("Failed for", s.language, "\n");
         | 
| 346 | 
            +
            			} else {
         | 
| 347 | 
            +
            				console.log("Original snippet");
         | 
| 348 | 
            +
            				console.log(s.content);
         | 
| 349 | 
            +
            				console.log("\nModified");
         | 
| 350 | 
            +
            				console.log(modified);
         | 
| 351 | 
            +
            				console.log();
         | 
| 352 | 
            +
            			}
         | 
| 353 | 
            +
            		});
         | 
| 354 | 
            +
            	}
         | 
| 355 | 
            +
             | 
| 356 | 
            +
            	return allSnippets
         | 
| 357 | 
            +
            		.filter(s => s.language === language)
         | 
| 358 | 
            +
            		.map(s => {
         | 
| 359 | 
            +
            			if (opts?.structured_output && !structuredForbiddenProviders.includes(provider as Provider)) {
         | 
| 360 | 
            +
            				return {
         | 
| 361 | 
            +
            					...s,
         | 
| 362 | 
            +
            					content: modifySnippet(s.content, {
         | 
| 363 | 
            +
            						response_format: getResponseFormatObj(conversation),
         | 
| 364 | 
            +
            					}),
         | 
| 365 | 
            +
            				};
         | 
| 366 | 
            +
            			}
         | 
| 367 | 
            +
            			return s;
         | 
| 368 | 
            +
            		});
         | 
| 369 | 
             
            }
         | 
| 370 |  | 
| 371 | 
             
            const tokenizers = new Map<string, PreTrainedTokenizer | null>();
         | 
    	
        src/lib/state/conversations.svelte.ts
    CHANGED
    
    | @@ -8,9 +8,9 @@ import { | |
| 8 | 
             
            } from "$lib/components/inference-playground/utils.svelte.js";
         | 
| 9 | 
             
            import { addToast } from "$lib/components/toaster.svelte.js";
         | 
| 10 | 
             
            import { AbortManager } from "$lib/spells/abort-manager.svelte";
         | 
| 11 | 
            -
            import { PipelineTag, type ConversationMessage, type GenerationStatistics, type Model } from "$lib/types.js";
         | 
| 12 | 
             
            import { omit, snapshot } from "$lib/utils/object.svelte";
         | 
| 13 | 
            -
            import { models } from "./models.svelte";
         | 
| 14 | 
             
            import { DEFAULT_PROJECT_ID, ProjectEntity, projects } from "./projects.svelte";
         | 
| 15 | 
             
            import { token } from "./token.svelte";
         | 
| 16 | 
             
            // eslint-disable-next-line @typescript-eslint/ban-ts-comment
         | 
| @@ -103,6 +103,16 @@ export class ConversationClass { | |
| 103 | 
             
            		return this.#data;
         | 
| 104 | 
             
            	}
         | 
| 105 |  | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 106 | 
             
            	async update(data: Partial<ConversationEntityMembers>) {
         | 
| 107 | 
             
            		if (this.data.id === -1) return;
         | 
| 108 | 
             
            		// if (this.data.id === undefined) return;
         | 
|  | |
| 8 | 
             
            } from "$lib/components/inference-playground/utils.svelte.js";
         | 
| 9 | 
             
            import { addToast } from "$lib/components/toaster.svelte.js";
         | 
| 10 | 
             
            import { AbortManager } from "$lib/spells/abort-manager.svelte";
         | 
| 11 | 
            +
            import { PipelineTag, Provider, type ConversationMessage, type GenerationStatistics, type Model } from "$lib/types.js";
         | 
| 12 | 
             
            import { omit, snapshot } from "$lib/utils/object.svelte";
         | 
| 13 | 
            +
            import { models, structuredForbiddenProviders } from "./models.svelte";
         | 
| 14 | 
             
            import { DEFAULT_PROJECT_ID, ProjectEntity, projects } from "./projects.svelte";
         | 
| 15 | 
             
            import { token } from "./token.svelte";
         | 
| 16 | 
             
            // eslint-disable-next-line @typescript-eslint/ban-ts-comment
         | 
|  | |
| 103 | 
             
            		return this.#data;
         | 
| 104 | 
             
            	}
         | 
| 105 |  | 
| 106 | 
            +
            	get isStructuredOutputAllowed() {
         | 
| 107 | 
            +
            		const forbiddenProvider =
         | 
| 108 | 
            +
            			this.data.provider && structuredForbiddenProviders.includes(this.data.provider as Provider);
         | 
| 109 | 
            +
            		return !forbiddenProvider;
         | 
| 110 | 
            +
            	}
         | 
| 111 | 
            +
             | 
| 112 | 
            +
            	get isStructuredOutputEnabled() {
         | 
| 113 | 
            +
            		return this.isStructuredOutputAllowed && this.data.structuredOutput?.enabled;
         | 
| 114 | 
            +
            	}
         | 
| 115 | 
            +
             | 
| 116 | 
             
            	async update(data: Partial<ConversationEntityMembers>) {
         | 
| 117 | 
             
            		if (this.data.id === -1) return;
         | 
| 118 | 
             
            		// if (this.data.id === undefined) return;
         | 
    	
        src/lib/types.ts
    CHANGED
    
    | @@ -3,7 +3,7 @@ import type { ChatCompletionInputMessage } from "@huggingface/tasks"; | |
| 3 | 
             
            import typia from "typia";
         | 
| 4 | 
             
            import type { ConversationEntityMembers } from "./state/conversations.svelte";
         | 
| 5 |  | 
| 6 | 
            -
            export type ConversationMessage = Pick<ChatCompletionInputMessage, "name" | "role" | 
| 7 | 
             
            	content?: string;
         | 
| 8 | 
             
            	images?: string[];
         | 
| 9 | 
             
            };
         | 
|  | |
| 3 | 
             
            import typia from "typia";
         | 
| 4 | 
             
            import type { ConversationEntityMembers } from "./state/conversations.svelte";
         | 
| 5 |  | 
| 6 | 
            +
            export type ConversationMessage = Pick<ChatCompletionInputMessage, "name" | "role"> & {
         | 
| 7 | 
             
            	content?: string;
         | 
| 8 | 
             
            	images?: string[];
         | 
| 9 | 
             
            };
         | 
    	
        src/lib/utils/snippets.spec.ts
    ADDED
    
    | @@ -0,0 +1,399 @@ | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | 
|  | |
| 1 | 
            +
            /* eslint-disable no-useless-escape */
         | 
| 2 | 
            +
            import { describe, it, expect } from "vitest";
         | 
| 3 | 
            +
            import { modifySnippet } from "./snippets.js";
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            // Shared object to add, including various types
         | 
| 6 | 
            +
            const SHARED_OBJ_TO_ADD = {
         | 
| 7 | 
            +
            	maxTokens: 200,
         | 
| 8 | 
            +
            	frequencyPenalty: 0.3,
         | 
| 9 | 
            +
            	presencePenalty: null,
         | 
| 10 | 
            +
            	stopSequences: ["stop1", "stop2"],
         | 
| 11 | 
            +
            	complexObject: {
         | 
| 12 | 
            +
            		nestedKey: "nestedValue",
         | 
| 13 | 
            +
            		nestedNum: 123,
         | 
| 14 | 
            +
            		nestedBool: false,
         | 
| 15 | 
            +
            		nestedArr: ["a", 1, true, null],
         | 
| 16 | 
            +
            	},
         | 
| 17 | 
            +
            	anotherString: "test string",
         | 
| 18 | 
            +
            	isStreaming: true,
         | 
| 19 | 
            +
            };
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            // Helper to create regex for matching stringified values (JS/JSON and Python)
         | 
| 22 | 
            +
            // This version is updated to handle multi-line, indented ("pretty-printed") structures.
         | 
| 23 | 
            +
            function createValueRegex(value: unknown, language: "js" | "python" | "json"): string {
         | 
| 24 | 
            +
            	// Flexible whitespace: matches any number of spaces, tabs, or newlines.
         | 
| 25 | 
            +
            	const ws = "(?:\\s|\\n)*";
         | 
| 26 | 
            +
             | 
| 27 | 
            +
            	if (typeof value === "string") {
         | 
| 28 | 
            +
            		return `"${value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}"`; // Escape special regex chars in string
         | 
| 29 | 
            +
            	}
         | 
| 30 | 
            +
            	if (value === null) {
         | 
| 31 | 
            +
            		return language === "python" ? "None" : "null";
         | 
| 32 | 
            +
            	}
         | 
| 33 | 
            +
            	if (typeof value === "boolean") {
         | 
| 34 | 
            +
            		return language === "python" ? (value ? "True" : "False") : String(value);
         | 
| 35 | 
            +
            	}
         | 
| 36 | 
            +
            	if (typeof value === "number") {
         | 
| 37 | 
            +
            		return String(value);
         | 
| 38 | 
            +
            	}
         | 
| 39 | 
            +
            	if (Array.isArray(value)) {
         | 
| 40 | 
            +
            		if (value.length === 0) {
         | 
| 41 | 
            +
            			return `\\[${ws}\\]`; // Matches "[]" or "[ \n ]" etc.
         | 
| 42 | 
            +
            		}
         | 
| 43 | 
            +
            		const itemRegexes = value.map(item => createValueRegex(item, language)).join(`${ws},${ws}`);
         | 
| 44 | 
            +
            		return `\\[${ws}${itemRegexes}${ws}\\]`;
         | 
| 45 | 
            +
            	}
         | 
| 46 | 
            +
            	if (typeof value === "object" && value !== null) {
         | 
| 47 | 
            +
            		const entries = Object.entries(value);
         | 
| 48 | 
            +
            		if (entries.length === 0) {
         | 
| 49 | 
            +
            			return `\\{${ws}\\}`; // Matches "{}" or "{ \n }" etc.
         | 
| 50 | 
            +
            		}
         | 
| 51 | 
            +
            		const entriesRegex = entries
         | 
| 52 | 
            +
            			.map(([k, v]) => {
         | 
| 53 | 
            +
            				// In Python kwargs, keys are not quoted. This regex builder is for values that look like JSON/Python dicts.
         | 
| 54 | 
            +
            				// The main test loops handle Python kwarg key formatting separately.
         | 
| 55 | 
            +
            				const keyRegex = `"${k.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}"`;
         | 
| 56 | 
            +
            				const valueRegexPart = createValueRegex(v, language);
         | 
| 57 | 
            +
            				return `${keyRegex}${ws}:${ws}${valueRegexPart}`;
         | 
| 58 | 
            +
            			})
         | 
| 59 | 
            +
            			.join(`${ws},${ws}`); // Join key-value pairs with a comma and flexible whitespace
         | 
| 60 | 
            +
            		return `\\{${ws}${entriesRegex}${ws}\\}`;
         | 
| 61 | 
            +
            	}
         | 
| 62 | 
            +
            	return String(value).replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // Fallback for other primitive types
         | 
| 63 | 
            +
            }
         | 
| 64 | 
            +
             | 
| 65 | 
            +
            type TestCase = {
         | 
| 66 | 
            +
            	snippet: string;
         | 
| 67 | 
            +
            	objToAdd: Record<string, unknown>;
         | 
| 68 | 
            +
            	description: string; // Optional description for the test
         | 
| 69 | 
            +
            	pythonSyntax?: "kwargs" | "dict"; // Add this field
         | 
| 70 | 
            +
            };
         | 
| 71 | 
            +
             | 
| 72 | 
            +
            // JavaScript/TypeScript test cases
         | 
| 73 | 
            +
            const jsTestCases: TestCase[] = [
         | 
| 74 | 
            +
            	{
         | 
| 75 | 
            +
            		description: "JavaScript InferenceClient with chatCompletionStream",
         | 
| 76 | 
            +
            		snippet: `
         | 
| 77 | 
            +
            import { InferenceClient } from "@huggingface/inference";
         | 
| 78 | 
            +
             | 
| 79 | 
            +
            const client = new InferenceClient("YOUR_HF_TOKEN");
         | 
| 80 | 
            +
             | 
| 81 | 
            +
            let out = "";
         | 
| 82 | 
            +
             | 
| 83 | 
            +
            const stream = client.chatCompletionStream({
         | 
| 84 | 
            +
                provider: "cerebras",
         | 
| 85 | 
            +
                model: "Qwen/Qwen3-32B",
         | 
| 86 | 
            +
                messages: [
         | 
| 87 | 
            +
                    {
         | 
| 88 | 
            +
                        role: "user",
         | 
| 89 | 
            +
                        content: "What is the capital of Brazil?",
         | 
| 90 | 
            +
                    },
         | 
| 91 | 
            +
                    {
         | 
| 92 | 
            +
                        content: "{\"answer_the_question\": 5, \"how_many_legs_does_a_dog_have\": true, \"answer_the_question_HERE\": \"elderberry\"}",
         | 
| 93 | 
            +
                        role: "assistant",
         | 
| 94 | 
            +
                    },
         | 
| 95 | 
            +
                ],
         | 
| 96 | 
            +
                temperature: 0.5,
         | 
| 97 | 
            +
                top_p: 0.7,
         | 
| 98 | 
            +
            });
         | 
| 99 | 
            +
             | 
| 100 | 
            +
            for await (const chunk of stream) {
         | 
| 101 | 
            +
              if (chunk.choices && chunk.choices.length > 0) {
         | 
| 102 | 
            +
                const newContent = chunk.choices[0].delta.content;
         | 
| 103 | 
            +
                out += newContent;
         | 
| 104 | 
            +
                console.log(newContent);
         | 
| 105 | 
            +
              }
         | 
| 106 | 
            +
            }
         | 
| 107 | 
            +
            `,
         | 
| 108 | 
            +
            		objToAdd: SHARED_OBJ_TO_ADD,
         | 
| 109 | 
            +
            	},
         | 
| 110 | 
            +
            	{
         | 
| 111 | 
            +
            		description: "JavaScript InferenceClient without streaming",
         | 
| 112 | 
            +
            		snippet: `import { InferenceClient } from "@huggingface/inference";
         | 
| 113 | 
            +
             | 
| 114 | 
            +
            const client = new InferenceClient("YOUR_HF_TOKEN");
         | 
| 115 | 
            +
             | 
| 116 | 
            +
            const chatCompletion = await client.chatCompletion({
         | 
| 117 | 
            +
                provider: "cohere",
         | 
| 118 | 
            +
                model: "CohereLabs/c4ai-command-r-plus",
         | 
| 119 | 
            +
                messages: [
         | 
| 120 | 
            +
                    {
         | 
| 121 | 
            +
                        role: "user",
         | 
| 122 | 
            +
                        content: "hey, how are you???",
         | 
| 123 | 
            +
                    },
         | 
| 124 | 
            +
                    {
         | 
| 125 | 
            +
                        role: "assistant",
         | 
| 126 | 
            +
                        content: "{ \"answer_the_question\": \n\n\n\n            \n           \n\n-1.175\n\n\n\n, \n \"how_many_legs_does_a_dog_have\": \nfalse, \n\n\"answer_the_question_HERE\": \n\n\"A\"\n\n\n}",
         | 
| 127 | 
            +
                    },
         | 
| 128 | 
            +
                ],
         | 
| 129 | 
            +
                temperature: 0.5,
         | 
| 130 | 
            +
                top_p: 0.7,
         | 
| 131 | 
            +
            });
         | 
| 132 | 
            +
             | 
| 133 | 
            +
            console.log(chatCompletion.choices[0].message);`,
         | 
| 134 | 
            +
            		objToAdd: SHARED_OBJ_TO_ADD,
         | 
| 135 | 
            +
            	},
         | 
| 136 | 
            +
            	{
         | 
| 137 | 
            +
            		description: "JavaScript with OpenAI library",
         | 
| 138 | 
            +
            		snippet: `import { OpenAI } from "openai";
         | 
| 139 | 
            +
             | 
| 140 | 
            +
            const client = new OpenAI({
         | 
| 141 | 
            +
            	baseURL: "https://api.cerebras.ai/v1",
         | 
| 142 | 
            +
            	apiKey: "YOUR_HF_TOKEN",
         | 
| 143 | 
            +
            });
         | 
| 144 | 
            +
             | 
| 145 | 
            +
            const stream = await client.chat.completions.create({
         | 
| 146 | 
            +
                model: "qwen-3-32b",
         | 
| 147 | 
            +
                messages: [
         | 
| 148 | 
            +
                    {
         | 
| 149 | 
            +
                        role: "user",
         | 
| 150 | 
            +
                        content: "What is the capital of Brazil?",
         | 
| 151 | 
            +
                    },
         | 
| 152 | 
            +
                    {
         | 
| 153 | 
            +
                        content: "{\"answer_the_question\": 5, \"how_many_legs_does_a_dog_have\": true, \"answer_the_question_HERE\": \"elderberry\"}",
         | 
| 154 | 
            +
                        role: "assistant",
         | 
| 155 | 
            +
                    },
         | 
| 156 | 
            +
                ],
         | 
| 157 | 
            +
                temperature: 0.5,
         | 
| 158 | 
            +
                top_p: 0.7,
         | 
| 159 | 
            +
                stream: true,
         | 
| 160 | 
            +
            });
         | 
| 161 | 
            +
             | 
| 162 | 
            +
            for await (const chunk of stream) {
         | 
| 163 | 
            +
                process.stdout.write(chunk.choices[0]?.delta?.content || "");
         | 
| 164 | 
            +
            }`,
         | 
| 165 | 
            +
            		objToAdd: SHARED_OBJ_TO_ADD,
         | 
| 166 | 
            +
            	},
         | 
| 167 | 
            +
            ];
         | 
| 168 | 
            +
             | 
| 169 | 
            +
            // Python test cases
         | 
| 170 | 
            +
            const pythonTestCases: TestCase[] = [
         | 
| 171 | 
            +
            	{
         | 
| 172 | 
            +
            		description: "Python HuggingFace client",
         | 
| 173 | 
            +
            		snippet: `from huggingface_hub import InferenceClient
         | 
| 174 | 
            +
             | 
| 175 | 
            +
            client = InferenceClient(
         | 
| 176 | 
            +
                provider="cerebras",
         | 
| 177 | 
            +
                api_key="YOUR_HF_TOKEN",
         | 
| 178 | 
            +
            )
         | 
| 179 | 
            +
             | 
| 180 | 
            +
            stream = client.chat.completions.create(
         | 
| 181 | 
            +
                model="Qwen/Qwen3-32B",
         | 
| 182 | 
            +
                messages=[
         | 
| 183 | 
            +
                    {
         | 
| 184 | 
            +
                        "role": "user",
         | 
| 185 | 
            +
                        "content": "What is the capital of Brazil?"
         | 
| 186 | 
            +
                    },
         | 
| 187 | 
            +
                    {
         | 
| 188 | 
            +
                        "content": "{\"answer_the_question\": 5, \"how_many_legs_does_a_dog_have\": true, \"answer_the_question_HERE\": \"elderberry\"}",
         | 
| 189 | 
            +
                        "role": "assistant"
         | 
| 190 | 
            +
                    }
         | 
| 191 | 
            +
                ],
         | 
| 192 | 
            +
                temperature=0.5,
         | 
| 193 | 
            +
                top_p=0.7,
         | 
| 194 | 
            +
                stream=True,
         | 
| 195 | 
            +
            )
         | 
| 196 | 
            +
             | 
| 197 | 
            +
            for chunk in stream:
         | 
| 198 | 
            +
                print(chunk.choices[0].delta.content, end="")`,
         | 
| 199 | 
            +
            		objToAdd: SHARED_OBJ_TO_ADD, // Use shared object
         | 
| 200 | 
            +
            		pythonSyntax: "kwargs",
         | 
| 201 | 
            +
            	},
         | 
| 202 | 
            +
            	{
         | 
| 203 | 
            +
            		description: "Python with Requests",
         | 
| 204 | 
            +
            		snippet: `import json
         | 
| 205 | 
            +
            import requests
         | 
| 206 | 
            +
             | 
| 207 | 
            +
            API_URL = "https://api.cerebras.ai/v1/chat/completions"
         | 
| 208 | 
            +
            headers = {
         | 
| 209 | 
            +
                "Authorization": "Bearer YOUR_HF_TOKEN",
         | 
| 210 | 
            +
            }
         | 
| 211 | 
            +
             | 
| 212 | 
            +
            def query(payload):
         | 
| 213 | 
            +
                response = requests.post(API_URL, headers=headers, json=payload, stream=True)
         | 
| 214 | 
            +
                for line in response.iter_lines():
         | 
| 215 | 
            +
                    if not line.startswith(b"data:"):
         | 
| 216 | 
            +
                        continue
         | 
| 217 | 
            +
                    if line.strip() == b"data: [DONE]":
         | 
| 218 | 
            +
                        return
         | 
| 219 | 
            +
                    yield json.loads(line.decode("utf-8").lstrip("data:").rstrip("/n"))
         | 
| 220 | 
            +
             | 
| 221 | 
            +
            chunks = query({
         | 
| 222 | 
            +
                "messages": [
         | 
| 223 | 
            +
                    {
         | 
| 224 | 
            +
                        "role": "user",
         | 
| 225 | 
            +
                        "content": "What is the capital of Brazil?"
         | 
| 226 | 
            +
                    },
         | 
| 227 | 
            +
                    {
         | 
| 228 | 
            +
                        "content": "{\"answer_the_question\": 5, \"how_many_legs_does_a_dog_have\": true, \"answer_the_question_HERE\": \"elderberry\"}",
         | 
| 229 | 
            +
                        "role": "assistant"
         | 
| 230 | 
            +
                    }
         | 
| 231 | 
            +
                ],
         | 
| 232 | 
            +
                "temperature": 0.5,
         | 
| 233 | 
            +
                "top_p": 0.7,
         | 
| 234 | 
            +
                "model": "qwen-3-32b",
         | 
| 235 | 
            +
                "stream": True,
         | 
| 236 | 
            +
            })
         | 
| 237 | 
            +
             | 
| 238 | 
            +
            for chunk in chunks:
         | 
| 239 | 
            +
                print(chunk["choices"][0]["delta"]["content"], end="")`,
         | 
| 240 | 
            +
            		objToAdd: SHARED_OBJ_TO_ADD, // Use shared object
         | 
| 241 | 
            +
            		pythonSyntax: "dict",
         | 
| 242 | 
            +
            	},
         | 
| 243 | 
            +
            	{
         | 
| 244 | 
            +
            		description: "Python OpenAI client",
         | 
| 245 | 
            +
            		snippet: `from openai import OpenAI
         | 
| 246 | 
            +
             | 
| 247 | 
            +
            client = OpenAI(
         | 
| 248 | 
            +
                base_url="https://api.cerebras.ai/v1",
         | 
| 249 | 
            +
                api_key="YOUR_HF_TOKEN",
         | 
| 250 | 
            +
            )
         | 
| 251 | 
            +
             | 
| 252 | 
            +
            stream = client.chat.completions.create(
         | 
| 253 | 
            +
                model="qwen-3-32b",
         | 
| 254 | 
            +
                messages=[
         | 
| 255 | 
            +
                    {
         | 
| 256 | 
            +
                        "role": "user",
         | 
| 257 | 
            +
                        "content": "What is the capital of Brazil?"
         | 
| 258 | 
            +
                    },
         | 
| 259 | 
            +
                    {
         | 
| 260 | 
            +
                        "content": "{\"answer_the_question\": 5, \"how_many_legs_does_a_dog_have\": true, \"answer_the_question_HERE\": \"elderberry\"}",
         | 
| 261 | 
            +
                        "role": "assistant"
         | 
| 262 | 
            +
                    }
         | 
| 263 | 
            +
                ],
         | 
| 264 | 
            +
                temperature=0.5,
         | 
| 265 | 
            +
                top_p=0.7,
         | 
| 266 | 
            +
                stream=True,
         | 
| 267 | 
            +
            )
         | 
| 268 | 
            +
             | 
| 269 | 
            +
            for chunk in stream:
         | 
| 270 | 
            +
                print(chunk.choices[0].delta.content, end="")`,
         | 
| 271 | 
            +
            		objToAdd: SHARED_OBJ_TO_ADD, // Use shared object
         | 
| 272 | 
            +
            		pythonSyntax: "kwargs",
         | 
| 273 | 
            +
            	},
         | 
| 274 | 
            +
            	// Add more Python test cases as needed
         | 
| 275 | 
            +
            ];
         | 
| 276 | 
            +
             | 
| 277 | 
            +
            // Shell/curl test cases
         | 
| 278 | 
            +
            const shellTestCases: TestCase[] = [
         | 
| 279 | 
            +
            	{
         | 
| 280 | 
            +
            		description: "curl request to Cerebras API",
         | 
| 281 | 
            +
            		snippet: `
         | 
| 282 | 
            +
            curl https://api.cerebras.ai/v1/chat/completions \\
         | 
| 283 | 
            +
                -H 'Authorization: Bearer YOUR_HF_TOKEN' \\
         | 
| 284 | 
            +
                -H 'Content-Type: application/json' \\
         | 
| 285 | 
            +
                -d '{
         | 
| 286 | 
            +
                    "messages": [
         | 
| 287 | 
            +
                        {
         | 
| 288 | 
            +
                            "role": "user",
         | 
| 289 | 
            +
                            "content": "What is the capital of Brazil?"
         | 
| 290 | 
            +
                        },
         | 
| 291 | 
            +
                        {
         | 
| 292 | 
            +
                            "content": "{\"answer_the_question\": 5, \"how_many_legs_does_a_dog_have\": true, \"answer_the_question_HERE\": \"elderberry\"}",
         | 
| 293 | 
            +
                            "role": "assistant"
         | 
| 294 | 
            +
                        }
         | 
| 295 | 
            +
                    ],
         | 
| 296 | 
            +
                    "temperature": 0.5,
         | 
| 297 | 
            +
                    "top_p": 0.7,
         | 
| 298 | 
            +
                    "model": "qwen-3-32b",
         | 
| 299 | 
            +
                    "stream": false
         | 
| 300 | 
            +
                }'
         | 
| 301 | 
            +
            `,
         | 
| 302 | 
            +
            		objToAdd: SHARED_OBJ_TO_ADD, // Use shared object
         | 
| 303 | 
            +
            	},
         | 
| 304 | 
            +
            	// Add more shell test cases as needed
         | 
| 305 | 
            +
            ];
         | 
| 306 | 
            +
             | 
| 307 | 
            +
            describe("modifySnippet", () => {
         | 
| 308 | 
            +
            	// Test JavaScript/TypeScript snippets
         | 
| 309 | 
            +
            	describe("JavaScript/TypeScript", () => {
         | 
| 310 | 
            +
            		jsTestCases.forEach((testCase, index) => {
         | 
| 311 | 
            +
            			it(`should add properties to JS snippet #${index + 1}: ${testCase.description}`, () => {
         | 
| 312 | 
            +
            				const result = modifySnippet(testCase.snippet, testCase.objToAdd);
         | 
| 313 | 
            +
             | 
| 314 | 
            +
            				// Check that all new properties are added with correct JS syntax
         | 
| 315 | 
            +
            				Object.entries(testCase.objToAdd).forEach(([key, value]) => {
         | 
| 316 | 
            +
            					// For JS, keys are typically camelCase or as-is from the object.
         | 
| 317 | 
            +
            					// The value needs to be regex-matched due to potential complex structures.
         | 
| 318 | 
            +
            					const valueRegexStr = createValueRegex(value, "js");
         | 
| 319 | 
            +
            					// Regex to match 'key: value' or '"key": value' (for keys that might be quoted if they have special chars, though not in SHARED_OBJ_TO_ADD)
         | 
| 320 | 
            +
            					// Allowing for flexible spacing around colon.
         | 
| 321 | 
            +
            					const propertyPattern = new RegExp(`"${key}"\\s*:\\s*${valueRegexStr}|${key}\\s*:\\s*${valueRegexStr}`);
         | 
| 322 | 
            +
            					expect(result).toMatch(propertyPattern);
         | 
| 323 | 
            +
            				});
         | 
| 324 | 
            +
             | 
| 325 | 
            +
            				// Check that original properties are preserved
         | 
| 326 | 
            +
            				expect(result).toContain("temperature: 0.5");
         | 
| 327 | 
            +
            				expect(result).toContain("top_p: 0.7");
         | 
| 328 | 
            +
             | 
| 329 | 
            +
            				// Check that the structure is maintained
         | 
| 330 | 
            +
            				expect(result.includes("{") && result.includes("}")).toBeTruthy();
         | 
| 331 | 
            +
            			});
         | 
| 332 | 
            +
            		});
         | 
| 333 | 
            +
            	});
         | 
| 334 | 
            +
             | 
| 335 | 
            +
            	// Test Python snippets
         | 
| 336 | 
            +
            	describe("Python", () => {
         | 
| 337 | 
            +
            		pythonTestCases.forEach((testCase, index) => {
         | 
| 338 | 
            +
            			it(`should add properties to Python snippet #${index + 1}: ${testCase.description}`, () => {
         | 
| 339 | 
            +
            				const result = modifySnippet(testCase.snippet, testCase.objToAdd);
         | 
| 340 | 
            +
             | 
| 341 | 
            +
            				// Check that all new properties are added with correct Python syntax
         | 
| 342 | 
            +
            				Object.entries(testCase.objToAdd).forEach(([key, value]) => {
         | 
| 343 | 
            +
            					const valueRegexStr = createValueRegex(value, "python");
         | 
| 344 | 
            +
            					let propertyPattern;
         | 
| 345 | 
            +
             | 
| 346 | 
            +
            					if (testCase.pythonSyntax === "dict") {
         | 
| 347 | 
            +
            						// Python dict: "key": value
         | 
| 348 | 
            +
            						propertyPattern = new RegExp(`"${key}"\\s*:\\s*${valueRegexStr}`);
         | 
| 349 | 
            +
            					} else {
         | 
| 350 | 
            +
            						// Python kwargs: key=value
         | 
| 351 | 
            +
            						// Convert camelCase keys from SHARED_OBJ_TO_ADD to snake_case for Python kwargs
         | 
| 352 | 
            +
            						const snakeKey = key.replace(/([A-Z])/g, "_$1").toLowerCase();
         | 
| 353 | 
            +
            						propertyPattern = new RegExp(`${snakeKey}\\s*=\\s*${valueRegexStr}`);
         | 
| 354 | 
            +
            					}
         | 
| 355 | 
            +
            					expect(result).toMatch(propertyPattern);
         | 
| 356 | 
            +
            				});
         | 
| 357 | 
            +
             | 
| 358 | 
            +
            				// Check that original properties are preserved
         | 
| 359 | 
            +
            				if (testCase.pythonSyntax === "dict") {
         | 
| 360 | 
            +
            					expect(result).toContain('"temperature": 0.5');
         | 
| 361 | 
            +
            					expect(result).toContain('"top_p": 0.7');
         | 
| 362 | 
            +
            					expect(result.includes("{") && result.includes("}")).toBeTruthy();
         | 
| 363 | 
            +
            				} else {
         | 
| 364 | 
            +
            					// kwargs
         | 
| 365 | 
            +
            					expect(result).toContain("temperature=0.5");
         | 
| 366 | 
            +
            					expect(result).toContain("top_p=0.7");
         | 
| 367 | 
            +
            					expect(result.includes("(") && result.includes(")")).toBeTruthy();
         | 
| 368 | 
            +
            				}
         | 
| 369 | 
            +
            			});
         | 
| 370 | 
            +
            		});
         | 
| 371 | 
            +
            	});
         | 
| 372 | 
            +
             | 
| 373 | 
            +
            	// Test Shell/curl snippets
         | 
| 374 | 
            +
            	describe("Shell/curl", () => {
         | 
| 375 | 
            +
            		shellTestCases.forEach((testCase, index) => {
         | 
| 376 | 
            +
            			it(`should add properties to shell snippet #${index + 1}: ${testCase.description}`, () => {
         | 
| 377 | 
            +
            				const result = modifySnippet(testCase.snippet, testCase.objToAdd);
         | 
| 378 | 
            +
             | 
| 379 | 
            +
            				// Check that all new properties are added with correct JSON syntax
         | 
| 380 | 
            +
            				Object.entries(testCase.objToAdd).forEach(([key, value]) => {
         | 
| 381 | 
            +
            					// For shell/JSON, keys are typically snake_case or as-is.
         | 
| 382 | 
            +
            					// Values need to be regex-matched.
         | 
| 383 | 
            +
            					// Convert camelCase keys from SHARED_OBJ_TO_ADD to snake_case for JSON
         | 
| 384 | 
            +
            					const snakeKey = key.replace(/([A-Z])/g, "_$1").toLowerCase();
         | 
| 385 | 
            +
            					const valueRegexStr = createValueRegex(value, "json");
         | 
| 386 | 
            +
            					const propertyPattern = new RegExp(`"${snakeKey}"\\s*:\\s*${valueRegexStr}`);
         | 
| 387 | 
            +
            					expect(result).toMatch(propertyPattern);
         | 
| 388 | 
            +
            				});
         | 
| 389 | 
            +
             | 
| 390 | 
            +
            				// Check that original properties are preserved
         | 
| 391 | 
            +
            				expect(result).toContain(`"temperature": 0.5`);
         | 
| 392 | 
            +
            				expect(result).toContain(`"top_p": 0.7`);
         | 
| 393 | 
            +
             | 
| 394 | 
            +
            				// Check that the structure is maintained
         | 
| 395 | 
            +
            				expect(result.includes("{") && result.includes("}")).toBeTruthy();
         | 
| 396 | 
            +
            			});
         | 
| 397 | 
            +
            		});
         | 
| 398 | 
            +
            	});
         | 
| 399 | 
            +
            });
         | 
    	
        src/lib/utils/snippets.ts
    ADDED
    
    | @@ -0,0 +1,294 @@ | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | 
|  | |
| 1 | 
            +
            const INDENT_STEP = "    "; // 4 spaces for indentation
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            function stringifyJsJsonRecursive(value: unknown, currentIndent: string): string {
         | 
| 4 | 
            +
            	if (typeof value === "string") return `"${value}"`;
         | 
| 5 | 
            +
            	if (value === null) return "null";
         | 
| 6 | 
            +
            	if (typeof value === "boolean" || typeof value === "number") return String(value);
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            	if (typeof value === "object" && value !== null) {
         | 
| 9 | 
            +
            		const nextIndent = currentIndent + INDENT_STEP;
         | 
| 10 | 
            +
            		if (Array.isArray(value)) {
         | 
| 11 | 
            +
            			if (value.length === 0) return "[]";
         | 
| 12 | 
            +
            			const items = value.map(v => stringifyJsJsonRecursive(v, nextIndent));
         | 
| 13 | 
            +
            			return "[\n" + items.map(item => nextIndent + item).join(",\n") + "\n" + currentIndent + "]";
         | 
| 14 | 
            +
            		}
         | 
| 15 | 
            +
             | 
| 16 | 
            +
            		const entries = Object.entries(value);
         | 
| 17 | 
            +
            		if (entries.length === 0) return "{}";
         | 
| 18 | 
            +
            		const properties = entries.map(([k, v]) => `${nextIndent}"${k}": ${stringifyJsJsonRecursive(v, nextIndent)}`);
         | 
| 19 | 
            +
             | 
| 20 | 
            +
            		return "{\n" + properties.join(",\n") + "\n" + currentIndent + "}";
         | 
| 21 | 
            +
            	}
         | 
| 22 | 
            +
            	return String(value); // Fallback for other types
         | 
| 23 | 
            +
            }
         | 
| 24 | 
            +
             | 
| 25 | 
            +
            function formatJsJsonValue(value: unknown, baseIndent: string): string {
         | 
| 26 | 
            +
            	return stringifyJsJsonRecursive(value, baseIndent);
         | 
| 27 | 
            +
            }
         | 
| 28 | 
            +
             | 
| 29 | 
            +
            function stringifyPythonRecursive(value: unknown, currentIndent: string): string {
         | 
| 30 | 
            +
            	if (typeof value === "string") return `"${value}"`;
         | 
| 31 | 
            +
            	if (typeof value === "boolean") return value ? "True" : "False";
         | 
| 32 | 
            +
            	if (value === null) return "None";
         | 
| 33 | 
            +
            	if (typeof value === "number") return String(value);
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            	if (typeof value === "object" && value !== null) {
         | 
| 36 | 
            +
            		const nextIndent = currentIndent + INDENT_STEP;
         | 
| 37 | 
            +
            		if (Array.isArray(value)) {
         | 
| 38 | 
            +
            			if (value.length === 0) return "[]";
         | 
| 39 | 
            +
            			const items = value.map(v => stringifyPythonRecursive(v, nextIndent));
         | 
| 40 | 
            +
            			return "[\n" + items.map(item => nextIndent + item).join(",\n") + "\n" + currentIndent + "]";
         | 
| 41 | 
            +
            		}
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            		const entries = Object.entries(value);
         | 
| 44 | 
            +
            		if (entries.length === 0) return "{}";
         | 
| 45 | 
            +
            		// In Python, dictionary keys are typically strings.
         | 
| 46 | 
            +
            		const properties = entries.map(([k, v]) => `${nextIndent}"${k}": ${stringifyPythonRecursive(v, nextIndent)}`);
         | 
| 47 | 
            +
             | 
| 48 | 
            +
            		return "{\n" + properties.join(",\n") + "\n" + currentIndent + "}";
         | 
| 49 | 
            +
            	}
         | 
| 50 | 
            +
            	return String(value); // Fallback
         | 
| 51 | 
            +
            }
         | 
| 52 | 
            +
             | 
| 53 | 
            +
            function formatPythonValue(value: unknown, baseIndent: string): string {
         | 
| 54 | 
            +
            	return stringifyPythonRecursive(value, baseIndent);
         | 
| 55 | 
            +
            }
         | 
| 56 | 
            +
             | 
| 57 | 
            +
            /**
         | 
| 58 | 
            +
             * Inserts new properties into a code snippet block (like a JS object or Python dict).
         | 
| 59 | 
            +
             */
         | 
| 60 | 
            +
            function insertPropertiesInternal(
         | 
| 61 | 
            +
            	snippet: string,
         | 
| 62 | 
            +
            	newProperties: Record<string, unknown>,
         | 
| 63 | 
            +
            	blockStartMarker: RegExp, // Regex to find the character *opening* the block (e.g., '{' or '(')
         | 
| 64 | 
            +
            	openChar: string, // The opening character, e.g., '{' or '('
         | 
| 65 | 
            +
            	closeChar: string, // The closing character, e.g., '}' or ')'
         | 
| 66 | 
            +
            	propFormatter: (key: string, formattedValue: string, indent: string) => string,
         | 
| 67 | 
            +
            	valueFormatter: (value: unknown, baseIndent: string) => string
         | 
| 68 | 
            +
            ): string {
         | 
| 69 | 
            +
            	if (Object.keys(newProperties).length === 0) {
         | 
| 70 | 
            +
            		return snippet;
         | 
| 71 | 
            +
            	}
         | 
| 72 | 
            +
             | 
| 73 | 
            +
            	const match = snippet.match(blockStartMarker);
         | 
| 74 | 
            +
            	// match.index is the start of the whole marker, e.g. "client.chatCompletionStream("
         | 
| 75 | 
            +
            	// We need the index of the openChar itself.
         | 
| 76 | 
            +
            	if (!match || typeof match.index !== "number") {
         | 
| 77 | 
            +
            		return snippet;
         | 
| 78 | 
            +
            	}
         | 
| 79 | 
            +
             | 
| 80 | 
            +
            	const openCharIndex = snippet.indexOf(openChar, match.index + match[0].length - 1);
         | 
| 81 | 
            +
            	if (openCharIndex === -1) {
         | 
| 82 | 
            +
            		return snippet;
         | 
| 83 | 
            +
            	}
         | 
| 84 | 
            +
             | 
| 85 | 
            +
            	let balance = 1;
         | 
| 86 | 
            +
            	let closeCharIndex = -1;
         | 
| 87 | 
            +
            	for (let i = openCharIndex + 1; i < snippet.length; i++) {
         | 
| 88 | 
            +
            		if (snippet[i] === openChar) {
         | 
| 89 | 
            +
            			balance++;
         | 
| 90 | 
            +
            		} else if (snippet[i] === closeChar) {
         | 
| 91 | 
            +
            			balance--;
         | 
| 92 | 
            +
            		}
         | 
| 93 | 
            +
            		if (balance === 0) {
         | 
| 94 | 
            +
            			closeCharIndex = i;
         | 
| 95 | 
            +
            			break;
         | 
| 96 | 
            +
            		}
         | 
| 97 | 
            +
            	}
         | 
| 98 | 
            +
             | 
| 99 | 
            +
            	if (closeCharIndex === -1) {
         | 
| 100 | 
            +
            		return snippet; // Malformed or not found
         | 
| 101 | 
            +
            	}
         | 
| 102 | 
            +
             | 
| 103 | 
            +
            	const contentBeforeBlock = snippet.substring(0, openCharIndex + 1);
         | 
| 104 | 
            +
            	const currentContent = snippet.substring(openCharIndex + 1, closeCharIndex);
         | 
| 105 | 
            +
            	const contentAfterBlock = snippet.substring(closeCharIndex);
         | 
| 106 | 
            +
             | 
| 107 | 
            +
            	// Determine indentation
         | 
| 108 | 
            +
            	let indent = "";
         | 
| 109 | 
            +
            	const lines = currentContent.split("\n");
         | 
| 110 | 
            +
            	if (lines.length > 1) {
         | 
| 111 | 
            +
            		for (const line of lines) {
         | 
| 112 | 
            +
            			const lineIndentMatch = line.match(/^(\s+)\S/);
         | 
| 113 | 
            +
            			if (lineIndentMatch) {
         | 
| 114 | 
            +
            				indent = lineIndentMatch[1] ?? "";
         | 
| 115 | 
            +
            				break;
         | 
| 116 | 
            +
            			}
         | 
| 117 | 
            +
            		}
         | 
| 118 | 
            +
            	}
         | 
| 119 | 
            +
            	if (!indent) {
         | 
| 120 | 
            +
            		// If no indent found, or content is empty/single line, derive from openChar line
         | 
| 121 | 
            +
            		const lineOfOpenCharStart = snippet.lastIndexOf("\n", openCharIndex) + 1;
         | 
| 122 | 
            +
            		const lineOfOpenChar = snippet.substring(lineOfOpenCharStart, openCharIndex);
         | 
| 123 | 
            +
            		const openCharLineIndentMatch = lineOfOpenChar.match(/^(\s*)/);
         | 
| 124 | 
            +
            		indent = (openCharLineIndentMatch ? openCharLineIndentMatch[1] : "") + "    "; // Default to 4 spaces more
         | 
| 125 | 
            +
            	}
         | 
| 126 | 
            +
             | 
| 127 | 
            +
            	let newPropsStr = "";
         | 
| 128 | 
            +
            	Object.entries(newProperties).forEach(([key, value]) => {
         | 
| 129 | 
            +
            		newPropsStr += propFormatter(key, valueFormatter(value, indent), indent);
         | 
| 130 | 
            +
            	});
         | 
| 131 | 
            +
             | 
| 132 | 
            +
            	const trimmedOriginalContent = currentContent.trim();
         | 
| 133 | 
            +
            	let combinedContent;
         | 
| 134 | 
            +
             | 
| 135 | 
            +
            	if (trimmedOriginalContent) {
         | 
| 136 | 
            +
            		// There was actual non-whitespace content.
         | 
| 137 | 
            +
            		// Preserve original currentContent structure as much as possible.
         | 
| 138 | 
            +
            		// Find the end of the textual part of currentContent (before any pure trailing whitespace).
         | 
| 139 | 
            +
            		let endOfTextualPart = currentContent.length;
         | 
| 140 | 
            +
            		while (endOfTextualPart > 0 && /\s/.test(currentContent.charAt(endOfTextualPart - 1))) {
         | 
| 141 | 
            +
            			endOfTextualPart--;
         | 
| 142 | 
            +
            		}
         | 
| 143 | 
            +
            		const textualPartOfCurrentContent = currentContent.substring(0, endOfTextualPart);
         | 
| 144 | 
            +
            		const trailingWhitespaceOfCurrentContent = currentContent.substring(endOfTextualPart);
         | 
| 145 | 
            +
             | 
| 146 | 
            +
            		let processedTextualPart = textualPartOfCurrentContent;
         | 
| 147 | 
            +
            		if (processedTextualPart && !processedTextualPart.endsWith(",")) {
         | 
| 148 | 
            +
            			processedTextualPart += ",";
         | 
| 149 | 
            +
            		}
         | 
| 150 | 
            +
             | 
| 151 | 
            +
            		// Add a newline separator if the original trailing whitespace doesn't end with one.
         | 
| 152 | 
            +
            		const separator =
         | 
| 153 | 
            +
            			trailingWhitespaceOfCurrentContent.endsWith("\n") || trailingWhitespaceOfCurrentContent.endsWith("\r")
         | 
| 154 | 
            +
            				? ""
         | 
| 155 | 
            +
            				: "\n";
         | 
| 156 | 
            +
            		combinedContent = processedTextualPart + trailingWhitespaceOfCurrentContent + separator + newPropsStr;
         | 
| 157 | 
            +
            	} else {
         | 
| 158 | 
            +
            		// currentContent was empty or contained only whitespace.
         | 
| 159 | 
            +
            		// Check if the original block opening (e.g., '{' or '(') was immediately followed by a newline.
         | 
| 160 | 
            +
            		const openCharFollowedByNewline =
         | 
| 161 | 
            +
            			snippet[openCharIndex + 1] === "\n" ||
         | 
| 162 | 
            +
            			(snippet[openCharIndex + 1] === "\r" && snippet[openCharIndex + 2] === "\n");
         | 
| 163 | 
            +
            		if (openCharFollowedByNewline) {
         | 
| 164 | 
            +
            			combinedContent = newPropsStr; // newPropsStr already starts with indent
         | 
| 165 | 
            +
            		} else {
         | 
| 166 | 
            +
            			combinedContent = "\n" + newPropsStr; // Add a newline first, then newPropsStr
         | 
| 167 | 
            +
            		}
         | 
| 168 | 
            +
            	}
         | 
| 169 | 
            +
             | 
| 170 | 
            +
            	// Remove the trailing comma (and its trailing whitespace/newline) from the last property added.
         | 
| 171 | 
            +
            	combinedContent = combinedContent.replace(/,\s*$/, "");
         | 
| 172 | 
            +
             | 
| 173 | 
            +
            	// Ensure the block content ends with a newline, and the closing character is on its own line, indented.
         | 
| 174 | 
            +
            	if (combinedContent.trim()) {
         | 
| 175 | 
            +
            		// If there's any actual content in the block
         | 
| 176 | 
            +
            		if (!combinedContent.endsWith("\n")) {
         | 
| 177 | 
            +
            			combinedContent += "\n";
         | 
| 178 | 
            +
            		}
         | 
| 179 | 
            +
            		// Determine the base indent for the closing character's line
         | 
| 180 | 
            +
            		const lineOfOpenCharStart = snippet.lastIndexOf("\n", openCharIndex) + 1;
         | 
| 181 | 
            +
            		const openCharLine = snippet.substring(lineOfOpenCharStart, openCharIndex);
         | 
| 182 | 
            +
            		const baseIndentMatch = openCharLine.match(/^(\s*)/);
         | 
| 183 | 
            +
            		const baseIndent = baseIndentMatch ? baseIndentMatch[1] : "";
         | 
| 184 | 
            +
            		combinedContent += baseIndent;
         | 
| 185 | 
            +
            	} else {
         | 
| 186 | 
            +
            		// Block is effectively empty (e.g., was {} and no properties added, or newPropsStr was empty - though current logic prevents this if newProperties is not empty).
         | 
| 187 | 
            +
            		// Format as an empty block with the closing char on a new, indented line.
         | 
| 188 | 
            +
            		const lineOfOpenCharStart = snippet.lastIndexOf("\n", openCharIndex) + 1;
         | 
| 189 | 
            +
            		const openCharLine = snippet.substring(lineOfOpenCharStart, openCharIndex);
         | 
| 190 | 
            +
            		const baseIndentMatch = openCharLine.match(/^(\s*)/);
         | 
| 191 | 
            +
            		const baseIndent = baseIndentMatch ? baseIndentMatch[1] : "";
         | 
| 192 | 
            +
             | 
| 193 | 
            +
            		const openCharFollowedByNewline =
         | 
| 194 | 
            +
            			snippet[openCharIndex + 1] === "\n" ||
         | 
| 195 | 
            +
            			(snippet[openCharIndex + 1] === "\r" && snippet[openCharIndex + 2] === "\n");
         | 
| 196 | 
            +
            		if (openCharFollowedByNewline) {
         | 
| 197 | 
            +
            			// Original was like {\n}
         | 
| 198 | 
            +
            			combinedContent = baseIndent; // Just the indent for the closing char
         | 
| 199 | 
            +
            		} else {
         | 
| 200 | 
            +
            			// Original was like {}
         | 
| 201 | 
            +
            			combinedContent = "\n" + baseIndent; // Newline, then indent for closing char
         | 
| 202 | 
            +
            		}
         | 
| 203 | 
            +
            	}
         | 
| 204 | 
            +
             | 
| 205 | 
            +
            	return contentBeforeBlock + combinedContent + contentAfterBlock;
         | 
| 206 | 
            +
            }
         | 
| 207 | 
            +
             | 
| 208 | 
            +
            export function modifySnippet(snippet: string, newProperties: Record<string, unknown>): string {
         | 
| 209 | 
            +
            	// JS: HuggingFace InferenceClient (streaming)
         | 
| 210 | 
            +
            	if (snippet.includes("client.chatCompletionStream")) {
         | 
| 211 | 
            +
            		return insertPropertiesInternal(
         | 
| 212 | 
            +
            			snippet,
         | 
| 213 | 
            +
            			newProperties,
         | 
| 214 | 
            +
            			/client\.chatCompletionStream\s*\(\s*/, // Finds "client.chatCompletionStream("
         | 
| 215 | 
            +
            			"{", // The parameters are in an object literal
         | 
| 216 | 
            +
            			"}",
         | 
| 217 | 
            +
            			(key, value, indent) => `${indent}${key}: ${value},\n`, // JS object literal style
         | 
| 218 | 
            +
            			formatJsJsonValue
         | 
| 219 | 
            +
            		);
         | 
| 220 | 
            +
            	}
         | 
| 221 | 
            +
            	// JS: HuggingFace InferenceClient (non-streaming)
         | 
| 222 | 
            +
            	else if (snippet.includes("client.chatCompletion") && snippet.includes("InferenceClient")) {
         | 
| 223 | 
            +
            		// Ensure it's not the OpenAI client by also checking for InferenceClient
         | 
| 224 | 
            +
            		return insertPropertiesInternal(
         | 
| 225 | 
            +
            			snippet,
         | 
| 226 | 
            +
            			newProperties,
         | 
| 227 | 
            +
            			/client\.chatCompletion\s*\(\s*/, // Finds "client.chatCompletion("
         | 
| 228 | 
            +
            			"{", // The parameters are in an object literal
         | 
| 229 | 
            +
            			"}",
         | 
| 230 | 
            +
            			(key, value, indent) => `${indent}${key}: ${value},\n`, // JS object literal style
         | 
| 231 | 
            +
            			formatJsJsonValue
         | 
| 232 | 
            +
            		);
         | 
| 233 | 
            +
            	}
         | 
| 234 | 
            +
            	// JS: OpenAI Client
         | 
| 235 | 
            +
            	// Check for client.chat.completions.create and a common JS import pattern
         | 
| 236 | 
            +
            	else if (
         | 
| 237 | 
            +
            		snippet.includes("client.chat.completions.create") &&
         | 
| 238 | 
            +
            		(snippet.includes('import { OpenAI } from "openai"') || snippet.includes("new OpenAI("))
         | 
| 239 | 
            +
            	) {
         | 
| 240 | 
            +
            		return insertPropertiesInternal(
         | 
| 241 | 
            +
            			snippet,
         | 
| 242 | 
            +
            			newProperties,
         | 
| 243 | 
            +
            			/client\.chat\.completions\.create\s*\(\s*/, // Finds "client.chat.completions.create("
         | 
| 244 | 
            +
            			"{", // The parameters are in an object literal
         | 
| 245 | 
            +
            			"}",
         | 
| 246 | 
            +
            			(key, value, indent) => `${indent}${key}: ${value},\n`,
         | 
| 247 | 
            +
            			formatJsJsonValue
         | 
| 248 | 
            +
            		);
         | 
| 249 | 
            +
            	}
         | 
| 250 | 
            +
            	// Python: OpenAI or HuggingFace Client using client.chat.completions.create
         | 
| 251 | 
            +
            	else if (snippet.includes("client.chat.completions.create")) {
         | 
| 252 | 
            +
            		return insertPropertiesInternal(
         | 
| 253 | 
            +
            			snippet,
         | 
| 254 | 
            +
            			newProperties,
         | 
| 255 | 
            +
            			/client\.chat\.completions\.create\s*\(/, // Finds "client.chat.completions.create("
         | 
| 256 | 
            +
            			"(", // The parameters are directly in the function call tuple
         | 
| 257 | 
            +
            			")",
         | 
| 258 | 
            +
            			(key, value, indent) => {
         | 
| 259 | 
            +
            				const snakeKey = key.replace(/([A-Z])/g, "_$1").toLowerCase();
         | 
| 260 | 
            +
            				return `${indent}${snakeKey}=${value},\n`;
         | 
| 261 | 
            +
            			},
         | 
| 262 | 
            +
            			formatPythonValue
         | 
| 263 | 
            +
            		);
         | 
| 264 | 
            +
            	}
         | 
| 265 | 
            +
            	// Python: requests example with query({...})
         | 
| 266 | 
            +
            	else if (snippet.includes("def query(payload):") && snippet.includes("query({")) {
         | 
| 267 | 
            +
            		return insertPropertiesInternal(
         | 
| 268 | 
            +
            			snippet,
         | 
| 269 | 
            +
            			newProperties,
         | 
| 270 | 
            +
            			/query\s*\(\s*/, // Finds "query(" and expects a dictionary literal next
         | 
| 271 | 
            +
            			"{", // The parameters are in a dictionary literal
         | 
| 272 | 
            +
            			"}",
         | 
| 273 | 
            +
            			// Python dict keys are strings, values formatted for Python
         | 
| 274 | 
            +
            			(key, formattedValue, indent) => `${indent}"${key}": ${formattedValue},\n`,
         | 
| 275 | 
            +
            			formatPythonValue // Use formatPythonValue for the values themselves
         | 
| 276 | 
            +
            		);
         | 
| 277 | 
            +
            	}
         | 
| 278 | 
            +
            	// Shell/curl (JSON content)
         | 
| 279 | 
            +
            	else if (snippet.includes("curl") && snippet.includes("-d")) {
         | 
| 280 | 
            +
            		return insertPropertiesInternal(
         | 
| 281 | 
            +
            			snippet,
         | 
| 282 | 
            +
            			newProperties,
         | 
| 283 | 
            +
            			/-d\s*'(?:\\n)?\s*/,
         | 
| 284 | 
            +
            			"{",
         | 
| 285 | 
            +
            			"}",
         | 
| 286 | 
            +
            			(key, value, indent) => {
         | 
| 287 | 
            +
            				const snakeKey = key.replace(/([A-Z])/g, "_$1").toLowerCase();
         | 
| 288 | 
            +
            				return `${indent}"${snakeKey}": ${value},\n`;
         | 
| 289 | 
            +
            			},
         | 
| 290 | 
            +
            			formatJsJsonValue
         | 
| 291 | 
            +
            		);
         | 
| 292 | 
            +
            	}
         | 
| 293 | 
            +
            	return snippet;
         | 
| 294 | 
            +
            }
         | 
    	
        vite.config.ts
    CHANGED
    
    | @@ -1,3 +1,4 @@ | |
|  | |
| 1 | 
             
            import { sveltekit } from "@sveltejs/kit/vite";
         | 
| 2 | 
             
            import { defineConfig } from "vite";
         | 
| 3 | 
             
            import UnpluginTypia from "@ryoppippi/unplugin-typia/vite";
         | 
| @@ -7,17 +8,34 @@ export const isDev = process.env.NODE_ENV === "development"; | |
| 7 |  | 
| 8 | 
             
            export default defineConfig({
         | 
| 9 | 
             
            	plugins: [
         | 
| 10 | 
            -
            		UnpluginTypia({
         | 
| 11 | 
            -
            			log: "verbose",
         | 
| 12 | 
            -
            			cache: false,
         | 
| 13 | 
            -
            		}),
         | 
| 14 | 
             
            		sveltekit(),
         | 
| 15 | 
            -
            		Icons({
         | 
| 16 | 
            -
            			compiler: "svelte",
         | 
| 17 | 
            -
            			autoInstall: true,
         | 
| 18 | 
            -
            		}),
         | 
| 19 | 
             
            	],
         | 
| 20 | 
            -
            	server: {
         | 
| 21 | 
            -
             | 
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
| 22 | 
             
            	},
         | 
| 23 | 
             
            });
         | 
|  | |
| 1 | 
            +
            import { svelteTesting } from "@testing-library/svelte/vite";
         | 
| 2 | 
             
            import { sveltekit } from "@sveltejs/kit/vite";
         | 
| 3 | 
             
            import { defineConfig } from "vite";
         | 
| 4 | 
             
            import UnpluginTypia from "@ryoppippi/unplugin-typia/vite";
         | 
|  | |
| 8 |  | 
| 9 | 
             
            export default defineConfig({
         | 
| 10 | 
             
            	plugins: [
         | 
| 11 | 
            +
            		UnpluginTypia({ log: "verbose", cache: false }),
         | 
|  | |
|  | |
|  | |
| 12 | 
             
            		sveltekit(),
         | 
| 13 | 
            +
            		Icons({ compiler: "svelte", autoInstall: true }),
         | 
|  | |
|  | |
|  | |
| 14 | 
             
            	],
         | 
| 15 | 
            +
            	server: { allowedHosts: isDev ? true : undefined },
         | 
| 16 | 
            +
            	test: {
         | 
| 17 | 
            +
            		workspace: [
         | 
| 18 | 
            +
            			{
         | 
| 19 | 
            +
            				extends: "./vite.config.ts",
         | 
| 20 | 
            +
            				plugins: [svelteTesting()],
         | 
| 21 | 
            +
            				test: {
         | 
| 22 | 
            +
            					name: "client",
         | 
| 23 | 
            +
            					environment: "jsdom",
         | 
| 24 | 
            +
            					clearMocks: true,
         | 
| 25 | 
            +
            					include: ["src/**/*.svelte.{test,spec}.{js,ts}"],
         | 
| 26 | 
            +
            					exclude: ["src/lib/server/**"],
         | 
| 27 | 
            +
            					setupFiles: ["./vitest-setup-client.ts"],
         | 
| 28 | 
            +
            				},
         | 
| 29 | 
            +
            			},
         | 
| 30 | 
            +
            			{
         | 
| 31 | 
            +
            				extends: "./vite.config.ts",
         | 
| 32 | 
            +
            				test: {
         | 
| 33 | 
            +
            					name: "server",
         | 
| 34 | 
            +
            					environment: "node",
         | 
| 35 | 
            +
            					include: ["src/**/*.{test,spec}.{js,ts}"],
         | 
| 36 | 
            +
            					exclude: ["src/**/*.svelte.{test,spec}.{js,ts}"],
         | 
| 37 | 
            +
            				},
         | 
| 38 | 
            +
            			},
         | 
| 39 | 
            +
            		],
         | 
| 40 | 
             
            	},
         | 
| 41 | 
             
            });
         | 
    	
        vitest-setup-client.ts
    ADDED
    
    | @@ -0,0 +1,18 @@ | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | |
|  | 
|  | |
| 1 | 
            +
            import "@testing-library/jest-dom/vitest";
         | 
| 2 | 
            +
            import { vi } from "vitest";
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            // required for svelte5 + jsdom as jsdom does not support matchMedia
         | 
| 5 | 
            +
            Object.defineProperty(window, "matchMedia", {
         | 
| 6 | 
            +
            	writable: true,
         | 
| 7 | 
            +
            	enumerable: true,
         | 
| 8 | 
            +
            	value: vi.fn().mockImplementation(query => ({
         | 
| 9 | 
            +
            		matches: false,
         | 
| 10 | 
            +
            		media: query,
         | 
| 11 | 
            +
            		onchange: null,
         | 
| 12 | 
            +
            		addEventListener: vi.fn(),
         | 
| 13 | 
            +
            		removeEventListener: vi.fn(),
         | 
| 14 | 
            +
            		dispatchEvent: vi.fn(),
         | 
| 15 | 
            +
            	})),
         | 
| 16 | 
            +
            });
         | 
| 17 | 
            +
             | 
| 18 | 
            +
            // add more mocks here if you need them
         | 
