2 Commits
Author SHA1 Message Date
NattoMaki 4ccb3bc1a4 Merge branch 'master' into develop 2024-02-02 16:49:49 +09:00
NattoMaki f82c13aa1d Add OpenAiGpt 2024-02-02 16:48:33 +09:00
3 changed files with 87 additions and 1 deletions
+3
View File
@@ -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 🧅",
} }
+83
View File
@@ -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,)
+1 -1
View File
@@ -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?"