Spaces:
Sleeping
Sleeping
File size: 5,545 Bytes
8e0b887 3238ce7 5e7c50d 2ae5698 5e7c50d 8e0b887 63e2e58 8e0b887 7b2e83f fb2def3 a95b71f fb2def3 2ae5698 8e0b887 fb2def3 8e0b887 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
import gradio as gr
import openai
import requests
import os
import fileinput
from dotenv import load_dotenv
title="企画のアイデア提案AI-β"
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">https://huggingface.co/spaces/Masa-digital-art/plot-suggestion</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-03-07 v1.0</li>
<li style="font-size: small;">2023-04-28 v1.1</li>
<li style="font-size: small;">2023-05-11 v2.0</li>
<li style="font-size: small;">2023-05-12 v3.0</li>
</ul>
<h5>注意事項</h5>
<ul>
<li style="font-size: small;">当サービスでは、2023/3/1にリリースされたOpenAI社のChatGPT APIのgpt-3.5-turboを使用しております。</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-3.5-turbo"
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")
# ChatCompletion APIに渡すデータを定義する
data = {
"model": "gpt-3.5-turbo",
"messages": [
{"role": "system", "content": constraints}
,{"role": "system", "content": template}
,{"role": "assistant", "content": "Sure!"}
,{"role": "user", "content": prompt}
,{"role": "assistant", "content": start_with}
],
}
# ChatCompletion APIを呼び出す
response = requests.post(
"https://api.openai.com/v1/chat/completions",
headers={
"Content-Type": "application/json",
"Authorization": f"Bearer {openai.api_key}"
},
json=data
)
# ChatCompletion APIから返された結果を取得する
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() |