From b82f11460bd4c75166ed4dbcff191dd00f20985e Mon Sep 17 00:00:00 2001 From: alpertunga-bile Date: Wed, 29 Nov 2023 23:43:38 +0300 Subject: [PATCH] preprocess algo is optimized and some code parts are refactored --- __init__.py | 9 ++-- __pycache__/__init__.cpython-310.pyc | Bin 906 -> 1053 bytes __pycache__/preprocess.cpython-310.pyc | Bin 1763 -> 1657 bytes __pycache__/prompt_generator.cpython-310.pyc | Bin 6404 -> 6398 bytes generator/__init__.py | 7 ++- .../__pycache__/__init__.cpython-310.pyc | Bin 1073 -> 1128 bytes .../__pycache__/generate.cpython-310.pyc | Bin 2832 -> 2832 bytes generator/__pycache__/model.cpython-310.pyc | Bin 1206 -> 1198 bytes generator/model.py | 12 ++--- preprocess.py | 42 +++++++++--------- prompt_generator.py | 2 +- 11 files changed, 39 insertions(+), 33 deletions(-) diff --git a/__init__.py b/__init__.py index c76f9bd..6124cf1 100644 --- a/__init__.py +++ b/__init__.py @@ -12,18 +12,18 @@ from prompt_generator import PromptGenerator print("/_\ Loading Prompt Generator") -# Check prompt_generators folder under the models folder +# check prompt_generators folder under the models folder root = join(models_dir, "prompt_generators") if exists(root) is False: - print(f"/_\ {root} is created. Please add your prompt generators to {root} folder") mkdir(root) + print(f"/_\ {root} is created. Please add your prompt generators to {root} folder") prompts_file = join(base_path, "generated_prompts") if exists(prompts_file) is False: mkdir(prompts_file) -# Import PromptGenerator node to ComfyUI +# import PromptGenerator node to ComfyUI NODE_CLASS_MAPPINGS = { "Prompt Generator": PromptGenerator, @@ -34,3 +34,6 @@ NODE_DISPLAY_NAME_MAPPINGS = { } __all__ = ["NODE_CLASS_MAPPINGS", "NODE_DISPLAY_NAME_MAPPINGS"] + +print("/_\ Loaded Successfully") +print("-" * 100) diff --git a/__pycache__/__init__.cpython-310.pyc b/__pycache__/__init__.cpython-310.pyc index 80e2ea156f6baa5d39b04756107b83eb2ac94603..94a085d109942ede8d7e1b203ee04ae0b425745d 100644 GIT binary patch delta 247 zcmeBTpUc6U&&$ij00dU^(o=6t&M3^_~a+1q^2kYmnJ8t78j?L=HygXrRdTD lY_?;PV`S8u9Lp>z!NDlT$i>9N$ic|M%JLtCIaoM=d;mgkG*kcp delta 99 zcmbQs(Z$Z2&&$ij00fHzB~lkn=? voE2M&U@(KG&}KPC1IEo~ndBH5wI;t|mJ|_VaQ>B3mg=N}F7`q6*oH zsI4P!Z1Dcdn1}Pqni5h;u@d;n;Ol4XWKVGi@Ecxw!a;*_47dhr0QuOKOgg=8u-B8F zFwlwNXa>M>9jkMO!or{{eGIQ>%aBY^2>m8|L}m{Yc7*yQKz*9x74+YQhgXXxJ)(^3IrhKccFljep*k@8h5eC#=D9CnHrC`_<)90rN9OhvXG1>Ky7P$!6U zwj*C_kE=Qywe46%yK$o1ZroF{bGDn52Z`G76Dd0X=5szG&RWV9Nzo(IX zppCf-?DaH24c90q3_Em&IE3JF2#1s*)NJ;P{lF91ck987p{iK}M!T8<@K_;GHM1ta zaIqMI0tyexv67&~ms-zd>-@4k4>wjlH|z76=M_H+L+K|$)YYf`7Zw(_Q1D>%C39sY d|G(l+Yc~?TP%fJZ(q{5pG>%pv5qg_rIZ$n4=R;Xp8^^}W?Ev?&31N!RW?|t zAU?)x`S+dd^A~w}q`4Vdn_44o@NLBy2kI*y|SW;TdF8++8EZ-uCOs z_NVt?s}Raysn0MsW8yy2*3hHDMTq-0L|ATmwe6-T*K0w@kPI|fFbJ|=Ez;p<4lZ?? zp?x0^LK4Co!r?95gO?=#j%3lH?I><^C^qEty9c z*TyJ9(UyJMrW*PYVl(jTwJ>In8Z|Gr>Om-Ler#2IUwFLe$N}}$$Saqn7poPoT;V*n zH^r034arMAep8CFFB@BaSjvi>P*$p;;N=taQCCSru9{-`S^YhODTH3=H5fSfj8TVD zaHs8c2VGwO?3u+L-SN-?c|n`5_`K8Q!c7--03D;;p6%5f=YeyhQo Ub+G^#5$K;OL;7Km4zv8}Kgt8ZG5`Po diff --git a/__pycache__/prompt_generator.cpython-310.pyc b/__pycache__/prompt_generator.cpython-310.pyc index e379518ad83fa6f3c05cb7b3e69a7e879bcf3b89..830d1cfbf16ef10bff6bd921e24d1015a175744f 100644 GIT binary patch delta 74 zcmZoM`e(?S&&$ij00h_Oq^BBe` bk#BPgi##`%n4UsFQGRYgN$lqJ{Gprx#Ag%C delta 73 zcmexo*kZ(+&&$ij00e=m$*C3_d6zNEr~rBC3^fd~e6@@v3?+;}$dtm+%v8hJ%ryBl Z^A<*-%?&K_+>8>F7x0U0-o)?22>^7`5$^y1 diff --git a/generator/__init__.py b/generator/__init__.py index a6abef7..b9898ac 100644 --- a/generator/__init__.py +++ b/generator/__init__.py @@ -15,7 +15,7 @@ def check_package(package_name: str, install_name: str) -> None: print(f"/_\ Installing {package_name}") - command = "" + # check if portable version or manual if exists("python_embeded"): command = f".\\python_embeded\\python.exe -s -m pip install {install_name}" else: @@ -24,17 +24,20 @@ def check_package(package_name: str, install_name: str) -> None: process = run(command, shell=True, check=True, capture_output=True) +print(" Prompt Generator ComfyUI Node ".center(100, "-")) + # Check required packages print("/_\ Checking packages") check_package("transformers", "transformers") check_package("accelerate", "accelerate") +# triton package exists only in Linux if os_name == "Linux": check_package("triton", "triton") check_package("optimum", "optimum") -check_package("onnxruntime-gpu", "optimum[onnxruntime-gpu]") +check_package("onnxruntime", "optimum[onnxruntime-gpu]") """ # This package is for onnx models that run on CPU diff --git a/generator/__pycache__/__init__.cpython-310.pyc b/generator/__pycache__/__init__.cpython-310.pyc index dadf0bd1fb7d453ae3357182ed310dfcb6f35cc2..5694036e247510f3d75c68599b7d8c535df60c62 100644 GIT binary patch delta 408 zcmYk1Jxjwt7{_x@(i+n?Nz>RmCu!U|oEr_?)HK+{J4GTH2|zL&+!w z-CX?!ZjSDq9Q7MGdI=T12ma6he$NYcFZ!o$@0V}RE|J&q+D-GZhy^sC zU_^*QZM4#Cp^f$kB(boF#nk1{xdzdcq=cne%|&h7rSH8@i53uV`o)Z%ZbSEo77 z*sX|I*zsw9kq0tI{>eXBYX{L;)rpzfJ5KfsD;dvTQWjDnoP_*IDXHljKF6p_H;KIU bR;A<>o8;5Tf(d2Swsh41gGiMRH;4v5$0J~- delta 314 zcmY*T%Syvg5WO=ut=HH*YErSNkZlq12gH4$NX4xn!h}*xZ!`~((9lKJF2Y?FS8iO^ zFA=x>0+)V*Hvt#UVP?)b%nb7_K7<`xmdSLyT_1*@Mr|L%rapZNDgYKbWRX>2%WSe+ zwnxqbCX;$Ia2(nvuQ6%&hK>CCr-Z4Ja55n*F+<`NBttTmux78?ksa#%@r*B#x-E8I zjFJ=67sOTJoZsCBW0_|6Q8bscV9V4Oyo09-jEAm%Q-A?B8YrL#Ci<8Rw5djX+%KG1 z%I74P*?bY6%^q{L;z!U|Yo1PIXzrXrFPN8xJh3E-5CrP;r(Nn^#eBxpScf?uY6k zpySDb6TsXY4M$NtOr!Dpt2H-@eoqN<3LZ4&4ANB#)47RI0~>0D5z&$-#P@bkDzqoK z)t=!F3bJ6Npz@J)&zR6LAXXGmgt?iGit=pHP+IdB)|6WxL`5%4)9W&#`cbLeL9p>& zA~)zZ>`5QC{j@YgIZZi;d6Z=QDvr8Y5WU&m`^;T1Uz$XsU_gji2qIWWAdT24h}{XMa4(W@mkW0nuuyFL19AU= zVxLZ1JAZ)X)i(YI3ujNG0e9ie&YQRMW~Sz|>4c7BDR>@_tKM|tG;VsBaD{`f1mHqI zToO>12Fzt3dE%?ChLQSuV7LZy%rm*_(H`R(*Ke6?%`pZyk;%<57SADLb8@1z><{VO zVrjWEPQt^Gd;b39shLZSQGew5{h@a>d4E$Q6;QE9X3`;tuv4M~W3-W}Ks3J~D zV`USmM7f76v`9lyv><^Zq Pipeline: model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto") tokenizer = AutoTokenizer.from_pretrained(model_name) - pipe = pipeline(task="text-generation", model=model, tokenizer=tokenizer) + pipe = tf_pipe(task="text-generation", model=model, tokenizer=tokenizer) return pipe @@ -17,7 +19,7 @@ def get_onnx_pipeline(model_name: str) -> Pipeline: model = ORTModelForCausalLM.from_pretrained(model_name) tokenizer = AutoTokenizer.from_pretrained(model_name) - pipe = optimum.pipelines.pipeline( + pipe = opt_pipe( task="text-generation", model=model, tokenizer=tokenizer, accelerator="ort" ) @@ -28,7 +30,7 @@ def get_bettertransformer_pipeline(model_name: str) -> Pipeline: model = AutoModelForCausalLM.from_pretrained(model_name, device_map="auto") tokenizer = AutoTokenizer.from_pretrained(model_name) - pipe = optimum.pipelines.pipeline( + pipe = opt_pipe( task="text-generation", model=model, tokenizer=tokenizer, diff --git a/preprocess.py b/preprocess.py index ff8bddd..5a0a475 100644 --- a/preprocess.py +++ b/preprocess.py @@ -1,54 +1,52 @@ from string import punctuation from re import sub, compile +from collections import OrderedDict -def get_unique_list(sequence : list) -> list: + +def get_unique_list(sequence: list) -> list: seen = set() return [x for x in sequence if not (x in seen or seen.add(x))] -def remove_exact_keywords(line : str) -> list[str]: + +def remove_exact_keywords(line: str) -> list[str]: char_blacklist = set(f"{punctuation}0123456789") # remove exact prompts prompts = get_unique_list(line.split(",")) - pure_prompts = [] + + pure_prompts = OrderedDict() # order matters + extracted_pure_prompts = {} # order isn't important # remove exact keyword for prompt in prompts: - can_add = True # extract the keyword keyword = "".join(c for c in prompt if c not in char_blacklist).lstrip() if keyword == "": continue - for pure_prompt in pure_prompts: - if prompt == pure_prompt: - can_add = False - break + if prompt in pure_prompts or keyword in extracted_pure_prompts: + continue - extracted_pure_prompt = "".join(c for c in pure_prompt if c not in char_blacklist).lstrip() - if keyword == extracted_pure_prompt: - can_add = False - break + pure_prompts[prompt] = True + extracted_pure_prompts[keyword] = True - if can_add: - pure_prompts.append(prompt) + return pure_prompts.keys() - return pure_prompts -def preprocess(line : str, preprocess_mode : str) -> str: - pattern = compile(r'(,\s){2,}') +def preprocess(line: str, preprocess_mode: str) -> str: + pattern = compile(r"(,\s){2,}") - temp_line = line.replace(u'\xa0', u' ') + temp_line = line.replace("\xa0", " ") temp_line = temp_line.replace("\n", ", ") temp_line = temp_line.replace("\t", " ") temp_line = temp_line.replace("|", ",") temp_line = temp_line.replace(" ", " ") - temp_line = sub(pattern, ', ', temp_line) + temp_line = sub(pattern, ", ", temp_line) if preprocess_mode == "exact_keyword": - temp_line = ','.join(remove_exact_keywords(temp_line)) + temp_line = ",".join(remove_exact_keywords(temp_line)) elif preprocess_mode == "exact_prompt": - temp_line = ','.join(get_unique_list(temp_line.split(","))) + temp_line = ",".join(get_unique_list(temp_line.split(","))) - return temp_line \ No newline at end of file + return temp_line diff --git a/prompt_generator.py b/prompt_generator.py index 76f9b41..063e2bf 100644 --- a/prompt_generator.py +++ b/prompt_generator.py @@ -16,7 +16,7 @@ class PromptGenerator: [ file for file in listdir(join(models_dir, "prompt_generators")) - if isdir(join(join(models_dir, "prompt_generators"), file)) + if isdir(join(models_dir, "prompt_generators", file)) ], ), "accelerate": (["enable", "disable"],),