Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4ccb3bc1a4 | ||
|
|
f82c13aa1d |
@@ -12,6 +12,7 @@ from .negi.stereo_image_generator import StereoImageGenerator
|
|||||||
from .negi.image_reader_writer import RandomImageLoader, SaveImageToDirectory
|
from .negi.image_reader_writer import RandomImageLoader, SaveImageToDirectory
|
||||||
from .negi.detect_face_rotation_for_inpainting import DetectFaceRotationForInpainting
|
from .negi.detect_face_rotation_for_inpainting import DetectFaceRotationForInpainting
|
||||||
from .negi.openai_gpt4v import OpenAiGpt4v
|
from .negi.openai_gpt4v import OpenAiGpt4v
|
||||||
|
from .negi.openai_gpt import OpenAiGpt
|
||||||
|
|
||||||
NODE_CLASS_MAPPINGS = {
|
NODE_CLASS_MAPPINGS = {
|
||||||
"NegiTools_OpenAiDalle3": OpenAiDalle3,
|
"NegiTools_OpenAiDalle3": OpenAiDalle3,
|
||||||
@@ -30,6 +31,7 @@ NODE_CLASS_MAPPINGS = {
|
|||||||
"NegiTools_SaveImageToDirectory": SaveImageToDirectory,
|
"NegiTools_SaveImageToDirectory": SaveImageToDirectory,
|
||||||
"NegiTools_DetectFaceRotationForInpainting": DetectFaceRotationForInpainting,
|
"NegiTools_DetectFaceRotationForInpainting": DetectFaceRotationForInpainting,
|
||||||
"NegiTools_OpenAiGpt4v": OpenAiGpt4v,
|
"NegiTools_OpenAiGpt4v": OpenAiGpt4v,
|
||||||
|
"NegiTools_OpenAiGpt": OpenAiGpt,
|
||||||
}
|
}
|
||||||
|
|
||||||
NODE_DISPLAY_NAME_MAPPINGS = {
|
NODE_DISPLAY_NAME_MAPPINGS = {
|
||||||
@@ -49,4 +51,5 @@ NODE_DISPLAY_NAME_MAPPINGS = {
|
|||||||
"NegiTools_SaveImageToDirectory": "Save Image to Directory 🧅",
|
"NegiTools_SaveImageToDirectory": "Save Image to Directory 🧅",
|
||||||
"NegiTools_DetectFaceRotationForInpainting": "Detect Face Rotation for Inpainting 🧅",
|
"NegiTools_DetectFaceRotationForInpainting": "Detect Face Rotation for Inpainting 🧅",
|
||||||
"NegiTools_OpenAiGpt4v": "OpenAI GPT4V 🧅",
|
"NegiTools_OpenAiGpt4v": "OpenAI GPT4V 🧅",
|
||||||
|
"NegiTools_OpenAiGpt": "OpenAI GPT 🧅",
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,83 @@
|
|||||||
|
import openai
|
||||||
|
import time
|
||||||
|
import urllib.error
|
||||||
|
|
||||||
|
|
||||||
|
class OpenAiGpt:
|
||||||
|
def __init__(self):
|
||||||
|
self.__client = openai.OpenAI()
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def INPUT_TYPES(cls):
|
||||||
|
return {
|
||||||
|
"required": {
|
||||||
|
"model": ([
|
||||||
|
"gpt-4-1106-preview",
|
||||||
|
"gpt-4-vision-preview",
|
||||||
|
"gpt-4",
|
||||||
|
"gpt-4-0314",
|
||||||
|
"gpt-4-0613",
|
||||||
|
"gpt-4-32k",
|
||||||
|
"gpt-4-32k-0314",
|
||||||
|
"gpt-4-32k-0613",
|
||||||
|
"gpt-3.5-turbo",
|
||||||
|
"gpt-3.5-turbo-16k",
|
||||||
|
"gpt-3.5-turbo-0301",
|
||||||
|
"gpt-3.5-turbo-0613",
|
||||||
|
"gpt-3.5-turbo-1106",
|
||||||
|
"gpt-3.5-turbo-16k-0613",
|
||||||
|
], {"default": "gpt-4-0613"}),
|
||||||
|
"seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}),
|
||||||
|
"max_tokens": ("INT", {"default": 512, "min": 16, "max": 4096}),
|
||||||
|
"system_prompt": ("STRING", {
|
||||||
|
"multiline": True,
|
||||||
|
"default": "You are a helpful assistant."
|
||||||
|
})
|
||||||
|
},
|
||||||
|
"optional": {
|
||||||
|
"a_role": (["user", "assistant", "system"], {"default": "user"}),
|
||||||
|
"a": ("STRING", {"multiline": False, "default": ""}),
|
||||||
|
"b_role": (["user", "assistant", "system"], {"default": "assistant"}),
|
||||||
|
"b": ("STRING", {"multiline": False, "default": ""}),
|
||||||
|
"c_role": (["user", "assistant", "system"], {"default": "user"}),
|
||||||
|
"c": ("STRING", {"multiline": False, "default": ""}),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RETURN_TYPES = ("STRING",)
|
||||||
|
FUNCTION = "doit"
|
||||||
|
OUTPUT_NODE = False
|
||||||
|
CATEGORY = "Generator"
|
||||||
|
|
||||||
|
def doit(self, model, seed, max_tokens, system_prompt, a_role, a, b_role, b, c_role, c):
|
||||||
|
messages = [{"role": "system", "content": system_prompt}]
|
||||||
|
input_role = [a_role, b_role, c_role]
|
||||||
|
input_text = [a, b, c]
|
||||||
|
for i in range(3):
|
||||||
|
if input_text[i] is not None and len(input_text[i]) > 0:
|
||||||
|
messages.append({
|
||||||
|
"role": input_role[i] if input_role[i] is not None else "user",
|
||||||
|
"content": input_text[i]
|
||||||
|
})
|
||||||
|
|
||||||
|
try_count = 0
|
||||||
|
r0 = None
|
||||||
|
while True:
|
||||||
|
try_count += 1
|
||||||
|
try:
|
||||||
|
r0 = self.__client.chat.completions.create(
|
||||||
|
model=model,
|
||||||
|
max_tokens=max_tokens,
|
||||||
|
seed=seed,
|
||||||
|
messages=messages
|
||||||
|
)
|
||||||
|
break
|
||||||
|
except openai.AuthenticationError as ex:
|
||||||
|
raise ex
|
||||||
|
except (urllib.error.HTTPError, openai.OpenAIError) as ex:
|
||||||
|
if try_count >= 3:
|
||||||
|
raise ex
|
||||||
|
time.sleep(5)
|
||||||
|
continue
|
||||||
|
|
||||||
|
return (r0.choices[0].message.content,)
|
||||||
@@ -23,7 +23,7 @@ class OpenAiGpt4v:
|
|||||||
"image": ("IMAGE",),
|
"image": ("IMAGE",),
|
||||||
"seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}),
|
"seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}),
|
||||||
"detail": (["auto", "low", "high"],),
|
"detail": (["auto", "low", "high"],),
|
||||||
"max_tokens": ("INT", {"default": 512, "min": 16, "max": 8192}),
|
"max_tokens": ("INT", {"default": 512, "min": 16, "max": 4096}),
|
||||||
"prompt": ("STRING", {
|
"prompt": ("STRING", {
|
||||||
"multiline": True,
|
"multiline": True,
|
||||||
"default": "What’s in this image?"
|
"default": "What’s in this image?"
|
||||||
|
|||||||
Reference in New Issue
Block a user