Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f82c13aa1d |
@@ -12,6 +12,7 @@ from .negi.stereo_image_generator import StereoImageGenerator
|
||||
from .negi.image_reader_writer import RandomImageLoader, SaveImageToDirectory
|
||||
from .negi.detect_face_rotation_for_inpainting import DetectFaceRotationForInpainting
|
||||
from .negi.openai_gpt4v import OpenAiGpt4v
|
||||
from .negi.openai_gpt import OpenAiGpt
|
||||
|
||||
NODE_CLASS_MAPPINGS = {
|
||||
"NegiTools_OpenAiDalle3": OpenAiDalle3,
|
||||
@@ -30,6 +31,7 @@ NODE_CLASS_MAPPINGS = {
|
||||
"NegiTools_SaveImageToDirectory": SaveImageToDirectory,
|
||||
"NegiTools_DetectFaceRotationForInpainting": DetectFaceRotationForInpainting,
|
||||
"NegiTools_OpenAiGpt4v": OpenAiGpt4v,
|
||||
"NegiTools_OpenAiGpt": OpenAiGpt,
|
||||
}
|
||||
|
||||
NODE_DISPLAY_NAME_MAPPINGS = {
|
||||
@@ -49,4 +51,5 @@ NODE_DISPLAY_NAME_MAPPINGS = {
|
||||
"NegiTools_SaveImageToDirectory": "Save Image to Directory 🧅",
|
||||
"NegiTools_DetectFaceRotationForInpainting": "Detect Face Rotation for Inpainting 🧅",
|
||||
"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",),
|
||||
"seed": ("INT", {"default": 0, "min": 0, "max": 0xffffffffffffffff}),
|
||||
"detail": (["auto", "low", "high"],),
|
||||
"max_tokens": ("INT", {"default": 512, "min": 16, "max": 8192}),
|
||||
"max_tokens": ("INT", {"default": 512, "min": 16, "max": 4096}),
|
||||
"prompt": ("STRING", {
|
||||
"multiline": True,
|
||||
"default": "What’s in this image?"
|
||||
|
||||
Reference in New Issue
Block a user