# app.py import gradio as gr import json import re from pipeline import process_answers_pipeline from questions import questions def extract_report_content(report_text): """Extract the actual report content from the report field.""" try: if isinstance(report_text, str) and report_text.startswith('{'): report_dict = eval(report_text) return report_dict.get('report', '').strip() except: pass return report_text.strip() def parse_recommendation_array_and_text(raw_recommendation): """ 1) Extract the bracketed JSON array of packages 2) Return the remainder of the text for further parsing. """ array_match = re.search(r'\[(.*?)\]', raw_recommendation, flags=re.DOTALL) if array_match: try: packages_list = json.loads(f"[{array_match.group(1)}]") packages_list = [p.strip() for p in packages_list if isinstance(p, str)] except: packages_list = [] else: packages_list = [] end_of_array = array_match.end() if array_match else 0 remainder_text = raw_recommendation[end_of_array:].strip() return packages_list, remainder_text def parse_package_descriptions(text): """Parse package descriptions from text using regex.""" mental_match = re.search( r"\*\*High Stress/Anxiety:\*\*(.*?)(?=\*\*|$)", text, flags=re.DOTALL ) mental_text = mental_match.group(1).strip() if mental_match else "" fitness_match = re.search( r"\*\*Moderate Fitness & Mobility:\*\*(.*?)(?=\*\*|$)", text, flags=re.DOTALL ) fitness_text = fitness_match.group(1).strip() if fitness_match else "" gut_match = re.search( r"\*\*Gut Health:\*\*(.*?)(?=\*\*|$)", text, flags=re.DOTALL ) gut_text = gut_match.group(1).strip() if gut_match else "" insomnia_match = re.search( r"\*\*No More Insomnia:\*\*(.*?)(?=\*\*|$)", text, flags=re.DOTALL ) insomnia_text = insomnia_match.group(1).strip() if insomnia_match else "" just_match = re.search( r"\*\*Justification for Exclusion:\*\*(.*?)(?=$)", text, flags=re.DOTALL ) justification_text = just_match.group(1).strip() if just_match else "" return { "mental_wellness": mental_text, "fitness_mobility": fitness_text, "gut_health": gut_text, "no_more_insomnia": insomnia_text, "justification": justification_text } def process_answers( sleep, exercise, mood, stress_level, wellness_goals, dietary_restrictions, relaxation_time, health_issues, water_intake, gratitude_feelings, connection_rating, energy_rating ): responses = { questions[0]: sleep, questions[1]: exercise, questions[2]: mood, questions[3]: stress_level, questions[4]: wellness_goals, questions[5]: dietary_restrictions, questions[7]: relaxation_time, questions[8]: health_issues, questions[12]: water_intake, questions[23]: gratitude_feelings, questions[24]: connection_rating, questions[27]: energy_rating } try: # Run the pipeline results = process_answers_pipeline(responses) # Capture the entire pipeline response as a string complete_response = str(results)# removed complete response # Extract individual fields wellness_report = extract_report_content(results.get('report', '')) # Extract final_summary and shortened_summary final_summary = results.get('final_summary', '') shortened_summary = results.get('shortened_summary', '') problems_data = results.get('problems', {}) identified_problems = { "stress_management": float(str(problems_data.get('stress_management', 0)).replace('%', '')), "low_therapy": float(str(problems_data.get('low_therapy', 0)).replace('%', '')), "balanced_weight": float(str(problems_data.get('balanced_weight', 0)).replace('%', '')), "restless_night": float(str(problems_data.get('restless_night', 0)).replace('%', '')), "lack_of_motivation": float(str(problems_data.get('lack_of_motivation', 0)).replace('%', '')), "gut_health": float(str(problems_data.get('gut_health', 0)).replace('%', '')), "anxiety": float(str(problems_data.get('anxiety', 0)).replace('%', '')), "burnout": float(str(problems_data.get('burnout', 0)).replace('%', '')) } raw_recommendation = results.get('recommendation', '').strip() recommended_packages, remainder_text = parse_recommendation_array_and_text(raw_recommendation) descriptions = parse_package_descriptions(remainder_text) recommendations_with_description = [] for pkg in recommended_packages: if pkg == "Mental Wellness": final_desc = ( "**High Stress/Anxiety:** " + descriptions["mental_wellness"] ) elif pkg == "Fitness & Mobility": final_desc = ( "**Moderate Fitness & Mobility:** " + descriptions["fitness_mobility"] ) elif pkg == "Gut Health": final_desc = ( "**Gut Health:** " + descriptions["gut_health"] ) elif pkg == "No More Insomnia": final_desc = ( "**No More Insomnia:** " + descriptions["no_more_insomnia"] ) else: final_desc = "" recommendations_with_description.append({ "package": pkg, "description": final_desc }) return { # "complete_response": complete_response,# removed complete response "wellness_report": wellness_report, "identified_problems": identified_problems, "recommended_packages": recommended_packages, "recommendations_with_description": recommendations_with_description, "exclusion_justification": descriptions["justification"], "user summary": final_summary, # ADDED "video script": shortened_summary # ADDED } except Exception as e: return { "error": f"Error processing answers: {str(e)}", "complete_response": str(results) if 'results' in locals() else "No results generated" } # Create the Gradio interface with gr.Blocks() as demo: gr.Markdown("# Wellness Assessment") with gr.Row(): with gr.Column(): sleep = gr.Textbox( label="How many hours of sleep do you get each night?" ) exercise = gr.Textbox( label="How often do you exercise in a week?" ) mood = gr.Textbox( label="On a scale of 1 to 10, how would you rate your mood today?" ) stress_level = gr.Textbox( label="On a scale from 1 to 10, what is your current stress level?" ) wellness_goals = gr.Textbox( label="What are your primary wellness goals?" ) dietary_restrictions = gr.Textbox( label="Do you follow any specific diet or have any dietary restrictions?" ) relaxation_time = gr.Textbox( label="How much time do you spend on relaxation or mindfulness activities daily?" ) health_issues = gr.Textbox( label="How would you rate your health and wellness on a scale of 1 to 10?" ) water_intake = gr.Textbox( label="How much water do you drink on average per day?" ) gratitude_feelings = gr.Textbox( label="How often do you experience feelings of gratitude or happiness?" ) connection_rating = gr.Textbox( label="On a scale from 1 to 10, how will you define your human relations ?" ) energy_rating = gr.Textbox( label="On a scale from 1 to 10, how would you rate your energy levels throughout the day?" ) submit_btn = gr.Button("Submit") output = gr.JSON() submit_btn.click( fn=process_answers, inputs=[ sleep, exercise, mood, stress_level, wellness_goals, dietary_restrictions, relaxation_time, health_issues, water_intake, gratitude_feelings, connection_rating, energy_rating ], outputs=output ) if __name__ == "__main__": demo.launch()