mostlyai-engine 1.4.6__tar.gz → 1.4.8__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.
Files changed (51) hide show
  1. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/PKG-INFO +1 -1
  2. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/__init__.py +1 -1
  3. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_encoding_types/tabular/character.py +1 -1
  4. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_language/common.py +24 -6
  5. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_language/generation.py +0 -3
  6. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_language/training.py +0 -5
  7. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_tabular/generation.py +1 -9
  8. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/pyproject.toml +1 -1
  9. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/.gitignore +0 -0
  10. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/LICENSE +0 -0
  11. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/README.md +0 -0
  12. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_common.py +0 -0
  13. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_dtypes.py +0 -0
  14. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_encoding_types/__init__.py +0 -0
  15. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_encoding_types/language/__init__.py +0 -0
  16. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_encoding_types/language/categorical.py +0 -0
  17. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_encoding_types/language/datetime.py +0 -0
  18. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_encoding_types/language/numeric.py +0 -0
  19. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_encoding_types/language/text.py +0 -0
  20. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_encoding_types/tabular/__init__.py +0 -0
  21. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_encoding_types/tabular/categorical.py +0 -0
  22. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_encoding_types/tabular/datetime.py +0 -0
  23. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_encoding_types/tabular/itt.py +0 -0
  24. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_encoding_types/tabular/lat_long.py +0 -0
  25. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_encoding_types/tabular/numeric.py +0 -0
  26. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_language/__init__.py +0 -0
  27. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_language/encoding.py +0 -0
  28. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_language/engine/__init__.py +0 -0
  29. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_language/engine/base.py +0 -0
  30. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_language/engine/hf_engine.py +0 -0
  31. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_language/engine/vllm_engine.py +0 -0
  32. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_language/lstm.py +0 -0
  33. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_language/tokenizer_utils.py +0 -0
  34. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_language/xgrammar_utils.py +0 -0
  35. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_memory.py +0 -0
  36. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_tabular/__init__.py +0 -0
  37. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_tabular/argn.py +0 -0
  38. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_tabular/common.py +0 -0
  39. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_tabular/encoding.py +0 -0
  40. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_tabular/fairness.py +0 -0
  41. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_tabular/training.py +0 -0
  42. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_training_utils.py +0 -0
  43. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/_workspace.py +0 -0
  44. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/analysis.py +0 -0
  45. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/domain.py +0 -0
  46. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/encoding.py +0 -0
  47. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/generation.py +0 -0
  48. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/logging.py +0 -0
  49. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/random_state.py +0 -0
  50. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/splitting.py +0 -0
  51. {mostlyai_engine-1.4.6 → mostlyai_engine-1.4.8}/mostlyai/engine/training.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mostlyai-engine
3
- Version: 1.4.6
3
+ Version: 1.4.8
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
@@ -22,7 +22,7 @@ from mostlyai.engine.splitting import split
22
22
  from mostlyai.engine.training import train
23
23
 
24
24
  __all__ = ["split", "analyze", "encode", "train", "generate", "init_logging", "set_random_state"]
25
- __version__ = "1.4.6"
25
+ __version__ = "1.4.8"
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.*")
@@ -155,7 +155,7 @@ def decode_character(df_encoded: pd.DataFrame, stats: dict) -> pd.Series:
155
155
  values = values.apply(lambda item: item.replace(UNKNOWN_TOKEN, "")).str.rstrip()
156
156
  else:
157
157
  # handle de-generate case, where no tokens were stored
158
- values = pd.Series(pd.NA).repeat(df_encoded.shape[0])
158
+ values = pd.Series(pd.NA, index=range(df_encoded.shape[0]))
159
159
  if stats["has_nan"]:
160
160
  values[df_encoded["nan"] == 1] = pd.NA
161
161
  return values
@@ -18,7 +18,15 @@ from pathlib import Path
18
18
 
19
19
  import torch
20
20
  from peft import PeftConfig, prepare_model_for_kbit_training
21
- from transformers import AutoConfig, AutoModelForCausalLM, BitsAndBytesConfig, PretrainedConfig, PreTrainedModel
21
+ from transformers import (
22
+ AutoConfig,
23
+ AutoModel,
24
+ AutoModelForCausalLM,
25
+ AutoModelForImageTextToText,
26
+ BitsAndBytesConfig,
27
+ PretrainedConfig,
28
+ PreTrainedModel,
29
+ )
22
30
 
23
31
  from mostlyai.engine._language.lstm import LSTMFromScratchConfig
24
32
 
@@ -35,7 +43,7 @@ def is_bf16_supported(device: torch.device) -> bool:
35
43
 
36
44
 
37
45
  def get_attention_implementation(config: PretrainedConfig) -> str | None:
38
- model_cls = AutoModelForCausalLM._model_mapping[type(config)]
46
+ model_cls = AutoModel._model_mapping[type(config)]
39
47
  attn_implementation = None
40
48
  if getattr(model_cls, "_supports_sdpa", False):
41
49
  attn_implementation = "sdpa"
@@ -91,13 +99,23 @@ def load_base_model_and_config(
91
99
  else:
92
100
  device_map = "auto"
93
101
 
94
- model = AutoModelForCausalLM.from_pretrained(
102
+ if hasattr(config, "text_config") and hasattr(config, "vision_config"):
103
+ config.text_config.use_cache = use_cache
104
+ config.text_config.attn_implementation = attn_implementation
105
+ auto_model_cls = AutoModelForImageTextToText
106
+ elif hasattr(config, "use_cache"):
107
+ config.use_cache = use_cache
108
+ config.attn_implementation = attn_implementation
109
+ auto_model_cls = AutoModelForCausalLM
110
+ else:
111
+ raise ValueError("Unsupported model")
112
+
113
+ model = auto_model_cls.from_pretrained(
95
114
  model_id_or_path,
96
- torch_dtype=torch_dtype,
97
- attn_implementation=attn_implementation,
98
- use_cache=use_cache,
115
+ config=config,
99
116
  device_map=device_map,
100
117
  quantization_config=quantization_config,
118
+ torch_dtype=torch_dtype,
101
119
  )
102
120
  if quantization_config:
103
121
  # convert all non-kbit layers to float32
@@ -256,9 +256,6 @@ def generate(
256
256
  _LOG.info(f"{max_new_tokens=}")
257
257
 
258
258
  t0 = time.time()
259
- # use MOSTLY_HUGGING_FACE_TOKEN if available, otherwise HF_TOKEN should be unset or with a pre-set value as is
260
- if os.getenv("MOSTLY_HUGGING_FACE_TOKEN"):
261
- os.environ["HF_TOKEN"] = os.environ["MOSTLY_HUGGING_FACE_TOKEN"]
262
259
 
263
260
  is_peft_adapter = (workspace.model_path / "adapter_config.json").exists()
264
261
  is_vllm_available = importlib.util.find_spec("vllm") is not None
@@ -16,7 +16,6 @@ import gc
16
16
  import json
17
17
  import logging
18
18
  import math
19
- import os
20
19
  import time
21
20
  import warnings
22
21
  from collections.abc import Callable
@@ -465,10 +464,6 @@ def train(
465
464
  model_config = LSTMFromScratchConfig(vocab_size=len(tokenizer), with_dp=with_dp)
466
465
  model = LSTMFromScratchLMHeadModel(model_config).to(device)
467
466
  else:
468
- # use MOSTLY_HUGGING_FACE_TOKEN if available
469
- if os.getenv("MOSTLY_HUGGING_FACE_TOKEN"):
470
- os.environ["HF_TOKEN"] = os.environ["MOSTLY_HUGGING_FACE_TOKEN"]
471
-
472
467
  model, model_config = load_base_model_and_config(
473
468
  model_id_or_path,
474
469
  device=device,
@@ -758,15 +758,7 @@ def generate(
758
758
  _LOG.info(f"{gen_column_order=}")
759
759
  if not enable_flexible_generation:
760
760
  # check if resolved column order is the same as the one from training
761
- trn_column_order = [SLEN_SIDX_SDEC_COLUMN] if is_sequential else []
762
- trn_column_order += [
763
- get_argn_name(
764
- argn_processor=tgt_stats["columns"][col][ARGN_PROCESSOR],
765
- argn_table=tgt_stats["columns"][col][ARGN_TABLE],
766
- argn_column=tgt_stats["columns"][col][ARGN_COLUMN],
767
- )
768
- for col in tgt_stats["columns"].keys()
769
- ]
761
+ trn_column_order = get_columns_from_cardinalities(tgt_cardinalities)
770
762
  _LOG.info(f"{trn_column_order=}")
771
763
  if gen_column_order != trn_column_order:
772
764
  raise ValueError(
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mostlyai-engine"
3
- version = "1.4.6"
3
+ version = "1.4.8"
4
4
  description = "Synthetic Data Engine"
5
5
  authors = [{ name = "MOSTLY AI", email = "dev@mostly.ai" }]
6
6
  requires-python = ">=3.10"
File without changes