mohitrajdeo commited on
Commit
2f83400
Β·
1 Parent(s): e3681ad

Implement Medical Consultant feature with health-related queries and suggestions

Browse files
Files changed (1) hide show
  1. app.py +288 -94
app.py CHANGED
@@ -456,100 +456,100 @@ if selected == 'Data Visualization':
456
  st.pyplot(fig)
457
 
458
 
459
- if selected == 'Medical Consultant':
460
- st.title("🩺 Medical Consultant Chatbot")
461
- st.markdown("### Discuss Your Health Concerns with Our AI-powered Chatbot")
462
- st.write("Ask about **Diabetes, Asthma, Stroke, Cardiovascular Disease, or Mental Health.**")
463
-
464
- genai.configure(api_key="AIzaSyAwyi9c5OdvLoWrv5lFi1jZDEYwuprQAKE")
465
-
466
- # Custom Styling
467
- st.markdown("""
468
- <style>
469
- .prompt-box {
470
- background-color: #000000;
471
- padding: 12px;
472
- border-radius: 8px;
473
- font-size: 14px;
474
- font-family: sans-serif;
475
- margin-bottom: 10px;
476
- border: 1px solid #dee2e6;
477
- text-align: center;
478
- }
479
- </style>
480
- """, unsafe_allow_html=True)
481
-
482
- st.markdown("#### πŸ’‘ Common Health Queries")
483
-
484
- prompt_options = [
485
- ("Diabetes – Diet", "What foods should I eat if I have diabetes?"),
486
- ("Diabetes – Exercise", "What type of workouts help control blood sugar levels?"),
487
- ("Asthma – Triggers", "What are common asthma triggers?"),
488
- ("Asthma – Treatment", "What are the best medications for asthma?"),
489
- ("Stroke – Symptoms", "What are the early warning signs of a stroke?"),
490
- ("Stroke – Prevention", "How can I reduce my risk of stroke?"),
491
- ("Cardiovascular – Heart Health", "How can I reduce my risk of heart disease?"),
492
- ("Cardiovascular – Blood Pressure", "What lifestyle changes can lower high blood pressure?"),
493
- ("Mental Health – Stress Management", "How can I manage stress effectively?"),
494
- ("Mental Health – Sleep Disorders", "What are the causes and treatments for sleep disorders?")
495
- ]
496
-
497
- # Display prompts in two columns (2 prompts per row)
498
- cols = st.columns(2)
499
- for i in range(0, len(prompt_options), 2):
500
- with cols[0]:
501
- if i < len(prompt_options):
502
- label, prompt = prompt_options[i]
503
- st.markdown(f"""<div class="prompt-box"><strong>{label}</strong><br>{prompt}</div>""", unsafe_allow_html=True)
504
-
505
- with cols[1]:
506
- if i+1 < len(prompt_options):
507
- label, prompt = prompt_options[i+1]
508
- st.markdown(f"""<div class="prompt-box"><strong>{label}</strong><br>{prompt}</div>""", unsafe_allow_html=True)
509
-
510
- # Initialize chat history if not present
511
- if "chat_history" not in st.session_state:
512
- st.session_state.chat_history = []
513
-
514
- # Display previous chat history
515
- for message in st.session_state.chat_history:
516
- with st.chat_message(message["role"]):
517
- st.markdown(message["content"])
518
-
519
- # User input field
520
- user_prompt = st.chat_input("Ask about Diabetes, Asthma, Stroke, Cardiovascular Disease, or Mental Health...")
521
-
522
- # List of allowed topics
523
- allowed_keywords = ["diabetes", "asthma", "stroke", "cardiovascular", "heart", "blood pressure",
524
- "mental health", "depression", "stress", "cholesterol", "sleep disorders"]
525
-
526
- if user_prompt:
527
- # Display user message
528
- st.chat_message("user").markdown(user_prompt)
529
- st.session_state.chat_history.append({"role": "user", "content": user_prompt})
530
-
531
- # Restriction: Only process if related to health topics
532
- if any(keyword in user_prompt.lower() for keyword in allowed_keywords):
533
- model = genai.GenerativeModel("gemini-2.0-flash")
534
- response = model.generate_content(user_prompt)
535
-
536
- if response and hasattr(response, "text"):
537
- assistant_response = response.text
538
- else:
539
- assistant_response = "I'm sorry, I couldn't generate a response."
540
-
541
- st.session_state.chat_history.append({"role": "assistant", "content": assistant_response})
542
-
543
- # Display assistant's response
544
- with st.chat_message("assistant"):
545
- st.markdown(assistant_response)
546
- else:
547
- # Restriction message
548
- restriction_msg = "**⚠️ This chatbot only responds to health-related topics.**\nPlease ask about Diabetes, Asthma, Stroke, Cardiovascular Disease, or Mental Health."
549
- st.session_state.chat_history.append({"role": "assistant", "content": restriction_msg})
550
 
551
- with st.chat_message("assistant"):
552
- st.markdown(restriction_msg)
553
 
554
 
555
  # if selected == 'Checkbox-to-disease-predictor':
@@ -957,4 +957,198 @@ if selected=='Hypertension Prediction':
957
 
958
  except Exception as e:
959
  st.error(f"Error during prediction: {e}")
960
- # st.info("Please check that all inputs are valid and within the expected ranges.")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
456
  st.pyplot(fig)
457
 
458
 
459
+ # if selected == 'Medical Consultant':
460
+ # st.title("🩺 Medical Consultant Chatbot")
461
+ # st.markdown("### Discuss Your Health Concerns with Our AI-powered Chatbot")
462
+ # st.write("Ask about **Diabetes, Asthma, Stroke, Cardiovascular Disease, or Mental Health.**")
463
+
464
+ # genai.configure(api_key="AIzaSyAwyi9c5OdvLoWrv5lFi1jZDEYwuprQAKE")
465
+
466
+ # # Custom Styling
467
+ # st.markdown("""
468
+ # <style>
469
+ # .prompt-box {
470
+ # background-color: #000000;
471
+ # padding: 12px;
472
+ # border-radius: 8px;
473
+ # font-size: 14px;
474
+ # font-family: sans-serif;
475
+ # margin-bottom: 10px;
476
+ # border: 1px solid #dee2e6;
477
+ # text-align: center;
478
+ # }
479
+ # </style>
480
+ # """, unsafe_allow_html=True)
481
+
482
+ # st.markdown("#### πŸ’‘ Common Health Queries")
483
+
484
+ # prompt_options = [
485
+ # ("Diabetes – Diet", "What foods should I eat if I have diabetes?"),
486
+ # ("Diabetes – Exercise", "What type of workouts help control blood sugar levels?"),
487
+ # ("Asthma – Triggers", "What are common asthma triggers?"),
488
+ # ("Asthma – Treatment", "What are the best medications for asthma?"),
489
+ # ("Stroke – Symptoms", "What are the early warning signs of a stroke?"),
490
+ # ("Stroke – Prevention", "How can I reduce my risk of stroke?"),
491
+ # ("Cardiovascular – Heart Health", "How can I reduce my risk of heart disease?"),
492
+ # ("Cardiovascular – Blood Pressure", "What lifestyle changes can lower high blood pressure?"),
493
+ # ("Mental Health – Stress Management", "How can I manage stress effectively?"),
494
+ # ("Mental Health – Sleep Disorders", "What are the causes and treatments for sleep disorders?")
495
+ # ]
496
+
497
+ # # Display prompts in two columns (2 prompts per row)
498
+ # cols = st.columns(2)
499
+ # for i in range(0, len(prompt_options), 2):
500
+ # with cols[0]:
501
+ # if i < len(prompt_options):
502
+ # label, prompt = prompt_options[i]
503
+ # st.markdown(f"""<div class="prompt-box"><strong>{label}</strong><br>{prompt}</div>""", unsafe_allow_html=True)
504
+
505
+ # with cols[1]:
506
+ # if i+1 < len(prompt_options):
507
+ # label, prompt = prompt_options[i+1]
508
+ # st.markdown(f"""<div class="prompt-box"><strong>{label}</strong><br>{prompt}</div>""", unsafe_allow_html=True)
509
+
510
+ # # Initialize chat history if not present
511
+ # if "chat_history" not in st.session_state:
512
+ # st.session_state.chat_history = []
513
+
514
+ # # Display previous chat history
515
+ # for message in st.session_state.chat_history:
516
+ # with st.chat_message(message["role"]):
517
+ # st.markdown(message["content"])
518
+
519
+ # # User input field
520
+ # user_prompt = st.chat_input("Ask about Diabetes, Asthma, Stroke, Cardiovascular Disease, or Mental Health...")
521
+
522
+ # # List of allowed topics
523
+ # allowed_keywords = ["diabetes", "asthma", "stroke", "cardiovascular", "heart", "blood pressure",
524
+ # "mental health", "depression", "stress", "cholesterol", "sleep disorders"]
525
+
526
+ # if user_prompt:
527
+ # # Display user message
528
+ # st.chat_message("user").markdown(user_prompt)
529
+ # st.session_state.chat_history.append({"role": "user", "content": user_prompt})
530
+
531
+ # # Restriction: Only process if related to health topics
532
+ # if any(keyword in user_prompt.lower() for keyword in allowed_keywords):
533
+ # model = genai.GenerativeModel("gemini-2.0-flash")
534
+ # response = model.generate_content(user_prompt)
535
+
536
+ # if response and hasattr(response, "text"):
537
+ # assistant_response = response.text
538
+ # else:
539
+ # assistant_response = "I'm sorry, I couldn't generate a response."
540
+
541
+ # st.session_state.chat_history.append({"role": "assistant", "content": assistant_response})
542
+
543
+ # # Display assistant's response
544
+ # with st.chat_message("assistant"):
545
+ # st.markdown(assistant_response)
546
+ # else:
547
+ # # Restriction message
548
+ # restriction_msg = "**⚠️ This chatbot only responds to health-related topics.**\nPlease ask about Diabetes, Asthma, Stroke, Cardiovascular Disease, or Mental Health."
549
+ # st.session_state.chat_history.append({"role": "assistant", "content": restriction_msg})
550
 
551
+ # with st.chat_message("assistant"):
552
+ # st.markdown(restriction_msg)
553
 
554
 
555
  # if selected == 'Checkbox-to-disease-predictor':
 
957
 
958
  except Exception as e:
959
  st.error(f"Error during prediction: {e}")
960
+ # st.info("Please check that all inputs are valid and within the expected ranges.")
961
+
962
+
963
+ if selected == 'Medical Consultant':
964
+ st.title("🩺 Medical Consultant Chatbot")
965
+ st.markdown("### Discuss Your Health Concerns with Our AI-powered Chatbot")
966
+ st.write("Our AI can help with **medical questions, symptom analysis, and health recommendations**.")
967
+
968
+ # Initialize API
969
+ genai.configure(api_key="AIzaSyAcXexC7cNXrRTCYj6Dg7ZFYVQZH8a5PMw") # Replace with your actual API key
970
+
971
+ # Custom Styling for suggestions
972
+ st.markdown("""
973
+ <style>
974
+ .prompt-box {
975
+ background-color: #222222;
976
+ padding: 12px;
977
+ border-radius: 8px;
978
+ font-size: 14px;
979
+ font-family: sans-serif;
980
+ margin-bottom: 10px;
981
+ border: 1px solid #444444;
982
+ text-align: center;
983
+ cursor: pointer;
984
+ }
985
+ .prompt-box:hover {
986
+ background-color: #333333;
987
+ }
988
+ </style>
989
+ """, unsafe_allow_html=True)
990
+
991
+ # Common medical questions as suggestions
992
+ st.markdown("#### πŸ’‘ Common Health Questions")
993
+
994
+ prompt_options = [
995
+ ("Diabetes", "What are early warning signs of diabetes?"),
996
+ ("Hypertension", "How can I manage my blood pressure naturally?"),
997
+ ("Heart Health", "What lifestyle changes help reduce cardiovascular risk?"),
998
+ ("Asthma", "What triggers asthma attacks and how can I prevent them?"),
999
+ ("Stroke", "What are the warning signs of a stroke?"),
1000
+ ("Sleep Health", "How does poor sleep affect my overall health?"),
1001
+ ("Mental Health", "What are common symptoms of anxiety?"),
1002
+ ("Preventive Care", "What preventive screenings should I get at my age?"),
1003
+ ("Exercise", "How much exercise do I need for good health?"),
1004
+ ("Nutrition", "What diet changes can improve my heart health?")
1005
+ ]
1006
+
1007
+ # Display prompts in two columns
1008
+ cols = st.columns(2)
1009
+ for i in range(0, len(prompt_options), 2):
1010
+ with cols[0]:
1011
+ if i < len(prompt_options):
1012
+ label, prompt = prompt_options[i]
1013
+ st.markdown(f"""<div class="prompt-box" onclick="document.querySelector('#medical-chat-input').value='{prompt}';"><strong>{label}</strong><br>{prompt}</div>""", unsafe_allow_html=True)
1014
+
1015
+ with cols[1]:
1016
+ if i+1 < len(prompt_options):
1017
+ label, prompt = prompt_options[i+1]
1018
+ st.markdown(f"""<div class="prompt-box" onclick="document.querySelector('#medical-chat-input').value='{prompt}';"><strong>{label}</strong><br>{prompt}</div>""", unsafe_allow_html=True)
1019
+
1020
+ # Initialize chat history if not present
1021
+ if "medical_chat_history" not in st.session_state:
1022
+ st.session_state.medical_chat_history = []
1023
+ # Add welcome message
1024
+ welcome_msg = {
1025
+ "role": "assistant",
1026
+ "content": """πŸ‘‹ Welcome to your Medical Consultant! I can help answer questions about:
1027
+
1028
+ - Health concerns and symptoms
1029
+ - Disease prevention and management
1030
+ - Lifestyle recommendations
1031
+ - Understanding medical conditions
1032
+
1033
+ How can I assist with your health questions today?"""
1034
+ }
1035
+ st.session_state.medical_chat_history.append(welcome_msg)
1036
+
1037
+ # Chat container
1038
+ chat_container = st.container()
1039
+ with chat_container:
1040
+ # Display previous chat history
1041
+ for message in st.session_state.medical_chat_history:
1042
+ with st.chat_message(message["role"]):
1043
+ st.markdown(message["content"])
1044
+
1045
+ # User input field
1046
+ user_prompt = st.chat_input("Ask about health concerns, symptoms, or lifestyle questions...", key="medical-chat-input")
1047
+
1048
+ # Define medical topics for feature recommendations
1049
+ medical_topics = {
1050
+ "diabetes": "Diabetes Prediction",
1051
+ "blood sugar": "Diabetes Prediction",
1052
+ "hypertension": "Hypertension Prediction",
1053
+ "blood pressure": "Hypertension Prediction",
1054
+ "heart": "Cardiovascular Disease Prediction",
1055
+ "cardiovascular": "Cardiovascular Disease Prediction",
1056
+ "asthma": "Asthma Prediction",
1057
+ "breathing": "Asthma Prediction",
1058
+ "stroke": "Stroke Prediction",
1059
+ "sleep": "Sleep Health Analysis",
1060
+ "insomnia": "Sleep Health Analysis",
1061
+ "mental health": "Mental-Analysis",
1062
+ "depression": "Mental-Analysis",
1063
+ "anxiety": "Mental-Analysis",
1064
+ "stress": "Mental-Analysis"
1065
+ }
1066
+
1067
+ if user_prompt:
1068
+ # Add user message to chat
1069
+ st.session_state.medical_chat_history.append({"role": "user", "content": user_prompt})
1070
+
1071
+ # Display user message in chat
1072
+ with st.chat_message("user"):
1073
+ st.markdown(user_prompt)
1074
+
1075
+ try:
1076
+ # Create system instruction
1077
+ system_instruction = """You are a medical consultant chatbot designed to provide helpful health information.
1078
+
1079
+ RULES:
1080
+ - Provide accurate, concise medical information based on current scientific understanding
1081
+ - Answer questions about symptoms, diseases, prevention, and health management
1082
+ - Keep responses informative but brief (under 150 words)
1083
+ - When uncertain, acknowledge limitations and recommend consulting a healthcare professional
1084
+ - Avoid making definitive diagnoses or treatment recommendations
1085
+ - Never claim to be an AI or language model - respond directly as a medical consultant
1086
+ - Always clarify that your advice is informational and not a substitute for professional medical care
1087
+ - When describing medical conditions, focus on factual information about symptoms, risk factors, and prevention
1088
+ - Maintain a professional, empathetic tone
1089
+ - If the user mentions specific symptoms, acknowledge them and provide information about possible causes
1090
+ - Respond in a doctor-like manner when assessing symptoms or risk factors
1091
+ - Use your knowledge to identify if the user's query relates to any specific medical conditions
1092
+ - Do not suggest our prediction tools in every response - only when truly relevant
1093
+
1094
+ The user is interacting with a health prediction platform that offers the following tools:
1095
+ - Diabetes Prediction
1096
+ - Hypertension Prediction
1097
+ - Cardiovascular Disease Prediction
1098
+ - Asthma Prediction
1099
+ - Stroke Prediction
1100
+ - Sleep Health Analysis
1101
+ - Mental Health Analysis
1102
+
1103
+ TASK: First, determine if the user's query contains symptoms or mentions specific health conditions. If so, provide a doctor-like assessment. Only if appropriate, subtly suggest one of our health prediction tools at the end of your response.
1104
+ """
1105
+
1106
+ # Generate a response using Gemini
1107
+ model = genai.GenerativeModel("gemini-2.0-flash")
1108
+
1109
+ # Prepare chat context
1110
+ chat_context = []
1111
+ for msg in st.session_state.medical_chat_history[-5:]: # Last 5 messages for context
1112
+ if msg["role"] == "user":
1113
+ chat_context.append(f"User: {msg['content']}")
1114
+ else:
1115
+ chat_context.append(f"Medical Consultant: {msg['content']}")
1116
+
1117
+ # Add current query with additional analysis request
1118
+ full_prompt = f"""{system_instruction}
1119
+
1120
+ CONVERSATION HISTORY:
1121
+ {chr(10).join(chat_context)}
1122
+
1123
+ USER QUERY: {user_prompt}
1124
+
1125
+ ANALYSIS INSTRUCTIONS:
1126
+ 1. First, determine if this query relates to any specific health conditions or symptoms
1127
+ 2. Provide a helpful medical response addressing the user's concerns
1128
+ 3. If appropriate, subtly suggest one relevant prediction tool at the end of your response (only if truly related)
1129
+ 4. Remember to be professional and avoid making definitive diagnoses
1130
+ """
1131
+
1132
+ # Generate response
1133
+ response = model.generate_content(full_prompt)
1134
+
1135
+ if response and hasattr(response, "text"):
1136
+ assistant_response = response.text
1137
+ else:
1138
+ assistant_response = "I'm sorry, I couldn't generate a response. Please try asking a different health-related question."
1139
+
1140
+ # Save and display response
1141
+ st.session_state.medical_chat_history.append({"role": "assistant", "content": assistant_response})
1142
+
1143
+ with st.chat_message("assistant"):
1144
+ st.markdown(assistant_response)
1145
+
1146
+ except Exception as e:
1147
+ error_msg = f"I apologize, but I'm having trouble processing your request right now. Please try again with a different question."
1148
+ st.session_state.medical_chat_history.append({"role": "assistant", "content": error_msg})
1149
+
1150
+ with st.chat_message("assistant"):
1151
+ st.markdown(error_msg)
1152
+
1153
+ # Force refresh to update the chat
1154
+ st.rerun()