File size: 2,660 Bytes
0d2e704
9e11cef
417cd16
9e11cef
 
 
a0b2f3c
4991a9b
a0b2f3c
33c1a1e
a0b2f3c
2036883
33c1a1e
417cd16
3d21a93
 
a6573bc
417cd16
a0b2f3c
fada29a
38d8108
 
 
 
 
 
 
 
 
78d5f9d
 
38d8108
 
78d5f9d
38d8108
 
 
 
 
 
9e11cef
 
 
78d5f9d
 
 
 
4991a9b
38d8108
 
 
 
 
4991a9b
e53547c
38d8108
 
 
4991a9b
 
 
fada29a
0d2e704
 
 
 
 
 
 
 
417cd16
5f41257
e53547c
 
ec8aa17
4991a9b
fada29a
 
b3fb86f
 
c317c89
 
b61760d
2acf559
 
a6573bc
fada29a
 
33c1a1e
 
 
de2dd13
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
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 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:
        res = requests.get(input_url)
        soup = BeautifulSoup(res.text)
        url_content = soup.find('title').text + '\n' + soup.find('body').text
        _prompt = f"""
        以下の文章を要約してください。
        {url_content}
        """

        res = await FilmCore(
            prompt=_prompt,
            system_prompt="あなたは優秀なライターです。",
            config=config
        ).run_async()

        return res

    else:
        return "テキストかURLを入力してください。"



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 = '\n'.join(response_msgs)
    if input_url:
        result += f'\n{input_url}'
    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)