blender-gpt/gpt_gpt.py

49 wiersze
1.5 KiB
Python
Czysty Zwykły widok Historia

2023-12-30 01:40:29 +00:00
from openai import OpenAI
import re
2023-12-30 01:40:29 +00:00
from .gpt_cst import SYSTEMPROMPTS
2023-05-29 10:11:40 +00:00
def post_process(final_txt):
final_txt = re.findall(
r'```(.*?)```', final_txt, re.DOTALL)[0]
final_txt = re.sub(
r'^python', '', final_txt, flags=re.MULTILINE)
return final_txt
def chatgpt(context):
scene = context.scene
2023-12-30 01:40:29 +00:00
# sysprompt preparation
messages = [{"role": "system", "content": system_prompt}
for system_prompt in SYSTEMPROMPTS]
# add previous messages
for msg in scene.history[-8:]:
if msg.type == "GPT":
messages.append(
{"role": "assistant", "content": "```\n" + msg.content + "\n```"})
else:
2023-12-30 01:40:29 +00:00
messages.append({"role": "user", "content": msg.content})
2023-12-30 01:40:29 +00:00
# add the current user message
if messages[-1]["role"] != "user":
2023-12-30 01:40:29 +00:00
formatted_message = f"Please provide me with Blender (3D software) python code satisfying the following task: {scene.prompt_input}. \n. Do not provide with anything that is not Python code. Do not provide explanations and comments."
messages.append({"role": "user", "content": formatted_message})
2023-12-30 01:40:29 +00:00
# send message to GPT
client = OpenAI()
response = client.ChatCompletion.create(
model=scene.model,
messages=messages,
2023-12-30 01:40:29 +00:00
temperature=scene.creativity,
)
try:
2023-05-29 05:12:29 +00:00
final_txt = response['choices'][0]['message']['content']
return post_process(final_txt)
except IndexError:
2023-12-30 01:40:29 +00:00
return ''