mostlyai-engine 1.1.2__tar.gz → 1.1.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.
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/PKG-INFO +8 -6
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/README.md +1 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/__init__.py +1 -1
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_language/training.py +10 -4
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_tabular/training.py +9 -3
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/logging.py +5 -7
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/pyproject.toml +7 -6
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/.gitignore +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/LICENSE +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_common.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_dtypes.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_encoding_types/__init__.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_encoding_types/language/__init__.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_encoding_types/language/categorical.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_encoding_types/language/datetime.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_encoding_types/language/numeric.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_encoding_types/language/text.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_encoding_types/tabular/__init__.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_encoding_types/tabular/categorical.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_encoding_types/tabular/character.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_encoding_types/tabular/datetime.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_encoding_types/tabular/itt.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_encoding_types/tabular/lat_long.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_encoding_types/tabular/numeric.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_language/__init__.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_language/common.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_language/encoding.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_language/engine/__init__.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_language/engine/base.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_language/engine/hf_engine.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_language/engine/vllm_engine.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_language/formatron_utils.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_language/generation.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_language/lstm.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_language/tokenizer_utils.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_memory.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_tabular/__init__.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_tabular/argn.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_tabular/common.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_tabular/encoding.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_tabular/fairness.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_tabular/generation.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_training_utils.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_workspace.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/analysis.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/domain.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/encoding.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/generation.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/splitting.py +0 -0
- {mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/training.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: mostlyai-engine
|
|
3
|
-
Version: 1.1.
|
|
3
|
+
Version: 1.1.4
|
|
4
4
|
Summary: Synthetic Data Engine
|
|
5
5
|
Project-URL: homepage, https://github.com/mostly-ai/mostlyai-engine
|
|
6
6
|
Project-URL: repository, https://github.com/mostly-ai/mostlyai-engine
|
|
@@ -24,15 +24,16 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
24
24
|
Classifier: Topic :: Software Development :: Libraries
|
|
25
25
|
Classifier: Typing :: Typed
|
|
26
26
|
Requires-Python: >=3.10
|
|
27
|
-
Requires-Dist: accelerate
|
|
28
|
-
Requires-Dist: datasets<3
|
|
27
|
+
Requires-Dist: accelerate>=0.31.0
|
|
28
|
+
Requires-Dist: datasets<4,>=3.0.0
|
|
29
29
|
Requires-Dist: formatron<0.5,>=0.4.11
|
|
30
|
+
Requires-Dist: huggingface-hub<0.29,>=0.28.0
|
|
30
31
|
Requires-Dist: joblib<2,>=1.3.0
|
|
31
|
-
Requires-Dist: json-repair
|
|
32
|
+
Requires-Dist: json-repair>=0.30.0
|
|
32
33
|
Requires-Dist: numpy<2,>=1.26.3
|
|
33
|
-
Requires-Dist: opacus
|
|
34
|
+
Requires-Dist: opacus<2,>=1.5.2
|
|
34
35
|
Requires-Dist: pandas~=2.2.0
|
|
35
|
-
Requires-Dist: peft
|
|
36
|
+
Requires-Dist: peft>=0.12.0
|
|
36
37
|
Requires-Dist: psutil<6,>=5.9.5
|
|
37
38
|
Requires-Dist: pyarrow>=16.0.0
|
|
38
39
|
Requires-Dist: rich<14,>=13.9.4
|
|
@@ -192,4 +193,5 @@ engine.generate( # use model to generate synthetic samples
|
|
|
192
193
|
workspace_dir=ws,
|
|
193
194
|
sample_size=10,
|
|
194
195
|
)
|
|
196
|
+
pd.read_parquet(ws / "SyntheticData") # load synthetic data
|
|
195
197
|
```
|
|
@@ -22,7 +22,7 @@ from mostlyai.engine.generation import generate
|
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
__all__ = ["split", "analyze", "encode", "train", "generate", "init_logging"]
|
|
25
|
-
__version__ = "1.1.
|
|
25
|
+
__version__ = "1.1.4"
|
|
26
26
|
|
|
27
27
|
# suppress specific warning related to os.fork() in multi-threaded processes
|
|
28
28
|
warnings.filterwarnings("ignore", category=DeprecationWarning, message=".*multi-threaded.*fork.*")
|
|
@@ -679,7 +679,8 @@ def train(
|
|
|
679
679
|
do_stop = True
|
|
680
680
|
|
|
681
681
|
# check for max_training_time
|
|
682
|
-
|
|
682
|
+
total_training_time = total_time_init + time.time() - start_trn_time
|
|
683
|
+
if total_training_time > max_training_time:
|
|
683
684
|
do_stop = True
|
|
684
685
|
|
|
685
686
|
# no checkpoint is saved yet because the training stopped before the first epoch ended
|
|
@@ -691,8 +692,13 @@ def train(
|
|
|
691
692
|
lr_scheduler=lr_scheduler,
|
|
692
693
|
dp_accountant=privacy_engine.accountant if with_dp else None,
|
|
693
694
|
)
|
|
694
|
-
|
|
695
|
-
|
|
695
|
+
if total_training_time > max_training_time:
|
|
696
|
+
_LOG.info("skip validation loss calculation due to time-capped early stopping")
|
|
697
|
+
val_loss = None
|
|
698
|
+
else:
|
|
699
|
+
_LOG.info("calculate validation loss")
|
|
700
|
+
with forward_ctx_mgr:
|
|
701
|
+
val_loss = _calculate_val_loss(model=model, val_dataloader=val_dataloader)
|
|
696
702
|
dp_epsilon = privacy_engine.get_epsilon(dp_delta) if with_dp else None
|
|
697
703
|
# send a final message to inform how far we've progressed
|
|
698
704
|
progress_message = ProgressMessage(
|
|
@@ -702,7 +708,7 @@ def train(
|
|
|
702
708
|
samples=samples,
|
|
703
709
|
trn_loss=None,
|
|
704
710
|
val_loss=val_loss,
|
|
705
|
-
total_time=
|
|
711
|
+
total_time=total_training_time,
|
|
706
712
|
learn_rate=current_lr,
|
|
707
713
|
dp_eps=dp_epsilon,
|
|
708
714
|
dp_delta=dp_delta,
|
|
@@ -822,7 +822,8 @@ def train(
|
|
|
822
822
|
do_stop = True
|
|
823
823
|
|
|
824
824
|
# check for max_training_time
|
|
825
|
-
|
|
825
|
+
total_training_time = total_time_init + time.time() - start_trn_time
|
|
826
|
+
if total_training_time > max_training_time:
|
|
826
827
|
do_stop = True
|
|
827
828
|
|
|
828
829
|
# no checkpoint is saved yet because the training stopped before the first epoch ended
|
|
@@ -834,7 +835,12 @@ def train(
|
|
|
834
835
|
lr_scheduler=lr_scheduler,
|
|
835
836
|
dp_accountant=privacy_engine.accountant if with_dp else None,
|
|
836
837
|
)
|
|
837
|
-
|
|
838
|
+
if total_training_time > max_training_time:
|
|
839
|
+
_LOG.info("skip validation loss calculation due to time-capped early stopping")
|
|
840
|
+
val_loss = None
|
|
841
|
+
else:
|
|
842
|
+
_LOG.info("calculate validation loss")
|
|
843
|
+
val_loss = _calculate_val_loss(model=argn, val_dataloader=val_dataloader)
|
|
838
844
|
dp_epsilon = privacy_engine.get_epsilon(dp_delta) if with_dp else None
|
|
839
845
|
# send a final message to inform how far we've progressed
|
|
840
846
|
trn_loss = _calculate_average_trn_loss(trn_sample_losses)
|
|
@@ -845,7 +851,7 @@ def train(
|
|
|
845
851
|
samples=samples,
|
|
846
852
|
trn_loss=trn_loss,
|
|
847
853
|
val_loss=val_loss,
|
|
848
|
-
total_time=
|
|
854
|
+
total_time=total_training_time,
|
|
849
855
|
learn_rate=current_lr,
|
|
850
856
|
dp_eps=dp_epsilon,
|
|
851
857
|
dp_delta=dp_delta,
|
|
@@ -20,15 +20,13 @@ _LOG = logging.getLogger(__name__.rsplit(".", 1)[0]) # get the logger with the
|
|
|
20
20
|
|
|
21
21
|
def init_logging() -> None:
|
|
22
22
|
"""
|
|
23
|
-
Initialize the logging configuration
|
|
23
|
+
Initialize the logging configuration to stdout.
|
|
24
24
|
"""
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
handler = logging.StreamHandler(stream=sys.stdout)
|
|
28
|
-
handler.setFormatter(logging.Formatter("[%(asctime)s] %(levelname)-7s: %(message)s"))
|
|
29
|
-
handler.setLevel(logging.INFO)
|
|
30
|
-
|
|
26
|
+
_LOG.propagate = False
|
|
31
27
|
if not _LOG.hasHandlers():
|
|
28
|
+
handler = logging.StreamHandler(stream=sys.stdout)
|
|
29
|
+
handler.setFormatter(logging.Formatter("[%(asctime)s] %(levelname)-7s: %(message)s"))
|
|
30
|
+
handler.setLevel(logging.INFO)
|
|
32
31
|
_LOG.addHandler(handler)
|
|
33
32
|
_LOG.setLevel(logging.INFO)
|
|
34
|
-
_LOG.propagate = False
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "mostlyai-engine"
|
|
3
|
-
version = "1.1.
|
|
3
|
+
version = "1.1.4"
|
|
4
4
|
description = "Synthetic Data Engine"
|
|
5
5
|
authors = [{ name = "MOSTLY AI", email = "dev@mostly.ai" }]
|
|
6
6
|
requires-python = ">=3.10"
|
|
@@ -33,12 +33,13 @@ dependencies = [
|
|
|
33
33
|
"psutil>=5.9.5,<6", # upgrade when colab psutil is updated
|
|
34
34
|
"tokenizers>=0.21.0,<0.22",
|
|
35
35
|
"transformers>=4.45.2,<5",
|
|
36
|
-
"datasets>=
|
|
37
|
-
"accelerate>=0.31.0
|
|
38
|
-
"peft>=0.
|
|
39
|
-
"
|
|
36
|
+
"datasets>=3.0.0,<4",
|
|
37
|
+
"accelerate>=0.31.0",
|
|
38
|
+
"peft>=0.12.0",
|
|
39
|
+
"huggingface-hub>=0.28.0,<0.29",
|
|
40
|
+
"opacus>=1.5.2,<2",
|
|
40
41
|
"formatron>=0.4.11,<0.5",
|
|
41
|
-
"json-repair>=0.30.0
|
|
42
|
+
"json-repair>=0.30.0",
|
|
42
43
|
"rich>=13.9.4,<14",
|
|
43
44
|
"torch>=2.5.1; sys_platform == 'darwin'",
|
|
44
45
|
]
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_encoding_types/language/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_encoding_types/language/datetime.py
RENAMED
|
File without changes
|
{mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_encoding_types/language/numeric.py
RENAMED
|
File without changes
|
{mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_encoding_types/language/text.py
RENAMED
|
File without changes
|
{mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_encoding_types/tabular/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_encoding_types/tabular/character.py
RENAMED
|
File without changes
|
{mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_encoding_types/tabular/datetime.py
RENAMED
|
File without changes
|
{mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_encoding_types/tabular/itt.py
RENAMED
|
File without changes
|
{mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_encoding_types/tabular/lat_long.py
RENAMED
|
File without changes
|
{mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_encoding_types/tabular/numeric.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_language/engine/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_language/engine/hf_engine.py
RENAMED
|
File without changes
|
{mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_language/engine/vllm_engine.py
RENAMED
|
File without changes
|
{mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_language/formatron_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mostlyai_engine-1.1.2 → mostlyai_engine-1.1.4}/mostlyai/engine/_language/tokenizer_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|