| |
| """ |
| Main integration script to add Process Flow Visualization to Research Assistant |
| This script modifies the existing app.py to include comprehensive process flow visualization |
| """ |
|
|
| import gradio as gr |
| import logging |
| import uuid |
| import time |
| from typing import Dict, Any, List, Tuple |
| from process_flow_visualizer import ( |
| create_process_flow_tab, |
| update_process_flow_visualization, |
| clear_flow_history, |
| export_flow_data |
| ) |
|
|
| logger = logging.getLogger(__name__) |
|
|
| def modify_app_py(): |
| """ |
| This function contains the modifications needed for app.py |
| Copy these modifications into your existing app.py file |
| """ |
| |
| |
| import_statement = """ |
| # Add this import at the top of app.py |
| from process_flow_visualizer import ( |
| create_process_flow_tab, |
| update_process_flow_visualization, |
| clear_flow_history, |
| export_flow_data |
| ) |
| """ |
| |
| |
| interface_modification = """ |
| # MODIFY the create_mobile_optimized_interface function in app.py |
| # Add this after the existing tabs (around line 233) |
| |
| # NEW: Process Flow Tab |
| process_flow_tab = create_process_flow_tab(interface_components) |
| interface_components['process_flow_tab'] = process_flow_tab |
| """ |
| |
| |
| navigation_modification = """ |
| # MODIFY the mobile navigation section (around line 235) |
| # Add the Process Flow button |
| |
| with gr.Row(visible=False, elem_id="mobile_nav") as mobile_navigation: |
| chat_nav_btn = gr.Button("π¬ Chat", variant="secondary", size="sm", min_width=0) |
| details_nav_btn = gr.Button("π Details", variant="secondary", size="sm", min_width=0) |
| flow_nav_btn = gr.Button("π Flow", variant="secondary", size="sm", min_width=0) # NEW |
| settings_nav_btn = gr.Button("βοΈ Settings", variant="secondary", size="sm", min_width=0) |
| |
| interface_components['flow_nav_btn'] = flow_nav_btn # NEW |
| """ |
| |
| |
| settings_modification = """ |
| # ADD this to the settings panel (around line 264) |
| |
| show_process_flow = gr.Checkbox( |
| label="Show process flow visualization", |
| value=True, |
| info="Display detailed LLM inference and agent execution flow" |
| ) |
| interface_components['show_process_flow'] = show_process_flow |
| """ |
| |
| |
| enhanced_handler = """ |
| # REPLACE the existing chat_handler_fn with this enhanced version |
| |
| def enhanced_chat_handler_fn(message, history, session_id=None, show_reasoning=True, show_agent_trace=False, show_process_flow=True): |
| \"\"\" |
| Enhanced chat handler with process flow visualization |
| \"\"\" |
| start_time = time.time() |
| |
| try: |
| # Use existing process_message function |
| result = process_message(message, history, session_id) |
| updated_history, empty_string, reasoning_data, performance_data, context_data, session_id = result |
| |
| # Calculate processing time |
| processing_time = time.time() - start_time |
| |
| # Prepare process flow data if enabled |
| flow_updates = {} |
| if show_process_flow: |
| # Extract agent results from the processing |
| intent_result = { |
| "primary_intent": "information_request", # Would be extracted from actual processing |
| "confidence_scores": {"information_request": 0.8}, |
| "secondary_intents": [], |
| "reasoning_chain": ["Step 1: Analyze user input", "Step 2: Determine intent"], |
| "context_tags": ["general"], |
| "processing_time": 0.15, |
| "agent_id": "INTENT_REC_001" |
| } |
| |
| synthesis_result = { |
| "final_response": updated_history[-1]["content"] if updated_history else "", |
| "draft_response": "", |
| "source_references": ["INTENT_REC_001"], |
| "coherence_score": 0.85, |
| "synthesis_method": "llm_enhanced", |
| "intent_alignment": {"intent_detected": "information_request", "alignment_score": 0.8}, |
| "processing_time": processing_time - 0.15, |
| "agent_id": "RESP_SYNTH_001" |
| } |
| |
| safety_result = { |
| "original_response": updated_history[-1]["content"] if updated_history else "", |
| "safety_checked_response": updated_history[-1]["content"] if updated_history else "", |
| "warnings": [], |
| "safety_analysis": { |
| "toxicity_score": 0.1, |
| "bias_indicators": [], |
| "privacy_concerns": [], |
| "overall_safety_score": 0.9, |
| "confidence_scores": {"safety": 0.9} |
| }, |
| "blocked": False, |
| "processing_time": 0.1, |
| "agent_id": "SAFETY_BIAS_001" |
| } |
| |
| # Update process flow visualization |
| flow_updates = update_process_flow_visualization( |
| user_input=message, |
| intent_result=intent_result, |
| synthesis_result=synthesis_result, |
| safety_result=safety_result, |
| final_response=updated_history[-1]["content"] if updated_history else "", |
| session_id=session_id, |
| processing_time=processing_time |
| ) |
| |
| # Return all updates including process flow data |
| return ( |
| updated_history, # chatbot |
| empty_string, # message_input |
| reasoning_data, # reasoning_display |
| performance_data, # performance_display |
| context_data, # context_display |
| session_id, # session_info |
| flow_updates.get("flow_display", ""), # flow_display |
| flow_updates.get("flow_stats", {}), # flow_stats |
| flow_updates.get("performance_metrics", {}), # performance_metrics |
| flow_updates.get("intent_details", {}), # intent_details |
| flow_updates.get("synthesis_details", {}), # synthesis_details |
| flow_updates.get("safety_details", {}) # safety_details |
| ) |
| |
| except Exception as e: |
| logger.error(f"Error in enhanced chat handler: {e}") |
| # Return error state |
| error_history = list(history) if history else [] |
| error_history.append({"role": "user", "content": message}) |
| error_history.append({"role": "assistant", "content": f"Error: {str(e)}"}) |
| |
| return ( |
| error_history, # chatbot |
| "", # message_input |
| {"error": str(e)}, # reasoning_display |
| {"error": str(e)}, # performance_display |
| {"error": str(e)}, # context_display |
| session_id, # session_info |
| "", # flow_display |
| {"error": str(e)}, # flow_stats |
| {"error": str(e)}, # performance_metrics |
| {}, # intent_details |
| {}, # synthesis_details |
| {} # safety_details |
| ) |
| |
| # Update the chat_handler_fn assignment |
| chat_handler_fn = enhanced_chat_handler_fn |
| """ |
| |
| |
| click_handler_modification = """ |
| # MODIFY the send button click handler (around line 303) |
| # Update the outputs to include process flow components |
| |
| interface_components['send_btn'].click( |
| fn=chat_handler_fn, |
| inputs=[ |
| interface_components['message_input'], |
| interface_components['chatbot'], |
| interface_components['session_info'], |
| interface_components.get('show_reasoning', gr.Checkbox(value=True)), |
| interface_components.get('show_agent_trace', gr.Checkbox(value=False)), |
| interface_components.get('show_process_flow', gr.Checkbox(value=True)) |
| ], |
| outputs=[ |
| interface_components['chatbot'], |
| interface_components['message_input'], |
| interface_components.get('reasoning_display', gr.JSON()), |
| interface_components.get('performance_display', gr.JSON()), |
| interface_components.get('context_display', gr.JSON()), |
| interface_components['session_info'], |
| interface_components.get('flow_display', gr.HTML()), |
| interface_components.get('flow_stats', gr.JSON()), |
| interface_components.get('performance_metrics', gr.JSON()), |
| interface_components.get('intent_details', gr.JSON()), |
| interface_components.get('synthesis_details', gr.JSON()), |
| interface_components.get('safety_details', gr.JSON()) |
| ] |
| ) |
| """ |
| |
| |
| event_handlers = """ |
| # ADD these event handlers after the existing ones (around line 340) |
| |
| # Process Flow event handlers |
| if 'clear_flow_btn' in interface_components: |
| interface_components['clear_flow_btn'].click( |
| fn=clear_flow_history, |
| outputs=[ |
| interface_components.get('flow_display', gr.HTML()), |
| interface_components.get('flow_stats', gr.JSON()), |
| interface_components.get('performance_metrics', gr.JSON()), |
| interface_components.get('intent_details', gr.JSON()), |
| interface_components.get('synthesis_details', gr.JSON()), |
| interface_components.get('safety_details', gr.JSON()) |
| ] |
| ) |
| |
| if 'export_flow_btn' in interface_components: |
| interface_components['export_flow_btn'].click( |
| fn=export_flow_data, |
| outputs=[gr.File(label="Download Flow Data")] |
| ) |
| |
| if 'share_flow_btn' in interface_components: |
| interface_components['share_flow_btn'].click( |
| fn=lambda: gr.Info("Flow sharing feature coming soon!"), |
| outputs=[] |
| ) |
| """ |
| |
| return { |
| "import_statement": import_statement, |
| "interface_modification": interface_modification, |
| "navigation_modification": navigation_modification, |
| "settings_modification": settings_modification, |
| "enhanced_handler": enhanced_handler, |
| "click_handler_modification": click_handler_modification, |
| "event_handlers": event_handlers |
| } |
|
|
| def create_integration_guide(): |
| """ |
| Create a step-by-step integration guide |
| """ |
| modifications = modify_app_py() |
| |
| guide = f""" |
| # Process Flow Visualization Integration Guide |
| |
| ## Overview |
| This guide will help you integrate the Process Flow Visualization into your Research Assistant UI. |
| |
| ## Files Created |
| 1. `process_flow_visualizer.py` - Main visualization component |
| 2. `app_integration.py` - Integration utilities |
| 3. `integrate_process_flow.py` - This integration guide |
| |
| ## Step-by-Step Integration |
| |
| ### Step 1: Add Import Statement |
| Add this import at the top of your `app.py` file: |
| |
| ```python |
| {modifications['import_statement']} |
| ``` |
| |
| ### Step 2: Modify Interface Creation |
| In your `create_mobile_optimized_interface()` function, add the Process Flow tab after the existing tabs: |
| |
| ```python |
| {modifications['interface_modification']} |
| ``` |
| |
| ### Step 3: Update Mobile Navigation |
| Modify the mobile navigation section to include the Process Flow button: |
| |
| ```python |
| {modifications['navigation_modification']} |
| ``` |
| |
| ### Step 4: Add Process Flow Settings |
| Add the process flow checkbox to your settings panel: |
| |
| ```python |
| {modifications['settings_modification']} |
| ``` |
| |
| ### Step 5: Replace Chat Handler |
| Replace your existing `chat_handler_fn` with the enhanced version: |
| |
| ```python |
| {modifications['enhanced_handler']} |
| ``` |
| |
| ### Step 6: Update Send Button Handler |
| Modify the send button click handler to include process flow outputs: |
| |
| ```python |
| {modifications['click_handler_modification']} |
| ``` |
| |
| ### Step 7: Add Event Handlers |
| Add the process flow event handlers after your existing ones: |
| |
| ```python |
| {modifications['event_handlers']} |
| ``` |
| |
| ## Features Added |
| |
| ### π― Process Flow Tab |
| - **Visual Flow Display**: Shows step-by-step LLM inference process |
| - **Real-time Updates**: Updates with each user interaction |
| - **Mobile Optimized**: Responsive design for all devices |
| |
| ### π Flow Statistics |
| - **Performance Metrics**: Processing time, confidence scores |
| - **Intent Distribution**: Shows intent classification patterns |
| - **Agent Performance**: Individual agent execution metrics |
| |
| ### π Detailed Analysis |
| - **Intent Recognition Details**: Complete intent analysis data |
| - **Response Synthesis Details**: Synthesis method and quality metrics |
| - **Safety Check Details**: Safety analysis and warnings |
| |
| ### π₯ Export & Share |
| - **Export Flow Data**: Download complete flow history as JSON |
| - **Share Flow**: Share flow visualizations (coming soon) |
| |
| ## UX Enhancements |
| |
| ### π¨ Visual Design |
| - **Gradient Backgrounds**: Modern, professional appearance |
| - **Smooth Animations**: Hover effects and transitions |
| - **Color-coded Steps**: Different colors for different process steps |
| - **Progress Indicators**: Visual confidence and safety score bars |
| |
| ### π± Mobile Optimization |
| - **Responsive Grid**: Adapts to different screen sizes |
| - **Touch-friendly**: Optimized for mobile interactions |
| - **Collapsible Sections**: Accordion-style organization |
| - **Compact Mode**: Option for smaller screens |
| |
| ### β‘ Performance |
| - **Efficient Updates**: Only updates changed components |
| - **Caching**: Stores flow history for analysis |
| - **Error Handling**: Graceful degradation on errors |
| - **Loading States**: Visual feedback during processing |
| |
| ## Testing |
| |
| ### Test the Integration |
| 1. Start your Research Assistant |
| 2. Navigate to the "π Process Flow" tab |
| 3. Send a message in the chat |
| 4. Watch the process flow update in real-time |
| 5. Check the statistics and detailed analysis |
| |
| ### Verify Features |
| - [ ] Process Flow tab appears |
| - [ ] Flow updates with each message |
| - [ ] Statistics show correct data |
| - [ ] Export functionality works |
| - [ ] Mobile responsive design |
| - [ ] Settings control visibility |
| |
| ## Troubleshooting |
| |
| ### Common Issues |
| 1. **Import Errors**: Ensure all files are in the same directory |
| 2. **Missing Components**: Check that all interface components are created |
| 3. **Handler Errors**: Verify the enhanced handler is properly assigned |
| 4. **Display Issues**: Check CSS styling and responsive design |
| |
| ### Debug Mode |
| Enable debug logging to troubleshoot issues: |
| ```python |
| import logging |
| logging.basicConfig(level=logging.DEBUG) |
| ``` |
| |
| ## Support |
| If you encounter issues, check the logs and ensure all modifications are applied correctly. |
| The integration maintains backward compatibility with your existing functionality. |
| """ |
| |
| return guide |
|
|
| def main(): |
| """ |
| Main function to generate integration files |
| """ |
| print("π Process Flow Visualization Integration") |
| print("=" * 50) |
| |
| |
| guide = create_integration_guide() |
| |
| |
| with open("INTEGRATION_GUIDE.md", "w", encoding="utf-8") as f: |
| f.write(guide) |
| |
| print("β
Integration files created:") |
| print(" - process_flow_visualizer.py") |
| print(" - app_integration.py") |
| print(" - integrate_process_flow.py") |
| print(" - INTEGRATION_GUIDE.md") |
| print() |
| print("π Next steps:") |
| print(" 1. Follow the INTEGRATION_GUIDE.md") |
| print(" 2. Modify your app.py file") |
| print(" 3. Test the integration") |
| print(" 4. Enjoy the enhanced UX!") |
| print() |
| print("π― Features added:") |
| print(" - Real-time process flow visualization") |
| print(" - Mobile-optimized responsive design") |
| print(" - Performance metrics and statistics") |
| print(" - Export and sharing capabilities") |
| print(" - Enhanced user experience") |
|
|
| if __name__ == "__main__": |
| main() |
|
|