# simplified_gradio_app.py """ Simplified Gradio Interface based on customer feedback from Or_4.txt Key changes: 1. Provider Summary is the final exchange in Conversation Verification tab 2. Streamlined interface focusing on essential features 3. CSV export for verification results Requirements: Customer feedback Or_4.txt """ import os import sys # Ensure project root is in Python path project_root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) if project_root not in sys.path: sys.path.insert(0, project_root) from dotenv import load_dotenv # Load environment variables load_dotenv() import gradio as gr # Import modularized components from src.interface.session_manager import SimplifiedSessionData from src.interface import stats_handlers from src.interface import simplified_chat_handlers # Use simplified handlers from src.interface import verification_handlers from src.interface import prompt_handlers from src.interface import model_handlers from src.interface import profile_handlers from src.interface.simplified_help_content import SIMPLIFIED_HELP_CONTENT try: from app_config import GRADIO_CONFIG except ImportError: GRADIO_CONFIG = {"theme": "soft", "show_api": False} def create_simplified_interface(): """ Create simplified Gradio interface based on customer feedback. Focus on: - Chat interface - Conversation Verification with Provider Summary as final step - Simplified data export """ debug_mode = os.getenv("LOG_PROMPTS", "false").lower() == "true" # Theme setup theme_name = GRADIO_CONFIG.get("theme", "soft") if theme_name.lower() == "soft": theme = gr.themes.Soft() else: theme = gr.themes.Default() demo = gr.Blocks( title="๐ฅ Medical Assistant - Simplified", analytics_enabled=False ) demo.theme = theme with demo: # Session state session_data = gr.State(value=None) # Header gr.Markdown("# ๐ฅ Medical Assistant with Spiritual Support") gr.Markdown("Simplified interface for conversation verification and testing") if debug_mode: gr.Markdown("โ ๏ธ **DEBUG MODE:** Prompts and responses are logged") # Session info session_info = gr.Markdown("๐ **Initializing session...**") # Initialize session def initialize_session(): """Initialize new user session.""" new_session = SimplifiedSessionData() session_info_text = f""" โ **Session Ready** ๐ Session: `{new_session.session_id[:8]}...` ๐ Started: {new_session.created_at[:19]} """ return new_session, session_info_text # Main interface tabs main_tabs = gr.Tabs(elem_id="main_tabs") with main_tabs: # Chat tab with gr.TabItem("๐ฌ Chat", id="chat"): with gr.Row(): with gr.Column(scale=2): chatbot = gr.Chatbot( label="๐ฌ Conversation", height=450 ) with gr.Row(): msg = gr.Textbox( label="Your message", placeholder="Type your health question...", scale=4 ) send_btn = gr.Button("๐ค Send", scale=1, variant="primary") with gr.Row(): clear_btn = gr.Button("๐๏ธ Clear Chat", scale=1) # Quick examples gr.Markdown("### โก Quick Start:") with gr.Row(): example_medical = gr.Button("๐ข I am fine", size="sm") example_wellness = gr.Button("๐ก I'm feeling stressed", size="sm") example_help = gr.Button("๐ด Emotional crisis", size="sm") with gr.Column(scale=1): status_box = gr.Markdown( value="๐ Loading...", label="๐ Status" ) refresh_btn = gr.Button("๐ Check Status", size="sm") # Conversation statistics gr.Markdown("### ๐ Conversation Stats") conversation_stats = gr.Markdown( value="No conversation yet", label="Statistics" ) # Conversation Verification tab - MAIN FOCUS with gr.TabItem("๐งพ Conversation Verification", id="conversation_verification"): gr.Markdown("## ๐งพ Conversation Verification") gr.Markdown( "Review each exchange from the chat conversation. " "**The Provider Summary will be shown as the final step** for your review and feedback." ) conv_verify_state = gr.State(value=None) conv_verify_index = gr.State(value=0) conv_verify_records = gr.State(value=[]) with gr.Row(): generate_conv_verification_btn = gr.Button( "๐ Generate Verification from Chat", variant="primary" ) conv_verify_status = gr.Markdown(value="", visible=True) conv_verify_exchange = gr.HTML(value="", label="Current Exchange") with gr.Row(): conv_correct_btn = gr.Button("โ Correct", variant="primary") conv_incorrect_btn = gr.Button("โ Incorrect") conv_prev_btn = gr.Button("โฌ ๏ธ Previous") conv_next_btn = gr.Button("Next โก๏ธ") # Shown only when marking Incorrect with gr.Row(visible=False) as conv_incorrect_comment_row: with gr.Column(scale=3): gr.Markdown("### Select Correct Classification:") conv_correct_classification = gr.Radio( choices=[ "๐ข Should be GREEN - No distress", "๐ก Should be YELLOW - Needs clarification", "๐ด Should be RED - Spiritual distress" ], label="Correct Classification", interactive=True ) conv_incorrect_comment = gr.Textbox( label="Comment (why incorrect / what to fix)", placeholder="Add your feedback here...", lines=3, ) with gr.Column(scale=1): conv_save_comment_btn = gr.Button("๐พ Save comment", variant="secondary") with gr.Row(): with gr.Column(scale=1): conv_position = gr.Markdown(value="") with gr.Column(scale=1): conv_stats = gr.HTML(value="") # Manual download options (backup) gr.Markdown("### ๐ฅ Manual Export") with gr.Row(): conv_verify_download_csv_btn = gr.DownloadButton("๐ Download CSV", variant="secondary") # Model Selection tab with gr.TabItem("โ๏ธ Model Settings", id="model_settings"): gr.Markdown("## โ๏ธ AI Model Configuration") gr.Markdown("Select which AI models to use for different tasks. Changes apply to your current session.") with gr.Row(): with gr.Column(): gr.Markdown("### ๐ Spiritual Monitor (Classifier)") spiritual_model = gr.Dropdown( choices=[ "gemini-2.5-flash", "gemini-2.0-flash", "gemini-3-flash-preview", "claude-sonnet-4-5-20250929", "claude-sonnet-4-20250514", "claude-3-7-sonnet-20250219" ], value="gemini-2.5-flash", label="Spiritual Distress Analyzer", interactive=True ) gr.Markdown("### ๐ก Soft Spiritual Triage") soft_spiritual_triage_model = gr.Dropdown( choices=[ "claude-sonnet-4-5-20250929", "claude-sonnet-4-20250514", "claude-3-7-sonnet-20250219", "gemini-2.5-flash", "gemini-2.0-flash", "gemini-3-flash-preview" ], value="claude-sonnet-4-5-20250929", label="Soft Spiritual Triage", interactive=True ) with gr.Column(): gr.Markdown("### ๐ Triage Response Evaluator") triage_evaluate_model = gr.Dropdown( choices=[ "gemini-2.5-flash", "gemini-2.0-flash", "gemini-3-flash-preview", "claude-sonnet-4-5-20250929", "claude-sonnet-4-20250514", "claude-3-7-sonnet-20250219" ], value="gemini-2.5-flash", label="Triage Response Evaluator", interactive=True ) gr.Markdown("### ๐ฅ Medical Assistant") medical_model = gr.Dropdown( choices=[ "claude-sonnet-4-5-20250929", "claude-sonnet-4-20250514", "claude-3-7-sonnet-20250219", "gemini-2.5-flash", "gemini-2.0-flash", "gemini-3-flash-preview" ], value="claude-sonnet-4-5-20250929", label="Medical Assistant", interactive=True ) with gr.Column(): gr.Markdown("### ๐ฉบ Soft Medical Triage") soft_triage_model = gr.Dropdown( choices=[ "claude-sonnet-4-5-20250929", "claude-sonnet-4-20250514", "claude-3-7-sonnet-20250219", "gemini-2.5-flash", "gemini-2.0-flash", "gemini-3-flash-preview" ], value="claude-sonnet-4-5-20250929", label="Soft Medical Triage", interactive=True ) gr.Markdown("### ๐ฌ Medical Brain Summary Generator") spiritual_care_message_model = gr.Dropdown( choices=[ "claude-sonnet-4-5-20250929", "claude-sonnet-4-20250514", "claude-3-7-sonnet-20250219", "gemini-2.5-flash", "gemini-2.0-flash", "gemini-3-flash-preview" ], value="claude-sonnet-4-5-20250929", label="Medical Brain Summary Generator (uses Spiritual Care Message prompt)", interactive=True ) with gr.Row(): apply_models_btn = gr.Button("โ Apply Model Settings", variant="primary", scale=2) reset_models_btn = gr.Button("๐ Reset to Defaults", scale=1) model_status = gr.HTML(value="", visible=True) # Edit Prompts tab with gr.TabItem("๐ง Edit Prompts", id="edit_prompts"): gr.Markdown("## ๐ง Customize AI Prompts") gr.Markdown("โ ๏ธ **Note:** Changes apply only to your current session.") # Prompt selector with gr.Row(): prompt_selector = gr.Dropdown( choices=[ "๐ Spiritual Monitor (Classifier)", "๐ก Soft Spiritual Triage", "๐ Triage Response Evaluator", "๐ฅ Medical Assistant", "๐ฉบ Soft Medical Triage", "๐ฌ Spiritual Care Message" ], value="๐ Spiritual Monitor (Classifier)", label="Select Prompt to Edit", interactive=True ) with gr.Row(): with gr.Column(scale=3): # Prompt editor prompt_editor = gr.Code( label="System Prompt", value="", language="markdown", lines=25, interactive=True ) with gr.Row(): load_prompt_btn = gr.Button("๐ฅ Load Prompt", scale=1) apply_prompt_btn = gr.Button("โ Apply Changes", variant="primary", scale=2) reset_prompt_btn = gr.Button("๐ Reset to Default", variant="secondary", scale=1) with gr.Row(): promote_prompt_btn = gr.Button("๐ค Promote to File", variant="stop", scale=1) validate_prompt_btn = gr.Button("๐ Validate", variant="secondary", scale=1) prompt_status = gr.HTML( value="", visible=True, elem_classes=["prompt-status-container"] ) with gr.Column(scale=1): gr.Markdown("### ๐ Prompt Info") prompt_info_display = gr.HTML(value="""
Select a prompt to edit
Available prompts:
Tips: