| import gradio as gr |
| from transformers import AutoTokenizer, AutoModelForSequenceClassification |
| import torch |
| import re |
| import random |
| import logging |
| from typing import Dict, List, Tuple, Optional |
| import numpy as np |
|
|
| |
| logging.basicConfig(level=logging.INFO) |
| logger = logging.getLogger(__name__) |
|
|
| class HealthAnalysisNLG: |
| def __init__(self): |
| """Initialize the health analysis system with improved error handling and model loading""" |
| self.model = None |
| self.tokenizer = None |
| self._load_model() |
| |
| |
| self.response_templates = { |
| 'bmi_assessment': { |
| 'optimal': [ |
| "Your BMI appears to be in a healthy range, which is excellent for your overall health.", |
| "Based on your height and weight, you're maintaining a healthy BMI that supports good metabolic function.", |
| "Your body mass index is within the optimal range, indicating good weight management.", |
| "Your current BMI suggests you're maintaining a healthy weight-to-height ratio." |
| ], |
| 'suboptimal': [ |
| "Your BMI suggests there may be room for improvement in weight management.", |
| "Your current BMI indicates you might benefit from modest lifestyle adjustments.", |
| "Based on your measurements, focusing on healthy weight management could be beneficial.", |
| "Your BMI is slightly outside the optimal range, but manageable with lifestyle changes." |
| ], |
| 'concerning': [ |
| "Your BMI indicates significant health risks that should be addressed promptly.", |
| "Your current BMI suggests urgent lifestyle changes may be needed for optimal health.", |
| "Based on your measurements, consulting with a healthcare provider is strongly recommended.", |
| "Your BMI falls into a range associated with increased health risks requiring attention." |
| ] |
| }, |
| 'gut_health': { |
| 'good': [ |
| "Your dietary patterns suggest good intestinal health support.", |
| "Based on your nutrition intake, your gut microbiome appears well-supported.", |
| "Your current diet shows positive indicators for digestive wellness and gut barrier function.", |
| "Your eating patterns indicate healthy gut bacteria diversity support." |
| ], |
| 'moderate': [ |
| "Your gut health indicators show mixed results with room for improvement.", |
| "Your digestive health could benefit from targeted dietary adjustments.", |
| "There are opportunities to enhance your intestinal health through nutrition optimization.", |
| "Your gut health profile suggests moderate support with potential for enhancement." |
| ], |
| 'poor': [ |
| "Your dietary patterns suggest significant concerns for gut health and microbiome balance.", |
| "Your current nutrition may be negatively impacting digestive wellness and gut integrity.", |
| "Immediate attention to gut health through comprehensive dietary changes is recommended.", |
| "Your eating patterns indicate substantial risk to gut microbiome health." |
| ] |
| }, |
| 'diet_balance': { |
| 'excellent': [ |
| "Your dietary balance shows excellent nutritional variety and micronutrient density.", |
| "You're maintaining an outstanding balance of macronutrients and essential vitamins.", |
| "Your eating patterns reflect excellent nutritional awareness and food quality choices.", |
| "Your diet demonstrates superior balance across all major food groups and nutrients." |
| ], |
| 'good': [ |
| "Your diet shows good balance with minor opportunities for nutritional enhancement.", |
| "You're doing well with nutritional balance, with some areas to optimize for peak health.", |
| "Your dietary patterns are generally healthy with room for fine-tuning certain nutrients.", |
| "Your eating habits demonstrate good awareness with potential for strategic improvements." |
| ], |
| 'needs_improvement': [ |
| "Your dietary balance could significantly benefit from comprehensive nutritional adjustments.", |
| "There are important nutritional gaps that should be addressed for optimal health outcomes.", |
| "Your current eating patterns may not be supporting your body's full nutritional needs.", |
| "Substantial improvements in dietary balance could dramatically enhance your health profile." |
| ] |
| } |
| } |
| |
| |
| self.risk_indicators = { |
| 'high_risk': [ |
| 'diabetes', 'hypertension', 'obesity', 'smoking', 'high cholesterol', |
| 'heart disease', 'stroke', 'cancer', 'kidney disease', 'liver disease', |
| 'metabolic syndrome', 'sleep apnea', 'chronic pain', 'depression' |
| ], |
| 'moderate_risk': [ |
| 'overweight', 'sedentary', 'stress', 'poor sleep', 'processed food', |
| 'irregular meals', 'alcohol consumption', 'caffeine dependency', |
| 'low fiber', 'high sodium', 'sugar addiction', 'inflammation' |
| ], |
| 'protective': [ |
| 'exercise', 'vegetables', 'fruits', 'supplements', 'meditation', |
| 'good sleep', 'hydration', 'omega-3', 'probiotics', 'fiber', |
| 'antioxidants', 'yoga', 'walking', 'strength training' |
| ] |
| } |
| |
| |
| self.bmi_categories = { |
| 'underweight': (0, 18.5), |
| 'normal': (18.5, 25), |
| 'overweight': (25, 30), |
| 'obese': (30, float('inf')) |
| } |
|
|
| def _load_model(self): |
| """Load the model with proper error handling and fallback options""" |
| try: |
| |
| logger.info("Attempting to load custom health analysis model...") |
| self.tokenizer = AutoTokenizer.from_pretrained("Fahim18/health-analysis-biobert") |
| self.model = AutoModelForSequenceClassification.from_pretrained("Fahim18/health-analysis-biobert") |
| logger.info("Successfully loaded custom health analysis model") |
| except Exception as e: |
| logger.warning(f"Failed to load custom model: {e}") |
| try: |
| |
| logger.info("Loading base BioBERT model as fallback...") |
| self.tokenizer = AutoTokenizer.from_pretrained("dmis-lab/biobert-v1.1") |
| self.model = AutoModelForSequenceClassification.from_pretrained("dmis-lab/biobert-v1.1") |
| logger.info("Successfully loaded base BioBERT model") |
| except Exception as e2: |
| logger.error(f"Failed to load any model: {e2}") |
| raise RuntimeError("Unable to load any suitable model for health analysis") |
|
|
| def calculate_bmi(self, height_cm: float, weight_kg: float) -> Tuple[float, str]: |
| """Calculate BMI and return category""" |
| if height_cm <= 0 or weight_kg <= 0: |
| return None, "invalid" |
| |
| bmi = weight_kg / ((height_cm / 100) ** 2) |
| |
| for category, (min_val, max_val) in self.bmi_categories.items(): |
| if min_val <= bmi < max_val: |
| return round(bmi, 1), category |
| |
| return round(bmi, 1), "unknown" |
|
|
| def extract_health_info(self, text: str) -> Dict: |
| """Enhanced health information extraction with better pattern matching""" |
| text_lower = text.lower() |
| |
| health_info = { |
| 'age': None, |
| 'height_cm': None, |
| 'weight_kg': None, |
| 'bmi': None, |
| 'bmi_category': None, |
| 'gender': None, |
| 'medical_conditions': [], |
| 'medications': [], |
| 'diet_quality_indicators': [], |
| 'lifestyle_factors': [], |
| 'supplements': [], |
| 'risk_score': 0 |
| } |
| |
| |
| age_patterns = [ |
| r'(\d+)\s*(?:years?\s*old|year|yr|y\.o\.)', |
| r'age:?\s*(\d+)', |
| r'(\d+)\s*yr', |
| r'i\s*am\s*(\d+)' |
| ] |
| |
| for pattern in age_patterns: |
| age_match = re.search(pattern, text_lower) |
| if age_match: |
| health_info['age'] = int(age_match.group(1)) |
| break |
| |
| |
| height_patterns = [ |
| r'(\d+(?:\.\d+)?)\s*cm', |
| r'(\d+)\s*feet?\s*(\d+)\s*inch', |
| r'(\d+)\'(\d+)\"', |
| r'height:?\s*(\d+(?:\.\d+)?)\s*cm' |
| ] |
| |
| for pattern in height_patterns: |
| height_match = re.search(pattern, text_lower) |
| if height_match: |
| if 'feet' in pattern or '\'' in pattern: |
| |
| feet = int(height_match.group(1)) |
| inches = int(height_match.group(2)) if height_match.group(2) else 0 |
| health_info['height_cm'] = round((feet * 12 + inches) * 2.54, 1) |
| else: |
| health_info['height_cm'] = float(height_match.group(1)) |
| break |
| |
| |
| weight_patterns = [ |
| r'(\d+(?:\.\d+)?)\s*kg', |
| r'(\d+(?:\.\d+)?)\s*pound|lbs?', |
| r'weight:?\s*(\d+(?:\.\d+)?)\s*kg' |
| ] |
| |
| for pattern in weight_patterns: |
| weight_match = re.search(pattern, text_lower) |
| if weight_match: |
| weight = float(weight_match.group(1)) |
| if 'pound' in pattern or 'lb' in pattern: |
| |
| health_info['weight_kg'] = round(weight * 0.453592, 1) |
| else: |
| health_info['weight_kg'] = weight |
| break |
| |
| |
| if health_info['height_cm'] and health_info['weight_kg']: |
| bmi, category = self.calculate_bmi(health_info['height_cm'], health_info['weight_kg']) |
| health_info['bmi'] = bmi |
| health_info['bmi_category'] = category |
| |
| |
| gender_patterns = [ |
| r'\b(male|female|man|woman)\b', |
| r'gender:?\s*(male|female|m|f)\b' |
| ] |
| |
| for pattern in gender_patterns: |
| gender_match = re.search(pattern, text_lower) |
| if gender_match: |
| gender = gender_match.group(1) |
| health_info['gender'] = 'male' if gender in ['male', 'man', 'm'] else 'female' |
| break |
| |
| |
| self._extract_medical_info(text_lower, health_info) |
| |
| |
| health_info['risk_score'] = self._calculate_risk_score(health_info, text_lower) |
| |
| return health_info |
|
|
| def _extract_medical_info(self, text_lower: str, health_info: Dict): |
| """Extract medical conditions, medications, and supplements""" |
| |
| medical_conditions = [ |
| 'diabetes', 'hypertension', 'high blood pressure', 'heart disease', |
| 'obesity', 'depression', 'anxiety', 'arthritis', 'asthma', |
| 'high cholesterol', 'kidney disease', 'liver disease' |
| ] |
| |
| for condition in medical_conditions: |
| if condition in text_lower: |
| health_info['medical_conditions'].append(condition) |
| |
| |
| medications = [ |
| 'lisinopril', 'metformin', 'atorvastatin', 'amlodipine', |
| 'losartan', 'hydrochlorothiazide', 'simvastatin', 'omeprazole' |
| ] |
| |
| for med in medications: |
| if med in text_lower: |
| health_info['medications'].append(med) |
| |
| |
| supplements = [ |
| 'vitamin d', 'vitamin b12', 'vitamin c', 'magnesium', |
| 'probiotics', 'omega-3', 'fish oil', 'multivitamin', |
| 'calcium', 'iron', 'zinc', 'biotin' |
| ] |
| |
| for supplement in supplements: |
| if supplement in text_lower: |
| health_info['supplements'].append(supplement) |
|
|
| def _calculate_risk_score(self, health_info: Dict, text_lower: str) -> int: |
| """Calculate a composite risk score based on extracted information""" |
| score = 0 |
| |
| |
| if health_info['age']: |
| if health_info['age'] > 65: |
| score += 3 |
| elif health_info['age'] > 50: |
| score += 2 |
| elif health_info['age'] > 30: |
| score += 1 |
| |
| |
| if health_info['bmi_category']: |
| if health_info['bmi_category'] in ['obese']: |
| score += 4 |
| elif health_info['bmi_category'] in ['overweight']: |
| score += 2 |
| elif health_info['bmi_category'] in ['underweight']: |
| score += 1 |
| |
| |
| score += len(health_info['medical_conditions']) * 2 |
| |
| |
| for risk_factor in self.risk_indicators['high_risk']: |
| if risk_factor in text_lower: |
| score += 2 |
| |
| for risk_factor in self.risk_indicators['moderate_risk']: |
| if risk_factor in text_lower: |
| score += 1 |
| |
| |
| for protective_factor in self.risk_indicators['protective']: |
| if protective_factor in text_lower: |
| score = max(0, score - 1) |
| |
| return min(score, 20) |
|
|
| def generate_risk_assessment(self, probabilities: torch.Tensor, health_info: Dict) -> List[str]: |
| """Generate detailed risk assessment based on model output and health info""" |
| assessment_parts = [] |
| |
| if len(probabilities) >= 3: |
| bmi_prob = probabilities[0].item() |
| gut_prob = probabilities[1].item() |
| diet_prob = probabilities[2].item() |
| else: |
| |
| avg_prob = probabilities.mean().item() |
| bmi_prob = gut_prob = diet_prob = avg_prob |
| |
| |
| if health_info['bmi'] and health_info['bmi_category']: |
| if health_info['bmi_category'] == 'normal': |
| bmi_category = 'optimal' |
| elif health_info['bmi_category'] in ['overweight', 'underweight']: |
| bmi_category = 'suboptimal' |
| else: |
| bmi_category = 'concerning' |
| else: |
| |
| if bmi_prob > 0.7: |
| bmi_category = 'optimal' |
| elif bmi_prob > 0.4: |
| bmi_category = 'suboptimal' |
| else: |
| bmi_category = 'concerning' |
| |
| assessment_parts.append(random.choice(self.response_templates['bmi_assessment'][bmi_category])) |
| |
| |
| if gut_prob > 0.6: |
| gut_category = 'good' |
| elif gut_prob > 0.3: |
| gut_category = 'moderate' |
| else: |
| gut_category = 'poor' |
| |
| assessment_parts.append(random.choice(self.response_templates['gut_health'][gut_category])) |
| |
| |
| if diet_prob > 0.7: |
| diet_category = 'excellent' |
| elif diet_prob > 0.4: |
| diet_category = 'good' |
| else: |
| diet_category = 'needs_improvement' |
| |
| assessment_parts.append(random.choice(self.response_templates['diet_balance'][diet_category])) |
| |
| return assessment_parts |
|
|
| def generate_personalized_recommendations(self, health_info: Dict, probabilities: torch.Tensor) -> List[str]: |
| """Generate comprehensive personalized recommendations""" |
| recommendations = [] |
| |
| |
| if health_info['age']: |
| if health_info['age'] > 65: |
| recommendations.extend([ |
| "Regular comprehensive health screenings are crucial at your age.", |
| "Consider bone density testing and fall prevention strategies.", |
| "Prioritize balance and flexibility exercises alongside cardiovascular fitness." |
| ]) |
| elif health_info['age'] > 50: |
| recommendations.extend([ |
| "Annual health screenings become increasingly important.", |
| "Focus on maintaining muscle mass through resistance training." |
| ]) |
| elif health_info['age'] > 30: |
| recommendations.append("This is an excellent time to establish healthy habits for long-term wellness.") |
| |
| |
| if health_info['bmi_category']: |
| if health_info['bmi_category'] == 'obese': |
| recommendations.extend([ |
| "Consider working with a healthcare provider on a comprehensive weight management plan.", |
| "Focus on sustainable lifestyle changes rather than rapid weight loss." |
| ]) |
| elif health_info['bmi_category'] == 'overweight': |
| recommendations.append("Small, consistent changes in diet and exercise can help achieve a healthier weight.") |
| elif health_info['bmi_category'] == 'underweight': |
| recommendations.append("Consider consulting a nutritionist to safely increase muscle mass and overall weight.") |
| |
| |
| if 'diabetes' in health_info['medical_conditions']: |
| recommendations.extend([ |
| "Regular blood glucose monitoring and A1C testing are essential.", |
| "Focus on complex carbohydrates and consistent meal timing." |
| ]) |
| |
| if 'hypertension' in health_info['medical_conditions']: |
| recommendations.extend([ |
| "Monitor blood pressure regularly and follow DASH diet principles.", |
| "Limit sodium intake and prioritize potassium-rich foods." |
| ]) |
| |
| |
| if health_info['risk_score'] > 10: |
| recommendations.append("Given multiple risk factors, working closely with healthcare providers is essential.") |
| elif health_info['risk_score'] > 5: |
| recommendations.append("Addressing current risk factors can significantly improve your long-term health outlook.") |
| |
| |
| if len(probabilities) > 2 and probabilities[2].item() < 0.5: |
| recommendations.extend([ |
| "Increase intake of colorful vegetables and fruits to at least 5 servings daily.", |
| "Reduce processed foods and added sugars for better metabolic health.", |
| "Consider meal planning to ensure consistent nutrition quality." |
| ]) |
| |
| if len(probabilities) > 1 and probabilities[1].item() < 0.4: |
| recommendations.extend([ |
| "Support gut health with prebiotic and probiotic foods.", |
| "Increase fiber intake gradually to improve digestive wellness." |
| ]) |
| |
| |
| if not health_info['supplements']: |
| recommendations.append("Consider discussing basic supplementation (Vitamin D, B12) with your healthcare provider.") |
| |
| return recommendations[:8] |
|
|
| def generate_overall_risk_summary(self, probabilities: torch.Tensor, health_info: Dict) -> str: |
| """Generate comprehensive overall risk summary""" |
| if not probabilities.numel(): |
| return "Unable to assess risk based on provided information." |
| |
| |
| if health_info['risk_score']: |
| risk_score = health_info['risk_score'] |
| if risk_score <= 3: |
| risk_level = "low" |
| summary = "Your overall health profile suggests you're managing well with low risk factors. Continue maintaining your current healthy practices while staying vigilant about preventive care." |
| elif risk_score <= 8: |
| risk_level = "moderate" |
| summary = "Your health profile shows both strengths and areas for improvement. With targeted lifestyle modifications, you can significantly enhance your wellness and reduce future health risks." |
| else: |
| risk_level = "elevated" |
| summary = "Your health indicators suggest several areas requiring immediate attention. Consider developing a comprehensive wellness plan with healthcare professionals to address multiple risk factors." |
| else: |
| |
| avg_score = probabilities.mean().item() |
| if avg_score > 0.7: |
| risk_level = "low" |
| summary = "Your overall health indicators suggest you're on a positive trajectory. Continue maintaining your current healthy practices." |
| elif avg_score > 0.4: |
| risk_level = "moderate" |
| summary = "Your health profile shows both strengths and areas for improvement. With some targeted changes, you can significantly enhance your wellness." |
| else: |
| risk_level = "elevated" |
| summary = "Your health indicators suggest several areas that need attention. Consider consulting with healthcare professionals for a comprehensive wellness plan." |
| |
| return f"**Overall Risk Level: {risk_level.upper()}**\n\n{summary}" |
|
|
| def process_outputs(self, outputs, text_input: str) -> str: |
| """Enhanced output processing with comprehensive analysis""" |
| try: |
| logits = outputs.logits |
| probabilities = torch.softmax(logits, dim=-1) |
| |
| |
| health_info = self.extract_health_info(text_input) |
| |
| |
| risk_assessments = self.generate_risk_assessment(probabilities[0], health_info) |
| recommendations = self.generate_personalized_recommendations(health_info, probabilities[0]) |
| overall_summary = self.generate_overall_risk_summary(probabilities[0], health_info) |
| |
| |
| response_parts = [ |
| "# π₯ Comprehensive Health Analysis\n", |
| overall_summary, |
| "\n## π Health Profile Summary" |
| ] |
| |
| |
| if health_info['age']: |
| response_parts.append(f"**Age:** {health_info['age']} years") |
| |
| if health_info['bmi']: |
| response_parts.append(f"**BMI:** {health_info['bmi']} ({health_info['bmi_category'].title()})") |
| |
| if health_info['medical_conditions']: |
| response_parts.append(f"**Medical Conditions:** {', '.join(health_info['medical_conditions']).title()}") |
| |
| if health_info['medications']: |
| response_parts.append(f"**Medications:** {', '.join(health_info['medications']).title()}") |
| |
| response_parts.append("\n## π Detailed Health Assessment") |
| |
| for i, assessment in enumerate(risk_assessments, 1): |
| response_parts.append(f"**{i}.** {assessment}") |
| |
| if recommendations: |
| response_parts.append("\n## π‘ Personalized Recommendations") |
| for i, rec in enumerate(recommendations, 1): |
| response_parts.append(f"**{i}.** {rec}") |
| |
| |
| response_parts.append("\n## π Health Scores") |
| if len(probabilities[0]) >= 3: |
| response_parts.extend([ |
| f"- **BMI Health Score:** {probabilities[0][0].item()*100:.1f}%", |
| f"- **Gut Health Score:** {probabilities[0][1].item()*100:.1f}%", |
| f"- **Diet Balance Score:** {probabilities[0][2].item()*100:.1f}%" |
| ]) |
| |
| if health_info['risk_score']: |
| response_parts.append(f"- **Overall Risk Score:** {health_info['risk_score']}/20") |
| |
| response_parts.extend([ |
| "\n---", |
| "β οΈ **Important Disclaimer:** This analysis is for informational purposes only and should not replace professional medical advice. Always consult with qualified healthcare providers for medical decisions." |
| ]) |
| |
| return "\n".join(response_parts) |
| |
| except Exception as e: |
| logger.error(f"Error in process_outputs: {e}") |
| return f"An error occurred during analysis: {str(e)}\nPlease check your input and try again." |
|
|
| def create_health_analyzer(): |
| """Factory function to create health analyzer with error handling""" |
| try: |
| return HealthAnalysisNLG() |
| except Exception as e: |
| logger.error(f"Failed to initialize health analyzer: {e}") |
| return None |
|
|
| |
| health_analyzer = create_health_analyzer() |
|
|
| def predict(text_input: str) -> str: |
| """Main prediction function with enhanced error handling""" |
| if not text_input or not text_input.strip(): |
| return "Please provide your health information for analysis. Include details like age, height, weight, medical conditions, diet, exercise habits, etc." |
| |
| if not health_analyzer or not health_analyzer.model: |
| return "β **System Error:** Health analysis model is not available. Please try again later." |
| |
| try: |
| |
| inputs = health_analyzer.tokenizer( |
| text_input, |
| return_tensors="pt", |
| padding=True, |
| truncation=True, |
| max_length=512 |
| ) |
| |
| with torch.no_grad(): |
| outputs = health_analyzer.model(**inputs) |
| |
| |
| return health_analyzer.process_outputs(outputs, text_input) |
| |
| except Exception as e: |
| logger.error(f"Prediction error: {e}") |
| return f"β **Analysis Error:** {str(e)}\n\nPlease check your input format and try again. Ensure you include relevant health information like age, medical conditions, lifestyle factors, etc." |
|
|
| def create_interface(): |
| """Create an enhanced Gradio interface with better styling and examples""" |
| |
| enhanced_examples = [ |
| [ |
| "I am a 32-year-old male, 175cm tall, weighing 72kg. I have hypertension and high cholesterol. " |
| "I take Lisinopril daily. My diet includes 2 servings of fruits and 3 servings of vegetables daily, " |
| "with 1 serving of red meat per week and about 20g of sugar daily. I exercise 4 hours weekly, " |
| "sleep 7 hours nightly, and have moderate stress levels. I take probiotics, Vitamin D, B12, and Magnesium supplements." |
| ], |
| [ |
| "45-year-old female, 165cm, 78kg, diabetes type 2, taking metformin. Sedentary job, high stress, " |
| "poor diet with lots of processed foods, irregular meals. Sleep 5-6 hours nightly. No supplements." |
| ], |
| [ |
| "28-year-old female athlete, 170cm, 60kg, excellent physical condition, trains 6 days per week. " |
| "Balanced Mediterranean diet, 8 hours sleep, low stress. Takes multivitamins and protein supplements." |
| ], |
| [ |
| "67-year-old male, 180cm, 85kg, heart disease, arthritis, taking atorvastatin and ibuprofen. " |
| "Limited mobility, walks 30 minutes daily. Diet includes fish twice weekly, vegetables daily, some processed foods." |
| ] |
| ] |
| |
| interface = gr.Interface( |
| fn=predict, |
| inputs=gr.Textbox( |
| label="π©Ί Enter Your Comprehensive Health Information", |
| placeholder="Provide detailed information including: age, height, weight, gender, medical conditions, medications, diet details, exercise habits, sleep patterns, stress levels, supplements, etc. The more detailed your input, the more accurate and personalized your analysis will be.", |
| lines=6, |
| max_lines=10 |
| ), |
| outputs=gr.Textbox( |
| label="π Comprehensive Health Analysis & Personalized Recommendations", |
| lines=20, |
| max_lines=30 |
| ), |
| title="π₯ AI-Powered Comprehensive Health Risk Assessment", |
| description=""" |
| **Welcome to your personalized health analysis system!** |
| |
| This advanced AI tool analyzes your health information using BioBERT (a specialized medical AI model) to provide: |
| - β
Comprehensive health risk assessment |
| - π BMI analysis and categorization |
| - π¦ Gut health evaluation |
| - π₯ Dietary balance assessment |
| - π‘ Personalized health recommendations |
| - π Detailed health scores and metrics |
| |
| **For best results, include:** demographics, medical history, current medications, detailed diet information, exercise habits, sleep patterns, stress levels, and any supplements you take. |
| """, |
| examples=enhanced_examples, |
| theme=gr.themes.Soft(), |
| css=""" |
| .gradio-container { |
| font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; |
| } |
| .gr-button-primary { |
| background: linear-gradient(45deg, #2196F3, #21CBF3); |
| border: none; |
| } |
| .gr-box { |
| border-radius: 10px; |
| } |
| """, |
| allow_flagging="never" |
| ) |
| |
| return interface |
|
|
| |
| if __name__ == "__main__": |
| if health_analyzer: |
| interface = create_interface() |
| interface.launch( |
| share=True, |
| server_name="0.0.0.0", |
| server_port=7860, |
| show_error=True |
| ) |
| else: |
| logger.error("Failed to initialize health analyzer. Cannot start interface.") |
| print("β Failed to initialize the health analysis system. Please check the logs for details.") |