diff --git a/.gitleaks.toml b/.gitleaks.toml new file mode 100644 index 000000000..1f8f9c92c --- /dev/null +++ b/.gitleaks.toml @@ -0,0 +1,9 @@ +title = "Gitleaks development" +[extend] +useDefault = true + +[allowlist] +paths = [ + '''.env''', + '''.secrets.baseline''' +] \ No newline at end of file diff --git a/.husky/pre-commit b/.husky/pre-commit index a357f9d84..189c6158e 100644 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -2,13 +2,29 @@ git rm -r --cached build/ >/dev/null 2>&1 || true (while sleep 1; do printf '.'; done) & spinner_pid=$! -echo "Scanning all commits... 30-60s 💅🥱⏳" -# Run the gitleaks command -gitleaks detect -v +echo "Scanning commit... 30-60s 💅🥱⏳" + +# Exit on any error +set -e + +# Ensure cleanup happens even if script fails +cleanup() { + echo "Detected secrets in staged files!" + kill $spinner_pid +} + +if ! gitleaks protect --staged -v --redact; then + cleanup + exit 1 +fi + +if ! git diff --staged --name-only -z | xargs -0 detect-secrets-hook --baseline .secrets.baseline; then + cleanup + exit 1 +fi -# Once gitleaks completes, stop the animation kill $spinner_pid -# wait $spinner_pid 2>/dev/null + npm install npm run format npm run i18n:parse diff --git a/.secrets.baseline b/.secrets.baseline new file mode 100644 index 000000000..606664782 --- /dev/null +++ b/.secrets.baseline @@ -0,0 +1,3382 @@ +{ + "version": "1.4.0", + "plugins_used": [ + { + "name": "ArtifactoryDetector" + }, + { + "name": "AWSKeyDetector" + }, + { + "name": "AzureStorageKeyDetector" + }, + { + "name": "Base64HighEntropyString", + "limit": 4.5 + }, + { + "name": "BasicAuthDetector" + }, + { + "name": "CloudantDetector" + }, + { + "name": "DiscordBotTokenDetector" + }, + { + "name": "GitHubTokenDetector" + }, + { + "name": "HexHighEntropyString", + "limit": 3.0 + }, + { + "name": "IbmCloudIamDetector" + }, + { + "name": "IbmCosHmacDetector" + }, + { + "name": "JwtTokenDetector" + }, + { + "name": "KeywordDetector", + "keyword_exclude": "" + }, + { + "name": "MailchimpDetector" + }, + { + "name": "NpmDetector" + }, + { + "name": "PrivateKeyDetector" + }, + { + "name": "SendGridDetector" + }, + { + "name": "SlackDetector" + }, + { + "name": "SoftlayerDetector" + }, + { + "name": "SquareOAuthDetector" + }, + { + "name": "StripeDetector" + }, + { + "name": "TwilioKeyDetector" + } + ], + "filters_used": [ + { + "path": "detect_secrets.filters.allowlist.is_line_allowlisted" + }, + { + "path": "detect_secrets.filters.common.is_ignored_due_to_verification_policies", + "min_level": 2 + }, + { + "path": "detect_secrets.filters.heuristic.is_indirect_reference" + }, + { + "path": "detect_secrets.filters.heuristic.is_likely_id_string" + }, + { + "path": "detect_secrets.filters.heuristic.is_lock_file" + }, + { + "path": "detect_secrets.filters.heuristic.is_not_alphanumeric_string" + }, + { + "path": "detect_secrets.filters.heuristic.is_potential_uuid" + }, + { + "path": "detect_secrets.filters.heuristic.is_prefixed_with_dollar_sign" + }, + { + "path": "detect_secrets.filters.heuristic.is_sequential_string" + }, + { + "path": "detect_secrets.filters.heuristic.is_swagger_file" + }, + { + "path": "detect_secrets.filters.heuristic.is_templated_secret" + } + ], + "results": { + "backend/apps/webui/routers/auths.py": [ + { + "type": "Secret Keyword", + "filename": "backend/apps/webui/routers/auths.py", + "hashed_secret": "d033e22ae348aeb5660fc2140aec35850c4da997", + "is_verified": false, + "line_number": 331 + } + ], + "backend/constants.py": [ + { + "type": "Secret Keyword", + "filename": "backend/constants.py", + "hashed_secret": "40c889477924de3df881960272cbeb7e62572a92", + "is_verified": false, + "line_number": 75 + } + ], + "backend/open-webui-pipelines/examples/pipelines/rag/haystack_pipeline.py": [ + { + "type": "Secret Keyword", + "filename": "backend/open-webui-pipelines/examples/pipelines/rag/haystack_pipeline.py", + "hashed_secret": "26adb00e3d2ce26c9d600cf5c2a8e02304380ad2", + "is_verified": false, + "line_number": 22 + } + ], + "backend/open-webui-pipelines/examples/pipelines/rag/llamaindex_pipeline.py": [ + { + "type": "Secret Keyword", + "filename": "backend/open-webui-pipelines/examples/pipelines/rag/llamaindex_pipeline.py", + "hashed_secret": "aecdccc1cf64595b34e0cc152d238daabb32183a", + "is_verified": false, + "line_number": 24 + } + ], + "cypress/support/e2e.ts": [ + { + "type": "Secret Keyword", + "filename": "cypress/support/e2e.ts", + "hashed_secret": "5baa61e4c9b93f3f0682250b6cf8331b7ee68fd8", + "is_verified": false, + "line_number": 6 + } + ], + "docker-compose.yml": [ + { + "type": "Secret Keyword", + "filename": "docker-compose.yml", + "hashed_secret": "afc848c316af1a89d49826c5ae9d00ed769415f3", + "is_verified": false, + "line_number": 8 + } + ], + "src/lib/i18n/locales/ca-ES/translation.json": [ + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/ca-ES/translation.json", + "hashed_secret": "44dbb3657a67f916682e00b9069d4b72e037da2f", + "is_verified": false, + "line_number": 82 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/ca-ES/translation.json", + "hashed_secret": "217bd89b265fb28cfe1b0c8ad51e9429aa0c5193", + "is_verified": false, + "line_number": 114 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/ca-ES/translation.json", + "hashed_secret": "0c60d2f5b480285d48df331c67f057ad3ee55411", + "is_verified": false, + "line_number": 133 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/ca-ES/translation.json", + "hashed_secret": "12beb1456378f4ef87bc9d5bdf2b4bc66999d3d5", + "is_verified": false, + "line_number": 216 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/ca-ES/translation.json", + "hashed_secret": "81c17248cb58aec9bcd7329497ed0f59e393efa1", + "is_verified": false, + "line_number": 330 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/ca-ES/translation.json", + "hashed_secret": "c12b9cac8e7cc55d8f2e19e8806205e6fe7d67b8", + "is_verified": false, + "line_number": 367 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/ca-ES/translation.json", + "hashed_secret": "b344f77c588ccb1e8d7cb8eed5772ac57f32bd4a", + "is_verified": false, + "line_number": 541 + } + ], + "src/lib/i18n/locales/ceb-PH/translation.json": [ + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/ceb-PH/translation.json", + "hashed_secret": "30d9ce3f3bf174bc29d7953d8ad73609863f3731", + "is_verified": false, + "line_number": 82 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/ceb-PH/translation.json", + "hashed_secret": "988542db8602f6677aa3f6c7d89e507403940767", + "is_verified": false, + "line_number": 114 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/ceb-PH/translation.json", + "hashed_secret": "fe9ea82c23526c0923287b3d2c486d7d47969041", + "is_verified": false, + "line_number": 133 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/ceb-PH/translation.json", + "hashed_secret": "940818c6f9574822bf8b0ae12bfeeff79ba48738", + "is_verified": false, + "line_number": 216 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/ceb-PH/translation.json", + "hashed_secret": "dc806fa739d15f84c445ca61c95d009f53b05a74", + "is_verified": false, + "line_number": 330 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/ceb-PH/translation.json", + "hashed_secret": "8be3c943b1609fffbfc51aad666d0a04adf83c9d", + "is_verified": false, + "line_number": 367 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/ceb-PH/translation.json", + "hashed_secret": "96d8960500da56c978c209069036791ce1984baf", + "is_verified": false, + "line_number": 540 + } + ], + "src/lib/i18n/locales/de-DE/translation.json": [ + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/de-DE/translation.json", + "hashed_secret": "fc577f211bd35093e4895b463caa53436fff1c96", + "is_verified": false, + "line_number": 82 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/de-DE/translation.json", + "hashed_secret": "478b138fb0ae8fce12f93f045bcca383eedc777d", + "is_verified": false, + "line_number": 114 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/de-DE/translation.json", + "hashed_secret": "f562caab01134c53120bd36dcda6d9d904760138", + "is_verified": false, + "line_number": 133 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/de-DE/translation.json", + "hashed_secret": "0719708d1cc814839bd818fdc27d446652f03383", + "is_verified": false, + "line_number": 216 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/de-DE/translation.json", + "hashed_secret": "cc5213bdfc29aa15f1e530b9676b724be010f434", + "is_verified": false, + "line_number": 330 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/de-DE/translation.json", + "hashed_secret": "d581acf570521e6ca3d667a0516642a93d26dc6b", + "is_verified": false, + "line_number": 540 + } + ], + "src/lib/i18n/locales/dg-DG/translation.json": [ + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/dg-DG/translation.json", + "hashed_secret": "49289db43e663a3df5e2c70714722ecc54895565", + "is_verified": false, + "line_number": 82 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/dg-DG/translation.json", + "hashed_secret": "c2d404cb7bad34de0af2136b8efa809ea96170fa", + "is_verified": false, + "line_number": 114 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/dg-DG/translation.json", + "hashed_secret": "4d5967896006c8a626ecef45e6312f6fc7d5b52f", + "is_verified": false, + "line_number": 133 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/dg-DG/translation.json", + "hashed_secret": "f4708d832818f41ddc8e845e999b133bd1b50a93", + "is_verified": false, + "line_number": 216 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/dg-DG/translation.json", + "hashed_secret": "2d99c4662bfa15c3037a03ef2b900f7f31d9059f", + "is_verified": false, + "line_number": 330 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/dg-DG/translation.json", + "hashed_secret": "9b0ca0e225ade9751c9a43289ab892be49e067fd", + "is_verified": false, + "line_number": 367 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/dg-DG/translation.json", + "hashed_secret": "a13be3d3c0a229c53f5167b726b504065cadf20a", + "is_verified": false, + "line_number": 540 + } + ], + "src/lib/i18n/locales/es-ES/translation.json": [ + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/es-ES/translation.json", + "hashed_secret": "4fc5ef3232218bf03f3b38b5c11704ba50901800", + "is_verified": false, + "line_number": 82 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/es-ES/translation.json", + "hashed_secret": "669d5f2cfc1ed9dcb3d01957ee0ce90bf207306a", + "is_verified": false, + "line_number": 114 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/es-ES/translation.json", + "hashed_secret": "51bdd24156132d44ca33a7760c30f2f4f8930ec6", + "is_verified": false, + "line_number": 133 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/es-ES/translation.json", + "hashed_secret": "eb9e8b4a699d6733b0f44ed3a85bbbfc397b09b7", + "is_verified": false, + "line_number": 216 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/es-ES/translation.json", + "hashed_secret": "1663419d4c5ab66c4b655b30adc9c030f2cfaed6", + "is_verified": false, + "line_number": 330 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/es-ES/translation.json", + "hashed_secret": "5a6d1c612954979ea99ee33dbb2d231b00f6ac0a", + "is_verified": false, + "line_number": 367 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/es-ES/translation.json", + "hashed_secret": "86c39ce3c9657f07ef9f7fd28b3e949fcce72691", + "is_verified": false, + "line_number": 541 + } + ], + "src/lib/i18n/locales/fi-FI/translation.json": [ + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/fi-FI/translation.json", + "hashed_secret": "92651e851d1a520088933d6b71c6706fc9b7fffe", + "is_verified": false, + "line_number": 82 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/fi-FI/translation.json", + "hashed_secret": "d37932fe41308c9dcfdbd1fcdcbb9327f5049e50", + "is_verified": false, + "line_number": 114 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/fi-FI/translation.json", + "hashed_secret": "e2bd05b33960c216e57ed56d78343a18b85cf1af", + "is_verified": false, + "line_number": 133 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/fi-FI/translation.json", + "hashed_secret": "a8ee11c1a5753965b8313a70ab536645222f358b", + "is_verified": false, + "line_number": 216 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/fi-FI/translation.json", + "hashed_secret": "23ab1407e48805db207b5c230729bb0428209c73", + "is_verified": false, + "line_number": 330 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/fi-FI/translation.json", + "hashed_secret": "1edab3c25a852fdf601720cb0d533c3ca4374779", + "is_verified": false, + "line_number": 367 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/fi-FI/translation.json", + "hashed_secret": "e5af6990909684754b5596537eef1a934d73c85d", + "is_verified": false, + "line_number": 540 + } + ], + "src/lib/i18n/locales/fr-CA/translation.json": [ + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/fr-CA/translation.json", + "hashed_secret": "4ad8d63169101cdbed62ae86f7bd8896fc591b22", + "is_verified": false, + "line_number": 82 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/fr-CA/translation.json", + "hashed_secret": "88362d0d044cf4144e78f646e101110e3f44a9e5", + "is_verified": false, + "line_number": 114 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/fr-CA/translation.json", + "hashed_secret": "f924297673a9a6a8f9362349954b1e5273549e28", + "is_verified": false, + "line_number": 133 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/fr-CA/translation.json", + "hashed_secret": "9f4b33807e3f0e7a47fd5a90cf31214fee711c45", + "is_verified": false, + "line_number": 216 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/fr-CA/translation.json", + "hashed_secret": "3a7138292007e17c98448b319ca6f2f6b63980f8", + "is_verified": false, + "line_number": 330 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/fr-CA/translation.json", + "hashed_secret": "94e2f3ee14b92e2e675a8f6118d28738dbf5c6ba", + "is_verified": false, + "line_number": 367 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/fr-CA/translation.json", + "hashed_secret": "bae8f42ef6afbb0a2e4669a4ff295888522670e9", + "is_verified": false, + "line_number": 541 + } + ], + "src/lib/i18n/locales/fr-FR/translation.json": [ + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/fr-FR/translation.json", + "hashed_secret": "4ad8d63169101cdbed62ae86f7bd8896fc591b22", + "is_verified": false, + "line_number": 82 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/fr-FR/translation.json", + "hashed_secret": "88362d0d044cf4144e78f646e101110e3f44a9e5", + "is_verified": false, + "line_number": 114 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/fr-FR/translation.json", + "hashed_secret": "f924297673a9a6a8f9362349954b1e5273549e28", + "is_verified": false, + "line_number": 133 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/fr-FR/translation.json", + "hashed_secret": "e78e9f85f01ac0f7eaf0a8cb7c2c82852178778c", + "is_verified": false, + "line_number": 216 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/fr-FR/translation.json", + "hashed_secret": "3a7138292007e17c98448b319ca6f2f6b63980f8", + "is_verified": false, + "line_number": 330 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/fr-FR/translation.json", + "hashed_secret": "94e2f3ee14b92e2e675a8f6118d28738dbf5c6ba", + "is_verified": false, + "line_number": 367 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/fr-FR/translation.json", + "hashed_secret": "86cdaf4f337e43aa199425493916912ac1d5a0da", + "is_verified": false, + "line_number": 541 + } + ], + "src/lib/i18n/locales/hr-HR/translation.json": [ + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/hr-HR/translation.json", + "hashed_secret": "e2d213323944fbf2a0067bc09fcb34d93ec22fda", + "is_verified": false, + "line_number": 82 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/hr-HR/translation.json", + "hashed_secret": "194c48e52d70a374349c5b325fc518439666fd6c", + "is_verified": false, + "line_number": 114 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/hr-HR/translation.json", + "hashed_secret": "e365da9fb84960679ef0e6a8b8a990d3ba808b5e", + "is_verified": false, + "line_number": 133 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/hr-HR/translation.json", + "hashed_secret": "9ec73158dcc1c601dd5e87a907b1cbd1e803bebf", + "is_verified": false, + "line_number": 216 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/hr-HR/translation.json", + "hashed_secret": "87a1b650d7fb5575bb2c10e9a80c26836981348e", + "is_verified": false, + "line_number": 330 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/hr-HR/translation.json", + "hashed_secret": "f45bd814e195ef24309fbbd1cc4511b69a1451df", + "is_verified": false, + "line_number": 367 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/hr-HR/translation.json", + "hashed_secret": "6cb64e0a8aff5f2585246653c4584cc2e02cf35d", + "is_verified": false, + "line_number": 541 + } + ], + "src/lib/i18n/locales/it-IT/translation.json": [ + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/it-IT/translation.json", + "hashed_secret": "25dadb7138d86f4c3797174d3c124b3357d064d5", + "is_verified": false, + "line_number": 82 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/it-IT/translation.json", + "hashed_secret": "a5c98294893b562a4e06e677107a46c83e7589b6", + "is_verified": false, + "line_number": 114 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/it-IT/translation.json", + "hashed_secret": "ece21a8f37cc46b1a336fca77a80ed6200eb1acb", + "is_verified": false, + "line_number": 133 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/it-IT/translation.json", + "hashed_secret": "c934463694c02aa07a75b545dd030e19e948ab9a", + "is_verified": false, + "line_number": 216 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/it-IT/translation.json", + "hashed_secret": "5f853a79c8827da72059fc29fce706391d81afe9", + "is_verified": false, + "line_number": 330 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/it-IT/translation.json", + "hashed_secret": "8be3c943b1609fffbfc51aad666d0a04adf83c9d", + "is_verified": false, + "line_number": 367 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/it-IT/translation.json", + "hashed_secret": "e91b54bf46f693b0ca8050e9b7075d9046a65333", + "is_verified": false, + "line_number": 541 + } + ], + "src/lib/i18n/locales/lt-LT/translation.json": [ + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/lt-LT/translation.json", + "hashed_secret": "ead7dc3e9f10f4aa80f064b560d98a1bda320943", + "is_verified": false, + "line_number": 82 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/lt-LT/translation.json", + "hashed_secret": "513a905817f321902a9b2a3d5be5c067c9f85fab", + "is_verified": false, + "line_number": 114 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/lt-LT/translation.json", + "hashed_secret": "413e90497c6e0425e84aa3f77e8e3ab17c5d28f5", + "is_verified": false, + "line_number": 133 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/lt-LT/translation.json", + "hashed_secret": "0b7481390586c070ea2078367e92ecc9acf06f00", + "is_verified": false, + "line_number": 216 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/lt-LT/translation.json", + "hashed_secret": "d9059bb1ce58832ba2af410f4dbe4ed2c728d7e9", + "is_verified": false, + "line_number": 330 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/lt-LT/translation.json", + "hashed_secret": "f8b0e1b941a91a57087dc263d246cc134f02cdb0", + "is_verified": false, + "line_number": 367 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/lt-LT/translation.json", + "hashed_secret": "bf888edcf1b4e0eaf59a32d4ee1be402b7e44e65", + "is_verified": false, + "line_number": 542 + } + ], + "src/lib/i18n/locales/nb-NO/translation.json": [ + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/nb-NO/translation.json", + "hashed_secret": "5d2c53ac8d209e42563cc4f33c9b90eeb02a26c3", + "is_verified": false, + "line_number": 82 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/nb-NO/translation.json", + "hashed_secret": "a6d1654d81f14e2cfbc16fcadaa6754641477982", + "is_verified": false, + "line_number": 114 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/nb-NO/translation.json", + "hashed_secret": "f23a53dd9db2a3c65e960c65cc8db7efd1a4015c", + "is_verified": false, + "line_number": 133 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/nb-NO/translation.json", + "hashed_secret": "a4fba20546ce124c635d65f7146554147672b8a7", + "is_verified": false, + "line_number": 216 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/nb-NO/translation.json", + "hashed_secret": "56006cd615145c8627e3b342780b152336240893", + "is_verified": false, + "line_number": 330 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/nb-NO/translation.json", + "hashed_secret": "0bcfb4cb7d7779094d3ae6d319be4f9ec248cf96", + "is_verified": false, + "line_number": 367 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/nb-NO/translation.json", + "hashed_secret": "899cfdfef96d548732853f5626056f0909b4d519", + "is_verified": false, + "line_number": 540 + } + ], + "src/lib/i18n/locales/nl-NL/translation.json": [ + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/nl-NL/translation.json", + "hashed_secret": "d585a10e917c7bf9ac1be23a9878a961ec9c1f33", + "is_verified": false, + "line_number": 82 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/nl-NL/translation.json", + "hashed_secret": "2c9ea6a96dec0bc65ba9ac909a3fc7bd812e3e45", + "is_verified": false, + "line_number": 114 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/nl-NL/translation.json", + "hashed_secret": "742ec1081ff21dbbdf145fb67ed884878dcfbe80", + "is_verified": false, + "line_number": 133 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/nl-NL/translation.json", + "hashed_secret": "b9b1c7096445bae795e2e96567448e527cc6c427", + "is_verified": false, + "line_number": 216 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/nl-NL/translation.json", + "hashed_secret": "725ea37296a54e6c29821550146e3165545b820a", + "is_verified": false, + "line_number": 330 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/nl-NL/translation.json", + "hashed_secret": "8278b30ef12fdf2ca2aaa363ea2f2504f0543357", + "is_verified": false, + "line_number": 367 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/nl-NL/translation.json", + "hashed_secret": "60daa29ac7f2db6a4c4050d5beef0bcd0f5cec85", + "is_verified": false, + "line_number": 540 + } + ], + "src/lib/i18n/locales/pl-PL/translation.json": [ + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/pl-PL/translation.json", + "hashed_secret": "f1a109b757cd5f9316fa63059ebf23db9641e2e4", + "is_verified": false, + "line_number": 82 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/pl-PL/translation.json", + "hashed_secret": "198364dbe2b1d4f5945696323cf5a6b8fc84ca98", + "is_verified": false, + "line_number": 114 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/pl-PL/translation.json", + "hashed_secret": "bec2674463af79a024f2a1225bc0754d64431dd1", + "is_verified": false, + "line_number": 133 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/pl-PL/translation.json", + "hashed_secret": "84f847d7ae3c0a8e86c8367c80360164308ece4d", + "is_verified": false, + "line_number": 216 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/pl-PL/translation.json", + "hashed_secret": "3744df92b2f0b7d5354caf8d431dea1af5d41fca", + "is_verified": false, + "line_number": 330 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/pl-PL/translation.json", + "hashed_secret": "f6240c78d748397cfa3a1bf65767e2e127ba877c", + "is_verified": false, + "line_number": 367 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/pl-PL/translation.json", + "hashed_secret": "f53baf16521b8a82f077c61bc7b3a7045c0ffa7c", + "is_verified": false, + "line_number": 542 + } + ], + "src/lib/i18n/locales/pt-BR/translation.json": [ + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/pt-BR/translation.json", + "hashed_secret": "4307ac6814914760afcab08c898ee6b76c6058b2", + "is_verified": false, + "line_number": 82 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/pt-BR/translation.json", + "hashed_secret": "256a78166d30210af682fdeab3588f1ffcad3cdd", + "is_verified": false, + "line_number": 114 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/pt-BR/translation.json", + "hashed_secret": "d47ad93f8df2a3b04d7e35cd023ed0e66ef86d17", + "is_verified": false, + "line_number": 133 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/pt-BR/translation.json", + "hashed_secret": "e243b03927e549622017861ff9672fc4dd3764f5", + "is_verified": false, + "line_number": 216 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/pt-BR/translation.json", + "hashed_secret": "5bfe18ca5d4c81584399c794cf8ce4420b453173", + "is_verified": false, + "line_number": 330 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/pt-BR/translation.json", + "hashed_secret": "deba0172511d5701d964202f4e5de698d5e07c67", + "is_verified": false, + "line_number": 367 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/pt-BR/translation.json", + "hashed_secret": "a70dbf1ea1af652e4fd8ed9e96b1157ed0f29e8b", + "is_verified": false, + "line_number": 541 + } + ], + "src/lib/i18n/locales/pt-PT/translation.json": [ + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/pt-PT/translation.json", + "hashed_secret": "4307ac6814914760afcab08c898ee6b76c6058b2", + "is_verified": false, + "line_number": 82 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/pt-PT/translation.json", + "hashed_secret": "256a78166d30210af682fdeab3588f1ffcad3cdd", + "is_verified": false, + "line_number": 114 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/pt-PT/translation.json", + "hashed_secret": "d47ad93f8df2a3b04d7e35cd023ed0e66ef86d17", + "is_verified": false, + "line_number": 133 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/pt-PT/translation.json", + "hashed_secret": "eb7ffef24e643ad5bdda5aac9dbcd1f02ab077ad", + "is_verified": false, + "line_number": 216 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/pt-PT/translation.json", + "hashed_secret": "5bfe18ca5d4c81584399c794cf8ce4420b453173", + "is_verified": false, + "line_number": 330 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/pt-PT/translation.json", + "hashed_secret": "deba0172511d5701d964202f4e5de698d5e07c67", + "is_verified": false, + "line_number": 367 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/pt-PT/translation.json", + "hashed_secret": "a70dbf1ea1af652e4fd8ed9e96b1157ed0f29e8b", + "is_verified": false, + "line_number": 541 + } + ], + "src/lib/i18n/locales/sv-SE/translation.json": [ + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/sv-SE/translation.json", + "hashed_secret": "f3d05b32264e405f6d8baa1967ebab2f7ef8e8b4", + "is_verified": false, + "line_number": 82 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/sv-SE/translation.json", + "hashed_secret": "4c2af7d2c0d6f71be9f9c910133d9c959bcba08c", + "is_verified": false, + "line_number": 114 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/sv-SE/translation.json", + "hashed_secret": "f4f799c3cb7f2238af56b48e3ba91829b11665ab", + "is_verified": false, + "line_number": 133 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/sv-SE/translation.json", + "hashed_secret": "1716d41bf988306f05982b3fc00e3ca9579163ef", + "is_verified": false, + "line_number": 216 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/sv-SE/translation.json", + "hashed_secret": "df0f79b49286619492e46dd47da974c3b8b41019", + "is_verified": false, + "line_number": 330 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/sv-SE/translation.json", + "hashed_secret": "445b8b3e668d3f4b9979f9ef33accb33b062edd6", + "is_verified": false, + "line_number": 367 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/sv-SE/translation.json", + "hashed_secret": "e3a052ee9985491f0e9bb058113badde374bca8b", + "is_verified": false, + "line_number": 540 + } + ], + "src/lib/i18n/locales/tk-TM/transaltion.json": [ + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/tk-TM/transaltion.json", + "hashed_secret": "efb4b8e444e747394c752b696a343333061b9982", + "is_verified": false, + "line_number": 74 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/tk-TM/transaltion.json", + "hashed_secret": "303b4269104583e143b52caa3648db07b4517db6", + "is_verified": false, + "line_number": 104 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/tk-TM/transaltion.json", + "hashed_secret": "e57089080bf152d8d6b439a1c9e76af5bce06db4", + "is_verified": false, + "line_number": 124 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/tk-TM/transaltion.json", + "hashed_secret": "06458a201e000edeb35860cb07610157efe7b1c8", + "is_verified": false, + "line_number": 366 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/tk-TM/transaltion.json", + "hashed_secret": "c90bd6a44e4c888fbe1205f7ebfdd973c59a787c", + "is_verified": false, + "line_number": 409 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/tk-TM/transaltion.json", + "hashed_secret": "f4c8951e9e9eabfce68e037d1334c0028dbf2b06", + "is_verified": false, + "line_number": 423 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/tk-TM/transaltion.json", + "hashed_secret": "5117d7ae58fcb3981a8ccfb68c30f20824e7653e", + "is_verified": false, + "line_number": 465 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/tk-TM/transaltion.json", + "hashed_secret": "7b3d5b0efcaaeda6402bb21265491d13d349c58f", + "is_verified": false, + "line_number": 699 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/tk-TM/transaltion.json", + "hashed_secret": "d6108a97d4197064ad2463d427b22136065ee319", + "is_verified": false, + "line_number": 700 + } + ], + "src/lib/i18n/locales/tr-TR/translation.json": [ + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/tr-TR/translation.json", + "hashed_secret": "1e1e42345bda267fc34efa9b53123880a9da2e4d", + "is_verified": false, + "line_number": 82 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/tr-TR/translation.json", + "hashed_secret": "3235ff92b36a0244d91f5f11e754382490b08530", + "is_verified": false, + "line_number": 114 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/tr-TR/translation.json", + "hashed_secret": "0ddfe39a0dd903e4ab010774e00846e711035d0b", + "is_verified": false, + "line_number": 133 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/tr-TR/translation.json", + "hashed_secret": "01f05ebe3488e85773e8ffe887535d92491f010f", + "is_verified": false, + "line_number": 216 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/tr-TR/translation.json", + "hashed_secret": "5e0558dbdc670ea7b1c535517c9562029350728c", + "is_verified": false, + "line_number": 330 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/tr-TR/translation.json", + "hashed_secret": "eb2d1283068b1c5b684714357a4078791175df76", + "is_verified": false, + "line_number": 367 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/tr-TR/translation.json", + "hashed_secret": "5857841b0a59eb1a34759fe6c71a96f671e1de57", + "is_verified": false, + "line_number": 540 + } + ], + "src/lib/i18n/locales/vi-VN/translation.json": [ + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/vi-VN/translation.json", + "hashed_secret": "9df34e7207b5e80e4e531ab272b954b5444d59cd", + "is_verified": false, + "line_number": 82 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/vi-VN/translation.json", + "hashed_secret": "c96b1d82d576f85e20b6af0d06a3676019d083e6", + "is_verified": false, + "line_number": 114 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/vi-VN/translation.json", + "hashed_secret": "9a3c6341b168320eca9cbcb3b10b4da42f461ea3", + "is_verified": false, + "line_number": 133 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/vi-VN/translation.json", + "hashed_secret": "0876bd0c306e52183e4d88844e8a31ab7a186de0", + "is_verified": false, + "line_number": 216 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/vi-VN/translation.json", + "hashed_secret": "4267a600ceea3e437e47d941631a87bd7918ee6b", + "is_verified": false, + "line_number": 330 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/vi-VN/translation.json", + "hashed_secret": "888c9c47cfe0a0fb3c58896221597615a31a6ed1", + "is_verified": false, + "line_number": 367 + }, + { + "type": "Secret Keyword", + "filename": "src/lib/i18n/locales/vi-VN/translation.json", + "hashed_secret": "790b8a6b072738e8d4896c7cd1d8da96b27247a4", + "is_verified": false, + "line_number": 539 + } + ], + "static/pyodide/pyodide-lock.json": [ + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "007db6e79974bf844f32ea8096acc168d0789653", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "0128a4c6689fcdbc05a775f258dcd0d4103d41f0", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "01d52d8176878d26f757834d71c1e34ed21b0809", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "021d82b96563eb09e86ee5d3f2de0457b42a7074", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "030c6702b9644cb6733ddfc1a14fe913cfddac64", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "03e9dad5d107023ba2fdf2429f9adecb61d54568", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "04065965da3f831f60dfd08cf8c0fe1e25c1c2cf", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "042b69efa29ba5aed3f3668da66852931e0d9711", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "0551a592aa4ebdc476c837a3e985bd304cf5ab85", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "063b6d00dcae1e5f7bdb9fe4442beb4bc23e332c", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "0707699c61dee77db191aae9e625d2a4f53ca73f", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "0755f422803334f5e04caaba52437c80d6be4bb7", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "085d74f0f3bd2c57fe62f92f7e729b09de57bfae", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "094de74dc49e6873d0521ab4cf71c8a3eb735892", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "0b921e0f04e5a577bbdcdba63b2e9dc2c0301f06", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "0b96589c763005d77c0a1e77e4a42c7c86fdc5bf", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "0c1671f72d8f1d6187aff5e20c29680497d31d73", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "0c19f2f131d2a2b9f252699557c323728e4e0dd1", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "0ea5c5bedbd22e7df5b384c2d7796e201bfbca9f", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "0ed214abab3392debee3224aa146759476489d00", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "0f0eb4ab6ab3ec55c338fc7f901b72e6bb858a8b", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "10ab058be9c48c114b1207721de00c5a34a76dd6", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "1142e5d06e15d2bd54f48f54f838a776858c048a", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "12caa4803a5142f7fa7d28502f44db75c541c7af", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "12e17f3254c7fdf7413b208fd42a403e683696ad", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "13286080c0a55b52e1152a94224b7b570f12015a", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "1369f8757e5d6ad510b7ea6afbb9a2e3fa5de5e6", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "15b5d9f0df6addd1fa0a5941f5ed87d69fe8a368", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "16270e9258a598221b3ade21966beb026f3789c7", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "17b1d2616fd08969a5ae8a62fc594d79bb95308e", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "17e848de2e97f34bab89b8f9164619f309439780", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "192c3d0686d73cf2707db3cde849939ae8de307b", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "1a258c3339075ab14ab0235107a77c42e18d01ce", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "1a575d2e15e9bfc7c7b97153e7fa3b3a3cbdad01", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "1ab03428bc6b70029920832d9674a357252749c5", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "1c02ce0a8699754cc2ba860ea5c184ab3b195cff", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "1c52b4e5c9190bb976e63fa9b1b7ac44b69e74a2", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "1ca51411e6ff89fdb837d1b9d25b8d40faa7165a", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "1da2d29ea53475b4aa616a9dd53945da0cbaf594", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "1db67a9bfbfdb7ddb2ad1cb936cb62364cbbf933", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "1ebb1f7af4b69287dbea7ea90f5131957b173039", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "1eee1afe6abcf6f68e252924d36852b650f8ead8", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "200b269fc9e1786025f673221103a2797f048475", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "2148df94c81b4c5109268707750eacfcb9e69086", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "21e8bd3724654ab3fa1a882573e7cd338fd704c3", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "23897578987c4061515b88baf9fa6c53be48c635", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "254d541a0ba31a9957aa403dd0ab9931b25c3152", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "25b4300959e2406c121dd782ba0dbcb69780509b", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "261d5c297db7a56c998bf070133deb11ad6f478e", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "265034d567d64ea72874994aafe0a4174471f2e0", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "265bbd6dbd42bf8a7425bd3cf911a64b6165ff67", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "26b7c61edac707785ade5618d6f00c7ca0c24afd", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "26c6048122e509ec997e879ebb21c5223b3c2c8d", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "26cf4a5513874f2f6f3d18ce8f49af8f21a1cf47", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "270b76b6eb80c7aa1a430097d595d7b63940db16", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "27d1c751228b6c72821e616cccf3e2723283f7a8", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "298a4aeb79c7203cb29f362494ff45e671a7aefa", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "2995a1f8286b80bea3aa2bd0cc049b386d8a01fc", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "2b2c72e21bef8aed2c1b42aa345a273e3e1a27b0", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "2d5033a5d2832cd49787d448b7e6b60f4bcb1fd3", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "2d70820f06f97a309c1621490b1438630aec18ca", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "2dd014d9a590ed9db86c9e8b46e05bbbc2ea03bb", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "2e649f4b237d16cd4b2e928b1e503bcb2dbbea49", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "2f2eabd71ea0ef5157c462c54627d20173f2b644", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "302baf63d82c358295387a3fe68940b9c06a80a5", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "30d05b66d7bf907eebacf0127d8f5c245a74c398", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "30e2f59d32bc6950deeaadccae4e4266d8c5235f", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "30ee54f11602d510b41c43e0113f521b69a5220c", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "31fe88a014c1c017088bf9e605cff42e7af9b2b4", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "3239d865daf0b59938a97ecbcc91f57dbc2d1de7", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "3286f8d80085b9c9ed6a49a3b0e8bbebc1db048b", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "32ffc9fd03a73237aeea5cb0b60fb13aea9d2bcd", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "351305d8811efa3cc5234fa24b9e0762a817b674", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "352334f5e596e55f1fad62ade009c5d7f935171c", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "35caaf45ce5f3158373667547fc37bc1a504ccc0", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "361cd5793124a6747af1b0ddf4cc0be44050cd51", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "370aa59c765ae1f302a4f1766f684e702e8d0a94", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "37242c49d59e01ff734a1c323aae7ca1198cdbe9", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "3752ff66f6ae5fa5a036310c348e69dbc3509af0", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "37cbbb9cacb9490ae2a204d72056f4aa41b98f8d", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "387d680c59124bc82984f1586436b59538854f39", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "3a34f2dde266937c55fb224c8dda0439e6e10739", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "3a8f83e1b3c329449c9893ff160ed0ee130b4a67", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "3b3029373e0005ba1a3709faacc1e42487855747", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "3d90410b04f86130e35b35438f5ee254af2fe90f", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "3db5b15238dfb2b1a2f7dd4d22359e169f80edc2", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "3dd570c2b3c2c4efa7fb26fbd46c3f844483db19", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "3e090016bdde84eab22a7c35d2154a42bb456a75", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "3f8ffa0ebf6be703ded98ea951890fbc321bebc1", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "41f63cae923ee512fd8809c05718e16b6c75ba30", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "423e76550167bd77934e0c75641f35594ab66394", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "4418e2411c2458bbd26c907365cfecefb6c8d76a", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "45701714fba5b1b9dd8626a768731a3c48aadd8c", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "47e1c13c451ff7919fea3090b1f422ea035cf0c9", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "494fdbf5adaddb33a9da94d0583273eac86d7080", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "4ae8924cd041549c277e5c54784116e993b009af", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "4c6add9b3477cacc03c68f3045b64e649e0ff36d", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "4cb604f16a6ab8f1978b9615a8f1f3e18c462d70", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "4e0664176238e6b0093600e9237f3614a8630940", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "4f978af718722ce902939b0858e6a2abbebfa0ca", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "50df3b92b6e0b86c007f9b307a35101173e02f84", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "514e7de9d7ca9c83c5a65cb8b49e09806e8c552c", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "51e763f7569f6fa4d490ca030fad287f2eb6f788", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "5347f38dee5326593e81aa2f6eade3077868bac8", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "53632aa56bc29617dbf5e12997645689fe4d4ce1", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "54a06600d2c46dda14cdc7b5337234107e830e70", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "54acfc7e326e4862a1fa5e119d0da42f26b386b3", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "55b8975e59dfad8bb0ddd156b9ab57e37dbeb5cb", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "55c033ba72c4877b8b735bfa3352698a89cdfa76", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "56c4363f03f783640d9b67b8c5aa203ae0dc1686", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "5877d0d6fc34342d53d35c295f50173f135af079", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "5948a1cec8f540404235cbdca09973968117822e", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "59d27b69bb413fbd36a9f3c391fe406b4ada6505", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "59ef38201c5ea770c36bced5ca4bb00b83bb3baa", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "5a6f9041cf563d4700fd358ef50258c77d28d26b", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "5af25e06860d1a59cde345e0684c167695d17fda", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "5b1da116e7f4d00f457558752dfc6f04b25f8fe1", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "5b84ebbabf0963b1ebc528538ced130b81747a11", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "5bf5790de8304e17c9ec220d6f75e0f3f30995bd", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "5ccad47b24ca879e152244e9bdadaa29058e3f31", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "5e91a43ff557732c92f560ca9f78d604c32cd96e", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "5f255176b907c8f46cd603e5d02940e4b1c5ce9c", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "5fadbad85ab586509d2f0aee1169ad6b533ed869", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "60885830791e5828e2cc705c29247924bcc681cd", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "61653fc757362781c65f5f04355b59de9ea42832", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "62bceef78a8e7054f2dc1d32cfa0316f334f1018", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "643e77eeacef41d1873d1662875ffc70664b2e97", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "662f5cb21284618e5bc3d52dd3d842ca4af4471a", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "669a77ec7d80359d6c1ca135c3b0e4fc4f551e9e", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "698a33f49c4dc19d97886ac0049353d018e78043", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "6de48698d9fe8006e688e8d358745e1dc880b72a", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "6ee86d7219abcbfcaeffc6e71d0d860296dce8e5", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "6fd0d2671f4f5f825ab87f5190e2006b615db6d9", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "709ed62ad1429d31ad3c0c715005e92789787320", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "70a5f7bb9bd2cc720e7d4b6c8bea2e0e805cd5e8", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "7195626b23e9c971171a92b00b1511d1445ddab3", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "7331db493518fdef3ff9f58096165d91503a8476", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "734d029062e63d4688cf7cf1d768966b9f6de534", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "73ff58db0df4f90090fae8ae45e33b6a977cd169", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "746883e0c28102d29a31bbd9273574af938a999e", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "74c420b93a6b9427d20d741709c1c2f2d7858b82", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "74efa17aa1f0333441dd5a29a55b9a0a5d033972", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "74f3e90d6f80a3959ed6cfd7194ec5937fe8d6a2", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "755136c6506bbc3b41f17ae1d8eae9e4aa61e9ba", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "759e71c707ad2642901b50b1ed55480243ff7701", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "76337acce80b63aafa5c3c2c8b789e4ae3646b16", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "76fbb3441579d44aa8421029793312f812d0ef85", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "77286e2d855ff7c64c65c7dbd476c531d5a8f6e1", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "776259253cf27a262a1d7287c0f21eaf800502d1", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "785746499b3460e2729ec1eb70d467d8a0aaa177", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "78751ea5db1e7f768697d83ffb385baa04aa656a", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "7876bee7951850903f5cca287972040447defd6c", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "790a06744fc5d6f30ad760e44d031e8f356d88a0", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "79d35832789b78a2ffe5985afa9a90433a678925", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "7a569f630281bcb0111e9a987bf806626a7ed6cb", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "7af98faacc4fee79ea9d3f1f2063c63266b52133", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "7b20a2acf6f3af7b54661fc5acd84271b748c662", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "7d4e78e61cadec82aa5700efbb1e5a64dc71ee56", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "7d96d2c3a1a4cb617936b4d381c582c7700b968c", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "7f14a4a61af714bb994cbe8e9dfbb0f718b10c26", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "80947b17e54eb7b0e98e5c853e56cb89fc9becd5", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "82a42cffab6dfb24962ec166fcf9e7c99f2abdc4", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "84656fd8a37dc88ac804791811a1d431bc864cd5", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "8481a9ba4e047bb01a2ab0dfa23f6156959f651f", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "86bd9788988888c568f26d657ed09c5168200381", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "87a28aa89d2fb7cf426013512e1ab0e1aeaac2e0", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "87b97a6bb31e0bb47bfa8cd5d32d2fb814a0ccef", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "87e5f11252dcc0a630f9cf2d40aa3b0d94fc5288", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "88e50f701b3269ae26d820d6d1f18a6703e5ae3e", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "8a3a274f3813c45dbe07e2a115513846a2ea4c6d", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "8aaddee6ac3414eed0a115fcb318780c4a4fb606", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "8aca24adbd28dfb46262832d2175c684021d9d5c", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "8c56edc77cfcbc477554d9bc4c6ad743bd03d550", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "8c85b869bd224a625044c90c1425ca6709b1a69a", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "8c98cbd20c4e73b89fe6d696477a891ac5ad5ff7", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "8cce2a6d9896e871cb7573bc2d7447ee9a12cddb", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "8dbfc71e104272e5926d2d46240bfb588459f3f5", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "8f4d941f5e70d4da8ea6832f7bc672f4db5df49e", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "8f7ab25b014f1ffdcb942fc26f17dd95847d34c9", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "8fa3c00773a6b3cb9ea3dabff8a531ac52b7bb4a", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "9023ce23d9054c0dda192a06c40d91d56df77629", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "92758e10e99cf3f7d449033abadf33f5f8fba21a", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "92ae7b2020135402b09d9ce334dfdf6e5a05926e", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "9336c46a3eb56abdc78a7c5d8d6ff0e300412cbf", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "934c030f8f9a509cf650a20885701fd853a7667e", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "94ec2a24474ec11edfa01900c30e39ca65d7ed73", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "96d86ff7a689dcf27c7c92e866d141d966c0fb8b", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "9733d9a586382fda19cf5c3b51e0edccda67b974", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "974a6970344c5deacbb279357bcf065a103c465a", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "975f69d642706b0931b9ea953f0c3cfa755f0e42", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "97ace0630a5a32f9d803ad4f029bb52b2c4f5262", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "9904c32990792e98b9fdab614bafef5e889736de", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "9a3637b26d42f2017227d1dff3bb07ca5a274093", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "9ad7ac57115242c2af4db169ea62adc7e3aa3a6f", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "9c2f0fd8f4d18f4c89aa89ec3b5de31252e9b269", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "9f054310b94068a702a7135c194e4fe3f293981a", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "9f6df3a90d9fcc1d06e29612b95c7f3616958a92", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "a16a565c887ee0f777d512af47520f98ddb23ce6", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "a1e1a2abbae9cbe9fec216b2017c7f278514767d", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "a24fb87e8ef2b2c30e7e7e35c50e57c752849113", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "a2719f8803e9168619b9c33fadc1add8d67f2fb4", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "a2c6e581e572d9b13042cc88e4f0e961e68459d2", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "a32daccfc2ea689f9dfb44227f32ec00ebe8f9d8", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "a615297ba123cbc1c1c28df686cbf780fd4f43b5", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "a62dda303a06f05c3b1087bfb73626551ab3b083", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "a6b06cabe42ec597a14f56c86966b5efa282d73e", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "a6dbc155ac0a9d43627229f2bd6df550bea88b59", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "a6e6e7bff74f7c25815a082f866b5fddff7abdcc", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "a7358ff74697dd0fd4f5edeced52ad8e842e637e", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "a7ee797bdd65b4b4eb49d4f19eb0f3bf7ace529f", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "a8da24c9f37c06fdce7bd603083db01c227d945b", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "aa04b0554ff0f9fc541edf928f67eaf081ad7307", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "ace210f6ff2e8af8203d20b829a6d63db8b5962b", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "ad821878a77f0eb6ea87c1571616779023ea9017", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "ada67d44014c0f6b927e6073d9f01e6a3ec2dcbd", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "ae7fe665d6191f09dabd30970cc56392ec8ddd25", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "af4ed4143e4070b60242b935a5bb2691ae804caa", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "af7c2cae3cfd459bc49b95a23c29008d88581c5e", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "b1e4b33720db4376a5ea624e959c68146cc29c06", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "b1efb09571844800353a840009a89610a5d1ac48", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "b20259b3bced98348818a91443fda5654088a689", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "b36e40f861a7d268c59ceb36e528f99d3d0b86ef", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "b4e272478a1692431f3df692b5a31a20b32fa03f", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "b5b923a3682d898cce2718dbb2341ec48f0a9bb1", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "b6a6ceed8b43a6bbd9dfa5b001bf13a60e3f5306", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "b7838c00cfb95e435f915e28beaa7257c055bd65", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "b7b8201a45c2ebcb0728deea56a3659d7ff40100", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "b92017102cf9801d44aa5ee793d6bb6a639efe6e", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "b9b07d9b585f9f6c5e5b75d81af0842b8cafeea1", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "b9b7fa21b020a1ca2534d071efd535c22d8843ac", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "bb47af91e3e3a2ac9ff2d008a57d992a365948de", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "bc576586d6db32323a132971d71b531c07d8ca4d", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "bc63c5c0ee3cc1d3aac0488a1b1ef1823d406648", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "bdd8fd0061a7b3ae446d4b90516043f48a2a7fac", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "be7713aa237a5c90f2115fcb2bdf1d0dfcab1180", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "be8996e2dd95e01ec6c2a307a81a9e6d633de5c8", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "bf768803abbf259d5a36d23936f05cd078713455", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "c018de719fb3c80fef04f50da29b7ddf1b7f2309", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "c04b27bd18deca286717d6efd6f17ce5b8149318", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "c0a074fbd8748e9b8b0e8e53ca4f8441126f9270", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "c1f960f45e4250bf9acb060302badc97c61b9ad6", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "c237dbf82eec8e51127e9150638138f57d799772", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "c3b84a331d12e1a6a2cd476b4cd62c118ff5061d", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "c3fb0084bd34d9cf7c303d055a5da99486760ab0", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "c59fbeb88d83e79c616561863c55657042ad47da", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "c9ef6c389fe208257ee781185f69ee484d0c23d8", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "cbc5bd1f4cda877467f5d81b2a92e16f564e7811", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "ccd5a63f2ed92f85f58a64eddf33d7fc53537115", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "cdb07db150ccb371e9f18e24e55c90d9793d420d", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "cf405f2aabe10ccb6264d5b16c37ab2613aab604", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "d0753a4bbbbbd2ba2f15039b690aa2d39e24c91d", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "d0f71460d0dcb1c77b59724c8405fc5ed51a9e96", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "d5ff9211fc43298aaedc401b4d06c1db42818d53", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "d6aa3864c6a844886c8d10a9c3572a272d9c7588", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "d7f8b8c315df7a4bd290e2fd624c0e08bcac4f9e", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "d81ccd2e2eee698d2035d9eb232310ae6ef20c03", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "d8b24a5a0b970567b10b9eca2d3f1256d3d912e6", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "d93e24f89b5e5f47e8c1422977a28db452ee6db2", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "d9d139f1eafd1d32368790590169d1714f9d7b0a", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "d9f1955a936ab4ab5488d61cd329d6d5fe3f60e1", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "da852670c29ac0df9eb7ac8e9ca69028e53c0dc4", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "daa6528daba791e3afa689fce6a805571aab249b", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "daef057ea344f8ad0c60d6c517c4b3877ab3e79e", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "db2e05488367af3c805b188163728c756dad71e9", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "dcba8ae280c8ddccefa2e30854d009dd34360207", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "dd1c5cf97ecb2655193a2ee76b9201443445a0a0", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "dd35fee567d540fff45f6003070ae57da07c5cfc", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "dde5090e3b7d9580600b55d7b0a6fc5e70800f0e", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "df347b2ea28dff8f6559c9d90ad83251399435a3", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "dfa47f9404950a08e8636b2d42822febcb03fcd8", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "e054d57018fb038fe828d5aac60580072dc2e1ff", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "e19c8d02329feaa356624f3e6403ed948bea7ecd", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "e2064ae3dbd6791445d000f723f3e769e85af361", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "e2925b25d910cd31e61cd32870d691fb4a385a80", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "e2df211f914246b7ddf3325c0df801dc394609b6", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "e4562da0fdc795923a10a69aa42d3460efa40902", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "e487a2828044b22227139280da5eac8bc7be2442", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "e4c698725da4fcbca18418a72563cee44063d363", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "e5a71f998efcd3fa03a4901a57d9cbb856e45253", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "e6f139bb3e9dd1f452fb3e4cc7cef3e7bbb58325", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "e88a4dbe3e0f6c466f2bb80a4c6284e87f97ae1d", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "e8a709d5cfd94170840f0c5e3fdeb0d410896e61", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "e8e03e3676950bbc7d5cc6f6a798204b51269c56", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "e8e2b145de5c6d11a66f563e881b40f2d0386942", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "e9ddd38fdd53367fb1fd73389674d7fcbda77a7d", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "eb048a83f19540c1374e0d91aca7b78f6d096acb", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "ebdff8b0897405fb6177ac8a56bdda5587c812f8", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "ec0531429221482a5f8b8ed97e8399467caf37fb", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "efaa9672b44b8995fccd9cba6306349a18e50254", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "f17a6b091fc1948913ad3185beb1f7982e711c9a", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "f194c6cc76b7222617a1fd4b4085974026e36c24", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "f2660c981e9947e76bee556e847ab26664826915", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "f27f6853fce0010c8a522be027164e953bda965a", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "f346e4900bda8a6c5a7d8bee39d94c719d92a625", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "f349af313326323645af39eb5d3f80d4b6f4a43a", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "f690a9f194c41ef32bd14fa3fbbab76e6043050c", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "f6a4afd3b84329c2ca2d11df3fc231af3316f1fc", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "f6d4b991ad6f98d9f909f7062c5200f9d8c0c08c", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "f70fb40cfc73e977a09a6a35239e20778ebe24e6", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "f85eb42b166715194b50f310f489ace520a0ea48", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "f903340921427ce6f27d37f8eefb2710ccc2dbcb", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "f9910d0f640dd5047afdedd42e94a8a4eb1e659f", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "f9f7d58e11700162b8a0961756db5c959acd8e47", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "fa8df89aa739f3547ad658ac2f3e75673dd625e8", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "fad888fa9d7d00c30ad3ed01663402326170ece5", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "fda2fe8d5e53ac6f6df729f7d25defc591f17ac1", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "fdff18e69133d7a0ca798c1dec4662cd168b9a3a", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "ff2e961a438603ab2d5f0c3e418e6fb9acecc875", + "is_verified": false, + "line_number": 1 + }, + { + "type": "Hex High Entropy String", + "filename": "static/pyodide/pyodide-lock.json", + "hashed_secret": "ffd1c5c6b8db2241544f2702ffa52139ae8fe4c6", + "is_verified": false, + "line_number": 1 + } + ], + "workflow-archive/integration-test.yml": [ + { + "type": "Secret Keyword", + "filename": "workflow-archive/integration-test.yml", + "hashed_secret": "afc848c316af1a89d49826c5ae9d00ed769415f3", + "is_verified": false, + "line_number": 77 + }, + { + "type": "Secret Keyword", + "filename": "workflow-archive/integration-test.yml", + "hashed_secret": "dff6d4ff5dc357cf451d1855ab9cbda562645c9f", + "is_verified": false, + "line_number": 123 + }, + { + "type": "Basic Auth Credentials", + "filename": "workflow-archive/integration-test.yml", + "hashed_secret": "afc848c316af1a89d49826c5ae9d00ed769415f3", + "is_verified": false, + "line_number": 152 + } + ] + }, + "generated_at": "2024-11-15T04:49:12Z" +} diff --git a/TODO.md b/TODO.md index 457d22119..dc6fe5c11 100644 --- a/TODO.md +++ b/TODO.md @@ -6,6 +6,10 @@ - Cite sources in rag (do this for other models, too): - Allow bulk select even when nothing is tagged: - Models and docs need ownership and visibility in database, owner str, visibility [str] +- OpenAI embeddings via plugin? https://github.com/open-webui/open-webui/discussions/2288 +- Bigger exponential back off in embeddings, up to 10-20 minutes? Need to handle async failures/missing chunks. +- Cost controls like hashing doc entries using their text to avoid duplication +- Track costs and show them to users - gray out vision for custom models that don't have vision - Ability to share docs/models by pasting an email of another user ("This email is belongs to a sandbox user. They will now have access to the model" / "This email does not belong to a sandbox user"). Probably want comma separation... - Add http links to Doc upload options, seems mostly done diff --git a/backend/apps/rag/main.py b/backend/apps/rag/main.py index fe122e637..8f61c716d 100644 --- a/backend/apps/rag/main.py +++ b/backend/apps/rag/main.py @@ -58,8 +58,9 @@ from apps.webui.models.documents import ( Documents, DocumentForm, - # DocumentResponse, + DocumentResponse, ) +from apps.webui.routers.documents import get_documents from apps.rag.utils import ( get_model_path, @@ -313,7 +314,7 @@ async def update_embedding_config( form_data: EmbeddingModelUpdateForm, user=Depends(get_admin_user) ): log.info( - f"Updating embedding model: {app.state.config.RAG_EMBEDDING_MODEL} to {form_data.embedding_model}" + f"Updating embedding model from {app.state.config.RAG_EMBEDDING_MODEL} to {form_data.embedding_model}" ) try: app.state.config.RAG_EMBEDDING_ENGINE = form_data.embedding_engine @@ -323,11 +324,22 @@ async def update_embedding_config( if form_data.openai_config is not None: app.state.config.RAG_OPENAI_API_BASE_URL = form_data.openai_config.url app.state.config.RAG_OPENAI_API_KEY = form_data.openai_config.key - app.state.config.RAG_EMBEDDING_OPENAI_BATCH_SIZE = ( - form_data.openai_config.batch_size - if form_data.openai_config.batch_size - else 1 - ) + if form_data.openai_config.batch_size: + log.info( + f"Updating batch size from {app.state.config.RAG_EMBEDDING_OPENAI_BATCH_SIZE} to {form_data.openai_config.batch_size}" + ) + app.state.config.RAG_EMBEDDING_OPENAI_BATCH_SIZE = ( + form_data.openai_config.batch_size + ) + if app.state.config.RAG_EMBEDDING_ENGINE in ["openai"]: + if form_data.openai_config is not None: + if form_data.openai_config.batch_size: + log.info( + f"Updating batch size from {app.state.config.RAG_EMBEDDING_OPENAI_BATCH_SIZE} to {form_data.openai_config.batch_size}" + ) + app.state.config.RAG_EMBEDDING_OPENAI_BATCH_SIZE = ( + form_data.openai_config.batch_size + ) update_embedding_model(app.state.config.RAG_EMBEDDING_MODEL) @@ -956,8 +968,6 @@ async def store_docs_in_vector_db( embeddings = await compute_embeddings(texts) - log_and_print_summary(texts, embeddings, collection_name) - items_to_upsert: List[VectorItem] = [] for text, embedding, metadata in zip(texts, embeddings, metadatas): vector_item = VectorItem( @@ -970,6 +980,8 @@ async def store_docs_in_vector_db( VECTOR_CLIENT.upsert(collection_name, items_to_upsert) + log_and_print_summary(texts, embeddings, collection_name) + return True except Exception as e: log.exception(f"Error storing documents: {e}") @@ -1013,6 +1025,11 @@ async def compute_embeddings(texts): # Replace newlines embedding_texts = [text.replace("\n", " ") for text in texts] + + log.info(f"Computing embeddings for {len(embedding_texts)} texts") + log.debug( + f"First text: {embedding_texts[0][0:100]} \nAnd last text: {embedding_texts[-1][0:100]}" + ) return await embedding_func(embedding_texts) @@ -1024,7 +1041,7 @@ def log_and_print_summary(texts, embeddings, collection_name): log.info(f"Number of embeddings: {len(embeddings)} for {len(texts)} texts.") log.debug(f"First text: {texts[0]} \nAnd last text: {texts[-1]}") log.info(f"Estimated memory usage: {memory_usage / (1024 ** 2):.2f} MB") - log.warning(f"Adding {len(texts)} documents to collection {collection_name}") + log.info(f"Adding {len(texts)} documents to collection {collection_name}") def get_loader(filename: str, file_content_type: str, file_path: str): @@ -1210,6 +1227,36 @@ def store_text( ) +@app.get("/scan_database_docs") +async def scan_database_docs(user=Depends(get_admin_user)): + # Fetch all documents using the get_documents function + docs = await get_documents(user=user) + + for doc in docs: + try: + # Extract collection name and content from each DocumentResponse + collection_name = doc.collection_name + content = doc.content # This is the content attribute of DocumentResponse + # content = json.loads(content) + + log.info(f"Scanning {collection_name}") + log.info(f"Doc: {doc}") + log.info(f"Content: {content}") + + # Ensure the content is properly loaded for processing + if content and isinstance(content, str): + data = content # You can convert to the format needed for further processing + + # Here you could add your logic to split documents if needed + await sleep(60) + await store_data_in_vector_db(data, collection_name) + + except Exception as e: + log.exception(e) + + return {"status": "scan complete"} + + @app.get("/scan") async def scan_docs_dir(user=Depends(get_admin_user)): for dir in [DOCS_DIR, UPLOAD_DIR]: diff --git a/backend/apps/rag/pgvector_example.py b/backend/apps/rag/pgvector_example.py index bd0fecc6d..b2b6b70db 100644 --- a/backend/apps/rag/pgvector_example.py +++ b/backend/apps/rag/pgvector_example.py @@ -200,7 +200,7 @@ # # HOST = "localhost" # # DATABASE = "postgres" # # USER = "postgres" -# # PASSWORD = "mysecretpassword" +# # PASSWORD = "mysecretpassword" # pragma: allowlist secret # # PORT = 5432 # # # Connect to Postgres and register the vector extension diff --git a/backend/apps/rag/tests/test_vector_client.py b/backend/apps/rag/tests/test_vector_client.py index 7a51d5460..d095541bb 100644 --- a/backend/apps/rag/tests/test_vector_client.py +++ b/backend/apps/rag/tests/test_vector_client.py @@ -17,7 +17,7 @@ async def initialize_client(): HOST = "localhost" DATABASE = "postgres" USER = "postgres" - PASSWORD = "mysecretpassword" + PASSWORD = "mysecretpassword" # pragma: allowlist secret PORT = 5432 if VECTOR_STORE == "postgres": return PGVectorClient( diff --git a/backend/apps/rag/utils.py b/backend/apps/rag/utils.py index 09025aece..41a98ccd4 100644 --- a/backend/apps/rag/utils.py +++ b/backend/apps/rag/utils.py @@ -246,14 +246,13 @@ async def generate_openai_batch_embeddings_async( try: if "azure.com" in url: initial_delay = 0.2 - max_retries = 10 + max_retries = 15 attempt = 0 retry_delay = initial_delay # Start with the initial delay while attempt <= max_retries: - log.debug( - f"Generating async OpenAI embeddings for {texts[0][0:25]}..." - + f"(Attempt {attempt + 1}/{max_retries + 1})" + log.info( + f"Attempting to sending batch of {len(texts)} texts to Azure OpenAI..." ) async with session.post( f"{url}/embeddings?api-version=2023-05-15", @@ -321,7 +320,9 @@ def get_embedding_function( openai_url, batch_size, ): - log.debug(f"Getting embedding function for {embedding_engine} & {embedding_model}") + log.debug( + f"Getting embedding function for {embedding_engine} & {embedding_model} with batch size {batch_size}" + ) embedding_engine = str(embedding_engine).strip() if embedding_engine == "": return lambda query: embedding_function.encode(query).tolist() @@ -434,6 +435,8 @@ async def get_rag_context( if context: log.info(f"Adding context from doc {idx+1} to relevant contexts") + log.info(f"context is: {context}") + log.info(f"doc is: {context}") relevant_contexts.append({**context, "source": doc}) else: log.warning(f"No context found for doc {idx+1}") @@ -455,9 +458,15 @@ async def get_rag_context( log.info(f"Context documents: {context['documents'][0]}") texts = [text for text in context["documents"][0] if text is not None] log.debug(f"Found texts: {texts[0]}") - context_string += "\n\n".join(texts) if "metadatas" in context: + for idx, metadata in enumerate(context["metadatas"][0]): + file_name = metadata["source"].split("/")[-1] + page_num = metadata.get("page", 1) + pre_string = f"\n{file_name}\n{page_num}\n" + post_string = f"\n" + texts[idx] = pre_string + texts[idx] + post_string + log.info("Adding citation from metadata") log.info(f"Metadata: {context['metadatas']}") citation = { @@ -466,6 +475,8 @@ async def get_rag_context( "metadata": context["metadatas"][0], } citations.append(citation) + + context_string += "\n\n".join(texts) log.info(f"Updated context string: {context_string[:100]}...") log.debug(f"Updated citations: {citations}") else: diff --git a/backend/config.py b/backend/config.py index f911b2d2a..8219b1f86 100644 --- a/backend/config.py +++ b/backend/config.py @@ -853,7 +853,7 @@ class BannerModel(BaseModel): RAG_EMBEDDING_OPENAI_BATCH_SIZE = PersistentConfig( "RAG_EMBEDDING_OPENAI_BATCH_SIZE", "rag.embedding_openai_batch_size", - os.environ.get("RAG_EMBEDDING_OPENAI_BATCH_SIZE", 1), + os.environ.get("RAG_EMBEDDING_OPENAI_BATCH_SIZE", 100), ) RAG_RERANKING_MODEL = PersistentConfig( @@ -1165,11 +1165,6 @@ class BannerModel(BaseModel): REDIS_CLIENT = None CHROMA_CLIENT = None REDIS_VL_SCHEMA = None -# HOST = "localhost" -# DATABASE = "postgres" -# USER = "postgres" -# PASSWORD = "mysecretpassword" -# PORT = 5432 DATABASE_URL = os.environ.get("DATABASE_URL", f"sqlite:///{DATA_DIR}/webui.db") diff --git a/backend/data/config.json b/backend/data/config.json index 6c36c202e..d526de021 100644 --- a/backend/data/config.json +++ b/backend/data/config.json @@ -64,7 +64,7 @@ "rag": { "embedding_engine": "openai", "embedding_model": "text-embedding-3-small", - "embedding_openai_batch_size": 1, + "embedding_openai_batch_size": 200, "pdf_extract_images": false, "chunk_size": 1500, "chunk_overlap": 100, diff --git a/backend/main.py b/backend/main.py index 7451aab1a..8a7a04f2d 100644 --- a/backend/main.py +++ b/backend/main.py @@ -182,7 +182,7 @@ async def lifespan(app: FastAPI): app.state.MODELS = {} app.add_middleware( - SessionMiddleware, secret_key="your_secret_key", max_age=None + SessionMiddleware, secret_key=str(secrets.token_urlsafe(32)), max_age=None ) # TODO: fix max_age origins = ["*"] @@ -299,6 +299,8 @@ async def dispatch(self, request: Request, call_next): # TODO: make this a config var return_citations = True + cost = 0 + if request.method == "POST" and ( "/ollama/api/chat" in request.url.path or "/chat/completions" in request.url.path @@ -399,19 +401,26 @@ async def dispatch(self, request: Request, call_next): del data["docs"] - log.debug(f"rag_context: {rag_context}, citations: {citations}") + # log.debug(f"rag_context: {rag_context}, citations: {citations}") if context != "": system_prompt = rag_template( rag_app.state.config.RAG_TEMPLATE, context, prompt ) - log.info(system_prompt) + log.info(f"system_prompt: {system_prompt}") data["messages"] = add_or_update_system_message( f"\n{system_prompt}", data["messages"] ) + # log.error(f"chat data is:\n{data}") + + tokens = 0 + for message in data["messages"]: + tokens += len(message["content"].split()) + cost = tokens * 0.0000025 # input token cost + modified_body_bytes = json.dumps(data).encode("utf-8") # Replace the request body with the modified one @@ -428,6 +437,8 @@ async def dispatch(self, request: Request, call_next): response = await call_next(request) + response.headers["X-Input-Cost"] = str(cost) + if request.method == "POST" and ( "/ollama/api/chat" in request.url.path or "/chat/completions" in request.url.path @@ -446,7 +457,7 @@ async def dispatch(self, request: Request, call_next): if "text/event-stream" in content_type: return StreamingResponse( self.openai_stream_wrapper( - response.body_iterator, citations + response.body_iterator, citations, cost=cost ), ) if "application/x-ndjson" in content_type: @@ -461,8 +472,9 @@ async def dispatch(self, request: Request, call_next): async def _receive(self, body: bytes): return {"type": "http.request", "body": body, "more_body": False} - async def openai_stream_wrapper(self, original_generator, citations): - yield f"data: {json.dumps({'citations': citations})}\n\n" + async def openai_stream_wrapper(self, original_generator, citations, **kwargs): + initial_data = {"citations": citations, **kwargs} + yield f"data: {json.dumps(initial_data)}\n\n" async for data in original_generator: yield data @@ -632,7 +644,15 @@ async def update_embedding_function(request: Request, call_next): status_code=status.HTTP_400_BAD_REQUEST, content={"detail": f"Invalid WebSocket upgrade request: {e}"}, ) - response = await call_next(request) + + try: + response = await call_next(request) + except Exception as e: + log.error(f"Error processing request: {e}") + return RedirectResponse( + url=str(request.url), status_code=status.HTTP_307_TEMPORARY_REDIRECT + ) + if "/embedding/update" in request.url.path: webui_app.state.EMBEDDING_FUNCTION = rag_app.state.EMBEDDING_FUNCTION return response diff --git a/backend/requirements.txt b/backend/requirements.txt index 89fcf6e99..aabea723d 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -19,6 +19,7 @@ psycopg2-binary==2.9.9 pgvector==0.2.5 PyMySQL==1.1.1 bcrypt==4.1.3 +detect-secrets==1.5.0 boto3==1.34.110 diff --git a/src/lib/apis/streaming/index.ts b/src/lib/apis/streaming/index.ts index f91edad83..57d04014a 100644 --- a/src/lib/apis/streaming/index.ts +++ b/src/lib/apis/streaming/index.ts @@ -7,6 +7,8 @@ type TextStreamUpdate = { // eslint-disable-next-line @typescript-eslint/no-explicit-any citations?: any; // eslint-disable-next-line @typescript-eslint/no-explicit-any + cost?: any; + // eslint-disable-next-line @typescript-eslint/no-explicit-any error?: any; usage?: ResponseUsage; }; @@ -40,32 +42,39 @@ export async function createOpenAITextStream( async function* openAIStreamToIterator( reader: ReadableStreamDefaultReader ): AsyncGenerator { + var cost = 0.0; while (true) { const { value, done } = await reader.read(); + if (done) { - yield { done: true, value: '' }; + yield { done: true, value: '', cost: cost }; break; } if (!value) { continue; } const data = value.data; - if (data.startsWith('[DONE]')) { - yield { done: true, value: '' }; - break; - } try { const parsedData = JSON.parse(data); - console.log(parsedData); + // console.log('parsedData', parsedData); + + if (parsedData.cost) { + cost = parsedData.cost; + } + + if (data.startsWith('[DONE]')) { + yield { done: true, value: '', cost: cost }; + break; + } if (parsedData.error) { - yield { done: true, value: '', error: parsedData.error }; + yield { done: true, value: '', error: parsedData.error, cost: cost }; break; } if (parsedData.citations) { - yield { done: false, value: '', citations: parsedData.citations }; + yield { done: false, value: '', citations: parsedData.citations, cost: cost }; continue; } diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index 8819a0428..c08a92111 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -96,6 +96,8 @@ currentId: null }; + let currentDollarAmount = 0.0; + $: if (history.currentId !== null) { let _messages = []; @@ -489,7 +491,7 @@ }, []); } - console.log(userContext); + console.log('userContext:', userContext); } } } @@ -948,20 +950,37 @@ scrollToBottom(); + // get "X-Input-Cost" header from response + if (res && res.ok && res.headers) { + const inputCost = res.headers.get('x-input-cost'); + if (inputCost) { + currentDollarAmount += parseFloat(inputCost); + } + } + if (res && res.ok && res.body) { const textStream = await createOpenAITextStream(res.body, $settings.splitLargeChunks); let lastUsage = null; for await (const update of textStream) { - const { value, done, citations, error, usage } = update; + const { value, done, citations, cost, error, usage } = update; if (error) { await handleOpenAIError(error, null, model, responseMessage); break; } + + console.log('update', update); + if (done || stopResponseFlag || _chatId !== $chatId) { responseMessage.done = true; messages = messages; + // console.log('cost on stop is:', cost); + + // if (cost) { + // currentDollarAmount += cost; + // } + if (stopResponseFlag) { controller.abort('User: Stop Response'); } else { @@ -984,6 +1003,11 @@ continue; } + if (cost) { + responseMessage.cost = cost; + continue; + } + if (responseMessage.content == '' && value == '\n') { continue; } else { @@ -1077,6 +1101,18 @@ scrollToBottom(); } + if (responseMessage.content) { + // get model name + const modelName = model.name ?? model.id; + console.log(`modelName: ${modelName}`); // i.e. FedRamp High Azure GPT 4 Omni + // count and log the number of words in the response + const tokens = Math.round(responseMessage.content.split(' ').length / 0.75); + console.log(`Response contains ${tokens} tokens`); + const tokenCost = tokens * 0.00001; + currentDollarAmount += tokenCost; + currentDollarAmount = Math.round(currentDollarAmount * 10000) / 10000; + } + if (messages.length == 2) { window.history.replaceState(history.state, '', `/c/${_chatId}`); @@ -1392,6 +1428,7 @@ bind:selectedToolIds bind:webSearchEnabled bind:atSelectedModel + dollarAmount={currentDollarAmount} availableToolIds={selectedModelIds.reduce((a, e, i, arr) => { const model = $models.find((m) => m.id === e); if (model?.info?.meta?.toolIds ?? false) { diff --git a/src/lib/components/chat/MessageInput.svelte b/src/lib/components/chat/MessageInput.svelte index ba288829b..36d989d1e 100644 --- a/src/lib/components/chat/MessageInput.svelte +++ b/src/lib/components/chat/MessageInput.svelte @@ -181,6 +181,8 @@ } }; + export let dollarAmount = 0.0; // Initial dollar amount + onMount(() => { window.setTimeout(() => chatTextAreaElement?.focus(), 0); @@ -1004,6 +1006,9 @@
{$i18n.t('LLMs can make mistakes. Verify important information.')} + ${dollarAmount}
diff --git a/src/lib/components/chat/Messages/ResponseMessage.svelte b/src/lib/components/chat/Messages/ResponseMessage.svelte index c7ad576a8..41198b3c7 100644 --- a/src/lib/components/chat/Messages/ResponseMessage.svelte +++ b/src/lib/components/chat/Messages/ResponseMessage.svelte @@ -538,6 +538,23 @@ {/if} + {#if message.cost} +
+
+ +
+
+ {/if} + {#if message.citations}
{#each message.citations.reduce((acc, citation) => {