ArkenB's picture
Create app.py
497a0a0 verified
# 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()