Rename formatter to replacer

This commit is contained in:
Zuellni
2023-09-29 18:17:36 +02:00
parent 8f39f98a7d
commit 164b9e95e0
3 changed files with 33 additions and 32 deletions
+1 -1
View File
@@ -18,8 +18,8 @@ Name | Description
:--- | :---
Loader | Used to load EXL2/GPTQ Llama models. You can find a lot of them on [Hugging Face](https://huggingface.co/TheBloke). Clone the model repository or download all the files in it and place them in an empty directory, then specify the path in `model_dir`. The `model.safetensors` file won't work on its own.<br><br>ExLlama allocates memory based on `max_seq_len`. Lowering it is a good way to save on VRAM. It's currently not possible to offload the model to RAM.
Generator | Generates a `string` based on the given input for use with other nodes. Default values correspond to the `simple-1` preset from [text-generation-webui](https://github.com/oobabooga/text-generation-webui).<br><br>ExLlama isn't deterministic, so the outputs may differ even with the same seed.
Formatter | Replaces variables enclosed in brackets, such as `[a]`, with their values.
Previewer | Displays generated outputs in the UI and appends them to workflow metadata.
Replacer | Replaces variables enclosed in brackets, such as `[a]`, with their values.
## Workflow
The image below can be opened in ComfyUI. The [model](https://huggingface.co/turboderp/Mistral-7B-instruct-exl2/tree/2.5bpw) uses around 3-4GB of VRAM depending on sequence length.
+3 -3
View File
@@ -1,17 +1,17 @@
from .nodes import Formatter, Generator, Loader, Previewer
from .nodes import Generator, Loader, Previewer, Replacer
NODE_CLASS_MAPPINGS = {
"ZuellniExLlamaLoader": Loader,
"ZuellniExLlamaGenerator": Generator,
"ZuellniTextFormatter": Formatter,
"ZuellniTextPreviewer": Previewer,
"ZuellniTextReplacer": Replacer,
}
NODE_DISPLAY_NAME_MAPPINGS = {
"ZuellniExLlamaLoader": "ExLlama Loader",
"ZuellniExLlamaGenerator": "ExLlama Generator",
"ZuellniTextFormatter": "Format Text",
"ZuellniTextPreviewer": "Preview Text",
"ZuellniTextReplacer": "Replace Text",
}
WEB_DIRECTORY = "."
+29 -28
View File
@@ -101,32 +101,6 @@ class Generator:
return (text.strip(),)
class Formatter:
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"text": ("STRING", {"default": "", "multiline": True}),
},
"optional": {
"a": ("STRING", {"forceInput": True, "multiline": True}),
"b": ("STRING", {"forceInput": True, "multiline": True}),
"c": ("STRING", {"forceInput": True, "multiline": True}),
},
}
CATEGORY = "Zuellni/Text"
FUNCTION = "format"
RETURN_NAMES = ("TEXT",)
RETURN_TYPES = ("STRING",)
def format(self, text, **vars):
for key, value in vars.items():
text = text.replace(f"[{key}]", value)
return (text,)
class Previewer:
@classmethod
def INPUT_TYPES(cls):
@@ -147,10 +121,37 @@ class Previewer:
def preview(self, text, info=None, id=None):
if id and info and "workflow" in info:
workflow = info["workflow"]
node = next((n for n in workflow["nodes"] if str(n["id"]) == id), None)
nodes = info["workflow"]["nodes"]
node = next((n for n in nodes if str(n["id"]) == id), None)
if node:
node["widgets_values"] = [text]
return {"ui": {"text": [text]}}
class Replacer:
@classmethod
def INPUT_TYPES(cls):
return {
"required": {
"text": ("STRING", {"default": "", "multiline": True}),
},
"optional": {
"a": ("STRING", {"forceInput": True, "multiline": True}),
"b": ("STRING", {"forceInput": True, "multiline": True}),
"c": ("STRING", {"forceInput": True, "multiline": True}),
"d": ("STRING", {"forceInput": True, "multiline": True}),
}
}
CATEGORY = "Zuellni/Text"
FUNCTION = "replace"
RETURN_NAMES = ("TEXT",)
RETURN_TYPES = ("STRING",)
def replace(self, text, **vars):
for key, value, in vars.items():
text = text.replace(f"[{key}]", value)
return (text,)