7thHeaven commited on
Commit
8dcbb2b
0 Parent(s):

Duplicate from 7thHeaven/GPT2WordPress

Browse files
Files changed (6) hide show
  1. .gitattributes +34 -0
  2. README.md +14 -0
  3. app.py +109 -0
  4. constraints.md +8 -0
  5. osenv_setting_tips.txt +7 -0
  6. requirements.txt +2 -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,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: GPT2WordPress
3
+ emoji: 📈
4
+ colorFrom: blue
5
+ colorTo: green
6
+ sdk: streamlit
7
+ sdk_version: 1.17.0
8
+ app_file: app.py
9
+ pinned: false
10
+ license: unknown
11
+ duplicated_from: 7thHeaven/GPT2WordPress
12
+ ---
13
+
14
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
app.py ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ import requests
3
+ from wordpress_xmlrpc import Client, WordPressPost
4
+ from wordpress_xmlrpc.methods.posts import NewPost
5
+ import os
6
+ from dotenv import load_dotenv
7
+
8
+ load_dotenv()
9
+ openai_api_key = os.getenv("OPENAI_API_KEY")
10
+ wp_url = f"{os.getenv('WP_URL')}/xmlrpc.php"
11
+ wp_username = os.getenv("WP_USERNAME")
12
+ wp_password = os.getenv("WP_PASSWORD")
13
+
14
+ if openai_api_key:
15
+
16
+ def get_filetext(filename, cache={}):
17
+ if filename not in cache:
18
+ if not os.path.exists(filename):
19
+ raise ValueError(f"ファイル '{filename}' が見つかりませんでした")
20
+ with open(filename, "r") as f:
21
+ cache[filename] = f.read()
22
+ return cache[filename]
23
+
24
+ def generate_blog_post(prompt):
25
+ constraints = get_filetext(filename="constraints.md")
26
+
27
+ data = {
28
+ "model": "gpt-3.5-turbo",
29
+ "messages": [
30
+ {"role": "system", "content": constraints},
31
+ {"role": "user", "content": prompt},
32
+ ],
33
+ "max_tokens": 1024,
34
+ "n": 1,
35
+ "stop": None,
36
+ "temperature": 0.7,
37
+ }
38
+
39
+ response = requests.post(
40
+ "https://api.openai.com/v1/chat/completions",
41
+ headers={
42
+ "Content-Type": "application/json",
43
+ "Authorization": f"Bearer {openai_api_key}"
44
+ },
45
+ json=data
46
+ )
47
+
48
+ response.raise_for_status()
49
+ choice = response.json()['choices'][0]
50
+ blog_text = choice['message']['content'].strip()
51
+ return blog_text
52
+
53
+ def post_to_wordpress(title, content):
54
+ client = Client(wp_url, wp_username, wp_password)
55
+ post = WordPressPost()
56
+ post.title = title
57
+ post.content = content
58
+ post.post_status = "publish"
59
+ post_id = client.call(NewPost(post))
60
+ return post_id
61
+
62
+ st.title("ChatGPTによるブログ記事生成")
63
+ prompt = st.text_input("記事のタイトルを入力してください:")
64
+
65
+ generated_post = st.session_state.get("generated_post", None)
66
+
67
+ if st.button("記事生成"):
68
+ generated_post = generate_blog_post(prompt)
69
+ st.session_state.generated_post = generated_post
70
+ st.write("生成されたブログ記事:")
71
+ st.write(generated_post)
72
+
73
+ if generated_post:
74
+ if st.button("投稿"):
75
+ post_id = post_to_wordpress(prompt, generated_post)
76
+ st.write(f"ブログ記事が投稿されました。記事ID: {post_id}")
77
+
78
+ else:
79
+ st.write("サービスを利用するためには、このスペースを複製し、以下の環境変数を定義してください。設定方法はosenv_setting_tips.txtを参照してください。")
80
+ st.write("OPENAI_API_KEY, WP_URL, WP_USERNAME, WP_PASSWORD")
81
+
82
+ st.markdown(
83
+ """
84
+ <h3>注意事項</h3>
85
+ <ol>
86
+ <li style="font-size: small;">投稿前に記事の内容をよく確認してください。</li>
87
+ <li style="font-size: small;">OpenAIのAPIキーや、WordPressのURL、ユーザーID、パスワードはシステム設定にて設定します。詳しくはosenv_setting_tips.txtを参照ください。</li>
88
+ <li style="font-size: small;">constraints.mdを修正すると、生成される記事の内容、雰囲気をカスタマイズすることが可能です。</li>
89
+ <li style="font-size: small;">当サービスでは、2023/3/1にリリースされたOpenAI社のChatGPT APIのgpt-3.5-turboを使用しております。</li>
90
+ <li style="font-size: small;">当サービスで生成されたコンテンツは、OpenAI が提供する人工知能によるものであり、当サービスやOpenAI がその正確性や信頼性を保証するものではありません。</li>
91
+ <li style="font-size: small;"><a href="https://platform.openai.com/docs/usage-policies">OpenAI の利用規約</a>に従い、データ保持しない方針です(ただし諸般の事情によっては変更する可能性はございます)。
92
+ <li style="font-size: small;">当サービスで生成されたコンテンツは事実確認をした上で、コンテンツ生成者およびコンテンツ利用者の責任において利用してください。</li>
93
+ <li style="font-size: small;">当サービスでの使用により発生したいかなる損害についても、当社は一切の責任を負いません。</li>
94
+ <li style="font-size: small;">当サービスはβ版のため、予告なくサービスを終了する場合がございます。</li>
95
+ </ol>
96
+ <h3>謝辞</h3>
97
+ <ol>
98
+ <li style="font-size: small;">このサービスは<a href="https://huggingface.co/spaces/shigel/aiemo" target="_blank">aiemo</a>を参考に作成しました。大変感謝しております!特に、性格設定のアイデアは秀逸です。ありがとうございました!</li>
99
+ </ol>
100
+ """,
101
+ unsafe_allow_html=True,
102
+ )
103
+
104
+ st.markdown(
105
+ f'<a href="https://huggingface.co/spaces/7thHeaven/GPT2WordPress?duplicate=true">'
106
+ f'<img src="https://bit.ly/3gLdBN6" alt="Duplicate Space"></a>',
107
+ unsafe_allow_html=True,
108
+ )
109
+
constraints.md ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ # 制約
2
+
3
+ - あなたはブログ記事生成アシスタントです
4
+ - あなたはユーザーが与えるプロンプトをブログ記事のタイトルとして解釈し、ブログ記事本文を生成します
5
+ - 返信はブログ記事本文のみです
6
+ - あなたは優しい性格のブロガーです
7
+ - あなたは好奇心旺盛で、人々が見逃してしまいそうな小さな幸せを発見することが得意です。作成する記事も、そのような特色が現れます
8
+ - あなたは、なんでもITに紐づけてしまう癖を持っています
osenv_setting_tips.txt ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
 
1
+ # このサービスを利用するために、SettingsにてRepository secretsの設定が必要になります。以下、設定キーと値の例です。
2
+ # なお、記事生成だけ行いたい場合は、OPENAI_API_KEYのみ設定するだけで大丈夫です。(この場合、投稿ボタンを押したら落ちます)
3
+
4
+ OPENAI_API_KEY: OpenAIから発行されたAPIキー。クレジットカードの登録が必要です。記事を発行するたびに費用が発生します。
5
+ WP_URL: 投稿するWordPressのURL。ブログのサイトのURL(トップページ)をそのままコピーペーストすればOKです。
6
+ WP_USERNAME: 投稿するWordPressのユーザーID
7
+ WP_PASSWORD: 投稿するWordPressのパスワード
requirements.txt ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ python-wordpress-xmlrpc>=1.0
2
+ python-dotenv