diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000..e872e93340 --- /dev/null +++ b/.gitignore @@ -0,0 +1,283 @@ +# node gitignore copy from https://github.com/github/gitignore/blob/main/Node.gitignore +.env +node_modules +npm-debug.log +yarn-error.log + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + + +# express gitignore copy from https://github.com/expressjs/express/blob/master/.gitignore + + +# npm +node_modules +package-lock.json +*.log +*.gz + +# Coveralls +.nyc_output +coverage + +# Benchmarking +benchmarks/graphs + +# ignore additional files using core.excludesFile +# https://git-scm.com/docs/gitignore + + +*.DS_Store +*__pycache__* + +# Expo +.expo +__generated__ +web-build +bare-apps + +# Ruby +.direnv + +# Env +.envrc.local + +# Emacs +*~ + +# Vim +.*.swp +.*.swo +.*.swn +.*.swm + +# VS Code +.vscode/launch.json + +# Sublime Text +*.sublime-project +*.sublime-workspace + +# Xcode +*.pbxuser +!default.pbxuser +*.xccheckout +*.xcscmblueprint +xcuserdata + +# IDEA / Android Studio +*.iml +.gradle +.idea + +# Eclipse +.project +.settings + +# VSCode +.history/ +/vscode/launch.json + +# Android +*.apk +*.hprof +ReactAndroid-temp.aar + +# Tools +jarjar-rules.txt + +# Dynamic Macros +.kernel-ngrok-url + +# Template files +/apps/bare-expo/android/app/google-services.json +/apps/bare-expo/ios/BareExpo/GoogleService-Info.plist + +# Template projects +templates/**/android/**/generated/* +templates/**/android/app/build +templates/**/Pods/** +templates/**/Podfile.lock +templates/**/yarn.lock + +# Codemod +.codemod.bookmark + +# Fastlane +/*.cer +/fastlane/report.xml +/fastlane/Preview.html +/fastlane/Deployment +/fastlane/test_output +/Preview.html +/gc_keys.json +/fastlane/gc_keys.json + +# CI +/android/logcat.txt + +# Shell apps +android-shell-app +shellAppBase-* +shellAppIntermediates +shellAppWorkspaces +/artifacts/* + +# Expo Client builds +/client-builds + +# Expo web env +.env.local +.env.development.local +.env.test.local +.env.production.local +apps/bare-expo/deploy-url.txt + +# Temporary files created by Metro to check the health of the file watcher +.metro-health-check* + +# Expo Doc merging +docs/pages/versions/*/react-native/ADDED_*.md +docs/pages/versions/*/react-native/REMOVED_*.md +docs/pages/versions/*/react-native/*.diff + +# Expo Go +/apps/expo-go/src/dist + +# Prebuilds +/packages/**/*.xcframework +/packages/**/*.spec.json +/packages/**/Info-generated.plist +!crsqlite.xcframework + +# iOS +**/ios/.xcode.env.local \ No newline at end of file diff --git a/DataExtract/README.md b/DataExtract/README.md new file mode 100644 index 0000000000..1d75795216 --- /dev/null +++ b/DataExtract/README.md @@ -0,0 +1,10 @@ +# Data extract +업로드된 모델을 사용해 추출된 데이터를 mongoDB에 넣는 과정입니다. +## Requirements +pip install torch +pip install "transformers[torch]" +pip install datasets +pip install seqeval +pip install kobert-transformers +pip install git+https://github.com/SKTBrain/KoBERT.git@master +pip install 'git+https://github.com/SKTBrain/KoBERT.git#egg=kobert_tokenizer&subdirectory=kobert_hf' diff --git a/DataExtract/colab/KLUE_koBERT.ipynb b/DataExtract/colab/KLUE_koBERT.ipynb new file mode 100644 index 0000000000..a6fc3d017a --- /dev/null +++ b/DataExtract/colab/KLUE_koBERT.ipynb @@ -0,0 +1 @@ +{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"authorship_tag":"ABX9TyMjoTseSJziIreO8BbEMZz4"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"},"widgets":{"application/vnd.jupyter.widget-state+json":{"c1126d83d1f341288abfd4315cb32617":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_a5fe76df0a8e4f32a50ad8c1d1c6a0f7","IPY_MODEL_085891cde0f640fab5f95b77dc685d6a","IPY_MODEL_25357dcbee504285bef7b756df2eb1e8"],"layout":"IPY_MODEL_9d350ab1397945a59e1a921dbd3eab4a"}},"a5fe76df0a8e4f32a50ad8c1d1c6a0f7":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_32660e12b6eb4051b3406e4ab5af1b43","placeholder":"​","style":"IPY_MODEL_b1557c4630434eacb41552b1cd82772f","value":"Downloading readme: 100%"}},"085891cde0f640fab5f95b77dc685d6a":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_72780c544a8548748b536a5f0c3b3280","max":22458,"min":0,"orientation":"horizontal","style":"IPY_MODEL_0aafcc9710324407ab00a0d93f9e9e3b","value":22458}},"25357dcbee504285bef7b756df2eb1e8":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_fde3abc49dfe47d786f5e88ec01b6657","placeholder":"​","style":"IPY_MODEL_68a0bd40bd254f3b8d8b0174c5a6812b","value":" 22.5k/22.5k [00:00<00:00, 751kB/s]"}},"9d350ab1397945a59e1a921dbd3eab4a":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"32660e12b6eb4051b3406e4ab5af1b43":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"b1557c4630434eacb41552b1cd82772f":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"72780c544a8548748b536a5f0c3b3280":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"0aafcc9710324407ab00a0d93f9e9e3b":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"fde3abc49dfe47d786f5e88ec01b6657":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"68a0bd40bd254f3b8d8b0174c5a6812b":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"1ae3e4bec3544345838388de1e78ef66":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_cb56686e935d45bd852e95c16c99313f","IPY_MODEL_b915a96f1b13402981c06439ba0a6342","IPY_MODEL_a2d90675c82f4a8d90d87a3d076fe62d"],"layout":"IPY_MODEL_90c427c61d5547abace2995c457c118a"}},"cb56686e935d45bd852e95c16c99313f":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_3fa8fac8d20d4c91ae72b998c73e2a41","placeholder":"​","style":"IPY_MODEL_131cbebdbf5a4d05a3f7ef83a334759a","value":"Downloading data: 100%"}},"b915a96f1b13402981c06439ba0a6342":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_0a37136b0c2b4aaf9c78942e61999de4","max":4209983,"min":0,"orientation":"horizontal","style":"IPY_MODEL_32d99c518d4c4f16abbdd4c4142b4874","value":4209983}},"a2d90675c82f4a8d90d87a3d076fe62d":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_2e1268ab7b524d349ea42030c7372bb4","placeholder":"​","style":"IPY_MODEL_255f4d4d019d4fa19bf1fbb74eb2048f","value":" 4.21M/4.21M [00:00<00:00, 9.79MB/s]"}},"90c427c61d5547abace2995c457c118a":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"3fa8fac8d20d4c91ae72b998c73e2a41":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"131cbebdbf5a4d05a3f7ef83a334759a":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"0a37136b0c2b4aaf9c78942e61999de4":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"32d99c518d4c4f16abbdd4c4142b4874":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"2e1268ab7b524d349ea42030c7372bb4":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"255f4d4d019d4fa19bf1fbb74eb2048f":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"669cd3c1c901432e92b386ffee7d109f":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_1efe4d1f75094029b43842d221de6ad5","IPY_MODEL_45b0b7634d4b4d0e873f4e49807389f8","IPY_MODEL_c4391f8d47f54a909c23fc69107b8c19"],"layout":"IPY_MODEL_9aabc54ee5c84da2aa06a08aed9d5caa"}},"1efe4d1f75094029b43842d221de6ad5":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_934fee2f93ed4580a09f6066d56c0571","placeholder":"​","style":"IPY_MODEL_657e2f2664f449deb145f8dd54be2af9","value":"Downloading data: 100%"}},"45b0b7634d4b4d0e873f4e49807389f8":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_b6432105c16c4ec08146b76f164fdee3","max":1055904,"min":0,"orientation":"horizontal","style":"IPY_MODEL_12b4366d669f484187a3c76ff61fac21","value":1055904}},"c4391f8d47f54a909c23fc69107b8c19":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_a8dd583653a640c18e87a17a7639ce46","placeholder":"​","style":"IPY_MODEL_a5238f82ce3144f78ec685bea0ceead8","value":" 1.06M/1.06M [00:00<00:00, 4.69MB/s]"}},"9aabc54ee5c84da2aa06a08aed9d5caa":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"934fee2f93ed4580a09f6066d56c0571":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"657e2f2664f449deb145f8dd54be2af9":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"b6432105c16c4ec08146b76f164fdee3":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"12b4366d669f484187a3c76ff61fac21":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"a8dd583653a640c18e87a17a7639ce46":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"a5238f82ce3144f78ec685bea0ceead8":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"5234ea92d3974838a25e6518028ca9d4":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_fe6adab838074e0a8e92303a393f1f76","IPY_MODEL_c611f38b505244828dc275f974881e92","IPY_MODEL_728f3fd67bb6457386206b62585f8d22"],"layout":"IPY_MODEL_4175ff31e8c8424ea83e374032699b2f"}},"fe6adab838074e0a8e92303a393f1f76":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_5673994469ab45149ae9cd815a91a1ab","placeholder":"​","style":"IPY_MODEL_39256abc39f845aa9e0b01b89d2c56aa","value":"Generating train split: 100%"}},"c611f38b505244828dc275f974881e92":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_550906b518a84ae9a35a562ebb7f1bc6","max":21008,"min":0,"orientation":"horizontal","style":"IPY_MODEL_db23dd7b6f7f4c778b47d42bb3045fc7","value":21008}},"728f3fd67bb6457386206b62585f8d22":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_2117820b737d4e088133729763826501","placeholder":"​","style":"IPY_MODEL_ffab7e69f9a5492e909abdd6d32ea5bb","value":" 21008/21008 [00:00<00:00, 66905.79 examples/s]"}},"4175ff31e8c8424ea83e374032699b2f":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"5673994469ab45149ae9cd815a91a1ab":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"39256abc39f845aa9e0b01b89d2c56aa":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"550906b518a84ae9a35a562ebb7f1bc6":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"db23dd7b6f7f4c778b47d42bb3045fc7":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"2117820b737d4e088133729763826501":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"ffab7e69f9a5492e909abdd6d32ea5bb":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"faec81d845c546a0b104063742a637d0":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_577d97ea6a22498eba66d6e511064d14","IPY_MODEL_0445ca3c47764f138d59c1ba4f55f4a1","IPY_MODEL_99b2cd84aefe4a0e8826872e8605c230"],"layout":"IPY_MODEL_752ccb55d6d94cf2ab83aa8b1de9a05c"}},"577d97ea6a22498eba66d6e511064d14":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_f358d7c0827940ba91709afe0ae1e4ac","placeholder":"​","style":"IPY_MODEL_a37415c81ec0478084aceca86743392b","value":"Generating validation split: 100%"}},"0445ca3c47764f138d59c1ba4f55f4a1":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_2ad6a3e791cf4549a755db826dc01261","max":5000,"min":0,"orientation":"horizontal","style":"IPY_MODEL_076c147fa7aa46b9ad0cfe75298525fc","value":5000}},"99b2cd84aefe4a0e8826872e8605c230":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_c9ec5cf67b694bdeadfa5c9b88c6205c","placeholder":"​","style":"IPY_MODEL_8f175945facb43fd8dacc503e70d1050","value":" 5000/5000 [00:00<00:00, 64092.52 examples/s]"}},"752ccb55d6d94cf2ab83aa8b1de9a05c":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"f358d7c0827940ba91709afe0ae1e4ac":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"a37415c81ec0478084aceca86743392b":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"2ad6a3e791cf4549a755db826dc01261":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"076c147fa7aa46b9ad0cfe75298525fc":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"c9ec5cf67b694bdeadfa5c9b88c6205c":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"8f175945facb43fd8dacc503e70d1050":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"49ed4789e3784b8a80ec1655c6b121ff":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_31ce07a3bbf141e19da41796bdaab499","IPY_MODEL_86831a186a2c49f7a8d17983a093cd9d","IPY_MODEL_c1e97af297514085831a3ff09bb15c95"],"layout":"IPY_MODEL_fbf3a873edbd48779ef0183d6454e371"}},"31ce07a3bbf141e19da41796bdaab499":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_ec7b60db9da14fe4a9b59d1b7c48069d","placeholder":"​","style":"IPY_MODEL_e80965e19e534e82b3e9bf170925c532","value":"config.json: 100%"}},"86831a186a2c49f7a8d17983a093cd9d":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_76c3b56840d64af0ae2e58a897c2f887","max":426,"min":0,"orientation":"horizontal","style":"IPY_MODEL_7d63a00c0ce542e1904f960bbfc4ea45","value":426}},"c1e97af297514085831a3ff09bb15c95":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_ef975c72a92346009b281a13ec97c2a4","placeholder":"​","style":"IPY_MODEL_12736ffb8e2d4fc59fd0a47612b2dc30","value":" 426/426 [00:00<00:00, 23.0kB/s]"}},"fbf3a873edbd48779ef0183d6454e371":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"ec7b60db9da14fe4a9b59d1b7c48069d":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"e80965e19e534e82b3e9bf170925c532":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"76c3b56840d64af0ae2e58a897c2f887":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"7d63a00c0ce542e1904f960bbfc4ea45":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"ef975c72a92346009b281a13ec97c2a4":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"12736ffb8e2d4fc59fd0a47612b2dc30":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"51d89ed9fad1461891ac3c25d68e1d18":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_e829c8e98dc84c5895a969751b49a9f1","IPY_MODEL_e5aa638442694fb2be1b259a4a605278","IPY_MODEL_948ff5769ab648bebde2a4d0ab17c401"],"layout":"IPY_MODEL_286644e3dc09458580c7bd7ba6120f61"}},"e829c8e98dc84c5895a969751b49a9f1":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_7cf25b1f0a234a30b9ca1e4c7a72cf9d","placeholder":"​","style":"IPY_MODEL_9ab243126b7d4bedb4f6e488304a6387","value":"model.safetensors: 100%"}},"e5aa638442694fb2be1b259a4a605278":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_15032ab0864741ea9493bb956ee55d3c","max":368769812,"min":0,"orientation":"horizontal","style":"IPY_MODEL_5790267e90c64f7b8a5376b23888903d","value":368769812}},"948ff5769ab648bebde2a4d0ab17c401":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_5cb3d229c3f941c3977315219a7ccfb7","placeholder":"​","style":"IPY_MODEL_28108876cfa84d2aa7f3f6c6927acc0f","value":" 369M/369M [00:02<00:00, 163MB/s]"}},"286644e3dc09458580c7bd7ba6120f61":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"7cf25b1f0a234a30b9ca1e4c7a72cf9d":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"9ab243126b7d4bedb4f6e488304a6387":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"15032ab0864741ea9493bb956ee55d3c":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"5790267e90c64f7b8a5376b23888903d":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"5cb3d229c3f941c3977315219a7ccfb7":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"28108876cfa84d2aa7f3f6c6927acc0f":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"aa9a2ddc40c74128a841bf2cc143c7b4":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_17d3fa25f2e6410eb771a893e4329094","IPY_MODEL_ea3b774e46c1451cacaab86f3609986b","IPY_MODEL_7fc35fb2f593475293feb1d0f9bef8aa"],"layout":"IPY_MODEL_5fb388f4832b425497516da3d5c2ac5e"}},"17d3fa25f2e6410eb771a893e4329094":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_9ce0a83cf82342f08fda92564de28492","placeholder":"​","style":"IPY_MODEL_ae8e241081f44be4b3057084030e4a21","value":"tokenizer_config.json: 100%"}},"ea3b774e46c1451cacaab86f3609986b":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_3b912326cac94e29b377d3083b19a524","max":432,"min":0,"orientation":"horizontal","style":"IPY_MODEL_1a6bb6c227104e67a46e454a363df3cf","value":432}},"7fc35fb2f593475293feb1d0f9bef8aa":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_9e50f73dfc4a49c3b5a1a445a733ff13","placeholder":"​","style":"IPY_MODEL_14da3227d7bd4177ba48860e61655e25","value":" 432/432 [00:00<00:00, 16.4kB/s]"}},"5fb388f4832b425497516da3d5c2ac5e":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"9ce0a83cf82342f08fda92564de28492":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"ae8e241081f44be4b3057084030e4a21":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"3b912326cac94e29b377d3083b19a524":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"1a6bb6c227104e67a46e454a363df3cf":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"9e50f73dfc4a49c3b5a1a445a733ff13":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"14da3227d7bd4177ba48860e61655e25":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"ac80281875c84842911a6460260cf8a4":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_51ce6716a5de4f73b925fa1c7b9e8be8","IPY_MODEL_4784288858cc4334b4ff14b590933732","IPY_MODEL_1fd75e14c97f4e04ba7db53e60c49833"],"layout":"IPY_MODEL_a5b0d3bfdc834bf8bcf3ba7c35c92e0f"}},"51ce6716a5de4f73b925fa1c7b9e8be8":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_cd64b67a02bc4c5d811d7f074ce7068a","placeholder":"​","style":"IPY_MODEL_4b4b8c1a6da84232a37a44d7947f1806","value":"spiece.model: 100%"}},"4784288858cc4334b4ff14b590933732":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_93a9a54aa6c84154aaa3f6282e4f2f3e","max":371427,"min":0,"orientation":"horizontal","style":"IPY_MODEL_1d16c6322faa43c0a7d7c472e96ee119","value":371427}},"1fd75e14c97f4e04ba7db53e60c49833":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_1b173f02fbc34d1f92ab7b84ae9e08a6","placeholder":"​","style":"IPY_MODEL_5a775aeaa23f4461ba6091070673dd31","value":" 371k/371k [00:00<00:00, 7.30MB/s]"}},"a5b0d3bfdc834bf8bcf3ba7c35c92e0f":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"cd64b67a02bc4c5d811d7f074ce7068a":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"4b4b8c1a6da84232a37a44d7947f1806":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"93a9a54aa6c84154aaa3f6282e4f2f3e":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"1d16c6322faa43c0a7d7c472e96ee119":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"1b173f02fbc34d1f92ab7b84ae9e08a6":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"5a775aeaa23f4461ba6091070673dd31":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"d0e8ddc4081c4784bb156d9009af5109":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_eba0cb3ad72d40eba9f8dc98a0dc5ff6","IPY_MODEL_d7593d14982a4572a1e157d6c50fe96e","IPY_MODEL_7f54b74ac1324e669ff1f5b0409cc5a5"],"layout":"IPY_MODEL_e830583303df450192247fdd2759e99c"}},"eba0cb3ad72d40eba9f8dc98a0dc5ff6":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_532c3ef791fa4fd3a7fd85d421dd6b63","placeholder":"​","style":"IPY_MODEL_825b698a94f84e0fb294480b7faf4fbc","value":"special_tokens_map.json: 100%"}},"d7593d14982a4572a1e157d6c50fe96e":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_4c899818f3ca48baafb4dd488d3b2189","max":244,"min":0,"orientation":"horizontal","style":"IPY_MODEL_813764980da047ffb2c52ea22e065d82","value":244}},"7f54b74ac1324e669ff1f5b0409cc5a5":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_6f7db5584abc4026b7891a517bd15603","placeholder":"​","style":"IPY_MODEL_e93ee96d27684ab6b8ec7fc8c43a06b0","value":" 244/244 [00:00<00:00, 6.55kB/s]"}},"e830583303df450192247fdd2759e99c":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"532c3ef791fa4fd3a7fd85d421dd6b63":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"825b698a94f84e0fb294480b7faf4fbc":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"4c899818f3ca48baafb4dd488d3b2189":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"813764980da047ffb2c52ea22e065d82":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"6f7db5584abc4026b7891a517bd15603":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"e93ee96d27684ab6b8ec7fc8c43a06b0":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"eef2a44dd2c8455a943b06cac0d13372":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_b65c171038b947c5b9903c93ab81aa27","IPY_MODEL_43512391a3ba4c8c9269edf803d30825","IPY_MODEL_b1a86c26f6234c24b5895dbe06c72285"],"layout":"IPY_MODEL_f5995d5260d840aab7a568512306d183"}},"b65c171038b947c5b9903c93ab81aa27":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_b60e0132442d4643973e90408610e03a","placeholder":"​","style":"IPY_MODEL_156aa2c7f4d24b6cac17d7b058677595","value":"config.json: 100%"}},"43512391a3ba4c8c9269edf803d30825":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_a96cf50c662a4004aa59585f8c9e5812","max":535,"min":0,"orientation":"horizontal","style":"IPY_MODEL_ba821d05ad0c4b0eab11262610ae3fa8","value":535}},"b1a86c26f6234c24b5895dbe06c72285":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_fa4a196705184e1484a6ad8d950b9e8b","placeholder":"​","style":"IPY_MODEL_2fe6ac9446e543e2b08d9e470aed059d","value":" 535/535 [00:00<00:00, 8.93kB/s]"}},"f5995d5260d840aab7a568512306d183":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"b60e0132442d4643973e90408610e03a":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"156aa2c7f4d24b6cac17d7b058677595":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"a96cf50c662a4004aa59585f8c9e5812":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"ba821d05ad0c4b0eab11262610ae3fa8":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"fa4a196705184e1484a6ad8d950b9e8b":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"2fe6ac9446e543e2b08d9e470aed059d":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"e4a71c74876c441ea1f3609d9962b91a":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_fde9d1f99ce74fb8a22bafc81fa05370","IPY_MODEL_f8d68608b0ac40269db721573e9e7ca7","IPY_MODEL_81b5603866b44ac9969cd8d3311a60ed"],"layout":"IPY_MODEL_e4776925e3614f1ca1855dae1a26e17b"}},"fde9d1f99ce74fb8a22bafc81fa05370":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_099aee553be94545929d4aa08fe0c3ba","placeholder":"​","style":"IPY_MODEL_b0dc39dd341e4f728314f43459725de0","value":"pytorch_model.bin: 100%"}},"f8d68608b0ac40269db721573e9e7ca7":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_a199388ee8154c55acef7b1665f45806","max":368792544,"min":0,"orientation":"horizontal","style":"IPY_MODEL_c7a278ca1a15413ebb7c3dbc4aaab9ab","value":368792544}},"81b5603866b44ac9969cd8d3311a60ed":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_173593e28058460f9aceb4064f72cd5b","placeholder":"​","style":"IPY_MODEL_d337c3edcc71442ea7bd6557f5023f70","value":" 369M/369M [00:05<00:00, 111MB/s]"}},"e4776925e3614f1ca1855dae1a26e17b":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"099aee553be94545929d4aa08fe0c3ba":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"b0dc39dd341e4f728314f43459725de0":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"a199388ee8154c55acef7b1665f45806":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"c7a278ca1a15413ebb7c3dbc4aaab9ab":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"173593e28058460f9aceb4064f72cd5b":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"d337c3edcc71442ea7bd6557f5023f70":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"276d7132e3a3408fab603e34ffba98a2":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_12e135e7ba90405ca2942bad7d83a512","IPY_MODEL_2a0b874d14c340fa8dc20611517cdcc1","IPY_MODEL_00d2f16864574f07b2c987922d465fa2"],"layout":"IPY_MODEL_8529c3ed5eb34a1caf8bc61805c6dc3d"}},"12e135e7ba90405ca2942bad7d83a512":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_365fa2a1e3544f5981584c7d0f1628a0","placeholder":"​","style":"IPY_MODEL_1743a269bfbe4cacbf4c75a4ed57dd4e","value":"Map: 100%"}},"2a0b874d14c340fa8dc20611517cdcc1":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_e9434b93f34f4154b21c0b78d9ffb909","max":9000,"min":0,"orientation":"horizontal","style":"IPY_MODEL_bb10d4b194ae476bbecb6f8a4dab4a11","value":9000}},"00d2f16864574f07b2c987922d465fa2":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_47983fd239d9418c9238c8752e7576d2","placeholder":"​","style":"IPY_MODEL_90473723d1ef41118a0f9462265ffa7a","value":" 9000/9000 [02:06<00:00, 79.22 examples/s]"}},"8529c3ed5eb34a1caf8bc61805c6dc3d":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"365fa2a1e3544f5981584c7d0f1628a0":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"1743a269bfbe4cacbf4c75a4ed57dd4e":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"e9434b93f34f4154b21c0b78d9ffb909":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"bb10d4b194ae476bbecb6f8a4dab4a11":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"47983fd239d9418c9238c8752e7576d2":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"90473723d1ef41118a0f9462265ffa7a":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"33fcb1c7ce1845ecb6f161ceeb14d038":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_ee06d6bd5b5744b6bf362aa0531a030d","IPY_MODEL_fcc598a1e6814098bd050d909115bd0a","IPY_MODEL_1ae06710cc4648f2af5aa8368b42961d"],"layout":"IPY_MODEL_026029e34a8f44de8fd077dde396642c"}},"ee06d6bd5b5744b6bf362aa0531a030d":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_6c30bba889aa4fb38811c6afaf528c10","placeholder":"​","style":"IPY_MODEL_5d6c9dc9351e434aaaa35d6c730ef5bd","value":"Map: 100%"}},"fcc598a1e6814098bd050d909115bd0a":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_4045bddec632486aba8731da9f7c723a","max":1000,"min":0,"orientation":"horizontal","style":"IPY_MODEL_fc8b806ae606424a9c0db8565ab09af1","value":1000}},"1ae06710cc4648f2af5aa8368b42961d":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_eeda6332024c4bbc9e1e6fd52c6817d2","placeholder":"​","style":"IPY_MODEL_ce44e9f832d44a0d833f100d378b42eb","value":" 1000/1000 [00:12<00:00, 82.83 examples/s]"}},"026029e34a8f44de8fd077dde396642c":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"6c30bba889aa4fb38811c6afaf528c10":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"5d6c9dc9351e434aaaa35d6c730ef5bd":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"4045bddec632486aba8731da9f7c723a":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"fc8b806ae606424a9c0db8565ab09af1":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"eeda6332024c4bbc9e1e6fd52c6817d2":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"ce44e9f832d44a0d833f100d378b42eb":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}}}}},"cells":[{"cell_type":"code","source":["from google.colab import drive\n","drive.mount('/content/drive')"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"jhUWi1aQlZvc","executionInfo":{"status":"ok","timestamp":1712135943551,"user_tz":-540,"elapsed":4567,"user":{"displayName":"송문선","userId":"02769911744591628940"}},"outputId":"3292d59d-8d5d-4a41-e8bc-cf1d86d40a51"},"execution_count":28,"outputs":[{"output_type":"stream","name":"stdout","text":["Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"]}]},{"cell_type":"code","source":["cd /content/drive/MyDrive/capstone24-35/capstone-2024-35/Data Extract/colab"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"sHWgbTDzl32J","executionInfo":{"status":"ok","timestamp":1712124212514,"user_tz":-540,"elapsed":686,"user":{"displayName":"송문선","userId":"02769911744591628940"}},"outputId":"8533e76b-55cc-4ad4-b9b7-537505d003b6"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["/content/drive/MyDrive/capstone24-35/capstone-2024-35/Data Extract/colab\n"]}]},{"cell_type":"code","source":["!pip install torch transformers datasets\n","!pip install git+https://github.com/SKTBrain/KoBERT.git@master\n","!pip install 'git+https://github.com/SKTBrain/KoBERT.git#egg=kobert_tokenizer&subdirectory=kobert_hf'\n","!pip install kobert-transformers\n","!pip install transformers\n","!pip install torch\n","!pip install datasets\n","!pip install seqeval # NER 평가를 위한 라이브러리\n","!pip install transformers[torch] -U\n","\n","from transformers import BertTokenizerFast, BertForTokenClassification, AdamW\n","from transformers import Trainer, TrainingArguments\n","from datasets import load_dataset, load_metric\n","import torch\n","from torch.utils.data import DataLoader\n","from torch.nn.utils.rnn import pad_sequence\n","import numpy as np\n","from kobert_tokenizer import KoBERTTokenizer\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"yOm9tyDoUNeR","executionInfo":{"status":"ok","timestamp":1712124390648,"user_tz":-540,"elapsed":175112,"user":{"displayName":"송문선","userId":"02769911744591628940"}},"outputId":"b6eb85a3-fc0d-4004-958a-d807dabe8f45"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Requirement already satisfied: torch in /usr/local/lib/python3.10/dist-packages (2.2.1+cu121)\n","Requirement already satisfied: transformers in /usr/local/lib/python3.10/dist-packages (4.38.2)\n","Collecting datasets\n"," Downloading datasets-2.18.0-py3-none-any.whl (510 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m510.5/510.5 kB\u001b[0m \u001b[31m7.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from torch) (3.13.3)\n","Requirement already satisfied: typing-extensions>=4.8.0 in /usr/local/lib/python3.10/dist-packages (from torch) (4.10.0)\n","Requirement already satisfied: sympy in /usr/local/lib/python3.10/dist-packages (from torch) (1.12)\n","Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch) (3.2.1)\n","Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch) (3.1.3)\n","Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from torch) (2023.6.0)\n","Collecting nvidia-cuda-nvrtc-cu12==12.1.105 (from torch)\n"," Downloading nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (23.7 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m23.7/23.7 MB\u001b[0m \u001b[31m51.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting nvidia-cuda-runtime-cu12==12.1.105 (from torch)\n"," Downloading nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (823 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m823.6/823.6 kB\u001b[0m \u001b[31m65.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting nvidia-cuda-cupti-cu12==12.1.105 (from torch)\n"," Downloading nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (14.1 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m14.1/14.1 MB\u001b[0m \u001b[31m83.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting nvidia-cudnn-cu12==8.9.2.26 (from torch)\n"," Downloading nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl (731.7 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m731.7/731.7 MB\u001b[0m \u001b[31m1.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting nvidia-cublas-cu12==12.1.3.1 (from torch)\n"," Downloading nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl (410.6 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m410.6/410.6 MB\u001b[0m \u001b[31m3.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting nvidia-cufft-cu12==11.0.2.54 (from torch)\n"," Downloading nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl (121.6 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m121.6/121.6 MB\u001b[0m \u001b[31m8.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting nvidia-curand-cu12==10.3.2.106 (from torch)\n"," Downloading nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl (56.5 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m56.5/56.5 MB\u001b[0m \u001b[31m11.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting nvidia-cusolver-cu12==11.4.5.107 (from torch)\n"," Downloading nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl (124.2 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m124.2/124.2 MB\u001b[0m \u001b[31m8.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting nvidia-cusparse-cu12==12.1.0.106 (from torch)\n"," Downloading nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl (196.0 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m196.0/196.0 MB\u001b[0m \u001b[31m4.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting nvidia-nccl-cu12==2.19.3 (from torch)\n"," Downloading nvidia_nccl_cu12-2.19.3-py3-none-manylinux1_x86_64.whl (166.0 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m166.0/166.0 MB\u001b[0m \u001b[31m6.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting nvidia-nvtx-cu12==12.1.105 (from torch)\n"," Downloading nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (99 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m99.1/99.1 kB\u001b[0m \u001b[31m14.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: triton==2.2.0 in /usr/local/lib/python3.10/dist-packages (from torch) (2.2.0)\n","Collecting nvidia-nvjitlink-cu12 (from nvidia-cusolver-cu12==11.4.5.107->torch)\n"," Downloading nvidia_nvjitlink_cu12-12.4.99-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m21.1/21.1 MB\u001b[0m \u001b[31m72.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: huggingface-hub<1.0,>=0.19.3 in /usr/local/lib/python3.10/dist-packages (from transformers) (0.20.3)\n","Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.10/dist-packages (from transformers) (1.25.2)\n","Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from transformers) (24.0)\n","Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.10/dist-packages (from transformers) (6.0.1)\n","Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.10/dist-packages (from transformers) (2023.12.25)\n","Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from transformers) (2.31.0)\n","Requirement already satisfied: tokenizers<0.19,>=0.14 in /usr/local/lib/python3.10/dist-packages (from transformers) (0.15.2)\n","Requirement already satisfied: safetensors>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from transformers) (0.4.2)\n","Requirement already satisfied: tqdm>=4.27 in /usr/local/lib/python3.10/dist-packages (from transformers) (4.66.2)\n","Requirement already satisfied: pyarrow>=12.0.0 in /usr/local/lib/python3.10/dist-packages (from datasets) (14.0.2)\n","Requirement already satisfied: pyarrow-hotfix in /usr/local/lib/python3.10/dist-packages (from datasets) (0.6)\n","Collecting dill<0.3.9,>=0.3.0 (from datasets)\n"," Downloading dill-0.3.8-py3-none-any.whl (116 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m116.3/116.3 kB\u001b[0m \u001b[31m17.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: pandas in /usr/local/lib/python3.10/dist-packages (from datasets) (1.5.3)\n","Collecting xxhash (from datasets)\n"," Downloading xxhash-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (194 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m194.1/194.1 kB\u001b[0m \u001b[31m26.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting multiprocess (from datasets)\n"," Downloading multiprocess-0.70.16-py310-none-any.whl (134 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m134.8/134.8 kB\u001b[0m \u001b[31m19.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: aiohttp in /usr/local/lib/python3.10/dist-packages (from datasets) (3.9.3)\n","Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (1.3.1)\n","Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (23.2.0)\n","Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (1.4.1)\n","Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (6.0.5)\n","Requirement already satisfied: yarl<2.0,>=1.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (1.9.4)\n","Requirement already satisfied: async-timeout<5.0,>=4.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (4.0.3)\n","Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (3.3.2)\n","Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (3.6)\n","Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (2.0.7)\n","Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (2024.2.2)\n","Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch) (2.1.5)\n","Requirement already satisfied: python-dateutil>=2.8.1 in /usr/local/lib/python3.10/dist-packages (from pandas->datasets) (2.8.2)\n","Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas->datasets) (2023.4)\n","Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy->torch) (1.3.0)\n","Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.8.1->pandas->datasets) (1.16.0)\n","Installing collected packages: xxhash, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, dill, nvidia-cusparse-cu12, nvidia-cudnn-cu12, multiprocess, nvidia-cusolver-cu12, datasets\n","Successfully installed datasets-2.18.0 dill-0.3.8 multiprocess-0.70.16 nvidia-cublas-cu12-12.1.3.1 nvidia-cuda-cupti-cu12-12.1.105 nvidia-cuda-nvrtc-cu12-12.1.105 nvidia-cuda-runtime-cu12-12.1.105 nvidia-cudnn-cu12-8.9.2.26 nvidia-cufft-cu12-11.0.2.54 nvidia-curand-cu12-10.3.2.106 nvidia-cusolver-cu12-11.4.5.107 nvidia-cusparse-cu12-12.1.0.106 nvidia-nccl-cu12-2.19.3 nvidia-nvjitlink-cu12-12.4.99 nvidia-nvtx-cu12-12.1.105 xxhash-3.4.1\n","Collecting git+https://github.com/SKTBrain/KoBERT.git@master\n"," Cloning https://github.com/SKTBrain/KoBERT.git (to revision master) to /tmp/pip-req-build-gn074nwp\n"," Running command git clone --filter=blob:none --quiet https://github.com/SKTBrain/KoBERT.git /tmp/pip-req-build-gn074nwp\n"," Resolved https://github.com/SKTBrain/KoBERT.git to commit 47a69af87928fc24e20f571fe10c3cc9dd9af9a3\n"," Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n","Collecting boto3<=1.15.18 (from kobert==0.2.3)\n"," Downloading boto3-1.15.18-py2.py3-none-any.whl (129 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m129.1/129.1 kB\u001b[0m \u001b[31m3.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting gluonnlp<=0.10.0,>=0.6.0 (from kobert==0.2.3)\n"," Downloading gluonnlp-0.10.0.tar.gz (344 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m344.5/344.5 kB\u001b[0m \u001b[31m10.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25h Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n","Collecting mxnet<=1.7.0.post2,>=1.4.0 (from kobert==0.2.3)\n"," Downloading mxnet-1.7.0.post2-py2.py3-none-manylinux2014_x86_64.whl (54.7 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m54.7/54.7 MB\u001b[0m \u001b[31m11.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hINFO: pip is looking at multiple versions of kobert to determine which version is compatible with other requirements. This could take a while.\n","\u001b[31mERROR: Could not find a version that satisfies the requirement onnxruntime<=1.8.0,==1.8.0 (from kobert) (from versions: 1.12.0, 1.12.1, 1.13.1, 1.14.0, 1.14.1, 1.15.0, 1.15.1, 1.16.0, 1.16.1, 1.16.2, 1.16.3, 1.17.0, 1.17.1)\u001b[0m\u001b[31m\n","\u001b[0m\u001b[31mERROR: No matching distribution found for onnxruntime<=1.8.0,==1.8.0\u001b[0m\u001b[31m\n","\u001b[0mCollecting kobert_tokenizer\n"," Cloning https://github.com/SKTBrain/KoBERT.git to /tmp/pip-install-mneo0rs1/kobert-tokenizer_2293aa4849df479bbe3129a7317d98d0\n"," Running command git clone --filter=blob:none --quiet https://github.com/SKTBrain/KoBERT.git /tmp/pip-install-mneo0rs1/kobert-tokenizer_2293aa4849df479bbe3129a7317d98d0\n"," Resolved https://github.com/SKTBrain/KoBERT.git to commit 47a69af87928fc24e20f571fe10c3cc9dd9af9a3\n"," Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n","Building wheels for collected packages: kobert_tokenizer\n"," Building wheel for kobert_tokenizer (setup.py) ... \u001b[?25l\u001b[?25hdone\n"," Created wheel for kobert_tokenizer: filename=kobert_tokenizer-0.1-py3-none-any.whl size=4633 sha256=e93cc311ef4520544688924cf4a64fd0befbe7ea547ac16780da2e216127cd76\n"," Stored in directory: /tmp/pip-ephem-wheel-cache-yob169tc/wheels/e9/1a/3f/a864970e8a169c176befa3c4a1e07aa612f69195907a4045fe\n","Successfully built kobert_tokenizer\n","Installing collected packages: kobert_tokenizer\n","Successfully installed kobert_tokenizer-0.1\n","Collecting kobert-transformers\n"," Downloading kobert_transformers-0.5.1-py3-none-any.whl (12 kB)\n","Requirement already satisfied: torch>=1.1.0 in /usr/local/lib/python3.10/dist-packages (from kobert-transformers) (2.2.1+cu121)\n","Requirement already satisfied: transformers<5,>=3 in /usr/local/lib/python3.10/dist-packages (from kobert-transformers) (4.38.2)\n","Requirement already satisfied: sentencepiece>=0.1.91 in /usr/local/lib/python3.10/dist-packages (from kobert-transformers) (0.1.99)\n","Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (3.13.3)\n","Requirement already satisfied: typing-extensions>=4.8.0 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (4.10.0)\n","Requirement already satisfied: sympy in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (1.12)\n","Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (3.2.1)\n","Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (3.1.3)\n","Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (2023.6.0)\n","Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (12.1.105)\n","Requirement already satisfied: nvidia-cuda-runtime-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (12.1.105)\n","Requirement already satisfied: nvidia-cuda-cupti-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (12.1.105)\n","Requirement already satisfied: nvidia-cudnn-cu12==8.9.2.26 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (8.9.2.26)\n","Requirement already satisfied: nvidia-cublas-cu12==12.1.3.1 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (12.1.3.1)\n","Requirement already satisfied: nvidia-cufft-cu12==11.0.2.54 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (11.0.2.54)\n","Requirement already satisfied: nvidia-curand-cu12==10.3.2.106 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (10.3.2.106)\n","Requirement already satisfied: nvidia-cusolver-cu12==11.4.5.107 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (11.4.5.107)\n","Requirement already satisfied: nvidia-cusparse-cu12==12.1.0.106 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (12.1.0.106)\n","Requirement already satisfied: nvidia-nccl-cu12==2.19.3 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (2.19.3)\n","Requirement already satisfied: nvidia-nvtx-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (12.1.105)\n","Requirement already satisfied: triton==2.2.0 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (2.2.0)\n","Requirement already satisfied: nvidia-nvjitlink-cu12 in /usr/local/lib/python3.10/dist-packages (from nvidia-cusolver-cu12==11.4.5.107->torch>=1.1.0->kobert-transformers) (12.4.99)\n","Requirement already satisfied: huggingface-hub<1.0,>=0.19.3 in /usr/local/lib/python3.10/dist-packages (from transformers<5,>=3->kobert-transformers) (0.20.3)\n","Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.10/dist-packages (from transformers<5,>=3->kobert-transformers) (1.25.2)\n","Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from transformers<5,>=3->kobert-transformers) (24.0)\n","Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.10/dist-packages (from transformers<5,>=3->kobert-transformers) (6.0.1)\n","Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.10/dist-packages (from transformers<5,>=3->kobert-transformers) (2023.12.25)\n","Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from transformers<5,>=3->kobert-transformers) (2.31.0)\n","Requirement already satisfied: tokenizers<0.19,>=0.14 in /usr/local/lib/python3.10/dist-packages (from transformers<5,>=3->kobert-transformers) (0.15.2)\n","Requirement already satisfied: safetensors>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from transformers<5,>=3->kobert-transformers) (0.4.2)\n","Requirement already satisfied: tqdm>=4.27 in /usr/local/lib/python3.10/dist-packages (from transformers<5,>=3->kobert-transformers) (4.66.2)\n","Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch>=1.1.0->kobert-transformers) (2.1.5)\n","Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->transformers<5,>=3->kobert-transformers) (3.3.2)\n","Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->transformers<5,>=3->kobert-transformers) (3.6)\n","Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->transformers<5,>=3->kobert-transformers) (2.0.7)\n","Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->transformers<5,>=3->kobert-transformers) (2024.2.2)\n","Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy->torch>=1.1.0->kobert-transformers) (1.3.0)\n","Installing collected packages: kobert-transformers\n","Successfully installed kobert-transformers-0.5.1\n","Requirement already satisfied: transformers in /usr/local/lib/python3.10/dist-packages (4.38.2)\n","Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from transformers) (3.13.3)\n","Requirement already satisfied: huggingface-hub<1.0,>=0.19.3 in /usr/local/lib/python3.10/dist-packages (from transformers) (0.20.3)\n","Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.10/dist-packages (from transformers) (1.25.2)\n","Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from transformers) (24.0)\n","Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.10/dist-packages (from transformers) (6.0.1)\n","Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.10/dist-packages (from transformers) (2023.12.25)\n","Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from transformers) (2.31.0)\n","Requirement already satisfied: tokenizers<0.19,>=0.14 in /usr/local/lib/python3.10/dist-packages (from transformers) (0.15.2)\n","Requirement already satisfied: safetensors>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from transformers) (0.4.2)\n","Requirement already satisfied: tqdm>=4.27 in /usr/local/lib/python3.10/dist-packages (from transformers) (4.66.2)\n","Requirement already satisfied: fsspec>=2023.5.0 in /usr/local/lib/python3.10/dist-packages (from huggingface-hub<1.0,>=0.19.3->transformers) (2023.6.0)\n","Requirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.10/dist-packages (from huggingface-hub<1.0,>=0.19.3->transformers) (4.10.0)\n","Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (3.3.2)\n","Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (3.6)\n","Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (2.0.7)\n","Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (2024.2.2)\n","Requirement already satisfied: torch in /usr/local/lib/python3.10/dist-packages (2.2.1+cu121)\n","Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from torch) (3.13.3)\n","Requirement already satisfied: typing-extensions>=4.8.0 in /usr/local/lib/python3.10/dist-packages (from torch) (4.10.0)\n","Requirement already satisfied: sympy in /usr/local/lib/python3.10/dist-packages (from torch) (1.12)\n","Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch) (3.2.1)\n","Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch) (3.1.3)\n","Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from torch) (2023.6.0)\n","Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch) (12.1.105)\n","Requirement already satisfied: nvidia-cuda-runtime-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch) (12.1.105)\n","Requirement already satisfied: nvidia-cuda-cupti-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch) (12.1.105)\n","Requirement already satisfied: nvidia-cudnn-cu12==8.9.2.26 in /usr/local/lib/python3.10/dist-packages (from torch) (8.9.2.26)\n","Requirement already satisfied: nvidia-cublas-cu12==12.1.3.1 in /usr/local/lib/python3.10/dist-packages (from torch) (12.1.3.1)\n","Requirement already satisfied: nvidia-cufft-cu12==11.0.2.54 in /usr/local/lib/python3.10/dist-packages (from torch) (11.0.2.54)\n","Requirement already satisfied: nvidia-curand-cu12==10.3.2.106 in /usr/local/lib/python3.10/dist-packages (from torch) (10.3.2.106)\n","Requirement already satisfied: nvidia-cusolver-cu12==11.4.5.107 in /usr/local/lib/python3.10/dist-packages (from torch) (11.4.5.107)\n","Requirement already satisfied: nvidia-cusparse-cu12==12.1.0.106 in /usr/local/lib/python3.10/dist-packages (from torch) (12.1.0.106)\n","Requirement already satisfied: nvidia-nccl-cu12==2.19.3 in /usr/local/lib/python3.10/dist-packages (from torch) (2.19.3)\n","Requirement already satisfied: nvidia-nvtx-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch) (12.1.105)\n","Requirement already satisfied: triton==2.2.0 in /usr/local/lib/python3.10/dist-packages (from torch) (2.2.0)\n","Requirement already satisfied: nvidia-nvjitlink-cu12 in /usr/local/lib/python3.10/dist-packages (from nvidia-cusolver-cu12==11.4.5.107->torch) (12.4.99)\n","Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch) (2.1.5)\n","Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy->torch) (1.3.0)\n","Requirement already satisfied: datasets in /usr/local/lib/python3.10/dist-packages (2.18.0)\n","Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from datasets) (3.13.3)\n","Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.10/dist-packages (from datasets) (1.25.2)\n","Requirement already satisfied: pyarrow>=12.0.0 in /usr/local/lib/python3.10/dist-packages (from datasets) (14.0.2)\n","Requirement already satisfied: pyarrow-hotfix in /usr/local/lib/python3.10/dist-packages (from datasets) (0.6)\n","Requirement already satisfied: dill<0.3.9,>=0.3.0 in /usr/local/lib/python3.10/dist-packages (from datasets) (0.3.8)\n","Requirement already satisfied: pandas in /usr/local/lib/python3.10/dist-packages (from datasets) (1.5.3)\n","Requirement already satisfied: requests>=2.19.0 in /usr/local/lib/python3.10/dist-packages (from datasets) (2.31.0)\n","Requirement already satisfied: tqdm>=4.62.1 in /usr/local/lib/python3.10/dist-packages (from datasets) (4.66.2)\n","Requirement already satisfied: xxhash in /usr/local/lib/python3.10/dist-packages (from datasets) (3.4.1)\n","Requirement already satisfied: multiprocess in /usr/local/lib/python3.10/dist-packages (from datasets) (0.70.16)\n","Requirement already satisfied: fsspec[http]<=2024.2.0,>=2023.1.0 in /usr/local/lib/python3.10/dist-packages (from datasets) (2023.6.0)\n","Requirement already satisfied: aiohttp in /usr/local/lib/python3.10/dist-packages (from datasets) (3.9.3)\n","Requirement already satisfied: huggingface-hub>=0.19.4 in /usr/local/lib/python3.10/dist-packages (from datasets) (0.20.3)\n","Requirement already satisfied: packaging in /usr/local/lib/python3.10/dist-packages (from datasets) (24.0)\n","Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.10/dist-packages (from datasets) (6.0.1)\n","Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (1.3.1)\n","Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (23.2.0)\n","Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (1.4.1)\n","Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (6.0.5)\n","Requirement already satisfied: yarl<2.0,>=1.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (1.9.4)\n","Requirement already satisfied: async-timeout<5.0,>=4.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (4.0.3)\n","Requirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.10/dist-packages (from huggingface-hub>=0.19.4->datasets) (4.10.0)\n","Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests>=2.19.0->datasets) (3.3.2)\n","Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests>=2.19.0->datasets) (3.6)\n","Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests>=2.19.0->datasets) (2.0.7)\n","Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests>=2.19.0->datasets) (2024.2.2)\n","Requirement already satisfied: python-dateutil>=2.8.1 in /usr/local/lib/python3.10/dist-packages (from pandas->datasets) (2.8.2)\n","Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas->datasets) (2023.4)\n","Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.8.1->pandas->datasets) (1.16.0)\n","Collecting seqeval\n"," Downloading seqeval-1.2.2.tar.gz (43 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m43.6/43.6 kB\u001b[0m \u001b[31m1.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25h Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n","Requirement already satisfied: numpy>=1.14.0 in /usr/local/lib/python3.10/dist-packages (from seqeval) (1.25.2)\n","Requirement already satisfied: scikit-learn>=0.21.3 in /usr/local/lib/python3.10/dist-packages (from seqeval) (1.2.2)\n","Requirement already satisfied: scipy>=1.3.2 in /usr/local/lib/python3.10/dist-packages (from scikit-learn>=0.21.3->seqeval) (1.11.4)\n","Requirement already satisfied: joblib>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from scikit-learn>=0.21.3->seqeval) (1.3.2)\n","Requirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from scikit-learn>=0.21.3->seqeval) (3.4.0)\n","Building wheels for collected packages: seqeval\n"," Building wheel for seqeval (setup.py) ... \u001b[?25l\u001b[?25hdone\n"," Created wheel for seqeval: filename=seqeval-1.2.2-py3-none-any.whl size=16161 sha256=fc1cd6c9b7785e3fe599fe6b1314b04a7625e6c4822b4cf42f6ae4005511ea00\n"," Stored in directory: /root/.cache/pip/wheels/1a/67/4a/ad4082dd7dfc30f2abfe4d80a2ed5926a506eb8a972b4767fa\n","Successfully built seqeval\n","Installing collected packages: seqeval\n","Successfully installed seqeval-1.2.2\n","Requirement already satisfied: transformers[torch] in /usr/local/lib/python3.10/dist-packages (4.38.2)\n","Collecting transformers[torch]\n"," Downloading transformers-4.39.3-py3-none-any.whl (8.8 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m8.8/8.8 MB\u001b[0m \u001b[31m24.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (3.13.3)\n","Requirement already satisfied: huggingface-hub<1.0,>=0.19.3 in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (0.20.3)\n","Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (1.25.2)\n","Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (24.0)\n","Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (6.0.1)\n","Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (2023.12.25)\n","Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (2.31.0)\n","Requirement already satisfied: tokenizers<0.19,>=0.14 in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (0.15.2)\n","Requirement already satisfied: safetensors>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (0.4.2)\n","Requirement already satisfied: tqdm>=4.27 in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (4.66.2)\n","Requirement already satisfied: torch in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (2.2.1+cu121)\n","Collecting accelerate>=0.21.0 (from transformers[torch])\n"," Downloading accelerate-0.28.0-py3-none-any.whl (290 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m290.1/290.1 kB\u001b[0m \u001b[31m32.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: psutil in /usr/local/lib/python3.10/dist-packages (from accelerate>=0.21.0->transformers[torch]) (5.9.5)\n","Requirement already satisfied: fsspec>=2023.5.0 in /usr/local/lib/python3.10/dist-packages (from huggingface-hub<1.0,>=0.19.3->transformers[torch]) (2023.6.0)\n","Requirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.10/dist-packages (from huggingface-hub<1.0,>=0.19.3->transformers[torch]) (4.10.0)\n","Requirement already satisfied: sympy in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (1.12)\n","Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (3.2.1)\n","Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (3.1.3)\n","Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (12.1.105)\n","Requirement already satisfied: nvidia-cuda-runtime-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (12.1.105)\n","Requirement already satisfied: nvidia-cuda-cupti-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (12.1.105)\n","Requirement already satisfied: nvidia-cudnn-cu12==8.9.2.26 in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (8.9.2.26)\n","Requirement already satisfied: nvidia-cublas-cu12==12.1.3.1 in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (12.1.3.1)\n","Requirement already satisfied: nvidia-cufft-cu12==11.0.2.54 in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (11.0.2.54)\n","Requirement already satisfied: nvidia-curand-cu12==10.3.2.106 in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (10.3.2.106)\n","Requirement already satisfied: nvidia-cusolver-cu12==11.4.5.107 in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (11.4.5.107)\n","Requirement already satisfied: nvidia-cusparse-cu12==12.1.0.106 in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (12.1.0.106)\n","Requirement already satisfied: nvidia-nccl-cu12==2.19.3 in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (2.19.3)\n","Requirement already satisfied: nvidia-nvtx-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (12.1.105)\n","Requirement already satisfied: triton==2.2.0 in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (2.2.0)\n","Requirement already satisfied: nvidia-nvjitlink-cu12 in /usr/local/lib/python3.10/dist-packages (from nvidia-cusolver-cu12==11.4.5.107->torch->transformers[torch]) (12.4.99)\n","Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->transformers[torch]) (3.3.2)\n","Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->transformers[torch]) (3.6)\n","Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->transformers[torch]) (2.0.7)\n","Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->transformers[torch]) (2024.2.2)\n","Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch->transformers[torch]) (2.1.5)\n","Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy->torch->transformers[torch]) (1.3.0)\n","Installing collected packages: transformers, accelerate\n"," Attempting uninstall: transformers\n"," Found existing installation: transformers 4.38.2\n"," Uninstalling transformers-4.38.2:\n"," Successfully uninstalled transformers-4.38.2\n","Successfully installed accelerate-0.28.0 transformers-4.39.3\n"]}]},{"cell_type":"code","source":["dataset = load_dataset(\"klue\", \"ner\")"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":304,"referenced_widgets":["c1126d83d1f341288abfd4315cb32617","a5fe76df0a8e4f32a50ad8c1d1c6a0f7","085891cde0f640fab5f95b77dc685d6a","25357dcbee504285bef7b756df2eb1e8","9d350ab1397945a59e1a921dbd3eab4a","32660e12b6eb4051b3406e4ab5af1b43","b1557c4630434eacb41552b1cd82772f","72780c544a8548748b536a5f0c3b3280","0aafcc9710324407ab00a0d93f9e9e3b","fde3abc49dfe47d786f5e88ec01b6657","68a0bd40bd254f3b8d8b0174c5a6812b","1ae3e4bec3544345838388de1e78ef66","cb56686e935d45bd852e95c16c99313f","b915a96f1b13402981c06439ba0a6342","a2d90675c82f4a8d90d87a3d076fe62d","90c427c61d5547abace2995c457c118a","3fa8fac8d20d4c91ae72b998c73e2a41","131cbebdbf5a4d05a3f7ef83a334759a","0a37136b0c2b4aaf9c78942e61999de4","32d99c518d4c4f16abbdd4c4142b4874","2e1268ab7b524d349ea42030c7372bb4","255f4d4d019d4fa19bf1fbb74eb2048f","669cd3c1c901432e92b386ffee7d109f","1efe4d1f75094029b43842d221de6ad5","45b0b7634d4b4d0e873f4e49807389f8","c4391f8d47f54a909c23fc69107b8c19","9aabc54ee5c84da2aa06a08aed9d5caa","934fee2f93ed4580a09f6066d56c0571","657e2f2664f449deb145f8dd54be2af9","b6432105c16c4ec08146b76f164fdee3","12b4366d669f484187a3c76ff61fac21","a8dd583653a640c18e87a17a7639ce46","a5238f82ce3144f78ec685bea0ceead8","5234ea92d3974838a25e6518028ca9d4","fe6adab838074e0a8e92303a393f1f76","c611f38b505244828dc275f974881e92","728f3fd67bb6457386206b62585f8d22","4175ff31e8c8424ea83e374032699b2f","5673994469ab45149ae9cd815a91a1ab","39256abc39f845aa9e0b01b89d2c56aa","550906b518a84ae9a35a562ebb7f1bc6","db23dd7b6f7f4c778b47d42bb3045fc7","2117820b737d4e088133729763826501","ffab7e69f9a5492e909abdd6d32ea5bb","faec81d845c546a0b104063742a637d0","577d97ea6a22498eba66d6e511064d14","0445ca3c47764f138d59c1ba4f55f4a1","99b2cd84aefe4a0e8826872e8605c230","752ccb55d6d94cf2ab83aa8b1de9a05c","f358d7c0827940ba91709afe0ae1e4ac","a37415c81ec0478084aceca86743392b","2ad6a3e791cf4549a755db826dc01261","076c147fa7aa46b9ad0cfe75298525fc","c9ec5cf67b694bdeadfa5c9b88c6205c","8f175945facb43fd8dacc503e70d1050"]},"id":"4drBusAbQhE-","executionInfo":{"status":"ok","timestamp":1712125177930,"user_tz":-540,"elapsed":7619,"user":{"displayName":"송문선","userId":"02769911744591628940"}},"outputId":"550e9fff-c7b3-4f94-818e-e1b1a991e006"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stderr","text":["/usr/local/lib/python3.10/dist-packages/huggingface_hub/utils/_token.py:88: UserWarning: \n","The secret `HF_TOKEN` does not exist in your Colab secrets.\n","To authenticate with the Hugging Face Hub, create a token in your settings tab (https://huggingface.co/settings/tokens), set it as secret in your Google Colab and restart your session.\n","You will be able to reuse this secret in all of your notebooks.\n","Please note that authentication is recommended but still optional to access public models or datasets.\n"," warnings.warn(\n"]},{"output_type":"display_data","data":{"text/plain":["Downloading readme: 0%| | 0.00/22.5k [00:00\n"," \n"," \n"," [1305/2025 9:07:41 < 5:02:38, 0.04 it/s, Epoch 1.93/3]\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
EpochTraining LossValidation Loss
11.3554000.579345

"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"output_type":"display_data","data":{"text/plain":[""],"text/html":["\n","

\n"," \n"," \n"," [2025/2025 14:35:09, Epoch 3/3]\n","
\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
EpochTraining LossValidation Loss
11.3554000.579345
20.7315000.467709
30.3156000.527938

"]},"metadata":{}},{"output_type":"display_data","data":{"text/plain":[""],"text/html":["\n","

\n"," \n"," \n"," [ 4/75 00:21 < 08:32, 0.14 it/s]\n","
\n"," "]},"metadata":{}}]},{"cell_type":"code","source":["from datasets import load_dataset\n","\n","# KLUE NER 데이터셋 로드\n","dataset = load_dataset(\"klue\", \"ner\")\n","\n","# 태그 리스트 확인\n","tag_list = dataset['train'].features['ner_tags'].feature.names\n","print(tag_list)\n","\n","# tag2id 및 id2tag 사전 생성\n","tag2id = {tag: id for id, tag in enumerate(tag_list)}\n","id2tag = {id: tag for tag, id in tag2id.items()}\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"KgAZf6eNjYEc","executionInfo":{"status":"ok","timestamp":1712135972978,"user_tz":-540,"elapsed":4257,"user":{"displayName":"송문선","userId":"02769911744591628940"}},"outputId":"85692f5c-d538-46f5-ea16-0a616dd3c8fa"},"execution_count":29,"outputs":[{"output_type":"stream","name":"stdout","text":["['B-DT', 'I-DT', 'B-LC', 'I-LC', 'B-OG', 'I-OG', 'B-PS', 'I-PS', 'B-QT', 'I-QT', 'B-TI', 'I-TI', 'O']\n"]}]},{"cell_type":"code","source":["from transformers import BertForTokenClassification, BertTokenizerFast, Trainer, TrainingArguments\n","from kobert_transformers import get_kobert_model, get_tokenizer\n","\n","checkpoint_path = \"/content/drive/MyDrive/capstone24-35/capstone-2024-35/Data Extract/model/checkpoint-2250\"\n","model = BertForTokenClassification.from_pretrained(checkpoint_path, num_labels=13) # num_labels는 데이터셋의 라벨 수에 맞춰 조정\n","tokenizer = KoBERTTokenizer.from_pretrained('skt/kobert-base-v1')\n"],"metadata":{"id":"VTwHK5A8oXe1","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1712135979928,"user_tz":-540,"elapsed":3379,"user":{"displayName":"송문선","userId":"02769911744591628940"}},"outputId":"c4a6819a-4c3d-4ad2-e3c8-7a57b5a9bc33"},"execution_count":30,"outputs":[{"output_type":"stream","name":"stderr","text":["The tokenizer class you load from this checkpoint is not the same type as the class this function is called from. It may result in unexpected tokenization. \n","The tokenizer class you load from this checkpoint is 'XLNetTokenizer'. \n","The class this function is called from is 'KoBERTTokenizer'.\n"]}]},{"cell_type":"code","source":["from transformers import TrainingArguments, Trainer\n","\n","training_args = TrainingArguments(\n"," output_dir=\"/content/drive/MyDrive/capstone24-35/capstone-2024-35/Data Extract/model_finetuned\", # 추가 학습 후 모델 저장 경로\n"," num_train_epochs=3, # 추가 훈련할 에포크 수\n"," per_device_train_batch_size=4,\n"," per_device_eval_batch_size=4,\n"," warmup_steps=500,\n"," weight_decay=0.01,\n"," evaluation_strategy='epoch',\n"," logging_dir=\"./logs_retrained\",\n"," save_strategy=\"epoch\",\n"," load_best_model_at_end=True,\n"," save_total_limit=3\n",")\n","\n","trainer = Trainer(\n"," model=model,\n"," args=training_args,\n"," train_dataset=train_dataset,\n"," eval_dataset=eval_dataset\n",")\n"],"metadata":{"id":"34Ew0pzKoYv1","colab":{"base_uri":"https://localhost:8080/"},"executionInfo":{"status":"ok","timestamp":1712136011143,"user_tz":-540,"elapsed":536,"user":{"displayName":"송문선","userId":"02769911744591628940"}},"outputId":"80084a35-ebd7-47de-c1dc-b1b543193700"},"execution_count":33,"outputs":[{"output_type":"stream","name":"stderr","text":["/usr/local/lib/python3.10/dist-packages/accelerate/accelerator.py:432: FutureWarning: Passing the following arguments to `Accelerator` is deprecated and will be removed in version 1.0 of Accelerate: dict_keys(['dispatch_batches', 'split_batches', 'even_batches', 'use_seedable_sampler']). Please pass an `accelerate.DataLoaderConfiguration` instead: \n","dataloader_config = DataLoaderConfiguration(dispatch_batches=None, split_batches=False, even_batches=True, use_seedable_sampler=True)\n"," warnings.warn(\n"]}]},{"cell_type":"code","source":["trainer.train()\n","trainer.evaluate()"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":166},"id":"cJQnBcFUYrDZ","outputId":"c6dc579e-a1cf-497d-e879-d10e9115c45f"},"execution_count":null,"outputs":[{"data":{"text/html":["\n","
\n"," \n"," \n"," [1161/6750 7:08:13 < 34:25:02, 0.05 it/s, Epoch 0.52/3]\n","
\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
EpochTraining LossValidation Loss

"],"text/plain":[""]},"metadata":{},"output_type":"display_data"},{"output_type":"display_data","data":{"text/plain":[""],"text/html":["\n","

\n"," \n"," \n"," [3305/6750 20:42:24 < 21:35:49, 0.04 it/s, Epoch 1.47/3]\n","
\n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n"," \n","
EpochTraining LossValidation Loss
10.3250000.439925

"]},"metadata":{}}]}]} \ No newline at end of file diff --git a/DataExtract/colab/data_extract.ipynb b/DataExtract/colab/data_extract.ipynb new file mode 100644 index 0000000000..305fb8edfd --- /dev/null +++ b/DataExtract/colab/data_extract.ipynb @@ -0,0 +1 @@ +{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"provenance":[],"authorship_tag":"ABX9TyPiD2JOhY57EgkwnhwjNrS/"},"kernelspec":{"name":"python3","display_name":"Python 3"},"language_info":{"name":"python"},"widgets":{"application/vnd.jupyter.widget-state+json":{"798850727cc8425eaf6175afb3775814":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_bb436f42443c4e5fa41313748cb3095e","IPY_MODEL_4186bf16685b45c097e9439df8a18ece","IPY_MODEL_f883a7de6e414126be07c78cf097c0af"],"layout":"IPY_MODEL_ddab447cf8734f6bb37a9aef7610b152"}},"bb436f42443c4e5fa41313748cb3095e":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_c19bac5165aa45dd8b1c461be7adf1e0","placeholder":"​","style":"IPY_MODEL_b9ea442fa8cc4b828b24c2b9d718c111","value":"Downloading readme: 100%"}},"4186bf16685b45c097e9439df8a18ece":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_3ed98750e09849c09f9a71cd33e295d4","max":22458,"min":0,"orientation":"horizontal","style":"IPY_MODEL_d5c7aa1db7b4428f836d55fdabb0fbf3","value":22458}},"f883a7de6e414126be07c78cf097c0af":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_beb045d4e94d48b0bc5dea7af46f1abc","placeholder":"​","style":"IPY_MODEL_de70bf35152d4460b3b30c3be61ba143","value":" 22.5k/22.5k [00:00<00:00, 911kB/s]"}},"ddab447cf8734f6bb37a9aef7610b152":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"c19bac5165aa45dd8b1c461be7adf1e0":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"b9ea442fa8cc4b828b24c2b9d718c111":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"3ed98750e09849c09f9a71cd33e295d4":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"d5c7aa1db7b4428f836d55fdabb0fbf3":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"beb045d4e94d48b0bc5dea7af46f1abc":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"de70bf35152d4460b3b30c3be61ba143":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"57a73bef422341d3ac8eb092f6aecb14":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_9178609f8f464cf489f4bc546900bfab","IPY_MODEL_39a9e423c6e24ccdafb06e38856b3d88","IPY_MODEL_4eb841c6834c432db1d322d05e90d236"],"layout":"IPY_MODEL_51bacf74bbf846e288bc306a3149eb53"}},"9178609f8f464cf489f4bc546900bfab":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_4ae071d616604e4ab886bf14731b834a","placeholder":"​","style":"IPY_MODEL_d138f84ba02d4aba8571fba0c6e33eff","value":"Downloading data: 100%"}},"39a9e423c6e24ccdafb06e38856b3d88":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_906967413214474a8eb3854cdb853446","max":4209983,"min":0,"orientation":"horizontal","style":"IPY_MODEL_1f8da36838184aab9a16e608f983c2a6","value":4209983}},"4eb841c6834c432db1d322d05e90d236":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_e4cffb6a102544409cdedb2cc9032b3b","placeholder":"​","style":"IPY_MODEL_1f755d4f0ca94c4ca3504b00fe812db8","value":" 4.21M/4.21M [00:00<00:00, 11.7MB/s]"}},"51bacf74bbf846e288bc306a3149eb53":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"4ae071d616604e4ab886bf14731b834a":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"d138f84ba02d4aba8571fba0c6e33eff":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"906967413214474a8eb3854cdb853446":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"1f8da36838184aab9a16e608f983c2a6":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"e4cffb6a102544409cdedb2cc9032b3b":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"1f755d4f0ca94c4ca3504b00fe812db8":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"ba7a1184512d48be8125c18fa34182fb":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_2f0e8b41981b45ab8184601bc8ce43bf","IPY_MODEL_fd7d5a26155c432980e8d8af4d308b71","IPY_MODEL_5247ebeae5ef463c91820ae75753a995"],"layout":"IPY_MODEL_fea1de75da2d4b44920d34c02c0fc58d"}},"2f0e8b41981b45ab8184601bc8ce43bf":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_9c7322d7f0504713b95ed0fa0921b008","placeholder":"​","style":"IPY_MODEL_67689efc6c244fb58e97a39f16fbb356","value":"Downloading data: 100%"}},"fd7d5a26155c432980e8d8af4d308b71":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_1bb81d8545ea4daea22b21d5d6703a23","max":1055904,"min":0,"orientation":"horizontal","style":"IPY_MODEL_c48406f609064d7cb781bdcb431aa3ed","value":1055904}},"5247ebeae5ef463c91820ae75753a995":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_76525f9e332d46308e9a3f7c586699c5","placeholder":"​","style":"IPY_MODEL_57b16234f4034e498e8f5ac4d59e67ca","value":" 1.06M/1.06M [00:00<00:00, 4.22MB/s]"}},"fea1de75da2d4b44920d34c02c0fc58d":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"9c7322d7f0504713b95ed0fa0921b008":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"67689efc6c244fb58e97a39f16fbb356":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"1bb81d8545ea4daea22b21d5d6703a23":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"c48406f609064d7cb781bdcb431aa3ed":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"76525f9e332d46308e9a3f7c586699c5":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"57b16234f4034e498e8f5ac4d59e67ca":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"cceb1bc4b4d24816ae421f24b5b96b98":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_071081a597464f55812f505e531924ef","IPY_MODEL_a0972d998d6545ec8e6b30a9edcb1736","IPY_MODEL_d9c9cf6885e8402d84a6ef6dee35ac59"],"layout":"IPY_MODEL_0575b30f4da84f379bd2cc5d5f3190ea"}},"071081a597464f55812f505e531924ef":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_d158415735874c4e855aff4b4ac284b5","placeholder":"​","style":"IPY_MODEL_5662d8a14e1949f6a821f7d013ab600c","value":"Generating train split: 100%"}},"a0972d998d6545ec8e6b30a9edcb1736":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_a8322aff5d2744509a435cfa7f29d574","max":21008,"min":0,"orientation":"horizontal","style":"IPY_MODEL_d9d585df8d914b94b2455a445e846dbd","value":21008}},"d9c9cf6885e8402d84a6ef6dee35ac59":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_26bdcb86168e4c24bd80cfc44085ebba","placeholder":"​","style":"IPY_MODEL_ab9af3353c96402c9088984f06ad720d","value":" 21008/21008 [00:00<00:00, 62001.43 examples/s]"}},"0575b30f4da84f379bd2cc5d5f3190ea":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"d158415735874c4e855aff4b4ac284b5":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"5662d8a14e1949f6a821f7d013ab600c":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"a8322aff5d2744509a435cfa7f29d574":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"d9d585df8d914b94b2455a445e846dbd":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"26bdcb86168e4c24bd80cfc44085ebba":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"ab9af3353c96402c9088984f06ad720d":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"08199005375444a781594d286578be46":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_6a3c8dfbd82d49e486cd079ffb2573bd","IPY_MODEL_eae783c6f15a44fe85e6ae802787c06c","IPY_MODEL_2c014f7b70614bd0bdbaad533b91733b"],"layout":"IPY_MODEL_d9159920c64a4f1ba231c07de4e73e82"}},"6a3c8dfbd82d49e486cd079ffb2573bd":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_67a9d76161274bcdaacefbf6283b7018","placeholder":"​","style":"IPY_MODEL_b12f9a5275144f4c8ccbf7b072349443","value":"Generating validation split: 100%"}},"eae783c6f15a44fe85e6ae802787c06c":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_eb831d3b82b14cb0a231036fd084fc96","max":5000,"min":0,"orientation":"horizontal","style":"IPY_MODEL_112f612f8f7a48f595e223da1f9ee4e0","value":5000}},"2c014f7b70614bd0bdbaad533b91733b":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_00d658a9dce34fc28b26263bb5154eb9","placeholder":"​","style":"IPY_MODEL_6484a68609014d83939253a0436268e7","value":" 5000/5000 [00:00<00:00, 49023.05 examples/s]"}},"d9159920c64a4f1ba231c07de4e73e82":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"67a9d76161274bcdaacefbf6283b7018":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"b12f9a5275144f4c8ccbf7b072349443":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"eb831d3b82b14cb0a231036fd084fc96":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"112f612f8f7a48f595e223da1f9ee4e0":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"00d658a9dce34fc28b26263bb5154eb9":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"6484a68609014d83939253a0436268e7":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"5dc05eaa6fe34306ae2796d69d16fa68":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_97705820fa3b49ec8efe7bbf014b662e","IPY_MODEL_eb7fb0ae872f484bbf518397d4c8dcdf","IPY_MODEL_83283ced534a465b9074b3fe75a8b08b"],"layout":"IPY_MODEL_dfa410ba3b724894ab59956a72d98295"}},"97705820fa3b49ec8efe7bbf014b662e":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_63e5abaded4342519019f1de5770a076","placeholder":"​","style":"IPY_MODEL_2edd41dcd74e440b980099a3d559310a","value":"tokenizer_config.json: 100%"}},"eb7fb0ae872f484bbf518397d4c8dcdf":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_67d2af8067d4443ba22c11afc38671f7","max":432,"min":0,"orientation":"horizontal","style":"IPY_MODEL_59d0ce4816644730b431bb7285df89f1","value":432}},"83283ced534a465b9074b3fe75a8b08b":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_e18329aa4583426ab72de02174098b18","placeholder":"​","style":"IPY_MODEL_b7698e5108764415b8f174a4c2abf82b","value":" 432/432 [00:00<00:00, 20.4kB/s]"}},"dfa410ba3b724894ab59956a72d98295":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"63e5abaded4342519019f1de5770a076":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"2edd41dcd74e440b980099a3d559310a":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"67d2af8067d4443ba22c11afc38671f7":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"59d0ce4816644730b431bb7285df89f1":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"e18329aa4583426ab72de02174098b18":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"b7698e5108764415b8f174a4c2abf82b":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"9ccbbdd69f514c5fb754fa943f6cf1ad":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_959e73767aff4a0caf8472b13fcb1a4b","IPY_MODEL_ef299b638e534afe9ed650a78f85ea59","IPY_MODEL_2288b0eddbad47e597546036aafbd675"],"layout":"IPY_MODEL_2fb1159d0c42467383adcf891620ca9d"}},"959e73767aff4a0caf8472b13fcb1a4b":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_de6771853ca843e1b55eaef438e717bb","placeholder":"​","style":"IPY_MODEL_6fad117f7b04450aa71c8e4303938c37","value":"spiece.model: 100%"}},"ef299b638e534afe9ed650a78f85ea59":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_6c1cf9c5f0d7479daa5375ad513bab59","max":371427,"min":0,"orientation":"horizontal","style":"IPY_MODEL_e0dfec409b014823b611f24c448d1185","value":371427}},"2288b0eddbad47e597546036aafbd675":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_06cceeec756945b48afc750cf2e9bd8b","placeholder":"​","style":"IPY_MODEL_4f922444e8624286b81a2d2f1a7acf77","value":" 371k/371k [00:00<00:00, 4.23MB/s]"}},"2fb1159d0c42467383adcf891620ca9d":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"de6771853ca843e1b55eaef438e717bb":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"6fad117f7b04450aa71c8e4303938c37":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"6c1cf9c5f0d7479daa5375ad513bab59":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"e0dfec409b014823b611f24c448d1185":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"06cceeec756945b48afc750cf2e9bd8b":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"4f922444e8624286b81a2d2f1a7acf77":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"e53a751d94134087a276e9bf71ca5716":{"model_module":"@jupyter-widgets/controls","model_name":"HBoxModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HBoxModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HBoxView","box_style":"","children":["IPY_MODEL_f0078b915b4743358760179db2899105","IPY_MODEL_b3d21512f52847d6bb56dd4eae3aeb5f","IPY_MODEL_b0f27f0ea5f442b791ae7fa2c11f1cb3"],"layout":"IPY_MODEL_79d37962b77c4e62acf6129ca71e9fca"}},"f0078b915b4743358760179db2899105":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_098d8ab617ab4da88070a386136163af","placeholder":"​","style":"IPY_MODEL_39aa786ad32b489598f23409c3756cfc","value":"special_tokens_map.json: 100%"}},"b3d21512f52847d6bb56dd4eae3aeb5f":{"model_module":"@jupyter-widgets/controls","model_name":"FloatProgressModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"FloatProgressModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"ProgressView","bar_style":"success","description":"","description_tooltip":null,"layout":"IPY_MODEL_c6787d1bd82944bebf94d4ca553d6dc8","max":244,"min":0,"orientation":"horizontal","style":"IPY_MODEL_b39fcdc03fef40b8be066a9ee3b7da43","value":244}},"b0f27f0ea5f442b791ae7fa2c11f1cb3":{"model_module":"@jupyter-widgets/controls","model_name":"HTMLModel","model_module_version":"1.5.0","state":{"_dom_classes":[],"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"HTMLModel","_view_count":null,"_view_module":"@jupyter-widgets/controls","_view_module_version":"1.5.0","_view_name":"HTMLView","description":"","description_tooltip":null,"layout":"IPY_MODEL_f1bc4da9f18747bfa1d632916bdd252f","placeholder":"​","style":"IPY_MODEL_6129970c0f3e4211a8c0b9be920b2e2e","value":" 244/244 [00:00<00:00, 8.27kB/s]"}},"79d37962b77c4e62acf6129ca71e9fca":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"098d8ab617ab4da88070a386136163af":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"39aa786ad32b489598f23409c3756cfc":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}},"c6787d1bd82944bebf94d4ca553d6dc8":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"b39fcdc03fef40b8be066a9ee3b7da43":{"model_module":"@jupyter-widgets/controls","model_name":"ProgressStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"ProgressStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","bar_color":null,"description_width":""}},"f1bc4da9f18747bfa1d632916bdd252f":{"model_module":"@jupyter-widgets/base","model_name":"LayoutModel","model_module_version":"1.2.0","state":{"_model_module":"@jupyter-widgets/base","_model_module_version":"1.2.0","_model_name":"LayoutModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"LayoutView","align_content":null,"align_items":null,"align_self":null,"border":null,"bottom":null,"display":null,"flex":null,"flex_flow":null,"grid_area":null,"grid_auto_columns":null,"grid_auto_flow":null,"grid_auto_rows":null,"grid_column":null,"grid_gap":null,"grid_row":null,"grid_template_areas":null,"grid_template_columns":null,"grid_template_rows":null,"height":null,"justify_content":null,"justify_items":null,"left":null,"margin":null,"max_height":null,"max_width":null,"min_height":null,"min_width":null,"object_fit":null,"object_position":null,"order":null,"overflow":null,"overflow_x":null,"overflow_y":null,"padding":null,"right":null,"top":null,"visibility":null,"width":null}},"6129970c0f3e4211a8c0b9be920b2e2e":{"model_module":"@jupyter-widgets/controls","model_name":"DescriptionStyleModel","model_module_version":"1.5.0","state":{"_model_module":"@jupyter-widgets/controls","_model_module_version":"1.5.0","_model_name":"DescriptionStyleModel","_view_count":null,"_view_module":"@jupyter-widgets/base","_view_module_version":"1.2.0","_view_name":"StyleView","description_width":""}}}}},"cells":[{"cell_type":"code","execution_count":null,"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"UAeFpCJkvYvZ","executionInfo":{"status":"ok","timestamp":1712127603483,"user_tz":-540,"elapsed":23898,"user":{"displayName":"송문선","userId":"02769911744591628940"}},"outputId":"9f30d1ab-7d7f-4443-f19c-d8c73e9274e5"},"outputs":[{"output_type":"stream","name":"stdout","text":["Mounted at /content/drive\n"]}],"source":["from google.colab import drive\n","drive.mount('/content/drive')"]},{"cell_type":"code","source":["cd /content/drive/MyDrive/capstone24-35/capstone-2024-35/Data Extract/colab"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"9ilkxEuVvfzZ","executionInfo":{"status":"ok","timestamp":1712127607671,"user_tz":-540,"elapsed":3,"user":{"displayName":"송문선","userId":"02769911744591628940"}},"outputId":"22442f71-a386-4140-cb0a-6fa0bba8615e"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["/content/drive/MyDrive/capstone24-35/capstone-2024-35/Data Extract/colab\n"]}]},{"cell_type":"code","source":["!pip install torch transformers datasets\n","!pip install git+https://github.com/SKTBrain/KoBERT.git@master\n","!pip install 'git+https://github.com/SKTBrain/KoBERT.git#egg=kobert_tokenizer&subdirectory=kobert_hf'\n","!pip install kobert-transformers\n","!pip install transformers\n","!pip install torch\n","!pip install datasets\n","!pip install seqeval # NER 평가를 위한 라이브러리\n","!pip install transformers[torch] -U\n","\n","from transformers import BertTokenizerFast, BertForTokenClassification, AdamW\n","from transformers import Trainer, TrainingArguments\n","from datasets import load_dataset, load_metric\n","import torch\n","from torch.utils.data import DataLoader\n","from torch.nn.utils.rnn import pad_sequence\n","import numpy as np\n","from kobert_tokenizer import KoBERTTokenizer\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"trszjdkevhPk","executionInfo":{"status":"ok","timestamp":1712127787050,"user_tz":-540,"elapsed":176299,"user":{"displayName":"송문선","userId":"02769911744591628940"}},"outputId":"45b0d4be-10f2-4444-f7a2-af602251400c"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["Requirement already satisfied: torch in /usr/local/lib/python3.10/dist-packages (2.2.1+cu121)\n","Requirement already satisfied: transformers in /usr/local/lib/python3.10/dist-packages (4.38.2)\n","Collecting datasets\n"," Downloading datasets-2.18.0-py3-none-any.whl (510 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m510.5/510.5 kB\u001b[0m \u001b[31m6.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from torch) (3.13.3)\n","Requirement already satisfied: typing-extensions>=4.8.0 in /usr/local/lib/python3.10/dist-packages (from torch) (4.10.0)\n","Requirement already satisfied: sympy in /usr/local/lib/python3.10/dist-packages (from torch) (1.12)\n","Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch) (3.2.1)\n","Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch) (3.1.3)\n","Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from torch) (2023.6.0)\n","Collecting nvidia-cuda-nvrtc-cu12==12.1.105 (from torch)\n"," Downloading nvidia_cuda_nvrtc_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (23.7 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m23.7/23.7 MB\u001b[0m \u001b[31m38.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting nvidia-cuda-runtime-cu12==12.1.105 (from torch)\n"," Downloading nvidia_cuda_runtime_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (823 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m823.6/823.6 kB\u001b[0m \u001b[31m68.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting nvidia-cuda-cupti-cu12==12.1.105 (from torch)\n"," Downloading nvidia_cuda_cupti_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (14.1 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m14.1/14.1 MB\u001b[0m \u001b[31m67.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting nvidia-cudnn-cu12==8.9.2.26 (from torch)\n"," Downloading nvidia_cudnn_cu12-8.9.2.26-py3-none-manylinux1_x86_64.whl (731.7 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m731.7/731.7 MB\u001b[0m \u001b[31m2.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting nvidia-cublas-cu12==12.1.3.1 (from torch)\n"," Downloading nvidia_cublas_cu12-12.1.3.1-py3-none-manylinux1_x86_64.whl (410.6 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m410.6/410.6 MB\u001b[0m \u001b[31m3.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting nvidia-cufft-cu12==11.0.2.54 (from torch)\n"," Downloading nvidia_cufft_cu12-11.0.2.54-py3-none-manylinux1_x86_64.whl (121.6 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m121.6/121.6 MB\u001b[0m \u001b[31m8.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting nvidia-curand-cu12==10.3.2.106 (from torch)\n"," Downloading nvidia_curand_cu12-10.3.2.106-py3-none-manylinux1_x86_64.whl (56.5 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m56.5/56.5 MB\u001b[0m \u001b[31m13.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting nvidia-cusolver-cu12==11.4.5.107 (from torch)\n"," Downloading nvidia_cusolver_cu12-11.4.5.107-py3-none-manylinux1_x86_64.whl (124.2 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m124.2/124.2 MB\u001b[0m \u001b[31m8.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting nvidia-cusparse-cu12==12.1.0.106 (from torch)\n"," Downloading nvidia_cusparse_cu12-12.1.0.106-py3-none-manylinux1_x86_64.whl (196.0 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m196.0/196.0 MB\u001b[0m \u001b[31m2.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting nvidia-nccl-cu12==2.19.3 (from torch)\n"," Downloading nvidia_nccl_cu12-2.19.3-py3-none-manylinux1_x86_64.whl (166.0 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m166.0/166.0 MB\u001b[0m \u001b[31m6.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting nvidia-nvtx-cu12==12.1.105 (from torch)\n"," Downloading nvidia_nvtx_cu12-12.1.105-py3-none-manylinux1_x86_64.whl (99 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m99.1/99.1 kB\u001b[0m \u001b[31m15.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: triton==2.2.0 in /usr/local/lib/python3.10/dist-packages (from torch) (2.2.0)\n","Collecting nvidia-nvjitlink-cu12 (from nvidia-cusolver-cu12==11.4.5.107->torch)\n"," Downloading nvidia_nvjitlink_cu12-12.4.99-py3-none-manylinux2014_x86_64.whl (21.1 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m21.1/21.1 MB\u001b[0m \u001b[31m74.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: huggingface-hub<1.0,>=0.19.3 in /usr/local/lib/python3.10/dist-packages (from transformers) (0.20.3)\n","Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.10/dist-packages (from transformers) (1.25.2)\n","Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from transformers) (24.0)\n","Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.10/dist-packages (from transformers) (6.0.1)\n","Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.10/dist-packages (from transformers) (2023.12.25)\n","Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from transformers) (2.31.0)\n","Requirement already satisfied: tokenizers<0.19,>=0.14 in /usr/local/lib/python3.10/dist-packages (from transformers) (0.15.2)\n","Requirement already satisfied: safetensors>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from transformers) (0.4.2)\n","Requirement already satisfied: tqdm>=4.27 in /usr/local/lib/python3.10/dist-packages (from transformers) (4.66.2)\n","Requirement already satisfied: pyarrow>=12.0.0 in /usr/local/lib/python3.10/dist-packages (from datasets) (14.0.2)\n","Requirement already satisfied: pyarrow-hotfix in /usr/local/lib/python3.10/dist-packages (from datasets) (0.6)\n","Collecting dill<0.3.9,>=0.3.0 (from datasets)\n"," Downloading dill-0.3.8-py3-none-any.whl (116 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m116.3/116.3 kB\u001b[0m \u001b[31m19.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: pandas in /usr/local/lib/python3.10/dist-packages (from datasets) (1.5.3)\n","Collecting xxhash (from datasets)\n"," Downloading xxhash-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (194 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m194.1/194.1 kB\u001b[0m \u001b[31m23.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting multiprocess (from datasets)\n"," Downloading multiprocess-0.70.16-py310-none-any.whl (134 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m134.8/134.8 kB\u001b[0m \u001b[31m21.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: aiohttp in /usr/local/lib/python3.10/dist-packages (from datasets) (3.9.3)\n","Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (1.3.1)\n","Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (23.2.0)\n","Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (1.4.1)\n","Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (6.0.5)\n","Requirement already satisfied: yarl<2.0,>=1.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (1.9.4)\n","Requirement already satisfied: async-timeout<5.0,>=4.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (4.0.3)\n","Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (3.3.2)\n","Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (3.6)\n","Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (2.0.7)\n","Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (2024.2.2)\n","Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch) (2.1.5)\n","Requirement already satisfied: python-dateutil>=2.8.1 in /usr/local/lib/python3.10/dist-packages (from pandas->datasets) (2.8.2)\n","Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas->datasets) (2023.4)\n","Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy->torch) (1.3.0)\n","Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.8.1->pandas->datasets) (1.16.0)\n","Installing collected packages: xxhash, nvidia-nvtx-cu12, nvidia-nvjitlink-cu12, nvidia-nccl-cu12, nvidia-curand-cu12, nvidia-cufft-cu12, nvidia-cuda-runtime-cu12, nvidia-cuda-nvrtc-cu12, nvidia-cuda-cupti-cu12, nvidia-cublas-cu12, dill, nvidia-cusparse-cu12, nvidia-cudnn-cu12, multiprocess, nvidia-cusolver-cu12, datasets\n","Successfully installed datasets-2.18.0 dill-0.3.8 multiprocess-0.70.16 nvidia-cublas-cu12-12.1.3.1 nvidia-cuda-cupti-cu12-12.1.105 nvidia-cuda-nvrtc-cu12-12.1.105 nvidia-cuda-runtime-cu12-12.1.105 nvidia-cudnn-cu12-8.9.2.26 nvidia-cufft-cu12-11.0.2.54 nvidia-curand-cu12-10.3.2.106 nvidia-cusolver-cu12-11.4.5.107 nvidia-cusparse-cu12-12.1.0.106 nvidia-nccl-cu12-2.19.3 nvidia-nvjitlink-cu12-12.4.99 nvidia-nvtx-cu12-12.1.105 xxhash-3.4.1\n","Collecting git+https://github.com/SKTBrain/KoBERT.git@master\n"," Cloning https://github.com/SKTBrain/KoBERT.git (to revision master) to /tmp/pip-req-build-e07zcp5e\n"," Running command git clone --filter=blob:none --quiet https://github.com/SKTBrain/KoBERT.git /tmp/pip-req-build-e07zcp5e\n"," Resolved https://github.com/SKTBrain/KoBERT.git to commit 47a69af87928fc24e20f571fe10c3cc9dd9af9a3\n"," Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n","Collecting boto3<=1.15.18 (from kobert==0.2.3)\n"," Downloading boto3-1.15.18-py2.py3-none-any.whl (129 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m129.1/129.1 kB\u001b[0m \u001b[31m2.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hCollecting gluonnlp<=0.10.0,>=0.6.0 (from kobert==0.2.3)\n"," Downloading gluonnlp-0.10.0.tar.gz (344 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m344.5/344.5 kB\u001b[0m \u001b[31m13.2 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25h Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n","Collecting mxnet<=1.7.0.post2,>=1.4.0 (from kobert==0.2.3)\n"," Downloading mxnet-1.7.0.post2-py2.py3-none-manylinux2014_x86_64.whl (54.7 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m54.7/54.7 MB\u001b[0m \u001b[31m10.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hINFO: pip is looking at multiple versions of kobert to determine which version is compatible with other requirements. This could take a while.\n","\u001b[31mERROR: Could not find a version that satisfies the requirement onnxruntime<=1.8.0,==1.8.0 (from kobert) (from versions: 1.12.0, 1.12.1, 1.13.1, 1.14.0, 1.14.1, 1.15.0, 1.15.1, 1.16.0, 1.16.1, 1.16.2, 1.16.3, 1.17.0, 1.17.1)\u001b[0m\u001b[31m\n","\u001b[0m\u001b[31mERROR: No matching distribution found for onnxruntime<=1.8.0,==1.8.0\u001b[0m\u001b[31m\n","\u001b[0mCollecting kobert_tokenizer\n"," Cloning https://github.com/SKTBrain/KoBERT.git to /tmp/pip-install-rpi10j3p/kobert-tokenizer_b12cf91fc69e4ef1a73ede800b0f20a6\n"," Running command git clone --filter=blob:none --quiet https://github.com/SKTBrain/KoBERT.git /tmp/pip-install-rpi10j3p/kobert-tokenizer_b12cf91fc69e4ef1a73ede800b0f20a6\n"," Resolved https://github.com/SKTBrain/KoBERT.git to commit 47a69af87928fc24e20f571fe10c3cc9dd9af9a3\n"," Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n","Building wheels for collected packages: kobert_tokenizer\n"," Building wheel for kobert_tokenizer (setup.py) ... \u001b[?25l\u001b[?25hdone\n"," Created wheel for kobert_tokenizer: filename=kobert_tokenizer-0.1-py3-none-any.whl size=4633 sha256=54e461c89c47ee7738d576d87845ddea77e57e962b315bf7129113f826c386bb\n"," Stored in directory: /tmp/pip-ephem-wheel-cache-hpbe4al4/wheels/e9/1a/3f/a864970e8a169c176befa3c4a1e07aa612f69195907a4045fe\n","Successfully built kobert_tokenizer\n","Installing collected packages: kobert_tokenizer\n","Successfully installed kobert_tokenizer-0.1\n","Collecting kobert-transformers\n"," Downloading kobert_transformers-0.5.1-py3-none-any.whl (12 kB)\n","Requirement already satisfied: torch>=1.1.0 in /usr/local/lib/python3.10/dist-packages (from kobert-transformers) (2.2.1+cu121)\n","Requirement already satisfied: transformers<5,>=3 in /usr/local/lib/python3.10/dist-packages (from kobert-transformers) (4.38.2)\n","Requirement already satisfied: sentencepiece>=0.1.91 in /usr/local/lib/python3.10/dist-packages (from kobert-transformers) (0.1.99)\n","Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (3.13.3)\n","Requirement already satisfied: typing-extensions>=4.8.0 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (4.10.0)\n","Requirement already satisfied: sympy in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (1.12)\n","Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (3.2.1)\n","Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (3.1.3)\n","Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (2023.6.0)\n","Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (12.1.105)\n","Requirement already satisfied: nvidia-cuda-runtime-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (12.1.105)\n","Requirement already satisfied: nvidia-cuda-cupti-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (12.1.105)\n","Requirement already satisfied: nvidia-cudnn-cu12==8.9.2.26 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (8.9.2.26)\n","Requirement already satisfied: nvidia-cublas-cu12==12.1.3.1 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (12.1.3.1)\n","Requirement already satisfied: nvidia-cufft-cu12==11.0.2.54 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (11.0.2.54)\n","Requirement already satisfied: nvidia-curand-cu12==10.3.2.106 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (10.3.2.106)\n","Requirement already satisfied: nvidia-cusolver-cu12==11.4.5.107 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (11.4.5.107)\n","Requirement already satisfied: nvidia-cusparse-cu12==12.1.0.106 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (12.1.0.106)\n","Requirement already satisfied: nvidia-nccl-cu12==2.19.3 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (2.19.3)\n","Requirement already satisfied: nvidia-nvtx-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (12.1.105)\n","Requirement already satisfied: triton==2.2.0 in /usr/local/lib/python3.10/dist-packages (from torch>=1.1.0->kobert-transformers) (2.2.0)\n","Requirement already satisfied: nvidia-nvjitlink-cu12 in /usr/local/lib/python3.10/dist-packages (from nvidia-cusolver-cu12==11.4.5.107->torch>=1.1.0->kobert-transformers) (12.4.99)\n","Requirement already satisfied: huggingface-hub<1.0,>=0.19.3 in /usr/local/lib/python3.10/dist-packages (from transformers<5,>=3->kobert-transformers) (0.20.3)\n","Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.10/dist-packages (from transformers<5,>=3->kobert-transformers) (1.25.2)\n","Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from transformers<5,>=3->kobert-transformers) (24.0)\n","Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.10/dist-packages (from transformers<5,>=3->kobert-transformers) (6.0.1)\n","Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.10/dist-packages (from transformers<5,>=3->kobert-transformers) (2023.12.25)\n","Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from transformers<5,>=3->kobert-transformers) (2.31.0)\n","Requirement already satisfied: tokenizers<0.19,>=0.14 in /usr/local/lib/python3.10/dist-packages (from transformers<5,>=3->kobert-transformers) (0.15.2)\n","Requirement already satisfied: safetensors>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from transformers<5,>=3->kobert-transformers) (0.4.2)\n","Requirement already satisfied: tqdm>=4.27 in /usr/local/lib/python3.10/dist-packages (from transformers<5,>=3->kobert-transformers) (4.66.2)\n","Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch>=1.1.0->kobert-transformers) (2.1.5)\n","Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->transformers<5,>=3->kobert-transformers) (3.3.2)\n","Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->transformers<5,>=3->kobert-transformers) (3.6)\n","Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->transformers<5,>=3->kobert-transformers) (2.0.7)\n","Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->transformers<5,>=3->kobert-transformers) (2024.2.2)\n","Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy->torch>=1.1.0->kobert-transformers) (1.3.0)\n","Installing collected packages: kobert-transformers\n","Successfully installed kobert-transformers-0.5.1\n","Requirement already satisfied: transformers in /usr/local/lib/python3.10/dist-packages (4.38.2)\n","Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from transformers) (3.13.3)\n","Requirement already satisfied: huggingface-hub<1.0,>=0.19.3 in /usr/local/lib/python3.10/dist-packages (from transformers) (0.20.3)\n","Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.10/dist-packages (from transformers) (1.25.2)\n","Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from transformers) (24.0)\n","Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.10/dist-packages (from transformers) (6.0.1)\n","Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.10/dist-packages (from transformers) (2023.12.25)\n","Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from transformers) (2.31.0)\n","Requirement already satisfied: tokenizers<0.19,>=0.14 in /usr/local/lib/python3.10/dist-packages (from transformers) (0.15.2)\n","Requirement already satisfied: safetensors>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from transformers) (0.4.2)\n","Requirement already satisfied: tqdm>=4.27 in /usr/local/lib/python3.10/dist-packages (from transformers) (4.66.2)\n","Requirement already satisfied: fsspec>=2023.5.0 in /usr/local/lib/python3.10/dist-packages (from huggingface-hub<1.0,>=0.19.3->transformers) (2023.6.0)\n","Requirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.10/dist-packages (from huggingface-hub<1.0,>=0.19.3->transformers) (4.10.0)\n","Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (3.3.2)\n","Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (3.6)\n","Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (2.0.7)\n","Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->transformers) (2024.2.2)\n","Requirement already satisfied: torch in /usr/local/lib/python3.10/dist-packages (2.2.1+cu121)\n","Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from torch) (3.13.3)\n","Requirement already satisfied: typing-extensions>=4.8.0 in /usr/local/lib/python3.10/dist-packages (from torch) (4.10.0)\n","Requirement already satisfied: sympy in /usr/local/lib/python3.10/dist-packages (from torch) (1.12)\n","Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch) (3.2.1)\n","Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch) (3.1.3)\n","Requirement already satisfied: fsspec in /usr/local/lib/python3.10/dist-packages (from torch) (2023.6.0)\n","Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch) (12.1.105)\n","Requirement already satisfied: nvidia-cuda-runtime-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch) (12.1.105)\n","Requirement already satisfied: nvidia-cuda-cupti-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch) (12.1.105)\n","Requirement already satisfied: nvidia-cudnn-cu12==8.9.2.26 in /usr/local/lib/python3.10/dist-packages (from torch) (8.9.2.26)\n","Requirement already satisfied: nvidia-cublas-cu12==12.1.3.1 in /usr/local/lib/python3.10/dist-packages (from torch) (12.1.3.1)\n","Requirement already satisfied: nvidia-cufft-cu12==11.0.2.54 in /usr/local/lib/python3.10/dist-packages (from torch) (11.0.2.54)\n","Requirement already satisfied: nvidia-curand-cu12==10.3.2.106 in /usr/local/lib/python3.10/dist-packages (from torch) (10.3.2.106)\n","Requirement already satisfied: nvidia-cusolver-cu12==11.4.5.107 in /usr/local/lib/python3.10/dist-packages (from torch) (11.4.5.107)\n","Requirement already satisfied: nvidia-cusparse-cu12==12.1.0.106 in /usr/local/lib/python3.10/dist-packages (from torch) (12.1.0.106)\n","Requirement already satisfied: nvidia-nccl-cu12==2.19.3 in /usr/local/lib/python3.10/dist-packages (from torch) (2.19.3)\n","Requirement already satisfied: nvidia-nvtx-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch) (12.1.105)\n","Requirement already satisfied: triton==2.2.0 in /usr/local/lib/python3.10/dist-packages (from torch) (2.2.0)\n","Requirement already satisfied: nvidia-nvjitlink-cu12 in /usr/local/lib/python3.10/dist-packages (from nvidia-cusolver-cu12==11.4.5.107->torch) (12.4.99)\n","Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch) (2.1.5)\n","Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy->torch) (1.3.0)\n","Requirement already satisfied: datasets in /usr/local/lib/python3.10/dist-packages (2.18.0)\n","Requirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from datasets) (3.13.3)\n","Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.10/dist-packages (from datasets) (1.25.2)\n","Requirement already satisfied: pyarrow>=12.0.0 in /usr/local/lib/python3.10/dist-packages (from datasets) (14.0.2)\n","Requirement already satisfied: pyarrow-hotfix in /usr/local/lib/python3.10/dist-packages (from datasets) (0.6)\n","Requirement already satisfied: dill<0.3.9,>=0.3.0 in /usr/local/lib/python3.10/dist-packages (from datasets) (0.3.8)\n","Requirement already satisfied: pandas in /usr/local/lib/python3.10/dist-packages (from datasets) (1.5.3)\n","Requirement already satisfied: requests>=2.19.0 in /usr/local/lib/python3.10/dist-packages (from datasets) (2.31.0)\n","Requirement already satisfied: tqdm>=4.62.1 in /usr/local/lib/python3.10/dist-packages (from datasets) (4.66.2)\n","Requirement already satisfied: xxhash in /usr/local/lib/python3.10/dist-packages (from datasets) (3.4.1)\n","Requirement already satisfied: multiprocess in /usr/local/lib/python3.10/dist-packages (from datasets) (0.70.16)\n","Requirement already satisfied: fsspec[http]<=2024.2.0,>=2023.1.0 in /usr/local/lib/python3.10/dist-packages (from datasets) (2023.6.0)\n","Requirement already satisfied: aiohttp in /usr/local/lib/python3.10/dist-packages (from datasets) (3.9.3)\n","Requirement already satisfied: huggingface-hub>=0.19.4 in /usr/local/lib/python3.10/dist-packages (from datasets) (0.20.3)\n","Requirement already satisfied: packaging in /usr/local/lib/python3.10/dist-packages (from datasets) (24.0)\n","Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.10/dist-packages (from datasets) (6.0.1)\n","Requirement already satisfied: aiosignal>=1.1.2 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (1.3.1)\n","Requirement already satisfied: attrs>=17.3.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (23.2.0)\n","Requirement already satisfied: frozenlist>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (1.4.1)\n","Requirement already satisfied: multidict<7.0,>=4.5 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (6.0.5)\n","Requirement already satisfied: yarl<2.0,>=1.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (1.9.4)\n","Requirement already satisfied: async-timeout<5.0,>=4.0 in /usr/local/lib/python3.10/dist-packages (from aiohttp->datasets) (4.0.3)\n","Requirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.10/dist-packages (from huggingface-hub>=0.19.4->datasets) (4.10.0)\n","Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests>=2.19.0->datasets) (3.3.2)\n","Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests>=2.19.0->datasets) (3.6)\n","Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests>=2.19.0->datasets) (2.0.7)\n","Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests>=2.19.0->datasets) (2024.2.2)\n","Requirement already satisfied: python-dateutil>=2.8.1 in /usr/local/lib/python3.10/dist-packages (from pandas->datasets) (2.8.2)\n","Requirement already satisfied: pytz>=2020.1 in /usr/local/lib/python3.10/dist-packages (from pandas->datasets) (2023.4)\n","Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.10/dist-packages (from python-dateutil>=2.8.1->pandas->datasets) (1.16.0)\n","Collecting seqeval\n"," Downloading seqeval-1.2.2.tar.gz (43 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m43.6/43.6 kB\u001b[0m \u001b[31m1.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25h Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n","Requirement already satisfied: numpy>=1.14.0 in /usr/local/lib/python3.10/dist-packages (from seqeval) (1.25.2)\n","Requirement already satisfied: scikit-learn>=0.21.3 in /usr/local/lib/python3.10/dist-packages (from seqeval) (1.2.2)\n","Requirement already satisfied: scipy>=1.3.2 in /usr/local/lib/python3.10/dist-packages (from scikit-learn>=0.21.3->seqeval) (1.11.4)\n","Requirement already satisfied: joblib>=1.1.1 in /usr/local/lib/python3.10/dist-packages (from scikit-learn>=0.21.3->seqeval) (1.3.2)\n","Requirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.10/dist-packages (from scikit-learn>=0.21.3->seqeval) (3.4.0)\n","Building wheels for collected packages: seqeval\n"," Building wheel for seqeval (setup.py) ... \u001b[?25l\u001b[?25hdone\n"," Created wheel for seqeval: filename=seqeval-1.2.2-py3-none-any.whl size=16161 sha256=5748df05d23b1ecdcbd2c192b4577fceaf9e13f4c2be41b6e8ae6fae6ba15210\n"," Stored in directory: /root/.cache/pip/wheels/1a/67/4a/ad4082dd7dfc30f2abfe4d80a2ed5926a506eb8a972b4767fa\n","Successfully built seqeval\n","Installing collected packages: seqeval\n","Successfully installed seqeval-1.2.2\n","Requirement already satisfied: transformers[torch] in /usr/local/lib/python3.10/dist-packages (4.38.2)\n","Collecting transformers[torch]\n"," Downloading transformers-4.39.3-py3-none-any.whl (8.8 MB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m8.8/8.8 MB\u001b[0m \u001b[31m46.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: filelock in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (3.13.3)\n","Requirement already satisfied: huggingface-hub<1.0,>=0.19.3 in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (0.20.3)\n","Requirement already satisfied: numpy>=1.17 in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (1.25.2)\n","Requirement already satisfied: packaging>=20.0 in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (24.0)\n","Requirement already satisfied: pyyaml>=5.1 in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (6.0.1)\n","Requirement already satisfied: regex!=2019.12.17 in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (2023.12.25)\n","Requirement already satisfied: requests in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (2.31.0)\n","Requirement already satisfied: tokenizers<0.19,>=0.14 in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (0.15.2)\n","Requirement already satisfied: safetensors>=0.4.1 in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (0.4.2)\n","Requirement already satisfied: tqdm>=4.27 in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (4.66.2)\n","Requirement already satisfied: torch in /usr/local/lib/python3.10/dist-packages (from transformers[torch]) (2.2.1+cu121)\n","Collecting accelerate>=0.21.0 (from transformers[torch])\n"," Downloading accelerate-0.28.0-py3-none-any.whl (290 kB)\n","\u001b[2K \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m290.1/290.1 kB\u001b[0m \u001b[31m38.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n","\u001b[?25hRequirement already satisfied: psutil in /usr/local/lib/python3.10/dist-packages (from accelerate>=0.21.0->transformers[torch]) (5.9.5)\n","Requirement already satisfied: fsspec>=2023.5.0 in /usr/local/lib/python3.10/dist-packages (from huggingface-hub<1.0,>=0.19.3->transformers[torch]) (2023.6.0)\n","Requirement already satisfied: typing-extensions>=3.7.4.3 in /usr/local/lib/python3.10/dist-packages (from huggingface-hub<1.0,>=0.19.3->transformers[torch]) (4.10.0)\n","Requirement already satisfied: sympy in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (1.12)\n","Requirement already satisfied: networkx in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (3.2.1)\n","Requirement already satisfied: jinja2 in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (3.1.3)\n","Requirement already satisfied: nvidia-cuda-nvrtc-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (12.1.105)\n","Requirement already satisfied: nvidia-cuda-runtime-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (12.1.105)\n","Requirement already satisfied: nvidia-cuda-cupti-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (12.1.105)\n","Requirement already satisfied: nvidia-cudnn-cu12==8.9.2.26 in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (8.9.2.26)\n","Requirement already satisfied: nvidia-cublas-cu12==12.1.3.1 in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (12.1.3.1)\n","Requirement already satisfied: nvidia-cufft-cu12==11.0.2.54 in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (11.0.2.54)\n","Requirement already satisfied: nvidia-curand-cu12==10.3.2.106 in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (10.3.2.106)\n","Requirement already satisfied: nvidia-cusolver-cu12==11.4.5.107 in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (11.4.5.107)\n","Requirement already satisfied: nvidia-cusparse-cu12==12.1.0.106 in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (12.1.0.106)\n","Requirement already satisfied: nvidia-nccl-cu12==2.19.3 in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (2.19.3)\n","Requirement already satisfied: nvidia-nvtx-cu12==12.1.105 in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (12.1.105)\n","Requirement already satisfied: triton==2.2.0 in /usr/local/lib/python3.10/dist-packages (from torch->transformers[torch]) (2.2.0)\n","Requirement already satisfied: nvidia-nvjitlink-cu12 in /usr/local/lib/python3.10/dist-packages (from nvidia-cusolver-cu12==11.4.5.107->torch->transformers[torch]) (12.4.99)\n","Requirement already satisfied: charset-normalizer<4,>=2 in /usr/local/lib/python3.10/dist-packages (from requests->transformers[torch]) (3.3.2)\n","Requirement already satisfied: idna<4,>=2.5 in /usr/local/lib/python3.10/dist-packages (from requests->transformers[torch]) (3.6)\n","Requirement already satisfied: urllib3<3,>=1.21.1 in /usr/local/lib/python3.10/dist-packages (from requests->transformers[torch]) (2.0.7)\n","Requirement already satisfied: certifi>=2017.4.17 in /usr/local/lib/python3.10/dist-packages (from requests->transformers[torch]) (2024.2.2)\n","Requirement already satisfied: MarkupSafe>=2.0 in /usr/local/lib/python3.10/dist-packages (from jinja2->torch->transformers[torch]) (2.1.5)\n","Requirement already satisfied: mpmath>=0.19 in /usr/local/lib/python3.10/dist-packages (from sympy->torch->transformers[torch]) (1.3.0)\n","Installing collected packages: transformers, accelerate\n"," Attempting uninstall: transformers\n"," Found existing installation: transformers 4.38.2\n"," Uninstalling transformers-4.38.2:\n"," Successfully uninstalled transformers-4.38.2\n","Successfully installed accelerate-0.28.0 transformers-4.39.3\n"]}]},{"cell_type":"code","source":["from datasets import load_dataset\n","\n","# KLUE NER 데이터셋 로드\n","dataset = load_dataset(\"klue\", \"ner\")\n","\n","# 태그 리스트 확인\n","tag_list = dataset['train'].features['ner_tags'].feature.names\n","print(tag_list)\n","\n","# tag2id 및 id2tag 사전 생성\n","tag2id = {tag: id for id, tag in enumerate(tag_list)}\n","id2tag = {id: tag for tag, id in tag2id.items()}\n"],"metadata":{"colab":{"base_uri":"https://localhost:8080/","height":322,"referenced_widgets":["798850727cc8425eaf6175afb3775814","bb436f42443c4e5fa41313748cb3095e","4186bf16685b45c097e9439df8a18ece","f883a7de6e414126be07c78cf097c0af","ddab447cf8734f6bb37a9aef7610b152","c19bac5165aa45dd8b1c461be7adf1e0","b9ea442fa8cc4b828b24c2b9d718c111","3ed98750e09849c09f9a71cd33e295d4","d5c7aa1db7b4428f836d55fdabb0fbf3","beb045d4e94d48b0bc5dea7af46f1abc","de70bf35152d4460b3b30c3be61ba143","57a73bef422341d3ac8eb092f6aecb14","9178609f8f464cf489f4bc546900bfab","39a9e423c6e24ccdafb06e38856b3d88","4eb841c6834c432db1d322d05e90d236","51bacf74bbf846e288bc306a3149eb53","4ae071d616604e4ab886bf14731b834a","d138f84ba02d4aba8571fba0c6e33eff","906967413214474a8eb3854cdb853446","1f8da36838184aab9a16e608f983c2a6","e4cffb6a102544409cdedb2cc9032b3b","1f755d4f0ca94c4ca3504b00fe812db8","ba7a1184512d48be8125c18fa34182fb","2f0e8b41981b45ab8184601bc8ce43bf","fd7d5a26155c432980e8d8af4d308b71","5247ebeae5ef463c91820ae75753a995","fea1de75da2d4b44920d34c02c0fc58d","9c7322d7f0504713b95ed0fa0921b008","67689efc6c244fb58e97a39f16fbb356","1bb81d8545ea4daea22b21d5d6703a23","c48406f609064d7cb781bdcb431aa3ed","76525f9e332d46308e9a3f7c586699c5","57b16234f4034e498e8f5ac4d59e67ca","cceb1bc4b4d24816ae421f24b5b96b98","071081a597464f55812f505e531924ef","a0972d998d6545ec8e6b30a9edcb1736","d9c9cf6885e8402d84a6ef6dee35ac59","0575b30f4da84f379bd2cc5d5f3190ea","d158415735874c4e855aff4b4ac284b5","5662d8a14e1949f6a821f7d013ab600c","a8322aff5d2744509a435cfa7f29d574","d9d585df8d914b94b2455a445e846dbd","26bdcb86168e4c24bd80cfc44085ebba","ab9af3353c96402c9088984f06ad720d","08199005375444a781594d286578be46","6a3c8dfbd82d49e486cd079ffb2573bd","eae783c6f15a44fe85e6ae802787c06c","2c014f7b70614bd0bdbaad533b91733b","d9159920c64a4f1ba231c07de4e73e82","67a9d76161274bcdaacefbf6283b7018","b12f9a5275144f4c8ccbf7b072349443","eb831d3b82b14cb0a231036fd084fc96","112f612f8f7a48f595e223da1f9ee4e0","00d658a9dce34fc28b26263bb5154eb9","6484a68609014d83939253a0436268e7"]},"id":"kWjggPJuvt1z","executionInfo":{"status":"ok","timestamp":1712127859542,"user_tz":-540,"elapsed":10518,"user":{"displayName":"송문선","userId":"02769911744591628940"}},"outputId":"b0308591-ac3f-4ef0-f71f-9d2bc481ce96"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stderr","text":["/usr/local/lib/python3.10/dist-packages/huggingface_hub/utils/_token.py:88: UserWarning: \n","The secret `HF_TOKEN` does not exist in your Colab secrets.\n","To authenticate with the Hugging Face Hub, create a token in your settings tab (https://huggingface.co/settings/tokens), set it as secret in your Google Colab and restart your session.\n","You will be able to reuse this secret in all of your notebooks.\n","Please note that authentication is recommended but still optional to access public models or datasets.\n"," warnings.warn(\n"]},{"output_type":"display_data","data":{"text/plain":["Downloading readme: 0%| | 0.00/22.5k [00:00\"]]\n","\n"," # '▁' 문자를 공백으로 대체하여 보다 자연스러운 출력을 생성\n"," token_tag_pairs = [(token.replace('▁', ' '), tag) for token, tag in token_tag_pairs]\n","\n"," return token_tag_pairs\n","\n","def find_career_status(text):\n"," # '경력' 다음에 오는 '유', '무', '없', '있' 찾기\n"," pattern = r'경력\\s*:\\s*(유|무|없|있)'\n","\n"," # 문자열에서 패턴에 해당하는 부분 찾기\n"," match = re.search(pattern, text)\n","\n"," # 찾은 값을 변수에 저장하고 처리\n"," if match:\n"," raw_career = match.group(1) # 첫 번째 그룹(유|무|없|있)을 추출\n"," # '없'이나 '있'을 각각 '무', '유'로 변환\n"," if raw_career == '없':\n"," career = '무'\n"," elif raw_career == '있':\n"," career = '유'\n"," else:\n"," career = raw_career\n","\n"," return career\n"," else:\n"," return \"경력 유무를 찾을 수 없습니다.\"\n","\n","def find_phone_number(text):\n"," # 정규 표현식으로 전화번호 패턴 찾기\n"," # 패턴 설명: '010'으로 시작하며, '-'가 있을 수도 있고 없을 수도 있으며, 숫자가 연속으로 나타남\n"," pattern = r'010-?\\d{4}-?\\d{4}'\n","\n"," # 문자열에서 패턴에 해당하는 부분 찾기\n"," match = re.search(pattern, text)\n","\n"," # 찾은 전화번호를 변수에 저장하고 출력\n"," if match:\n"," phone_number = match.group()\n"," return phone_number\n"," else:\n"," return \"전화번호를 찾을 수 없습니다.\""],"metadata":{"id":"BPaJ4r6PwEbG"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["# 예시 문장\n","text = \"김준호 경기도 과천시 ,88살 .전화번호는 010-2093-6627, 경력 : 유\"\n","\n","# 모델을 사용하여 문장에서 개체 추출\n","predicted_entities = predict_entities(text, model, tokenizer,id2tag)\n","career = find_career_status(text)\n","phone_number = find_phone_number(text)\n","# 결과 출력\n","print(predicted_entities)\n","print(career)\n","print(phone_number)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"c573a34EwF0a","executionInfo":{"status":"ok","timestamp":1712127877232,"user_tz":-540,"elapsed":737,"user":{"displayName":"송문선","userId":"02769911744591628940"}},"outputId":"2a30be33-440d-453a-b770-c50a03a8ebc9"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["[(' 김', 'B-PS'), ('준호', 'B-PS'), (' 경기도', 'B-LC'), (' ', 'B-LC'), ('과', 'B-LC'), ('천', 'B-LC'), ('시', 'B-LC'), (' ', 'B-LC'), (',', 'O'), ('88', 'B-QT'), ('살', 'O'), (' ', 'O'), ('.', 'O'), ('전', 'O'), ('화', 'O'), ('번호', 'O'), ('는', 'O'), (' 0', 'O'), ('10', 'O'), ('-20', 'O'), ('93', 'O'), ('-', 'O'), ('66', 'O'), ('27', 'O'), (',', 'O'), (' 경력', 'O'), (' :', 'O'), (' 유', 'O')]\n","유\n","010-2093-6627\n"]}]},{"cell_type":"code","source":["# 개체 유형별로 정보를 추출하고 결합하는 함수 정의\n","def extract_and_combine_entities(predicted_entities):\n"," name = \"\"\n"," location = \"\"\n"," age = \"\"\n","\n"," for token, tag in predicted_entities:\n"," if tag == 'B-PS': # 이름 추출\n"," name += token.strip()\n"," elif tag == 'B-LC': # 위치 추출\n"," if token == \" \":\n"," location += token\n"," else:\n"," location += token.strip()\n"," elif tag == 'B-QT': # 나이(수량) 추출\n"," age = token.strip()\n","\n"," # 결과 반환\n"," return {\"name\": name, \"location\": location, \"age\": age}\n","\n","# 함수를 사용하여 변수에 저장\n","entities_combined = extract_and_combine_entities(predicted_entities)\n","\n","# 결과 출력\n","entities_combined[\"career\"] = career\n","entities_combined[\"phone_number\"] = phone_number\n","print(entities_combined)"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"bk9Rk0ctwH96","executionInfo":{"status":"ok","timestamp":1712127881298,"user_tz":-540,"elapsed":353,"user":{"displayName":"송문선","userId":"02769911744591628940"}},"outputId":"991fb040-5652-4a92-8aff-0dea8844b338"},"execution_count":null,"outputs":[{"output_type":"stream","name":"stdout","text":["{'name': '김준호', 'location': '경기도 과천시 ', 'age': '88', 'career': '유', 'phone_number': '010-2093-6627'}\n"]}]},{"cell_type":"code","source":["pip install pymongo"],"metadata":{"id":"O-FrIWDOwKUK"},"execution_count":null,"outputs":[]},{"cell_type":"code","source":["from pymongo import MongoClient\n","\n","# MongoDB 서버에 연결. 여기서는 로컬 MongoDB 인스턴스를 사용합니다.\n","client = MongoClient('mongodb://localhost:27017/')\n","\n","# 'mydatabase'라는 데이터베이스 선택. 없다면 새로 생성됩니다.\n","db = client['mydatabase']\n","\n","# 'people'이라는 컬렉션 선택. 없다면 새로 생성됩니다.\n","collection = db['people']\n","\n","# 딕셔너리를 MongoDB 컬렉션에 삽입\n","result = collection.insert_one(entities_combined)\n","\n","# 삽입된 문서의 ID 출력\n","print(\"Inserted document ID:\", result.inserted_id)"],"metadata":{"id":"cThEDFYYwM4f"},"execution_count":null,"outputs":[]}]} \ No newline at end of file diff --git a/DataExtract/colab/logs_retrained/events.out.tfevents.1711953590.e19a0f9d0fda.879.0 b/DataExtract/colab/logs_retrained/events.out.tfevents.1711953590.e19a0f9d0fda.879.0 new file mode 100644 index 0000000000..6e8818f649 Binary files /dev/null and b/DataExtract/colab/logs_retrained/events.out.tfevents.1711953590.e19a0f9d0fda.879.0 differ diff --git a/DataExtract/colab/logs_retrained/events.out.tfevents.1712073374.fc08e119c972.149.0 b/DataExtract/colab/logs_retrained/events.out.tfevents.1712073374.fc08e119c972.149.0 new file mode 100644 index 0000000000..fe3bcb5eb1 Binary files /dev/null and b/DataExtract/colab/logs_retrained/events.out.tfevents.1712073374.fc08e119c972.149.0 differ diff --git a/DataExtract/colab/logs_retrained/events.out.tfevents.1712136011.ebca3ff1491d.752.0 b/DataExtract/colab/logs_retrained/events.out.tfevents.1712136011.ebca3ff1491d.752.0 new file mode 100644 index 0000000000..66d6a152c3 Binary files /dev/null and b/DataExtract/colab/logs_retrained/events.out.tfevents.1712136011.ebca3ff1491d.752.0 differ diff --git a/DataExtract/dummy/db_score.py b/DataExtract/dummy/db_score.py new file mode 100644 index 0000000000..c735018056 --- /dev/null +++ b/DataExtract/dummy/db_score.py @@ -0,0 +1,34 @@ +# db_store.py + +from model import load_model_and_tokenizer, predict_entities +from data_processing import find_career_status, find_phone_number, extract_and_combine_entities +from datasets import load_dataset +from config.db import connect_db, get_collection + +# MongoDB 데이터베이스 연결 +db = connect_db() +collection = db['ExtractedEntities'] # 원하는 컬렉션 이름을 지정 + +# KLUE NER 데이터셋 로드 +dataset = load_dataset("klue", "ner") +tag_list = dataset['train'].features['ner_tags'].feature.names +tag2id = {tag: id for id, tag in enumerate(tag_list)} +id2tag = {id: tag for tag, id in tag2id.items()} + +# 모델 및 토크나이저 로드 +model, tokenizer = load_model_and_tokenizer() + +# 예시 텍스트 +text = "25/ 김준호 /서초구 거주/경력:유/전화번호:010-0000-0000" + +# 엔티티 추출 및 결합 +predicted_entities = predict_entities(text, model, tokenizer, id2tag) +entities_combined = extract_and_combine_entities(predicted_entities) +entities_combined["career"] = find_career_status(text) +entities_combined["phonenumber"] = find_phone_number(text) +entities_combined["sex"] = "남" +entities_combined["RRN"] = "000000-0000000" + +# 데이터 MongoDB에 저장 +insert_result = collection.insert_one(entities_combined) +print(f"삽입된 문서 ID: {insert_result.inserted_id}") diff --git a/DataExtract/dummy/example.py b/DataExtract/dummy/example.py new file mode 100644 index 0000000000..e0e1043ba1 --- /dev/null +++ b/DataExtract/dummy/example.py @@ -0,0 +1,9 @@ +from config.db import connect_db +import pprint + +db = connect_db() +collection = db['ExtractedEntities'] +db.list_collection_names() + +for document in collection.find(): + print(document) \ No newline at end of file diff --git a/DataExtract/dummy/rawcode.py b/DataExtract/dummy/rawcode.py new file mode 100644 index 0000000000..ad2dea32aa --- /dev/null +++ b/DataExtract/dummy/rawcode.py @@ -0,0 +1,133 @@ +from transformers import BertTokenizerFast, BertForTokenClassification, AdamW +from transformers import Trainer, TrainingArguments +from datasets import load_dataset, load_metric +import torch +from torch.utils.data import DataLoader +from torch.nn.utils.rnn import pad_sequence +import numpy as np +from kobert_tokenizer import KoBERTTokenizer +from kobert_transformers import get_kobert_model, get_tokenizer +from transformers import BertForTokenClassification + +# KLUE NER 데이터셋 로드 +dataset = load_dataset("klue", "ner") + +# 태그 리스트 확인 +tag_list = dataset['train'].features['ner_tags'].feature.names +print(tag_list) + +# tag2id 및 id2tag 사전 생성 +tag2id = {tag: id for id, tag in enumerate(tag_list)} +id2tag = {id: tag for tag, id in tag2id.items()} + +model_name = "mmoonssun/klue_ner_kobert" +model = BertForTokenClassification.from_pretrained(model_name, num_labels=13) # num_labels는 데이터셋의 라벨 수에 맞춰 조정 +tokenizer = KoBERTTokenizer.from_pretrained('skt/kobert-base-v1') + +import re + +def predict_entities(text, model, tokenizer, id2tag): + # GPU 사용 설정 + device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + model.to(device) + + # 평가 모드로 설정 + model.eval() + + # 입력 문장 토크나이징 및 텐서로 변환 + inputs = tokenizer(text, padding=True, truncation=True, return_tensors="pt", max_length=512) + input_ids = inputs["input_ids"].to(device) + attention_mask = inputs["attention_mask"].to(device) + + # 예측 수행 + with torch.no_grad(): + outputs = model(input_ids, attention_mask=attention_mask) + logits = outputs.logits + + # 예측 결과에서 가장 높은 확률을 가진 태그 ID를 추출 + predictions = torch.argmax(logits, dim=2) + + # ID를 태그로 변환 + predicted_tags = [id2tag[id.item()] for id in predictions[0]] + + # 토큰화된 텍스트와 예측된 태그 결합 + tokens = tokenizer.convert_ids_to_tokens(input_ids[0].tolist()) + token_tag_pairs = [(token, tag) for token, tag in zip(tokens, predicted_tags) if token not in ["[CLS]", "[SEP]", "[PAD]", ""]] + + # '▁' 문자를 공백으로 대체하여 보다 자연스러운 출력을 생성 + token_tag_pairs = [(token.replace('▁', ' '), tag) for token, tag in token_tag_pairs] + + return token_tag_pairs + +def find_career_status(text): + # '경력' 다음에 오는 '유', '무', '없', '있' 찾기 + pattern = r'경력\s*:\s*(유|무|없|있)' + + # 문자열에서 패턴에 해당하는 부분 찾기 + match = re.search(pattern, text) + + # 찾은 값을 변수에 저장하고 처리 + if match: + raw_career = match.group(1) # 첫 번째 그룹(유|무|없|있)을 추출 + # '없'이나 '있'을 각각 '무', '유'로 변환 + if raw_career == '없': + career = '무' + elif raw_career == '있': + career = '유' + else: + career = raw_career + + return career + else: + return "경력 유무를 찾을 수 없습니다." + +def find_phone_number(text): + # 정규 표현식으로 전화번호 패턴 찾기 + # 패턴 설명: '010'으로 시작하며, '-'가 있을 수도 있고 없을 수도 있으며, 숫자가 연속으로 나타남 + pattern = r'010-?\d{4}-?\d{4}' + + # 문자열에서 패턴에 해당하는 부분 찾기 + match = re.search(pattern, text) + + # 찾은 전화번호를 변수에 저장하고 출력 + if match: + phone_number = match.group() + return phone_number + else: + return "전화번호를 찾을 수 없습니다." + +def extract_and_combine_entities(predicted_entities): + name = "" + location = "" + age = "" + + for token, tag in predicted_entities: + if tag == 'B-PS': # 이름 추출 + name += token.strip() + elif tag == 'B-LC': # 위치 추출 + if token == " ": + location += token + else: + location += token.strip() + elif tag == 'B-QT' or tag == 'B-DT': # 나이(수량) 추출 + age = token.strip() + + # 결과 반환 + return {"name": name, "location": location, "age": age} + +# 예시 문장 +text = "25/ 김준호 /서초구 거주/경력:유/전화번호:010-0000-0000" + +# 모델을 사용하여 문장에서 개체 추출 +predicted_entities = predict_entities(text, model, tokenizer, id2tag) +career = find_career_status(text) +phone_number = find_phone_number(text) + +# 함수를 사용하여 변수에 저장 +entities_combined = extract_and_combine_entities(predicted_entities) + +# 결과 출력 +entities_combined["career"] = career +entities_combined["phone_number"] = phone_number + +print(entities_combined) diff --git a/DataExtract/package.json b/DataExtract/package.json new file mode 100644 index 0000000000..d8aff416ae --- /dev/null +++ b/DataExtract/package.json @@ -0,0 +1,15 @@ +{ + "name": "capstone-2024-35", + "version": "1.0.0", + "description": "Capstone Project 2024-35", + "main": "index.js", + "scripts": { + "start": "node src/mongodb_store.js" + }, + "dependencies": { + "dotenv": "^16.0.0", + "mongodb": "^4.10.0" + }, + "author": "", + "license": "ISC" + } \ No newline at end of file diff --git a/DataExtract/src/__init__.py b/DataExtract/src/__init__.py new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/DataExtract/src/__init__.py @@ -0,0 +1 @@ + diff --git a/DataExtract/src/__pycache__/data_processing.cpython-310.pyc b/DataExtract/src/__pycache__/data_processing.cpython-310.pyc new file mode 100644 index 0000000000..9966b02f73 Binary files /dev/null and b/DataExtract/src/__pycache__/data_processing.cpython-310.pyc differ diff --git a/DataExtract/src/__pycache__/employee.cpython-310.pyc b/DataExtract/src/__pycache__/employee.cpython-310.pyc new file mode 100644 index 0000000000..127c86afcd Binary files /dev/null and b/DataExtract/src/__pycache__/employee.cpython-310.pyc differ diff --git a/DataExtract/src/__pycache__/model.cpython-310.pyc b/DataExtract/src/__pycache__/model.cpython-310.pyc new file mode 100644 index 0000000000..b7b2e92730 Binary files /dev/null and b/DataExtract/src/__pycache__/model.cpython-310.pyc differ diff --git a/DataExtract/src/__pycache__/model.cpython-39.pyc b/DataExtract/src/__pycache__/model.cpython-39.pyc new file mode 100644 index 0000000000..0c89d8ac7f Binary files /dev/null and b/DataExtract/src/__pycache__/model.cpython-39.pyc differ diff --git a/DataExtract/src/config/__pycache__/db.cpython-310.pyc b/DataExtract/src/config/__pycache__/db.cpython-310.pyc new file mode 100644 index 0000000000..2c30ec1562 Binary files /dev/null and b/DataExtract/src/config/__pycache__/db.cpython-310.pyc differ diff --git a/DataExtract/src/config/db.py b/DataExtract/src/config/db.py new file mode 100644 index 0000000000..cc361b30bf --- /dev/null +++ b/DataExtract/src/config/db.py @@ -0,0 +1,18 @@ +# src/config/db.py + +import os +from dotenv import load_dotenv +from pymongo import MongoClient + +# 환경 변수 로드 +load_dotenv() +mongodb_uri = os.getenv('MONGODB_URI') + +# MongoDB 연결 설정 +def connect_db(): + client = MongoClient(mongodb_uri) + db = client['Authusers'] # 데이터베이스 이름을 여기에서 변경 가능 + return db +def get_collection(collection_name): + db = connect_db() + return db[collection_name] \ No newline at end of file diff --git a/DataExtract/src/data_processing.py b/DataExtract/src/data_processing.py new file mode 100644 index 0000000000..b3ca521959 --- /dev/null +++ b/DataExtract/src/data_processing.py @@ -0,0 +1,38 @@ +import re + +def find_career_status(text): + pattern = r'(경력\s*(:|은|는|이|가| )?\s*[^,\.]*|없|있|무|유)' + match = re.search(pattern, text) + if match: + full_text = match.group(1).strip() + # '유' 또는 '있'으로 시작하는 경우 '유' 반환 + if full_text.startswith('유') or full_text.startswith('있'): + return '유' + # '무' 또는 '없'으로 시작하는 경우 '무' 반환 + elif full_text.startswith('무') or full_text.startswith('없'): + return '무' + else: + # 조건에 맞지 않는 경우 전체 텍스트 반환 + return full_text + return "경력 유무를 찾을 수 없습니다." + +def find_phone_number(text): + pattern = r'010-?\d{4}-?\d{4}' + match = re.search(pattern, text) + return match.group() if match else "전화번호를 찾을 수 없습니다." + +def extract_and_combine_entities(predicted_entities): + entity_info = {"name": "", "local": "", "age": ""} + for token, tag in predicted_entities: + if tag == 'B-PS': + entity_info["name"] += token.strip() + " " # 이름 분리 + elif tag == 'B-LC': + entity_info["local"] += token.strip() if token != " " else token + elif tag in ['B-QT', 'B-DT']: + entity_info["age"] += token.strip() + " " + entity_info["name"] = entity_info["name"].strip() # 공백 제거 + #entity_info["local"] = entity_info["local"].strip() + entity_info["age"] = entity_info["age"].strip() + + + return entity_info diff --git a/DataExtract/src/employee.py b/DataExtract/src/employee.py new file mode 100644 index 0000000000..6ecf148fb2 --- /dev/null +++ b/DataExtract/src/employee.py @@ -0,0 +1,68 @@ +# employee.py + +from datetime import datetime +from bson import ObjectId +from config.db import get_collection + +class Employee: + def __init__(self, user, name, sex, local, rrn,career,age, created_at=None, updated_at=None): + self.user = ObjectId(user) + self.name = name + self.sex = sex + self.local = local + self.rrn = rrn # 주민등록번호 + self.age = age + self.career = career + self.created_at = created_at if created_at else datetime.utcnow() + self.updated_at = updated_at if updated_at else datetime.utcnow() + + def to_dict(self): + return { + 'user': self.user, + 'name': self.name, + 'sex': self.sex, + 'local': self.local, + 'RRN': self.rrn, + 'age': self.age, + 'career': self.career, + #'phonenumber': self.phonenumber, + 'createdAt': self.created_at, + 'updatedAt': self.updated_at + } + +class EmployeeRepository: + """ + Employee 데이터를 관리하는 저장소 클래스. + """ + def __init__(self): + self.collection = get_collection('ExtractedEntities') + + def insert(self, employee: Employee): + """ + 새로운 Employee를 삽입합니다. + """ + self.collection.insert_one(employee.to_dict()) + + def find_all(self): + """ + 모든 Employee 데이터를 반환합니다. + """ + return list(self.collection.find()) + + def find_by_name(self, name): + """ + 이름으로 Employee 데이터를 찾습니다. + """ + return list(self.collection.find({'name': name})) + + def update(self, employee_id, updated_fields): + """ + 주어진 Employee ID의 데이터를 업데이트합니다. + """ + self.collection.update_one({'_id': ObjectId(employee_id)}, {'$set': updated_fields}) + + def delete(self, employee_id): + """ + 주어진 Employee ID의 데이터를 삭제합니다. + """ + self.collection.delete_one({'_id': ObjectId(employee_id)}) \ No newline at end of file diff --git a/DataExtract/src/main.py b/DataExtract/src/main.py new file mode 100644 index 0000000000..4641d76432 --- /dev/null +++ b/DataExtract/src/main.py @@ -0,0 +1,87 @@ +# db_store.py + +from model import load_model_and_tokenizer, predict_entities +from data_processing import find_career_status, find_phone_number, extract_and_combine_entities +from datasets import load_dataset +from config.db import connect_db, get_collection +from employee import Employee, EmployeeRepository +from flask import Flask, request, render_template, redirect, url_for + +app = Flask(__name__) + +# MongoDB 데이터베이스 연결 +db = connect_db() +collection = get_collection('ExtractedEntities') # 원하는 컬렉션 이름을 지정 + + +# KLUE NER 데이터셋 로드 +dataset = load_dataset("klue", "ner") +tag_list = dataset['train'].features['ner_tags'].feature.names +tag2id = {tag: id for id, tag in enumerate(tag_list)} +id2tag = {id: tag for tag, id in tag2id.items()} + +# 모델 및 토크나이저 로드 +model, tokenizer = load_model_and_tokenizer() + +# 예시 텍스트 +#text = "송문선 / 24/서초구 거주/경력은 사무실 철거 해봤습니다." + +@app.route('/', methods=['GET', 'POST']) +def index(): + if request.method == 'POST': + text = request.form['text'] + if text: + combine(text) + return redirect(url_for('index')) + return render_template('index.html') + + + +def combine(text): + predicted_entities = predict_entities(text, model, tokenizer, id2tag) + entities_combined = extract_and_combine_entities(predicted_entities) + entities_combined["career"] = find_career_status(text) + entities_combined["phonenumber"] = "010-0000-0000" + entities_combined["sex"] = "남" + entities_combined["RRN"] = "000000-0000000" + entities_combined["name"] = entities_combined["name"].replace(' ', '') + entities_combined["name"] = entities_combined["name"].replace(',', '') + entities_combined["age"] = entities_combined["age"].replace(' ', '') + entities_combined["age"] = entities_combined["age"].replace(',', '') + entities_combined["local"] = entities_combined["local"].replace(' ', '') + entities_combined["local"] = entities_combined["local"].replace(',', '') + user_id = '609b8b8f8e4f5b88f8e8e8e8' + new_employee = Employee( + user=user_id, + name=entities_combined["name"], + sex=entities_combined["sex"], + local=entities_combined["local"], + rrn=entities_combined["RRN"], + career = entities_combined["career"], + age = entities_combined["age"] + ) + #데이터 MongoDB에 저장 + employee_repo = EmployeeRepository() + employee_repo.insert(new_employee) + print(entities_combined) + +@app.route('/employees', methods=['GET']) +def list_employees(): + employee_repo = EmployeeRepository() + employees = employee_repo.find_all() + return render_template('employees.html', employees=employees) + +if __name__ == '__main__': + app.run(debug=True) +''' +while(1): + text = input('메시지 내용 : ') + if text == 'quit': + break + combine(text) + +employee_repo = EmployeeRepository() +for employee in employee_repo.find_all(): + print(employee) + +''' diff --git a/DataExtract/src/model.py b/DataExtract/src/model.py new file mode 100644 index 0000000000..c0e62192c1 --- /dev/null +++ b/DataExtract/src/model.py @@ -0,0 +1,34 @@ +from transformers import BertForTokenClassification +from kobert_tokenizer import KoBERTTokenizer +import torch +import re + +def load_model_and_tokenizer(): + model_name = "mmoonssun/klue_ner_kobert" + model = BertForTokenClassification.from_pretrained(model_name, num_labels=13) + tokenizer = KoBERTTokenizer.from_pretrained('skt/kobert-base-v1') + return model, tokenizer +def preprocess_text(text): + # 숫자 앞뒤에 공백 추가 + text = re.sub(r'(\d+)', r' \1 ', text) + text = text.replace('/', ' , ') + # 중복 공백 제거 + text = re.sub(r'\s+', ' ', text).strip() + return text +def predict_entities(text, model, tokenizer, id2tag): + device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + model.to(device) + model.eval() + text = preprocess_text(text) # 텍스트 전처리 적용 + inputs = tokenizer(text, padding=True, truncation=True, return_tensors="pt", max_length=512) + input_ids = inputs["input_ids"].to(device) + attention_mask = inputs["attention_mask"].to(device) + with torch.no_grad(): + outputs = model(input_ids, attention_mask=attention_mask) + logits = outputs.logits + predictions = torch.argmax(logits, dim=2) + predicted_tags = [id2tag[id.item()] for id in predictions[0]] + tokens = tokenizer.convert_ids_to_tokens(input_ids[0].tolist()) + token_tag_pairs = [(token.replace('▁', ' '), tag) for token, tag in zip(tokens, predicted_tags) if token not in ["[CLS]", "[SEP]", "[PAD]", ""]] + print(token_tag_pairs) + return token_tag_pairs diff --git a/DataExtract/src/requirements.txt b/DataExtract/src/requirements.txt new file mode 100644 index 0000000000..8c5fbbbbfe --- /dev/null +++ b/DataExtract/src/requirements.txt @@ -0,0 +1,8 @@ +torch +transformers[torch] +datasets +seqeval +kobert-transformers +onnxruntime==1.8.0 +git+https://github.com/SKTBrain/KoBERT.git@master +git+https://github.com/SKTBrain/KoBERT.git#egg=kobert_tokenizer&subdirectory=kobert_hf diff --git a/DataExtract/src/templates/employees.html b/DataExtract/src/templates/employees.html new file mode 100644 index 0000000000..8f0ccb707f --- /dev/null +++ b/DataExtract/src/templates/employees.html @@ -0,0 +1,31 @@ + + + + + + List of Employees + + +

Employees

+ + + + + + + + + + {% for employee in employees %} + + + + + + + + + {% endfor %} +
NameSexLocalRRNCareerAge
{{ employee.name }}{{ employee.sex }}{{ employee.local }}{{ employee.rrn }}{{ employee.career }}{{ employee.age }}
+ + \ No newline at end of file diff --git a/DataExtract/src/templates/index.html b/DataExtract/src/templates/index.html new file mode 100644 index 0000000000..4db3e16683 --- /dev/null +++ b/DataExtract/src/templates/index.html @@ -0,0 +1,16 @@ + + + + + + Entity Extraction and DB Insertion + + +

Enter Text for Entity Extraction

+
+ + + +
+ + \ No newline at end of file diff --git a/DataExtract/src/utilities.py b/DataExtract/src/utilities.py new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/DataExtract/src/utilities.py @@ -0,0 +1 @@ + diff --git a/README.md b/README.md index b0c42847c6..81876ccd68 100644 --- a/README.md +++ b/README.md @@ -1,76 +1,142 @@ -# Welcome to GitHub +# 아웃소싱 회사를 위한 인력 pms 개발 +## 1.프로젝트 소개 +![image](https://github.com/kookmin-sw/capstone-2024-35/assets/162407707/6b453b05-ba72-4bd6-8e4c-f8955ecee624) + + +거래처 증가에 따른 현장의 인원 및 다양성 증가로 인하여 기존 일일이 수작업으로 문자 지원 받고 배치하기에 벅참을 느끼고 AI를 통하여 유연하고 자동화된 PMS를 고안하게 되었다. -캡스톤 팀 생성을 축하합니다. +기존 수작업으로 일일이 해당 현장에 맞는 인원을 생각하고 찾아 연락하고 배치하는 번거로움을 기존에 구축된 인적 DB를 바탕으로 구축된 시스템에 현장 주소와 간단한 업무 내용과 필요한 인원 수를 입력하면 해당 현장에 가장 적합한 인원을 자동 선별한다. +이에 그치지 않고, 사용자가 원한다면 WEB발신을 통한 문자 전송까지도 가능케 한다. 더 나아가, 현장이 종료되면 매번 계좌 정보를 받아 일일이 급여 입금을 하는 행위 역시 상당한 시간이 소요되었는데, 인적정보에 더하여 최초 한번 계좌정보를 입력하여 두면, 간단한 클릭만으로 일괄 계좌이체 및 개별 계좌이체도 가능하게 할 예정이다. -## 팀소개 및 페이지를 꾸며주세요. +그리하여 이 시스템 하나로 원큐에 가능한 점이 많기에, 시간 효율성이 증가하고 이는 즉 다른 업무 볼 시간 증대로 이어진다. 그렇게 되면 장기적으로는 매출 증가 및 수익 향상을 이뤄낼 수 있다. 즉, 아웃소싱 업체에서 하는 일련의 모든 과정이 우리의 시스템 하나로 알맞고 빠르고 편하게 이루어지는 것에 그 궁극적인 목표가 있다. -- 프로젝트 소개 - - 프로젝트 설치방법 및 데모, 사용방법, 프리뷰등을 readme.md에 작성. - - Api나 사용방법등 내용이 많을경우 wiki에 꾸미고 링크 추가. +## 2. 소개영상 -- 팀페이지 꾸미기 - - 프로젝트 소개 및 팀원 소개 - - index.md 예시보고 수정. - -- GitHub Pages 리파지토리 Settings > Options > GitHub Pages - - Source를 marster branch - - Theme Chooser에서 태마선택 - - 수정후 팀페이지 확인하여 점검. - -**팀페이지 주소** -> https://kookmin-sw.github.io/ '{{자신의 리파지토리 아이디}}' - -**예시)** 2023년 0조 https://kookmin-sw.github.io/capstone-2023-00/ - - -## 내용에 아래와 같은 내용들을 추가하세요. - -### 1. 프로잭트 소개 - -프로젝트 - -### 2. 소개 영상 - -프로젝트 소개하는 영상을 추가하세요 - -### 3. 팀 소개 - -팀을 소개하세요. - -팀원정보 및 담당이나 사진 및 SNS를 이용하여 소개하세요. - -### 4. 사용법 - -소스코드제출시 설치법이나 사용법을 작성하세요. - -### 5. 기타 - -추가적인 내용은 자유롭게 작성하세요. - - -## Markdown을 사용하여 내용꾸미기 - -Markdown은 작문을 스타일링하기위한 가볍고 사용하기 쉬운 구문입니다. 여기에는 다음을위한 규칙이 포함됩니다. +## 3. 팀 소개 + + + + + + + + + + + + + + + + + + + + + +
박참솔송문선조휘현
201900842017163720203320
AI / FrontendAI / FrontendProduct Manager
+ + + + + + + + + + + + + + + + + + +
이동현정민재
2018083720181688
BackendBackend
+ +
+ + + +## 4. 🛠 기술 스택 + +### 🌐 Frontend +- ![JavaScript](https://img.shields.io/badge/-JavaScript-F7DF1E?style=flat&logo=javascript&logoColor=black) - The programming language of the Web. +- ![REACT](https://img.shields.io/badge/-React-61DAFB?style=flat&logo=react&logoColor=black) - A JavaScript library for building user interfaces. +- ![Figma](https://img.shields.io/badge/-Figma-F24E1E?style=flat&logo=figma&logoColor=white) - Utilized for designing the overall UI/UX of the frontend. + + +### ⚙️ Backend +- ![NodeJS](https://img.shields.io/badge/-NodeJS-339933?style=flat&logo=nodedotjs&logoColor=white) - JavaScript runtime built on Chrome's V8 JavaScript engine. +- ![Express](https://img.shields.io/badge/-Express-000000?style=flat&logo=express&logoColor=white) - Fast, unopinionated, minimalist web framework for Node.js. +- ![MongoDB](https://img.shields.io/badge/-MongoDB-47A248?style=flat&logo=mongodb&logoColor=white) - NoSQL database that uses JSON-like documents with schemata. + +### 🤖 AI +- ![Python](https://img.shields.io/badge/-Python-3776AB?style=flat&logo=python&logoColor=white) - High-level programming language for general-purpose programming. +- ![Pytorch](https://img.shields.io/badge/-Pytorch-EE4C2C?style=flat&logo=pytorch&logoColor=white) - An open source machine learning library based on the Torch library. +- ![Colab](https://img.shields.io/badge/-Colab-F9AB00?style=flat&logo=googlecolab&logoColor=white) - A Google research project created to help disseminate machine learning education and research. +- ![AWS EC2](https://img.shields.io/badge/-AWS%20EC2-232F3E?style=flat&logo=amazonaws&logoColor=white) - Utilizing GPU instances for high-performance computing in machine learning projects. + + +### 🧰 Common Tools +- ![Github](https://img.shields.io/badge/-Github-181717?style=flat&logo=github&logoColor=white) - Provides hosting for software development version control using Git. +- ![Notion](https://img.shields.io/badge/-Notion-000000?style=flat&logo=notion&logoColor=white) - An application that provides components such as notes, databases, kanban boards, wikis, calendars and reminders. + + + + +## 5. 서비스 구조도 + + +## 6. 사용방법 +# 프로젝트명 + +## 개요 +이 프로젝트는 Node.js와 MongoDB를 사용하여 개발되었습니다. + +## 환경 설정 +- Node.js v20.11.1(LTS) 설치 +- 로컬에 MongoDB 설치 + +### Node.js 설치 +1. Node.js v20.11.1(LTS)를 설치합니다. [Node.js 다운로드 페이지](https://nodejs.org/)에서 다운로드 및 설치할 수 있습니다. + +### 로컬 MongoDB 설치 +1. MongoDB 공식 사이트에서 MongoDB Community Server를 다운로드하고 설치합니다. [MongoDB 다운로드 페이지](https://www.mongodb.com/try/download/community) + +### 모델 배포 +1. 모델은 huggingface에 업로드 되어있습니다 . [모델 주소 : https://huggingface.co/mmoonssun/klue_ner_kobert] +2. [klue-roberta_model: https://huggingface.co/Chamsol/klue-roberta-sentiment-classification/tree/main] +3. [koelectra_model: https://huggingface.co/Chamsol/klue-roberta-sentiment-classification] +4. 파이썬이나 colab등에서 모델을 불러오려면 다음 코드를 실행하면 됩니다. +```python +from kobert_transformers import get_kobert_model, get_tokenizer +from transformers import BertForTokenClassification + +model_name = "mmoonssun/klue_ner_kobert" +model = BertForTokenClassification.from_pretrained(model_name, num_labels=13) +tokenizer = KoBERTTokenizer.from_pretrained('skt/kobert-base-v1') +``` -```markdown -Syntax highlighted code block +## 패키지 설치 +프로젝트에 필요한 패키지들을 설치합니다. +npm install -# Header 1 -## Header 2 -### Header 3 +## 추후 변경해야 할 점 -- Bulleted -- List -1. Numbered -2. List -**Bold** and _Italic_ and `Code` text -[Link](url) and ![Image](src) -``` -자세한 내용은 [GitHub Flavored Markdown](https://guides.github.com/features/mastering-markdown/). -### Support or Contact +## 7. 캡스톤 최종발료 자료 +https://docs.google.com/presentation/d/1iJvgJuWEdSxu9rag-1UDNdaGIv3s8Zqh/edit?usp=sharing&ouid=116159848948864038515&rtpof=true&sd=true -readme 파일 생성에 추가적인 도움이 필요하면 [도움말](https://help.github.com/articles/about-readmes/) 이나 [contact support](https://github.com/contact) 을 이용하세요. +## 8. 캡스톤 포스터 ai 파일 +https://drive.google.com/file/d/1brOpfNPwoGO98SUKq56ew-wEG-nqXEWk/view?usp=drive_link diff --git a/RecommendationSystem/labeling/get_label.py b/RecommendationSystem/labeling/get_label.py new file mode 100644 index 0000000000..e02287e457 --- /dev/null +++ b/RecommendationSystem/labeling/get_label.py @@ -0,0 +1,66 @@ +#get label +import pandas as pd +import os +import pandas as pd +from tqdm import tqdm +import openai + + +def get_completion(prompt, model="gpt-3.5-turbo", api_key=""): + openai.api_key = api_key + messages = [{"role": "user", "content": prompt}] + + response = openai.ChatCompletion.create( + model=model, + messages=messages, + temperature=0, + ) + + return response.choices[0].message["content"] + +def get_label(person_name, person_corpus: str, api_key: str) -> str: + prompt = f'''### 역할: + 다음 설명을 기반으로 {person_name}에 대한 평가가 "매우 긍정", "긍정", "부정", "매우 부정" 중 어느 것에 해당하는지 라벨링 하시오. 이는 아래 규칙을 따릅니다. + + ### 설명: + {person_corpus} + + ### 규칙: + 1. 주어진 설명에 대해 하나의 ["매우 긍정"은 토큰값으로 3, "긍정"은 토큰값으로 1, "부정"은 토큰값으로 0, "매우 부정"은 토큰값으로 2]만을 선택하여 라벨링한다. + 2. 설명은 "### 설명:" 부분부터 시작된다. + 3. 출력은 "### 출력"와 같이 json 형식으로 출력한다. + 4. 라벨링은 설명 전문에 대해서 한다. + 5. 중립은 선택지에 없다. + 6. 출력은 형식외에 아무것도 작성하지 않는다. + + ### 출력 + ''' + + response = get_completion(prompt, "gpt-3.5-turbo", api_key) + return response + +if __name__ == "__main__": + path_file = "path" # 데이터셋 파일 경로 지정 + api_key = "OpenAi api key" # OpenAI API 키 지정 + pos_start = 0 + len_slice = 500 + + + + df_people = pd.read_csv(path_file)[pos_start:pos_start+len_slice] + df_people = df_people.drop_duplicates(["person_name"]) + df_people = df_people.dropna() + + list_result = [] + + for idx, row in tqdm(df_people.iterrows(), total=df_people.shape[0]): + try: + label_response = get_label(row["person_name"], row["person_corpus"], api_key) + list_result.append(label_response) + except Exception as e: + print(f"idx: {idx}, err: {e}") + list_result.append(f"idx: {idx}, err: {e}") + + df_people["label"] = list_result + + df_people.to_csv(f"./labeled_people_{pos_start}_to_{pos_start + len_slice}.csv", index=False) \ No newline at end of file diff --git a/RecommendationSystem/model/predict.py b/RecommendationSystem/model/predict.py new file mode 100644 index 0000000000..64e867afa7 --- /dev/null +++ b/RecommendationSystem/model/predict.py @@ -0,0 +1,75 @@ +import torch +from transformers import AutoTokenizer, AutoModelForSequenceClassification +import numpy as np + +# GPU 사용 가능 확인 및 device 설정 +device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + +# 토크나이저 로딩 +tokenizer_roberta = AutoTokenizer.from_pretrained("klue/roberta-large") +tokenizer_electra = AutoTokenizer.from_pretrained("monologg/koelectra-base-v3-discriminator") + +# 로드할 RoBERTa 모델 경로 +roberta_model_path = "/content/drive/MyDrive/to/save/roberta_model" +# 로드할 Electra 모델 경로 +electra_model_path = "/content/drive/MyDrive/to/save/electra_model" + +# 저장된 모델 로드 +model_roberta = AutoModelForSequenceClassification.from_pretrained(roberta_model_path) +model_electra = AutoModelForSequenceClassification.from_pretrained(electra_model_path) +# predict_with_ensemble_modified +# 소프트맥스 함수를 사용하여 로짓을 확률로 변환하는 함수 +def logits_to_probs(logits): + return torch.nn.functional.softmax(logits, dim=1) + +def predict_with_ensemble_modified(texts, roberta_model, koelectra_model, tokenizer_roberta, tokenizer_koelectra, device): + encodings_roberta = tokenizer_roberta(texts, truncation=True, padding=True, max_length=128) + encodings_koelectra = tokenizer_koelectra(texts, truncation=True, padding=True, max_length=128) + roberta_dataset = SentimentDataset(encodings_roberta, [0]*len(texts)) + koelectra_dataset = SentimentDataset(encodings_koelectra, [0]*len(texts)) + + roberta_dataloader = DataLoader(roberta_dataset, batch_size=32, shuffle=False) + koelectra_dataloader = DataLoader(koelectra_dataset, batch_size=32, shuffle=False) + + roberta_model.to(device) + koelectra_model.to(device) + + roberta_model.eval() + koelectra_model.eval() + + final_labels = [] + + with torch.no_grad(): + for roberta_batch, koelectra_batch in zip(roberta_dataloader, koelectra_dataloader): + roberta_input_ids, roberta_attention_mask = roberta_batch['input_ids'].to(device), roberta_batch['attention_mask'].to(device) + koelectra_input_ids, koelectra_attention_mask = koelectra_batch['input_ids'].to(device), koelectra_batch['attention_mask'].to(device) + + roberta_outputs = roberta_model(roberta_input_ids, roberta_attention_mask) + koelectra_outputs = koelectra_model(koelectra_input_ids, koelectra_attention_mask) + + roberta_probs = logits_to_probs(roberta_outputs.logits).cpu().numpy() + koelectra_probs = logits_to_probs(koelectra_outputs.logits).cpu().numpy() + + ensemble_probs = (roberta_probs + koelectra_probs) / 2 + + final_labels = [] + + for probs in ensemble_probs: + pred_label = np.argmax(probs) + if pred_label == 1 and probs[pred_label] > 0.6: # 긍정이면서 확률이 0.6 이상인 경우 + pred_label = 3 # 매우 긍정으로 변경 + elif pred_label == 0 and probs[pred_label] > 0.7: # 부정이면서 확률이 0.7 이상인 경우 + pred_label = 2 # 매우 부정으로 변경 + final_labels.append(pred_label) # 수정된 라벨을 최종 라벨 리스트에 추가 + + return final_labels # 수정: 최종 라벨 리스트 반환 + +# 예측할 텍스트 시퀀스 +texts_to_predict = ["일은 보통으로 하고 사람은 좋음.","일도 매우 잘하고 사람도 좋고 성실함", "일은 잘못하지만 말은 잘 들음", "불성실하고 매우 필요없음 그냥 없는게 나음"] + +# 함수 호출에 device 변수 사용 +final_labels = predict_with_ensemble_modified(texts_to_predict, model_roberta, model_electra, tokenizer_roberta, tokenizer_electra, device) + +# 결과 출력 +for text, label in zip(texts_to_predict, final_labels): + print(f"Text: {text} - Prediction: {label}") diff --git a/RecommendationSystem/model/test.py b/RecommendationSystem/model/test.py new file mode 100644 index 0000000000..d95cb652c1 --- /dev/null +++ b/RecommendationSystem/model/test.py @@ -0,0 +1,380 @@ +from geopy.distance import geodesic +import torch +from transformers import AutoTokenizer, AutoModelForSequenceClassification +import numpy as np + +# GPU 사용 가능 확인 및 device 설정 +device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + +# 토크나이저 로딩 +tokenizer_roberta = AutoTokenizer.from_pretrained("klue/roberta-large") +tokenizer_electra = AutoTokenizer.from_pretrained("monologg/koelectra-base-v3-discriminator") + +# 저장된 모델 로드 +model_roberta = AutoModelForSequenceClassification.from_pretrained("Chamsol/klue-roberta-sentiment-classification") +model_electra = AutoModelForSequenceClassification.from_pretrained("Chamsol/koelctra-sentiment-classification") + + +def calculate_distance(point1, point2): + # 두 지점 사이의 거리를 계산하는 함수 + distance_to_station = geodesic(point1, point2).kilometers + return distance_to_station + + + +def label_to_value(label): + if label == 0: + return -30 + elif label == 1: + return 30 + elif label == 2: + return -50 + elif label == 3: + return 50 + else: + return 0 + +def logits_to_probs(logits): + return torch.nn.functional.softmax(logits, dim=1) + +def predict_with_ensemble_modified(texts, roberta_model, koelectra_model, tokenizer_roberta, tokenizer_koelectra, device): + encodings_roberta = tokenizer_roberta(texts, truncation=True, padding=True, max_length=128, return_tensors="pt") + encodings_koelectra = tokenizer_koelectra(texts, truncation=True, padding=True, max_length=128, return_tensors="pt") + + roberta_input_ids, roberta_attention_mask = encodings_roberta['input_ids'].to(device), encodings_roberta['attention_mask'].to(device) + koelectra_input_ids, koelectra_attention_mask = encodings_koelectra['input_ids'].to(device), encodings_koelectra['attention_mask'].to(device) + + roberta_model.to(device) + koelectra_model.to(device) + + roberta_model.eval() + koelectra_model.eval() + + with torch.no_grad(): + roberta_outputs = roberta_model(roberta_input_ids, roberta_attention_mask) + koelectra_outputs = koelectra_model(koelectra_input_ids, koelectra_attention_mask) + + roberta_probs = logits_to_probs(roberta_outputs.logits).cpu().numpy() + koelectra_probs = logits_to_probs(koelectra_outputs.logits).cpu().numpy() + + ensemble_probs = (roberta_probs + koelectra_probs) / 2 + + final_labels = [] + + for probs in ensemble_probs: + pred_label = np.argmax(probs) + if pred_label == 1 and probs[pred_label] > 0.82: # 긍정이면서 확률이 0.8 이상인 경우 + pred_label = 3 # 매우 긍정으로 변경 + elif pred_label == 0 and probs[pred_label] > 0.89: # 부정이면서 확률이 0.8 이상인 경우 + pred_label = 2 # 매우 부정으로 변경 + final_labels.append(pred_label) + + return final_labels + +def get_coordinates_worksites(address): + # 주소에 따른 좌표 정보를 저장하는 딕셔너리 + coordinates_worksites = { + "서울": {'work_location_x': 37.5647, 'work_location_y': 126.9770}, + "강남구": {'work_location_x': 37.4979, 'work_location_y': 127.0276}, + "강동구": {'work_location_x': 37.5385, 'work_location_y': 127.1238}, + "강북구": {'work_location_x': 37.6380, 'work_location_y': 127.0251}, + "강서구": {'work_location_x': 37.5316, 'work_location_y': 126.8467}, + "관악구": {'work_location_x': 37.4813, 'work_location_y': 126.9527}, + "광진구": {'work_location_x': 37.5351, 'work_location_y': 127.0857}, + "구로구": {'work_location_x': 37.4853, 'work_location_y': 126.9015}, + "금천구": {'work_location_x': 37.4665, 'work_location_y': 126.8893}, + "노원구": {'work_location_x': 37.6445, 'work_location_y': 127.0643}, + "도봉구": {'work_location_x': 37.6531, 'work_location_y': 127.0476}, + "동대문구": {'work_location_x': 37.5716, 'work_location_y': 127.0095}, + "동작구": {'work_location_x': 37.5082, 'work_location_y': 126.9637}, + "마포구": {'work_location_x': 37.5572, 'work_location_y': 126.9236}, + "서대문구": {'work_location_x': 37.5658, 'work_location_y': 126.9666}, + "서초구": {'work_location_x': 37.4919, 'work_location_y': 127.0072}, + "성동구": {'work_location_x': 37.5612, 'work_location_y': 127.0379}, + "성북구": {'work_location_x': 37.5926, 'work_location_y': 127.0163}, + "송파구": {'work_location_x': 37.5133, 'work_location_y': 127.1001}, + "양천구": {'work_location_x': 37.5263, 'work_location_y': 126.8643}, + "영등포구": {'work_location_x': 37.5171, 'work_location_y': 126.9173}, + "용산구": {'work_location_x': 37.5298, 'work_location_y': 126.9644}, + "은평구": {'work_location_x': 37.6190, 'work_location_y': 126.9215}, + "종로구": {'work_location_x': 37.5704, 'work_location_y': 126.9910}, + "중구": {'work_location_x': 37.5647, 'work_location_y': 126.9770}, + "중랑구": {'work_location_x': 37.5960, 'work_location_y': 127.085}, + "인천": {'work_location_x': 37.5715, 'work_location_y': 126.7354}, + "인천 강화군": {'work_location_x': 37.5692, 'work_location_y': 126.6732}, + "인천 계양구": {'work_location_x': 37.5715, 'work_location_y': 126.7354}, + "인천 남동구": {'work_location_x': 37.4488, 'work_location_y': 126.7013}, + "인천 동구": {'work_location_x': 37.4751, 'work_location_y': 126.6322}, + "인천 미추홀구": {'work_location_x': 37.4420, 'work_location_y': 126.6995}, + "인천 부평구": {'work_location_x': 37.4891, 'work_location_y': 126.7245}, + "인천 서구": {'work_location_x': 37.5692, 'work_location_y': 126.6732}, + "인천 연수구": {'work_location_x': 37.3866, 'work_location_y': 126.6392}, + "인천 옹진군": {'work_location_x': 37.5111, 'work_location_y': 126.5230}, + "인천 중구": {'work_location_x': 37.4764, 'work_location_y': 126.6169}, + "가평군": {'가평역': {'work_location_x': 37.8147, 'work_location_y': 127.5102}}, + "고양시 일산서구": {'work_location_x': 37.6580, 'work_location_y': 126.7942}, + "고양시 일산동구": {'work_location_x': 37.6586, 'work_location_y': 126.7698}, + "고양시 덕양구": {'work_location_x': 37.6347, 'work_location_y': 126.8328}, + "과천시": {'work_location_x': 37.4339, 'work_location_y': 126.9966}, + "광명시": {'work_location_x': 37.4163, 'work_location_y': 126.8840}, + "광주시": {'work_location_x': 37.4095, 'work_location_y': 127.2550}, + "구리시": {'work_location_x': 37.6038, 'work_location_y': 127.1436}, + "군포시": {'work_location_x': 37.3532, 'work_location_y': 126.9488}, + "김포시": {"work_location_x": 37.5613, "work_location_y": 126.8019}, + "남양주시": {"work_location_x": 37.6423, "work_location_y": 127.1264}, + "동두천시": {"work_location_x": 37.8922, "work_location_y": 127.0603}, + "부천시 소사구": {"subway_location_x": 37.4827, "subway_location_y": 126.7950}, +"부천시 원미구": {"subway_location_x": 37.5047, "subway_location_y": 126.7630}, +"부천시 오정구": {"subway_location_x": 37.5142, "subway_location_y": 126.7928}, + "성남시 수정구": {"work_location_x": 37.4519, "work_location_y": 127.1584}, + "성남시 분당구": {"work_location_x": 37.3595, "work_location_y": 127.1086}, + "성남시 중원구": {"work_location_x": 37.4321, "work_location_y": 127.1150}, + "수원시 장안구": {"work_location_x": 37.2986, "work_location_y": 127.0107}, + "수원시 권선구": {"work_location_x": 37.2699, "work_location_y": 127.0286}, + "수원시 팔달구": {"work_location_x": 37.2657, "work_location_y": 126.9996}, + "수원시 영통구": {"work_location_x": 37.2886, "work_location_y": 127.0511}, + "시흥시": {"work_location_x": 37.3800, "work_location_y": 126.8035}, + "안산시 단원구": {"work_location_x": 37.3180, "work_location_y": 126.8386}, + "안산시 상록구": {"work_location_x": 37.3083, "work_location_y": 126.8530}, + + "안성시": {"work_location_x": 37.0100, "work_location_y": 127.2701}, + "안양시 만안구": {"work_location_x": 37.4352, "work_location_y": 126.9021}, + "안양시 동안구": {"work_location_x": 37.0100, "work_location_y": 127.2701}, + "양주시": {"work_location_x": 37.7840, "work_location_y": 127.0457}, + "양평군": {"work_location_x": 37.4910, "work_location_y": 127.4874}, + "여주시": {"work_location_x": 37.2822, "work_location_y": 127.6280}, + "연천군": {"work_location_x": 38.0960, "work_location_y": 127.0741}, + "오산시": {"work_location_x": 37.1451, "work_location_y": 127.0660}, + "용인시 처인구": {"work_location_x": 37.2821, "work_location_y": 127.1216}, + "용인시 기흥구": {"work_location_x": 37.2749, "work_location_y": 127.1150}, + "용인시 수지구": {"work_location_x": 37.3377, "work_location_y": 127.0988}, + "의왕시": {"work_location_x": 37.3204, "work_location_y": 126.9483}, + "의정부시": {"work_location_x": 37.7377, "work_location_y": 127.0474}, + "이천시": {"work_location_x": 37.2725, "work_location_y": 127.4348}, + "파주시": {"work_location_x": 37.7126, "work_location_y": 126.7610}, + "평택시": {"work_location_x": 36.9908, "work_location_y": 127.0856}, + "포천시": {"work_location_x": 37.8945, "work_location_y": 127.2006}, + "하남시": {"work_location_x": 37.5511, "work_location_y": 127.2060}, + "화성시": {"work_location_x": 37.1988, "work_location_y": 127.1034} + + } + + # 주어진 주소의 좌표 정보를 추출 + coordinates = coordinates_worksites.get(address) + if coordinates is not None: + # 좌표 정보가 있으면 x, y 좌표만을 튜플 형태로 반환 + return (coordinates["work_location_x"], coordinates["work_location_y"]) + else: + # 주소에 해당하는 좌표 정보가 없으면 None 반환 + return None + + # 주어진 주소에 따라 좌표 반환 + return coordinates_worksites.get(address) # 주소가 없으면 None 반환 + +def get_coordinates_employee(address): + # 주소에 따른 좌표 정보를 저장하는 딕셔너리 + coordinates_employee = { + "서울": {"subway_location_x": 37.5647, "subway_location_y": 126.9770}, + "강남구": {"subway_location_x": 37.4979, "subway_location_y": 127.0276}, + "강동구": {"subway_location_x": 37.5385, "subway_location_y": 127.1238}, + "강북구": {"subway_location_x": 37.6380, "subway_location_y": 127.0251}, + "강서구": {"subway_location_x": 37.5316, "subway_location_y": 126.8467}, + "관악구": {"subway_location_x": 37.4813, "subway_location_y": 126.9527}, + "광진구": {"subway_location_x": 37.5351, "subway_location_y": 127.0857}, + "구로구": {"subway_location_x": 37.4853, "subway_location_y": 126.9015}, + "금천구": {"subway_location_x": 37.4665, "subway_location_y": 126.8893}, + "노원구": {"subway_location_x": 37.6445, "subway_location_y": 127.0643}, + "도봉구": {"subway_location_x": 37.6531, "subway_location_y": 127.0476}, + "동대문구": {"subway_location_x": 37.5716, "subway_location_y": 127.0095}, + "동작구": {"subway_location_x": 37.5082, "subway_location_y": 126.9637}, + "마포구": {"subway_location_x": 37.5572, "subway_location_y": 126.9236}, + "서대문구": {"subway_location_x": 37.5658, "subway_location_y": 126.9666}, + "서초구": {"subway_location_x": 37.4919, "subway_location_y": 127.0072}, + "성동구": {"subway_location_x": 37.5612, "subway_location_y": 127.0379}, + "성북구": {"subway_location_x": 37.5926, "subway_location_y": 127.0163}, + "송파구": {"subway_location_x": 37.5133, "subway_location_y": 127.1001}, + "양천구": {"subway_location_x": 37.5263, "subway_location_y": 126.8643}, + "영등포구": {"subway_location_x": 37.5171, "subway_location_y": 126.9173}, + "용산구": {"subway_location_x": 37.5298, "subway_location_y": 126.9644}, + "은평구": {"subway_location_x": 37.6190, "subway_location_y": 126.9215}, + "종로구": {"subway_location_x": 37.5704, "subway_location_y": 126.9910}, + "중구": {"subway_location_x": 37.5647, "subway_location_y": 126.9770}, + "중랑구": {"subway_location_x": 37.5960, "subway_location_y": 127.085}, + "인천": {"subway_location_x": 37.5715, "subway_location_y": 126.7354}, + "인천 강화군": {"subway_location_x": 37.5692, "subway_location_y": 126.6732}, + "인천 계양구": {"subway_location_x": 37.5715, "subway_location_y": 126.7354}, + "인천남동구": {"subway_location_x": 37.4488, "subway_location_y": 126.7013}, + "인천 동구": {"subway_location_x": 37.4751, "subway_location_y": 126.6322}, + "인천 미추홀구": {"subway_location_x": 37.4420, "subway_location_y": 126.6995}, + "인천 부평구": {"subway_location_x": 37.4891, "subway_location_y": 126.7245}, + "인천 서구": {"subway_location_x": 37.5692, "subway_location_y": 126.6732}, + "인천 연수구": {"subway_location_x": 37.3866, "subway_location_y": 126.6392}, + "인천 옹진군": {"subway_location_x": 37.5111, "subway_location_y": 126.5230}, + "인천 중구": {"subway_location_x": 37.4764, "subway_location_y": 126.6169}, + "가평군": {"subway_location_x": 37.8147, "subway_location_y": 127.5102}, + "고양시 일산서구": {"subway_location_x": 37.6580, "subway_location_y": 126.7942}, + "고양시 일산동구": {"subway_location_x": 37.6586, "subway_location_y": 126.7698}, + "고양시 덕양구": {"subway_location_x": 37.6347, "subway_location_y": 126.8328}, + "과천시": {"subway_location_x": 37.4339, "subway_location_y": 126.9966}, + "광명시": {"subway_location_x": 37.4163, "subway_location_y": 126.8840}, + "광주시": {"subway_location_x": 37.4095, "subway_location_y": 127.2550}, + "구리시": {"subway_location_x": 37.6038, "subway_location_y": 127.1436}, + "군포시": {"subway_location_x": 37.3532, "subway_location_y": 126.9488}, + "김포시": {"subway_location_x": 37.5613, "subway_location_y": 126.8019}, + "남양주시": {"subway_location_x": 37.6423, "subway_location_y": 127.1264}, + "동두천시": {"subway_location_x": 37.8922, "subway_location_y": 127.0603}, + "부천시 소사구": {"subway_location_x": 37.4827, "subway_location_y": 126.7950}, +"부천시 원미구": {"subway_location_x": 37.5047, "subway_location_y": 126.7630}, +"부천시 오정구": {"subway_location_x": 37.5142, "subway_location_y": 126.7928}, + + "성남시 수정구": {"subway_location_x": 37.4519, "subway_location_y": 127.1584}, + "성남시 분당구": {"subway_location_x": 37.3595, "subway_location_y": 127.1086}, + "성남시 중원구": {"subway_location_x": 37.4321, "subway_location_y": 127.1150}, + "수원시 장안구": {"subway_location_x": 37.2986, "subway_location_y": 127.0107}, + "수원시 권선구": {"subway_location_x": 37.2699, "subway_location_y": 127.0286}, + "수원시 팔달구": {"subway_location_x": 37.2657, "subway_location_y": 126.9996}, + "수원시 영통구": {"subway_location_x": 37.2886, "subway_location_y": 127.0511}, + "시흥시": {"subway_location_x": 37.3800, "subway_location_y": 126.8035}, + "안산시 단원구": {"subway_location_x": 37.3180, "subway_location_y": 126.8386}, + "안산시 상록구": {"subway_location_x": 37.3083, "subway_location_y": 126.8530}, + + "안성시": {"subway_location_x": 37.0100, "subway_location_y": 127.2701}, + "안양시 만안구": {"subway_location_x": 37.4352, "subway_location_y": 126.9021}, + "안양시 동안구": {"subway_location_x": 37.0100, "subway_location_y": 127.2701}, + "양주시": {"subway_location_x": 37.7840, "subway_location_y": 127.0457}, + "양평군": {"subway_location_x": 37.4910, "subway_location_y": 127.4874}, + "여주시": {"subway_location_x": 37.2822, "subway_location_y": 127.6280}, + "연천군": {"subway_location_x": 38.0960, "subway_location_y": 127.0741}, + "오산시": {"subway_location_x": 37.1451, "subway_location_y": 127.0660}, + "용인시 처인구": {"subway_location_x": 37.2821, "subway_location_y": 127.1216}, + "용인시 기흥구": {"subway_location_x": 37.2749, "subway_location_y": 127.1150}, + "용인시 수지구": {"subway_location_x": 37.3377, "subway_location_y": 127.0988}, + "의왕시": {"subway_location_x": 37.3204, "subway_location_y": 126.9483}, + "의정부시": {"subway_location_x": 37.7377, "subway_location_y": 127.0474}, + "이천시": {"subway_location_x": 37.2725, "subway_location_y": 127.4348}, + "파주시": {"subway_location_x": 37.7126, "subway_location_y": 126.7610}, + "평택시": {"subway_location_x": 36.9908, "subway_location_y": 127.0856}, + "포천시": {"subway_location_x": 37.8945, "subway_location_y": 127.2006}, + "하남시": {"subway_location_x": 37.5511, "subway_location_y": 127.2060}, + "화성시": {"subway_location_x": 37.1988, "subway_location_y": 127.1034} + + } + # 주어진 주소의 좌표 정보를 추출 + coordinates = coordinates_employee.get(address) + if coordinates is not None: + # 좌표 정보가 있으면 x, y 좌표만을 튜플 형태로 반환 + return (coordinates["subway_location_x"], coordinates["subway_location_y"]) + else: + #없으면 x,y좌표를 각각 50의 튜플로 반환 + return (50, 50) + + + +# calculate_score_for_person 함수 내에서의 수정 +def calculate_score_for_person(person_info, model_roberta, model_electra, tokenizer_roberta, tokenizer_electra, device): + # 각 변수의 가중치 + weight_distance = 0.2 + weight_attendance = 0.3 + weight_work_frequency = 0.2 + weight_label_value = 0.3 + # 성별에 따라 가중치 조정 + gender_weight = 1 if person_info['sex'] == '남자' or person_info['sex'] == '여자' else 0 + + work_location = get_coordinates_worksites(person_info['worksites_local']) # 주소가 없으면 None 반환) + subway_station = get_coordinates_employee(person_info['employee_local']) + + + # 현장과 지하철역의 거리 계산 (km 단위로 환산) + distance_to_station = calculate_distance(work_location, subway_station) + + + # 출석률 계산 + actual_work_days = person_info['actual_work_days'] + applied_work_days = person_info['applied_work_days'] + attendance_rate = actual_work_days / applied_work_days * 100 + + # 출석률에 따라 점수 할당 + if attendance_rate >= 100: + attendance_score = 50 + elif attendance_rate >= 90: + attendance_score = 20 + else: + attendance_score = 0 + + # 근무횟수에 따라 점수 할당 + if person_info['work_frequency'] >= 15: + work_frequency_score = 50 + elif person_info['work_frequency'] >= 10: + work_frequency_score = 30 + elif person_info['work_frequency'] >= 5: + work_frequency_score = 20 + else: + work_frequency_score = 0 + + + # 거리에 따라 점수 할당 + if distance_to_station < 10: + distance_score = 50 + elif distance_to_station < 30: + distance_score = 40 + elif distance_to_station < 50: + distance_score = 30 + elif distance_to_station < 100: + distance_score = 20 + elif distance_to_station < 200: + distance_score = 10 + else: + distance_score = 0 + + # 텍스트 예측을 위한 코드 추가 + if person_info['review'] == "": + final_labels = [10] + else: + texts_to_predict = [person_info['review']] # 텍스트를 리스트로 변환 + final_labels = predict_with_ensemble_modified(texts_to_predict, model_roberta, model_electra, tokenizer_roberta, + tokenizer_electra, device) + + for label in final_labels: + sentiment_score = label_to_value(label) + print(final_labels) + + + + + + # 각 변수에 가중치를 곱하여 합산된 점수를 계산 + total_score = (distance_score * weight_distance) + \ + (attendance_score * weight_attendance) + \ + (work_frequency_score * weight_work_frequency) + \ + (sentiment_score * weight_label_value) + + return total_score*gender_weight + +# 예시 데이터베이스에서 각 사람들에 대한 정보 수정 +people_info = [ + {'employee_local': "성북구", 'worksites_local': "성북구", 'sex': '남자', 'actual_work_days': 20, 'applied_work_days': 20, 'work_frequency': 20, 'review': "일은 보통으로 하고 사람은 좋음"}, + {'employee_local': '고양시 일산서구', 'worksites_local': '성북구', 'sex': '여자', 'actual_work_days': 10, 'applied_work_days': 10, 'work_frequency': 25, 'review': "일도 매우 잘하고 사람도 좋고 성실함"}, #업무 능숙도에 대한 corpus에 민감함 + {'employee_local': '고양시 일산서구', 'worksites_local': '성북구', 'sex': '여자', 'actual_work_days': 10, 'applied_work_days': 10, 'work_frequency': 25, 'review': "일은 잘못하고 불만은 없는 것 같음."}, + {'employee_local': '동두천시', 'worksites_local': '동두천시', 'sex': '남자', 'actual_work_days': 10, 'applied_work_days': 10, 'work_frequency': 25, 'review': ""}, + + { + 'employee_local': "성북구", + 'worksites_local': "성북구", + 'sex': '남자', + 'actual_work_days': 20, + 'applied_work_days': 20, + 'work_frequency': 20, + 'review': "김철수 과장은 업무 수행에 있어 매우 성실하고 책임감이 강한 직원입니다. 매일 정해진 시간에 출근하며, 주어진 과제를 항상 제 시간에 완수합니다. 특히, 그의 문제 해결 능력과 빠른 의사 결정 과정은 팀 내에서 큰 신뢰를 받고 있습니다. 김 과장은 고객 응대에서도 매우 친절하고 프로페셔널한 태도로 높은 만족도를 이끌어냈습니다.\n\n김 과장은 올해 여러 중요한 프로젝트를 성공적으로 이끌었습니다. 예를 들어, 지난 3월의 대규모 마케팅 캠페인에서는 기획부터 실행까지 주도적으로 참여하여 매출을 20% 증가시키는 성과를 거두었습니다. 그는 팀원들과의 협업에서도 뛰어난 리더십을 발휘하여 팀 전체의 사기를 높이고, 각 구성원의 강점을 최대한 이끌어내는 능력을 보여주었습니다.\n\n다만, 가끔 세부 사항에서의 꼼꼼함이 다소 부족할 때가 있어 추가적인 주의가 필요할 것으로 보입니다. 예를 들어, 보고서 작성 시 몇 차례 사소한 오탈자가 발견되었으며, 이는 김 과장이 업무의 세부 사항에 대한 관심을 더욱 기울일 필요가 있음을 시사합니다. 그러나 이는 김 과장의 전반적인 성과와 비교할 때 큰 문제가 되지는 않습니다.\n\n전반적으로 김철수 과장은 매우 우수한 업무 수행 능력과 태도를 가지고 있으며, 앞으로도 지속적인 성장이 기대되는 인재입니다. 그의 뛰어난 성과와 긍정적인 태도는 팀과 회사에 큰 자산이 될 것입니다. 따라서 김 과장은 앞으로도 중요한 프로젝트와 팀 내 주요 역할을 맡아 성공적으로 수행할 것으로 예상됩니다." + } + + + + +] + +#{'employee_local': '', 'worksites_local': '', 'sex': '', 'actual_work_days': , 'applied_work_days': , 'work_frequency': , 'review': ""} + +# 각 사람들의 점수 계산 +for person_info in people_info: + score = calculate_score_for_person(person_info, model_roberta, model_electra, tokenizer_roberta, tokenizer_electra, device) + print("총점:", score) \ No newline at end of file diff --git a/RecommendationSystem/package.json b/RecommendationSystem/package.json new file mode 100644 index 0000000000..d8aff416ae --- /dev/null +++ b/RecommendationSystem/package.json @@ -0,0 +1,15 @@ +{ + "name": "capstone-2024-35", + "version": "1.0.0", + "description": "Capstone Project 2024-35", + "main": "index.js", + "scripts": { + "start": "node src/mongodb_store.js" + }, + "dependencies": { + "dotenv": "^16.0.0", + "mongodb": "^4.10.0" + }, + "author": "", + "license": "ISC" + } \ No newline at end of file diff --git a/RecommendationSystem/requierments.txt b/RecommendationSystem/requierments.txt new file mode 100644 index 0000000000..350fec80bf --- /dev/null +++ b/RecommendationSystem/requierments.txt @@ -0,0 +1,12 @@ +geopy +torch +transformers +numpy +pandas + +# 토크나이저 로딩 +#tokenizer_roberta = AutoTokenizer.from_pretrained("klue/roberta-large") +#tokenizer_electra = AutoTokenizer.from_pretrained("monologg/koelectra-base-v3-discriminator") +# 저장된 모델 로드 +#model_roberta = AutoModelForSequenceClassification.from_pretrained("Chamsol/klue-roberta-sentiment-classification") +#model_electra = AutoModelForSequenceClassification.from_pretrained("Chamsol/koelctra-sentiment-classification") diff --git a/RecommendationSystem/src/__init__.py b/RecommendationSystem/src/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/RecommendationSystem/src/career.py b/RecommendationSystem/src/career.py new file mode 100644 index 0000000000..6751ef2bac --- /dev/null +++ b/RecommendationSystem/src/career.py @@ -0,0 +1,69 @@ +#career + +from datetime import datetime +from bson import ObjectId +from config.db import get_collection + +class Career: + def __init__(self, _id,employee, worksite, done, pay, review, score): + self._id = ObjectId(_id) + self.employee = ObjectId(employee) + self.worksite = ObjectId(worksite) + self.done = done + self.pay = pay + self.review = review + self.score = score + + def to_dict(self): + return { + 'employee': self.employee, + 'worksite': self.worksite, + 'done': self.done, + 'pay': self.pay, + 'review': self.review, + 'score': self.score + } + +# career에서는 review 데이터 가져오고 score값 저장할 것임. + +class Career_repository: + """ + Career 데이터를 관리하는 저장소 클래스. + """ + def __init__(self): + self.collection = get_collection('career') # 실제 컬렉션 이름에 맞게 수정해야 합니다. + + def insert(self, career: Career): + """ + 새로운 Career를 삽입합니다. + """ + self.collection.insert_one(career.to_dict()) + + def find_all(self): + """ + 모든 Career 데이터를 반환합니다. + """ + return list(self.collection.find()) + + def find_by_employee(self, employee_id): + """ + 직원 ID로 Career 데이터를 찾습니다. + """ + return list(self.collection.find({'employee': ObjectId(employee_id)})) + + def update(self, career_id, updated_fields): + """ + 주어진 Career ID의 데이터를 업데이트합니다. + """ + self.collection.update_one({'_id': ObjectId(career_id)}, {'$set': updated_fields}) + + def delete(self, career_id): + """ + 주어진 Career ID의 데이터를 삭제합니다. + """ + self.collection.delete_one({'_id': ObjectId(career_id)}) + + + + + diff --git a/RecommendationSystem/src/config/db.py b/RecommendationSystem/src/config/db.py new file mode 100644 index 0000000000..fa13ce6d94 --- /dev/null +++ b/RecommendationSystem/src/config/db.py @@ -0,0 +1,19 @@ +# rec_sys/config/db.py +import os +from dotenv import load_dotenv +from pymongo import MongoClient +import certifi + +# 환경 변수 로드 +load_dotenv() +mongodb_uri = os.getenv('MONGODB_URI') +ca = certifi.where() +# MongoDB 연결 설정 +def connect_db(): + client = MongoClient(mongodb_uri, tlsCAFile=ca) + db = client['Authusers'] # 데이터베이스 이름을 여기에서 변경 가능 + print("Connected to MongoDB. Collections available:", db.list_collection_names()) + return db +def get_collection(collection_name): + db = connect_db() + return db[collection_name] \ No newline at end of file diff --git a/RecommendationSystem/src/distance.py b/RecommendationSystem/src/distance.py new file mode 100644 index 0000000000..9dae06743b --- /dev/null +++ b/RecommendationSystem/src/distance.py @@ -0,0 +1,213 @@ +from geopy.distance import geodesic +def label_to_value(label): + if label == 0: + return -30 + elif label == 1: + return 30 + elif label == 2: + return -50 + elif label == 3: + return 50 + else: + return 0 +def calculate_distance(point1, point2): + # 두 지점 사이의 거리를 계산하는 함수 + distance_to_station = geodesic(point1, point2).kilometers + return distance_to_station + +def get_coordinates_worksites(address): + # 주소에 따른 좌표 정보를 저장하는 딕셔너리 + coordinates_worksites = { + "서울": {'work_location_x': 37.5647, 'work_location_y': 126.9770}, + "강남구": {'work_location_x': 37.4979, 'work_location_y': 127.0276}, + "강동구": {'work_location_x': 37.5385, 'work_location_y': 127.1238}, + "강북구": {'work_location_x': 37.6380, 'work_location_y': 127.0251}, + "강서구": {'work_location_x': 37.5316, 'work_location_y': 126.8467}, + "관악구": {'work_location_x': 37.4813, 'work_location_y': 126.9527}, + "광진구": {'work_location_x': 37.5351, 'work_location_y': 127.0857}, + "구로구": {'work_location_x': 37.4853, 'work_location_y': 126.9015}, + "금천구": {'work_location_x': 37.4665, 'work_location_y': 126.8893}, + "노원구": {'work_location_x': 37.6445, 'work_location_y': 127.0643}, + "도봉구": {'work_location_x': 37.6531, 'work_location_y': 127.0476}, + "동대문구": {'work_location_x': 37.5716, 'work_location_y': 127.0095}, + "동작구": {'work_location_x': 37.5082, 'work_location_y': 126.9637}, + "마포구": {'work_location_x': 37.5572, 'work_location_y': 126.9236}, + "서대문구": {'work_location_x': 37.5658, 'work_location_y': 126.9666}, + "서초구": {'work_location_x': 37.4919, 'work_location_y': 127.0072}, + "성동구": {'work_location_x': 37.5612, 'work_location_y': 127.0379}, + "성북구": {'work_location_x': 37.5926, 'work_location_y': 127.0163}, + "송파구": {'work_location_x': 37.5133, 'work_location_y': 127.1001}, + "양천구": {'work_location_x': 37.5263, 'work_location_y': 126.8643}, + "영등포구": {'work_location_x': 37.5171, 'work_location_y': 126.9173}, + "용산구": {'work_location_x': 37.5298, 'work_location_y': 126.9644}, + "은평구": {'work_location_x': 37.6190, 'work_location_y': 126.9215}, + "종로구": {'work_location_x': 37.5704, 'work_location_y': 126.9910}, + "중구": {'work_location_x': 37.5647, 'work_location_y': 126.9770}, + "중랑구": {'work_location_x': 37.5960, 'work_location_y': 127.085}, + "인천": {'work_location_x': 37.5715, 'work_location_y': 126.7354}, + "인천 강화군": {'work_location_x': 37.5692, 'work_location_y': 126.6732}, + "인천 계양구": {'work_location_x': 37.5715, 'work_location_y': 126.7354}, + "인천 남동구": {'work_location_x': 37.4488, 'work_location_y': 126.7013}, + "인천 동구": {'work_location_x': 37.4751, 'work_location_y': 126.6322}, + "인천 미추홀구": {'work_location_x': 37.4420, 'work_location_y': 126.6995}, + "인천 부평구": {'work_location_x': 37.4891, 'work_location_y': 126.7245}, + "인천 서구": {'work_location_x': 37.5692, 'work_location_y': 126.6732}, + "인천 연수구": {'work_location_x': 37.3866, 'work_location_y': 126.6392}, + "인천 옹진군": {'work_location_x': 37.5111, 'work_location_y': 126.5230}, + "인천 중구": {'work_location_x': 37.4764, 'work_location_y': 126.6169}, + "가평군": {'가평역': {'work_location_x': 37.8147, 'work_location_y': 127.5102}}, + "고양시 일산서구": {'work_location_x': 37.6580, 'work_location_y': 126.7942}, + "고양시 일산동구": {'work_location_x': 37.6586, 'work_location_y': 126.7698}, + "고양시 덕양구": {'work_location_x': 37.6347, 'work_location_y': 126.8328}, + "과천시": {'work_location_x': 37.4339, 'work_location_y': 126.9966}, + "광명시": {'work_location_x': 37.4163, 'work_location_y': 126.8840}, + "광주시": {'work_location_x': 37.4095, 'work_location_y': 127.2550}, + "구리시": {'work_location_x': 37.6038, 'work_location_y': 127.1436}, + "군포시": {'work_location_x': 37.3532, 'work_location_y': 126.9488}, + "김포시": {"work_location_x": 37.5613, "work_location_y": 126.8019}, + "남양주시": {"work_location_x": 37.6423, "work_location_y": 127.1264}, + "동두천시": {"work_location_x": 37.8922, "work_location_y": 127.0603}, + "부천시 소사구": {"subway_location_x": 37.4827, "subway_location_y": 126.7950}, +"부천시 원미구": {"subway_location_x": 37.5047, "subway_location_y": 126.7630}, +"부천시 오정구": {"subway_location_x": 37.5142, "subway_location_y": 126.7928}, + "성남시 수정구": {"work_location_x": 37.4519, "work_location_y": 127.1584}, + "성남시 분당구": {"work_location_x": 37.3595, "work_location_y": 127.1086}, + "성남시 중원구": {"work_location_x": 37.4321, "work_location_y": 127.1150}, + "수원시 장안구": {"work_location_x": 37.2986, "work_location_y": 127.0107}, + "수원시 권선구": {"work_location_x": 37.2699, "work_location_y": 127.0286}, + "수원시 팔달구": {"work_location_x": 37.2657, "work_location_y": 126.9996}, + "수원시 영통구": {"work_location_x": 37.2886, "work_location_y": 127.0511}, + "시흥시": {"work_location_x": 37.3800, "work_location_y": 126.8035}, + "안산시 단원구": {"work_location_x": 37.3180, "work_location_y": 126.8386}, + "안산시 상록구": {"work_location_x": 37.3083, "work_location_y": 126.8530}, + + "안성시": {"work_location_x": 37.0100, "work_location_y": 127.2701}, + "안양시 만안구": {"work_location_x": 37.4352, "work_location_y": 126.9021}, + "안양시 동안구": {"work_location_x": 37.0100, "work_location_y": 127.2701}, + "양주시": {"work_location_x": 37.7840, "work_location_y": 127.0457}, + "양평군": {"work_location_x": 37.4910, "work_location_y": 127.4874}, + "여주시": {"work_location_x": 37.2822, "work_location_y": 127.6280}, + "연천군": {"work_location_x": 38.0960, "work_location_y": 127.0741}, + "오산시": {"work_location_x": 37.1451, "work_location_y": 127.0660}, + "용인시 처인구": {"work_location_x": 37.2821, "work_location_y": 127.1216}, + "용인시 기흥구": {"work_location_x": 37.2749, "work_location_y": 127.1150}, + "용인시 수지구": {"work_location_x": 37.3377, "work_location_y": 127.0988}, + "의왕시": {"work_location_x": 37.3204, "work_location_y": 126.9483}, + "의정부시": {"work_location_x": 37.7377, "work_location_y": 127.0474}, + "이천시": {"work_location_x": 37.2725, "work_location_y": 127.4348}, + "파주시": {"work_location_x": 37.7126, "work_location_y": 126.7610}, + "평택시": {"work_location_x": 36.9908, "work_location_y": 127.0856}, + "포천시": {"work_location_x": 37.8945, "work_location_y": 127.2006}, + "하남시": {"work_location_x": 37.5511, "work_location_y": 127.2060}, + "화성시": {"work_location_x": 37.1988, "work_location_y": 127.1034} + + } + + # 주어진 주소의 좌표 정보를 추출 + coordinates = coordinates_worksites.get(address) + if coordinates is not None: + # 좌표 정보가 있으면 x, y 좌표만을 튜플 형태로 반환 + return (coordinates["work_location_x"], coordinates["work_location_y"]) + else: + # 주소에 해당하는 좌표 정보가 없으면 None 반환 + return None + + # 주어진 주소에 따라 좌표 반환 + return coordinates_worksites.get(address) # 주소가 없으면 None 반환 + +def get_coordinates_employee(address): + # 주소에 따른 좌표 정보를 저장하는 딕셔너리 + coordinates_employee = { + "서울": {"subway_location_x": 37.5647, "subway_location_y": 126.9770}, + "강남구": {"subway_location_x": 37.4979, "subway_location_y": 127.0276}, + "강동구": {"subway_location_x": 37.5385, "subway_location_y": 127.1238}, + "강북구": {"subway_location_x": 37.6380, "subway_location_y": 127.0251}, + "강서구": {"subway_location_x": 37.5316, "subway_location_y": 126.8467}, + "관악구": {"subway_location_x": 37.4813, "subway_location_y": 126.9527}, + "광진구": {"subway_location_x": 37.5351, "subway_location_y": 127.0857}, + "구로구": {"subway_location_x": 37.4853, "subway_location_y": 126.9015}, + "금천구": {"subway_location_x": 37.4665, "subway_location_y": 126.8893}, + "노원구": {"subway_location_x": 37.6445, "subway_location_y": 127.0643}, + "도봉구": {"subway_location_x": 37.6531, "subway_location_y": 127.0476}, + "동대문구": {"subway_location_x": 37.5716, "subway_location_y": 127.0095}, + "동작구": {"subway_location_x": 37.5082, "subway_location_y": 126.9637}, + "마포구": {"subway_location_x": 37.5572, "subway_location_y": 126.9236}, + "서대문구": {"subway_location_x": 37.5658, "subway_location_y": 126.9666}, + "서초구": {"subway_location_x": 37.4919, "subway_location_y": 127.0072}, + "성동구": {"subway_location_x": 37.5612, "subway_location_y": 127.0379}, + "성북구": {"subway_location_x": 37.5926, "subway_location_y": 127.0163}, + "송파구": {"subway_location_x": 37.5133, "subway_location_y": 127.1001}, + "양천구": {"subway_location_x": 37.5263, "subway_location_y": 126.8643}, + "영등포구": {"subway_location_x": 37.5171, "subway_location_y": 126.9173}, + "용산구": {"subway_location_x": 37.5298, "subway_location_y": 126.9644}, + "은평구": {"subway_location_x": 37.6190, "subway_location_y": 126.9215}, + "종로구": {"subway_location_x": 37.5704, "subway_location_y": 126.9910}, + "중구": {"subway_location_x": 37.5647, "subway_location_y": 126.9770}, + "중랑구": {"subway_location_x": 37.5960, "subway_location_y": 127.085}, + "인천": {"subway_location_x": 37.5715, "subway_location_y": 126.7354}, + "인천 강화군": {"subway_location_x": 37.5692, "subway_location_y": 126.6732}, + "인천 계양구": {"subway_location_x": 37.5715, "subway_location_y": 126.7354}, + "인천남동구": {"subway_location_x": 37.4488, "subway_location_y": 126.7013}, + "인천 동구": {"subway_location_x": 37.4751, "subway_location_y": 126.6322}, + "인천 미추홀구": {"subway_location_x": 37.4420, "subway_location_y": 126.6995}, + "인천 부평구": {"subway_location_x": 37.4891, "subway_location_y": 126.7245}, + "인천 서구": {"subway_location_x": 37.5692, "subway_location_y": 126.6732}, + "인천 연수구": {"subway_location_x": 37.3866, "subway_location_y": 126.6392}, + "인천 옹진군": {"subway_location_x": 37.5111, "subway_location_y": 126.5230}, + "인천 중구": {"subway_location_x": 37.4764, "subway_location_y": 126.6169}, + "가평군": {"subway_location_x": 37.8147, "subway_location_y": 127.5102}, + "고양시 일산서구": {"subway_location_x": 37.6580, "subway_location_y": 126.7942}, + "고양시 일산동구": {"subway_location_x": 37.6586, "subway_location_y": 126.7698}, + "고양시 덕양구": {"subway_location_x": 37.6347, "subway_location_y": 126.8328}, + "과천시": {"subway_location_x": 37.4339, "subway_location_y": 126.9966}, + "광명시": {"subway_location_x": 37.4163, "subway_location_y": 126.8840}, + "광주시": {"subway_location_x": 37.4095, "subway_location_y": 127.2550}, + "구리시": {"subway_location_x": 37.6038, "subway_location_y": 127.1436}, + "군포시": {"subway_location_x": 37.3532, "subway_location_y": 126.9488}, + "김포시": {"subway_location_x": 37.5613, "subway_location_y": 126.8019}, + "남양주시": {"subway_location_x": 37.6423, "subway_location_y": 127.1264}, + "동두천시": {"subway_location_x": 37.8922, "subway_location_y": 127.0603}, + "부천시 소사구": {"subway_location_x": 37.4827, "subway_location_y": 126.7950}, +"부천시 원미구": {"subway_location_x": 37.5047, "subway_location_y": 126.7630}, +"부천시 오정구": {"subway_location_x": 37.5142, "subway_location_y": 126.7928}, + + "성남시 수정구": {"subway_location_x": 37.4519, "subway_location_y": 127.1584}, + "성남시 분당구": {"subway_location_x": 37.3595, "subway_location_y": 127.1086}, + "성남시 중원구": {"subway_location_x": 37.4321, "subway_location_y": 127.1150}, + "수원시 장안구": {"subway_location_x": 37.2986, "subway_location_y": 127.0107}, + "수원시 권선구": {"subway_location_x": 37.2699, "subway_location_y": 127.0286}, + "수원시 팔달구": {"subway_location_x": 37.2657, "subway_location_y": 126.9996}, + "수원시 영통구": {"subway_location_x": 37.2886, "subway_location_y": 127.0511}, + "시흥시": {"subway_location_x": 37.3800, "subway_location_y": 126.8035}, + "안산시 단원구": {"subway_location_x": 37.3180, "subway_location_y": 126.8386}, + "안산시 상록구": {"subway_location_x": 37.3083, "subway_location_y": 126.8530}, + + "안성시": {"subway_location_x": 37.0100, "subway_location_y": 127.2701}, + "안양시 만안구": {"subway_location_x": 37.4352, "subway_location_y": 126.9021}, + "안양시 동안구": {"subway_location_x": 37.0100, "subway_location_y": 127.2701}, + "양주시": {"subway_location_x": 37.7840, "subway_location_y": 127.0457}, + "양평군": {"subway_location_x": 37.4910, "subway_location_y": 127.4874}, + "여주시": {"subway_location_x": 37.2822, "subway_location_y": 127.6280}, + "연천군": {"subway_location_x": 38.0960, "subway_location_y": 127.0741}, + "오산시": {"subway_location_x": 37.1451, "subway_location_y": 127.0660}, + "용인시 처인구": {"subway_location_x": 37.2821, "subway_location_y": 127.1216}, + "용인시 기흥구": {"subway_location_x": 37.2749, "subway_location_y": 127.1150}, + "용인시 수지구": {"subway_location_x": 37.3377, "subway_location_y": 127.0988}, + "의왕시": {"subway_location_x": 37.3204, "subway_location_y": 126.9483}, + "의정부시": {"subway_location_x": 37.7377, "subway_location_y": 127.0474}, + "이천시": {"subway_location_x": 37.2725, "subway_location_y": 127.4348}, + "파주시": {"subway_location_x": 37.7126, "subway_location_y": 126.7610}, + "평택시": {"subway_location_x": 36.9908, "subway_location_y": 127.0856}, + "포천시": {"subway_location_x": 37.8945, "subway_location_y": 127.2006}, + "하남시": {"subway_location_x": 37.5511, "subway_location_y": 127.2060}, + "화성시": {"subway_location_x": 37.1988, "subway_location_y": 127.1034} + + } + # 주어진 주소의 좌표 정보를 추출 + coordinates = coordinates_employee.get(address) + if coordinates is not None: + # 좌표 정보가 있으면 x, y 좌표만을 튜플 형태로 반환 + return (coordinates["subway_location_x"], coordinates["subway_location_y"]) + else: + #없으면 x,y좌표를 각각 50의 튜플로 반환 + return (50, 50) \ No newline at end of file diff --git a/RecommendationSystem/src/employee.py b/RecommendationSystem/src/employee.py new file mode 100644 index 0000000000..44b1dbb900 --- /dev/null +++ b/RecommendationSystem/src/employee.py @@ -0,0 +1,34 @@ +#employee + +from datetime import datetime +from bson import ObjectId +from config.db import get_collection + +class Employee: + def __init__(self, _id,user, name, sex, local, rrn,career,age, created_at=None, updated_at=None): + self._id=ObjectId(_id) + self.user = ObjectId(user) + self.name = name + self.sex = sex + self.local = local + self.rrn = rrn # 주민등록번호 + self.age = age + self.career = career + self.created_at = created_at if created_at else datetime.utcnow() + self.updated_at = updated_at if updated_at else datetime.utcnow() + + def to_dict(self): + return { + 'user': self.user, + 'name': self.name, + 'sex': self.sex, + 'local': self.local, + 'RRN': self.rrn, + 'age': self.age, + 'career': self.career, + #'phonenumber': self.phonenumber, + 'createdAt': self.created_at, + 'updatedAt': self.updated_at + } + +# sex, employee id, local \ No newline at end of file diff --git a/RecommendationSystem/src/recommendation_scoring.py b/RecommendationSystem/src/recommendation_scoring.py new file mode 100644 index 0000000000..3e5f9cfd6a --- /dev/null +++ b/RecommendationSystem/src/recommendation_scoring.py @@ -0,0 +1,176 @@ +#rec_sys +from geopy.distance import geodesic +import torch +from transformers import AutoTokenizer, AutoModelForSequenceClassification +import numpy as np +import pandas as pd + +from datasets import load_dataset +from datetime import datetime +from bson import ObjectId +from config.db import connect_db, get_collection +from employee import Employee +from career import Career +from worksites import Worksites +from pymongo import MongoClient + +from distance import label_to_value, calculate_distance, get_coordinates_employee,get_coordinates_worksites +from texteval import logits_to_probs, predict_with_ensemble_modified +from flask import Flask, request, render_template, redirect, url_for + +# GPU 사용 가능 확인 및 device 설정 +device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + +# 토크나이저 로딩 +tokenizer_roberta = AutoTokenizer.from_pretrained("klue/roberta-large") +tokenizer_electra = AutoTokenizer.from_pretrained("monologg/koelectra-base-v3-discriminator") + + +# 저장된 모델 로드 +model_roberta = AutoModelForSequenceClassification.from_pretrained("Chamsol/klue-roberta-sentiment-classification") +model_electra = AutoModelForSequenceClassification.from_pretrained("Chamsol/koelctra-sentiment-classification") + +app = Flask(__name__) + +db = connect_db() + +career_collection = get_collection('careers') +employee_collection = get_collection('employees') +worksite_collection = get_collection('worksites') + +# career 컬렉션에서 모든 문서 읽기 +careers1 = career_collection.find() + +people_info = [] + +for careers in careers1: + career_id = str(careers['_id']) + employee_id = careers['employee'] + worksite_id = careers['worksite'] + + employee = employee_collection.find_one({'_id': ObjectId(employee_id)}) + if employee is None: + print(f"Employee with ID {employee_id} not found. Skipping this entry.") + continue + sex = employee['sex'] + employee_local = employee['local'] + + worksite = worksite_collection.find_one({'_id': ObjectId(worksite_id)}) + if worksite is None: + print(f"Worksite with ID {worksite_id} not found. Skipping this entry.") + continue + worksite_local = worksite['local'] + + applied_work_days = career_collection.count_documents({'employee': employee_id}) + actual_work_days = career_collection.count_documents({'employee': employee_id, 'done': True}) + + review = careers.get('review', "") + + result_dict = { + 'career_id': career_id, + 'employee_local': employee_local, + 'worksites_local': worksite_local, + 'sex': sex, + 'actual_work_days': actual_work_days, + 'applied_work_days': applied_work_days, + 'review': review + } + + people_info.append(result_dict) + +#score + + +# calculate_score_for_person 함수 내에서의 수정 +def calculate_score_for_person(person_info, model_roberta, model_electra, tokenizer_roberta, tokenizer_electra, device): + # 각 변수의 가중치 + weight_distance = 0.2 + weight_attendance = 0.3 + weight_work_frequency = 0.2 + weight_label_value = 0.3 + # 성별에 따라 가중치 조정 + gender_weight = 1 if person_info['sex'] == '남자' or person_info['sex'] == '여자' else 1 + + work_location = get_coordinates_worksites(person_info['worksites_local']) # 주소가 없으면 None 반환) + subway_station = get_coordinates_employee(person_info['employee_local']) + + + # 현장과 지하철역의 거리 계산 (km 단위로 환산) + distance_to_station = calculate_distance(work_location, subway_station) + + # 출석률 계산 + actual_work_days = person_info['actual_work_days'] + applied_work_days = person_info['applied_work_days'] + attendance_rate = actual_work_days / applied_work_days * 100 + + # 출석률에 따라 점수 할당 + if attendance_rate >= 100: + attendance_score = 50 + elif attendance_rate >= 90: + attendance_score = 20 + else: + attendance_score = 0 + + # 근무횟수에 따라 점수 할당 + if person_info['actual_work_days'] >= 15: + work_frequency_score = 50 + elif person_info['actual_work_days'] >= 10: + work_frequency_score = 30 + elif person_info['actual_work_days'] >= 5: + work_frequency_score = 20 + else: + work_frequency_score = 0 + + + # 거리에 따라 점수 할당 + if distance_to_station < 10: + distance_score = 50 + elif distance_to_station < 30: + distance_score = 40 + elif distance_to_station < 50: + distance_score = 30 + elif distance_to_station < 100: + distance_score = 20 + elif distance_to_station < 200: + distance_score = 10 + else: + distance_score = 0 + + if person_info['review'] == "": + final_labels = [10] + else: + texts_to_predict = [person_info['review']] # 텍스트를 리스트로 변환 + final_labels = predict_with_ensemble_modified(texts_to_predict, model_roberta, model_electra, tokenizer_roberta, + tokenizer_electra, device) + + for label in final_labels: + sentiment_score = label_to_value(label) + + + + + # 각 변수에 가중치를 곱하여 합산된 점수를 계산 + total_score = (distance_score * weight_distance) + \ + (attendance_score * weight_attendance) + \ + (work_frequency_score * weight_work_frequency) + \ + (sentiment_score * weight_label_value) + + + + return total_score*gender_weight + + +for person_info in people_info: + score = calculate_score_for_person(person_info, model_roberta, model_electra, tokenizer_roberta, tokenizer_electra, device) + career_id = person_info['career_id'] + + career_collection.update_one( + {'_id': ObjectId(career_id)}, + {'$set': {'score': score}} + ) + +updated_career_docs = career_collection.find() +for doc in updated_career_docs: + print(doc) +else: + print("Skipping data processing and score calculation due to DB connection issues.") \ No newline at end of file diff --git a/RecommendationSystem/src/texteval.py b/RecommendationSystem/src/texteval.py new file mode 100644 index 0000000000..2c2cf3eb46 --- /dev/null +++ b/RecommendationSystem/src/texteval.py @@ -0,0 +1,53 @@ +import torch +from transformers import AutoTokenizer, AutoModelForSequenceClassification +import numpy as np +import pandas as pd +# GPU 사용 가능 확인 및 device 설정 +device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + +# 토크나이저 로딩 +tokenizer_roberta = AutoTokenizer.from_pretrained("klue/roberta-large") +tokenizer_electra = AutoTokenizer.from_pretrained("monologg/koelectra-base-v3-discriminator") + + +# 저장된 모델 로드 +model_roberta = AutoModelForSequenceClassification.from_pretrained("Chamsol/klue-roberta-sentiment-classification") +model_electra = AutoModelForSequenceClassification.from_pretrained("Chamsol/koelctra-sentiment-classification") + +#predict +def logits_to_probs(logits): + return torch.nn.functional.softmax(logits, dim=1) + +def predict_with_ensemble_modified(texts, roberta_model, koelectra_model, tokenizer_roberta, tokenizer_koelectra, device): + encodings_roberta = tokenizer_roberta(texts, truncation=True, padding=True, max_length=128, return_tensors="pt") + encodings_koelectra = tokenizer_koelectra(texts, truncation=True, padding=True, max_length=128, return_tensors="pt") + + roberta_input_ids, roberta_attention_mask = encodings_roberta['input_ids'].to(device), encodings_roberta['attention_mask'].to(device) + koelectra_input_ids, koelectra_attention_mask = encodings_koelectra['input_ids'].to(device), encodings_koelectra['attention_mask'].to(device) + + roberta_model.to(device) + koelectra_model.to(device) + + roberta_model.eval() + koelectra_model.eval() + + with torch.no_grad(): + roberta_outputs = roberta_model(roberta_input_ids, roberta_attention_mask) + koelectra_outputs = koelectra_model(koelectra_input_ids, koelectra_attention_mask) + + roberta_probs = logits_to_probs(roberta_outputs.logits).cpu().numpy() + koelectra_probs = logits_to_probs(koelectra_outputs.logits).cpu().numpy() + + ensemble_probs = (roberta_probs + koelectra_probs) / 2 + + final_labels = [] + + for probs in ensemble_probs: + pred_label = np.argmax(probs) + if pred_label == 1 and probs[pred_label] > 0.88: # 긍정이면서 확률이 0.8 이상인 경우 + pred_label = 3 # 매우 긍정으로 변경 + elif pred_label == 0 and probs[pred_label] > 0.86: # 부정이면서 확률이 0.8 이상인 경우 + pred_label = 2 # 매우 부정으로 변경 + final_labels.append(pred_label) + + return final_labels \ No newline at end of file diff --git a/RecommendationSystem/src/worksites.py b/RecommendationSystem/src/worksites.py new file mode 100644 index 0000000000..4982d7ea21 --- /dev/null +++ b/RecommendationSystem/src/worksites.py @@ -0,0 +1,51 @@ +#worksite + +from datetime import datetime +from bson import ObjectId +from config.db import get_collection + +class Worksites: + def __init__(self, _id,user, name, address, local, salary, worktype, date, end, nopr, wanted, sent, sendmessage, recieved, denied, hired, worksitenote, createdAt, updateAt): + self._id = ObjectId(_id) + self.user = ObjectId(user) + self.name = name + self.address = address + self.local = local + self.salary = salary + self.worktype = worktype + self.date = date + self.end = end + self.nopr = nopr + self.wanted = wanted(employee) + self.sent = ObjectId(employee) + self.sendmessage = sendmessage + self.recieved = recieved + self.denied = ObjectId(employee) + self.hired = ObjectId(employee) + self.worksitenote = worksitenote + self.createdAt = createdAt + self.updateAt = updateAt + + def to_dict(self): + return { + 'user': self.user, + 'name': self.name, + 'address': self.address, + 'local': self.local, + 'salary': self.salary, + 'worktype': self.worktype, + 'date': self.date, + 'end': self.end, + 'nopr': self.nopr, + 'wanted': self.wanted, + 'sent': self.sent, + 'sendmessage': self.sendmessage, + 'recieved': self.recieved, + 'denied': self.denied, + 'hired': self.hired, + 'worksitenote': self.worksitenote, + 'createdAt': self.createdAt, + 'updateAt': self.updateAt + } + +# local 나머지는 디비 쿼리수를 계산하여 연산 \ No newline at end of file diff --git a/RecommendationSystem/train/Ensemble_model_train.py b/RecommendationSystem/train/Ensemble_model_train.py new file mode 100644 index 0000000000..0de33f4a0d --- /dev/null +++ b/RecommendationSystem/train/Ensemble_model_train.py @@ -0,0 +1,222 @@ +import numpy as np +import pandas as pd +import torch +from torch.utils.data import Dataset, DataLoader +from torch.nn import CrossEntropyLoss +import torch.nn as nn +from transformers import ( + AutoTokenizer, + AutoModelForSequenceClassification, + Trainer, + TrainingArguments, + EvalPrediction, + TrainerCallback +) +from sklearn.metrics import accuracy_score + +# GPU 사용 가능 확인 및 device 설정 +device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + + +# SentimentDataset 클래스 정의 +class SentimentDataset(Dataset): + def __init__(self, encodings, labels): + self.encodings = encodings + self.labels = labels + + def __getitem__(self, idx): + item = {key: torch.tensor(val[idx]) for key, val in self.encodings.items()} + item['labels'] = torch.tensor(self.labels[idx]) + return item + + def __len__(self): + return len(self.labels) + + +# CSV 파일 로드 +df = pd.read_csv('/content/drive/MyDrive/dataset_hr.csv') # 'your_dataset.csv'를 실제 파일 경로로 변경하세요. + +# 데이터 전처리 +texts = df['person_corpus'].tolist() +labels = df['label'].tolist() # 라벨 데이터는 정수로 변환되어 있어야 합니다. + +# 토크나이저 로딩 +tokenizer_roberta = AutoTokenizer.from_pretrained("klue/roberta-large") +tokenizer_koelectra = AutoTokenizer.from_pretrained("monologg/koelectra-base-v3-discriminator") + +# 데이터셋 토큰화 +encodings_roberta = tokenizer_roberta(texts, truncation=True, padding=True, max_length=128) +encodings_koelectra = tokenizer_koelectra(texts, truncation=True, padding=True, max_length=128) + +# 데이터셋 생성 +dataset_roberta = SentimentDataset(encodings_roberta, labels) +dataset_koelectra = SentimentDataset(encodings_koelectra, labels) + +# 로드할 RoBERTa 모델 경로 +roberta_model_path = "/content/drive/MyDrive/robust_model/roberta_model" +# 로드할 Electra 모델 경로 +electra_model_path = "/content/drive/MyDrive/robust_model/electra_model" + +# 저장된 모델 로드 +model_roberta = AutoModelForSequenceClassification.from_pretrained(roberta_model_path) +model_koelectra = AutoModelForSequenceClassification.from_pretrained(electra_model_path) + + +# CustomTrainer 클래스 정의 +class CustomTrainer(Trainer): + def __init__(self, *args, label_weights=None, **kwargs): + super().__init__(*args, **kwargs) + self.label_weights = label_weights if label_weights is not None else {} + + def compute_loss(self, model, inputs, return_outputs=False): + outputs = model(**inputs) + logits = outputs.get('logits') + labels = inputs.get('labels') + if self.label_weights: + weight = torch.tensor([self.label_weights.get(label.item(), 1.0) for label in labels]).to(labels.device) + loss_fct = CrossEntropyLoss(weight=weight) + else: + loss_fct = CrossEntropyLoss() + loss = loss_fct(logits.view(-1, self.model.config.num_labels), labels.view(-1)) + return (loss, outputs) if return_outputs else loss + + +# TrainingArguments 설정 +training_args = TrainingArguments( + output_dir='./results', + num_train_epochs=100, + per_device_train_batch_size=16, + warmup_steps=50, + weight_decay=0.01, + logging_dir='./logs', + logging_steps=10, +) + +# 라벨별 가중치 설정 +label_weights = {0: 8.0, 1: 2.5, 2: 15.0, 3: 1.0} + +# CustomTrainer 인스턴스 생성 +trainer_roberta = CustomTrainer( + model=model_roberta, + args=training_args, + train_dataset=None, # dataset_roberta는 사용자가 정의해야 함 + label_weights=label_weights, +) + +trainer_electra = CustomTrainer( + model=model_koelectra, + args=training_args, + train_dataset=None, # dataset_electra는 사용자가 정의해야 함 + label_weights=label_weights, +) + + +# logits를 확률로 변환하는 함수 +def logits_to_probs(logits): + return torch.softmax(logits, dim=-1) + + +class EnsembleModel(nn.Module): + def __init__(self, model_roberta, model_koelectra): + super(EnsembleModel, self).__init__() + self.roberta_model = model_roberta + self.koelectra_model = model_koelectra + self.star1 = nn.Parameter(torch.tensor(0.5)) + self.star2 = nn.Parameter(torch.tensor(0.5)) + + def forward(self, texts, tokenizer_roberta, tokenizer_koelectra, device): + self.star1.data = torch.clamp(self.star1.data, 0.0, 1.0) + self.star2.data = torch.clamp(self.star2.data, 0.0, 1.0) + + # Tokenize inputs + encodings_roberta = tokenizer_roberta(texts, truncation=True, padding=True, max_length=128, return_tensors='pt') + encodings_koelectra = tokenizer_koelectra(texts, truncation=True, padding=True, max_length=128, + return_tensors='pt') + + roberta_input_ids = encodings_roberta['input_ids'].to(device) + roberta_attention_mask = encodings_roberta['attention_mask'].to(device) + + koelectra_input_ids = encodings_koelectra['input_ids'].to(device) + koelectra_attention_mask = encodings_koelectra['attention_mask'].to(device) + + # Get model outputs + roberta_outputs = self.roberta_model(roberta_input_ids, attention_mask=roberta_attention_mask) + koelectra_outputs = self.koelectra_model(koelectra_input_ids, attention_mask=koelectra_attention_mask) + + # Convert logits to probabilities + roberta_probs = F.softmax(roberta_outputs.logits, dim=1) + koelectra_probs = F.softmax(koelectra_outputs.logits, dim=1) + + # Ensemble probabilities + ensemble_probs = (roberta_probs + koelectra_probs) / 2 + + final_labels = [] + + for probs in ensemble_probs: + pred_label = torch.argmax(probs).item() + if pred_label == 1 and probs[pred_label] > self.star1: + pred_label = 3 + elif pred_label == 0 and probs[pred_label] > self.star2: + pred_label = 2 + final_labels.append(pred_label) + + return torch.tensor(final_labels).to(device), (roberta_outputs.logits + koelectra_outputs.logits) / 2 + + +from torch.optim import Adam + +# 데이터셋 및 훈련 설정 +ensemble_model = EnsembleModel(model_roberta, model_koelectra).to(device) + +# 옵티마이저 초기화 +optimizer = Adam(ensemble_model.parameters(), lr=1e-5) + +# DataLoader 생성 +batch_size = 16 # 원하는 배치 크기로 설정하세요 +train_dataloader_roberta = DataLoader(dataset_roberta, batch_size=batch_size, shuffle=True) +train_dataloader_koelectra = DataLoader(dataset_koelectra, batch_size=batch_size, shuffle=True) + + +def loss_fn(outputs, labels): + return F.cross_entropy(outputs, labels) + + +# Training loop +for epoch in range(5): + ensemble_model.train() + + for batch_roberta, batch_koelectra in zip(train_dataloader_roberta, train_dataloader_koelectra): + texts = tokenizer_roberta.batch_decode(batch_roberta['input_ids'], skip_special_tokens=True) + labels = batch_roberta['labels'].to(device) + + optimizer.zero_grad() + + # Calculate model predictions + final_labels, logits = ensemble_model(texts, tokenizer_roberta, tokenizer_koelectra, device) + + # Calculate the loss + loss = loss_fn(logits, labels) + + loss.backward() + optimizer.step() + + print(f"Epoch {epoch + 1}/50, Loss: {loss.item()}") + + +# 예측 함수 +def predict_with_ensemble_modified(texts, ensemble_model, tokenizer_roberta, tokenizer_koelectra, device): + ensemble_model.eval() + with torch.no_grad(): + final_labels = ensemble_model(texts, tokenizer_roberta, tokenizer_koelectra, device) + + # star1과 star2 값을 출력 + print("star1 value:", ensemble_model.star1.item()) + print("star2 value:", ensemble_model.star2.item()) + + return final_labels + + +# 사용 예제 +texts = ["여기에 분석할 텍스트를 입력하세요."] +final_labels = predict_with_ensemble_modified(texts, ensemble_model, tokenizer_roberta, tokenizer_koelectra, device) +print("최종 레이블:", final_labels) \ No newline at end of file diff --git a/RecommendationSystem/train/downstream_train.py b/RecommendationSystem/train/downstream_train.py new file mode 100644 index 0000000000..3fa7579d4e --- /dev/null +++ b/RecommendationSystem/train/downstream_train.py @@ -0,0 +1,160 @@ +import numpy as np +import pandas as pd +import torch +from torch.utils.data import Dataset, DataLoader +from transformers import ( + AutoTokenizer, + AutoModelForSequenceClassification, + Trainer, + TrainingArguments, + EvalPrediction +) +from sklearn.metrics import accuracy_score +from transformers import TrainerCallback + + +# GPU 사용 가능 확인 및 device 설정 +device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + + + +# SentimentDataset 클래스 정의 +class SentimentDataset(Dataset): + def __init__(self, encodings, labels): + self.encodings = encodings + self.labels = labels + + def __getitem__(self, idx): + item = {key: torch.tensor(val[idx]) for key, val in self.encodings.items()} + item['labels'] = torch.tensor(self.labels[idx]) + return item + + def __len__(self): + return len(self.labels) + +# CSV 파일 로드 +df = pd.read_csv('path') # hr_data +# 데이터 전처리 +texts = df['person_corpus'].tolist() +labels = df['label'].tolist() # 라벨 데이터는 정수로 변환되어 있어야 합니다. + +# 토크나이저 로딩 +tokenizer_roberta = AutoTokenizer.from_pretrained("klue/roberta-large") +tokenizer_electra = AutoTokenizer.from_pretrained("monologg/koelectra-base-v3-discriminator") + +# 데이터셋 토큰화 +encodings_roberta = tokenizer_roberta(texts, truncation=True, padding=True, max_length=128) +encodings_electra = tokenizer_electra(texts, truncation=True, padding=True, max_length=128) + +# 데이터셋 생성 +dataset_roberta = SentimentDataset(encodings_roberta, labels) +dataset_electra = SentimentDataset(encodings_electra, labels) + + +# 로드할 RoBERTa 모델 경로 +roberta_model_path = "path" +# 로드할 Electra 모델 경로 +electra_model_path = "path" + +# 저장된 모델 로드 +model_roberta = AutoModelForSequenceClassification.from_pretrained(roberta_model_path) +model_electra = AutoModelForSequenceClassification.from_pretrained(electra_model_path) + +# CustomTrainer 클래스 정의 +class CustomTrainer(Trainer): + def __init__(self, *args, label_weights=None, **kwargs): + super().__init__(*args, **kwargs) + self.label_weights = label_weights if label_weights is not None else {} + + def compute_loss(self, model, inputs, return_outputs=False): + outputs = model(**inputs) + logits = outputs.get('logits') + labels = inputs.get('labels') + if self.label_weights: + weight = torch.tensor([self.label_weights.get(label.item(), 1.0) for label in labels]).to(labels.device) + loss_fct = CrossEntropyLoss(weight=weight) + else: + loss_fct = CrossEntropyLoss() + loss = loss_fct(logits.view(-1, self.model.config.num_labels), labels.view(-1)) + return (loss, outputs) if return_outputs else loss + +# TrainingArguments 설정 +training_args = TrainingArguments( + output_dir='./results', + num_train_epochs=100, + per_device_train_batch_size=16, + warmup_steps=500, + weight_decay=0.01, + logging_dir='./logs', + logging_steps=10, +) + +# 라벨별 가중치 설정 +label_weights = {0: 8.0, 1: 2.5, 2: 5.0, 3: 1.0} + +# CustomTrainer 인스턴스 생성 +trainer_roberta = CustomTrainer( + model=model_roberta, + args=training_args, + train_dataset=dataset_roberta, # dataset_roberta는 사용자가 정의해야 함 + label_weights=label_weights, +) + +trainer_electra = CustomTrainer( + model=model_electra, + args=training_args, + train_dataset=dataset_electra, # dataset_electra는 사용자가 정의해야 함 + label_weights=label_weights, +) + +# 로짓을 확률로 변환하는 함수 +def logits_to_probs(logits): + return torch.softmax(logits, dim=1) + +def predict_with_ensemble_modified(texts, roberta_model, koelectra_model, tokenizer_roberta, tokenizer_koelectra, device): + encodings_roberta = tokenizer_roberta(texts, truncation=True, padding=True, max_length=128) + encodings_koelectra = tokenizer_koelectra(texts, truncation=True, padding=True, max_length=128) + + roberta_dataset = SentimentDataset(encodings_roberta, [0]*len(texts)) # 라벨은 예측을 위해 사용되지 않으므로 임시 값으로 설정 + koelectra_dataset = SentimentDataset(encodings_koelectra, [0]*len(texts)) + + roberta_dataloader = DataLoader(roberta_dataset, batch_size=32, shuffle=False) + koelectra_dataloader = DataLoader(koelectra_dataset, batch_size=32, shuffle=False) + + roberta_model.to(device) + koelectra_model.to(device) + + roberta_model.eval() + koelectra_model.eval() + + final_labels = [] # 최종 라벨을 저장할 리스트를 루프 외부에서 초기화 + + with torch.no_grad(): + for roberta_batch, koelectra_batch in zip(roberta_dataloader, koelectra_dataloader): + roberta_input_ids, roberta_attention_mask = roberta_batch['input_ids'].to(device), roberta_batch['attention_mask'].to(device) + koelectra_input_ids, koelectra_attention_mask = koelectra_batch['input_ids'].to(device), koelectra_batch['attention_mask'].to(device) + + roberta_outputs = roberta_model(roberta_input_ids, roberta_attention_mask) + koelectra_outputs = koelectra_model(koelectra_input_ids, koelectra_attention_mask) + + roberta_probs = logits_to_probs(roberta_outputs.logits).cpu().numpy() + koelectra_probs = logits_to_probs(koelectra_outputs.logits).cpu().numpy() + + ensemble_probs = (roberta_probs + koelectra_probs) / 2 + + for probs in ensemble_probs: + pred_label = np.argmax(probs) + if pred_label == 1 and probs[pred_label] > 0.6: # 긍정이면서 확률이 0.5 이상인 경우 + pred_label = 3 # 매우 긍정으로 변경 + elif pred_label == 0 and probs[pred_label] > 0.7: # 부정이면서 확률이 0.5 이상인 경우 + pred_label = 2 # 매우 부정으로 변경 + final_labels.append(pred_label) # 수정된 라벨을 최종 라벨 리스트에 추가 + + return final_labels # 수정: 최종 라벨 리스트 반환 + +# 함수 호출에 device 변수 사용 +final_labels = predict_with_ensemble_modified(texts, model_roberta, model_electra, tokenizer_roberta, tokenizer_electra, device) + +# 결과 출력 +for text, label in zip(texts, final_labels): + print(f"Text: {text} - Prediction: {label}") diff --git a/RecommendationSystem/train/pre_train.py b/RecommendationSystem/train/pre_train.py new file mode 100644 index 0000000000..8478c1b5de --- /dev/null +++ b/RecommendationSystem/train/pre_train.py @@ -0,0 +1,154 @@ +#pre_train.py +#ec2-train + +from transformers import AutoModelForSequenceClassification +import torch +from transformers import AutoTokenizer, AutoModelForSequenceClassification, Trainer, TrainingArguments +from torch.utils.data import Dataset, DataLoader +import numpy as np +import pandas as pd +from transformers import EvalPrediction +from sklearn.metrics import accuracy_score +from transformers import TrainerCallback + + +# GPU 사용 가능 확인 및 device 설정 +device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + +# SentimentDataset 클래스 정의 +class SentimentDataset(Dataset): + def __init__(self, encodings, labels): + self.encodings = encodings + self.labels = labels + + def __getitem__(self, idx): + item = {key: torch.tensor(val[idx]) for key, val in self.encodings.items()} + item['labels'] = torch.tensor(self.labels[idx]) + return item + + def __len__(self): + return len(self.labels) + +# CSV 파일 로드 +import pandas as pd + + +df = pd.read_csv('/home/ec2-user/train_org.csv') # 'your_dataset.csv'를 실제 파일 경로로 변경하세요. + + +# 데이터 전처리 +texts = df['document'].tolist() # 리뷰 텍스트 +labels = df['label'].tolist() # 라벨 데이터는 정수로 변환되어 있어야 합니다.. +labels = [int(label) for label in labels] # 라벨을 정수형으로 변환 +texts = [str(text) for text in texts if text is not None] + +# 토크나이저 로딩 +tokenizer_roberta = AutoTokenizer.from_pretrained("klue/roberta-large") +tokenizer_electra = AutoTokenizer.from_pretrained("monologg/koelectra-base-v3-discriminator") + +# 데이터셋 토큰화 +encodings_roberta = tokenizer_roberta(texts, truncation=True, padding=True, max_length=128) +encodings_electra = tokenizer_electra(texts, truncation=True, padding=True, max_length=128) + +# 데이터셋 생성 +dataset_roberta = SentimentDataset(encodings_roberta, labels) +dataset_electra = SentimentDataset(encodings_electra, labels) + +# 로드할 RoBERTa 모델 경로 +roberta_model_path = "/home/ec2-user/roberta_model" +# 로드할 Electra 모델 경로 +electra_model_path = "/home/ec2-user/electra_model" + +# 저장된 모델 로드 +model_roberta = AutoModelForSequenceClassification.from_pretrained(roberta_model_path) +model_electra = AutoModelForSequenceClassification.from_pretrained(electra_model_path) + + +# 사용자 지정 콜백 클래스 정의 +class PrintProgressCallback(TrainerCallback): + def on_epoch_end(self, args, state, control, **kwargs): + print(f"Epoch {state.epoch} 종료. 진행 상태: {state.global_step}/{state.max_steps} ({(state.global_step/state.max_steps)*100:.2f}%)") + if 'eval_metrics' in kwargs: + print(f"Epoch {state.epoch} Accuracy: {kwargs['eval_metrics']['eval_accuracy']:.4f}") + +# 위에서 정의한 compute_metrics 함수 사용 +def compute_metrics(p: EvalPrediction): + preds = np.argmax(p.predictions, axis=1) + return {"accuracy": accuracy_score(p.label_ids, preds)} + + +class CustomTrainer(Trainer): + def __init__(self, label_weights, *args, **kwargs): + super().__init__(*args, **kwargs) + self.label_weights = label_weights + + def compute_loss(self, model, inputs, return_outputs=False): + labels = inputs.get("labels") + # 모델의 출력에서 로스 계산 + outputs = model(**inputs) + logits = outputs.get('logits') + # 가중치 적용하여 로스 계산 + loss_fct = torch.nn.CrossEntropyLoss(weight=self.label_weights) + loss = loss_fct(logits.view(-1, self.model.config.num_labels), labels.view(-1)) + return (loss, outputs) if return_outputs else loss + + # def on_step_end(self, args, state, control, **kwargs): + # super().on_step_end(args, state, control, **kwargs) + # # 매 1000 스텝마다 모델 저장 + # if state.global_step % 10 == 0: + # output_dir1 = f"{args.output_dir1}/checkpoint-{state.global_step}" + # self.save_model(output_dir1) + # print(f"모델을 {output_dir1}에 저장했습니다.") + # if state.global_step % 10 == 0: + # output_dir2 = f"{args.output_dir2}/checkpoint-{state.global_step}" + # self.save_model(output_dir2) + # print(f"모델을 {output_dir2}에 저장했습니다.") + + + +# TrainingArguments 설정 +training_args = TrainingArguments( + output_dir= './result', + num_train_epochs=1, + per_device_train_batch_size=32, + warmup_steps=160000000, + weight_decay=0.01, + logging_dir='./logs', + logging_steps=800, +) + + +# 라벨 가중치 설정 +# 예시: 각 라벨에 대한 가중치가 동일하다고 가정 +label_weights = torch.tensor([1.0, 1.0, 1.0, 1.0]).to(device) + +# CustomTrainer 인스턴스 생성 시 사용자 지정 콜백 추가 +trainer_roberta = CustomTrainer( + model=model_roberta, + args=training_args, + train_dataset=dataset_roberta, + label_weights=label_weights, + compute_metrics=compute_metrics, + callbacks=[PrintProgressCallback()], # 콜백 추가 +) + +trainer_electra = CustomTrainer( + model=model_electra, + args=training_args, + train_dataset=dataset_electra, + label_weights=label_weights, + compute_metrics=compute_metrics, + callbacks=[PrintProgressCallback()], # 콜백 추가 +) + +# 훈련 시작 +trainer_roberta.train() +trainer_electra.train() + +# 훈련된 RoBERTa 모델 저장 +model_save_path = "/home/ec2-user/to/save/roberta_model" +trainer_roberta.save_model(model_save_path) + +# 훈련된 Electra 모델 저장 +model_save_path = "/home/ec2-user/to/save/electra_model" +trainer_electra.save_model(model_save_path) \ No newline at end of file diff --git a/index.md b/index.md deleted file mode 100644 index b1e80ac9bb..0000000000 --- a/index.md +++ /dev/null @@ -1,37 +0,0 @@ -## Welcome to GitHub Pages - -You can use the [editor on GitHub](https://github.com/kookmin-sw/cap-template/edit/master/index.md) to maintain and preview the content for your website in Markdown files. - -Whenever you commit to this repository, GitHub Pages will run [Jekyll](https://jekyllrb.com/) to rebuild the pages in your site, from the content in your Markdown files. - -### Markdown - -Markdown is a lightweight and easy-to-use syntax for styling your writing. It includes conventions for - -```markdown -Syntax highlighted code block - -# Header 1 -## Header 2 -### Header 3 - -- Bulleted -- List - -1. Numbered -2. List - -**Bold** and _Italic_ and `Code` text - -[Link](url) and ![Image](src) -``` - -For more details see [GitHub Flavored Markdown](https://guides.github.com/features/mastering-markdown/). - -### Jekyll Themes - -Your Pages site will use the layout and styles from the Jekyll theme you have selected in your [repository settings](https://github.com/kookmin-sw/cap-template/settings). The name of this theme is saved in the Jekyll `_config.yml` configuration file. - -### Support or Contact - -Having trouble with Pages? Check out our [documentation](https://help.github.com/categories/github-pages-basics/) or [contact support](https://github.com/contact) and we’ll help you sort it out. diff --git a/public/css/img/human-1.svg b/public/css/img/human-1.svg new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/public/css/img/human-1.svg @@ -0,0 +1 @@ + diff --git a/public/css/img/human-2.svg b/public/css/img/human-2.svg new file mode 100644 index 0000000000..3e60c85597 --- /dev/null +++ b/public/css/img/human-2.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/public/css/main.css b/public/css/main.css new file mode 100644 index 0000000000..7d0529bd58 --- /dev/null +++ b/public/css/main.css @@ -0,0 +1,105 @@ +:root { + --background-color: #FFC700; + --bs-primary-rgb: #12296c; + } + + body { + font-family: 'Poppins', sans-serif; + background-color: var(--background-color); + color: var(--bs-primary-rgb); + font-weight: 300; + font-size: 1.2rem; + background-image: url(../img/noise-bg.png); + } + + h1,h2,h3,h4,h5,h6 { + font-family: 'Unbounded', cursive; + font-weight: 800; + } + + .container-fluid-custom { + max-width: 1600px; + } + + /* Button */ + .btn { + padding-left: 1.6rem; + padding-right: 1.6rem; + border-radius: 2rem; + } + + .btn-primary { + --bs-btn-color: #fff; + --bs-btn-bg: var(--bs-primary-rgb); + --bs-btn-border-color: var(--bs-primary-rgb); + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #0043a8; + --bs-btn-hover-border-color: #0043a8; + --bs-btn-focus-shadow-rgb: 49,132,253; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: var(--bs-primary-rgb); + --bs-btn-active-border-color: var(--bs-primary-rgb); + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: #fff; + --bs-btn-disabled-bg: var(--bs-primary-rgb); + --bs-btn-disabled-border-color: var(--bs-primary-rgb); + } + + .btn-outline-primary { + --bs-btn-color: var(--bs-primary-rgb); + --bs-btn-border-color: var(--bs-primary-rgb); + --bs-btn-hover-color: #fff; + --bs-btn-hover-bg: #0043a8; + --bs-btn-hover-border-color: #0043a8; + --bs-btn-focus-shadow-rgb: 13,110,253; + --bs-btn-active-color: #fff; + --bs-btn-active-bg: var(--bs-primary-rgb); + --bs-btn-active-border-color: var(--bs-primary-rgb); + --bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); + --bs-btn-disabled-color: var(--bs-primary-rgb); + --bs-btn-disabled-bg: transparent; + --bs-btn-disabled-border-color: var(--bs-primary-rgb); + --bs-gradient: none; + } + + .pagination { + --bs-pagination-color: var(--bs-primary-rgb); + --bs-pagination-active-bg: var(--bs-primary-rgb); + --bs-pagination-active-border-color: var(--bs-primary-rgb); + } + + + /* Home */ + @media (min-width: 1200px) { + .home { + background: + url('../img/human-1.svg') left bottom no-repeat, + url('../img/human-2.svg') right bottom no-repeat, + url('../img/noise-bg.png') left top repeat, + var(--background-color); + ; + } + } + + .home-title::before { + content: url('../img/stars.svg'); + position: absolute; + left: -50px; + top: -30px; + } + + .home-title::after { + content: url('../img/stars.svg'); + position: absolute; + right: -50px; + bottom: -30px; + } + + .sortable { + cursor: pointer; + transition: background-color 0.3s ease; /* 부드러운 색상 전환 효과 */ +} + +.sortable:hover { + background-color: #e2e6ea; /* 부트스트랩의 회색계열 중 진한 색 */ +} \ No newline at end of file diff --git a/public/js/bootstrap-datepicker.kr.js b/public/js/bootstrap-datepicker.kr.js new file mode 100644 index 0000000000..5879e10bc8 --- /dev/null +++ b/public/js/bootstrap-datepicker.kr.js @@ -0,0 +1,9 @@ +(function($){ + $.fn.datepicker.dates['kr'] = { + days: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일"], + daysShort: ["일", "월", "화", "수", "목", "금", "토", "일"], + daysMin: ["일", "월", "화", "수", "목", "금", "토", "일"], + months: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], + monthsShort: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"] + }; + }(jQuery)); \ No newline at end of file diff --git a/src/DBseed.js b/src/DBseed.js new file mode 100644 index 0000000000..ffe6ff7ac1 --- /dev/null +++ b/src/DBseed.js @@ -0,0 +1,84 @@ +require('dotenv').config(); +const connectDB = require('./config/db'); +const Career = require('./models/Career') +const Employee = require('./models/Employee') +const User = require('./models/User') +const Worksite = require('./models/Worksite') +const mongoose = require('mongoose') +const moment = require('moment') +const { randBirth } = require('./utils/utils') +const utils = require('./utils/utils') + +connectDB(); + +// 테스트용 시드 데이터를 초기화하는 파일 +const makeSeeds = async () => { + const user = await User.findOne({}); + + // 근로자 콜렉션 초기화 + await Employee.deleteMany({}) + + for (i=1; i<=24; i++) { + const name = utils.getRandName() + const {address, local} = utils.getRandAddressAndLocal() + const RRN = utils.getRandBirth() + const phone = utils.getRandPhone() + // const isExistName = Employee.find({name:name}) + const newEmp = new Employee({user: user, name: name, sex: '남', local: local, RRN: RRN, phonenumber: phone}) + + await newEmp.save() + } + + // 현장 콜렉션 초기화 + await Worksite.deleteMany({}) + + const emps = await Employee.find({}) + for (i=1; i<=10; i++) { + const {address, local} = utils.getRandAddressAndLocal() + const sal = 110000 + ((Math.floor(Math.random()*5))*10000) + const worktype = utils.getRandWorktype() + const date = new Date() + date.setDate(date.getDate()+(Math.floor(Math.random()*14)+2)) + const end = new Date(date) + end.setHours(end.getHours()+(Math.floor(Math.random()*2))+7) + const nopr = Math.floor(Math.random()*13)+3 + + const newWork = new Worksite({user: user, name: '현장'+i, address: address, local: local, salary: sal, worktype: worktype, date: date, end: end, nopr: nopr, worksitenote: '현장 메모'}) + + // 현장에 랜덤 인부 배정 + if (i <= 10) { + const ranNopr = Math.floor(Math.random()*nopr) + for (j=1; j<=(nopr-ranNopr); j++) { + let index = Math.floor(Math.random()*emps.length) + + // 이미 추가된 근로자는 제외 + let isAlreadyHired = false + newWork.hired.some(emp => { + if (emp._id == emps[index]._id) { + isAlreadyHired = true + return true + } + }); + + // console.log('isAlreadyHired : ', isAlreadyHired) + // if (isAlreadyHired) { + // console.log('hired : ', newWork.hired) + // console.log('to push : ', emps[index]) + // } + + if (!isAlreadyHired) { + newWork.hired.push(emps[index]) + newWork.recieved.push({phone: emps[index].phonenumber, message: '가능합니다'}) + const career = new Career({employee: emps[index], worksite: newWork, pay: sal, review: ''}) + await career.save() + } + + } + } + await newWork.save() + } +} + +makeSeeds().then(() => { + mongoose.connection.close(); +}) \ No newline at end of file diff --git a/src/app.js b/src/app.js new file mode 100644 index 0000000000..ee91f4c893 --- /dev/null +++ b/src/app.js @@ -0,0 +1,78 @@ +require('dotenv').config(); + +const express = require('express'); +const expressLayouts = require('express-ejs-layouts'); +const methodOverride = require('method-override'); +const flash = require('connect-flash'); +const connectDB = require('./config/db'); +const session = require('express-session'); +const passport = require('passport'); +const MongoStore = require('connect-mongo'); +const morgan = require('morgan'); +import('ejs-lint').then(ejsLint => { + +}).catch(err => { + console.error('모듈을 불러오는 동안 오류가 발생했습니다.', err) +}); + +const app = express(); +const port = 5000 || process.env.PORT; + +app.use(session({ + secret: 'keyboard cat', + resave: false, + saveUninitialized: true, + store: MongoStore.create({ + mongoUrl: process.env.MONGODB_URI + }), + cookie: { + maxAge: 1000 * 60 * 60 * 24 * 7, //1주 + } + //cookie: { maxAge: new Date ( Date.now() + (3600000) ) } + // Date.now() - 30 * 24 * 60 * 60 * 1000 +})); + + +//모건 +app.use(morgan('dev')) + +app.use(flash({ sessionKeyName: 'flashMessage' })); + +app.use(passport.initialize()); +app.use(passport.session()); + + +app.use(express.urlencoded({extended: true})); +app.use(express.json()); +app.use(methodOverride("_method")); +// 데이터베이스 연결 +connectDB(); + +// 정적 파일들 +app.use(express.static('public')); + +// 템플릿 엔진 +app.use(expressLayouts); +app.set('layout', './layouts/main'); +app.set('view engine', 'ejs'); + + + +// 라우팅 +app.use('/', require('./routes/auth')); +app.use('/', require('./routes/index')); +app.use('/', require('./routes/dashboard')); +app.use('/', require('./routes/employee')); +app.use('/', require('./routes/worksite')); + + +// 404 설정 +app.get('*', function(req, res) { + //res.status(404).send('404 Page Not Found.') + res.status(404).render('404'); +}) + + +app.listen(port, () => { + console.log(`App listening on port ${port}`); +}); \ No newline at end of file diff --git a/src/config/db.js b/src/config/db.js new file mode 100644 index 0000000000..a87ff89107 --- /dev/null +++ b/src/config/db.js @@ -0,0 +1,11 @@ +const mongoose = require('mongoose'); +mongoose.set('strictQuery', false); +const connectDB = async() => { + try { + const conn = await mongoose.connect(process.env.MONGODB_URI); + console.log(`Database Connected: ${conn.connection.host}`); + } catch (error) { + console.log(error); + } +} +module.exports = connectDB; \ No newline at end of file diff --git a/src/controllers/dashboardController.js b/src/controllers/dashboardController.js new file mode 100644 index 0000000000..b1d415ae6b --- /dev/null +++ b/src/controllers/dashboardController.js @@ -0,0 +1,187 @@ +const Note = require("../models/Notes"); +const mongoose = require("mongoose"); +//crud 구현 + +/** + * GET / + * Dashboard + */ +exports.dashboard = async (req, res) => { + + let perPage1 = 12; + let page1 = req.query.page || 1; + + const locals = { + title: "Dashboard", + description: "Free NodeJS Notes App.", + }; +//노트를 추가하고 제목과 바디를 정의한 컨트롤러 + try { + // Mongoose "^7.0.0 Update + const notes = await Note.aggregate([ + { $sort: { updatedAt: -1 } }, + { $match: { user: mongoose.Types.ObjectId(req.user.id) } }, + { + $project: { + title: { $substr: ["$title", 0, 30] }, + body: { $substr: ["$body", 0, 100] }, + }, + } + ]) + .skip(perPage1 * page1 - perPage1) + .limit(perPage1) + .exec(); +//수를 세는 섹터 + const count1 = await Note.count(); + + res.render('dashboard/index', { + userName: req.user.firstName, + locals, + notes, + layout: "../views/layouts/dashboard", + current: page1, + pages: Math.ceil(count1 / perPage1) + }); + + // Original Code + // Note.aggregate([ + // { $sort: { updatedAt: -1 } }, + // { $match: { user: mongoose.Types.ObjectId(req.user.id) } }, + // { + // $project: { + // title: { $substr: ["$title", 0, 30] }, + // body: { $substr: ["$body", 0, 100] }, + // }, + // }, + // ]) + // .skip(perPage * page - perPage) + // .limit(perPage) + // .exec(function (err, notes) { + // Note.count().exec(function (err, count) { + // if (err) return next(err); + // res.render("dashboard/index", { + // userName: req.user.firstName, + // locals, + // notes, + // layout: "../views/layouts/dashboard", + // current: page, + // pages: Math.ceil(count / perPage), + // }); + // }); + // }); + + } catch (error) { + console.log(error); + } +}; + +/** + * GET / + * View Specific Note + */ +exports.dashboardViewNote = async (req, res) => { + const note = await Note.findById({ _id: req.params.id }) + .where({ user: req.user.id }) + .lean(); + + if (note) { + res.render("dashboard/view-note", { + noteID: req.params.id, + note, + layout: "../views/layouts/dashboard", + }); + } else { + res.send("Something went wrong."); + } +}; + +/** + * PUT / + * Update Specific Note + */ +exports.dashboardUpdateNote = async (req, res) => { + try { + await Note.findOneAndUpdate( + { _id: req.params.id }, + { title: req.body.title, body: req.body.body, updatedAt: Date.now() } + ).where({ user: req.user.id }); + res.redirect("/dashboard"); + } catch (error) { + console.log(error); + } +}; + +/** + * DELETE / + * Delete Note + */ +exports.dashboardDeleteNote = async (req, res) => { + try { + await Note.deleteOne({ _id: req.params.id }).where({ user: req.user.id }); + res.redirect("/dashboard"); + } catch (error) { + console.log(error); + } +}; + +/** + * GET / + * Add Notes + */ +exports.dashboardAddNote = async (req, res) => { + res.render("dashboard/add", { + layout: "../views/layouts/dashboard", + }); +}; + +/** + * POST / + * Add Notes + */ +exports.dashboardAddNoteSubmit = async (req, res) => { + try { + req.body.user = req.user.id; + await Note.create(req.body); + res.redirect("/dashboard"); + } catch (error) { + console.log(error); + } +}; + +/** + * GET / + * Search + */ +exports.dashboardSearch = async (req, res) => { + try { + res.render("dashboard/search", { + searchResults: "", + layout: "../views/layouts/dashboard", + }); + } catch (error) {} +}; + +/** + * POST / + * Search For Notes + */ +exports.dashboardSearchSubmit = async (req, res) => { + try { + let searchTerm = req.body.searchTerm; + const searchNoSpecialChars = searchTerm.replace(/[^a-zA-Z0-9 ]/g, ""); + + const searchResults = await Note.find({ + $or: [ + { title: { $regex: new RegExp(searchNoSpecialChars, "i") } }, + { body: { $regex: new RegExp(searchNoSpecialChars, "i") } }, + ], + }).where({ user: req.user.id }); + + res.render("dashboard/search", { + searchResults, + layout: "../views/layouts/dashboard", + }); + } catch (error) { + console.log(error); + } +}; diff --git a/src/controllers/employeeController.js b/src/controllers/employeeController.js new file mode 100644 index 0000000000..c76aa4c8a6 --- /dev/null +++ b/src/controllers/employeeController.js @@ -0,0 +1,246 @@ +const Employee = require('../models/Employee') +const mongoose = require('mongoose'); +const Career = require('../models/Career') +const calculateAge = require('../utils/calcAge'); +const { worksite } = require('./worksiteController'); +const moment = require('moment') + + +/** + * GET / + * employee page + */ + + +exports.employee = async (req, res) => { + + const messages = await req.flash('info'); + + const locals = { + title: "About - NodeJs", + description: "Free NodeJS User Management System.", + } + + let perPage = 12; + let page = req.query.page || 1; + + +//페이지에 보여줄 작업자 수 + try { + const employees = await Employee.aggregate([ { $sort: {updatedAt: -1 } } ]) + .skip(perPage * page - perPage) + .limit(perPage) + .exec(); + const count = await Employee.countDocuments({}); + + res.render('employee/employee', { + locals, + employees, + current: page, + pages: Math.ceil(count / perPage), + messages + }); + } catch (error) { + console.log(error); + } + } + +/** + * GET / + * 새로운 노동자 양식 + */ + +exports.addEmployee = async (req, res) => { + const locals = { + title: "Add New Employee", + description: "Free Nodejs User Management System.", + } + res.render('employee/addemployee', locals); + } + +/** + * POST / + * 새로운 노동자 생성 + */ + +exports.postEmployee = async (req, res) => { + + console.log(req.body); + + const newEmployee = new Employee({ + user: req.user._id, + name: req.body.name, + sex: req.body.sex, + local: req.body.local, + RRN: req.body.RRN, + phonenumber: req.body.phonenumber, + }); + + try { + req.body.user = req.user.id; + await Employee.create(newEmployee); + await req.flash('info', '새 작업자가 추가되었습니다.') + + res.redirect('/employee'); + } catch (error) { + console.log(error); + } + + }; + +/** + * GET / + * 노동자 데이터 + * */ + + exports.viewEmployee = async (req, res) => { + + try{ + const employee = await Employee.findOne({ _id: req.params.id }) + const careers = await Career.find({employee: employee._id}).populate('worksite') + // console.log(careers) + careers.forEach(career => { + // console.log("career detail : ", career.worksite) + }) + + const locals = { + title: "View Employee Data", + description: "Free NodeJs User Management System", + }; + // const careers = await Career.find({employee: req.params.id}).populate('worksite') + // console.log(careers) + res.render('employee/viewemployee', { + locals, + employee, + calculateAge, + careers, + moment + }) + } catch(error) { + console.log(error); + } + }; + + /** + * GET / + * 노동자 데이터 수정 + * */ + + exports.editEmployee = async (req, res) => { + + try{ + const employee = await Employee.findOne({ _id: req.params.id }) + + const locals = { + title: "Edit Employee Data", + description: "Free NodeJs User Management System", + }; + + res.render('employee/editemployee', { + locals, + employee + }) + } catch(error) { + console.log(error); + } + }; + + /** + * GET / + * 노동자 데이터 업데이트 + * */ + exports.editPostemployee = async (req, res) => { + try { + await Employee.findOneAndUpdate( + { _id: req.params.id }, + { name: req.body.name, + sex: req.body.sex, + local: req.body.local, + RRN: req.body.RRN, + phonenumber: req.body.phonenumber, + // details: req.body.details, + updatedAt: Date.now(), + } + ).where({ user: req.user.id }); + res.redirect("/employee"); + } catch (error) { + console.log(error); + } + }; + // exports.editPostemployee = async (req, res) => { + + // try { + + // await Employee.findByIdAndUpdate(req.params.id, { + // name: req.body.name, + // sex: req.body.sex, + // local: req.body.local, + // RRN: req.body.RRN, + // phonenumber: req.body.phonenumber, + // // details: req.body.details, + // updatedAt: Date.now(), + // }); + // await res.redirect(`/editemployee/${req.params.id}`); + + // console.log('redirected'); + // } catch (error) { + // console.log(error); + // } + // }; + + /** + * DELETE / + * 노동자 데이터 삭제 + * */ + + exports.deleteEmployee = async (req, res) => { + try { + await Employee.deleteOne({ _id: req.params.id }); + res.redirect("/employee") + } catch (error) { + console.log(error); + } + }; + + /** + * Get / + * 노동자 데이터 검색 + * */ + + exports.searchEmployee = async (req, res) => { + const locals = { + title: "Search Employee Data", + description: "Free NodeJs User Management System", + }; + + try { + let searchTerm = req.body.searchTerm; + const searchNoSpcialChar = searchTerm.replace(/[^a-zA-Z0-9]/g, ""); + const employees = await Employee.find({ + $or: [ + { name: { $regex: new RegExp(searchNoSpcialChar, "i") }}, + + ], + }); + + res.render("employee/searchemployee", { + employees, + locals, + }); + + } catch (error) { + console.log(error); + } + }; + +exports.putReview = async (req, res) => { + console.log('/put review') + + const { eid, cid } = req.params; + + await Career.findByIdAndUpdate(cid, {review: req.body.review}) + + const updated = await Career.findById(cid) + console.log(updated.review) + res.redirect(`/view/${eid}`) +} \ No newline at end of file diff --git a/src/controllers/mainController.js b/src/controllers/mainController.js new file mode 100644 index 0000000000..2aa81ef571 --- /dev/null +++ b/src/controllers/mainController.js @@ -0,0 +1,47 @@ +/** + * GET / + * Homepage +*/ +exports.homepage = async (req, res) => { + const locals = { + title: "NodeJs Notes", + description: "Free NodeJS Notes App.", + } + res.render('index', { + locals, + layout: '../views/layouts/front-page' + }); +} + + +/** + * GET / + * About +*/ +exports.about = async (req, res) => { + const locals = { + title: "About - NodeJs Notes", + description: "Free NodeJS Notes App.", + } + res.render('about', locals); +} + +//GET / WORKSITE + +exports.worksite = async (req, res) => { + const locals = { + title: "About - NodeJs Notes", + description: "Free NodeJS Notes App.", + } + res.render('worksite', locals); +} + +//GET EMPLOYEE + +exports.employee = async (req, res) => { + const locals = { + title: "About - NodeJs Notes", + description: "Free NodeJS Notes App.", + } + res.render('employee', locals); +} \ No newline at end of file diff --git a/src/controllers/smsController.js b/src/controllers/smsController.js new file mode 100644 index 0000000000..abea8a2167 --- /dev/null +++ b/src/controllers/smsController.js @@ -0,0 +1,44 @@ +const { exec } = require('child_process'); +const path = require('path'); + +exports.getsms = async (req, res) => { + console.log('get sms test') + // console.log(req.user) + // console.log(req.body) + res.send('get sms response') +}; + +exports.postsms = async (req, res) => { + console.log('post sms test') + console.log(req.user) + console.log(req.body) + res.send('post sms response') +}; + +exports.parseMessage = async (req, res) => { + console.log('parseMessage') + // res.send('python') + // console.log(req.body) + + // res.send('dd') + const params = JSON.stringify(req.body); + // console.log(req.body.message) + // console.log('post params: ', params) + const scriptPath = path.join(__dirname, '../../DataExtract/src/script.py') + exec(`python3 ${scriptPath} '${req.body.message}'`, (error, stdout, stderr) => { + if (error) { + console.error(`exec error: ${error}`); + return res.status(500).send(error); + } + if (stderr) { + console.error(`stderr: ${stderr}`); + return res.status(500).send(stderr); + } + // res.send(stdout.trim()); + // console.log(stdout.trim()) + const result = stdout.trim() + console.log(result) + console.log('exec out') + }); + +}; diff --git a/src/controllers/wageController b/src/controllers/wageController new file mode 100644 index 0000000000..aa21cbb948 --- /dev/null +++ b/src/controllers/wageController @@ -0,0 +1,31 @@ +const Worksite = require('../models/Worksite') +const Employee = require('../models/Employee'); +const Career = require('../models/Career') +const mongoose = require('mongoose'); +const moment = require('moment'); +const calcAge = require('../public/js/calcAge'); + +require("moment-timezone") +require("moment/locale/ko"); +moment.locale('ko') + + +/** + * GET / + * wage +*/ +exports.wage = async (req, res) => { + const locals = { + title: "About - NodeJs Notes", + description: "Free NodeJS Notes App.", + } + res.render('wage', locals); +} + +exports.showWorksitePayment = async (req, res) => { + console.log('/worksitePayment') + const { id } = req.params; + const worksite = await Worksite.findById(id).populate('hired') + // console.log(worksite) + res.render('worksite/worksiteDetail', { worksite, moment, calcAge }) +} \ No newline at end of file diff --git a/src/controllers/worksiteController.js b/src/controllers/worksiteController.js new file mode 100644 index 0000000000..ff23400d1a --- /dev/null +++ b/src/controllers/worksiteController.js @@ -0,0 +1,210 @@ +const Worksite = require('../models/Worksite') +const Employee = require('../models/Employee'); +const Career = require('../models/Career') +const mongoose = require('mongoose'); +const moment = require('moment'); +const calcAge = require('../utils/calcAge'); + +require("moment-timezone") +require("moment/locale/ko"); +moment.locale('ko') + +/** + * GET / + * Homepage +*/ + +exports.worksite = async (req, res) => { + console.log('/worksite') + const messages = await req.flash('info'); + + const locals = { + title: "About - NodeJs Notes", + description: "Free NodeJS Notes App.", + } + + let perPage = 12; + let page = req.query.page || 1; + +//페이지에 보여줄 작업자 수 + // try { + // const sortField = req.query.sortField || 'name'; + // const sortOrder = req.query.sortOrder === 'asc' ? 1 : -1; + + // const worksites = await Worksite.aggregate([ { $sort: { [sortField]: sortOrder } } ]) + // .skip(perPage * page - perPage) + // .limit(perPage) + // .exec(); + // const count = await Worksite.countDocuments({}); + // // console.log(worksites) + // res.render('worksite/worksite', { locals, messages, worksites, pages: Math.ceil(count / perPage), current: page, moment: moment, sortField, sortOrder} ); + // } catch (error) { + // console.log(error); + // } + + const worksites = await Worksite.find({user: req.user._id}) + res.render('worksite/worksite', { locals, messages, worksites, moment }) + +} + +exports.addWorksite = async (req, res) => { + console.log('/addworksite') + const locals = { + title: "Add New Worksite", + description: "Free Nodejs User Management System.", + } + // console.log(req.user) + res.render('worksite/addworksite', {locals, moment}); +} + +/** +* POST / +* 새로운 근무지 생성 +*/ + +exports.postWorksite = async (req, res) => { + console.log('request user : ', req.user) + console.log('post worksite req-body') + console.log(req.body); + + const newWorksite = new Worksite({ + user: req.user._id, + name: req.body.name, + address: req.body.address, + local: req.body.local, + salary: req.body.salary, + worktype: req.body.worktype, + // date: req.body.date, + date: moment(req.body.date), + // hour: req.body.hour, + end: moment(req.body.date).add(req.body.hour, 'hours'), + nopr: req.body.nopr, + worksitenote: req.body.note, + }); + + try { + req.body.user = req.user.id; + await Worksite.create(newWorksite); + await req.flash('info', '새 작업현장이 추가되었습니다.') + + res.redirect('/worksite'); + } catch (error) { + console.log(error); + } + +} + +exports.showWorksite = async (req, res) => { + console.log('/showworksite') + const { id } = req.params; + const worksite = await Worksite.findById(id).populate('hired') + // console.log(worksite) + res.render('worksite/worksiteDetail', { worksite, moment, calcAge }) +} + +exports.matchToWorksite = async (req, res) => { + console.log('/matchworksite') + const { id } = req.params; + const uid = req.user.id + const worksite = await Worksite.findById(id) + const employees = await Employee.find({user: uid, _id: { $nin: worksite.hired }}) + res.render('worksite/matchToWorksite', { worksite, employees, calcAge, moment }) +} + +exports.worksiteHireEmployee = async (req, res) => { + console.log('/worksiteHireEmployee') + const { id, eid } = req.params; + const worksite = await Worksite.findById(id) + const employee = await Employee.findById(eid) + worksite.hired.push(employee) + const career = new Career({ employee, worksite }) + await worksite.save() + await career.save() + await req.flash('info', '근무자가 추가되었습니다.') + res.redirect(`/worksite/${id}/hire`) + // console.log(career) +} + +exports.editWorksite = async (req, res) => { + console.log('/editworksite') + const id = req.params.id; + const worksite = await Worksite.findById(id) + console.log(worksite) + res.render('worksite/editWorksite', { worksite, calcAge, moment }) +} + +exports.putWorksite = async (req, res) => { + console.log('/putworksite') + const id = req.params.id; + const { name, address, local, salary, worktype, date, hour, nopr, note } = req.body; + const datef = new Date(date) + const endt = moment(date).add(hour, 'hours') + console.log('hour : ', hour) + // console.log(moment(datef).format('YYYY-MM-DD HH:mm:ss')) + // console.log(moment(endt).format('YYYY-MM-DD HH:mm:ss')) + // endt.setHours(endt.getHours()+hour) + await Worksite.findByIdAndUpdate(id,{ + name: name, + address: address, + local: local, + salary: salary, + worktype: worktype, + date: datef, + // date.setDate(date.getDate()+7) + end: endt, + nopr: nopr, + worksitenote: note, + updatedAt: Date.now() + }) + const updated = await Worksite.findById(id) + console.log(updated) + res.redirect(`/worksite/${id}`) +} + +exports.deleteWorksite = async (req, res) => { + console.log('/deleteworksite') + const id = req.params.id + const worksiteToDel = await Worksite.findById(id) + console.log(worksiteToDel) + await Worksite.findByIdAndDelete(id) + res.redirect('/worksite') +} + +exports.deleteMatchedEmployee = async (req, res) => { + console.log('/deleteMatchedEmployee') + const { id, eid } = req.params; + console.log('worksite.hired 업데이트 : ', await Worksite.findByIdAndUpdate( + id, + { $pull: { hired: eid } }, + { new: true } // 업데이트된 문서를 반환받으려면 true로 설정 + )) + // const employee = await Employee.findById(eid) + // await req.flash('info', `${employee.name} 근무자를 삭제했습니다.`) + await Career.findOneAndDelete({employee: eid, worksite: id}) + res.redirect(`/worksite/${id}`) +} + +exports.showWorksitePayment = async (req, res) => { + console.log('/worksitePayment') + const { id } = req.params; + const worksite = await Worksite.findById(id).populate('hired') + // console.log(worksite) + res.render('worksite/worksitePayments', { worksite, moment, calcAge }) +} + +exports.searchWorksite = async (req, res) => { + console.log('/searchWorksite') + console.log(req.body) + const key = req.body.key; + const wholeWorksites = await Worksite.find({}); + const worksites = wholeWorksites.filter(worksite => + worksite.name.includes(key) || + worksite.address.includes(key) || + worksite.local.includes(key) || + worksite.worktype.includes(key) + ); + // console.log(worksites) + const messages = await req.flash('info'); + res.render('worksite/worksite', { messages, worksites, moment }) + +} \ No newline at end of file diff --git a/src/middleware/checkAuth.js b/src/middleware/checkAuth.js new file mode 100644 index 0000000000..793b6114d6 --- /dev/null +++ b/src/middleware/checkAuth.js @@ -0,0 +1,7 @@ +exports.isLoggedIn = function (req, res, next) { + if(req.user) { + next(); + } else { + return res.status(401).send('Access Denied'); + } +} \ No newline at end of file diff --git a/src/models/Career.js b/src/models/Career.js new file mode 100644 index 0000000000..da22e5e308 --- /dev/null +++ b/src/models/Career.js @@ -0,0 +1,28 @@ +const mongoose = require('mongoose'); + +const Schema = mongoose.Schema; +const careerSchema = new Schema({ + employee: { + type: Schema.Types.ObjectId, + ref: 'Employee' + }, + worksite: { + type: Schema.Types.ObjectId, + ref: 'Worksite' + }, + done: { + type: Boolean, + default: false + }, + pay: { + type: Number, + }, + review: { + type: String + }, + score: { + type: Number, + } +}); + +module.exports = mongoose.model('Career', careerSchema) \ No newline at end of file diff --git a/src/models/Employee.js b/src/models/Employee.js new file mode 100644 index 0000000000..5d34d9d443 --- /dev/null +++ b/src/models/Employee.js @@ -0,0 +1,41 @@ +const mongoose = require('mongoose'); + +//Employee +const Schema = mongoose.Schema; +const EmployeeSchema = new Schema({ + user: { + type: Schema.ObjectId, + ref: 'User', + required: true, + }, + name: { + type: String, + required: true, + }, + sex: { + type: String, + required: true, + }, + local: { + type: String, + required: true, + }, + RRN: { + type: String, + required: true, + }, + phonenumber: { + type: String, + required: true, + }, + createdAt: { + type: Date, + default: Date.now() + }, + updatedAt: { + type: Date, + default: Date.now() + } +}); + +module.exports = mongoose.model('Employee', EmployeeSchema); \ No newline at end of file diff --git a/src/models/Notes.js b/src/models/Notes.js new file mode 100644 index 0000000000..cfdcdbd0e3 --- /dev/null +++ b/src/models/Notes.js @@ -0,0 +1,30 @@ +const mongoose = require('mongoose'); + +//추후 여기를 고객으로 변경하면 될듯 +const Schema = mongoose.Schema; +const NoteSchema = new Schema({ + user: { + type: Schema.ObjectId, + ref: 'User' + }, + title: { + type: String, + required: true, + }, + body: { + type: String, + required: true, + }, + createdAt: { + type: Date, + default: Date.now() + }, + updatedAt: { + type: Date, + default: Date.now() + } +}); + +module.exports = mongoose.model('Note', NoteSchema); + + diff --git a/src/models/User.js b/src/models/User.js new file mode 100644 index 0000000000..074440437a --- /dev/null +++ b/src/models/User.js @@ -0,0 +1,36 @@ +const mongoose = require('mongoose'); + +const Schema = mongoose.Schema; +const UserSchema = new Schema({ + googleId: { + type: String, + required: true + }, + displayName: { + type: String, + required: true + }, + firstName: { + type: String, + required: true + }, + lastName: { + type: String, + required: true + }, + //발신번호 설정 위해 가입자(사용자) 번호 필요 + userphonenumber: { + type: String, + required: false + }, + profileImage: { + type: String, + required: true + }, + createdAt: { + type: Date, + default: Date.now + } +}); + +module.exports = mongoose.model('User', UserSchema); \ No newline at end of file diff --git a/src/models/Worksite.js b/src/models/Worksite.js new file mode 100644 index 0000000000..a5f9ae8ae2 --- /dev/null +++ b/src/models/Worksite.js @@ -0,0 +1,131 @@ +const mongoose = require('mongoose'); + + +const Schema = mongoose.Schema; +const WorksiteSchema = new Schema({ + user: { + type: Schema.ObjectId, + ref: 'User', + required: true, + }, + // 현장명 + name: { + type: String, + required: true, + }, + // 현장 상세 주소 + address: { + type: String, + required: true, + }, + // 현장 소재지 + local: { + type: String, + required: true, + }, + // 급여 + salary: { + type: Number, + required: true, + }, + // 업종 + worktype: { + type: String, + required: true, + }, + // 날짜 + date: { + type: Date, + required: true, + }, + // 끝나는 시간 + end: { + type: Date, + required: true, + }, + //필요한 인원 (number of people required) + nopr: { + type: Number, + required: true, + }, + // 채용 희망 인원 (문자 발송 전) + wanted: [ + { + type: Schema.ObjectId, + ref: 'Employee', + } + ], + // 채용 희망 인원 (문자 발송 후, 수신 전) + sent: [ + { + type: Schema.ObjectId, + ref: 'Employee', + } + ], + sendMessage: [ + { + phone: { + type: String, + required: true, + }, + message: { + type: String, + required: true, + }, + date: { + type: Date, + required: true, + default: Date.now() + } + } + ], + // 받은 문자들을 저장 + recieved: [ + { + phone: { + type: String, + required: true, + }, + message: { + type: String, + required: true, + }, + date: { + type: Date, + required: true, + default: Date.now() + } + } + ], + // 채용 거절한 인원 (문자 수신 후) + denied: [ + { + type: Schema.ObjectId, + ref: 'Employee', + } + ], + // 채용 확정(수락)한 인원 (문자 수신 후)) + hired: [ + { + type: Schema.ObjectId, + ref: 'Employee', + } + ], + //현장 내용 예. 5시간 작업 예상, 경력자 필수 등 + worksitenote: { + type: String, + required: false, + }, + // 최초 작성일 + createdAt: { + type: Date, + default: Date.now() + }, + // 최근 수정일 + updatedAt: { + type: Date, + default: Date.now() + } +}); + +module.exports = mongoose.model('Worksite', WorksiteSchema); \ No newline at end of file diff --git a/src/package-lock.json b/src/package-lock.json new file mode 100644 index 0000000000..dce6967150 --- /dev/null +++ b/src/package-lock.json @@ -0,0 +1,3609 @@ +{ + "name": "kmu35", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "kmu35", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "body-parser": "^1.20.2", + "connect-flash": "^0.1.1", + "connect-mongo": "^5.1.0", + "dotenv": "^16.4.5", + "ejs": "^3.1.9", + "ejs-lint": "^2.0.0", + "ejs-mate": "^4.0.0", + "express": "^4.18.3", + "express-ejs-layouts": "^2.5.1", + "express-session": "^1.18.0", + "method-override": "^3.0.0", + "moment": "^2.30.1", + "moment-timezone": "^0.5.45", + "mongoose": "6.12.8", + "morgan": "^1.10.0", + "nodemon": "^3.1.0", + "passport": "^0.7.0", + "passport-google-oauth20": "^2.0.0" + }, + "bin": { + "kmu35": "bin/www.js" + } + }, + "node_modules/@aws-crypto/ie11-detection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz", + "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==", + "optional": true, + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/ie11-detection/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz", + "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==", + "optional": true, + "dependencies": { + "@aws-crypto/ie11-detection": "^3.0.0", + "@aws-crypto/sha256-js": "^3.0.0", + "@aws-crypto/supports-web-crypto": "^3.0.0", + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz", + "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==", + "optional": true, + "dependencies": { + "@aws-crypto/util": "^3.0.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz", + "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==", + "optional": true, + "dependencies": { + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true + }, + "node_modules/@aws-crypto/util": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz", + "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-utf8-browser": "^3.0.0", + "tslib": "^1.11.1" + } + }, + "node_modules/@aws-crypto/util/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "optional": true + }, + "node_modules/@aws-sdk/client-cognito-identity": { + "version": "3.556.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.556.0.tgz", + "integrity": "sha512-HWd7PyXCuY1Z9KBaufbzpIvS2QeUAak5wfYwylW2DrEvt6A4tjWCBSbbSXNoawqCv/HitA39v953N/1PojJVVQ==", + "optional": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.556.0", + "@aws-sdk/core": "3.556.0", + "@aws-sdk/credential-provider-node": "3.556.0", + "@aws-sdk/middleware-host-header": "3.535.0", + "@aws-sdk/middleware-logger": "3.535.0", + "@aws-sdk/middleware-recursion-detection": "3.535.0", + "@aws-sdk/middleware-user-agent": "3.540.0", + "@aws-sdk/region-config-resolver": "3.535.0", + "@aws-sdk/types": "3.535.0", + "@aws-sdk/util-endpoints": "3.540.0", + "@aws-sdk/util-user-agent-browser": "3.535.0", + "@aws-sdk/util-user-agent-node": "3.535.0", + "@smithy/config-resolver": "^2.2.0", + "@smithy/core": "^1.4.2", + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/hash-node": "^2.2.0", + "@smithy/invalid-dependency": "^2.2.0", + "@smithy/middleware-content-length": "^2.2.0", + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-body-length-browser": "^2.2.0", + "@smithy/util-body-length-node": "^2.3.0", + "@smithy/util-defaults-mode-browser": "^2.2.1", + "@smithy/util-defaults-mode-node": "^2.3.1", + "@smithy/util-endpoints": "^1.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.556.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.556.0.tgz", + "integrity": "sha512-unXdWS7uvHqCcOyC1de+Fr8m3F2vMg2m24GPea0bg7rVGTYmiyn9mhUX11VCt+ozydrw+F50FQwL6OqoqPocmw==", + "optional": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/core": "3.556.0", + "@aws-sdk/middleware-host-header": "3.535.0", + "@aws-sdk/middleware-logger": "3.535.0", + "@aws-sdk/middleware-recursion-detection": "3.535.0", + "@aws-sdk/middleware-user-agent": "3.540.0", + "@aws-sdk/region-config-resolver": "3.535.0", + "@aws-sdk/types": "3.535.0", + "@aws-sdk/util-endpoints": "3.540.0", + "@aws-sdk/util-user-agent-browser": "3.535.0", + "@aws-sdk/util-user-agent-node": "3.535.0", + "@smithy/config-resolver": "^2.2.0", + "@smithy/core": "^1.4.2", + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/hash-node": "^2.2.0", + "@smithy/invalid-dependency": "^2.2.0", + "@smithy/middleware-content-length": "^2.2.0", + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-body-length-browser": "^2.2.0", + "@smithy/util-body-length-node": "^2.3.0", + "@smithy/util-defaults-mode-browser": "^2.2.1", + "@smithy/util-defaults-mode-node": "^2.3.1", + "@smithy/util-endpoints": "^1.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.556.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.556.0.tgz", + "integrity": "sha512-AXKd2TB6nNrksu+OfmHl8uI07PdgzOo4o8AxoRO8SHlwoMAGvcT9optDGVSYoVfgOKTymCoE7h8/UoUfPc11wQ==", + "optional": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/client-sts": "3.556.0", + "@aws-sdk/core": "3.556.0", + "@aws-sdk/middleware-host-header": "3.535.0", + "@aws-sdk/middleware-logger": "3.535.0", + "@aws-sdk/middleware-recursion-detection": "3.535.0", + "@aws-sdk/middleware-user-agent": "3.540.0", + "@aws-sdk/region-config-resolver": "3.535.0", + "@aws-sdk/types": "3.535.0", + "@aws-sdk/util-endpoints": "3.540.0", + "@aws-sdk/util-user-agent-browser": "3.535.0", + "@aws-sdk/util-user-agent-node": "3.535.0", + "@smithy/config-resolver": "^2.2.0", + "@smithy/core": "^1.4.2", + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/hash-node": "^2.2.0", + "@smithy/invalid-dependency": "^2.2.0", + "@smithy/middleware-content-length": "^2.2.0", + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-body-length-browser": "^2.2.0", + "@smithy/util-body-length-node": "^2.3.0", + "@smithy/util-defaults-mode-browser": "^2.2.1", + "@smithy/util-defaults-mode-node": "^2.3.1", + "@smithy/util-endpoints": "^1.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@aws-sdk/credential-provider-node": "^3.556.0" + } + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.556.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.556.0.tgz", + "integrity": "sha512-TsK3js7Suh9xEmC886aY+bv0KdLLYtzrcmVt6sJ/W6EnDXYQhBuKYFhp03NrN2+vSvMGpqJwR62DyfKe1G0QzQ==", + "optional": true, + "dependencies": { + "@aws-crypto/sha256-browser": "3.0.0", + "@aws-crypto/sha256-js": "3.0.0", + "@aws-sdk/core": "3.556.0", + "@aws-sdk/middleware-host-header": "3.535.0", + "@aws-sdk/middleware-logger": "3.535.0", + "@aws-sdk/middleware-recursion-detection": "3.535.0", + "@aws-sdk/middleware-user-agent": "3.540.0", + "@aws-sdk/region-config-resolver": "3.535.0", + "@aws-sdk/types": "3.535.0", + "@aws-sdk/util-endpoints": "3.540.0", + "@aws-sdk/util-user-agent-browser": "3.535.0", + "@aws-sdk/util-user-agent-node": "3.535.0", + "@smithy/config-resolver": "^2.2.0", + "@smithy/core": "^1.4.2", + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/hash-node": "^2.2.0", + "@smithy/invalid-dependency": "^2.2.0", + "@smithy/middleware-content-length": "^2.2.0", + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-body-length-browser": "^2.2.0", + "@smithy/util-body-length-node": "^2.3.0", + "@smithy/util-defaults-mode-browser": "^2.2.1", + "@smithy/util-defaults-mode-node": "^2.3.1", + "@smithy/util-endpoints": "^1.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@aws-sdk/credential-provider-node": "^3.556.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.556.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.556.0.tgz", + "integrity": "sha512-vJaSaHw2kPQlo11j/Rzuz0gk1tEaKdz+2ser0f0qZ5vwFlANjt08m/frU17ctnVKC1s58bxpctO/1P894fHLrA==", + "optional": true, + "dependencies": { + "@smithy/core": "^1.4.2", + "@smithy/protocol-http": "^3.3.0", + "@smithy/signature-v4": "^2.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "fast-xml-parser": "4.2.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-cognito-identity": { + "version": "3.556.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.556.0.tgz", + "integrity": "sha512-PKYBjfpLHJZhrIv0M9eJ47yeDaV8NUMVe4vsiHG5tvlvwWGP84k9GJlr51U/s84OzIyXzVpiqP8PU5yKovUFIg==", + "optional": true, + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.556.0", + "@aws-sdk/types": "3.535.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.535.0.tgz", + "integrity": "sha512-XppwO8c0GCGSAvdzyJOhbtktSEaShg14VJKg8mpMa1XcgqzmcqqHQjtDWbx5rZheY1VdpXZhpEzJkB6LpQejpA==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.535.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.552.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.552.0.tgz", + "integrity": "sha512-vsmu7Cz1i45pFEqzVb4JcFmAmVnWFNLsGheZc8SCptlqCO5voETrZZILHYIl4cjKkSDk3pblBOf0PhyjqWW6WQ==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.535.0", + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/util-stream": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.556.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.556.0.tgz", + "integrity": "sha512-0Nz4ErOlXhe3muxWYMbPwRMgfKmVbBp36BAE2uv/z5wTbfdBkcgUwaflEvlKCLUTdHzuZsQk+BFS/gVyaUeOuA==", + "optional": true, + "dependencies": { + "@aws-sdk/client-sts": "3.556.0", + "@aws-sdk/credential-provider-env": "3.535.0", + "@aws-sdk/credential-provider-process": "3.535.0", + "@aws-sdk/credential-provider-sso": "3.556.0", + "@aws-sdk/credential-provider-web-identity": "3.556.0", + "@aws-sdk/types": "3.535.0", + "@smithy/credential-provider-imds": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.556.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.556.0.tgz", + "integrity": "sha512-s1xVtKjyGc60O8qcNIzS1X3H+pWEwEfZ7TgNznVDNyuXvLrlNWiAcigPWGl2aAkc8tGcsSG0Qpyw2KYC939LFg==", + "optional": true, + "dependencies": { + "@aws-sdk/credential-provider-env": "3.535.0", + "@aws-sdk/credential-provider-http": "3.552.0", + "@aws-sdk/credential-provider-ini": "3.556.0", + "@aws-sdk/credential-provider-process": "3.535.0", + "@aws-sdk/credential-provider-sso": "3.556.0", + "@aws-sdk/credential-provider-web-identity": "3.556.0", + "@aws-sdk/types": "3.535.0", + "@smithy/credential-provider-imds": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.535.0.tgz", + "integrity": "sha512-9O1OaprGCnlb/kYl8RwmH7Mlg8JREZctB8r9sa1KhSsWFq/SWO0AuJTyowxD7zL5PkeS4eTvzFFHWCa3OO5epA==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.535.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.556.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.556.0.tgz", + "integrity": "sha512-ETuBgcnpfxqadEAqhQFWpKoV1C/NAgvs5CbBc5EJbelJ8f4prTdErIHjrRtVT8c02MXj92QwczsiNYd5IoOqyw==", + "optional": true, + "dependencies": { + "@aws-sdk/client-sso": "3.556.0", + "@aws-sdk/token-providers": "3.556.0", + "@aws-sdk/types": "3.535.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.556.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.556.0.tgz", + "integrity": "sha512-R/YAL8Uh8i+dzVjzMnbcWLIGeeRi2mioHVGnVF+minmaIkCiQMZg2HPrdlKm49El+RljT28Nl5YHRuiqzEIwMA==", + "optional": true, + "dependencies": { + "@aws-sdk/client-sts": "3.556.0", + "@aws-sdk/types": "3.535.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/credential-providers": { + "version": "3.556.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.556.0.tgz", + "integrity": "sha512-CnWP/AEF+sPeO8fabrHy4Oeo52xDFuDQMpjKcI7oJzGF6Ne2ZPTq6wTJQPLeXeg4OzLcK0tT3G4z/27MLdsLsw==", + "optional": true, + "dependencies": { + "@aws-sdk/client-cognito-identity": "3.556.0", + "@aws-sdk/client-sso": "3.556.0", + "@aws-sdk/client-sts": "3.556.0", + "@aws-sdk/credential-provider-cognito-identity": "3.556.0", + "@aws-sdk/credential-provider-env": "3.535.0", + "@aws-sdk/credential-provider-http": "3.552.0", + "@aws-sdk/credential-provider-ini": "3.556.0", + "@aws-sdk/credential-provider-node": "3.556.0", + "@aws-sdk/credential-provider-process": "3.535.0", + "@aws-sdk/credential-provider-sso": "3.556.0", + "@aws-sdk/credential-provider-web-identity": "3.556.0", + "@aws-sdk/types": "3.535.0", + "@smithy/credential-provider-imds": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.535.0.tgz", + "integrity": "sha512-0h6TWjBWtDaYwHMQJI9ulafeS4lLaw1vIxRjbpH0svFRt6Eve+Sy8NlVhECfTU2hNz/fLubvrUxsXoThaLBIew==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.535.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.535.0.tgz", + "integrity": "sha512-huNHpONOrEDrdRTvSQr1cJiRMNf0S52NDXtaPzdxiubTkP+vni2MohmZANMOai/qT0olmEVX01LhZ0ZAOgmg6A==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.535.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.535.0.tgz", + "integrity": "sha512-am2qgGs+gwqmR4wHLWpzlZ8PWhm4ktj5bYSgDrsOfjhdBlWNxvPoID9/pDAz5RWL48+oH7I6SQzMqxXsFDikrw==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.535.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.540.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.540.0.tgz", + "integrity": "sha512-8Rd6wPeXDnOYzWj1XCmOKcx/Q87L0K1/EHqOBocGjLVbN3gmRxBvpmR1pRTjf7IsWfnnzN5btqtcAkfDPYQUMQ==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.535.0", + "@aws-sdk/util-endpoints": "3.540.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.535.0.tgz", + "integrity": "sha512-IXOznDiaItBjsQy4Fil0kzX/J3HxIOknEphqHbOfUf+LpA5ugcsxuQQONrbEQusCBnfJyymrldBvBhFmtlU9Wg==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.535.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/types": "^2.12.0", + "@smithy/util-config-provider": "^2.3.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.556.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.556.0.tgz", + "integrity": "sha512-tvIiugNF0/+2wfuImMrpKjXMx4nCnFWQjQvouObny+wrif/PGqqQYrybwxPJDvzbd965bu1I+QuSv85/ug7xsg==", + "optional": true, + "dependencies": { + "@aws-sdk/client-sso-oidc": "3.556.0", + "@aws-sdk/types": "3.535.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.535.0.tgz", + "integrity": "sha512-aY4MYfduNj+sRR37U7XxYR8wemfbKP6lx00ze2M2uubn7mZotuVrWYAafbMSXrdEMSToE5JDhr28vArSOoLcSg==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.540.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.540.0.tgz", + "integrity": "sha512-1kMyQFAWx6f8alaI6UT65/5YW/7pDWAKAdNwL6vuJLea03KrZRX3PMoONOSJpAS5m3Ot7HlWZvf3wZDNTLELZw==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.535.0", + "@smithy/types": "^2.12.0", + "@smithy/util-endpoints": "^1.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.535.0.tgz", + "integrity": "sha512-PHJ3SL6d2jpcgbqdgiPxkXpu7Drc2PYViwxSIqvvMKhDwzSB1W3mMvtpzwKM4IE7zLFodZo0GKjJ9AsoXndXhA==", + "optional": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.535.0.tgz", + "integrity": "sha512-RWMcF/xV5n+nhaA/Ff5P3yNP3Kur/I+VNZngog4TEs92oB/nwOdAg/2JL8bVAhUbMrjTjpwm7PItziYFQoqyig==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.535.0", + "@smithy/types": "^2.12.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.535.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.535.0.tgz", + "integrity": "sha512-dRek0zUuIT25wOWJlsRm97nTkUlh1NDcLsQZIN2Y8KxhwoXXWtJs5vaDPT+qAg+OpcNj80i1zLR/CirqlFg/TQ==", + "optional": true, + "dependencies": { + "@aws-sdk/types": "3.535.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/util-utf8-browser": { + "version": "3.259.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz", + "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==", + "optional": true, + "dependencies": { + "tslib": "^2.3.1" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.5.tgz", + "integrity": "sha512-XLNOMH66KhJzUJNwT/qlMnS4WsNDWD5ASdyaSH3EtK+F4r/CFGa3jT4GNi4mfOitGvWXtdLgQJkQjxSVrio+jA==", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.2.0.tgz", + "integrity": "sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.2.0.tgz", + "integrity": "sha512-fsiMgd8toyUba6n1WRmr+qACzXltpdDkPTAaDqc8QqPBUzO+/JKwL6bUBseHVi8tu9l+3JOK+tSf7cay+4B3LA==", + "optional": true, + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/types": "^2.12.0", + "@smithy/util-config-provider": "^2.3.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-1.4.2.tgz", + "integrity": "sha512-2fek3I0KZHWJlRLvRTqxTEri+qV0GRHrJIoLFuBMZB4EMg4WgeBGfF0X6abnrNYpq55KJ6R4D6x4f0vLnhzinA==", + "optional": true, + "dependencies": { + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-retry": "^2.3.1", + "@smithy/middleware-serde": "^2.3.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.3.0.tgz", + "integrity": "sha512-BWB9mIukO1wjEOo1Ojgl6LrG4avcaC7T/ZP6ptmAaW4xluhSIPZhY+/PI5YKzlk+jsm+4sQZB45Bt1OfMeQa3w==", + "optional": true, + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.5.0.tgz", + "integrity": "sha512-BOWEBeppWhLn/no/JxUL/ghTfANTjT7kg3Ww2rPqTUY9R4yHPXxJ9JhMe3Z03LN3aPwiwlpDIUcVw1xDyHqEhw==", + "optional": true, + "dependencies": { + "@smithy/protocol-http": "^3.3.0", + "@smithy/querystring-builder": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/util-base64": "^2.3.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/hash-node": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.2.0.tgz", + "integrity": "sha512-zLWaC/5aWpMrHKpoDF6nqpNtBhlAYKF/7+9yMN7GpdR8CzohnWfGtMznPybnwSS8saaXBMxIGwJqR4HmRp6b3g==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.2.0.tgz", + "integrity": "sha512-nEDASdbKFKPXN2O6lOlTgrEEOO9NHIeO+HVvZnkqc8h5U9g3BIhWsvzFo+UcUbliMHvKNPD/zVxDrkP1Sbgp8Q==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "optional": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.2.0.tgz", + "integrity": "sha512-5bl2LG1Ah/7E5cMSC+q+h3IpVHMeOkG0yLRyQT1p2aMJkSrZG7RlXHPuAgb7EyaFeidKEnnd/fNaLLaKlHGzDQ==", + "optional": true, + "dependencies": { + "@smithy/protocol-http": "^3.3.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.5.1.tgz", + "integrity": "sha512-1/8kFp6Fl4OsSIVTWHnNjLnTL8IqpIb/D3sTSczrKFnrE9VMNWxnrRKNvpUHOJ6zpGD5f62TPm7+17ilTJpiCQ==", + "optional": true, + "dependencies": { + "@smithy/middleware-serde": "^2.3.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "@smithy/url-parser": "^2.2.0", + "@smithy/util-middleware": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.3.1.tgz", + "integrity": "sha512-P2bGufFpFdYcWvqpyqqmalRtwFUNUA8vHjJR5iGqbfR6mp65qKOLcUd6lTr4S9Gn/enynSrSf3p3FVgVAf6bXA==", + "optional": true, + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/service-error-classification": "^2.1.5", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-retry": "^2.2.0", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.3.0.tgz", + "integrity": "sha512-sIADe7ojwqTyvEQBe1nc/GXB9wdHhi9UwyX0lTyttmUWDJLP655ZYE1WngnNyXREme8I27KCaUhyhZWRXL0q7Q==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.2.0.tgz", + "integrity": "sha512-Qntc3jrtwwrsAC+X8wms8zhrTr0sFXnyEGhZd9sLtsJ/6gGQKFzNB+wWbOcpJd7BR8ThNCoKt76BuQahfMvpeA==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.3.0.tgz", + "integrity": "sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==", + "optional": true, + "dependencies": { + "@smithy/property-provider": "^2.2.0", + "@smithy/shared-ini-file-loader": "^2.4.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.5.0.tgz", + "integrity": "sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==", + "optional": true, + "dependencies": { + "@smithy/abort-controller": "^2.2.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/querystring-builder": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.2.0.tgz", + "integrity": "sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.3.0.tgz", + "integrity": "sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.2.0.tgz", + "integrity": "sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "@smithy/util-uri-escape": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.2.0.tgz", + "integrity": "sha512-BvHCDrKfbG5Yhbpj4vsbuPV2GgcpHiAkLeIlcA1LtfpMz3jrqizP1+OguSNSj1MwBHEiN+jwNisXLGdajGDQJA==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.1.5.tgz", + "integrity": "sha512-uBDTIBBEdAQryvHdc5W8sS5YX7RQzF683XrHePVdFmAgKiMofU15FLSM0/HU03hKTnazdNRFa0YHS7+ArwoUSQ==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.12.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.4.0.tgz", + "integrity": "sha512-WyujUJL8e1B6Z4PBfAqC/aGY1+C7T0w20Gih3yrvJSk97gpiVfB+y7c46T4Nunk+ZngLq0rOIdeVeIklk0R3OA==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.3.0.tgz", + "integrity": "sha512-ui/NlpILU+6HAQBfJX8BBsDXuKSNrjTSuOYArRblcrErwKFutjrCNb/OExfVRyj9+26F9J+ZmfWT+fKWuDrH3Q==", + "optional": true, + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "@smithy/types": "^2.12.0", + "@smithy/util-hex-encoding": "^2.2.0", + "@smithy/util-middleware": "^2.2.0", + "@smithy/util-uri-escape": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.5.1.tgz", + "integrity": "sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ==", + "optional": true, + "dependencies": { + "@smithy/middleware-endpoint": "^2.5.1", + "@smithy/middleware-stack": "^2.2.0", + "@smithy/protocol-http": "^3.3.0", + "@smithy/types": "^2.12.0", + "@smithy/util-stream": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.12.0.tgz", + "integrity": "sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==", + "optional": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.2.0.tgz", + "integrity": "sha512-hoA4zm61q1mNTpksiSWp2nEl1dt3j726HdRhiNgVJQMj7mLp7dprtF57mOB6JvEk/x9d2bsuL5hlqZbBuHQylQ==", + "optional": true, + "dependencies": { + "@smithy/querystring-parser": "^2.2.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/util-base64": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.3.0.tgz", + "integrity": "sha512-s3+eVwNeJuXUwuMbusncZNViuhv2LjVJ1nMwTqSA0XAC7gjKhqqxRdJPhR8+YrkoZ9IiIbFk/yK6ACe/xlF+hw==", + "optional": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.2.0.tgz", + "integrity": "sha512-dtpw9uQP7W+n3vOtx0CfBD5EWd7EPdIdsQnWTDoFf77e3VUf05uA7R7TGipIo8e4WL2kuPdnsr3hMQn9ziYj5w==", + "optional": true, + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.3.0.tgz", + "integrity": "sha512-ITWT1Wqjubf2CJthb0BuT9+bpzBfXeMokH/AAa5EJQgbv9aPMVfnM76iFIZVFf50hYXGbtiV71BHAthNWd6+dw==", + "optional": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "optional": true, + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.3.0.tgz", + "integrity": "sha512-HZkzrRcuFN1k70RLqlNK4FnPXKOpkik1+4JaBoHNJn+RnJGYqaa3c5/+XtLOXhlKzlRgNvyaLieHTW2VwGN0VQ==", + "optional": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.2.1.tgz", + "integrity": "sha512-RtKW+8j8skk17SYowucwRUjeh4mCtnm5odCL0Lm2NtHQBsYKrNW0od9Rhopu9wF1gHMfHeWF7i90NwBz/U22Kw==", + "optional": true, + "dependencies": { + "@smithy/property-provider": "^2.2.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.3.1.tgz", + "integrity": "sha512-vkMXHQ0BcLFysBMWgSBLSk3+leMpFSyyFj8zQtv5ZyUBx8/owVh1/pPEkzmW/DR/Gy/5c8vjLDD9gZjXNKbrpA==", + "optional": true, + "dependencies": { + "@smithy/config-resolver": "^2.2.0", + "@smithy/credential-provider-imds": "^2.3.0", + "@smithy/node-config-provider": "^2.3.0", + "@smithy/property-provider": "^2.2.0", + "@smithy/smithy-client": "^2.5.1", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-endpoints": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.2.0.tgz", + "integrity": "sha512-BuDHv8zRjsE5zXd3PxFXFknzBG3owCpjq8G3FcsXW3CykYXuEqM3nTSsmLzw5q+T12ZYuDlVUZKBdpNbhVtlrQ==", + "optional": true, + "dependencies": { + "@smithy/node-config-provider": "^2.3.0", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.2.0.tgz", + "integrity": "sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==", + "optional": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.2.0.tgz", + "integrity": "sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==", + "optional": true, + "dependencies": { + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.2.0.tgz", + "integrity": "sha512-q9+pAFPTfftHXRytmZ7GzLFFrEGavqapFc06XxzZFcSIGERXMerXxCitjOG1prVDR9QdjqotF40SWvbqcCpf8g==", + "optional": true, + "dependencies": { + "@smithy/service-error-classification": "^2.1.5", + "@smithy/types": "^2.12.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.2.0.tgz", + "integrity": "sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA==", + "optional": true, + "dependencies": { + "@smithy/fetch-http-handler": "^2.5.0", + "@smithy/node-http-handler": "^2.5.0", + "@smithy/types": "^2.12.0", + "@smithy/util-base64": "^2.3.0", + "@smithy/util-buffer-from": "^2.2.0", + "@smithy/util-hex-encoding": "^2.2.0", + "@smithy/util-utf8": "^2.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.2.0.tgz", + "integrity": "sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==", + "optional": true, + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "optional": true, + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@types/node": { + "version": "20.12.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", + "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" + }, + "node_modules/@types/whatwg-url": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.4.tgz", + "integrity": "sha512-lXCmTWSHJvf0TRSO58nm978b8HJ/EdsSsEKLd3ODHFjo+3VGAyyTp4v50nWvwtzBxSMQrVOK7tcuN0zGPLICMw==", + "peer": true, + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", + "optional": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bson": { + "version": "6.6.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.6.0.tgz", + "integrity": "sha512-BVINv2SgcMjL4oYbBuCQTpE3/VKOSxrOA8Cj/wQP7izSzlBGVomdm+TcUd0Pzy0ytLSSDweCKQ6X3f5veM5LQA==", + "peer": true, + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/connect-flash": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/connect-flash/-/connect-flash-0.1.1.tgz", + "integrity": "sha512-2rcfELQt/ZMP+SM/pG8PyhJRaLKp+6Hk2IUBNkEit09X+vwn3QsAL3ZbYtxUn7NVPzbMTSLRDhqe0B/eh30RYA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/connect-mongo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/connect-mongo/-/connect-mongo-5.1.0.tgz", + "integrity": "sha512-xT0vxQLqyqoUTxPLzlP9a/u+vir0zNkhiy9uAdHjSCcUUf7TS5b55Icw8lVyYFxfemP3Mf9gdwUOgeF3cxCAhw==", + "dependencies": { + "debug": "^4.3.1", + "kruptein": "^3.0.0" + }, + "engines": { + "node": ">=12.9.0" + }, + "peerDependencies": { + "express-session": "^1.17.1", + "mongodb": ">= 5.1.0 < 7" + } + }, + "node_modules/connect-mongo/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/connect-mongo/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/ejs": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", + "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ejs-include-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ejs-include-regex/-/ejs-include-regex-1.0.0.tgz", + "integrity": "sha512-OTkvS8Dm8XhaE/+EKIjYjInRkNahQwkUUacAZXvA8Gqr5KEZrOsgFk8AkKYSnoTcdvKV0wnoG7YHWb4gkZFu8Q==" + }, + "node_modules/ejs-lint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ejs-lint/-/ejs-lint-2.0.0.tgz", + "integrity": "sha512-zt3E6MWLBYpWuUEOFRRqzB74gxCOZJAzoKmJR810U2mIrLnP1v6Xyk8tc6tl4pbT63cFoEqELPx9K8URjmpyZg==", + "dependencies": { + "chalk": "^5.0.0", + "ejs": "3.1.8", + "ejs-include-regex": "^1.0.0", + "globby": "^13.0.0", + "read-input": "^0.3.1", + "slash": "^5.0.0", + "syntax-error": "^1.1.6", + "yargs": "^17.0.0" + }, + "bin": { + "ejslint": "cli.js" + } + }, + "node_modules/ejs-lint/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ejs-lint/node_modules/ejs": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.8.tgz", + "integrity": "sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ejs-mate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ejs-mate/-/ejs-mate-4.0.0.tgz", + "integrity": "sha512-AYRN19jgrTHIuzbe2mQU5SEmTw6Ja/lVo+e9NKLLsCMdaKrk7D/SFr3QroiGnbDAi6moBezBSAdYQoyLbYzfuA==", + "dependencies": { + "ejs": "^3.1.7" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express-ejs-layouts": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/express-ejs-layouts/-/express-ejs-layouts-2.5.1.tgz", + "integrity": "sha512-IXROv9n3xKga7FowT06n1Qn927JR8ZWDn5Dc9CJQoiiaaDqbhW5PDmWShzbpAa2wjWT1vJqaIM1S6vJwwX11gA==" + }, + "node_modules/express-session": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.18.0.tgz", + "integrity": "sha512-m93QLWr0ju+rOwApSsyso838LQwgfs44QtOP/WBiwtAgPIo/SAh1a5c6nn2BR6mFNZehTpqKDESzP+fRHVbxwQ==", + "dependencies": { + "cookie": "0.6.0", + "cookie-signature": "1.0.7", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.0.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.1", + "uid-safe": "~2.1.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/express-session/node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express-session/node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==" + }, + "node_modules/express/node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-xml-parser": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz", + "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==", + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "optional": true, + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/jake": { + "version": "10.8.7", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", + "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" + }, + "node_modules/kareem": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", + "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/kruptein": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/kruptein/-/kruptein-3.0.6.tgz", + "integrity": "sha512-EQJjTwAJfQkC4NfdQdo3HXM2a9pmBm8oidzH270cYu1MbgXPNPMJuldN7OPX+qdhPO5rw4X3/iKz0BFBfkXGKA==", + "dependencies": { + "asn1.js": "^5.4.1" + }, + "engines": { + "node": ">8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/method-override": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/method-override/-/method-override-3.0.0.tgz", + "integrity": "sha512-IJ2NNN/mSl9w3kzWB92rcdHpz+HjkxhDJWNDBqSlas+zQdP8wBiJzITPg08M/k2uVvMow7Sk41atndNtt/PHSA==", + "dependencies": { + "debug": "3.1.0", + "methods": "~1.1.2", + "parseurl": "~1.3.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/method-override/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.45", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.45.tgz", + "integrity": "sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==", + "dependencies": { + "moment": "^2.29.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mongodb": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.5.0.tgz", + "integrity": "sha512-Fozq68InT+JKABGLqctgtb8P56pRrJFkbhW0ux+x1mdHeyinor8oNzJqwLjV/t5X5nJGfTlluxfyMnOXNggIUA==", + "peer": true, + "dependencies": { + "@mongodb-js/saslprep": "^1.1.5", + "bson": "^6.4.0", + "mongodb-connection-string-url": "^3.0.0" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.0.tgz", + "integrity": "sha512-t1Vf+m1I5hC2M5RJx/7AtxgABy1cZmIPQRMXw+gEIPn/cZNF3Oiy+l0UIypUwVB5trcWHq3crg2g3uAR9aAwsQ==", + "peer": true, + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^13.0.0" + } + }, + "node_modules/mongoose": { + "version": "6.12.8", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.12.8.tgz", + "integrity": "sha512-/9KOOVq1a4XNzqcWiWoOckvCE9eJPQ4M6rA8BmGTeuyi/w8t7F7LZ+8Lv3yilcqV5JP78SfMmgzm4YqlGl3fOg==", + "dependencies": { + "bson": "^4.7.2", + "kareem": "2.5.1", + "mongodb": "4.17.2", + "mpath": "0.9.0", + "mquery": "4.0.3", + "ms": "2.1.3", + "sift": "16.0.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mongoose/node_modules/@types/whatwg-url": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", + "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", + "dependencies": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } + }, + "node_modules/mongoose/node_modules/bson": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.2.tgz", + "integrity": "sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==", + "dependencies": { + "buffer": "^5.6.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/mongoose/node_modules/mongodb": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.17.2.tgz", + "integrity": "sha512-mLV7SEiov2LHleRJPMPrK2PMyhXFZt2UQLC4VD4pnth3jMjYKHhtqfwwkkvS/NXuo/Fp3vbhaNcXrIDaLRb9Tg==", + "dependencies": { + "bson": "^4.7.2", + "mongodb-connection-string-url": "^2.6.0", + "socks": "^2.7.1" + }, + "engines": { + "node": ">=12.9.0" + }, + "optionalDependencies": { + "@aws-sdk/credential-providers": "^3.186.0", + "@mongodb-js/saslprep": "^1.1.0" + } + }, + "node_modules/mongoose/node_modules/mongodb-connection-string-url": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", + "dependencies": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" + } + }, + "node_modules/mongoose/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/mongoose/node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mongoose/node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-4.0.3.tgz", + "integrity": "sha512-J5heI+P08I6VJ2Ky3+33IpCdAvlYGTSUjwTPxkAr8i8EoduPMBX2OY/wa3IKZIQl7MU4SbFk8ndgSKyB/cl1zA==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/mquery/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mquery/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nodemon": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz", + "integrity": "sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/nodemon/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nodemon/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/oauth": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.10.0.tgz", + "integrity": "sha512-1orQ9MT1vHFGQxhuy7E/0gECD3fd2fCC+PIX+/jgmU/gI3EpRocXtmtvxCO5x3WZ443FLTLFWNDjl5MPJf9u+Q==" + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/passport": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.7.0.tgz", + "integrity": "sha512-cPLl+qZpSc+ireUvt+IzqbED1cHHkDoVYMo30jbJIdOOjQ1MQYZBPiNvmi8UM6lJuOpTPXJGZQk0DtC4y61MYQ==", + "dependencies": { + "passport-strategy": "1.x.x", + "pause": "0.0.1", + "utils-merge": "^1.0.1" + }, + "engines": { + "node": ">= 0.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jaredhanson" + } + }, + "node_modules/passport-google-oauth20": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/passport-google-oauth20/-/passport-google-oauth20-2.0.0.tgz", + "integrity": "sha512-KSk6IJ15RoxuGq7D1UKK/8qKhNfzbLeLrG3gkLZ7p4A6DBCcv7xpyQwuXtWdpyR0+E0mwkpjY1VfPOhxQrKzdQ==", + "dependencies": { + "passport-oauth2": "1.x.x" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/passport-oauth2": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.8.0.tgz", + "integrity": "sha512-cjsQbOrXIDE4P8nNb3FQRCCmJJ/utnFKEz2NX209f7KOHPoX18gF7gBzBbLLsj2/je4KrgiwLLGjf0lm9rtTBA==", + "dependencies": { + "base64url": "3.x.x", + "oauth": "0.10.x", + "passport-strategy": "1.x.x", + "uid2": "0.0.x", + "utils-merge": "1.x.x" + }, + "engines": { + "node": ">= 0.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jaredhanson" + } + }, + "node_modules/passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-input": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/read-input/-/read-input-0.3.1.tgz", + "integrity": "sha512-J1ZkWCnB4altU7RTe+62PSfa21FrEtfKyO9fuqR3yP8kZku3nIwaw2Krj383JC7egAIl5Zyz2w+EOu9uXH5HZw==" + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sift": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", + "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/slash": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "optional": true + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/syntax-error": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", + "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", + "dependencies": { + "acorn-node": "^1.2.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "peer": true, + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "optional": true + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "dependencies": { + "random-bytes": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/uid2": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz", + "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==" + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", + "peer": true, + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "engines": { + "node": ">=12" + } + } + } +} diff --git a/src/package.json b/src/package.json new file mode 100644 index 0000000000..f5564a206d --- /dev/null +++ b/src/package.json @@ -0,0 +1,36 @@ +{ + "name": "kmu35", + "version": "1.0.0", + "description": "", + "main": "app.js", + "bin": { + "kmu35": "/bin/www.js" + }, + "dependencies": { + "body-parser": "^1.20.2", + "connect-flash": "^0.1.1", + "connect-mongo": "^5.1.0", + "dotenv": "^16.4.5", + "ejs": "^3.1.9", + "ejs-lint": "^2.0.0", + "ejs-mate": "^4.0.0", + "express": "^4.18.3", + "express-ejs-layouts": "^2.5.1", + "express-session": "^1.18.0", + "method-override": "^3.0.0", + "moment": "^2.30.1", + "moment-timezone": "^0.5.45", + "mongoose": "6.12.8", + "morgan": "^1.10.0", + "nodemon": "^3.1.0", + "passport": "^0.7.0", + "passport-google-oauth20": "^2.0.0" + }, + "scripts": { + "start": "nodemon app.js", + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC" +} diff --git a/src/routes/auth.js b/src/routes/auth.js new file mode 100644 index 0000000000..505eb5355f --- /dev/null +++ b/src/routes/auth.js @@ -0,0 +1,97 @@ +const express = require("express"); +const router = express.Router(); +const passport = require("passport"); +const GoogleStrategy = require("passport-google-oauth20").Strategy; +const User = require("../models/User"); + +passport.use( + new GoogleStrategy( + { + clientID: process.env.GOOGLE_CLIENT_ID, + clientSecret: process.env.GOOGLE_CLIENT_SECRET, + callbackURL: process.env.GOOGLE_CALLBACK_URL, + }, + async function (accessToken, refreshToken, profile, done) { + const newUser = { + googleId: profile.id, + displayName: profile.displayName, + firstName: profile.name.givenName, + lastName: profile.name.familyName, + profileImage: profile.photos[0].value, + }; + + try { + let user = await User.findOne({ googleId: profile.id }); + if (user) { + done(null, user); + } else { + user = await User.create(newUser); + done(null, user); + } + } catch (error) { + console.log(error); + } + } + ) +); + +// 구글 로그인 라우트 +router.get( + "/auth/google", + passport.authenticate("google", { scope: ["email", "profile"] }) +); + +// Retrieve user data +router.get( + "/google/callback", + passport.authenticate("google", { + failureRedirect: "/login-failure", + successRedirect: "/dashboard", + }) +); + +// 뭔가 잘못되었을 때 라우팅 +router.get('/login-failure', (req, res) => { + res.send('Something went wrong...'); +}); + +// Destroy user session +router.get('/logout', (req, res) => { + req.session.destroy(error => { + if(error) { + console.log(error); + res.send('Error loggin out'); + } else { + res.redirect('/') + } + }) +}); + + +// Presist user data after successful authentication +passport.serializeUser(function (user, done) { + done(null, user.id); +}); + +// Retrieve user data from session. +// Original Code +// passport.deserializeUser(function (id, done) { +// User.findById(id, function (err, user) { +// done(err, user); +// }); +// }); + +// New +passport.deserializeUser(async (id, done) => { + try { + const user = await User.findById(id); + done(null, user); + } catch (err) { + done(err, null); + } +}); + + + + +module.exports = router; diff --git a/src/routes/dashboard.js b/src/routes/dashboard.js new file mode 100644 index 0000000000..fc449ae895 --- /dev/null +++ b/src/routes/dashboard.js @@ -0,0 +1,19 @@ +const express = require('express'); +const router = express.Router(); +const { isLoggedIn } = require('../middleware/checkAuth'); +const dashboardController = require('../controllers/dashboardController'); + +/** + * Dashboard Routes +*/ +router.get('/dashboard', isLoggedIn, dashboardController.dashboard); +router.get('/dashboard/item/:id', isLoggedIn, dashboardController.dashboardViewNote); +router.put('/dashboard/item/:id', isLoggedIn, dashboardController.dashboardUpdateNote); +router.delete('/dashboard/item-delete/:id', isLoggedIn, dashboardController.dashboardDeleteNote); +router.get('/dashboard/add', isLoggedIn, dashboardController.dashboardAddNote); +router.post('/dashboard/add', isLoggedIn, dashboardController.dashboardAddNoteSubmit); +router.get('/dashboard/search', isLoggedIn, dashboardController.dashboardSearch); +router.post('/dashboard/search', isLoggedIn, dashboardController.dashboardSearchSubmit); + + +module.exports = router; \ No newline at end of file diff --git a/src/routes/employee.js b/src/routes/employee.js new file mode 100644 index 0000000000..7adc71bc84 --- /dev/null +++ b/src/routes/employee.js @@ -0,0 +1,20 @@ +const express = require('express'); +const router = express.Router(); +const { isLoggedIn } = require('../middleware/checkAuth'); +const employeeController = require('../controllers/employeeController'); + +router.get('/employee', isLoggedIn, employeeController.employee); + +router.get('/addemployee', isLoggedIn, employeeController.addEmployee); +router.post('/addemployee', isLoggedIn, employeeController.postEmployee); +router.get('/view/:id', isLoggedIn, employeeController.viewEmployee); +router.put('/view/:eid/putreview/:cid', isLoggedIn, employeeController.putReview) + +router.get('/edit/:id', isLoggedIn, employeeController.editEmployee); +router.put('/edit/:id', isLoggedIn, employeeController.editPostemployee); +router.delete('/edit/:id', isLoggedIn, employeeController.deleteEmployee); + +router.post('/employee/search', isLoggedIn, employeeController.searchEmployee); + + +module.exports = router; \ No newline at end of file diff --git a/src/routes/index.js b/src/routes/index.js new file mode 100644 index 0000000000..d2ebd376a4 --- /dev/null +++ b/src/routes/index.js @@ -0,0 +1,15 @@ +const express = require('express'); +const router = express.Router(); +const mainController = require('../controllers/mainController'); +const { isLoggedIn } = require('../middleware/checkAuth'); + +/** + * App Routes +*/ +router.get('/', mainController.homepage); +router.get('/about', isLoggedIn, mainController.about); + + + + +module.exports = router; \ No newline at end of file diff --git a/src/routes/wage.js b/src/routes/wage.js new file mode 100644 index 0000000000..7c22dadfce --- /dev/null +++ b/src/routes/wage.js @@ -0,0 +1,8 @@ +const express = require('express'); +const router = express.Router(); +const { isLoggedIn } = require('../middleware/checkAuth'); +const wageController = require('../controllers/wageController'); + +router.get('/wage', isLoggedIn, wageController.wage); + +module.exports = router; \ No newline at end of file diff --git a/src/routes/worksite.js b/src/routes/worksite.js new file mode 100644 index 0000000000..0bbe6da93f --- /dev/null +++ b/src/routes/worksite.js @@ -0,0 +1,24 @@ +const express = require('express'); +const router = express.Router(); +const { isLoggedIn } = require('../middleware/checkAuth'); +const worksiteController = require('../controllers/worksiteController'); +const smsController = require('../controllers/smsController') + +router.get('/python', smsController.parseMessage); +router.get('/sms', smsController.getsms); +router.post('/sms', smsController.parseMessage); +router.get('/worksite', isLoggedIn, worksiteController.worksite); +router.get('/worksite/add', isLoggedIn, worksiteController.addWorksite); +router.post('/worksite/post', isLoggedIn, worksiteController.postWorksite); +router.post('/worksite/search', isLoggedIn, worksiteController.searchWorksite); +router.get('/worksite/:id', isLoggedIn, worksiteController.showWorksite); +router.get('/worksite/:id/payment', isLoggedIn, worksiteController.showWorksitePayment); +router.get('/worksite/:id/hire', isLoggedIn, worksiteController.matchToWorksite); +router.post('/worksite/:id/hire/:eid', isLoggedIn, worksiteController.worksiteHireEmployee); +router.get('/worksite/:id/edit', isLoggedIn, worksiteController.editWorksite); +router.put('/worksite/:id/edit', isLoggedIn, worksiteController.putWorksite); +router.delete('/worksite/:id/delete', isLoggedIn, worksiteController.deleteWorksite); +router.delete('/worksite/:id/delete/:eid', isLoggedIn, worksiteController.deleteMatchedEmployee); + + +module.exports = router; \ No newline at end of file diff --git a/src/utils/calcAge.js b/src/utils/calcAge.js new file mode 100644 index 0000000000..9dbf1a48a4 --- /dev/null +++ b/src/utils/calcAge.js @@ -0,0 +1,20 @@ + + +module.exports = function calculateAge(birthNumber) { + const yearPrefix = birthNumber.substring(0, 2) >= '22' ? '19' : '20'; // 2000년 이전과 이후 구분 + const fullYear = yearPrefix + birthNumber.substring(0, 2); + const month = birthNumber.substring(2, 4); + const day = birthNumber.substring(4, 6); + + const today = new Date(); + const birthDate = new Date(`${fullYear}-${month}-${day}`); + + let age = today.getFullYear() - birthDate.getFullYear(); + const m = today.getMonth() - birthDate.getMonth(); + if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) { + age--; + } + + return age; + } + \ No newline at end of file diff --git a/src/utils/utils.js b/src/utils/utils.js new file mode 100644 index 0000000000..52ce92c8ea --- /dev/null +++ b/src/utils/utils.js @@ -0,0 +1,61 @@ +exports.getRandBirth = () => { + const year = 99 - Math.floor(Math.random()*25) + const month = Math.floor(Math.random()*12) + 1 + const date = Math.floor(Math.random()*28) + 1 + let result = `${year}` + if (month < 10) { + result = result + '0' + month + } else { + result = result + month + } + + if (date < 10) { + result = result + 0 + date + } else { + result = result + date + } + result = result + '-1' + + return result +} + +exports.getRandPhone = () => { + const num1 = Math.floor(Math.random()*9000) + 1000 + const num2 = Math.floor(Math.random()*9000) + 1000 + const result = `010-${num1}-${num2}` + return result +} + +exports.getRandAddressAndLocal = () => { + const address = [ + '서울특별시 강남구','서울특별시 강동구','서울특별시 강북구','서울특별시 강서구','서울특별시 관악구','서울특별시 광진구','서울특별시 구로구','서울특별시 금천구','서울특별시 노원구','서울특별시 도봉구','서울특별시 동대문구','서울특별시 동작구','서울특별시 마포구','서울특별시 서대문구','서울특별시 서초구','서울특별시 성동구','서울특별시 성북구','서울특별시 송파구','서울특별시 양천구','서울특별시 영등포구','서울특별시 용산구','서울특별시 은평구','서울특별시 종로구','서울특별시 중구','서울특별시 중랑구', + '경기도 가평군','경기도 고양시','경기도 고양시 덕양구','경기도 고양시 일산서구','경기도 고양시 일산동구','경기도 과천시','경기도 광명시','경기도 광주시','경기도 구리시','경기도 군포시','경기도 김포시','경기도 남양주시','경기도 동두천시','경기도 부천시','경기도 부천시 오정구','경기도 부천시 원미구','경기도 부천시 소사구','경기도 성남시','경기도 성남시 중원구','경기도 성남시 수정구','경기도 성남시 분당구','경기도 수원시','경기도 수원시 장안구','경기도 수원시 권선구','경기도 수원시 팔달구','경기도 수원시 영통구','경기도 시흥시','경기도 안산시','경기도 안산시 단원구','경기도 안산시 상록구','경기도 안성시','경기도 안양시','경기도 안양시 만안구','경기도 안양시 동안구','경기도 양주시','경기도 양평군','경기도 여주시','경기도 연천군','경기도 오산시','경기도 용인시','경기도 용인시 처인구','경기도 용인시 기흥구','경기도 용인시 수지구','경기도 의왕시','경기도 의정부시','경기도 이천시','경기도 파주시','경기도 평택시','경기도 포천시','경기도 하남시','경기도 화성시', + '인천광역시','인천광역시 계양구','인천광역시 남동구','인천광역시 동구','인천광역시 미추홀구','인천광역시 부평구','인천광역시 서구','인천광역시 연수구','인천광역시 중구', + + ] + const locals = [ + // 서울 구는 서울 생략 + '강남구','강동구','강북구','강서구','관악구','광진구','구로구','금천구','노원구','도봉구','동대문구','동작구','마포구','서대문구','서초구','성동구','성북구','송파구','양천구','영등포구','용산구','은평구','종로구','중구','중랑구', + // 경기도 일반 시는 경기도 생략 + '가평군','고양시','고양시 덕양구','고양시 일산서구','고양시 일산동구','과천시','광명시','광주시','구리시','군포시','김포시','남양주시','동두천시','부천시','부천시 오정구','부천시 원미구','부천시 소사구','성남시','성남시 중원구','성남시 수정구','성남시 분당구','수원시','수원시 장안구','수원시 권선구','수원시 팔달구','수원시 영통구','시흥시','안산시','안산시 단원구','안산시 상록구','안성시','안양시','안양시 만안구','안양시 동안구','양주시','양평군','여주시','연천군','오산시','용인시','용인시 처인구','용인시 기흥구','용인시 수지구','의왕시','의정부시','이천시','파주시','평택시','포천시','하남시','화성시', + '인천','인천 계양구','인천 남동구','인천 동구','인천 미추홀구','인천 부평구','인천 서구','인천 연수구','인천 중구', + ] + const index = Math.floor(Math.random()*locals.length) + return {address: address[index], local: locals[index]} +} + +exports.getRandName = () => { + // 이름은 랜덤 생성기로 30개 생성 + const names = ['봉동근', '백지호', '성민웅', '임지석', '황수정', '황다영', '풍은식', '백범석', '허효민', '전혜지', '김성빈', '김수민', '예재민', '전경민', '노영우', '이혜자', '강규희', '안윤희', '정명우', '하상현', '풍인정', '하병옥', '정희원', '조동하', '풍민정', '신정우', '장재선', '문창수', '안재근', '손유원', '고광석', '유정환', '양진미', '유혜준', '노경숙', '류우연', '서광희', '허선화', '배성용', '복성준', '최만희', '백진선', '김보연', '안대현', '정상아', '봉동영', '권명환', '황재윤', '이창호', '서미자', '임태영', '하해성', '탁민혁', '풍영현', '오영철', '손지선', '신소훈', '문준영', '복지현', '안종남'] + return names[Math.floor(Math.random()*names.length)] +} + +exports.getRandWorktype = () => { + // 이름은 랜덤 생성기로 30개 생성 + const worktypes = ['운반', '가구 설치', '가정 이사', '사무실 이전', '내부 이동', '사무 집기', '폐기', '철거'] + return worktypes[Math.floor(Math.random()*worktypes.length)] +} + +// for (i=0; i<10; i = i+1) { +// console.log(randPhone()) +// } diff --git a/src/views/404.ejs b/src/views/404.ejs new file mode 100644 index 0000000000..37f93ab8cf --- /dev/null +++ b/src/views/404.ejs @@ -0,0 +1,15 @@ +
+
+
+ +
+

+ Page not found. +

+ + Explore Notes. +
+ +
+
+
\ No newline at end of file diff --git a/src/views/about.ejs b/src/views/about.ejs new file mode 100644 index 0000000000..6482488a84 --- /dev/null +++ b/src/views/about.ejs @@ -0,0 +1,55 @@ +
+

정산

+
+ + +
+ + + + + + + + + + + + + + + <% worksites.forEach(worksite => { %> + + + + + + + + + + + + + <% }) %> + +
현장명주소소재지급여업무날짜Action
<%= worksite.name %><%= worksite.address %><%= worksite.local %><%= worksite.salary %><%= worksite.worktype %><%= moment(worksite.date).format("YYYY년 MMMM Do a hh:mm") %><%= moment(worksite.end).diff(worksite.date, 'hour') %>시간<%= worksite.hired.length %> / <%= worksite.nopr %> + +
+ + + + + + + + + +
+ +
+
+
+
\ No newline at end of file diff --git a/src/views/dashboard/add.ejs b/src/views/dashboard/add.ejs new file mode 100644 index 0000000000..794abe2c12 --- /dev/null +++ b/src/views/dashboard/add.ejs @@ -0,0 +1,33 @@ +
+ +
+
+ +
+

Add Note

+
+
+
+ + +
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
\ No newline at end of file diff --git a/src/views/dashboard/index.ejs b/src/views/dashboard/index.ejs new file mode 100644 index 0000000000..1912ed32f6 --- /dev/null +++ b/src/views/dashboard/index.ejs @@ -0,0 +1,69 @@ +
+ +
+
+

안녕하세요, <%= userName %>님

+
+ +
+ +
+ <% if (notes.length > 0) { for(var i=0; i < notes.length; i++) { %> + + <% }} else { %> +
+
+ Human pointing hand toward a create button +
+
+

Okay...

+

Let's start with your first note!

+ Create one! +

+
+
+ <% } %> +
+ + <% if(notes.length > 0) { %> + + + <% } %> + +
\ No newline at end of file diff --git a/src/views/dashboard/search.ejs b/src/views/dashboard/search.ejs new file mode 100644 index 0000000000..b3d4044b1c --- /dev/null +++ b/src/views/dashboard/search.ejs @@ -0,0 +1,18 @@ +
+ +
+ <% if(searchResults != '') { %> + <% searchResults.forEach(function (note, index) { %> + + +

<%= note.title %>

+
+ + <% }) %> + <% } else { %> +

No items found.

+ <% } %> + +
+ +
diff --git a/src/views/dashboard/view-note.ejs b/src/views/dashboard/view-note.ejs new file mode 100644 index 0000000000..2dd5374013 --- /dev/null +++ b/src/views/dashboard/view-note.ejs @@ -0,0 +1,65 @@ +
+ +
+
+ +
+

View Note

+ +
+
+
+ + +
+
+ +
+ +
+ +
+ +
+ +
+ +
+ +
+ + + + \ No newline at end of file diff --git a/src/views/employee/addemployee.ejs b/src/views/employee/addemployee.ejs new file mode 100644 index 0000000000..d65b592bef --- /dev/null +++ b/src/views/employee/addemployee.ejs @@ -0,0 +1,76 @@ +
+

작업자

+ +
+
+ +
+
+
+ +
+
+
+ +
+ +
+
+ + + + + + +
+ +
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + +
+
+ +
+ +
+
\ No newline at end of file diff --git a/src/views/employee/editemployee.ejs b/src/views/employee/editemployee.ejs new file mode 100644 index 0000000000..1c8e43ffe0 --- /dev/null +++ b/src/views/employee/editemployee.ejs @@ -0,0 +1,105 @@ +
+

작업자 정보 수정 <%= employee.name %>

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ 마지막 업데이트: <%= new Date(employee.updatedAt).toUTCString() %> + UserId: <%= employee._id %> +
+
+
+ + + + + + +
+ +
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + +
+
+ +
+ + + + +
+
+ + \ No newline at end of file diff --git a/src/views/employee/employee.ejs b/src/views/employee/employee.ejs new file mode 100644 index 0000000000..c9937a0847 --- /dev/null +++ b/src/views/employee/employee.ejs @@ -0,0 +1,103 @@ +
+

작업자

+ +
+ +
+
+ + + +<% messages.forEach(element => { %> + +<% }) %> + +
+ + + + + + + + + + + + + + <% employees.forEach(element => { %> + + + + + + + + + <% }) %> + +
이름성별사는지역주민번호전화번호Action
<%= element.name %><%= element.sex %><%= element.local %><%= element.RRN %><%= element.phonenumber %> + +
+ + + + + + + + + +
+ +
+
+
+
+ +<% if (employees.length > 0) { %> + +<% } %> \ No newline at end of file diff --git a/src/views/employee/searchemployee.ejs b/src/views/employee/searchemployee.ejs new file mode 100644 index 0000000000..725a547e62 --- /dev/null +++ b/src/views/employee/searchemployee.ejs @@ -0,0 +1,35 @@ +

검색

+ +
+ <% if (employees != "") { %> + + + + + + + + + + + + + + + <% employees.forEach(element => { %> + + + + + + + + <% }) %> + +
namesexlocalRRNphonenumber
<%= element.name %><%= element.sex %><%= element.local %><%= element.RRN %><%= element.phonenumber %>
+ + <% } else { %> +

결과를 찾을 수 없습니다

+ + <% } %> +
\ No newline at end of file diff --git a/src/views/employee/viewemployee.ejs b/src/views/employee/viewemployee.ejs new file mode 100644 index 0000000000..decddba3ca --- /dev/null +++ b/src/views/employee/viewemployee.ejs @@ -0,0 +1,158 @@ +<% careers.forEach(career => { %> + +<% }); %> + + + +
+

<%= employee.name %>

+ +
+
+ + +
+
+
+ +
+ +
+
+ + +
+
+ 마지막 업데이트 <%= new Date(employee.updatedAt).toUTCString() %> + UserId: <%= employee._id %> +
+
+ +
+ + + +
+

근무기록

+
+ +
+
+ + + + + + + + + + + + + + <% careers.forEach(career => { %> + + + + + + + + + + <% }) %> + +
현장명주소소재지급여업무날짜근무시간
<%= career.worksite.name %><%= career.worksite.address %><%= career.worksite.local %><%= career.worksite.salary %>원<%= career.worksite.worktype %><%= moment(career.worksite.date).format("YYYY년 MMMM Do a hh:mm") %><%= moment(career.worksite.end).diff(career.worksite.date, 'hour') %>시간
+
+
+ + \ No newline at end of file diff --git a/src/views/index.ejs b/src/views/index.ejs new file mode 100644 index 0000000000..f14fef6fb6 --- /dev/null +++ b/src/views/index.ejs @@ -0,0 +1,17 @@ +
+
+
+ +
+

+ 더 나은 용역 서비스를 제공합니다 +

+

+ PMS는 Node.js, EJS, MongoDB로 만들어진 서비스입니다. +

+ 사용해 보세요 +
+ +
+
+
\ No newline at end of file diff --git a/src/views/layouts/dashboard.ejs b/src/views/layouts/dashboard.ejs new file mode 100644 index 0000000000..e9e5148a82 --- /dev/null +++ b/src/views/layouts/dashboard.ejs @@ -0,0 +1,25 @@ + + + + + + + <%- locals.title %> + + + + + + + + + + <%- include('../partials/header_dashboard.ejs') %> +
+ <%- body %> +
+ <%- include('../partials/footer.ejs') %> + + + + \ No newline at end of file diff --git a/src/views/layouts/front-page.ejs b/src/views/layouts/front-page.ejs new file mode 100644 index 0000000000..209ddf3f61 --- /dev/null +++ b/src/views/layouts/front-page.ejs @@ -0,0 +1,25 @@ + + + + + + + <%- locals.title %> + + + + + + + + + + <%- include('../partials/header.ejs') %> +
+ <%- body %> +
+ <%- include('../partials/footer.ejs') %> + + + + \ No newline at end of file diff --git a/src/views/layouts/main.ejs b/src/views/layouts/main.ejs new file mode 100644 index 0000000000..a9e969c659 --- /dev/null +++ b/src/views/layouts/main.ejs @@ -0,0 +1,31 @@ + + + + + + + <%- locals.title %> + + + + + + + + + + + + + + + + + <%- include('../partials/header_dashboard.ejs') %> +
+ <%- body %> +
+ <%- include('../partials/footer.ejs') %> + + + \ No newline at end of file diff --git a/src/views/partials/footer.ejs b/src/views/partials/footer.ejs new file mode 100644 index 0000000000..b425a17862 --- /dev/null +++ b/src/views/partials/footer.ejs @@ -0,0 +1,16 @@ + + + \ No newline at end of file diff --git a/src/views/partials/header.ejs b/src/views/partials/header.ejs new file mode 100644 index 0000000000..7cbacd79ed --- /dev/null +++ b/src/views/partials/header.ejs @@ -0,0 +1,12 @@ +
+
+ + PMS HR SERVICE + + + +
+
\ No newline at end of file diff --git a/src/views/partials/header_dashboard.ejs b/src/views/partials/header_dashboard.ejs new file mode 100644 index 0000000000..bfe8b29cf5 --- /dev/null +++ b/src/views/partials/header_dashboard.ejs @@ -0,0 +1,21 @@ +
+
+ + PMS HR SERVICE + + + + +
+ Logout +
+ +
+ + + \ No newline at end of file diff --git a/src/views/worksite/addworksite.ejs b/src/views/worksite/addworksite.ejs new file mode 100644 index 0000000000..0e8ba18f06 --- /dev/null +++ b/src/views/worksite/addworksite.ejs @@ -0,0 +1,110 @@ +
+

작업현장 추가

+ +
+
+ +
+
+
+ +
+
+
+ +
+ +
+
+ +
+ +
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ +
+ + +
+ +
+ + +
+ +
+ +
+
+ +
+ + +
+
+
+
+
+ +
+ +
+ + 시간 +
+
+
+ +
+
+ + +
+
+ +
+ +
+
\ No newline at end of file diff --git a/src/views/worksite/editWorksite.ejs b/src/views/worksite/editWorksite.ejs new file mode 100644 index 0000000000..57ddbcfa0e --- /dev/null +++ b/src/views/worksite/editWorksite.ejs @@ -0,0 +1,108 @@ +
+

<%= worksite.name %>

+ +
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+ +
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + +
+ +
+ +
+ + +
+
+
+ +
+ +
+ + +
+ +
+ + +
+ +
+ +
+
+ +
+ + +
+
+
+
+
+ +
+ +
+ + 시간 +
+
+
+ +
+
+ + +
+
+ +
+ +
+
\ No newline at end of file diff --git a/src/views/worksite/matchToWorksite.ejs b/src/views/worksite/matchToWorksite.ejs new file mode 100644 index 0000000000..dcc9dc1f69 --- /dev/null +++ b/src/views/worksite/matchToWorksite.ejs @@ -0,0 +1,181 @@ +<% employees.forEach(employee => { %> + + + +<% }); %> + + +
+

<%= worksite.name %>

+
+ +
+ +
+
+ + +
+
+ 마지막 업데이트: <%= moment(worksite.updatedAt).format("YYYY년 MMMM Do (dd) a hh:mm") %> (<%= moment(worksite.updatedAt).fromNow() %>)
+ UserId: <%= worksite._id %> +
+
+ +
+
+ + + + +
+ +
+

인원수 : <%= worksite.hired.length %> / <%= worksite.nopr %>

+
+ + +
+
+ + +
+ + + + + + + + + + + + + + + + + + <% employees.forEach(employee => { %> + + + + + + + + + + + + + + <% }) %> + + +
이름성별전화번호거주지나이주민번호Action
<%= employee.name %><%= employee.sex %><%= employee.phonenumber %><%= employee.local %><%= calcAge(employee.RRN) %><%= employee.RRN %> + + + + + + + + + + + + +
+ +
+ diff --git a/src/views/worksite/worksite.ejs b/src/views/worksite/worksite.ejs new file mode 100644 index 0000000000..d6f791ca38 --- /dev/null +++ b/src/views/worksite/worksite.ejs @@ -0,0 +1,147 @@ +<% worksites.forEach(function(worksite) { %> + + + +<% }); %> + +
+
+

등록된 현장 목록

+ +
+ +
+
+ +
+
+
+ + +
+
+
+ +
+ + + +<% messages.forEach(element => { %> + +<% }) %> + +
+
+ + + + + + + + + + + + + + + + + <% worksites.forEach(worksite => { %> + + + + + + + + + + + + + <% }) %> + +
현장명주소소재지급여업무날짜근무시간필요인원
<%= worksite.name %><%= worksite.address %><%= worksite.local %><%= worksite.salary %><%= worksite.worktype %><%= moment(worksite.date).format("YYYY년 MMMM Do a hh:mm") %><%= moment(worksite.end).diff(worksite.date, 'hour') %>시간<%= worksite.hired.length %> / <%= worksite.nopr %>
+
+
+ + + + + + + \ No newline at end of file diff --git a/src/views/worksite/worksiteDetail.ejs b/src/views/worksite/worksiteDetail.ejs new file mode 100644 index 0000000000..3e1608a850 --- /dev/null +++ b/src/views/worksite/worksiteDetail.ejs @@ -0,0 +1,259 @@ + + +<% worksite.hired.forEach(employee => { %> + + + +<% }); %> + + +
+

<%= worksite.name %>

+
+ +
+ +
+
+ + +
+
+ 마지막 업데이트: <%= moment(worksite.updatedAt).format("YYYY년 MMMM Do (dd) a hh:mm") %> (<%= moment(worksite.updatedAt).fromNow() %>)
+ UserId: <%= worksite.user %> +
+
+ +
+
+ + + +
+ + +
+

인원수 : <%= worksite.hired.length %> / <%= worksite.nopr %>

+
+ + + +
+
+ +
+ + + + + + + + + + + + + + + + + <% worksite.hired.forEach(employee => { %> + + + + + + + + + + + <% }) %> + + +
이름성별전화번호거주지나이주민번호Action
<%= employee.name %><%= employee.sex %><%= employee.phonenumber %><%= employee.local %><%= calcAge(employee.RRN) %><%= employee.RRN %> +
+ +
+
+ + + + + + + +
+
+ +
+ + \ No newline at end of file diff --git a/src/views/worksite/worksitePayments.ejs b/src/views/worksite/worksitePayments.ejs new file mode 100644 index 0000000000..d4825aa262 --- /dev/null +++ b/src/views/worksite/worksitePayments.ejs @@ -0,0 +1,147 @@ +<% worksite.hired.forEach(employee => { %> + + + +<% }); %> + + +
+

정산

+
+ +
+ +
+
+ + +
+
+ 마지막 업데이트: <%= moment(worksite.updatedAt).format("YYYY년 MMMM Do (dd) a hh:mm") %> (<%= moment(worksite.updatedAt).fromNow() %>)
+ UserId: <%= worksite.user %> +
+
+ +
+
+
+ +
+
+
<%= worksite.name %>
+
+
    +
  • <%= worksite.address %>
  • +
  • <%= moment(worksite.date).format("MMMM Do (dd) a hh:mm") %> / <%= moment(worksite.end).diff(worksite.date, 'hours') %>시간 근무
  • +
  • 일당 <%= worksite.salary %>원
  • +
  • <%= worksite.worksitenote %>
  • +
+
+
+
+

예산 : 720000원


+

임금 : 160000원


+

이윤 : 80000원

+
+
+
+
+ +
+

인원수 : <%= worksite.hired.length %> / <%= worksite.nopr %>

+
+ + +
+
+ +
+ + + + + + + + + + + + + + + + + + + <% worksite.hired.forEach(employee => { %> + + + + + + + + + + + + + + + + + + + + + <% }) %> + + +
이름성별전화번호거주지나이주민번호임금지급
<%= employee.name %><%= employee.sex %><%= employee.phonenumber %><%= employee.local %><%= calcAge(employee.RRN) %><%= employee.RRN %>지급완료
+ +
\ No newline at end of file