Download app.py from Muhammadidrees/Conversational_ChatBot: direct link, hf CLI and curl.
- Browser
- Download file 9.19 kB
-
https://huggingface.co/spaces/Muhammadidrees/Conversational_ChatBot/resolve/main/app.py
- Command line
-
hf download hf://spaces/Muhammadidrees/Conversational_ChatBot/app.py
-
curl -L -o app.py https://huggingface.co/spaces/Muhammadidrees/Conversational_ChatBot/resolve/main/app.py
9.19 kB
| import gradio as gr | |
| import google.generativeai as genai | |
| import os | |
| from datetime import datetime | |
| # Set your Gemini API Key securely | |
| os.environ["GOOGLE_API_KEY"] = "AIzaSyDwMK08RcUvg9JomaJSuX9XT3BGNasQk5M" | |
| # Configure Gemini client | |
| genai.configure(api_key=os.getenv("GOOGLE_API_KEY")) | |
| # Using Gemini 2.5 Flash | |
| MODEL_ID = "gemini-2.0-flash-exp" | |
| # System prompt for the AI Doctor | |
| DOCTOR_SYSTEM_PROMPT = """You are Dr. AI Assistant, a professional and empathetic medical doctor conducting a thorough patient consultation. | |
| YOUR CONSULTATION PROCESS: | |
| 1. **Initial Greeting & Personal Details Collection**: | |
| - Greet the patient warmly | |
| - Ask for: Name, Age, Gender, Contact details | |
| - Ask about occupation and lifestyle | |
| 2. **Medical History**: | |
| - Ask about chief complaints (main symptoms) | |
| - Duration and severity of symptoms | |
| - Past medical history | |
| - Current medications | |
| - Allergies | |
| - Family medical history | |
| - Previous surgeries or hospitalizations | |
| 3. **Detailed Symptom Analysis**: | |
| - Ask specific questions about each symptom | |
| - Pain level (1-10 scale) | |
| - Aggravating and relieving factors | |
| - Associated symptoms | |
| 4. **Lifestyle Assessment**: | |
| - Diet and eating habits | |
| - Exercise routine | |
| - Sleep patterns | |
| - Stress levels | |
| - Smoking/alcohol consumption | |
| - Water intake | |
| 5. **Physical Examination Questions** (virtual): | |
| - Ask about vital signs if known (BP, temperature, pulse) | |
| - Visible symptoms | |
| - Any recent changes in body | |
| 6. **Provide Comprehensive Recommendations**: | |
| - Preliminary assessment | |
| - Dietary recommendations | |
| - Lifestyle modifications | |
| - Exercise suggestions | |
| - Medication suggestions (with disclaimer) | |
| - When to seek immediate medical attention | |
| - Follow-up advice | |
| 7. **Generate Summary** (when patient requests): | |
| - Patient details | |
| - Chief complaints | |
| - Medical history | |
| - Assessment | |
| - Recommendations (diet, lifestyle, medications) | |
| - Disclaimer about consulting a physical doctor | |
| IMPORTANT GUIDELINES: | |
| - Be professional, empathetic, and reassuring | |
| - **CRITICAL: Ask ONLY ONE question at a time - NEVER ask multiple questions in a single response** | |
| - Wait for the patient's answer before asking the next question | |
| - Use medical terminology but explain in simple terms | |
| - Always include disclaimer that this is preliminary advice | |
| - Recommend seeing a physical doctor for serious conditions | |
| - Show concern and empathy | |
| - Be thorough but not overwhelming | |
| - Keep the conversation natural and flowing like a real doctor-patient interaction | |
| DISCLAIMER TO INCLUDE: | |
| "β οΈ Please note: This is an AI-powered preliminary consultation. For accurate diagnosis and treatment, please consult a licensed medical professional in person. In case of emergency, call emergency services immediately." | |
| Start by greeting the patient and asking for their name.""" | |
| def initialize_chat(): | |
| """Initialize the Gemini chat with doctor system prompt""" | |
| model = genai.GenerativeModel( | |
| model_name=MODEL_ID, | |
| system_instruction=DOCTOR_SYSTEM_PROMPT | |
| ) | |
| chat = model.start_chat(history=[]) | |
| return chat | |
| # Global chat instance | |
| chat_session = initialize_chat() | |
| def chat_with_doctor(message, history): | |
| """Handle patient messages and get doctor's response""" | |
| global chat_session | |
| try: | |
| # Send patient message to doctor | |
| response = chat_session.send_message(message) | |
| doctor_response = response.text | |
| return doctor_response | |
| except Exception as e: | |
| return f"I apologize, but I encountered an error: {str(e)}. Please try again or restart the consultation." | |
| def generate_consultation_summary(history): | |
| """Generate a comprehensive summary of the consultation""" | |
| global chat_session | |
| summary_request = """Please generate a comprehensive consultation summary in the following format: | |
| π **MEDICAL CONSULTATION SUMMARY** | |
| ββββββββββββββββββββββββββββββββ | |
| **Patient Information:** | |
| - Name: [name] | |
| - Age: [age] | |
| - Gender: [gender] | |
| - Date of Consultation: [current date] | |
| **Chief Complaints:** | |
| [List main symptoms and concerns] | |
| **Medical History:** | |
| [Relevant medical history] | |
| **Assessment:** | |
| [Your preliminary assessment] | |
| **Recommendations:** | |
| 1. **Dietary Recommendations:** | |
| [Specific diet advice] | |
| 2. **Lifestyle Modifications:** | |
| [Lifestyle changes needed] | |
| 3. **Exercise & Physical Activity:** | |
| [Exercise recommendations] | |
| 4. **Medication Suggestions:** | |
| [If any - with disclaimer] | |
| 5. **Follow-up Care:** | |
| [When to seek medical attention] | |
| **Important Notes:** | |
| β οΈ This is a preliminary AI consultation. Please consult a licensed medical doctor for accurate diagnosis and treatment. | |
| ββββββββββββββββββββββββββββββββ | |
| Generated by Dr. AI Assistant""" | |
| try: | |
| response = chat_session.send_message(summary_request) | |
| return response.text | |
| except Exception as e: | |
| return f"Error generating summary: {str(e)}" | |
| def restart_consultation(): | |
| """Restart the consultation with a fresh session""" | |
| global chat_session | |
| chat_session = initialize_chat() | |
| return [], "Consultation restarted. Please tell me your name to begin." | |
| # Create Gradio Interface | |
| with gr.Blocks(title="AI Doctor Consultation", theme=gr.themes.Soft()) as demo: | |
| gr.Markdown(""" | |
| # π©Ί AI Doctor Consultation System | |
| ### Professional Medical Consultation with Dr. AI Assistant | |
| Welcome! I'm Dr. AI Assistant, here to conduct a thorough medical consultation. | |
| I'll ask about your symptoms, medical history, lifestyle, and provide comprehensive recommendations. | |
| **β οΈ Important:** This is a preliminary consultation. Always consult a licensed physician for proper diagnosis and treatment. | |
| """) | |
| with gr.Row(): | |
| with gr.Column(scale=4): | |
| chatbot = gr.Chatbot( | |
| height=500, | |
| show_label=False, | |
| avatar_images=(None, "https://api.dicebear.com/7.x/bottts/svg?seed=doctor"), | |
| bubble_full_width=False | |
| ) | |
| with gr.Row(): | |
| msg = gr.Textbox( | |
| placeholder="Type your message here...", | |
| show_label=False, | |
| scale=4 | |
| ) | |
| send_btn = gr.Button("Send π€", scale=1, variant="primary") | |
| with gr.Row(): | |
| summary_btn = gr.Button("π Generate Consultation Summary", variant="secondary") | |
| clear_btn = gr.Button("π Restart Consultation", variant="stop") | |
| with gr.Column(scale=1): | |
| gr.Markdown(""" | |
| ### π Consultation Guide | |
| **What I'll ask about:** | |
| - Personal details | |
| - Chief complaints | |
| - Medical history | |
| - Current medications | |
| - Lifestyle habits | |
| - Diet & exercise | |
| **I'll provide:** | |
| - Preliminary assessment | |
| - Dietary advice | |
| - Lifestyle changes | |
| - Exercise plan | |
| - Medication suggestions | |
| - Follow-up guidance | |
| **Commands:** | |
| - Type normally to chat | |
| - Click "Generate Summary" for full report | |
| - Click "Restart" for new consultation | |
| βοΈ *Be honest and detailed for best advice* | |
| """) | |
| summary_output = gr.Textbox( | |
| label="π Consultation Summary", | |
| placeholder="Click 'Generate Summary' after consultation", | |
| lines=15, | |
| max_lines=20 | |
| ) | |
| # Auto-start conversation | |
| def start_conversation(): | |
| initial_message = "Hello! I'm Dr. AI Assistant. I'm here to help you today. Let's start with some basic information.\n\nπ€ May I have your name, please?" | |
| return [[None, initial_message]] | |
| demo.load( | |
| start_conversation, | |
| outputs=[chatbot] | |
| ) | |
| # Handle send message | |
| def respond(message, chat_history): | |
| if not message.strip(): | |
| return "", chat_history | |
| # Add user message | |
| chat_history.append((message, None)) | |
| # Get doctor response | |
| bot_response = chat_with_doctor(message, chat_history) | |
| chat_history[-1] = (message, bot_response) | |
| return "", chat_history | |
| msg.submit(respond, [msg, chatbot], [msg, chatbot]) | |
| send_btn.click(respond, [msg, chatbot], [msg, chatbot]) | |
| # Generate summary | |
| summary_btn.click( | |
| lambda history: generate_consultation_summary(history), | |
| inputs=[chatbot], | |
| outputs=[summary_output] | |
| ) | |
| # Restart consultation | |
| def restart_and_update(): | |
| new_history, greeting = restart_consultation() | |
| return [[None, greeting]], "" | |
| clear_btn.click( | |
| restart_and_update, | |
| outputs=[chatbot, summary_output] | |
| ) | |
| # Launch the app | |
| if __name__ == "__main__": | |
| demo.launch(share=True) |