File size: 5,375 Bytes
d09f6aa 6c77082 d09f6aa |
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 114 115 116 117 118 119 120 121 122 123 124 125 126 |
# Module for functions that build or manage UI sections/logic
import gradio as gr
import pandas as pd # Needed for use_selected_subjects type hinting
def update_mode_visibility(
mode: str,
current_subject: str,
current_description: str,
current_text: str,
current_url: str,
):
"""Updates visibility and values of UI elements based on generation mode."""
is_subject = mode == "subject"
is_path = mode == "path"
is_text = mode == "text"
is_web = mode == "web"
# Determine value persistence or clearing
subject_val = current_subject if is_subject else ""
description_val = current_description if is_path else ""
text_val = current_text if is_text else ""
url_val = current_url if is_web else ""
# Return a tuple of gr.update() calls in the order expected by app.py
return (
gr.update(visible=is_subject),
gr.update(visible=is_path),
gr.update(visible=is_text),
gr.update(visible=is_web),
gr.update(visible=is_path),
gr.update(visible=is_subject or is_text or is_web),
gr.update(value=subject_val),
gr.update(value=description_val),
gr.update(value=text_val),
gr.update(value=url_val),
gr.update(value=None),
gr.update(value=None),
gr.update(value=""),
gr.update(value=""),
gr.update(value="", visible=False),
gr.update(value=0, visible=False),
)
def use_selected_subjects(subjects_df: pd.DataFrame | None):
"""Updates UI to use subjects from learning path analysis."""
if subjects_df is None or subjects_df.empty:
gr.Warning("No subjects available to copy from Learning Path analysis.")
# Return updates that change nothing or clear relevant fields if necessary
# Returning updates for all potential outputs to match the original signature
return {
"generation_mode_radio": gr.update(),
"subject_mode_group": gr.update(),
"path_mode_group": gr.update(),
"text_mode_group": gr.update(),
"web_mode_group": gr.update(),
"path_results_group": gr.update(),
"cards_output_group": gr.update(),
"subject_textbox": gr.update(),
"description_textbox": gr.update(),
"source_text_textbox": gr.update(),
"url_textbox": gr.update(),
"topic_number_slider": gr.update(),
"preference_prompt_textbox": gr.update(),
"output_dataframe": gr.update(),
"subjects_dataframe": gr.update(),
"learning_order_markdown": gr.update(),
"projects_markdown": gr.update(),
"progress_html": gr.update(),
"total_cards_number": gr.update(),
}
try:
subjects = subjects_df["Subject"].tolist()
combined_subject = ", ".join(subjects)
suggested_topics = min(len(subjects) + 1, 20)
except KeyError:
gr.Error("Learning path analysis result is missing the 'Subject' column.")
# Return no-change updates
return {
"generation_mode_radio": gr.update(),
"subject_mode_group": gr.update(),
"path_mode_group": gr.update(),
"text_mode_group": gr.update(),
"web_mode_group": gr.update(),
"path_results_group": gr.update(),
"cards_output_group": gr.update(),
"subject_textbox": gr.update(),
"description_textbox": gr.update(),
"source_text_textbox": gr.update(),
"url_textbox": gr.update(),
"topic_number_slider": gr.update(),
"preference_prompt_textbox": gr.update(),
"output_dataframe": gr.update(),
"subjects_dataframe": gr.update(),
"learning_order_markdown": gr.update(),
"projects_markdown": gr.update(),
"progress_html": gr.update(),
"total_cards_number": gr.update(),
}
# Keys here are placeholders, matching the outputs list in app.py's .click handler
return {
"generation_mode_radio": "subject", # Switch mode to subject
"subject_mode_group": gr.update(visible=True),
"path_mode_group": gr.update(visible=False),
"text_mode_group": gr.update(visible=False),
"web_mode_group": gr.update(visible=False),
"path_results_group": gr.update(visible=False),
"cards_output_group": gr.update(visible=True),
"subject_textbox": combined_subject,
"description_textbox": "", # Clear path description
"source_text_textbox": "", # Clear text input
"url_textbox": "", # Clear URL input
"topic_number_slider": suggested_topics,
"preference_prompt_textbox": "Focus on connections between these subjects and their practical applications.", # Suggest preference
"output_dataframe": gr.update(value=None), # Clear previous card output if any
"subjects_dataframe": subjects_df, # Keep the dataframe in its output component
"learning_order_markdown": gr.update(), # Keep learning order visible for reference if desired
"projects_markdown": gr.update(), # Keep projects visible for reference if desired
"progress_html": gr.update(visible=False),
"total_cards_number": gr.update(visible=False),
}
|