refactor for repetition

This commit is contained in:
🐦
2023-10-12 09:17:42 +11:00
parent ed3cd6f434
commit d5f67d1569
5 changed files with 85 additions and 89 deletions
+33 -33
View File
@@ -1,5 +1,7 @@
import openai
from .settings import load_settings
from .openai_client import OpenAiClient
from .settings import load_settings, api_settings
class CyberdolphinOpenAIAdvanced:
@@ -8,16 +10,17 @@ class CyberdolphinOpenAIAdvanced:
@classmethod
def INPUT_TYPES(s):
the_settings = load_settings()
openai_settings = the_settings['openai']
openai.api_base = openai_settings['api_base']
openai.api_key = openai_settings['api_key']
openai.organization = openai_settings['organisation']
openai.api_base, openai.api_key, openai.organization = api_settings('openai')
openai_model_list = [m["id"] for m in openai.Model.list()['data']]
example_system_prompt = the_settings['prompt_templates']['gpt-3.5-turbo']['system']
example_user_prompt = f"{the_settings['prompt_templates']['gpt-3.5-turbo']['prefix']}{the_settings['example_user_prompt']}{the_settings['prompt_templates']['gpt-3.5-turbo']['suffix']}"
example_user_prompt = f"\
{the_settings['prompt_templates']['gpt-3.5-turbo']['prefix']}\
{the_settings['example_user_prompt']}\
{the_settings['prompt_templates']['gpt-3.5-turbo']['suffix']}"
return {
"required": {
"model": ([m["id"] for m in openai.Model.list()['data']], {
"model": (openai_model_list, {
"default": "gpt-3.5-turbo"}),
"system_prompt": ('STRING', {
"multiline": True,
@@ -56,15 +59,11 @@ class CyberdolphinOpenAIAdvanced:
if temperature < 0 or temperature > 2:
errors_list.append(
"""Temperature should be a value between 0.0 and 2.0
- higher values like 0.8 will make the output more random,
- openai says higher values like 0.8 will make the output more random,
lower values like 0.2 make it more focused and deterministic.
""")
return errors_list
def api_settings(self):
openai_settings = load_settings()['openai']
return openai_settings['api_base'], openai_settings['api_key'], openai_settings['organisation']
def generate(self, model: str, system_prompt: str, user_prompt="",
temperature: float | None = None, top_p: float | None = None):
errors = self.validate_content(temperature, top_p)
@@ -72,28 +71,29 @@ class CyberdolphinOpenAIAdvanced:
error_report = "\n".join([e for e in errors])
raise RuntimeError(f"There were problems with the parameters:\n{error_report}")
else:
system_content = system_prompt
user_content = user_prompt
if top_p == 0.0:
openai.api_base, openai.api_key, openai.organization = self.api_settings()
response = openai.ChatCompletion.create(
model=model,
temperature=temperature,
messages=[
{"role": "system", "content": system_content},
{"role": "user", "content": user_content}
]
)
else:
openai.api_base, openai.api_key, openai.organization = self.api_settings()
response = openai.ChatCompletion.create(
model=model,
top_p=top_p,
messages=[
{"role": "system", "content": system_content},
{"role": "user", "content": user_content}
]
)
if top_p == 0.0 or top_p == 1.0:
top_p = int(top_p)
response = OpenAiClient.complete(
key="openai",
model=model,
temperature=temperature,
top_p=top_p,
system_content=system_content,
user_content=user_content)
# openai.api_base, openai.api_key, openai.organization = api_settings()
# response = openai.ChatCompletion.create(
# model=model,
# temperature=temperature,
# top_p=top_p,
# messages=[
# {"role": "system", "content": system_content},
# {"role": "user", "content": user_content}
# ]
# )
return (f'{response.choices[0].message.content}',)
+18 -38
View File
@@ -1,5 +1,7 @@
import openai
from .settings import load_settings
from .openai_client import OpenAiClient
from .settings import load_settings, api_settings
all_settings = load_settings()
prompt_templates = all_settings['prompt_templates']
@@ -12,22 +14,19 @@ default_user_prompt = all_settings['example_user_prompt']
class CyberdolphinOpenAICompatible:
the_settings = None
def api_settings(self):
openai_settings = load_settings()['openai_compatible']
return openai_settings['api_base'], openai_settings['api_key'], openai_settings['organisation']
@classmethod
def INPUT_TYPES(s):
openai.api_key = openai_settings['api_key']
openai.organization = openai_settings['organisation']
openai.api_base = openai_settings['api_base']
openai.api_base, openai.api_key, openai.organization = api_settings('openai_compatible')
available_models = [m["id"] for m in openai.Model.list()['data']]
available_templates = [t for t in prompt_templates]
return {
"required": {
"api_base": ("STRING", {
"default": openai_settings['api_base']
}),
"prompt_template": ([t for t in prompt_templates], {
# "api_base": ("STRING", {
# "default": openai_settings['api_base']
# }),
"prompt_template": (available_templates, {
"default": 'default'
}),
"model": (available_models, {
@@ -69,11 +68,9 @@ class CyberdolphinOpenAICompatible:
""")
return errors_list
def generate(self, api_base: str, prompt_template: str, model: str, temperature: float | None = None,
def generate(self, prompt_template: str, model: str, temperature: float | None = None,
top_p: float | None = None, user_prompt=""):
errors = self.validate_content(temperature, top_p)
if top_p == 0.0:
top_p = None
if errors:
error_report = "\n".join([e for e in errors])
raise RuntimeError(f"There were problems with the parameters:\n{error_report}")
@@ -83,29 +80,12 @@ class CyberdolphinOpenAICompatible:
system_content = this_prompt['system']
user_content = f"{this_prompt['prefix']} {user_prompt} {this_prompt['suffix']}"
openai.api_base, openai.api_key, openai.organization = self.api_settings()
# openai_settings = load_settings()['openai_compatible']
# openai.api_base = openai_settings['api_base']
# openai.api_key = openai_settings['api_key']
# openai.organization = openai_settings['organisation']
if top_p is None:
response = openai.ChatCompletion.create(
model=model,
temperature=temperature,
messages=[
{"role": "system", "content": system_content},
{"role": "user", "content": user_content}
]
)
else:
response = openai.ChatCompletion.create(
model=model,
top_p=top_p,
messages=[
{"role": "system", "content": system_content},
{"role": "user", "content": user_content}
]
)
response = OpenAiClient.complete(
key="openai_compatible",
model=model,
temperature=temperature,
top_p=top_p,
system_content=system_content,
user_content=user_content)
return (f'{response.choices[0].message.content}',)
+7 -18
View File
@@ -1,4 +1,4 @@
import openai
from .openai_client import OpenAiClient
from .settings import load_settings
@@ -27,28 +27,17 @@ class CyberdolphinOpenAISimple:
# OUTPUT_NODE = False
CATEGORY = "🐬 CyberDolphin"
def api_settings(self):
openai_settings = load_settings()['openai']
return openai_settings['api_base'], openai_settings['api_key'], openai_settings['organisation']
def generate(self, user_prompt="", temperature: float = 1.0):
prompts = load_settings()['prompt_templates']
system_prompt = prompts['gpt-3.5-turbo']['system']
system_content = prompts['gpt-3.5-turbo']['system']
user_content = f"{prompts['gpt-3.5-turbo']['prefix']} {user_prompt} {prompts['gpt-3.5-turbo']['suffix']}"
# openai_settings = load_settings()['openai']
# openai.api_base = openai_settings['api_base']
# openai.api_key = openai_settings['api_key']
# openai.organization = openai_settings['organisation']
openai.api_base, openai.api_key, openai.organization = self.api_settings()
response = openai.ChatCompletion.create(
response = OpenAiClient.complete(
key="openai_compatible",
model=load_settings()['openai']['default_model'],
temperature=temperature,
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_content}
]
)
top_p=1.0,
system_content=system_content,
user_content=user_content)
return (f'{response.choices[0].message.content}',)
+22
View File
@@ -0,0 +1,22 @@
import openai
from custom_nodes.cyberdolphin.settings import api_settings
class OpenAiClient:
@staticmethod
def complete(key, model, temperature, top_p, system_content, user_content):
if top_p == 0.0:
top_p = 0.001
openai.api_base, openai.api_key, openai.organization = api_settings(key)
response = openai.ChatCompletion.create(
model=model,
temperature=temperature,
top_p=top_p,
messages=[
{"role": "system", "content": system_content},
{"role": "user", "content": user_content}
]
)
return response
+5
View File
@@ -38,3 +38,8 @@ def load_settings():
the_yaml = yaml.safe_load(settings)
# print(f'LOADED: {the_yaml["cyberdolphin"]}')
return the_yaml['cyberdolphin']
def api_settings(section: str = "openai"):
openai_settings = load_settings()[section]
return openai_settings['api_base'], openai_settings['api_key'], openai_settings['organisation']