# app.py import gradio as gr from ai_model import generate_daily_checklist from sf_mock import log_reflection, get_engagement_score from utils import plot_engagement_graph, generate_pdf_summary # UI Logic def coach_interface(role, project_id, milestones, reflection): checklist, tips = generate_daily_checklist(role, project_id, milestones, reflection) log_reflection(role, project_id, reflection) score = get_engagement_score(role, project_id) graph_path = plot_engagement_graph(score) return checklist, tips, score, graph_path def download_summary(role, project_id): return generate_pdf_summary(role, project_id) with gr.Blocks() as demo: gr.Markdown("# AI Coach for Site Supervisors") with gr.Row(): role = gr.Textbox(label="Supervisor Role", placeholder="e.g. Electrical Lead") project_id = gr.Textbox(label="Project ID") milestones = gr.Textbox(label="Project Milestones", placeholder="e.g. Foundation, Framing, Wiring...") reflection = gr.Textbox(label="Reflection Log", lines=4) submit_btn = gr.Button("Get Today's Coaching") checklist = gr.Textbox(label="Daily Checklist", lines=4) tips = gr.Textbox(label="Top 3 Focus Tips", lines=3) score = gr.Number(label="Engagement Score") graph = gr.Image(label="Engagement Trend") submit_btn.click(coach_interface, inputs=[role, project_id, milestones, reflection], outputs=[checklist, tips, score, graph]) gr.Markdown("---") gr.Markdown("## Download Weekly Summary") download_btn = gr.Button("Download PDF Summary") summary_file = gr.File() download_btn.click(download_summary, inputs=[role, project_id], outputs=summary_file) if __name__ == "__main__": demo.launch()