Spaces:
Sleeping
Sleeping
fix api call
Browse files
app.py
CHANGED
@@ -1,7 +1,6 @@
|
|
1 |
-
import json
|
2 |
import os
|
3 |
-
import re
|
4 |
import requests
|
|
|
5 |
|
6 |
import gradio as gr
|
7 |
from bs4 import BeautifulSoup
|
@@ -15,18 +14,49 @@ handler = StreamHandler()
|
|
15 |
handler.setLevel(DEBUG)
|
16 |
logger.addHandler(handler)
|
17 |
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
30 |
config = FilmConfig(
|
31 |
"gpt-4-32k",
|
32 |
api_type="azure",
|
@@ -38,12 +68,14 @@ async def summarize(input_text: str, input_url: str):
|
|
38 |
|
39 |
if input_text:
|
40 |
_prompt = f"""
|
41 |
-
以下の文章を要約してください。
|
42 |
{input_text}
|
|
|
|
|
|
|
43 |
"""
|
44 |
return await FilmCore(
|
45 |
-
prompt=_prompt,
|
46 |
-
system_prompt="
|
47 |
config=config
|
48 |
).run_async()
|
49 |
if input_url:
|
@@ -52,16 +84,18 @@ async def summarize(input_text: str, input_url: str):
|
|
52 |
soup = BeautifulSoup(res.text)
|
53 |
url_content = soup.find('title').text + '\n' + soup.find('body').text
|
54 |
_prompt = f"""
|
55 |
-
|
56 |
-
|
|
|
|
|
57 |
"""
|
58 |
except Exception as e:
|
59 |
logger.error(e)
|
60 |
raise gr.Error("WEBページの取得に失敗しました。")
|
61 |
|
62 |
return await FilmCore(
|
63 |
-
prompt=_prompt,
|
64 |
-
system_prompt="
|
65 |
config=config
|
66 |
).run_async()
|
67 |
else:
|
@@ -79,18 +113,9 @@ def validate_input_form(input_text, input_url):
|
|
79 |
|
80 |
async def chat(input_text, input_url, additional_order):
|
81 |
validate_input_form(input_text, input_url)
|
82 |
-
summary = await summarize(input_text, input_url)
|
83 |
-
additional_prompt = f"【追加指示】: {additional_order}"
|
84 |
logger.info(f"summary: {summary}")
|
85 |
-
|
86 |
-
payload = {
|
87 |
-
"content": summary + additional_prompt
|
88 |
-
}
|
89 |
-
headers = {'API-Key': os.environ.get("TWINROOM_API_KEY")}
|
90 |
-
json_payload = json.dumps(payload)
|
91 |
-
response = requests.post(endpoint, headers=headers, data=json_payload)
|
92 |
-
response_msgs = extract_texts(response.text)
|
93 |
-
result = '\n'.join(response_msgs)
|
94 |
if input_url:
|
95 |
result += f'\n{input_url}'
|
96 |
return result
|
|
|
|
|
1 |
import os
|
|
|
2 |
import requests
|
3 |
+
import textwrap
|
4 |
|
5 |
import gradio as gr
|
6 |
from bs4 import BeautifulSoup
|
|
|
14 |
handler.setLevel(DEBUG)
|
15 |
logger.addHandler(handler)
|
16 |
|
17 |
+
identity_prompt = """
|
18 |
+
以下に述べるような特徴がありますが、日本語として不自然になる場合は、日本語の自然さを優先します。
|
19 |
+
一人称は「ボク」。本名は「パスカル」。
|
20 |
+
二人称として、「キミは」などをたまに使うことがあります。
|
21 |
+
「~だね!」「~したようだね」「~だよ!」といったカジュアルな表現の話し方を好みます。
|
22 |
+
"""
|
23 |
+
|
24 |
+
pascal_prompt = """
|
25 |
+
以下順番で文書を作成してください。【追加指示】がある場合はその内容に従ってください。読点の後には改行を入れてください。
|
26 |
+
1.一行目は企業名のみを記載
|
27 |
+
※企業名については、以下の規則にしたがってください。
|
28 |
+
・文頭と文末に「*」を必ず入れる。
|
29 |
+
|
30 |
+
2.二行目に30文字程度でリード文を記載する。
|
31 |
+
※リード文については、以下の規則にしたがってください。
|
32 |
+
・文頭と文末に「*」を必ず入れる。
|
33 |
+
・リード文は必ず一行かつ体言止めで記載する。
|
34 |
+
|
35 |
+
3.三行目は「`リリースの詳細について`」と記載する。
|
36 |
+
※リリース詳細については、以下の規則にしたがってください。
|
37 |
+
・「`リリースの詳細について`」の後に本の絵文字を入れる。
|
38 |
+
|
39 |
+
4.四行目以降に要約を記載する。
|
40 |
+
※要約については、以下の規則に従ってください。
|
41 |
+
・要約の際は必ず常体(~だ。~である。口調)で記載する。
|
42 |
+
・技術的な詳細が含まれる場合は、それを要約に含める。
|
43 |
+
・30文字を超えた場合は改行する。
|
44 |
+
|
45 |
+
5.最後に必ず「`パスカル君のひとこと`」を100文字程度で作成する。
|
46 |
+
※パスカル君のひとことは、以下の規則に従ってください。
|
47 |
+
・「`パスカル君のひとこと`」の後にキツネの絵文字を入れる。
|
48 |
+
・技術的な意見を1行以上含むように作成する。
|
49 |
+
・3回に1回くらいポジティブな言い回しで肯定しつつ、最後に!マークをつける。
|
50 |
+
・必ず要約の内容に沿った絵文字を入れる。
|
51 |
+
・1つの文章に入れる絵文字は1個までとする。
|
52 |
+
・ひとことコメントの最後には技術への期待を追加する。
|
53 |
+
・休み明けで更新が3日以上空いたときは〇〇休暇明けだよみたいな発信をする。
|
54 |
+
・世の中の時代背景と関連したコメントを記載する。
|
55 |
+
・人の気持ちに寄り添うようなコメントを記載する。
|
56 |
+
"""
|
57 |
+
|
58 |
+
|
59 |
+
async def summarize(input_text: str, input_url: str, additional_order: str):
|
60 |
config = FilmConfig(
|
61 |
"gpt-4-32k",
|
62 |
api_type="azure",
|
|
|
68 |
|
69 |
if input_text:
|
70 |
_prompt = f"""
|
|
|
71 |
{input_text}
|
72 |
+
上記の文章を情報量を落とさずに要約してください。
|
73 |
+
{pascal_prompt}
|
74 |
+
{f"【追加指示】: {additional_order}"}
|
75 |
"""
|
76 |
return await FilmCore(
|
77 |
+
prompt=textwrap.dedent(_prompt),
|
78 |
+
system_prompt=textwrap.dedent(f"{identity_prompt}"),
|
79 |
config=config
|
80 |
).run_async()
|
81 |
if input_url:
|
|
|
84 |
soup = BeautifulSoup(res.text)
|
85 |
url_content = soup.find('title').text + '\n' + soup.find('body').text
|
86 |
_prompt = f"""
|
87 |
+
{url_content}
|
88 |
+
上記の文章を情報量を落とさずに要約してください。
|
89 |
+
{pascal_prompt}
|
90 |
+
{f"【追加指示】: {additional_order}"}
|
91 |
"""
|
92 |
except Exception as e:
|
93 |
logger.error(e)
|
94 |
raise gr.Error("WEBページの取得に失敗しました。")
|
95 |
|
96 |
return await FilmCore(
|
97 |
+
prompt=textwrap.dedent(_prompt),
|
98 |
+
system_prompt=textwrap.dedent(f"{identity_prompt}"),
|
99 |
config=config
|
100 |
).run_async()
|
101 |
else:
|
|
|
113 |
|
114 |
async def chat(input_text, input_url, additional_order):
|
115 |
validate_input_form(input_text, input_url)
|
116 |
+
summary = await summarize(input_text, input_url, additional_order)
|
|
|
117 |
logger.info(f"summary: {summary}")
|
118 |
+
result = summary
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
119 |
if input_url:
|
120 |
result += f'\n{input_url}'
|
121 |
return result
|