MProcs 8.4__tar.gz → 8.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 (55) hide show
  1. mprocs-8.8/PKG-INFO +16 -0
  2. mprocs-8.8/README.md +3 -0
  3. mprocs-8.8/pyproject.toml +37 -0
  4. mprocs-8.8/src/MProcs/scripts/__init__.py +5 -0
  5. mprocs-8.8/src/MProcs/scripts/ai_image.py +255 -0
  6. mprocs-8.8/src/MProcs/scripts/bible.txt +1 -0
  7. mprocs-8.8/src/MProcs/scripts/data/acadlist.json +1 -0
  8. mprocs-8.8/src/MProcs/scripts/data/bible1.json +1 -0
  9. mprocs-8.8/src/MProcs/scripts/data/biology1.json +1 -0
  10. mprocs-8.8/src/MProcs/scripts/data/chemistry1.json +1 -0
  11. mprocs-8.8/src/MProcs/scripts/data/chi_chars.json +1 -0
  12. mprocs-8.8/src/MProcs/scripts/data/degrees1.json +1 -0
  13. mprocs-8.8/src/MProcs/scripts/data/dhammapada1.json +1 -0
  14. mprocs-8.8/src/MProcs/scripts/data/diction.json +1 -0
  15. mprocs-8.8/src/MProcs/scripts/data/fcci.json +1 -0
  16. mprocs-8.8/src/MProcs/scripts/data/hospitals.json +3652 -0
  17. mprocs-8.8/src/MProcs/scripts/data/jamo.json +1 -0
  18. mprocs-8.8/src/MProcs/scripts/data/katakana.json +1 -0
  19. mprocs-8.8/src/MProcs/scripts/data/koran1.json +6238 -0
  20. mprocs-8.8/src/MProcs/scripts/data/legal_terms1.json +1 -0
  21. mprocs-8.8/src/MProcs/scripts/data/medicals1.json +1 -0
  22. mprocs-8.8/src/MProcs/scripts/data/mims.json +1 -0
  23. mprocs-8.8/src/MProcs/scripts/data/proverbs.json +1 -0
  24. mprocs-8.8/src/MProcs/scripts/data/psychology1.json +1 -0
  25. mprocs-8.8/src/MProcs/scripts/data/science1.json +1 -0
  26. mprocs-8.8/src/MProcs/scripts/data/strains.json +2209 -0
  27. mprocs-8.8/src/MProcs/scripts/data/tracks.json +1 -0
  28. mprocs-8.8/src/MProcs/scripts/data/verses1.json +1 -0
  29. mprocs-8.8/src/MProcs/scripts/data_loader.py +34 -0
  30. mprocs-8.8/src/MProcs/scripts/deepseek_ai.py +493 -0
  31. mprocs-8.8/src/MProcs/scripts/keys.py +97 -0
  32. mprocs-8.8/src/MProcs/scripts/lpro.py +9579 -0
  33. mprocs-8.8/src/MProcs/scripts/lpro_s.py +7223 -0
  34. mprocs-8.8/src/MProcs/scripts/main.py +42 -0
  35. mprocs-8.8/src/MProcs/scripts/scmpy.py +2567 -0
  36. mprocs-8.8/src/MProcs/scripts/session.py +2 -0
  37. mprocs-8.8/src/MProcs/scripts/tui.py +942 -0
  38. mprocs-8.8/src/MProcs/scripts/version_checker.py +76 -0
  39. mprocs-8.8/src/MProcs/scripts/wrappers.py +102 -0
  40. mprocs-8.8/src/MProcs.egg-info/PKG-INFO +16 -0
  41. mprocs-8.8/src/MProcs.egg-info/SOURCES.txt +45 -0
  42. mprocs-8.8/src/MProcs.egg-info/entry_points.txt +5 -0
  43. mprocs-8.8/src/MProcs.egg-info/requires.txt +5 -0
  44. mprocs-8.4/LICENSE +0 -19
  45. mprocs-8.4/PKG-INFO +0 -32
  46. mprocs-8.4/pyproject.toml +0 -24
  47. mprocs-8.4/src/MProcs/scripts/MProcs.py +0 -7912
  48. mprocs-8.4/src/MProcs/scripts/__init__.py +0 -0
  49. mprocs-8.4/src/MProcs.egg-info/PKG-INFO +0 -32
  50. mprocs-8.4/src/MProcs.egg-info/SOURCES.txt +0 -10
  51. mprocs-8.4/src/MProcs.egg-info/entry_points.txt +0 -2
  52. {mprocs-8.4 → mprocs-8.8}/setup.cfg +0 -0
  53. {mprocs-8.4 → mprocs-8.8}/src/MProcs/__init__.py +0 -0
  54. {mprocs-8.4 → mprocs-8.8}/src/MProcs.egg-info/dependency_links.txt +0 -0
  55. {mprocs-8.4 → mprocs-8.8}/src/MProcs.egg-info/top_level.txt +0 -0
mprocs-8.8/PKG-INFO ADDED
@@ -0,0 +1,16 @@
1
+ Metadata-Version: 2.4
2
+ Name: MProcs
3
+ Version: 8.8
4
+ Summary: MProcs - derived from NeonBunny
5
+ Author-email: tderk <usvu.tech@gmail.com>
6
+ License: MIT
7
+ Requires-Python: >=3.8
8
+ Description-Content-Type: text/markdown
9
+ Provides-Extra: dev
10
+ Requires-Dist: pytest; extra == "dev"
11
+ Requires-Dist: black; extra == "dev"
12
+ Requires-Dist: flake8; extra == "dev"
13
+
14
+ # MProcs
15
+
16
+ Derived from NeonBunny. A Life program by tderk, originally LPro.py and Destiny [2024].
mprocs-8.8/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # MProcs
2
+
3
+ Derived from NeonBunny. A Life program by tderk, originally LPro.py and Destiny [2024].
@@ -0,0 +1,37 @@
1
+ [build-system]
2
+ requires = ["setuptools>=61.0", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "MProcs"
7
+ version = "8.8"
8
+ description = "MProcs - derived from NeonBunny"
9
+ requires-python = ">=3.8"
10
+ readme = "README.md"
11
+ license = { text = "MIT" }
12
+ authors = [
13
+ { name = "tderk", email = "usvu.tech@gmail.com" }
14
+ ]
15
+
16
+ [project.scripts]
17
+ MProcs = "MProcs.scripts.main:run"
18
+ mprocs = "MProcs.scripts.main:run"
19
+ lpro = "MProcs.scripts.lpro:main"
20
+ lpro-s = "MProcs.scripts.lpro_s:main"
21
+
22
+ [tool.setuptools]
23
+ package-dir = {"" = "src"}
24
+
25
+ [tool.setuptools.packages.find]
26
+ where = ["src"]
27
+ include = ["MProcs*", "MProcs.*"]
28
+ exclude = ["tests*", "docs*", "venv*", "build*", "dist*", "*test*"]
29
+
30
+ [tool.setuptools.package-data]
31
+ "MProcs" = ["py.typed"]
32
+ "MProcs.scripts" = ["*.txt", "*.md", "*.json", "data/*", "logs/*"]
33
+
34
+ dependencies = ["requests", "ddgs"]
35
+
36
+ [project.optional-dependencies]
37
+ dev = ["pytest", "black", "flake8"]
@@ -0,0 +1,5 @@
1
+ import sys
2
+ import os
3
+
4
+ sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
5
+
@@ -0,0 +1,255 @@
1
+ import os
2
+ import sys
3
+ import time
4
+ import logging
5
+ import subprocess
6
+ import glob
7
+
8
+ logging.getLogger("huggingface_hub").setLevel(logging.ERROR)
9
+
10
+ os.environ.setdefault("HF_TOKEN", "0")
11
+ os.environ["HF_HUB_DISABLE_TELEMETRY"] = "1"
12
+ os.environ.setdefault("TRANSFORMERS_VERBOSITY", "error")
13
+
14
+ MODELS = {
15
+ "LCM Dreamshaper": ("SimianLuo/LCM_Dreamshaper_v7", 4, "4-step fast generation (default)"),
16
+ "Balanced": ("nota-ai/bk-sdm-small", 15, "Lightweight general purpose"),
17
+ "Anime": ("gsdf/Counterfeit-V2.5", 15, "Public anime / illustration style"),
18
+ }
19
+
20
+ SIZE_OPTIONS = [
21
+ ("256x256", 256, 256),
22
+ ("320x320", 320, 320),
23
+ ("384x384", 384, 384),
24
+ ("448x448", 448, 448),
25
+ ("512x512", 512, 512),
26
+ ("512x768", 512, 768),
27
+ ("768x512", 768, 512),
28
+ ("768x768", 768, 768),
29
+ ("1024x1024", 1024, 1024),
30
+ ]
31
+
32
+ def is_termux():
33
+ if not os.path.exists('/data/data/com.termux/files/usr/bin/termux-open'):
34
+ return False
35
+ if os.path.exists('/etc/debian_version') or os.path.exists('/etc/lsb-release'):
36
+ return False
37
+ return True
38
+
39
+ def ensure_deps():
40
+ if is_termux():
41
+ print("\nAI image generation requires PyTorch, which is not available on Termux (Android).")
42
+ print("Use this feature on a desktop Linux system instead.")
43
+ return False
44
+
45
+ deps = [
46
+ ("torch", "torch", ["--extra-index-url", "https://download.pytorch.org/whl/cpu"]),
47
+ ("diffusers", "diffusers", []),
48
+ ("transformers", "transformers", []),
49
+ ("PIL", "Pillow", []),
50
+ ("tqdm", "tqdm", []),
51
+ ("huggingface_hub", "huggingface-hub", []),
52
+ ]
53
+ missing = []
54
+ for mod_name, pkg_name, extra_args in deps:
55
+ try:
56
+ __import__(mod_name)
57
+ except ImportError:
58
+ missing.append((mod_name, pkg_name, extra_args))
59
+
60
+ if not missing:
61
+ return True
62
+
63
+ print("\n=== Missing Dependencies for AI Image Generation ===")
64
+ for _, pkg_name, _ in missing:
65
+ print(f" - {pkg_name}")
66
+ print()
67
+ print(" 1. Install dependencies (recommended)")
68
+ print(" 2. Cancel")
69
+ resp = input("Choose (1-2): ").strip()
70
+ if resp != "1":
71
+ print("Cancelled.")
72
+ return False
73
+
74
+ for mod_name, pkg_name, extra_args in missing:
75
+ print(f"\nInstalling {pkg_name}...", flush=True)
76
+ cmd = [sys.executable, '-m', 'pip', 'install', pkg_name]
77
+ cmd.extend(extra_args)
78
+ result = subprocess.run(cmd)
79
+ if result.returncode == 0:
80
+ print(f"{pkg_name} installed.", flush=True)
81
+ else:
82
+ print(f"Failed to install {pkg_name}.", flush=True)
83
+ resp = input("Retry with --break-system-packages? (y/N): ").strip().lower()
84
+ if resp == "y":
85
+ cmd = [sys.executable, '-m', 'pip', 'install', '--break-system-packages', pkg_name]
86
+ cmd.extend(extra_args)
87
+ result = subprocess.run(cmd)
88
+ if result.returncode == 0:
89
+ print(f"{pkg_name} installed.", flush=True)
90
+ else:
91
+ print(f"Still failed to install {pkg_name}.", flush=True)
92
+ return False
93
+ else:
94
+ return False
95
+
96
+ for mod_name, pkg_name, _ in missing:
97
+ __import__(mod_name)
98
+
99
+ return True
100
+
101
+ CLIP_MAX_TOKENS = 77
102
+
103
+ def _pre_truncate(text):
104
+ words = text.split()
105
+ if len(words) <= CLIP_MAX_TOKENS - 2:
106
+ return text
107
+ return " ".join(words[:CLIP_MAX_TOKENS - 2])
108
+
109
+ def clean_cache(model_id):
110
+ from huggingface_hub import constants
111
+
112
+ model_cache = os.path.join(constants.default_cache_path, "models--" + model_id.replace("/", "--"))
113
+ for f in glob.glob(os.path.join(model_cache, "blobs", "*.incomplete")):
114
+ os.remove(f)
115
+ for f in glob.glob(os.path.join(constants.default_cache_path, ".locks", "models--" + model_id.replace("/", "--"), "*.lock")):
116
+ os.remove(f)
117
+
118
+ def run(default_prompt=""):
119
+ if not ensure_deps():
120
+ return
121
+
122
+ import torch
123
+ from tqdm import tqdm
124
+ from diffusers import DiffusionPipeline
125
+
126
+ save_dir = os.path.join(os.getcwd(), "ai_images")
127
+ os.makedirs(save_dir, exist_ok=True)
128
+
129
+ print()
130
+ print("=== AI Image Generation ===")
131
+ print()
132
+
133
+ if default_prompt:
134
+ truncated_prompt = _pre_truncate(default_prompt)
135
+ prompt = input(f"Image prompt [Default= {truncated_prompt}]: ").strip()
136
+ if not prompt:
137
+ prompt = truncated_prompt
138
+ else:
139
+ prompt = input("Image prompt: ").strip()
140
+ if not prompt:
141
+ print("No prompt entered.")
142
+ return
143
+
144
+ print()
145
+ print("Models:")
146
+ model_keys = list(MODELS.keys())
147
+ for i, name in enumerate(model_keys, 1):
148
+ _, _, desc = MODELS[name]
149
+ default_mark = " (default)" if i == 1 else ""
150
+ print(f" {i}. {name}{default_mark}")
151
+ model_choice = input(f"Model (1-{len(model_keys)}, Enter=1): ").strip()
152
+ if not model_choice:
153
+ model_idx = 0
154
+ else:
155
+ try:
156
+ model_idx = int(model_choice) - 1
157
+ model_idx = max(0, min(model_idx, len(model_keys) - 1))
158
+ except ValueError:
159
+ model_idx = 0
160
+ model_name = model_keys[model_idx]
161
+ model_id, default_steps, _ = MODELS[model_name]
162
+
163
+ steps_input = input(f"Steps (Enter={default_steps}): ").strip()
164
+ steps = int(steps_input) if steps_input else default_steps
165
+
166
+ guidance_input = input(f"Guidance (Enter=7.5): ").strip()
167
+ guidance = float(guidance_input) if guidance_input else 7.5
168
+
169
+ print()
170
+ print("Image sizes:")
171
+ for i, (label, w, h) in enumerate(SIZE_OPTIONS, 1):
172
+ default_mark = " (default)" if i == 5 else ""
173
+ print(f" {i}. {label}{default_mark}")
174
+ size_choice = input(f"Size (1-{len(SIZE_OPTIONS)}, Enter=5): ").strip()
175
+ if not size_choice:
176
+ size_idx = 4
177
+ else:
178
+ try:
179
+ size_idx = int(size_choice) - 1
180
+ size_idx = max(0, min(size_idx, len(SIZE_OPTIONS) - 1))
181
+ except ValueError:
182
+ size_idx = 4
183
+ _, width, height = SIZE_OPTIONS[size_idx]
184
+
185
+ seed_input = input(f"Seed (Enter=-1 for random): ").strip()
186
+ seed = int(seed_input) if seed_input else -1
187
+
188
+ print()
189
+ print(f"Model: {model_name} ({model_id})")
190
+ print(f"Steps: {steps}")
191
+ print(f"Guidance: {guidance}")
192
+ print(f"Size: {width}x{height}")
193
+ print(f"Seed: {'random' if seed == -1 else seed}")
194
+ print(f"Output folder: {save_dir}/")
195
+ print()
196
+
197
+ confirm = input("Generate? (Y/n): ").strip().lower()
198
+ if confirm == "n":
199
+ print("Cancelled.")
200
+ return
201
+
202
+ print(f"\nLoading model {model_name}...", flush=True)
203
+ start = time.time()
204
+
205
+ clean_cache(model_id)
206
+
207
+ pipe = DiffusionPipeline.from_pretrained(
208
+ model_id, safety_checker=None, requires_safety_checker=False
209
+ )
210
+ pipe.to("cpu")
211
+ pipe.enable_attention_slicing()
212
+
213
+ print(f"Model loaded in {time.time()-start:.1f}s", flush=True)
214
+
215
+ gen = torch.Generator("cpu").manual_seed(seed) if seed != -1 else None
216
+
217
+ bar = tqdm(total=steps, desc="Generating", unit="step")
218
+
219
+ def cb(_, step, ___, cb_kwargs):
220
+ bar.update(1)
221
+ return cb_kwargs
222
+
223
+ tokens = pipe.tokenizer(prompt, truncation=True, max_length=77, return_tensors="pt")
224
+ truncated = pipe.tokenizer.decode(tokens.input_ids[0], skip_special_tokens=True)
225
+ if truncated != prompt:
226
+ print(f"Prompt truncated to {len(tokens.input_ids[0])} CLIP tokens.")
227
+ prompt = truncated
228
+
229
+ gen_start = time.time()
230
+ image = pipe(
231
+ prompt,
232
+ num_inference_steps=steps,
233
+ guidance_scale=guidance,
234
+ width=width,
235
+ height=height,
236
+ generator=gen,
237
+ callback_on_step_end=cb,
238
+ ).images[0]
239
+ bar.close()
240
+ gen_time = time.time() - gen_start
241
+
242
+ timestamp = int(time.time())
243
+ filename = f"ai_image_{timestamp}.png"
244
+ filepath = os.path.join(save_dir, filename)
245
+ image.save(filepath)
246
+
247
+ print()
248
+ print(f"Prompt: {prompt}")
249
+ print(f"Generated in {gen_time:.1f}s")
250
+ print(f"Saved: {filepath}")
251
+ print(f"file://{filepath}")
252
+
253
+
254
+ if __name__ == "__main__":
255
+ run()