ai_recruiter / ui /chart_generation.py
n-ou's picture
:3
8d3a7b6
from shiny import ui
# ✅ Define the chart tab panel ONCE
plot_ui = ui.nav_panel(
"Chart Generation", # tab label
ui.h2("Visualise Trends Between Chosen Candidate Variables"),
ui.layout_columns(
ui.card(
ui.input_select("chart_job_id", "Select Job ID", choices=[], selected=None),
ui.input_select("chart_x", "X-axis variable", choices=[], selected=None),
ui.input_select("chart_y", "Y-axis variable", choices=[], selected=None),
ui.input_radio_buttons('chart_type', 'Chart Type', choices=['scatter', 'bar', 'line', 'histogram'], selected='scatter'),
ui.div(
ui.output_ui("generate_display_plot"),
id="plot_wrapper",
class_="plot-wrapper",
style="padding-top: 1rem; border: 1px solid #ddd; background-color: #fff; width: 100%; overflow-x: auto;"
),
ui.input_action_button("generate_plot", "Generate Chart & Explanation"),
),
ui.card(
ui.h4("LLM Explanation"),
ui.output_ui("llm_explain_plot")
),
ui.card(
ui.h4("Ask a Follow-up Question"),
ui.input_text_area("chart_chat_input", "Ask anything:", rows=2, width="100%"),
ui.input_action_button("chart_chat_send", "Send"),
ui.h4("Gemini Response"),
ui.div(
ui.output_ui("chat_followup"),
style="""
min-height: 300px;
max-height: 700px;
overflow-y: auto;
resize: vertical;
padding: 1rem;
font-size: 1rem;
border: 1px solid #ccc;
background-color: #fefefe;
box-shadow: 0 0 4px rgba(0,0,0,0.1);
"""
),
class_="response-box",
style="""
min-height: 600px;
width: 100%;
"""
),
col_widths=(5, 5, 5)
)
)