[fix] os and panel

dev
hc-psy 2023-12-30 10:54:59 +08:00
rodzic abbba42a5a
commit 3e82d05f37
5 zmienionych plików z 39 dodań i 38 usunięć

Wyświetl plik

@ -13,7 +13,11 @@ def post_process(final_txt):
return final_txt return final_txt
def chatgpt(context): def chatgpt(context, api_key=''):
if not api_key:
raise Exception("Please provide an OpenAI API key")
scene = context.scene scene = context.scene
# sysprompt preparation # sysprompt preparation
@ -34,15 +38,15 @@ def chatgpt(context):
messages.append({"role": "user", "content": formatted_message}) messages.append({"role": "user", "content": formatted_message})
# send message to GPT # send message to GPT
client = OpenAI() client = OpenAI(api_key=api_key)
response = client.ChatCompletion.create( response = client.chat.completions.create(
model=scene.model, model=scene.model,
messages=messages, messages=messages,
temperature=scene.creativity, temperature=scene.creativity,
) )
try: try:
final_txt = response['choices'][0]['message']['content'] final_txt = response.choices[0].message.content
return post_process(final_txt) return post_process(final_txt)
except IndexError: except IndexError:
return '' return ''

Wyświetl plik

@ -89,10 +89,10 @@ class BLENDERGPT_OT_SEND_MSG(Operator):
# openai api key # openai api key
prf = context.preferences prf = context.preferences
openai.api_key = prf.addons["blender-gpt"].preferences.openai_key prf_openai_api_key = prf.addons["blender-gpt"].preferences.openai_key
lan = prf.addons["blender-gpt"].preferences.language lan = prf.addons["blender-gpt"].preferences.language
if not openai.api_key: if not prf_openai_api_key:
self.report({'ERROR'}, UI['error_no_api_key'][lan]) self.report({'ERROR'}, UI['error_no_api_key'][lan])
return {'CANCELLED'} return {'CANCELLED'}
@ -106,7 +106,7 @@ class BLENDERGPT_OT_SEND_MSG(Operator):
return {'CANCELLED'} return {'CANCELLED'}
try: try:
code_exe_blender = chatgpt(context) code_exe_blender = chatgpt(context, api_key=prf_openai_api_key)
except Exception as e: except Exception as e:
self.report({'ERROR'}, f"Error: {e}") self.report({'ERROR'}, f"Error: {e}")
scene.on_finish = False scene.on_finish = False

Wyświetl plik

@ -22,13 +22,10 @@ def python_exec():
if isWindows(): if isWindows():
return os.path.join(sys.prefix, 'bin', 'python.exe') return os.path.join(sys.prefix, 'bin', 'python.exe')
elif isMacOS(): elif isMacOS():
try: try:
# 2.92 and older # 2.92 and older
path = bpy.app.binary_path_python path = bpy.app.binary_path_python
except AttributeError: except AttributeError:
# 2.93 and later
import sys
path = sys.executable path = sys.executable
return os.path.abspath(path) return os.path.abspath(path)
elif isLinux(): elif isLinux():
@ -39,17 +36,19 @@ def python_exec():
def installModule(packageName): def installModule(packageName):
python_exe = python_exec()
try: try:
subprocess.call([python_exe, "import ", packageName]) subprocess.check_call([python_exe, "-c", "import " + packageName])
except: print(f"{packageName} already installed")
python_exe = python_exec() except subprocess.CalledProcessError:
# upgrade pip # upgrade pip
subprocess.call([python_exe, "-m", "ensurepip"]) subprocess.call([python_exe, "-m", "ensurepip"])
subprocess.call( subprocess.call(
[python_exe, "-m", "pip", "install", "--upgrade", "pip"]) [python_exe, "-m", "pip", "install", "--upgrade", "pip"])
# install required packages # install required packages and upgrade
subprocess.call([python_exe, "-m", "pip", "install", packageName]) subprocess.call([python_exe, "-m", "pip", "install",
"--upgrade", packageName])
installModule('openai') installModule('openai')

Wyświetl plik

@ -20,7 +20,7 @@ class BLENDERGPT_PT_PANEL(Panel):
column = layout.column(align=True) column = layout.column(align=True)
# language youre using # language youre using
column.label(text=UI['label_language'][lan]) column.label(text=UI['language'][lan])
column.separator() column.separator()
@ -92,10 +92,10 @@ def model_props_generator():
name=UI['label_model'][lan], name=UI['label_model'][lan],
description=UI['label_model_description'][lan], description=UI['label_model_description'][lan],
items=[ items=[
("gpt-3.5-turbo", UI['model_options']['gpt3.5'] ("gpt-3.5-turbo", UI['model_options'][lan]
[lan], UI['model_options']['gpt3.5'][lan]), ['gpt3.5'], UI['model_options'][lan]['gpt3.5']),
("gpt-4", UI['model_options']['gpt4'] ("gpt-4", UI['model_options'][lan]['gpt4'],
[lan], UI['model_options']['gpt4'][lan]), UI['model_options'][lan]['gpt4']),
], ],
default="gpt-3.5-turbo", default="gpt-3.5-turbo",
) )

Wyświetl plik

@ -3,6 +3,7 @@ from bpy import props
from bpy.types import AddonPreferences from bpy.types import AddonPreferences
from .gpt_cst import UI from .gpt_cst import UI
class BLENDERGPT_AddonPreferences(AddonPreferences): class BLENDERGPT_AddonPreferences(AddonPreferences):
bl_idname = "blender-gpt" bl_idname = "blender-gpt"
@ -24,49 +25,49 @@ class BLENDERGPT_AddonPreferences(AddonPreferences):
name="Language", name="Language",
items=languages, items=languages,
default='en', default='en',
description="Select your preferred language" description="Select your preferred language",
update=update_language, update=lambda self, context: self.update_language(context)
) )
def draw(self, context): def draw(self, context):
layout = self.layout layout = self.layout
layout.prop(self, "openai_key") layout.prop(self, "openai_key")
layout.prop(self, "language", text="Language") layout.prop(self, "language", text="Language")
def update_language(self, context): def update_language(self, context):
prefs = context.preferences.addons['blender-gpt'].preferences prefs = context.preferences.addons['blender-gpt'].preferences
lan = prefs.language lan = prefs.language
# model # model
current_model = getattr(context.scene, "model", "gpt-3.5-turbo") current_model = getattr(context.scene, "model", "gpt-3.5-turbo")
bpy.types.Scene.model = bpy.props.EnumProperty( bpy.types.Scene.model = bpy.props.EnumProperty(
name=UI['label_model'][lan], name=UI['label_model'][lan],
description=UI['label_model_description'][lan], description=UI['label_model_description'][lan],
items=[ items=[
("gpt-3.5-turbo", UI['model_options']['gpt3.5'] ("gpt-3.5-turbo", UI['model_options'][lan]
[lan], UI['model_options']['gpt3.5'][lan]), ['gpt3.5'], UI['model_options'][lan]['gpt3.5']),
("gpt-4", UI['model_options']['gpt4'] ("gpt-4", UI['model_options'][lan]['gpt4'],
[lan], UI['model_options']['gpt4'][lan]), UI['model_options'][lan]['gpt4']),
], ],
default=current_model, default=current_model,
) )
setattr(context.scene, "model", current_model) setattr(context.scene, "model", current_model)
# prompt_input # prompt_input
current_prompt_input = getattr(context.scene, "prompt_input", "") current_prompt_input = getattr(context.scene, "prompt_input", "")
bpy.types.Scene.prompt_input = bpy.props.StringProperty( bpy.types.Scene.prompt_input = bpy.props.StringProperty(
name=UI['command'][lan], name=UI['command'][lan],
description=UI['command_instruction'][lan], description=UI['command_instruction'][lan],
default=current_prompt_input, default=current_prompt_input,
) )
setattr(context.scene, "prompt_input", current_prompt_input) setattr(context.scene, "prompt_input", current_prompt_input)
# creativity # creativity
current_creativity = getattr(context.scene, "creativity", 0) current_creativity = getattr(context.scene, "creativity", 0)
bpy.types.Scene.creativity = bpy.props.FloatProperty( bpy.types.Scene.creativity = bpy.props.FloatProperty(
name=UI['creativity'][lan], name=UI['creativity'][lan],
description=UI['creativity'][lan], description=UI['creativity'][lan],
@ -74,8 +75,5 @@ class BLENDERGPT_AddonPreferences(AddonPreferences):
min=0, min=0,
max=1, max=1,
) )
setattr(context.scene, "creativity", current_creativity) setattr(context.scene, "creativity", current_creativity)