File size: 4,774 Bytes
7fea1f4
 
 
 
4068dda
7fea1f4
 
 
 
 
 
 
4068dda
7fea1f4
cfd8c2d
 
 
 
7fea1f4
 
 
 
 
 
 
cfd8c2d
1e64f5f
 
 
 
 
988c713
 
 
 
 
 
 
 
7fea1f4
 
 
 
cfd8c2d
 
7fea1f4
cfd8c2d
f53f6c3
7fea1f4
cfd8c2d
 
7fea1f4
 
cfd8c2d
 
 
7fea1f4
cfd8c2d
 
7fea1f4
cfd8c2d
988c713
 
 
 
7fea1f4
 
1e64f5f
 
 
 
 
f53f6c3
1e64f5f
 
 
 
 
cfd8c2d
7fea1f4
cfd8c2d
 
f53f6c3
7fea1f4
cfd8c2d
 
7fea1f4
 
 
cfd8c2d
 
1e64f5f
cfd8c2d
988c713
cfd8c2d
 
988c713
1e64f5f
 
 
 
 
 
 
 
 
cfd8c2d
 
1e64f5f
cfd8c2d
7fea1f4
 
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
import gradio as gr
from src.control.control import Controller


def run(ctrl: Controller, config: {}):
    with gr.Blocks() as qna:
        with gr.Row():
            with gr.Column():
                pass

            with gr.Column(scale=10):

                gr.Markdown(config['title'])

                histo_text_comp = gr.Chatbot(
                    visible=False,
                    value=[],
                )
                input_text_comp = gr.Textbox(
                    label="",
                    lines=1,
                    max_lines=3,
                    interactive=True,
                    placeholder="Posez votre question ici",
                )
                clear_btn = gr.Button("Clear")
                input_example_comp = gr.Radio(
                    label="Examples",
                    choices=list(config['examples'].values()),
                    value="",
                )
                source_text_comp = []
                for i in range(4):
                    source_text_comp.append(gr.Textbox(
                        lines=4,
                        max_lines=4,
                        interactive=False,
                        visible=False,
                    ))

            with gr.Column():
                pass

        def input_text_fn1(input_text_, histo_text_):
            histo_text_.append((input_text_, None))
            update_ = {
                histo_text_comp: gr.update(visible=True, value=histo_text_),
                input_example_comp: gr.update(visible=False,),
            }
            for i in range(4):
                update_[source_text_comp[i]] = gr.update(visible=False)
            return update_

        def input_text_fn2(input_text_, histo_text_):
            answer, sources = ctrl.get_response(query_fr=input_text_, histo_fr=histo_text_)
            histo_text_[-1] = (input_text_, answer)
            update_ = {
                histo_text_comp: gr.update(value=histo_text_),
                input_text_comp: gr.update(value=''),
            }
            for i in range(min(len(sources), 3)):
                s = sources[i]
                source_label = f'{s.index}   {s.title_fr}                        score = {s.distance_str}'
                source_text = s.content_fr
                update_[source_text_comp[i]] = gr.update(visible=True, value=source_text, label=source_label)
            return update_

        def input_example_fn(input_example_, histo_text_):
            histo_text_.append((input_example_, None))
            update_ = {
                input_text_comp: gr.update(value=input_example_),
                histo_text_comp: gr.update(visible=True, value=histo_text_),
                input_example_comp: gr.update(visible=False, value=''),
            }
            for i in range(4):
                update_[source_text_comp[i]] = gr.update(visible=False)
            return update_

        def clear_fn():
            update_ = {
                input_text_comp: gr.update(value=''),
                histo_text_comp: gr.update(value='', visible=False),
                input_example_comp: gr.update(value='', visible=True),
            }
            for i in range(4):
                update_[source_text_comp[i]] = gr.update(visible=False, value='hello')
            return update_

        input_text_comp \
            .submit(input_text_fn1,
                    inputs=[input_text_comp, histo_text_comp],
                    outputs=[histo_text_comp, input_example_comp,
                             source_text_comp[0], source_text_comp[1], source_text_comp[2], source_text_comp[3]])\
            .then(input_text_fn2,
                  inputs=[input_text_comp, histo_text_comp],
                  outputs=[input_text_comp, histo_text_comp,
                           source_text_comp[0], source_text_comp[1], source_text_comp[2], source_text_comp[3]])
        input_example_comp \
            .input(input_example_fn,
                   inputs=[input_example_comp, histo_text_comp],
                   outputs=[input_text_comp, histo_text_comp, input_example_comp,
                            source_text_comp[0], source_text_comp[1], source_text_comp[2], source_text_comp[3]])\
            .then(input_text_fn2,
                  inputs=[input_text_comp, histo_text_comp],
                  outputs=[input_text_comp, histo_text_comp,
                           source_text_comp[0], source_text_comp[1], source_text_comp[2], source_text_comp[3]])
        clear_btn.click(clear_fn,
                        inputs=None,
                        outputs=[input_text_comp, histo_text_comp, input_example_comp,
                                 source_text_comp[0], source_text_comp[1], source_text_comp[2], source_text_comp[3]])

    return qna