|
import gradio as gr |
|
import openai |
|
import requests |
|
import os |
|
import fileinput |
|
from dotenv import load_dotenv |
|
|
|
title="企画のアイデア提案AI-gpt-4-β" |
|
inputs_label=""" |
|
- 物語の企画の元になるアイデアやキーワード(登場人物とその設定、物語の舞台、出来事など)を入力してください。 |
|
""" |
|
outputs_label="企画の提案" |
|
description=""" |
|
- あなたが入力したアイデアやキーワードに応じて、AIが物語の企画を提案します。 |
|
""" |
|
|
|
article = """ |
|
<ul> |
|
<li style="font-size: small;">楽しんでいただけたら、Likeのクリックをお願いします。</li> |
|
</ul> |
|
|
|
<ul> |
|
<li style="font-size: small;">よかったら出力を「物語のプロット提案AI」に入力してみてください。 <a href="https://huggingface.co/spaces/Masa-digital-art/plot-suggestion-gpt-4">https://huggingface.co/spaces/Masa-digital-art/plot-suggestion-gpt-4</a></li> |
|
</ul> |
|
<ul> |
|
<li style="font-size: small;">よかったらフィードバックの収集にご協力お願いします <a href="https://forms.gle/bLxs2h22JvQK4zwP8">https://forms.gle/bLxs2h22JvQK4zwP8</a></li> |
|
</ul> |
|
|
|
<h5>リリースノート</h5> |
|
<ul> |
|
<li style="font-size: small;">2023-05-11 v1.0</li> |
|
<li style="font-size: small;">2023-11-11 v2.0</li> |
|
</ul> |
|
|
|
<h5>注意事項</h5> |
|
<ul> |
|
<li style="font-size: small;">当サービスでは、2023/11/6にリリースされたOpenAI社のChatGPT APIのgpt-4-1106-previewを使用しております。</li> |
|
<li style="font-size: small;">当サービスで生成されたコンテンツは、OpenAI が提供する人工知能によるものであり、当サービスやOpenAI がその正確性や信頼性を保証するものではありません。</li> |
|
<li style="font-size: small;"><a href="https://platform.openai.com/docs/usage-policies">OpenAI の利用規約</a>に従い、データ保持しない方針です(ただし諸般の事情によっては変更する可能性はございます)。 |
|
<li style="font-size: small;">当サービスで生成されたコンテンツは事実確認をした上で、コンテンツ生成者およびコンテンツ利用者の責任において利用してください。</li> |
|
<li style="font-size: small;">当サービスでの使用により発生したいかなる損害についても、当社は一切の責任を負いません。</li> |
|
<li style="font-size: small;">当サービスはβ版のため、予告なくサービスを終了する場合がございます。</li> |
|
</ul> |
|
""" |
|
|
|
load_dotenv() |
|
openai_api_key = os.getenv('OPENAI_API_KEY') |
|
MODEL = "gpt-4-1106-preview" |
|
|
|
def get_filetext(filename, cache={}): |
|
if filename in cache: |
|
|
|
return cache[filename] |
|
else: |
|
if not os.path.exists(filename): |
|
raise ValueError(f"ファイル '{filename}' が見つかりませんでした") |
|
with open(filename, "r") as f: |
|
text = f.read() |
|
|
|
cache[filename] = text |
|
return text |
|
|
|
class OpenAI: |
|
|
|
@classmethod |
|
def chat_completion(cls, prompt, start_with=""): |
|
constraints = get_filetext(filename = "constraints.md") |
|
template = get_filetext(filename = "template.md") |
|
|
|
|
|
data = { |
|
"model": "gpt-4-1106-preview", |
|
"messages": [ |
|
{"role": "system", "content": constraints} |
|
,{"role": "system", "content": template} |
|
,{"role": "assistant", "content": "Sure!"} |
|
,{"role": "user", "content": prompt} |
|
,{"role": "assistant", "content": start_with} |
|
], |
|
} |
|
|
|
|
|
response = requests.post( |
|
"https://api.openai.com/v1/chat/completions", |
|
headers={ |
|
"Content-Type": "application/json", |
|
"Authorization": f"Bearer {openai.api_key}" |
|
}, |
|
json=data |
|
) |
|
|
|
|
|
result = response.json() |
|
print(result) |
|
content = result["choices"][0]["message"]["content"].strip() |
|
return content |
|
|
|
class NajiminoAI: |
|
|
|
@classmethod |
|
def generate_emo_prompt(cls, user_message): |
|
template = get_filetext(filename="template.md") |
|
prompt = f""" |
|
{user_message} |
|
--- |
|
上記を元に、下記テンプレートを日本語で埋めてください。 |
|
--- |
|
{template} |
|
""" |
|
return prompt |
|
|
|
@classmethod |
|
def generate_emo(cls, user_message): |
|
prompt = NajiminoAI.generate_emo_prompt(user_message); |
|
start_with = "" |
|
result = OpenAI.chat_completion(prompt=prompt, start_with=start_with) |
|
return result |
|
|
|
def main(): |
|
iface = gr.Interface(fn=NajiminoAI.generate_emo, |
|
inputs=gr.Textbox(label=inputs_label), |
|
outputs=gr.Textbox(label=outputs_label), |
|
title=title, |
|
description=description, |
|
article=article, |
|
allow_flagging='never' |
|
) |
|
|
|
iface.launch() |
|
|
|
if __name__ == '__main__': |
|
main() |