borderless / ui /intake /panel.py
spagestic's picture
right panel now toggles between two full-height views
a9deb6d
Raw
History Blame Contribute Delete
3.39 kB
# ui/intake/panel.py
import gradio as gr
from ui.intake.choices import (
BUDGET_CHOICES,
EDUCATION_CHOICES,
EXPERIENCE_CHOICES,
FAMILY_CHOICES,
OCCUPATION_CHOICES,
RESIDENCE_STATUS_CHOICES,
TIMELINE_CHOICES,
country_choices,
)
from ui.intake.examples import demo_personas, persona_prompt
from ui.intake.prompts import build_profile_prompt
def _searchable_dropdown(
*,
label: str,
choices: list[str],
multiselect: bool = False,
info: str | None = None,
) -> gr.Dropdown:
return gr.Dropdown(
label=label,
choices=choices,
multiselect=multiselect,
filterable=True,
allow_custom_value=True,
value=None,
info=info,
)
def _create_research_prompt(
current_country,
residence_status,
education,
occupation,
experience,
budget,
family,
timeline,
goals,
):
return build_profile_prompt(
None,
current_country,
residence_status,
education,
occupation,
experience,
None,
budget,
family,
timeline,
goals,
)
def render_intake_panel(chat_input: gr.MultimodalTextbox) -> None:
countries = country_choices()
with gr.Column(elem_classes=["borderless-form-panel"]):
with gr.Row():
current_country = _searchable_dropdown(
label="Current country",
choices=countries,
)
residence_status = _searchable_dropdown(
label="Current residence status",
choices=RESIDENCE_STATUS_CHOICES,
)
with gr.Row():
education = _searchable_dropdown(
label="Education",
choices=EDUCATION_CHOICES,
)
occupation = _searchable_dropdown(
label="Occupation",
choices=OCCUPATION_CHOICES,
)
with gr.Row():
experience = _searchable_dropdown(
label="Experience",
choices=EXPERIENCE_CHOICES,
)
timeline = _searchable_dropdown(
label="Target timeline",
choices=TIMELINE_CHOICES,
)
with gr.Row():
budget = _searchable_dropdown(
label="Budget",
choices=BUDGET_CHOICES,
)
family = _searchable_dropdown(
label="Family / dependents",
choices=FAMILY_CHOICES,
)
goals = gr.Textbox(
label="Goals in everyday language",
lines=3,
placeholder=(
"e.g. I want a realistic skilled-worker route, lower risk, "
"and a path to permanent residence."
),
)
gr.Button("Submit", variant="primary").click(
fn=_create_research_prompt,
inputs=[
current_country,
residence_status,
education,
occupation,
experience,
budget,
family,
timeline,
goals,
],
outputs=[chat_input],
queue=False,
)