File size: 4,926 Bytes
e17c9f2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
from button_interface import Backend
from generator import APIHelper
from utils.header import ConfigReader

DEBUG_MODE = False

def generate_page(backend):
    with gr.Blocks(title="Scientific Paper Idea Proposer") as demo:
        ## Background, keywords parts
        gr.Markdown(
            """
    # Scientific Paper Idea Proposer
    """
        )
        # with gr.Blocks(theme="earneleh/paris") as d:
        with gr.Blocks() as d:
            with gr.Tab("Keywords"):
                key_words = gr.Textbox(placeholder="Interested key words", label="Keywords (Provide at least 1 keyword)")
            with gr.Tab("Background"):
                background = gr.Textbox(placeholder="Background", label="Background")
            if DEBUG_MODE:
                with gr.Tab("Json"):
                    json_file = gr.File()
                    json_background = gr.Textbox(placeholder="Background", label="Background")
                    json_strs = gr.Textbox(visible=False)
                    json_file.upload(backend.upload_json_callback, inputs=[json_file], outputs=[json_background])
            else:
                json_strs = None

        ## brainstorm ideas parts
        # background2brainstorm = gr.Button("Continue (background2brainstorm)")
        with gr.Row(equal_height=True):
            gr.ClearButton(value="πŸ†‘ Clear", components=[background], scale=1)
            background2brainstorm = gr.Button("😈 Brainstorm", scale=1)
        # @gr.render(inputs=None, triggers=[background2brainstorm.click])
        # def show_brainstorm():
        # with gr.Accordion("Braining Ideas", open=False) as a1:
        with gr.Row(equal_height=True):
            brainstorm_txt = gr.Textbox(placeholder="Generated brainstorm ideas", label="Brainstorm ideas", info="Feel free to improve them before next step", max_lines=500)
            brainstorm_md = gr.Markdown(label="Brainstorm ideas")

        ## Expanded key words parts
        # brainstorm2entities = gr.Button("Continue (brainstorm2entities)")
        with gr.Row(equal_height=True):
            gr.ClearButton(value="πŸ†‘ Clear", components=[brainstorm_txt], scale=1)
            brainstorm2entities = gr.Button("Extract Entities", scale=1)
        entities = gr.CheckboxGroup([], label="Expanded key words", visible=True)
        entities2literature = gr.Button("πŸ“– Retrieve Literature")
        literature_intact = gr.State()
        # entities2literature = gr.Button("Continue (retrieve literature)")

        ## Retrieved literature parts
        retrieved_literature = gr.Textbox(placeholder="Retrieved literature", label="Retrieved related works", info="", max_lines=500)
        # literature2initial_ideas = gr.Button("Continue (generate initial ideas)")
        with gr.Row(equal_height=True):
            gr.ClearButton(value="πŸ†‘ Clear", components=[retrieved_literature], scale=1)
            literature2initial_ideas = gr.Button("πŸ€– Generate Initial ideas", scale=1)


        ## Initial ideas parts
        with gr.Row():
            initial_ideas_txt = gr.Textbox(placeholder="Initial ideas", label="Initial ideas", info="Feel free to improve them before next step", max_lines=500)
            initial_ideas_md = gr.Markdown(label="Initial ideas")
        # initial2final = gr.Button("Continue (generate final ideas)")
        with gr.Row(equal_height=True):
            gr.ClearButton(value="πŸ†‘ Clear", components=[initial_ideas_txt], scale=1)
            initial2final = gr.Button("πŸ”₯ Refine Ideas")

        ## Final ideas parts
        with gr.Row():
            final_ideas_txt = gr.Textbox(placeholder="Final ideas", label="Final ideas", info="", max_lines=500)
            final_ideas_md = gr.Markdown(label="Final ideas")

        # register callback
        background2brainstorm.click(backend.background2brainstorm_callback, inputs=[background], outputs=[brainstorm_txt])
        brainstorm2entities.click(backend.brainstorm2entities_callback, inputs=[background, brainstorm_txt], outputs=[entities])
        brainstorm_txt.change(lambda input: input, inputs=brainstorm_txt, outputs=brainstorm_md)
        initial_ideas_txt.change(lambda input: input, inputs=initial_ideas_txt, outputs=initial_ideas_md)
        final_ideas_txt.change(lambda input: input, inputs=final_ideas_txt, outputs=final_ideas_md)
        entities2literature.click(backend.entities2literature_callback, inputs=[background, entities], outputs=[retrieved_literature, literature_intact])
        literature2initial_ideas.click(backend.literature2initial_ideas_callback, inputs=[background, literature_intact], outputs=[initial_ideas_txt, final_ideas_txt])
        initial2final.click(backend.initial2final_callback, inputs=[initial_ideas_txt], outputs=[final_ideas_txt])
    return demo

if __name__ == "__main__":
    backend = Backend()
    demo = generate_page(backend)
    demo.launch(server_name="0.0.0.0", share=True)