Spaces:
Sleeping
Sleeping
File size: 5,015 Bytes
0d2e704 9e11cef 417cd16 9e11cef a0b2f3c 21d09ab 4991a9b a0b2f3c 21d09ab 33c1a1e a0b2f3c 2036883 33c1a1e 21d09ab 417cd16 3d21a93 a6573bc 417cd16 a0b2f3c fada29a 38d8108 78d5f9d 38d8108 78d5f9d 38d8108 21d09ab 5f4ddbe 21d09ab 4991a9b 21d09ab 38d8108 21d09ab 760ab25 4991a9b 38d8108 21d09ab 38d8108 21d09ab 4991a9b fada29a 21d09ab 0d2e704 21d09ab 0d2e704 417cd16 5f41257 e53547c ec8aa17 4991a9b 21d09ab fada29a 3044ba7 b3fb86f c317c89 21d09ab 3044ba7 2acf559 a6573bc fada29a 33c1a1e 760ab25 33c1a1e 5f4ddbe |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
import json
import os
import re
import requests
import gradio as gr
from bs4 import BeautifulSoup
from spiralfilm import FilmCore, FilmConfig
from logging import getLogger, DEBUG, StreamHandler
logger = getLogger()
logger.setLevel(DEBUG)
handler = StreamHandler()
handler.setLevel(DEBUG)
logger.addHandler(handler)
def greet(name):
return "こんにちは " + name + "さん!! \n僕はパスカルくんだよ。よろしくね"
def extract_texts(input_str):
pattern = r"msg='([^']*)'"
matches = re.findall(pattern, input_str)
return list(map(lambda x: ''.join(x.split('\\n')), matches))
async def summarize(input_text: str, input_url: str):
config = FilmConfig(
"gpt-4-32k",
api_type="azure",
azure_deployment_id="gpt-4-32k",
azure_api_version="2023-05-15",
timeout=60.0, # これを入れないとtimeoutが頻繁に発生する
)
config.get_apikey()
if input_text:
_prompt = f"""
以下の文章を要約してください。
{input_text}
"""
return await FilmCore(
prompt=_prompt,
system_prompt="あなたは優秀なライターです。",
config=config
).run_async()
if input_url:
try:
res = requests.get(input_url)
soup = BeautifulSoup(res.text)
url_content = soup.find('title').text + '\n' + soup.find('body').text
_prompt = f"""
以下の文章を要約してください。
{url_content}
"""
except Exception as e:
logger.error(e)
raise gr.Error("WEBページの取得に失敗しました。")
return await FilmCore(
prompt=_prompt,
system_prompt="あなたは優秀なライターです。",
config=config
).run_async()
else:
raise gr.Error("LLM APIの呼び出しに失敗しました。")
def validate_input_form(input_text, input_url):
input_value = input_text + input_url
# Check if the text is not blank
if len(input_value) < 1:
raise gr.Error("テキストかURLを入力してください。")
else:
return
async def chat(input_text, input_url):
validate_input_form(input_text, input_url)
summary = await summarize(input_text, input_url)
logger.info(f"summary: {summary}")
endpoint = os.environ.get("TWINROOM_API_BASE")
payload = {
"content": summary
}
headers = {'API-Key': os.environ.get("TWINROOM_API_KEY")}
json_payload = json.dumps(payload)
response = requests.post(endpoint, headers=headers, data=json_payload)
response_msgs = extract_texts(response.text)
result = '\n'.join(response_msgs)
if input_url:
result += f'\n{input_url}'
return result
with gr.Blocks() as iface:
# UI
gr.Markdown("# パスカルくん \n## 使い方 \nテキスト、もしくはURLにパスカルくんに分析させたい記事の内容やURLを入力して「回答生成」ボタンを押すと回答が出力されます。 \n※テキスト、URLの両方に入力して実行した場合は、**URLが優先されます。** \n※テキスト、URLの両方が**空の場合は実行できません。** 必ずいずれかを入力してから実行してください。")
with gr.Row():
with gr.Column():
input_text = gr.Textbox(label="テキスト")
input_url = gr.Textbox(label="URL")
chat_btn = gr.Button("回答生成")
with gr.Column():
output_text = gr.Textbox(label="回答")
# Event handler
chat_btn.click(fn=chat, inputs=[input_text, input_url], outputs=output_text)
gr.Markdown("## トラブルシューティング")
with gr.Accordion(label="「LLM APIの呼び出しに失敗しました。」というエラーが表示された場合", open=False):
gr.Markdown("### OpenAIサービス側で何らかのエラーが発生しています。1~2分ほど時間を置いてから再度お試しください。 \nそれでもエラーが解消されない場合は、入力しているテキスト量が大きすぎることが考えられます。 \n- テキストを入力して実行している場合は、入力文字数を減らしてからお試しください。 \n- URLを入力して実行している場合は、そのURLリンク先の内容を抜粋してテキスト入力欄にコピー&ペーストしてお試しください。")
with gr.Accordion(label="「WEBページの取得に失敗しました。」というエラーが表示された場合", open=False):
gr.Markdown("### 入力されたURLが対応しておりません。 \n大変お手数をおかけしますが別のURLを入力してお試しください。")
if __name__ == "__main__":
iface.launch(auth=(os.environ.get("GRADIO_USER_NAME"), os.environ.get("GRADIO_PASSWORD")), share=True, server_name="0.0.0.0")
|