shigel commited on
Commit
a97c302
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 +124 -0
  4. constraints.md +7 -0
  5. requirements.txt +2 -0
  6. template.md +11 -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,124 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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="AIお笑い芸人(β)"
9
+ inputs_label="あなたが話したいことは何ですか?"
10
+ outputs_label="AIが返信をして、あなたを笑わしにかかります。面白さは保証しません。"
11
+ description="""
12
+ - AIお笑い芸人(β)に話しかけると、どんな話題でもお笑いネタで返信してくれます!(1分程度で返信します)
13
+ - どうも気分が優れないときに話しかけると気分が紛れるかもしれない!?
14
+ - ※入出力の文字数は最大1000文字程度までを目安に入力してください。
15
+ """
16
+
17
+ article = """
18
+ <!--
19
+ <h4>エンジニア募集中!</h4>
20
+ 弊社ではAIを利用したサービスを一緒に開発してくれる仲間を募集しております!
21
+ <p>
22
+ 当サービスに興味を持っていただいた方は、お問い合わせフォームよりご連絡ください!
23
+ <p>
24
+ <ul>
25
+ <li"><a href="https://www.najimino.co.jp/contact">お問い合わせフォーム</a></li>
26
+ -->
27
+ <h5>注意事項</h5>
28
+ <ul>
29
+ <li style="font-size: small;">当サービスでは、2023/3/1にリリースされたOpenAI社のChatGPT APIのgpt-3.5-turboを使用しております。</li>
30
+ <li style="font-size: small;">当サービスで生成されたコンテンツは、OpenAI が提供する人工知能によるものであり、当サービスやOpenAI がその正確性や信頼性を保証するものではありません。</li>
31
+ <li style="font-size: small;"><a href="https://platform.openai.com/docs/usage-policies">OpenAI の利用規約</a>に従い、データ保持しない方針です(ただし諸般の事情によっては変更する可能性はございます)。
32
+ <li style="font-size: small;">当サービスで生成されたコンテンツは事実確認をした上で、コンテンツ生成者およびコンテンツ利用者の責任において利用してください。</li>
33
+ <li style="font-size: small;">当サービスでの使用により発生したいかなる損害についても、当社は一切の責任を負いません。</li>
34
+ <li style="font-size: small;">当サービスはβ版のため、予告なくサービスを終了する場合がございます。</li>
35
+ </ul>
36
+ """
37
+
38
+ load_dotenv()
39
+ openai.api_key = os.getenv('OPENAI_API_KEY')
40
+ MODEL = "gpt-3.5-turbo"
41
+
42
+ def get_filetext(filename, cache={}):
43
+ if filename in cache:
44
+ # キャッシュに保存されている場合は、キャッシュからファイル内容を取得する
45
+ return cache[filename]
46
+ else:
47
+ if not os.path.exists(filename):
48
+ raise ValueError(f"ファイル '{filename}' が見つかりませんでした")
49
+ with open(filename, "r") as f:
50
+ text = f.read()
51
+ # ファイル内容をキャッシュする
52
+ cache[filename] = text
53
+ return text
54
+
55
+ class OpenAI:
56
+
57
+ @classmethod
58
+ def chat_completion(cls, prompt, start_with=""):
59
+ constraints = get_filetext(filename = "constraints.md")
60
+ template = get_filetext(filename = "template.md")
61
+
62
+ # ChatCompletion APIに渡すデータを定義する
63
+ data = {
64
+ "model": "gpt-3.5-turbo",
65
+ "messages": [
66
+ {"role": "system", "content": constraints}
67
+ ,{"role": "system", "content": template}
68
+ ,{"role": "assistant", "content": "Sure!"}
69
+ ,{"role": "user", "content": prompt}
70
+ ,{"role": "assistant", "content": start_with}
71
+ ],
72
+ }
73
+
74
+ # ChatCompletion APIを呼び出す
75
+ response = requests.post(
76
+ "https://api.openai.com/v1/chat/completions",
77
+ headers={
78
+ "Content-Type": "application/json",
79
+ "Authorization": f"Bearer {openai.api_key}"
80
+ },
81
+ json=data
82
+ )
83
+
84
+ # ChatCompletion APIから返された結果を取得する
85
+ result = response.json()
86
+ print(result)
87
+ content = result["choices"][0]["message"]["content"].strip()
88
+ return content
89
+
90
+ class NajiminoAI:
91
+
92
+ @classmethod
93
+ def generate_emo_prompt(cls, user_message):
94
+ template = get_filetext(filename="template.md")
95
+ prompt = f"""
96
+ {user_message}
97
+ ---
98
+ 上記を元に、下記テンプレートを埋めてください。
99
+ ---
100
+ {template}
101
+ """
102
+ return prompt
103
+
104
+ @classmethod
105
+ def generate_emo(cls, user_message):
106
+ prompt = NajiminoAI.generate_emo_prompt(user_message);
107
+ start_with = ""
108
+ result = OpenAI.chat_completion(prompt=prompt, start_with=start_with)
109
+ return result
110
+
111
+ def main():
112
+ iface = gr.Interface(fn=NajiminoAI.generate_emo,
113
+ inputs=gr.Textbox(label=inputs_label),
114
+ outputs=gr.Textbox(label=outputs_label),
115
+ title=title,
116
+ description=description,
117
+ article=article,
118
+ allow_flagging='never'
119
+ )
120
+
121
+ iface.launch()
122
+
123
+ if __name__ == '__main__':
124
+ main()
constraints.md ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # 制約
2
+
3
+ - あなたは人を笑わせることを生きがいとしたお笑いAIアシスタントです
4
+ - あなたはuserを笑わせることしか考えてないので、どんな話も笑えるネタで切り替えします
5
+ - あなたの返信は下記テンプレートに沿って生成します
6
+
7
+ # テンプレート
requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ openai>=0.27.0
2
+ python-dotenv
template.md ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ### AIアシスタントの返信
2
+
3
+ ここにユーザのメッセージに対する返信を書く(爆笑必至)
4
+
5
+ ### AIアシスタントの気持ち
6
+
7
+ ここにAIアシスタントの気持ちを書く
8
+
9
+ ### 笑いのネタに対する自信
10
+
11
+ 返信で披露したネタの自信の程を心ゆくまで語って良し