SciPIP / src /pages /app_gradio_backup.py
lihuigu
init commit
e17c9f2
raw
history blame
4.93 kB
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)