File size: 3,171 Bytes
9f1a6f8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
cf354bd
9f1a6f8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from gradio import (
    update,
    Blocks,
    Row,
    Examples,
    Group,
    Markdown,
    Textbox,
    Button,
    Tabs,
    TabItem,
    DataFrame as GRDataFrame,
)
from ambiguous_search_backends import AmbiguousSearchBackend
from classic_search_backends import ClassicSearchBackend


def launch_frontend(
    ambiguous_search_backend: AmbiguousSearchBackend,
    classic_search_backend: ClassicSearchBackend,
):
    def on_ambiguous_search_click(query: str):
        result = ambiguous_search_backend.submit(query)
        return GRDataFrame.update(value=result, visible=True)

    def on_ambiguous_search_query_clear_click():
        return Textbox.update(value="")

    def on_classic_search_click(query: str):
        result = classic_search_backend.submit(query)
        return GRDataFrame.update(value=result, visible=True)

    with Blocks() as frontend:
        Markdown("## Himitsudogu Search")
        with Tabs():
            with TabItem("あいまい検索"):
                Markdown(
                    """
                自然言語処理モデル"Sentence BERT"を使って、ドラえもんのひみつ道具をあいまい検索。
                """
                )
                query_textbox = Textbox(
                    label="自分の言葉でひみつ道具を説明してください", max_lines=1
                )
                with Row():
                    submit_button = Button("検索", variant="primary")
                    clear_button = Button("クリア")
                result_table = GRDataFrame(visible=False)
                Examples(
                    examples=[
                        "ふりかけると水を色々な性質にできる",
                        "小さいカメラが飛ぶ",
                        "壁を通り抜けられるようにする輪",
                        "地図をいじって実際の町の建物などの位置を変える",
                        "歌声を綺麗にする",
                    ],
                    inputs=query_textbox,
                )

                submit_button.click(
                    on_ambiguous_search_click,
                    inputs=query_textbox,
                    outputs=result_table,
                )
                clear_button.click(
                    on_ambiguous_search_query_clear_click,
                    inputs=None,
                    outputs=query_textbox,
                )

            with TabItem("古典検索"):
                Markdown(
                    f"""
                キーワードから検索。
                検索可能なひみつ道具は全{classic_search_backend.get_num_items()}種類。
                """
                )
                query_textbox = Textbox(label="キーワード", max_lines=1)
                with Row():
                    submit_button = Button("検索", variant="primary")
                result_table = GRDataFrame(visible=False)

                submit_button.click(
                    on_classic_search_click,
                    inputs=query_textbox,
                    outputs=result_table,
                )

    frontend.launch()