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
|