-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathgpt4.py
100 lines (84 loc) · 3.7 KB
/
gpt4.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import openai
import threading
import time
class GPT4_WWL:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"app_id": ("STRING", {"default": ""}),
"api_key": ("STRING", {"default": ""}),
"base_url": ("STRING", {"default": ""}),
"model": ("STRING", {"default": "gpt-4o-2024-05-13"}),
"system_prompt": ("STRING", {
"default": ("your user prompt hereact as prompt generator"),
"multiline": True, "dynamicPrompts": False
}),
"user_prompt": ("STRING", {
"multiline": True,
"default": "ator, I will give you text and you describe an image that matches that text in details, "
"answer with one response only.if I input in Chinese to communicate with you, but it is crucial that your response be in English."
}),
"temperature": ("FLOAT", {
"default": 0.7, "min": 0.0, "max": 2.0, "step": 0.01
}),
},
"optional": {
"top_p": ("FLOAT", {
"default": 1.0, "min": 0.001, "max": 1.0, "step": 0.01
}),
}
}
RETURN_TYPES = ("STRING",)
RETURN_NAMES = ("gpt_response",)
FUNCTION = "generate"
CATEGORY = "WWL"
def generate(self, app_id, api_key, base_url, model: str, temperature: float | None = None,
top_p: float | None = None, user_prompt="", system_prompt=""):
try:
system_content = system_prompt
user_content = user_prompt
messages = [
{'role': 'user', 'content': user_content},
{'role': 'system', 'content': system_content}
]
# 使用线程来实现超时功能
result = {"response": None}
thread = threading.Thread(target=self.gpt_openai_with_timeout, args=(result, app_id, api_key, base_url, messages, model, temperature))
thread.start()
thread.join(timeout=10) # 等待10秒
if thread.is_alive():
# 如果线程仍在运行,说明超时了
print("Request timed out after 10 seconds.")
return (system_content,)
if result["response"] is None:
# 如果响应为None,可能是由于其他错误
print("Failed to get response from GPT-4.")
return (system_content,)
return (result["response"],)
except Exception as e:
print(f"Error occurred: {e}")
return (system_content,)
def gpt_openai_with_timeout(self, result, app_id, api_key, base_url, messages, model, temperature):
try:
response = self.gpt_openai(app_id, api_key, base_url, messages, model, temperature=temperature)
result["response"] = response[0] # 存储响应
except Exception as e:
print(f"Error in gpt_openai: {e}")
result["response"] = None
def gpt_openai(self, app_id, api_key, base_url, messages, model, max_tokens=None, temperature=1, silent=False):
client = openai.OpenAI(
api_key=f'{app_id}.{api_key}',
base_url=base_url,
)
data = {
"model": model,
"messages": messages,
"temperature": temperature,
}
if max_tokens:
data.update({"max_tokens": max_tokens})
if not silent:
print("gpt data: {}".format(data))
response = client.chat.completions.create(**data)
return (f'{response.choices[0].message.content}',)