Spaces:
Runtime error
Runtime error
| import google.generativeai as genai | |
| from langchain.prompts import PromptTemplate | |
| import gradio as gr | |
| import pdfplumber | |
| import os | |
| from dotenv import load_dotenv | |
| # Load environment variables from .env file | |
| load_dotenv() | |
| # Configure the API key | |
| api_key = os.getenv('API_KEY') | |
| # Configure the API key for Google's generative AI | |
| genai.configure(api_key=api_key) | |
| # Define the generative model | |
| model = genai.GenerativeModel('gemini-pro') | |
| # Function to extract text from a PDF file and generate a response | |
| def retrieve_text_from_pdf(file_path): | |
| with open(file_path, 'rb') as f: | |
| pdf = pdfplumber.open(f) | |
| text = "" | |
| for page in pdf.pages: | |
| text += page.extract_text() | |
| return text | |
| # Function to analyze the text and generate a response | |
| def process_text(text): | |
| prompt_template = PromptTemplate.from_template(""" | |
| You are a virtual doctor. A patient has provided their medical report, and you need to assist them with their health journey. | |
| **Patient Instructions:** | |
| - Analyze the medical report. | |
| - Identify the patient's health issues. | |
| - Provide a comprehensive solution including: | |
| - Diagnosis of the problem. | |
| - Recommended treatments or remedies. | |
| - Suggested physical activities. | |
| - Habits to give up. | |
| - Fruits and foods to include in the diet. | |
| - Ensure the guidance is clear and actionable. | |
| **Medical Report:** | |
| ``` | |
| {PDF_text} | |
| ``` | |
| **Solution:** | |
| ``` | |
| [Provide detailed analysis and recommendations here] | |
| ```""" | |
| ) | |
| prompt = prompt_template.format(PDF_text=text) | |
| response = model.generate_content(prompt).text | |
| return response, text | |
| # formatted_text = f"Paste this text in the diet plan and exercise plan sections to generate the plans:\n\n{text}" | |
| # formatted_response = f"Report Explanations:\n\n{response}" | |
| # return formatted_response, formatted_text | |
| # Function to handle both PDF upload and text input | |
| def process_user_input(input_type, pdf_file=None, report_text=None): | |
| if input_type == "Upload PDF" and pdf_file is not None: | |
| text = retrieve_text_from_pdf(pdf_file.name) | |
| elif input_type == "Paste Text" and report_text is not None: | |
| text = report_text | |
| else: | |
| return "Please provide a valid input.", "" | |
| return process_text(text) | |
| # Function to check symptoms | |
| def assess_symptoms(symptoms): | |
| prompt = f"As a virtual doctor, please analyze the following symptoms and provide potential conditions:\n{symptoms}" | |
| response = model.generate_content(prompt).text | |
| return response | |
| # Function to generate a diet plan based on the medical report | |
| def develop_diet_plan(report_text): | |
| prompt = f"Based on the medical report, provide a Customized diet and nutrition plan:\n{report_text}" | |
| response = model.generate_content(prompt).text | |
| return response | |
| # Function to generate an exercise plan based on the medical report | |
| def develop_exercise_plan(report_text): | |
| prompt = f"Based on the medical report, provide a Customized exercise plan:\n{report_text}" | |
| response = model.generate_content(prompt).text | |
| return response | |
| # Function to set medication reminders | |
| def schedule_medication_reminder(medication, time): | |
| return f"Reminder set for {medication} at {time}." | |
| # Function to provide health education content | |
| def develop_health_content(topic): | |
| prompt = f"Provide educational content on the following health topic:\n{topic}" | |
| response = model.generate_content(prompt).text | |
| return response | |
| # Define Gradio interfaces for each function | |
| demo = gr.Interface( | |
| fn=process_user_input, | |
| inputs=[ | |
| gr.Radio(["Upload PDF", "Paste Text"], label="Select Input Method", value="Upload PDF"), | |
| gr.File(label="Upload PDF"), | |
| gr.Textbox(label="Or Paste Report Text here", lines=10) | |
| ], | |
| outputs=[gr.Textbox(label="Report Analysis"), gr.Textbox(label="Copy and Paste this Medical Report Text in Diet/Exercise Plan Generation")], | |
| description="Discover Your Path to Well-being, Upload Medical report PDF or copy paste the text to get Insight; Sample Report - https://cdn1.lalpathlabs.com/live/reports/WM17S.pdf", | |
| ) | |
| present_symptom_checker = gr.Interface( | |
| fn=assess_symptoms, | |
| inputs=gr.Textbox(placeholder="Enter your symptoms, e.g., fever, cough, fatigue", lines=2), | |
| outputs=gr.Textbox(label="Potential Conditions"), | |
| description="Symptom Checker", | |
| examples=[ | |
| ["fever, cough, fatigue"], | |
| ["headache, nausea, dizziness"] | |
| ] | |
| ) | |
| present_diet_plan = gr.Interface( | |
| fn=develop_diet_plan, | |
| inputs=gr.Textbox(placeholder="Paste the copied medical report text here", lines=10), | |
| outputs=gr.Textbox(label="Customized Diet Plan"), | |
| description="Customized Diet Plan", | |
| ) | |
| present_exercise_plan = gr.Interface( | |
| fn=develop_exercise_plan, | |
| inputs=gr.Textbox(placeholder="Paste the copied medical report text here", lines=10), | |
| outputs=gr.Textbox(label="Customized Exercise Plan"), | |
| description="Customized Exercise Plan", | |
| ) | |
| present_medication_reminder = gr.Interface( | |
| fn=schedule_medication_reminder, | |
| inputs=[gr.Textbox(placeholder="Enter medication name", lines=1), gr.Textbox(placeholder="Enter time, e.g., 10:00 AM", lines=1)], | |
| outputs=gr.Textbox(label="Medication Reminder"), | |
| description="Set Medication Reminder", | |
| ) | |
| present_health_education = gr.Interface( | |
| fn=develop_health_content, | |
| inputs=gr.Textbox(placeholder="Enter health topic, e.g., benefits of regular exercise", lines=2), | |
| outputs=gr.Textbox(label="Learning materials"), | |
| description="Health Education", | |
| examples=[ | |
| ["benefits of regular exercise"] | |
| ] | |
| ) | |
| # Define the title and tabbed interface | |
| title = gr.Markdown("# AI-Powered Virtual Health Assistant") | |
| tabs = gr.TabbedInterface( | |
| [demo, present_symptom_checker, present_diet_plan, present_exercise_plan, present_medication_reminder, present_health_education], | |
| ["Medical Report Analysis", "Symptom Checker", "Diet Plan", "Exercise Plan", "Medication Reminder", "Health Education"] | |
| ) | |
| # Set up the layout | |
| def create_interface(): | |
| with gr.Blocks() as app: | |
| title.render() # Render the title | |
| tabs.render() # Render the tabs | |
| return app | |
| # Launch the application | |
| app = create_interface() | |
| app.launch(debug=True) | |