Mayaのpip書き換えちゃうので自己責任でというかMayaの再インスト―ルもする余裕があるときにやること
とりあえずpipでインストールする前にpipのバージョンがふるいのでUpgradeしてる。
cd "C:\Program Files\Autodesk\Maya2023\bin\"
mayapy.exe -m pip install --upgrade pip
mayapy -m pip install openai
cmd /k
入った。
てかこの2フォルダをsitepackageにいれとくだけでも動くには動くはず
https://drive.google.com/file/d/12KGnpQAnkWn3wifXPsMehqZ5YFfeFhWe/view?usp=share_link
メインのPython
import os
import openai
print(os.getcwd())
#print(__file__)
MELpath=os.getcwd()
pythonPath= os.path.abspath(MELpath+"/../python/open_ai/")
pythonPath= pythonPath.replace('\\', '/')
print("pythonPath= "+pythonPath)
f = open(pythonPath+'/open_ai_api_key.txt', 'r', encoding='UTF-8')
open_ai_api_key = f.read()
f.close()
#openai.api_key = os.getenv("OPENAI_API_KEY")
openai.api_key = open_ai_api_key
# APIコールを行う関数
def completion(new_message_text:str, settings_text:str = '', past_messages:list = []):
if len(past_messages) == 0 and len(settings_text) != 0:
system = {"role": "system", "content": settings_text}
past_messages.append(system)
new_message = {"role": "user", "content": new_message_text}
past_messages.append(new_message)
result = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=past_messages
)
message_text = result.choices[0].message.content
response_message = {"role": "assistant", "content": message_text}
past_messages.append(response_message)
return message_text, past_messages
import re
# 返答をPythonコードとその他の部分に分解
# reモジュールを使って```python~```で囲まれた部分とそれ以外の部分を切り出します。
def decompose_response(txt):
pattern = r"```python([\s\S]*?)```"
code_list = re.findall(pattern, txt)
for i in range(int(len(code_list))):
code_list[i] = re.sub('\A[\r?\n]', '', code_list[i])
code_list[i] = re.sub('[\r?\n]\Z', '', code_list[i])
comment = re.sub(pattern, '', txt)
comment = re.sub('[\r?\n]+', '\n', comment)
comment = re.sub('[\r?\n]\Z', '', comment)
return comment, code_list
from maya import cmds
class ChatGPT_Maya(object):
def __init__(self):
self.system_settings = "質問に対して、MayaのPythonスクリプトを書いてください。スクリプト以外の文章は短めにまとめてください。"
self.message_log = []
self.at_first = True
self.create_window()
def reset_session(self, *args):
self.message_log = []
self.at_first = True
cmds.scrollField(self.input_field, e=True, tx='')
cmds.scrollField(self.ai_comment, e=True, tx='')
cmds.cmdScrollFieldExecuter(self.script_field, e=True, t='')
def call(self, *args):
user_input = cmds.scrollField(self.input_field, q=True, tx=True)
# APIコール
if self.at_first:
message_text, self.message_log = completion(user_input, self.system_settings, [])
self.at_first = False
else:
message_text, self.message_log = completion(user_input, '', self.message_log)
# 返答を分解
comment, code_list = decompose_response(message_text)
# Pythonコード以外の部分をai_commentに表示
cmds.scrollField(self.ai_comment, e=True, tx=comment)
# Pythonコードの1つ目をscript_fieldに表示。2つ目以降は無視(汗
if code_list:
cmds.cmdScrollFieldExecuter(self.script_field, e=True, t=code_list[0])
# 実行
if cmds.checkBox(self.script_exec, q=True, v=True):
cmds.cmdScrollFieldExecuter(self.script_field, e=True, executeAll=True)
else:
cmds.cmdScrollFieldExecuter(self.script_field, e=True, t='')
# UI作成
def create_window(self, *args):
cmds.window(title=u'ChatGPTがPythonスクリプトを書くよ!', width=600, sizeable=True)
cmds.columnLayout(adj=True, cat=['both',5], rs=5)
self.reset_button = cmds.button(label='Reset', c=self.reset_session) #セッションのリセット
self.input_field = cmds.scrollField(h=50, ed=True, ww=True, tx='', ec=self.call) #テンキーのEnterで送信
self.script_exec = cmds.checkBox(label=u'実行もする', align='left', v=True) #Checkが入っていたら返答と同時にスクリプトを実行
cmds.separator(h=10, st='in')
self.ai_comment = cmds.scrollField(h=100, ed=False, ww=True, tx='') #コードブロック以外の部分を表示する場所
cmds.text(l='Script:', align='left')
self.script_field = cmds.cmdScrollFieldExecuter(st='python', h=200) #Pythonコードを表示・実行する場所
cmds.setParent('..')
cmds.showWindow()
ChatGPT_Maya_ins=ChatGPT_Maya()
エラーが返ってくる
openai : error_code=None error_message=’You exceeded your current quota, please check your plan and billing details.’ error_param=None error_type=insufficient_quota message=’OpenAI API error received’ stream_error=False
エラー: RateLimitError: file C:\Program Files\Autodesk\Maya2023\Python\lib\site-packages\openai\api_requestor.py line 679: You exceeded your current quota, please check your plan and billing details.
このエラーは
https://platform.openai.com/account/billing/overview
で Payment methods と Billing preferencesのPrimary business addressを設定したら動くようになった。
お世話になった記事
https://qiita.com/akasaki1211/items/34d0f89e0ae2c6efaf48
https://okumuralab.org/~okumura/python/openai_api.html
https://qiita.com/sakasegawa/items/db2cff79bd14faf2c8e0
https://tomo-web.jp/chat-gpt-you-exceeded-your-current-quota/#index_id0
コメント