Spaces:
Sleeping
Sleeping
File size: 5,035 Bytes
25ce5b8 0c25e51 cd75694 0c25e51 cd75694 0c25e51 cd75694 25ce5b8 57ff3da 25ce5b8 c964614 25ce5b8 c964614 25ce5b8 c964614 25ce5b8 c964614 25ce5b8 c964614 25ce5b8 c964614 25ce5b8 c964614 |
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 |
import gradio as gr
import openai
import requests
import os
import fileinput
from dotenv import load_dotenv
title="感情診断(β)"
inputs_label="あなたが話したいことは何ですか?"
outputs_label="AIが返信をして、あなたの話したことを受け取った人がどんな気持ちなのかが分かります。"
description="""
- 感情診断(β)を使うと、AIが相手の気持ちを推定して1分程度で返信してくれます!
- 伝えたいことがあるんだけど、相手がどんな反応になるか気になって話せない人は、感情診断(β)を使って試してみてはいかがでしょうか?
- ※入出力の文字数は最大1000文字程度までを目安に入力してください。
"""
article = """
<center><a href="https://huggingface.co./spaces/shigel/aiemo?duplicate=true"><img src="https://bit.ly/3gLdBN6" alt="Duplicate Space"></a></center>
<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() |