Ling / ui /intent_ui.py
Nam Fam
update files
ea99abb
import gradio as gr
from tasks.intent_detection import intent_detection
DEFAULT_MODEL = "gemini-2.0-flash"
INTENT_MODELS = [DEFAULT_MODEL]
DEFAULT_INTENTS = ["book_flight", "order_food", "check_weather", "greeting", "goodbye"]
def intent_ui():
with gr.Row():
# Left column: input/config
with gr.Column(scale=1):
input_text = gr.Textbox(
label="Input Text",
lines=6,
placeholder="Enter text to detect intent...",
elem_id="intent-input-text"
)
gr.Examples(
examples=[
["I want to book a flight to Paris next week."],
["Can you tell me what the weather is like in Hanoi?"]
],
inputs=[input_text],
label="Examples"
)
use_custom_intents = gr.Checkbox(
label="Use custom intents",
value=True,
elem_id="intent-use-custom-intents"
)
intents_area = gr.TextArea(
label="Candidate Intents (one per line)",
value='\n'.join(DEFAULT_INTENTS),
lines=5,
visible=True,
elem_id="intent-candidate-intents"
)
def toggle_intent_area(use_custom):
return gr.update(visible=use_custom)
use_custom_intents.change(toggle_intent_area, inputs=use_custom_intents, outputs=intents_area)
detect_btn = gr.Button("Detect Intent", variant="primary")
model_dropdown = gr.Dropdown(
INTENT_MODELS,
value=DEFAULT_MODEL,
label="Model",
interactive=True,
elem_id="intent-model-dropdown"
)
custom_instructions = gr.Textbox(
label="Custom Instructions (optional)",
lines=2,
placeholder="Add any custom instructions for the model...",
elem_id="intent-custom-instructions"
)
# Right column: output/result
with gr.Column(scale=1):
output_box = gr.Textbox(
label="Detected Intent",
lines=1,
interactive=False,
elem_id="intent-output"
)
# gr.Markdown("""
# **Instructions:**
# - Enter your text and (optionally) custom intent labels.
# - Use the checkbox to switch between custom intent list or LLM auto-detect mode.
# - Add any custom instructions for the LLM if needed.
# """)
# Logic for button
def run_intent_detection(text, model, use_custom, intents, custom_instructions):
candidate_intents = [s.strip() for s in intents.split("\n") if s.strip()] if use_custom else None
return intent_detection(
text=text,
model=model,
candidate_intents=candidate_intents,
custom_instructions=custom_instructions,
use_llm=True
)
detect_btn.click(
run_intent_detection,
inputs=[input_text, model_dropdown, use_custom_intents, intents_area, custom_instructions],
outputs=output_box
)