This commit is contained in:
wailovet
2024-04-23 02:18:09 +08:00
parent 5b4e25b48b
commit 7de422da1f
4 changed files with 93 additions and 24 deletions
+49 -9
View File
@@ -50,6 +50,43 @@ llama3_models = [
"Meta-Llama-3-8B-Instruct.Q8_0.gguf",
]
class MZ_LLamaCPPOptions:
@classmethod
def INPUT_TYPES(s):
opt = mz_llama_cpp.LlamaCppOptions()
value = opt.value
result = {}
for key in value:
if type(value[key]) == bool:
result[key] = ([True, False], {"default": value[key]})
elif type(value[key]) == int:
result[key] = ("INT", {"default": value[key]})
elif type(value[key]) == float:
result[key] = ("FLOAT", {"default": value[key]})
elif type(value[key]) == str:
result[key] = ("STRING", {"default": value[key]})
else:
raise Exception(f"Unknown type: {type(value[key])}")
return {
"required": result,
}
RETURN_TYPES = ("LLamaCPPOptions",)
FUNCTION = "create"
CATEGORY = CATEGORY_NAME
def create(self, **kwargs):
importlib.reload(mz_llama_cpp)
opt = mz_llama_cpp.LlamaCppOptions()
for key in kwargs:
opt.value[key] = kwargs[key]
return (opt,)
NODE_CLASS_MAPPINGS["MZ_LLamaCPPOptions"] = MZ_LLamaCPPOptions
NODE_DISPLAY_NAME_MAPPINGS["MZ_LLamaCPPOptions"] = f"{AUTHOR_NAME} - LLamaCPPOptions"
class MZ_LLama3CLIPTextEncode:
@classmethod
def INPUT_TYPES(s):
@@ -64,7 +101,7 @@ class MZ_LLama3CLIPTextEncode:
return {
"required": {
"llama3_model": (m_llama3_models, {"default": m_llama3_models[0]}),
"llama_cpp_model": (m_llama3_models, {"default": m_llama3_models[0]}),
"download_source": (
["none", "modelscope", "hf-mirror.com",],
{"default": "none"}
@@ -78,17 +115,18 @@ class MZ_LLama3CLIPTextEncode:
},
"optional": {
"clip": ("CLIP", ),
"options": ("LLamaCPPOptions", ),
},
}
RETURN_TYPES = ("STRING", "CONDITIONING",)
FUNCTION = "encode"
CATEGORY = CATEGORY_NAME
def encode(self, text, llama3_model, style_presets, clip=None, download_source=None, seed=0, n_gpu_layers=40):
def encode(self, text, llama_cpp_model, style_presets, clip=None, download_source=None, seed=0, n_gpu_layers=40):
importlib.reload(mz_llama3)
llama3_model = llama3_model.replace("[downloaded]", "")
llama_cpp_model = llama_cpp_model.replace("[downloaded]", "")
text = mz_llama3.query_beautify_prompt_text(llama3_model, n_gpu_layers, text, style_presets, download_source,)
text = mz_llama3.query_beautify_prompt_text(llama_cpp_model, n_gpu_layers, text, style_presets, download_source,)
conditionings = None
if clip is not None:
tokens = clip.tokenize(text)
@@ -132,7 +170,7 @@ class MZ_LLavaImageInterrogator:
return {"required": {
"llava_model": (m_llava_models, {"default": m_llava_models[0]}),
"llama_cpp_model": (m_llava_models, {"default": m_llava_models[0]}),
"mmproj_model": (m_llava_mmproj_models, {"default": m_llava_mmproj_models[0]}),
"download_source": (
[
@@ -149,15 +187,16 @@ class MZ_LLavaImageInterrogator:
"n_gpu_layers": ("INT", {"default": 40, "min": -1, "max": 0xffffffffffffffff}),
},
"optional": {
"clip": ("CLIP",),
"clip": ("CLIP", ),
"options": ("LLamaCPPOptions", ),
}}
RETURN_TYPES = ("STRING", "CONDITIONING",)
FUNCTION = "interrogate"
CATEGORY = CATEGORY_NAME
def interrogate(self, llava_model, mmproj_model, image, resolution, prefix, download_source=None, seed=0, clip=None, n_gpu_layers=40):
def interrogate(self, llama_cpp_model, mmproj_model, image, resolution, prefix, download_source=None, seed=0, clip=None, n_gpu_layers=40, options={}):
importlib.reload(mz_llava)
llava_model = llava_model.replace("[downloaded]", "")
llama_cpp_model = llama_cpp_model.replace("[downloaded]", "")
mmproj_model = mmproj_model.replace("[downloaded]", "")
prefix = Utils.prompt_zh_to_en(prefix)
@@ -166,12 +205,13 @@ class MZ_LLavaImageInterrogator:
image_pil = Utils.tensor2pil(image)
response = mz_llava.image_interrogator(
llava_model,
llama_cpp_model,
mmproj_model,
n_gpu_layers,
image_pil,
resolution,
download_source,
options,
)
conditionings = None
if clip is not None:
+8 -3
View File
@@ -36,7 +36,9 @@ def get_style_presets():
"illustration",
]
def query_beautify_prompt_text(model_name, n_gpu_layers, text, style_presets, download_source=None):
def query_beautify_prompt_text(model_name, n_gpu_layers, text, style_presets, download_source=None, options={}):
if options is None:
options = {}
import mz_prompts
importlib.reload(mz_prompts)
importlib.reload(mz_llama_cpp)
@@ -81,14 +83,17 @@ def query_beautify_prompt_text(model_name, n_gpu_layers, text, style_presets, do
]
)
options["max_tokens"] = options.get("max_tokens", 2048)
options["temperature"] = options.get("temperature", 1.6)
response_json = mz_llama_cpp.llama_cpp_simple_interrogator_to_json(
model_file=model_file,
n_gpu_layers=n_gpu_layers,
system=mz_prompts.Beautify_Prompt,
question=f"IDEA: {style_presets},{text}",
schema=schema,
temperature=1.6,
max_tokens=2048,
options=options,
)
mz_utils.Utils.print_log(f"response_json: {response_json}")
response = json.loads(response_json)
+32 -11
View File
@@ -8,6 +8,13 @@ try:
except ImportError:
pass
class LlamaCppOptions:
value = {
"max_tokens": 2048,
"temperature": 0.8,
}
def check_llama_cpp_requirements():
last_version = "0.2.63"
try:
@@ -84,6 +91,8 @@ def freed_gpu_memory(model_file):
mz_utils.Utils.cache_set(f"llama_cpp_model_and_opt_{model_file}", None)
def llama_cpp_messages(model_file, n_gpu_layers, chat_handler=None, messages=[], options={}):
if options is None:
options = {}
print(f"Find local model file: {model_file}")
init_opts = ["n_ctx", "logits_all", "chat_format",]
@@ -176,7 +185,7 @@ def get_schema_array(item_type="string"):
def llama_cpp_simple_interrogator_to_json(model_file, n_gpu_layers, use_system=True, system=None, question="", schema={}, max_tokens=1024, temperature=0.8):
def llama_cpp_simple_interrogator_to_json(model_file, n_gpu_layers, use_system=True, system=None, question="", schema={}, options={}):
if system is None:
system = ""
messages = [
@@ -218,14 +227,18 @@ def llama_cpp_simple_interrogator_to_json(model_file, n_gpu_layers, use_system=T
}
return llama_cpp_messages(model_file, n_gpu_layers, None, messages, options={
"response_format": response_format,
"chat_format":"chatml",
"temperature": temperature,
"max_tokens": max_tokens,
})
options["response_format"] = response_format
options["chat_format"] = "chatml"
if options.get("temperature", None) is None:
options["temperature"] = 0.8
if options.get("max_tokens", None) is None:
options["max_tokens"] = 2048
return llama_cpp_messages(model_file, n_gpu_layers, None, messages, options=options)
def llama_cpp_simple_interrogator(model_file, n_gpu_layers, use_system=True, system=None, question=""):
def llama_cpp_simple_interrogator(model_file, n_gpu_layers, use_system=True, system=None, question="", options={}):
if options is None:
options = {}
if system is None:
system = ""
messages = [
@@ -260,17 +273,25 @@ def llama_cpp_simple_interrogator(model_file, n_gpu_layers, use_system=True, sys
"content": question
},
]
return llama_cpp_messages(model_file, n_gpu_layers, None, messages)
return llama_cpp_messages(model_file, n_gpu_layers, None, messages, options={})
def llava_cpp_messages(model_file, n_gpu_layers, chat_handler, messages, options={}):
if options is None:
options = {}
options["logits_all"] = True
options["n_ctx"] = max(2048, options.get("n_ctx", 2048))
return llama_cpp_messages(model_file, n_gpu_layers, chat_handler, messages, options)
def llava_cpp_simple_interrogator(model_file, mmproj_file, n_gpu_layers, system="You are an assistant who perfectly describes images.", question="Describe this image in detail please.", image=None):
def llava_cpp_simple_interrogator(
model_file, mmproj_file, n_gpu_layers, system="You are an assistant who perfectly describes images.", question="Describe this image in detail please.",
image=None, options={}):
if options is None:
options = {}
check_llama_cpp_requirements()
content = []
@@ -294,7 +315,7 @@ def llava_cpp_simple_interrogator(model_file, mmproj_file, n_gpu_layers, system=
"role": "user",
"content": content,
},
])
], options=options)
+4 -1
View File
@@ -45,7 +45,9 @@ def get_exist_model(model_name):
return None
def image_interrogator(model_name, mmproj_name, n_gpu_layers, image, resolution, download_source=None):
def image_interrogator(model_name, mmproj_name, n_gpu_layers, image, resolution, download_source=None, options={}):
if options is None:
options = {}
image = mz_utils.Utils.resize_max(image, resolution, resolution)
model_file = get_exist_model(model_name)
mmproj_file = get_exist_model(mmproj_name)
@@ -95,6 +97,7 @@ def image_interrogator(model_name, mmproj_name, n_gpu_layers, image, resolution,
mmproj_file=mmproj_file,
n_gpu_layers=n_gpu_layers,
image=image,
options=options,
)