import gradio as gr from gradio_modal import Modal from climateqa.constants import POSSIBLE_REPORTS from typing import TypedDict from dataclasses import dataclass @dataclass class ConfigPanel: 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 close_config_modal_button: gr.Button 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)"], label="Select database to search for relevant content", value=["Figures (IPCC/IPBES)"], 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, close_config_modal_button=close_config_modal_button )