import gradio as gr from gradio_modal import Modal from climateqa.constants import POSSIBLE_REPORTS from typing import TypedDict class ConfigPanel(TypedDict): config_open: gr.State config_modal: Modal dropdown_sources: gr.CheckboxGroup dropdown_reports: gr.Dropdown dropdown_external_sources: gr.CheckboxGroup search_only: gr.Checkbox dropdown_audience: gr.Dropdown after: gr.Slider output_query: gr.Textbox output_language: gr.Textbox def create_config_modal(): config_open = gr.State(value=True) with Modal(visible=False, elem_id="modal-config") as config_modal: gr.Markdown("Reminders: You can talk in any language, ClimateQ&A is multi-lingual!") dropdown_sources = gr.CheckboxGroup( choices=["IPCC", "IPBES", "IPOS"], label="Select source (by default search in all sources)", value=["IPCC"], interactive=True ) dropdown_reports = gr.Dropdown( choices=POSSIBLE_REPORTS, label="Or select specific reports", multiselect=True, value=None, interactive=True ) dropdown_external_sources = gr.CheckboxGroup( choices=["Figures (IPCC/IPBES)", "Papers (OpenAlex)", "Graphs (OurWorldInData)","POC region"], label="Select database to search for relevant content", value=["Figures (IPCC/IPBES)","POC region"], interactive=True ) search_only = gr.Checkbox( label="Search only for recommended content without chating", value=False, interactive=True, elem_id="checkbox-chat" ) dropdown_audience = gr.Dropdown( choices=["Children", "General public", "Experts"], label="Select audience", value="Experts", interactive=True ) after = gr.Slider( minimum=1950, maximum=2023, step=1, value=1960, label="Publication date", show_label=True, interactive=True, elem_id="date-papers", visible=False ) output_query = gr.Textbox( label="Query used for retrieval", show_label=True, elem_id="reformulated-query", lines=2, interactive=False, visible=False ) output_language = gr.Textbox( label="Language", show_label=True, elem_id="language", lines=1, interactive=False, visible=False ) dropdown_external_sources.change( lambda x: gr.update(visible="Papers (OpenAlex)" in x), inputs=[dropdown_external_sources], outputs=[after] ) close_config_modal_button = gr.Button("Validate and Close", elem_id="close-config-modal") # return ConfigPanel( # config_open=config_open, # config_modal=config_modal, # dropdown_sources=dropdown_sources, # dropdown_reports=dropdown_reports, # dropdown_external_sources=dropdown_external_sources, # search_only=search_only, # dropdown_audience=dropdown_audience, # after=after, # output_query=output_query, # output_language=output_language # ) return { "config_open" : config_open, "config_modal": config_modal, "dropdown_sources": dropdown_sources, "dropdown_reports": dropdown_reports, "dropdown_external_sources": dropdown_external_sources, "search_only": search_only, "dropdown_audience": dropdown_audience, "after": after, "output_query": output_query, "output_language": output_language, "close_config_modal_button": close_config_modal_button }