pascal-kun / app.py
YKajima's picture
add bs4
9e11cef
raw
history blame
No virus
2.38 kB
import json
import os
import re
import requests
from bs4 import BeautifulSoup
import gradio as gr
from spiralfilm import FilmCore, FilmConfig
def greet(name):
return "こんにちは " + name + "さん!! \n僕はパスカルくんだよ。よろしくね"
def extract_texts(input_str):
pattern = r"msg='([^']*)'"
matches = re.findall(pattern, input_str)
return matches
async def summarize(input_text: str, input_url: str):
if input_text:
_prompt = f"""
以下の文章を要約してください。
{input_text}
"""
elif input_url:
res = requests.get(input_url)
soup = BeautifulSoup(res.text)
url_content = soup.find('title').text + '\n' + soup.find('body').text
_prompt = f"""
以下の文章を要約してください。
{url_content}
"""
else:
return "テキストかURLを入力してください。"
config = FilmConfig(
"gpt-3.5-turbo-16k",
api_type="azure",
azure_deployment_id="gpt-35-turbo",
azure_api_version="2023-05-15",
timeout=60.0, # これを入れないとtimeoutが頻繁に発生する
)
config.get_apikey()
film = FilmCore(
prompt=_prompt,
system_prompt="あなたは優秀なライターです。",
config=config
)
return await film.run_async()
async def chat(input_text, input_url):
summary = await summarize(input_text, input_url)
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 = ''.join(response_msgs)
return result
with gr.Blocks() as iface:
# UI
with gr.Row():
with gr.Column():
input_text = gr.Textbox(label="テキスト")
input_url = gr.Textbox(label="URL")
chat_btn = gr.Button("Chat")
with gr.Column():
output_text = gr.Textbox(label="回答")
# Event handler
chat_btn.click(fn=chat, inputs=[input_text, input_url], outputs=output_text)
if __name__ == "__main__":
iface.launch(auth=("spiralai", "spiralai"), share=True)