nextrec 0.5.2__tar.gz → 0.5.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {nextrec-0.5.2 → nextrec-0.5.4}/.gitignore +3 -1
- {nextrec-0.5.2 → nextrec-0.5.4}/PKG-INFO +4 -4
- {nextrec-0.5.2 → nextrec-0.5.4}/README.md +3 -3
- {nextrec-0.5.2 → nextrec-0.5.4}/README_en.md +3 -3
- {nextrec-0.5.2 → nextrec-0.5.4}/docs/rtd/conf.py +1 -1
- nextrec-0.5.4/nextrec/__version__.py +1 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/basic/model.py +39 -17
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/cli.py +2 -7
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/feature_config.yaml +13 -13
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/predict_config.yaml +0 -2
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/predict_config_template.yaml +0 -4
- {nextrec-0.5.2 → nextrec-0.5.4}/pyproject.toml +1 -1
- nextrec-0.5.4/ui/nextrec-ui/Dockerfile +11 -0
- nextrec-0.5.4/ui/nextrec-ui/docker-compose.yml +7 -0
- nextrec-0.5.4/ui/nextrec-ui/index.html +16 -0
- nextrec-0.5.4/ui/nextrec-ui/src/App.vue +152 -0
- nextrec-0.5.4/ui/nextrec-ui/src/assets/logo.png +0 -0
- nextrec-0.5.4/ui/nextrec-ui/src/main.js +6 -0
- nextrec-0.5.4/ui/nextrec-ui/src/pages/FeaturePage.vue +254 -0
- nextrec-0.5.4/ui/nextrec-ui/src/pages/ModelPage.vue +276 -0
- nextrec-0.5.4/ui/nextrec-ui/src/pages/PredictPage.vue +137 -0
- nextrec-0.5.4/ui/nextrec-ui/src/pages/TrainPage.vue +377 -0
- nextrec-0.5.4/ui/nextrec-ui/src/presets/afm.yaml +10 -0
- nextrec-0.5.4/ui/nextrec-ui/src/presets/apg.yaml +14 -0
- nextrec-0.5.4/ui/nextrec-ui/src/presets/autoint.yaml +13 -0
- nextrec-0.5.4/ui/nextrec-ui/src/presets/cross_stitch.yaml +25 -0
- nextrec-0.5.4/ui/nextrec-ui/src/presets/dcn.yaml +13 -0
- nextrec-0.5.4/ui/nextrec-ui/src/presets/deepfm.yaml +12 -0
- nextrec-0.5.4/ui/nextrec-ui/src/presets/din.yaml +18 -0
- nextrec-0.5.4/ui/nextrec-ui/src/presets/escm.yaml +21 -0
- nextrec-0.5.4/ui/nextrec-ui/src/presets/esmm.yaml +16 -0
- nextrec-0.5.4/ui/nextrec-ui/src/presets/fibinet.yaml +16 -0
- nextrec-0.5.4/ui/nextrec-ui/src/presets/fm.yaml +8 -0
- nextrec-0.5.4/ui/nextrec-ui/src/presets/hmoe.yaml +35 -0
- nextrec-0.5.4/ui/nextrec-ui/src/presets/masknet.yaml +17 -0
- nextrec-0.5.4/ui/nextrec-ui/src/presets/mmoe.yaml +22 -0
- nextrec-0.5.4/ui/nextrec-ui/src/presets/pepnet.yaml +26 -0
- nextrec-0.5.4/ui/nextrec-ui/src/presets/ple.yaml +33 -0
- nextrec-0.5.4/ui/nextrec-ui/src/presets/pnn.yaml +14 -0
- nextrec-0.5.4/ui/nextrec-ui/src/presets/poso.yaml +37 -0
- nextrec-0.5.4/ui/nextrec-ui/src/presets/share_bottom.yaml +20 -0
- nextrec-0.5.4/ui/nextrec-ui/src/presets/widedeep.yaml +12 -0
- nextrec-0.5.4/ui/nextrec-ui/src/presets/xdeepfm.yaml +14 -0
- nextrec-0.5.4/ui/nextrec-ui/src/router/index.js +20 -0
- nextrec-0.5.4/ui/nextrec-ui/src/store/configStore.js +191 -0
- nextrec-0.5.4/ui/nextrec-ui/src/styles.css +339 -0
- nextrec-0.5.4/ui/nextrec-ui/src/utils/buildTrainConfig.js +65 -0
- nextrec-0.5.4/ui/nextrec-ui/src/utils/download.js +11 -0
- nextrec-0.5.4/ui/nextrec-ui/src/utils/yaml.js +16 -0
- nextrec-0.5.4/ui/nextrec-ui/src/utils/zip.js +17 -0
- nextrec-0.5.4/ui/nextrec-ui/vite.config.js +9 -0
- nextrec-0.5.2/nextrec/__version__.py +0 -1
- {nextrec-0.5.2 → nextrec-0.5.4}/.github/workflows/publish.yml +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/.github/workflows/tests.yml +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/.readthedocs.yaml +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/CODE_OF_CONDUCT.md +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/CONTRIBUTING.md +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/LICENSE +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/MANIFEST.in +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/assets/Feature Configuration.png +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/assets/Model Parameters.png +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/assets/Training Configuration.png +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/assets/Training logs.png +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/assets/logo.png +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/assets/mmoe_tutorial.png +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/assets/nextrec_diagram.png +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/assets/test data.png +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/dataset/ctcvr_task.csv +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/dataset/ecommerce_task.csv +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/dataset/match_task.csv +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/dataset/movielens_100k.csv +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/dataset/multitask_task.csv +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/dataset/ranking_task.csv +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/docs/en/Getting started guide.md +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/docs/rtd/Makefile +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/docs/rtd/index.md +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/docs/rtd/make.bat +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/docs/rtd/modules.rst +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/docs/rtd/nextrec.basic.rst +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/docs/rtd/nextrec.data.rst +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/docs/rtd/nextrec.loss.rst +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/docs/rtd/nextrec.rst +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/docs/rtd/nextrec.utils.rst +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/docs/rtd/requirements.txt +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/docs/zh//345/277/253/351/200/237/344/270/212/346/211/213.md" +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/__init__.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/basic/__init__.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/basic/activation.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/basic/asserts.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/basic/callback.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/basic/features.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/basic/heads.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/basic/layers.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/basic/loggers.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/basic/metrics.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/basic/session.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/basic/summary.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/data/__init__.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/data/batch_utils.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/data/data_processing.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/data/data_utils.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/data/dataloader.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/data/preprocessor.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/loss/__init__.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/loss/grad_norm.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/loss/listwise.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/loss/pairwise.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/loss/pointwise.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/generative/__init__.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/generative/tiger.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/multi_task/[pre]aitm.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/multi_task/[pre]snr_trans.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/multi_task/__init__.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/multi_task/apg.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/multi_task/cross_stitch.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/multi_task/escm.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/multi_task/esmm.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/multi_task/hmoe.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/multi_task/mmoe.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/multi_task/pepnet.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/multi_task/ple.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/multi_task/poso.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/multi_task/share_bottom.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/ranking/__init__.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/ranking/afm.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/ranking/autoint.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/ranking/dcn.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/ranking/dcn_v2.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/ranking/deepfm.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/ranking/dien.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/ranking/din.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/ranking/eulernet.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/ranking/ffm.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/ranking/fibinet.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/ranking/fm.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/ranking/lr.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/ranking/masknet.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/ranking/pnn.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/ranking/widedeep.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/ranking/xdeepfm.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/representation/__init__.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/representation/rqvae.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/retrieval/__init__.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/retrieval/dssm.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/retrieval/dssm_v2.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/retrieval/mind.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/retrieval/sdm.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/retrieval/youtube_dnn.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/sequential/hstu.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/tree_base/__init__.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/tree_base/base.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/tree_base/catboost.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/tree_base/lightgbm.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/models/tree_base/xgboost.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/utils/__init__.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/utils/config.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/utils/console.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/utils/data.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/utils/embedding.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/utils/loss.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/utils/model.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/utils/onnx_utils.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/utils/torch_utils.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec/utils/types.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/NextRec-CLI.md +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/NextRec-CLI_zh.md +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/model_configs/afm.yaml +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/model_configs/apg.yaml +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/model_configs/autoint.yaml +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/model_configs/cross_stitch.yaml +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/model_configs/dcn.yaml +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/model_configs/deepfm.yaml +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/model_configs/din.yaml +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/model_configs/escm.yaml +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/model_configs/esmm.yaml +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/model_configs/fibinet.yaml +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/model_configs/fm.yaml +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/model_configs/hmoe.yaml +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/model_configs/masknet.yaml +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/model_configs/mmoe.yaml +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/model_configs/pepnet.yaml +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/model_configs/ple.yaml +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/model_configs/pnn.yaml +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/model_configs/poso.yaml +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/model_configs/share_bottom.yaml +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/model_configs/widedeep.yaml +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/model_configs/xdeepfm.yaml +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/train_config.yaml +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/nextrec_cli_preset/train_config_template.yaml +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/pytest.ini +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/requirements.txt +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/scripts/format_code.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/scripts/profile_predict.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/test/__init__.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/test/conftest.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/test/helpers.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/test/run_tests.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/test/test_base_model_regularization.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/test/test_generative_models.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/test/test_layers.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/test/test_losses.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/test/test_match_models.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/test/test_multitask_models.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/test/test_onnx_models.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/test/test_preprocessor.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/test/test_ranking_models.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/test/test_utils_console.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/test/test_utils_data.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/test/test_utils_embedding.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/test_requirements.txt +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/tutorials/distributed/example_distributed_training.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/tutorials/distributed/example_distributed_training_large_dataset.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/tutorials/example_match.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/tutorials/example_multitask.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/tutorials/example_onnx.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/tutorials/example_ranking_din.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/tutorials/example_tree.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/tutorials/movielen_match_dssm.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/tutorials/movielen_ranking_deepfm.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/tutorials/notebooks/en/Build semantic ID with RQ-VAE.ipynb +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/tutorials/notebooks/en/Hands on dataprocessor.ipynb +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/tutorials/notebooks/en/Hands on nextrec.ipynb +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/tutorials/notebooks/zh//344/275/277/347/224/250RQ-VAE/346/236/204/345/273/272/350/257/255/344/271/211ID.ipynb" +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/tutorials/notebooks/zh//345/246/202/344/275/225/344/275/277/347/224/250DataProcessor/350/277/233/350/241/214/351/242/204/345/244/204/347/220/206.ipynb" +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/tutorials/notebooks/zh//345/277/253/351/200/237/345/205/245/351/227/250nextrec.ipynb" +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/tutorials/run_all_match_models.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/tutorials/run_all_multitask_models.py +0 -0
- {nextrec-0.5.2 → nextrec-0.5.4}/tutorials/run_all_ranking_models.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: nextrec
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.4
|
|
4
4
|
Summary: A comprehensive recommendation library with match, ranking, and multi-task learning models
|
|
5
5
|
Project-URL: Homepage, https://github.com/zerolovesea/NextRec
|
|
6
6
|
Project-URL: Repository, https://github.com/zerolovesea/NextRec
|
|
@@ -73,7 +73,7 @@ Description-Content-Type: text/markdown
|
|
|
73
73
|

|
|
74
74
|

|
|
75
75
|

|
|
76
|
-

|
|
77
77
|
[](https://deepwiki.com/zerolovesea/NextRec)
|
|
78
78
|
|
|
79
79
|
中文文档 | [English Version](README_en.md)
|
|
@@ -259,11 +259,11 @@ nextrec --mode=predict --predict_config=path/to/predict_config.yaml
|
|
|
259
259
|
|
|
260
260
|
预测结果固定保存到 `{checkpoint_path}/predictions/{name}.{save_data_format}`。
|
|
261
261
|
|
|
262
|
-
> 截止当前版本0.5.
|
|
262
|
+
> 截止当前版本0.5.4,NextRec CLI支持单机训练,分布式训练相关功能尚在开发中。
|
|
263
263
|
|
|
264
264
|
## 兼容平台
|
|
265
265
|
|
|
266
|
-
当前最新版本为0.5.
|
|
266
|
+
当前最新版本为0.5.4,所有模型和测试代码均已在以下平台通过验证,如果开发者在使用中遇到兼容问题,请在issue区提出错误报告及系统版本:
|
|
267
267
|
|
|
268
268
|
| 平台 | 配置 |
|
|
269
269
|
|------|------|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|

|
|
9
9
|

|
|
10
10
|

|
|
11
|
-

|
|
12
12
|
[](https://deepwiki.com/zerolovesea/NextRec)
|
|
13
13
|
|
|
14
14
|
中文文档 | [English Version](README_en.md)
|
|
@@ -194,11 +194,11 @@ nextrec --mode=predict --predict_config=path/to/predict_config.yaml
|
|
|
194
194
|
|
|
195
195
|
预测结果固定保存到 `{checkpoint_path}/predictions/{name}.{save_data_format}`。
|
|
196
196
|
|
|
197
|
-
> 截止当前版本0.5.
|
|
197
|
+
> 截止当前版本0.5.4,NextRec CLI支持单机训练,分布式训练相关功能尚在开发中。
|
|
198
198
|
|
|
199
199
|
## 兼容平台
|
|
200
200
|
|
|
201
|
-
当前最新版本为0.5.
|
|
201
|
+
当前最新版本为0.5.4,所有模型和测试代码均已在以下平台通过验证,如果开发者在使用中遇到兼容问题,请在issue区提出错误报告及系统版本:
|
|
202
202
|
|
|
203
203
|
| 平台 | 配置 |
|
|
204
204
|
|------|------|
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|

|
|
9
9
|

|
|
10
10
|

|
|
11
|
-

|
|
12
12
|
[](https://deepwiki.com/zerolovesea/NextRec)
|
|
13
13
|
|
|
14
14
|
English | [中文文档](README.md)
|
|
@@ -197,11 +197,11 @@ nextrec --mode=predict --predict_config=path/to/predict_config.yaml
|
|
|
197
197
|
|
|
198
198
|
Prediction outputs are saved under `{checkpoint_path}/predictions/{name}.{save_data_format}`.
|
|
199
199
|
|
|
200
|
-
> As of version 0.5.
|
|
200
|
+
> As of version 0.5.4, NextRec CLI supports single-machine training; distributed training features are currently under development.
|
|
201
201
|
|
|
202
202
|
## Platform Compatibility
|
|
203
203
|
|
|
204
|
-
The current version is 0.5.
|
|
204
|
+
The current version is 0.5.4. All models and test code have been validated on the following platforms. If you encounter compatibility issues, please report them in the issue tracker with your system version:
|
|
205
205
|
|
|
206
206
|
| Platform | Configuration |
|
|
207
207
|
|----------|---------------|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.5.4"
|
|
@@ -1707,7 +1707,7 @@ class BaseModel(SummarySet, FeatureSet, nn.Module):
|
|
|
1707
1707
|
if (
|
|
1708
1708
|
save_path is not None
|
|
1709
1709
|
and not return_dataframe
|
|
1710
|
-
and isinstance(data, (str, os.PathLike))
|
|
1710
|
+
and isinstance(data, (str, os.PathLike, DataLoader))
|
|
1711
1711
|
):
|
|
1712
1712
|
if num_processes > 1 and not isinstance(data, (str, os.PathLike)):
|
|
1713
1713
|
raise ValueError(
|
|
@@ -2099,6 +2099,7 @@ class BaseModel(SummarySet, FeatureSet, nn.Module):
|
|
|
2099
2099
|
]
|
|
2100
2100
|
|
|
2101
2101
|
ctx = mp.get_context("spawn")
|
|
2102
|
+
error_queue = ctx.SimpleQueue()
|
|
2102
2103
|
processes = []
|
|
2103
2104
|
for rank in range(num_processes):
|
|
2104
2105
|
process = ctx.Process(
|
|
@@ -2115,6 +2116,7 @@ class BaseModel(SummarySet, FeatureSet, nn.Module):
|
|
|
2115
2116
|
processor,
|
|
2116
2117
|
rank,
|
|
2117
2118
|
num_processes,
|
|
2119
|
+
error_queue,
|
|
2118
2120
|
),
|
|
2119
2121
|
)
|
|
2120
2122
|
process.start()
|
|
@@ -2127,8 +2129,18 @@ class BaseModel(SummarySet, FeatureSet, nn.Module):
|
|
|
2127
2129
|
|
|
2128
2130
|
for process in processes:
|
|
2129
2131
|
if process.exitcode not in (0, None):
|
|
2132
|
+
errors = []
|
|
2133
|
+
try:
|
|
2134
|
+
while not error_queue.empty():
|
|
2135
|
+
errors.append(error_queue.get_nowait())
|
|
2136
|
+
except Exception:
|
|
2137
|
+
pass
|
|
2138
|
+
error_text = (
|
|
2139
|
+
"\n\n".join(errors) if errors else "No worker traceback captured."
|
|
2140
|
+
)
|
|
2130
2141
|
raise RuntimeError(
|
|
2131
|
-
"[BaseModel-predict-streaming Error] One or more inference processes failed
|
|
2142
|
+
"[BaseModel-predict-streaming Error] One or more inference processes failed.\n"
|
|
2143
|
+
+ error_text
|
|
2132
2144
|
)
|
|
2133
2145
|
# Merge part files
|
|
2134
2146
|
existing_parts = [p for p in part_paths if p.exists()]
|
|
@@ -2827,22 +2839,32 @@ def predict_streaming_worker(
|
|
|
2827
2839
|
processor: Any | None,
|
|
2828
2840
|
shard_rank: int,
|
|
2829
2841
|
shard_count: int,
|
|
2842
|
+
error_queue: "mp.SimpleQueue[str] | None" = None,
|
|
2830
2843
|
) -> None:
|
|
2831
|
-
|
|
2832
|
-
|
|
2833
|
-
|
|
2834
|
-
|
|
2835
|
-
|
|
2836
|
-
|
|
2837
|
-
|
|
2838
|
-
|
|
2839
|
-
|
|
2840
|
-
|
|
2841
|
-
|
|
2842
|
-
|
|
2843
|
-
|
|
2844
|
-
|
|
2845
|
-
|
|
2844
|
+
try:
|
|
2845
|
+
model.eval()
|
|
2846
|
+
model.predict_streaming(
|
|
2847
|
+
data=data_path,
|
|
2848
|
+
batch_size=batch_size,
|
|
2849
|
+
save_path=save_path,
|
|
2850
|
+
save_format=save_format,
|
|
2851
|
+
stream_chunk_size=stream_chunk_size,
|
|
2852
|
+
return_dataframe=False,
|
|
2853
|
+
num_workers=num_workers,
|
|
2854
|
+
prefetch_factor=prefetch_factor,
|
|
2855
|
+
processor=processor,
|
|
2856
|
+
num_processes=1,
|
|
2857
|
+
shard_rank=shard_rank,
|
|
2858
|
+
shard_count=shard_count,
|
|
2859
|
+
)
|
|
2860
|
+
except Exception:
|
|
2861
|
+
if error_queue is not None:
|
|
2862
|
+
import traceback
|
|
2863
|
+
|
|
2864
|
+
error_queue.put(
|
|
2865
|
+
f"[PredictWorker Error] rank={shard_rank}\n{traceback.format_exc()}"
|
|
2866
|
+
)
|
|
2867
|
+
raise
|
|
2846
2868
|
|
|
2847
2869
|
|
|
2848
2870
|
class BaseMatchModel(BaseModel):
|
|
@@ -25,7 +25,7 @@ import resource
|
|
|
25
25
|
import sys
|
|
26
26
|
import time
|
|
27
27
|
from pathlib import Path
|
|
28
|
-
from typing import Any, Dict
|
|
28
|
+
from typing import Any, Dict
|
|
29
29
|
|
|
30
30
|
import pandas as pd
|
|
31
31
|
|
|
@@ -592,12 +592,7 @@ def predict_model(predict_config_path: str) -> None:
|
|
|
592
592
|
model_file, map_location=predict_cfg.get("device", "cpu"), verbose=True
|
|
593
593
|
)
|
|
594
594
|
|
|
595
|
-
|
|
596
|
-
if predict_cfg.get("id_column"):
|
|
597
|
-
id_columns = [predict_cfg["id_column"]]
|
|
598
|
-
model.id_columns = id_columns
|
|
599
|
-
|
|
600
|
-
effective_id_columns = id_columns or model.id_columns
|
|
595
|
+
effective_id_columns = model.id_columns
|
|
601
596
|
log_cli_section("Features")
|
|
602
597
|
log_kv_lines(
|
|
603
598
|
[
|
|
@@ -7,44 +7,44 @@
|
|
|
7
7
|
dense:
|
|
8
8
|
user_active_days_7:
|
|
9
9
|
processor_config: {type: numeric, scaler: standard}
|
|
10
|
-
embedding_config: {
|
|
10
|
+
embedding_config: {input_dim: 1, proj_dim: 8, use_projection: false}
|
|
11
11
|
user_ctr:
|
|
12
12
|
processor_config: {type: numeric, scaler: standard}
|
|
13
|
-
embedding_config: {
|
|
13
|
+
embedding_config: {input_dim: 1, proj_dim: 8, use_projection: false}
|
|
14
14
|
item_price:
|
|
15
15
|
processor_config: {type: numeric, scaler: standard}
|
|
16
|
-
embedding_config: {
|
|
16
|
+
embedding_config: {input_dim: 1, proj_dim: 8, use_projection: false}
|
|
17
17
|
item_popularity:
|
|
18
18
|
processor_config: {type: numeric, scaler: standard}
|
|
19
|
-
embedding_config: {
|
|
19
|
+
embedding_config: {input_dim: 1, proj_dim: 8, use_projection: false}
|
|
20
20
|
time_since_last_click:
|
|
21
21
|
processor_config: {type: numeric, scaler: standard}
|
|
22
|
-
embedding_config: {
|
|
22
|
+
embedding_config: {input_dim: 1, proj_dim: 8, use_projection: false}
|
|
23
23
|
|
|
24
24
|
sparse:
|
|
25
25
|
user_id:
|
|
26
26
|
processor_config: {type: sparse, encode_method: hash, hash_size: 100000, min_freq: 1}
|
|
27
|
-
embedding_config: {name: user_id, embedding_dim: 8, padding_idx: 0}
|
|
27
|
+
embedding_config: {name: user_id, embedding_name: user_id, embedding_dim: 8, padding_idx: 0}
|
|
28
28
|
item:
|
|
29
29
|
processor_config: {type: sparse, encode_method: hash, hash_size: 5000, min_freq: 1}
|
|
30
|
-
embedding_config: {name: item, embedding_dim: 8, padding_idx: 0}
|
|
30
|
+
embedding_config: {name: item, embedding_name: item, embedding_dim: 8, padding_idx: 0}
|
|
31
31
|
gender:
|
|
32
32
|
processor_config: {type: sparse, encode_method: hash, hash_size: 10, min_freq: 1}
|
|
33
|
-
embedding_config: {name: gender, embedding_dim: 8, padding_idx: 0}
|
|
33
|
+
embedding_config: {name: gender, embedding_name: gender, embedding_dim: 8, padding_idx: 0}
|
|
34
34
|
city:
|
|
35
35
|
processor_config: {type: sparse, encode_method: hash, hash_size: 20, min_freq: 1}
|
|
36
|
-
embedding_config: {name: city, embedding_dim: 8, padding_idx: 0}
|
|
36
|
+
embedding_config: {name: city, embedding_name: city, embedding_dim: 8, padding_idx: 0}
|
|
37
37
|
device:
|
|
38
38
|
processor_config: {type: sparse, encode_method: hash, hash_size: 10, min_freq: 1}
|
|
39
|
-
embedding_config: {name: device, embedding_dim: 8, padding_idx: 0}
|
|
39
|
+
embedding_config: {name: device, embedding_name: device, embedding_dim: 8, padding_idx: 0}
|
|
40
40
|
channel:
|
|
41
41
|
processor_config: {type: sparse, encode_method: hash, hash_size: 10, min_freq: 1}
|
|
42
|
-
embedding_config: {name: channel, embedding_dim: 8, padding_idx: 0}
|
|
42
|
+
embedding_config: {name: channel, embedding_name: channel, embedding_dim: 8, padding_idx: 0}
|
|
43
43
|
age_bucket:
|
|
44
44
|
processor_config: {type: sparse, encode_method: hash, hash_size: 20, min_freq: 1}
|
|
45
|
-
embedding_config: {name: age_bucket, embedding_dim: 8, padding_idx: 0}
|
|
45
|
+
embedding_config: {name: age_bucket, embedding_name: age_bucket, embedding_dim: 8, padding_idx: 0}
|
|
46
46
|
|
|
47
47
|
sequence:
|
|
48
48
|
hist_item_seq:
|
|
49
49
|
processor_config: {type: sequence, encode_method: hash, hash_size: 5000, min_freq: 1, max_len: 30, pad_value: 0, truncate: post, separator: ','}
|
|
50
|
-
embedding_config: {name: hist_item_seq, vocab_size: 5000, max_len: 30, combiner: mean, embedding_dim: 8, padding_idx: 0
|
|
50
|
+
embedding_config: {name: hist_item_seq, embedding_name: hist_item_seq, vocab_size: 5000, max_len: 30, combiner: mean, embedding_dim: 8, padding_idx: 0}
|
|
@@ -6,8 +6,6 @@ predict:
|
|
|
6
6
|
data_path: ../dataset/ctcvr_task.csv
|
|
7
7
|
source_data_format: csv # Input data format: csv, parquet, etc.
|
|
8
8
|
# Use 'auto' for automatic detection
|
|
9
|
-
id_column: user_id # Column name for user/sample IDs
|
|
10
|
-
# Will be included in prediction output
|
|
11
9
|
name: pred # Output filename (without extension) or absolute path
|
|
12
10
|
# Filename -> {checkpoint_path}/predictions/{name}.{save_data_format}
|
|
13
11
|
# Absolute path -> saved directly (extension auto-added if missing)
|
|
@@ -31,10 +31,6 @@ predict:
|
|
|
31
31
|
source_data_format: parquet # Input data format: csv, parquet, etc.
|
|
32
32
|
# Use 'auto' for automatic detection
|
|
33
33
|
|
|
34
|
-
# ----- Identification Settings -----
|
|
35
|
-
id_column: user_id # Column name for user/sample IDs
|
|
36
|
-
# Will be included in prediction output
|
|
37
|
-
|
|
38
34
|
# ----- Output Settings -----
|
|
39
35
|
name: pred # Output filename (without extension) or absolute path
|
|
40
36
|
# Filename -> {checkpoint_path}/predictions/{name}.{save_data_format}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="zh">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>NextRec Studio</title>
|
|
7
|
+
<link rel="icon" type="image/png" href="/src/assets/logo.png" />
|
|
8
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
9
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
10
|
+
<link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap" rel="stylesheet">
|
|
11
|
+
</head>
|
|
12
|
+
<body>
|
|
13
|
+
<div id="app"></div>
|
|
14
|
+
<script type="module" src="/src/main.js"></script>
|
|
15
|
+
</body>
|
|
16
|
+
</html>
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
<template>
|
|
2
|
+
<div class="app-shell">
|
|
3
|
+
<aside class="sidebar" ref="sidebarRef">
|
|
4
|
+
<div class="brand">
|
|
5
|
+
<img :src="logoUrl" alt="NextRec Logo" />
|
|
6
|
+
</div>
|
|
7
|
+
<nav class="nav">
|
|
8
|
+
<RouterLink to="/train">{{ t('训练配置', 'Training') }}</RouterLink>
|
|
9
|
+
<RouterLink to="/feature">{{ t('特征配置', 'Features') }}</RouterLink>
|
|
10
|
+
<RouterLink to="/model">{{ t('模型配置', 'Models') }}</RouterLink>
|
|
11
|
+
<RouterLink to="/predict">{{ t('推理配置', 'Prediction') }}</RouterLink>
|
|
12
|
+
</nav>
|
|
13
|
+
<div class="lang-switch">
|
|
14
|
+
<button class="lang-pill" :class="{ active: store.ui.lang === 'zh' }" @click="store.ui.lang = 'zh'">中文</button>
|
|
15
|
+
<button class="lang-pill" :class="{ active: store.ui.lang === 'en' }" @click="store.ui.lang = 'en'">EN</button>
|
|
16
|
+
</div>
|
|
17
|
+
</aside>
|
|
18
|
+
<main class="main" ref="mainRef">
|
|
19
|
+
<div class="hero">
|
|
20
|
+
<h1>NextRec Studio</h1>
|
|
21
|
+
<p>为训练、特征、模型、推理提供标准化的 YAML 文件配置。</p>
|
|
22
|
+
<div v-if="bundleError" class="alert">{{ bundleError }}</div>
|
|
23
|
+
<div class="actions">
|
|
24
|
+
<button class="primary" @click="downloadBundle" :disabled="!!bundleError">打包下载 4 个 YAML</button>
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
<RouterView />
|
|
28
|
+
</main>
|
|
29
|
+
</div>
|
|
30
|
+
</template>
|
|
31
|
+
|
|
32
|
+
<script setup>
|
|
33
|
+
import { computed, ref, watch } from 'vue';
|
|
34
|
+
import { RouterLink, RouterView } from 'vue-router';
|
|
35
|
+
import { store } from './store/configStore.js';
|
|
36
|
+
import { dumpYaml, parseYaml } from './utils/yaml.js';
|
|
37
|
+
import { buildTrainConfig } from './utils/buildTrainConfig.js';
|
|
38
|
+
import { downloadZip } from './utils/zip.js';
|
|
39
|
+
import logoUrl from './assets/logo.png';
|
|
40
|
+
|
|
41
|
+
const mainRef = ref(null);
|
|
42
|
+
const sidebarRef = ref(null);
|
|
43
|
+
const lang = computed(() => store.ui.lang);
|
|
44
|
+
const t = (zh, en) => (lang.value === 'zh' ? zh : en);
|
|
45
|
+
|
|
46
|
+
watch(
|
|
47
|
+
() => store.ui.lang,
|
|
48
|
+
() => {
|
|
49
|
+
if (!mainRef.value) return;
|
|
50
|
+
mainRef.value.classList.remove('lang-flash');
|
|
51
|
+
// force reflow to restart animation
|
|
52
|
+
void mainRef.value.offsetWidth;
|
|
53
|
+
mainRef.value.classList.add('lang-flash');
|
|
54
|
+
if (sidebarRef.value) {
|
|
55
|
+
sidebarRef.value.classList.remove('lang-flash');
|
|
56
|
+
void sidebarRef.value.offsetWidth;
|
|
57
|
+
sidebarRef.value.classList.add('lang-flash');
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
);
|
|
61
|
+
|
|
62
|
+
function buildFeatureSection(items) {
|
|
63
|
+
const section = {};
|
|
64
|
+
for (const item of items) {
|
|
65
|
+
if (!item.name) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
section[item.name] = {
|
|
69
|
+
processor_config: { ...item.processor },
|
|
70
|
+
embedding_config: { ...item.embedding }
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
return section;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const trainYamlResult = computed(() => {
|
|
77
|
+
try {
|
|
78
|
+
return { text: buildTrainConfig(store.train), error: '' };
|
|
79
|
+
} catch (err) {
|
|
80
|
+
return { text: '', error: `训练配置解析失败: ${err.message}` };
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
const featureYamlResult = computed(() => {
|
|
85
|
+
try {
|
|
86
|
+
const obj = {
|
|
87
|
+
dense: buildFeatureSection(store.feature.dense),
|
|
88
|
+
sparse: buildFeatureSection(store.feature.sparse),
|
|
89
|
+
sequence: buildFeatureSection(store.feature.sequence)
|
|
90
|
+
};
|
|
91
|
+
return { text: dumpYaml(obj), error: '' };
|
|
92
|
+
} catch (err) {
|
|
93
|
+
return { text: '', error: `特征配置解析失败: ${err.message}` };
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
const modelYamlResult = computed(() => {
|
|
98
|
+
try {
|
|
99
|
+
const params = parseYaml(store.model.paramsText) || {};
|
|
100
|
+
const obj = {
|
|
101
|
+
model: store.model.model,
|
|
102
|
+
params
|
|
103
|
+
};
|
|
104
|
+
return { text: dumpYaml(obj), error: '' };
|
|
105
|
+
} catch (err) {
|
|
106
|
+
return { text: '', error: `模型配置解析失败: ${err.message}` };
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
const predictYaml = computed(() => {
|
|
111
|
+
const output = {
|
|
112
|
+
checkpoint_path: store.predict.checkpoint_path,
|
|
113
|
+
predict: { ...store.predict.predict }
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
if (store.predict.model_config) {
|
|
117
|
+
output.model_config = store.predict.model_config;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
if (store.predict.session.id) {
|
|
121
|
+
output.session = { id: store.predict.session.id };
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
return dumpYaml(output);
|
|
125
|
+
});
|
|
126
|
+
|
|
127
|
+
const bundleError = computed(() => {
|
|
128
|
+
if (trainYamlResult.value.error) {
|
|
129
|
+
return trainYamlResult.value.error;
|
|
130
|
+
}
|
|
131
|
+
if (featureYamlResult.value.error) {
|
|
132
|
+
return featureYamlResult.value.error;
|
|
133
|
+
}
|
|
134
|
+
if (modelYamlResult.value.error) {
|
|
135
|
+
return modelYamlResult.value.error;
|
|
136
|
+
}
|
|
137
|
+
return '';
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
async function downloadBundle() {
|
|
141
|
+
if (bundleError.value) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
await downloadZip('nextrec-configs.zip', {
|
|
145
|
+
'train_config.yaml': trainYamlResult.value.text,
|
|
146
|
+
'feature_config.yaml': featureYamlResult.value.text,
|
|
147
|
+
'model_config.yaml': modelYamlResult.value.text,
|
|
148
|
+
'predict_config.yaml': predictYaml.value
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
</script>
|
|
Binary file
|