Spaces:
Paused
Paused
| # src/app.py | |
| import gradio as gr | |
| import os | |
| from src.langgraph_workflow import create_workflow, WorkflowState # Ensure WorkflowState is imported if needed | |
| langgraph_app = create_workflow() | |
| def process_feedback_file(uploaded_file): | |
| if uploaded_file is None: | |
| return "Please upload a file.", None, "No file uploaded." | |
| file_path = uploaded_file.name | |
| print(f"Processing file: {file_path}") | |
| # Initialize state (match the new WorkflowState definition) | |
| initial_state = { | |
| "file_path": file_path, | |
| "raw_df": None, "processed_df": None, "feedback_distribution": {}, | |
| "instructor_rating_distribution": {}, "average_scores": {}, "correlations": {}, | |
| "charts_output_dir": "", "chart_filepaths": {}, "analysis_text": "", | |
| "report_path": "", "error_message": None | |
| } | |
| try: | |
| final_state = langgraph_app.invoke(initial_state) | |
| if final_state.get("error_message"): | |
| error_msg = f"Workflow error: {final_state['error_message']}" | |
| print(error_msg) | |
| # Return None for HTML content if error occurs | |
| return None, None, error_msg | |
| final_report_path = final_state.get("report_path") | |
| if final_report_path and os.path.exists(final_report_path): | |
| status_message = f"Report generated successfully! Stored at: {final_report_path}" | |
| print(status_message) | |
| # Read HTML content for preview (might be large) | |
| # Alternative: Use an iframe in gr.HTML pointing to the file if possible & allowed | |
| try: | |
| with open(final_report_path, 'r', encoding='utf-8') as f: | |
| report_html_content = f.read() | |
| except Exception as read_e: | |
| report_html_content = f"<p>Report generated at {final_report_path}, but failed to read preview: {read_e}</p>" | |
| status_message += " (Preview load error)" | |
| # Return HTML content for preview, file path for download, and status | |
| return report_html_content, final_report_path, status_message | |
| else: | |
| no_report_msg = "Workflow completed, but the final HTML report path is missing or file doesn't exist." | |
| print(no_report_msg) | |
| return None, None, no_report_msg # Ensure None is returned for HTML content | |
| except Exception as e: | |
| err_msg = f"An unexpected error occurred in Gradio app: {str(e)}" | |
| print(err_msg) | |
| import traceback | |
| traceback.print_exc() | |
| return None, None, "Unexpected application error." # Return None for HTML | |
| # Define Gradio Interface | |
| with gr.Blocks(theme=gr.themes.Soft()) as demo: | |
| gr.Markdown("# Employee Training Evaluation System ") | |
| gr.Markdown("Upload your CSV/Excel file (wide format). Generates an HTML report with analysis text and linked chart images (saved in 'outputs').") | |
| with gr.Row(): | |
| file_input = gr.File(label="Upload Feedback File (.csv, .xlsx)", file_types=[".csv", ".xlsx"]) | |
| submit_button = gr.Button("Generate Report", variant="primary") | |
| gr.Markdown("## Report Output") | |
| status_output = gr.Textbox(label="Processing Status", interactive=False) | |
| # Display HTML content directly | |
| html_output = gr.HTML(label="Generated Report Preview") | |
| # Provide download link to the generated HTML file | |
| download_output = gr.File(label="Download Full Report (.html)", interactive=False) | |
| submit_button.click( | |
| fn=process_feedback_file, | |
| inputs=[file_input], | |
| outputs=[html_output, download_output, status_output] # Match return order | |
| ) | |
| gr.Markdown("---") | |
| gr.Markdown("### Instructions :after reprt be generated you can download it:") | |
| if __name__ == "__main__": | |
| # Ensure necessary directories exist | |
| if not os.path.exists("outputs"): os.makedirs("outputs") | |
| demo.launch() |