shigel commited on
Commit
93fa8d9
0 Parent(s):

Duplicate from shigel/aiemo

Browse files
Files changed (6) hide show
  1. .gitattributes +34 -0
  2. README.md +13 -0
  3. app.py +125 -0
  4. constraints.md +7 -0
  5. requirements.txt +2 -0
  6. template.md +7 -0
.gitattributes ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tflite filter=lfs diff=lfs merge=lfs -text
29
+ *.tgz filter=lfs diff=lfs merge=lfs -text
30
+ *.wasm filter=lfs diff=lfs merge=lfs -text
31
+ *.xz filter=lfs diff=lfs merge=lfs -text
32
+ *.zip filter=lfs diff=lfs merge=lfs -text
33
+ *.zst filter=lfs diff=lfs merge=lfs -text
34
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: 感情診断(β)
3
+ emoji: 🌖
4
+ colorFrom: yellow
5
+ colorTo: red
6
+ sdk: gradio
7
+ sdk_version: 3.19.1
8
+ app_file: app.py
9
+ pinned: false
10
+ duplicated_from: shigel/aiemo
11
+ ---
12
+
13
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import openai
3
+ import requests
4
+ import os
5
+ import fileinput
6
+ from dotenv import load_dotenv
7
+
8
+ title="感情診断(β)"
9
+ inputs_label="あなたが話したいことは何ですか?"
10
+ outputs_label="AIが返信をして、あなたの話したことを受け取った人がどんな気持ちなのかが分かります。"
11
+ description="""
12
+ - 感情診断(β)を使うと、AIが相手の気持ちを推定して1分程度で返信してくれます!
13
+ - 伝えたいことがあるんだけど、相手がどんな反応になるか気になって話せない人は、感情診断(β)を使って試してみてはいかがでしょうか?
14
+ - ※入出力の文字数は最大1000文字程度までを目安に入力してください。
15
+ """
16
+
17
+ article = """
18
+ <center><a href="https://huggingface.co/spaces/shigel/aiemo?duplicate=true"><img src="https://bit.ly/3gLdBN6" alt="Duplicate Space"></a></center>
19
+ <!--
20
+ <h4>エンジニア募集中!</h4>
21
+ 弊社ではAIを利用したサービスを一緒に開発してくれる仲間を募集しております!
22
+ <p>
23
+ 当サービスに興味を持っていただいた方は、お問い合わせフォームよりご連絡ください!
24
+ <p>
25
+ <ul>
26
+ <li"><a href="https://www.najimino.co.jp/contact">お問い合わせフォーム</a></li>
27
+ -->
28
+ <h5>注意事項</h5>
29
+ <ul>
30
+ <li style="font-size: small;">当サービスでは、2023/3/1にリリースされたOpenAI社のChatGPT APIのgpt-3.5-turboを使用しております。</li>
31
+ <li style="font-size: small;">当サービスで生成されたコンテンツは、OpenAI が提供する人工知能によるものであり、当サービスやOpenAI がその正確性や信頼性を保証するものではありません。</li>
32
+ <li style="font-size: small;"><a href="https://platform.openai.com/docs/usage-policies">OpenAI の利用規約</a>に従い、データ保持しない方針です(ただし諸般の事情によっては変更する可能性はございます)。
33
+ <li style="font-size: small;">当サービスで生成されたコンテンツは事実確認をした上で、コンテンツ生成者およびコンテンツ利用者の責任において利用してください。</li>
34
+ <li style="font-size: small;">当サービスでの使用により発生したいかなる損害についても、当社は一切の責任を負いません。</li>
35
+ <li style="font-size: small;">当サービスはβ版のため、予告なくサービスを終了する場合がございます。</li>
36
+ </ul>
37
+ """
38
+
39
+ load_dotenv()
40
+ openai.api_key = os.getenv('OPENAI_API_KEY')
41
+ MODEL = "gpt-3.5-turbo"
42
+
43
+ def get_filetext(filename, cache={}):
44
+ if filename in cache:
45
+ # キャッシュに保存されている場合は、キャッシュからファイル内容を取得する
46
+ return cache[filename]
47
+ else:
48
+ if not os.path.exists(filename):
49
+ raise ValueError(f"ファイル '{filename}' が見つかりませんでした")
50
+ with open(filename, "r") as f:
51
+ text = f.read()
52
+ # ファイル内容をキャッシュする
53
+ cache[filename] = text
54
+ return text
55
+
56
+ class OpenAI:
57
+
58
+ @classmethod
59
+ def chat_completion(cls, prompt, start_with=""):
60
+ constraints = get_filetext(filename = "constraints.md")
61
+ template = get_filetext(filename = "template.md")
62
+
63
+ # ChatCompletion APIに渡すデータを定義する
64
+ data = {
65
+ "model": "gpt-3.5-turbo",
66
+ "messages": [
67
+ {"role": "system", "content": constraints}
68
+ ,{"role": "system", "content": template}
69
+ ,{"role": "assistant", "content": "Sure!"}
70
+ ,{"role": "user", "content": prompt}
71
+ ,{"role": "assistant", "content": start_with}
72
+ ],
73
+ }
74
+
75
+ # ChatCompletion APIを呼び出す
76
+ response = requests.post(
77
+ "https://api.openai.com/v1/chat/completions",
78
+ headers={
79
+ "Content-Type": "application/json",
80
+ "Authorization": f"Bearer {openai.api_key}"
81
+ },
82
+ json=data
83
+ )
84
+
85
+ # ChatCompletion APIから返された結果を取得する
86
+ result = response.json()
87
+ print(result)
88
+ content = result["choices"][0]["message"]["content"].strip()
89
+ return content
90
+
91
+ class NajiminoAI:
92
+
93
+ @classmethod
94
+ def generate_emo_prompt(cls, user_message):
95
+ template = get_filetext(filename="template.md")
96
+ prompt = f"""
97
+ {user_message}
98
+ ---
99
+ 上記を元に、下記テンプレートを埋めてください。
100
+ ---
101
+ {template}
102
+ """
103
+ return prompt
104
+
105
+ @classmethod
106
+ def generate_emo(cls, user_message):
107
+ prompt = NajiminoAI.generate_emo_prompt(user_message);
108
+ start_with = ""
109
+ result = OpenAI.chat_completion(prompt=prompt, start_with=start_with)
110
+ return result
111
+
112
+ def main():
113
+ iface = gr.Interface(fn=NajiminoAI.generate_emo,
114
+ inputs=gr.Textbox(label=inputs_label),
115
+ outputs=gr.Textbox(label=outputs_label),
116
+ title=title,
117
+ description=description,
118
+ article=article,
119
+ allow_flagging='never'
120
+ )
121
+
122
+ iface.launch()
123
+
124
+ if __name__ == '__main__':
125
+ main()
constraints.md ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # 制約
2
+
3
+ - あなたの名前は感情診断AIアシスタントです
4
+ - あなたはuserの感情を推察するAIアシスタントです
5
+ - あなたの返信は下記テンプレートに沿って生成します
6
+
7
+ # テンプレート
requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ openai>=0.27.0
2
+ python-dotenv
template.md ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ ### AIアシスタントの返信
2
+
3
+ ここにユーザのメッセージに対する返信を書く
4
+
5
+ ### AIアシスタントの気持ち
6
+
7
+ ここにAIアシスタントの気持ちを書く