nextrec 0.4.30__py3-none-any.whl → 0.4.32__py3-none-any.whl

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.
Files changed (46) hide show
  1. nextrec/__version__.py +1 -1
  2. nextrec/basic/model.py +48 -4
  3. nextrec/cli.py +18 -10
  4. nextrec/data/batch_utils.py +2 -2
  5. nextrec/data/preprocessor.py +53 -1
  6. nextrec/models/multi_task/[pre]aitm.py +3 -3
  7. nextrec/models/multi_task/[pre]snr_trans.py +3 -3
  8. nextrec/models/multi_task/[pre]star.py +3 -3
  9. nextrec/models/multi_task/apg.py +3 -3
  10. nextrec/models/multi_task/cross_stitch.py +3 -3
  11. nextrec/models/multi_task/escm.py +3 -3
  12. nextrec/models/multi_task/esmm.py +3 -3
  13. nextrec/models/multi_task/hmoe.py +3 -3
  14. nextrec/models/multi_task/mmoe.py +3 -3
  15. nextrec/models/multi_task/pepnet.py +4 -4
  16. nextrec/models/multi_task/ple.py +3 -3
  17. nextrec/models/multi_task/poso.py +3 -3
  18. nextrec/models/multi_task/share_bottom.py +3 -3
  19. nextrec/models/ranking/afm.py +3 -2
  20. nextrec/models/ranking/autoint.py +3 -2
  21. nextrec/models/ranking/dcn.py +3 -2
  22. nextrec/models/ranking/dcn_v2.py +3 -2
  23. nextrec/models/ranking/deepfm.py +3 -2
  24. nextrec/models/ranking/dien.py +3 -2
  25. nextrec/models/ranking/din.py +3 -2
  26. nextrec/models/ranking/eulernet.py +3 -2
  27. nextrec/models/ranking/ffm.py +3 -2
  28. nextrec/models/ranking/fibinet.py +3 -2
  29. nextrec/models/ranking/fm.py +3 -2
  30. nextrec/models/ranking/lr.py +3 -2
  31. nextrec/models/ranking/masknet.py +3 -2
  32. nextrec/models/ranking/pnn.py +3 -2
  33. nextrec/models/ranking/widedeep.py +3 -2
  34. nextrec/models/ranking/xdeepfm.py +3 -2
  35. nextrec/models/tree_base/__init__.py +15 -0
  36. nextrec/models/tree_base/base.py +693 -0
  37. nextrec/models/tree_base/catboost.py +97 -0
  38. nextrec/models/tree_base/lightgbm.py +69 -0
  39. nextrec/models/tree_base/xgboost.py +61 -0
  40. nextrec/utils/config.py +1 -0
  41. nextrec/utils/types.py +2 -0
  42. {nextrec-0.4.30.dist-info → nextrec-0.4.32.dist-info}/METADATA +5 -5
  43. {nextrec-0.4.30.dist-info → nextrec-0.4.32.dist-info}/RECORD +46 -41
  44. {nextrec-0.4.30.dist-info → nextrec-0.4.32.dist-info}/licenses/LICENSE +1 -1
  45. {nextrec-0.4.30.dist-info → nextrec-0.4.32.dist-info}/WHEEL +0 -0
  46. {nextrec-0.4.30.dist-info → nextrec-0.4.32.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,97 @@
1
+ """
2
+ CatBoost adapter for NextRec.
3
+ """
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Any
8
+
9
+ import numpy as np
10
+ import pandas as pd
11
+
12
+ from nextrec.models.tree_base.base import TreeBaseModel
13
+
14
+
15
+ class Catboost(TreeBaseModel):
16
+ model_file_suffix = "cbm"
17
+
18
+ @property
19
+ def model_name(self) -> str:
20
+ return "catboost"
21
+
22
+ def build_estimator(self, model_params: dict[str, Any], epochs: int | None):
23
+ try:
24
+ import catboost as cb
25
+ except ModuleNotFoundError as exc: # pragma: no cover
26
+ raise ModuleNotFoundError(
27
+ "catboost is required for model='catboost'. Install with: pip install catboost"
28
+ ) from exc
29
+ params = dict(model_params)
30
+ if epochs is not None and "iterations" not in params:
31
+ params["iterations"] = epochs
32
+ task = self.task[0] if isinstance(self.task, list) else self.task
33
+ if task == "regression":
34
+ params.setdefault("loss_function", "RMSE")
35
+ return cb.CatBoostRegressor(**params)
36
+ if task == "binary":
37
+ params.setdefault("loss_function", "Logloss")
38
+ return cb.CatBoostClassifier(**params)
39
+ raise ValueError(f"[catboost-init Error] Unsupported task type: {task}")
40
+
41
+ def fit_estimator(
42
+ self,
43
+ model: Any,
44
+ X_train,
45
+ y_train,
46
+ X_valid,
47
+ y_valid,
48
+ cat_features,
49
+ **kwargs,
50
+ ):
51
+ fit_kwargs = dict(kwargs)
52
+ X_train, cat_features = self._prepare_catboost_data(X_train, cat_features)
53
+ if cat_features:
54
+ fit_kwargs.setdefault("cat_features", cat_features)
55
+ if X_valid is not None and y_valid is not None:
56
+ X_valid, _ = self._prepare_catboost_data(X_valid, cat_features)
57
+ fit_kwargs.setdefault("eval_set", (X_valid, y_valid))
58
+ model.fit(X_train, y_train, **fit_kwargs)
59
+ return model
60
+
61
+ def save_model_file(self, model: Any, path) -> None:
62
+ model.save_model(str(path))
63
+
64
+ def load_model_file(self, path):
65
+ model = self.build_estimator(dict(self.model_params), epochs=None)
66
+ model.load_model(str(path))
67
+ return model
68
+
69
+ def _prepare_catboost_data(
70
+ self, X: Any, cat_features: list[int]
71
+ ) -> tuple[Any, list[int]]:
72
+ if not cat_features:
73
+ return X, cat_features
74
+ if isinstance(X, np.ndarray) and np.issubdtype(X.dtype, np.floating):
75
+ feature_names = [f"f{idx}" for idx in range(X.shape[1])]
76
+ df = pd.DataFrame(X, columns=feature_names)
77
+ for idx in cat_features:
78
+ if 0 <= idx < df.shape[1]:
79
+ series = df.iloc[:, idx]
80
+ df.iloc[:, idx] = series.map(
81
+ lambda value: (
82
+ ""
83
+ if pd.isna(value)
84
+ else (
85
+ str(int(value))
86
+ if isinstance(value, (float, np.floating))
87
+ and value.is_integer()
88
+ else str(value)
89
+ )
90
+ )
91
+ )
92
+ return df, cat_features
93
+ return X, cat_features
94
+
95
+ def predict_scores(self, model: Any, X: np.ndarray) -> np.ndarray:
96
+ X, _ = self._prepare_catboost_data(X, self._cat_feature_indices)
97
+ return super().predict_scores(model, X)
@@ -0,0 +1,69 @@
1
+ """
2
+ LightGBM adapter for NextRec.
3
+ """
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Any
8
+
9
+ from nextrec.models.tree_base.base import TreeBaseModel
10
+
11
+
12
+ class Lightgbm(TreeBaseModel):
13
+ model_file_suffix = "txt"
14
+
15
+ @property
16
+ def model_name(self) -> str:
17
+ return "lightgbm"
18
+
19
+ def build_estimator(self, model_params: dict[str, Any], epochs: int | None):
20
+ try:
21
+ import lightgbm as lgb
22
+ except ModuleNotFoundError as exc: # pragma: no cover
23
+ raise ModuleNotFoundError(
24
+ "lightgbm is required for model='lightgbm'. Install with: pip install lightgbm"
25
+ ) from exc
26
+ params = dict(model_params)
27
+ if epochs is not None and "n_estimators" not in params:
28
+ params["n_estimators"] = epochs
29
+ task = self.task[0] if isinstance(self.task, list) else self.task
30
+ if task == "regression":
31
+ params.setdefault("objective", "regression")
32
+ return lgb.LGBMRegressor(**params)
33
+ if task == "binary":
34
+ params.setdefault("objective", "binary")
35
+ return lgb.LGBMClassifier(**params)
36
+ raise ValueError(f"[lightgbm-init Error] Unsupported task type: {task}")
37
+
38
+ def fit_estimator(
39
+ self,
40
+ model: Any,
41
+ X_train,
42
+ y_train,
43
+ X_valid,
44
+ y_valid,
45
+ cat_features,
46
+ **kwargs,
47
+ ):
48
+ fit_kwargs = dict(kwargs)
49
+ if cat_features:
50
+ fit_kwargs.setdefault("categorical_feature", cat_features)
51
+ if X_valid is not None and y_valid is not None:
52
+ fit_kwargs.setdefault("eval_set", [(X_valid, y_valid)])
53
+ model.fit(X_train, y_train, **fit_kwargs)
54
+ return model
55
+
56
+ def save_model_file(self, model: Any, path) -> None:
57
+ if hasattr(model, "booster_"):
58
+ model.booster_.save_model(str(path))
59
+ else:
60
+ model.save_model(str(path))
61
+
62
+ def load_model_file(self, path):
63
+ try:
64
+ import lightgbm as lgb
65
+ except ModuleNotFoundError as exc: # pragma: no cover
66
+ raise ModuleNotFoundError(
67
+ "lightgbm is required for model='lightgbm'. Install with: pip install lightgbm"
68
+ ) from exc
69
+ return lgb.Booster(model_file=str(path))
@@ -0,0 +1,61 @@
1
+ """
2
+ XGBoost adapter for NextRec.
3
+ """
4
+
5
+ from __future__ import annotations
6
+
7
+ from typing import Any
8
+
9
+ from nextrec.models.tree_base.base import TreeBaseModel
10
+
11
+
12
+ class Xgboost(TreeBaseModel):
13
+ model_file_suffix = "json"
14
+
15
+ @property
16
+ def model_name(self) -> str:
17
+ return "xgboost"
18
+
19
+ def build_estimator(self, model_params: dict[str, Any], epochs: int | None):
20
+ try:
21
+ import xgboost as xgb
22
+ except ModuleNotFoundError as exc: # pragma: no cover
23
+ raise ModuleNotFoundError(
24
+ "xgboost is required for model='xgboost'. Install with: pip install xgboost"
25
+ ) from exc
26
+ params = dict(model_params)
27
+ if epochs is not None and "n_estimators" not in params:
28
+ params["n_estimators"] = epochs
29
+ task = self.task[0] if isinstance(self.task, list) else self.task
30
+ if task == "regression":
31
+ params.setdefault("objective", "reg:squarederror")
32
+ return xgb.XGBRegressor(**params)
33
+ if task == "binary":
34
+ params.setdefault("objective", "binary:logistic")
35
+ return xgb.XGBClassifier(**params)
36
+ raise ValueError(f"[xgboost-init Error] Unsupported task type: {task}")
37
+
38
+ def fit_estimator(
39
+ self,
40
+ model: Any,
41
+ X_train,
42
+ y_train,
43
+ X_valid,
44
+ y_valid,
45
+ cat_features,
46
+ **kwargs,
47
+ ):
48
+ del cat_features # xgboost handles categorical features via params
49
+ fit_kwargs = dict(kwargs)
50
+ if X_valid is not None and y_valid is not None:
51
+ fit_kwargs.setdefault("eval_set", [(X_valid, y_valid)])
52
+ model.fit(X_train, y_train, **fit_kwargs)
53
+ return model
54
+
55
+ def save_model_file(self, model: Any, path) -> None:
56
+ model.save_model(str(path))
57
+
58
+ def load_model_file(self, path):
59
+ model = self.build_estimator(dict(self.model_params), epochs=None)
60
+ model.load_model(str(path))
61
+ return model
nextrec/utils/config.py CHANGED
@@ -342,6 +342,7 @@ def load_model_class(model_cfg: Dict[str, Any], base_dir: Path) -> type:
342
342
  f"nextrec.models.match.{name.lower()}",
343
343
  f"nextrec.models.multi_task.{name.lower()}",
344
344
  f"nextrec.models.generative.{name.lower()}",
345
+ f"nextrec.models.tree_base.{name.lower()}",
345
346
  ]
346
347
  errors = []
347
348
 
nextrec/utils/types.py CHANGED
@@ -62,6 +62,8 @@ TrainingModeName = Literal["pointwise", "pairwise", "listwise"]
62
62
 
63
63
  TaskTypeName = Literal["binary", "regression"]
64
64
 
65
+ TaskTypeInput = TaskTypeName | str
66
+
65
67
  MetricsName = Literal[
66
68
  "auc",
67
69
  "gauc",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nextrec
3
- Version: 0.4.30
3
+ Version: 0.4.32
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
@@ -69,7 +69,7 @@ Description-Content-Type: text/markdown
69
69
  ![Python](https://img.shields.io/badge/Python-3.10+-blue.svg)
70
70
  ![PyTorch](https://img.shields.io/badge/PyTorch-1.10+-ee4c2c.svg)
71
71
  ![License](https://img.shields.io/badge/License-Apache%202.0-green.svg)
72
- ![Version](https://img.shields.io/badge/Version-0.4.30-orange.svg)
72
+ ![Version](https://img.shields.io/badge/Version-0.4.32-orange.svg)
73
73
  [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/zerolovesea/NextRec)
74
74
 
75
75
  中文文档 | [English Version](README_en.md)
@@ -254,11 +254,11 @@ nextrec --mode=predict --predict_config=path/to/predict_config.yaml
254
254
 
255
255
  预测结果固定保存到 `{checkpoint_path}/predictions/{name}.{save_data_format}`。
256
256
 
257
- > 截止当前版本0.4.30,NextRec CLI支持单机训练,分布式训练相关功能尚在开发中。
257
+ > 截止当前版本0.4.32,NextRec CLI支持单机训练,分布式训练相关功能尚在开发中。
258
258
 
259
259
  ## 兼容平台
260
260
 
261
- 当前最新版本为0.4.30,所有模型和测试代码均已在以下平台通过验证,如果开发者在使用中遇到兼容问题,请在issue区提出错误报告及系统版本:
261
+ 当前最新版本为0.4.32,所有模型和测试代码均已在以下平台通过验证,如果开发者在使用中遇到兼容问题,请在issue区提出错误报告及系统版本:
262
262
 
263
263
  | 平台 | 配置 |
264
264
  |------|------|
@@ -400,7 +400,7 @@ NextRec 的开发受到以下优秀项目的启发:
400
400
  @misc{nextrec,
401
401
  title = {NextRec},
402
402
  author = {Yang Zhou},
403
- year = {2025},
403
+ year = {2026},
404
404
  publisher = {GitHub},
405
405
  journal = {GitHub repository},
406
406
  howpublished = {\url{https://github.com/zerolovesea/NextRec}},
@@ -1,6 +1,6 @@
1
1
  nextrec/__init__.py,sha256=_M3oUqyuvQ5k8Th_3wId6hQ_caclh7M5ad51XN09m98,235
2
- nextrec/__version__.py,sha256=oJL8XtG8mmnvRfpE8L0X7P-SyENhGR162XgumWN6O4A,23
3
- nextrec/cli.py,sha256=uOaXnlAM-ARrbxKOVWWkTE_rv-54px168kBhFUHtIAg,25073
2
+ nextrec/__version__.py,sha256=W0DtmvTLu6FQL6tby9DrJltesCOu7Q36WFhsT2wLrgM,23
3
+ nextrec/cli.py,sha256=hFDL_HlukJxdp4FU486g977Rix9OkGdEPGBj2HxqCGo,25393
4
4
  nextrec/basic/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  nextrec/basic/activation.py,sha256=uekcJsOy8SiT0_NaDO2VNSStyYFzVikDFVLDk-VrjwQ,2949
6
6
  nextrec/basic/asserts.py,sha256=U1EKovV_OT7_Mm99zFvdfF2hccFREp3gdDaeRjfiBwQ,2249
@@ -10,15 +10,15 @@ nextrec/basic/heads.py,sha256=BshykLxD41KxKuZaBxf4Fmy1Mc52b3ioJliN1BVaGlk,3374
10
10
  nextrec/basic/layers.py,sha256=tr8XFOcTvUHEZ6T3zJwmtKMA-u_xfzHloIkItGs821U,40084
11
11
  nextrec/basic/loggers.py,sha256=LAfnhdSNEzHybrXaKxCWoAML1c2A-FJF6atpfrrm_Kw,13840
12
12
  nextrec/basic/metrics.py,sha256=CPzENDcpO6QTDZLBtQlfAGKUYYQc0FT-eaMKJ4MURFo,23396
13
- nextrec/basic/model.py,sha256=4vBp-vXAWC5Oiu_x4mtVaXTKJCcKDYT0IJ7UOyHD5lw,110162
13
+ nextrec/basic/model.py,sha256=uAC3wFKJcRUAgsvfc9hXhhfp1iILqvTSbA7Ryohn-bc,111590
14
14
  nextrec/basic/session.py,sha256=mrIsjRJhmvcAfoO1pXX-KB3SK5CCgz89wH8XDoAiGEI,4475
15
15
  nextrec/basic/summary.py,sha256=b6jLo70gqZj_bQ4eb5yb8SXmr2ilZlKNN293EyVnkyc,17759
16
16
  nextrec/data/__init__.py,sha256=YZQjpty1pDCM7q_YNmiA2sa5kbujUw26ObLHWjMPjKY,1194
17
- nextrec/data/batch_utils.py,sha256=vqlBvdfrhFEIUHmiWuUdXg1oY2jkyKOO1JO2l2KpJUU,3549
17
+ nextrec/data/batch_utils.py,sha256=TbnXYqYlmK51dJthaL6dO7LTn4wyp8221I-kdgvpvDE,3542
18
18
  nextrec/data/data_processing.py,sha256=lhuwYxWp4Ts2bbuLGDt2LmuPrOy7pNcKczd2uVcQ4ss,6476
19
19
  nextrec/data/data_utils.py,sha256=0Ls1cnG9lBz0ovtyedw5vwp7WegGK_iF-F8e_3DEddo,880
20
20
  nextrec/data/dataloader.py,sha256=2sXwoiWxupKE-V1QYeZlXjK1yJyxhDtlOhknAnJF8Wk,19727
21
- nextrec/data/preprocessor.py,sha256=AD5bHNbkAZAnI_SbDfJJaAh57CRtRjoOQJ6aIBkgoQs,65251
21
+ nextrec/data/preprocessor.py,sha256=n2ZDR4o_-5nouBgCluWlVrXRkA9AoRaO7EvXPZAQvJg,66734
22
22
  nextrec/loss/__init__.py,sha256=rualGsY-IBvmM52q9eOBk0MyKcMkpkazcscOeDXi_SM,774
23
23
  nextrec/loss/grad_norm.py,sha256=YoE_XSIN1HOUcNq1dpfkIlWtMaB5Pu-SEWDaNgtRw1M,8316
24
24
  nextrec/loss/listwise.py,sha256=mluxXQt9XiuWGvXA1nk4I0miqaKB6_GPVQqxLhAiJKs,5999
@@ -26,37 +26,37 @@ nextrec/loss/pairwise.py,sha256=9fyH9p2u-N0-jAnNTq3X5Dje0ipj1dob8wp-yQKRra4,3493
26
26
  nextrec/loss/pointwise.py,sha256=09nzI1L5eP9raXnj3Q49bD9Clp_JmsSWUvEj7bkTzSw,7474
27
27
  nextrec/models/generative/__init__.py,sha256=0MV3P-_ainPaTxmRBGWKUVCEt14KJvuvEHmRB3OQ1Fs,176
28
28
  nextrec/models/generative/tiger.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
- nextrec/models/multi_task/[pre]aitm.py,sha256=e9XCuPgOoyTs1RlGSJsMMksyYFOrOaT00c4WW4TSg2g,6659
30
- nextrec/models/multi_task/[pre]snr_trans.py,sha256=Mb1RSdBAVCKhQnG9ajf1uYHulZsK8rz5sLGWpTJVMwY,9060
31
- nextrec/models/multi_task/[pre]star.py,sha256=hJ-E0_ciiOlaOhQ-gh3UZpZcKLc8A6_7CiVJyurLy_E,7040
29
+ nextrec/models/multi_task/[pre]aitm.py,sha256=A2n0T4JEui-uHgbqITU5lpsmtnP14fQXRZM1peTPvhQ,6661
30
+ nextrec/models/multi_task/[pre]snr_trans.py,sha256=k08tC-TI--a_Tt4_BmX0ZubzntyqwsejutYzbB5F4S4,9077
31
+ nextrec/models/multi_task/[pre]star.py,sha256=BczXHPJtK7xyPbLO0fQ-w7qnzaBvLpyhG0CKMBUItCY,7057
32
32
  nextrec/models/multi_task/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
33
- nextrec/models/multi_task/apg.py,sha256=oqX3-wShX47Zqn6o0WGJ5duqjnxBKuMd1XodwsxVDiQ,13519
34
- nextrec/models/multi_task/cross_stitch.py,sha256=jMYd-BVhkPtJRgpzVPooXCzf_LzS0oWuGKanNUlytBo,9424
35
- nextrec/models/multi_task/escm.py,sha256=Djk4SjLsZ8He3sZrKfZkHdH2istR9R71GVEJc6EbF-o,11021
36
- nextrec/models/multi_task/esmm.py,sha256=QRnNXV1IEArYorYJLOoBcLbxarMC_7azQLP79QTfAJ8,5273
37
- nextrec/models/multi_task/hmoe.py,sha256=6mTzZxC5PfSQovrmnR0O2hdhDUG_8yNqMwCdkNRlHkY,7567
38
- nextrec/models/multi_task/mmoe.py,sha256=Mplzstu-LYEMtiKiyiMEQZwY-xMkUeG-1FaDqqK5kws,7606
39
- nextrec/models/multi_task/pepnet.py,sha256=ikCDu66TTPdfp94HU-4QzKCW5JOEvwAf5E0QEQ0SZzw,13510
40
- nextrec/models/multi_task/ple.py,sha256=cO-NqEm-UZKRz2MznBjqsXL8ImH7WU1HRzXdWAtb7Kk,12089
41
- nextrec/models/multi_task/poso.py,sha256=Xjw9JBAiGR9CGewp1uS4b1soA7fOvSWTsIT6pS9_o30,18215
42
- nextrec/models/multi_task/share_bottom.py,sha256=BT-nu0NZTV4HlFkva_KnoKLSxB0-gYuJWPw7PRDGwC8,5172
33
+ nextrec/models/multi_task/apg.py,sha256=dNveyottpHTd811_3KVZQQqgffDzmX_rY1EMiv1oKeo,13536
34
+ nextrec/models/multi_task/cross_stitch.py,sha256=o48ZZFKWXz-w4MWboVdxDxifM0V3_n2Is2nZ2HoJkfw,9441
35
+ nextrec/models/multi_task/escm.py,sha256=9kc50zzFm3HJMhQDqt6kAAJQTt0hKM5luLSC9G4N7Vk,11038
36
+ nextrec/models/multi_task/esmm.py,sha256=iTRMcjCznyKlwJMGWgqXl9CkQrvGTsfjEjpU_5X12Kg,5275
37
+ nextrec/models/multi_task/hmoe.py,sha256=Ge0AC7oLcEwvt75AwGG5MtClCX6L46H7HRDqD9h-kpQ,7584
38
+ nextrec/models/multi_task/mmoe.py,sha256=vc19O4N4_64-_oucOGI-P_LaxsQaGvrYGg5Z2sxP49w,7609
39
+ nextrec/models/multi_task/pepnet.py,sha256=I0MXLXAKBRTN1Vp1QOZD47IrljDDB3UOPHZYUH1cghU,13526
40
+ nextrec/models/multi_task/ple.py,sha256=tr8mendvt87u7a4P54lQBYCHtsWDae7VrN9fOqHcXXo,12154
41
+ nextrec/models/multi_task/poso.py,sha256=jr-RaLl5UnZc1HcEIK3HrNnc_g17BImyJb43d4rEXpE,18218
42
+ nextrec/models/multi_task/share_bottom.py,sha256=NYK2B9k7BaXxzX4VN3dE0_quwsOQGM7JElm2tBdb9MY,5237
43
43
  nextrec/models/ranking/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
44
- nextrec/models/ranking/afm.py,sha256=lLcsWB1wOaiVJEn9rtNu2EOqXCP0LIPij7d6Jo9r8KM,9331
45
- nextrec/models/ranking/autoint.py,sha256=vY4Lp3a5007hzXp-38lmdlLcbcI4ImVELGMV7SuWzuM,7193
46
- nextrec/models/ranking/dcn.py,sha256=C6sYVCExCzhuInmNaTAyUTABcx1zYi_DCE0QoWmG3Zg,6613
47
- nextrec/models/ranking/dcn_v2.py,sha256=5nT8rP3_0g7Uy-Kaasw_xQDu6bshOiZBCjO3SKqjKjE,10316
48
- nextrec/models/ranking/deepfm.py,sha256=AhP20JPT1EAa6_8mw8IbJj6OoD7Epu74iFTAEvU20LM,4338
49
- nextrec/models/ranking/dien.py,sha256=SqgJqSNuPDiREEzMFYyqQcoWBowJj5M4Q16BGt-aHXc,18295
50
- nextrec/models/ranking/din.py,sha256=fMkQ3ZzROuafbd8UY4IBst3OU_5FF3mSJMmuOPh-6ko,8789
51
- nextrec/models/ranking/eulernet.py,sha256=aiDBmx2K90r2Zkg5Wqc8SaK1oIAhKaFG3lJ2hkbJTCs,11418
52
- nextrec/models/ranking/ffm.py,sha256=a4OaauKltUUF9rUV-B1qyG54r3wYN2oRT_r-ljEyLSM,10446
53
- nextrec/models/ranking/fibinet.py,sha256=fMe1PSIghyt7ccca0V-o0L_vFAx62S50na6VntmCns0,7217
54
- nextrec/models/ranking/fm.py,sha256=qwQ_QdBn5PTMYhCDGict8JU5kdVLbk_6ZLhg1H1IdRg,3729
55
- nextrec/models/ranking/lr.py,sha256=ZpWbM9aMn3tzWlbe8RMmhVz0QBnIeTs5rVDINc0E11I,3161
56
- nextrec/models/ranking/masknet.py,sha256=h5fE4iG-YLEEpDl9gpOcJgvUsAWQGvXexojyLsrURTQ,11540
57
- nextrec/models/ranking/pnn.py,sha256=fFcOo4QQjA-dB_yEpOLAtFG4ZrkwpBfFo_FrPry3V9s,7482
58
- nextrec/models/ranking/widedeep.py,sha256=bW53VPVt7xz3c16pO2JXArp346zEQbG3NAGNqZga8G4,4201
59
- nextrec/models/ranking/xdeepfm.py,sha256=1H230whaeZ_uqgZsTE-jIrEmwTQPKv_7DnAcYJ6vZvg,7441
44
+ nextrec/models/ranking/afm.py,sha256=2IylgCi7DBZzF7bdWFWvsEBlnRmyradxdyJiz5P4Nwg,9397
45
+ nextrec/models/ranking/autoint.py,sha256=5g0tMtvkt3FiCjqmU76K7w7z-h3nMJbP0eVt5Ph4bbU,7259
46
+ nextrec/models/ranking/dcn.py,sha256=qG3O2oL9ZLu9NBOJST06JeEh0k6UTXs-X1mQe_H4QCE,6679
47
+ nextrec/models/ranking/dcn_v2.py,sha256=807wASeG56WYD7mEDEKaERw3r-Jpas6WhDzO0HGEk9I,10382
48
+ nextrec/models/ranking/deepfm.py,sha256=1fuc-9f8DKDUH7EAY-XX5lITJ7Qw7ge6PTWFfQ7wld8,4404
49
+ nextrec/models/ranking/dien.py,sha256=cluW44zOBHadf3oup6h7MpTexDXjH_VPkYcqsNBT80Y,18361
50
+ nextrec/models/ranking/din.py,sha256=J6-S72_KJYLrzUmdrh6aAx-Qc1C08ZY7lY_KFtAkJz0,8855
51
+ nextrec/models/ranking/eulernet.py,sha256=0nOBfccfvukSZLUNOCcB_azCh52DGJq-s9doyEGMN8E,11484
52
+ nextrec/models/ranking/ffm.py,sha256=v15x2-rExcrEYdcPf2IxEgx-ImDSevhkhi4Oe4GbloY,10512
53
+ nextrec/models/ranking/fibinet.py,sha256=ejR1vNh5XM23SD7mfT686kuv3cmf5gKfkj0z_iMQqNA,7283
54
+ nextrec/models/ranking/fm.py,sha256=SlFtbtnrZbeRnCHf-kUAMaeLV_wDgLiaBwPGeAO_ycM,3795
55
+ nextrec/models/ranking/lr.py,sha256=0gmqPED-z7k4WVRy11WSLhYfS4bJQPRQTzQbe-rUITg,3227
56
+ nextrec/models/ranking/masknet.py,sha256=brRh8r-3TqJ9aNGj2JggAB9kUfD2xff6UmTYNd96YU4,11606
57
+ nextrec/models/ranking/pnn.py,sha256=NU537ySMMXtndtPuiwCCQhZhBpGk6X6PRDa55GFdqt0,7548
58
+ nextrec/models/ranking/widedeep.py,sha256=i37lqEUZUtxNXSkkhQjBF9QP6yreGdV_jcphofHOzW4,4267
59
+ nextrec/models/ranking/xdeepfm.py,sha256=vqDZRlrY9tgoqvnTXWe8xUbFx_28VztgVVc6ukzevRc,7507
60
60
  nextrec/models/representation/__init__.py,sha256=O3QHMMXBszwM-mTl7bA3wawNZvDGet-QIv6Ys5GHGJ8,190
61
61
  nextrec/models/representation/autorec.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
62
62
  nextrec/models/representation/bpr.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -73,8 +73,13 @@ nextrec/models/retrieval/sdm.py,sha256=1Y2gidG7WKuuGFaaQ8BcBGhQYoyyLPyhpRTo_xE1p
73
73
  nextrec/models/retrieval/youtube_dnn.py,sha256=hLyR4liuusJIjRg4vuaSoSEecYgDICipXnNFiA3o3oY,6351
74
74
  nextrec/models/sequential/hstu.py,sha256=iZcYLp44r23nHYNhGwD25JfH85DBrFwHOTg1WpHvLe8,18983
75
75
  nextrec/models/sequential/sasrec.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
76
+ nextrec/models/tree_base/__init__.py,sha256=ssGpU1viVidr1tgKCyvmkUXe32bUmwb5qPEkTh7ce70,342
77
+ nextrec/models/tree_base/base.py,sha256=6aXYM_nA1XkKfo3KfWSYBoO6IqPIafLrdzJ334ZBaZY,26558
78
+ nextrec/models/tree_base/catboost.py,sha256=hXINyx7iianwDxOZx3SLm0i-YP1jiC3HcAeqP9A2i4A,3434
79
+ nextrec/models/tree_base/lightgbm.py,sha256=VilMU7SgfHR5LAaaoQo-tY1vkzpSvWovIrgaSeuJ1-A,2263
80
+ nextrec/models/tree_base/xgboost.py,sha256=thOmDIC_nitno_k2mcH2cj2VcS07f9veTG01FMOO-28,1957
76
81
  nextrec/utils/__init__.py,sha256=Td-TC1IoTeb0KV-EgPy_vTHmmxmE6tO9q7Gmgsk1p-A,2672
77
- nextrec/utils/config.py,sha256=WeGHjoQYA5SoC9B_uS3D6ChzKr9Z5n2fwE-8l6nsuLE,20425
82
+ nextrec/utils/config.py,sha256=SUKVgWrsCkJvKLBwcHQHls859jhdPzXk7_3DYoyIXzE,20481
78
83
  nextrec/utils/console.py,sha256=RA3ZTjtUQXvueouSmXJNLkRjeUGQZesphwWjFMTbV4I,13577
79
84
  nextrec/utils/data.py,sha256=pSL96mWjWfW_RKE-qlUSs9vfiYnFZAaRirzA6r7DB6s,24994
80
85
  nextrec/utils/embedding.py,sha256=akAEc062MG2cD7VIOllHaqtwzAirQR2gq5iW7oKpGAU,1449
@@ -82,9 +87,9 @@ nextrec/utils/feature.py,sha256=E3NOFIW8gAoRXVrDhCSonzg8k7nMUZyZzMfCq9k73_A,623
82
87
  nextrec/utils/loss.py,sha256=GBWQGpDaYkMJySpdG078XbeUNXUC34PVqFy0AqNS9N0,4578
83
88
  nextrec/utils/model.py,sha256=PI9y8oWz1lhktgapZsiXb8rTr2NrFFlc80tr4yOFHik,5334
84
89
  nextrec/utils/torch_utils.py,sha256=UQpWS7F3nITYqvx2KRBaQJc9oTowRkIvowhuQLt6NFM,11953
85
- nextrec/utils/types.py,sha256=VhtLXUVvu0zAZVAUgRUML4FExRC-GH-ZmC1UiVSr3HE,1523
86
- nextrec-0.4.30.dist-info/METADATA,sha256=Bv8blGCAsM6dGbFTa_QYpH3TmbfWENF3JgH4H83ON2Q,23188
87
- nextrec-0.4.30.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
88
- nextrec-0.4.30.dist-info/entry_points.txt,sha256=NN-dNSdfMRTv86bNXM7d3ZEPW2BQC6bRi7QP7i9cIps,45
89
- nextrec-0.4.30.dist-info/licenses/LICENSE,sha256=2fQfVKeafywkni7MYHyClC6RGGC3laLTXCNBx-ubtp0,1064
90
- nextrec-0.4.30.dist-info/RECORD,,
90
+ nextrec/utils/types.py,sha256=G88DHXFv-mbg-XY-7Xwwh1qvh6WM9jpAsBjw5VuBcio,1559
91
+ nextrec-0.4.32.dist-info/METADATA,sha256=QkHGZMQg5HZLeO0PpByGa-FiNAeclrEeLinbF_K0Jik,23188
92
+ nextrec-0.4.32.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
93
+ nextrec-0.4.32.dist-info/entry_points.txt,sha256=NN-dNSdfMRTv86bNXM7d3ZEPW2BQC6bRi7QP7i9cIps,45
94
+ nextrec-0.4.32.dist-info/licenses/LICENSE,sha256=COP1BsqnEUwdx6GCkMjxOo5v3pUe4-Go_CdmQmSfYXM,1064
95
+ nextrec-0.4.32.dist-info/RECORD,,
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025 NextRec
3
+ Copyright (c) 2026 NextRec
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal