mostlyai-engine 2.6.2__tar.gz → 2.7.1__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 (55) hide show
  1. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/PKG-INFO +8 -9
  2. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/__init__.py +1 -1
  3. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_language/engine/vllm_engine.py +43 -1
  4. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_language/xgrammar_utils.py +11 -8
  5. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/pyproject.toml +9 -10
  6. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/.gitignore +0 -0
  7. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/LICENSE +0 -0
  8. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/README.md +0 -0
  9. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_common.py +0 -0
  10. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_dtypes.py +0 -0
  11. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_encoding_types/__init__.py +0 -0
  12. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_encoding_types/language/__init__.py +0 -0
  13. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_encoding_types/language/categorical.py +0 -0
  14. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_encoding_types/language/datetime.py +0 -0
  15. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_encoding_types/language/numeric.py +0 -0
  16. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_encoding_types/language/text.py +0 -0
  17. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_encoding_types/tabular/__init__.py +0 -0
  18. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_encoding_types/tabular/categorical.py +0 -0
  19. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_encoding_types/tabular/character.py +0 -0
  20. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_encoding_types/tabular/datetime.py +0 -0
  21. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_encoding_types/tabular/itt.py +0 -0
  22. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_encoding_types/tabular/lat_long.py +0 -0
  23. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_encoding_types/tabular/numeric.py +0 -0
  24. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_language/__init__.py +0 -0
  25. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_language/common.py +0 -0
  26. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_language/encoding.py +0 -0
  27. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_language/engine/__init__.py +0 -0
  28. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_language/engine/base.py +0 -0
  29. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_language/engine/hf_engine.py +0 -0
  30. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_language/generation.py +0 -0
  31. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_language/interface.py +0 -0
  32. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_language/lstm.py +0 -0
  33. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_language/tokenizer_utils.py +0 -0
  34. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_language/training.py +0 -0
  35. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_language/xgrammar_hf_logits.py +0 -0
  36. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_memory.py +0 -0
  37. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_tabular/__init__.py +0 -0
  38. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_tabular/argn.py +0 -0
  39. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_tabular/common.py +0 -0
  40. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_tabular/encoding.py +0 -0
  41. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_tabular/fairness.py +0 -0
  42. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_tabular/generation.py +0 -0
  43. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_tabular/interface.py +0 -0
  44. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_tabular/probability.py +0 -0
  45. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_tabular/training.py +0 -0
  46. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_training_utils.py +0 -0
  47. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/_workspace.py +0 -0
  48. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/analysis.py +0 -0
  49. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/domain.py +0 -0
  50. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/encoding.py +0 -0
  51. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/generation.py +0 -0
  52. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/logging.py +0 -0
  53. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/random_state.py +0 -0
  54. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/splitting.py +0 -0
  55. {mostlyai_engine-2.6.2 → mostlyai_engine-2.7.1}/mostlyai/engine/training.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.4
1
+ Metadata-Version: 2.5
2
2
  Name: mostlyai-engine
3
- Version: 2.6.2
3
+ Version: 2.7.1
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
@@ -27,7 +27,7 @@ Requires-Dist: accelerate>=1.5.0
27
27
  Requires-Dist: datasets>=3.0.0
28
28
  Requires-Dist: huggingface-hub[hf-xet]>=0.30.2
29
29
  Requires-Dist: joblib>=1.4.2
30
- Requires-Dist: json-repair>=0.47.0
30
+ Requires-Dist: json-repair>=0.60.1
31
31
  Requires-Dist: numpy>=2.0.0
32
32
  Requires-Dist: opacus>=1.6.0
33
33
  Requires-Dist: pandas>=2.2.0
@@ -35,17 +35,16 @@ Requires-Dist: peft>=0.18.2
35
35
  Requires-Dist: psutil<6,>=5.9.5
36
36
  Requires-Dist: pyarrow>=16.0.0
37
37
  Requires-Dist: scikit-learn>=1.4.0
38
- Requires-Dist: setuptools<81.0.0,>=77.0.3
39
38
  Requires-Dist: tokenizers>=0.21.1
40
- Requires-Dist: torch<2.12.0,>=2.11.0
39
+ Requires-Dist: torch<2.14.0,>=2.13.0
41
40
  Requires-Dist: torchaudio<2.12.0,>=2.11.0
42
- Requires-Dist: torchvision<0.27.0,>=0.26.0
43
- Requires-Dist: transformers>=5.5.1
44
- Requires-Dist: xgrammar<1.0.0,>=0.1.32
41
+ Requires-Dist: torchvision<0.29.0,>=0.28.0
42
+ Requires-Dist: transformers>=5.5.3
43
+ Requires-Dist: xgrammar<1.0.0,>=0.2.1
45
44
  Provides-Extra: gpu
46
45
  Requires-Dist: bitsandbytes==0.42.0; (sys_platform == 'darwin') and extra == 'gpu'
47
46
  Requires-Dist: bitsandbytes>=0.45.5; (sys_platform == 'linux') and extra == 'gpu'
48
- Requires-Dist: vllm==0.20.0; (sys_platform == 'linux' or sys_platform == 'darwin') and extra == 'gpu'
47
+ Requires-Dist: vllm==0.28.0; (sys_platform == 'linux') and extra == 'gpu'
49
48
  Description-Content-Type: text/markdown
50
49
 
51
50
  # Synthetic Data Engine 💎
@@ -34,7 +34,7 @@ __all__ = [
34
34
  "TabularARGN",
35
35
  "LanguageModel",
36
36
  ]
37
- __version__ = "2.6.2"
37
+ __version__ = "2.7.1"
38
38
 
39
39
  # suppress specific warning related to os.fork() in multi-threaded processes
40
40
  warnings.filterwarnings("ignore", category=DeprecationWarning, message=".*multi-threaded.*fork.*")
@@ -14,9 +14,52 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
+ import inspect
18
+ import re
19
+ import textwrap
17
20
  import time
18
21
  from os import PathLike
19
22
 
23
+ # Workaround for vLLM / Triton kernel warmup issue (https://github.com/vllm-project/vllm/issues/49920)
24
+ # In Triton 3.7.x, `re.search(r"^def\s+\w+\s*\(", src, re.MULTILINE)` in `triton/runtime/jit.py:JITCallable.__init__`
25
+ # assumes `def` is at the start of a line. When vLLM >= 0.28.0 warms up multi-decorated kernels
26
+ # (e.g. `minimax_m3/common/ops/index_topk.py` wrapped with `@triton.heuristics`), the regex fails,
27
+ # raising `AttributeError: 'NoneType' object has no attribute 'start'`.
28
+ # TODO: Remove once upstream vLLM/Triton safely handles multi-decorated kernel source inspection.
29
+ try:
30
+ import triton.runtime.jit
31
+
32
+ _orig_jit_callable_init = triton.runtime.jit.JITCallable.__init__
33
+
34
+ def _patched_jit_callable_init(self, fn):
35
+ try:
36
+ _orig_jit_callable_init(self, fn)
37
+ except AttributeError as e:
38
+ if "'NoneType' object has no attribute 'start'" in str(e):
39
+ self.fn = fn
40
+ self.signature = inspect.signature(fn)
41
+ self.raw_src, self.starting_line_number = inspect.getsourcelines(fn)
42
+ self._fn_name = triton.runtime.jit.get_full_name(fn)
43
+ self._hash_lock = triton.runtime.jit.threading.RLock()
44
+ src = textwrap.dedent("".join(self.raw_src))
45
+ m = re.search(r"(?:^|\n)\s*def\s+[\w_]+\s*\(", src)
46
+ if m:
47
+ def_pos = src.find("def", m.start())
48
+ src = src[def_pos:]
49
+ else:
50
+ lines = src.splitlines()
51
+ def_lines = [i for i, line in enumerate(lines) if "def " in line]
52
+ if def_lines:
53
+ src = "\n".join(lines[def_lines[0] :])
54
+ self._src = src
55
+ self.hash = None
56
+ else:
57
+ raise
58
+
59
+ triton.runtime.jit.JITCallable.__init__ = _patched_jit_callable_init
60
+ except Exception: # noqa: BLE001, S110
61
+ pass
62
+
20
63
  import torch
21
64
  from peft import PeftConfig
22
65
  from pydantic import BaseModel
@@ -88,7 +131,6 @@ class VLLMEngine(LanguageEngine):
88
131
  enable_lora=True,
89
132
  dtype=torch.bfloat16 if is_bf16_supported(device) else torch.float16,
90
133
  # enforce_eager=True, # results in big slowdown, but is needed when running pytest locally
91
- swap_space=0,
92
134
  disable_log_stats=True,
93
135
  tensor_parallel_size=torch.cuda.device_count(),
94
136
  gpu_memory_utilization=get_dynamic_gpu_memory_utilization(),
@@ -32,14 +32,17 @@ JSON_NULL = "null"
32
32
 
33
33
 
34
34
  def prepend_grammar_root_with_space(grammar: str) -> str:
35
- # XGrammar always starts with "{" when enforcing JSON Schema
36
- # training is done on strings like ` {...} {...}`
37
- # later, generation is done with prompt like ` {...}`
38
- # so the first output token must be a space
39
- start_of_grammar = 'root ::= "{"'
40
- start_of_grammar_with_space = 'root ::= " {"'
41
- assert start_of_grammar in grammar
42
- return grammar.replace(start_of_grammar, start_of_grammar_with_space)
35
+ # JSON-schema grammars start at "{". Training strings look like ` {...} {...}`
36
+ # and generation prompts look like ` {...}`, so the first output token must be a space.
37
+ # xgrammar <=0.2.3 emits `root ::= "{"`. xgrammar 0.2.7 emits `root ::= (("{"`.
38
+ replacements = (
39
+ ('root ::= "{"', 'root ::= " {"'),
40
+ ('root ::= (("{"', 'root ::= ((" {"'),
41
+ )
42
+ for start_of_grammar, start_of_grammar_with_space in replacements:
43
+ if start_of_grammar in grammar:
44
+ return grammar.replace(start_of_grammar, start_of_grammar_with_space)
45
+ raise AssertionError("unrecognized xgrammar root rule")
43
46
 
44
47
 
45
48
  def ensure_seed_can_be_tokenized(seed_data: pd.DataFrame, tokenizer: PreTrainedTokenizerBase) -> pd.DataFrame:
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "mostlyai-engine"
3
- version = "2.6.2"
3
+ version = "2.7.1"
4
4
  description = "Synthetic Data Engine"
5
5
  requires-python = ">=3.11,<3.14"
6
6
  readme = "README.md"
@@ -23,32 +23,31 @@ classifiers = [
23
23
  ]
24
24
 
25
25
  dependencies = [
26
- "setuptools>=77.0.3,<81.0.0", # vllm 0.20 caps setuptools for Python > 3.11
27
26
  "numpy>=2.0.0",
28
27
  "pandas>=2.2.0",
29
28
  "pyarrow>=16.0.0",
30
29
  "joblib>=1.4.2",
31
30
  "scikit-learn>=1.4.0",
32
31
  "psutil>=5.9.5,<6", # upgrade when colab psutil is updated
33
- "tokenizers>=0.21.1", # vllm 0.20 lower bound
34
- "transformers>=5.5.1", # vllm 0.20 forbids 5.0–5.4 and 5.5.0; >=5.5.1 needed for newer HF model types (e.g. gemma4)
32
+ "tokenizers>=0.21.1", # vllm lower bound
33
+ "transformers>=5.5.3", # aligned with vllm 0.28
35
34
  "datasets>=3.0.0",
36
35
  "accelerate>=1.5.0",
37
36
  "peft>=0.18.2", # transformers 5.7+ checks min PEFT in model.add_adapter (integrations/peft.py)
38
37
  "huggingface-hub[hf-xet]>=0.30.2",
39
38
  "opacus>=1.6.0",
40
- "xgrammar>=0.1.32,<1.0.0", # aligned with vllm 0.20
41
- "json-repair>=0.47.0",
42
- "torch>=2.11.0,<2.12.0",
39
+ "xgrammar>=0.2.1,<1.0.0", # aligned with vllm 0.28
40
+ "json-repair>=0.60.1",
41
+ "torch>=2.13.0,<2.14.0",
43
42
  "torchaudio>=2.11.0,<2.12.0",
44
- "torchvision>=0.26.0,<0.27.0"
43
+ "torchvision>=0.28.0,<0.29.0",
45
44
  ]
46
45
 
47
46
  [project.optional-dependencies]
48
47
  gpu = [
49
48
  "bitsandbytes==0.42.0; sys_platform == 'darwin'",
50
49
  "bitsandbytes>=0.45.5; sys_platform == 'linux'",
51
- "vllm==0.20.0; sys_platform == 'linux' or sys_platform == 'darwin'",
50
+ "vllm==0.28.0; sys_platform == 'linux'",
52
51
  ]
53
52
 
54
53
  [dependency-groups]
@@ -66,7 +65,7 @@ docs = [
66
65
  "mkdocs-material>=9.0",
67
66
  "mkdocs-llmstxt>=0.2",
68
67
  "griffe>=1.0",
69
- "pymdown-extensions>=10.0",
68
+ "pymdown-extensions>=11.0",
70
69
  "griffe-fieldz>=0.2",
71
70
  "black>=26.3.1",
72
71
  ]
File without changes