Spaces:
Sleeping
Sleeping
| import random | |
| from api.models.schemas import DiagnosisResultPerDisease, DiagnosisResponse | |
| # Interfacage du modèle de ML (Spark) avec l'API FastAPI. | |
| # Pour l'instant, on simule les prédictions avec des valeurs aléatoires. | |
| MOCK_CONDITIONS = [ | |
| "Malaria", "Typhoid Fever", "Influenza", "Dengue Fever", | |
| "Pneumonia", "Gastroenteritis", "Meningitis", "Cholera" | |
| ] | |
| def get_mock_diagnosis(symptoms: list[str], age: int, sex: str, medical_history: str, geolocation: str) -> DiagnosisResponse: | |
| """ | |
| Simule la prediction du modèle de ML en retournant 3 conditions médicales aléatoires avec des probabilités et une recommandation. | |
| Fonction reelle: model.predict_proba(encode_symptoms(symptoms)) | |
| """ | |
| # Choisir 3 conditions au hasard parmi la liste, avec des probabilités aléatoires | |
| selected = random.sample(MOCK_CONDITIONS, 3) | |
| # Genere les probabilités aléatoires et les normalise pour que la somme soit 1 | |
| raw = sorted([random.random() for _ in selected], reverse=True) | |
| total = sum(raw) | |
| probabilities = [round(p / total, 2) for p in raw] | |
| statistics = [ | |
| DiagnosisResultPerDisease( | |
| name=disease, | |
| probability=prob, | |
| level="level_high" if prob > 0.7 else "level_medium" if prob < 0.4 else "level_low", | |
| symptoms=symptoms | |
| ) | |
| for disease, prob in zip(selected, probabilities) | |
| ] | |
| return DiagnosisResponse( | |
| statistics=statistics, | |
| recommendation=_get_recommendation(statistics[0].level) | |
| ) | |
| def _get_recommendation(severity: str) -> str: | |
| return { | |
| "level_high": "Veuillez consulter un médecin immédiatement ou rendez-vous aux urgences.", | |
| "level_moderate": "Veuillez surveiller vos symptômes et consulter un médecin si ceux-ci s'aggravent.", | |
| "level_low": "Restez au repos et hydratez-vous. Consultez un médecin si les symptômes persistent." | |
| }.get(severity, "Consultez un professionnel de santé.") | |
| # === Chargeur de modèle réel (a implémenter plus tard) === | |
| # import pickle | |
| # | |
| # _model = None | |
| # | |
| # def load_model(): | |
| # global _model | |
| # with open("saved_models/spark_model.pkl", "rb") as f: | |
| # _model = pickle.load(f) | |
| # | |
| # def encode_symptoms(symptoms: list[str]) -> list[int]: | |
| # # Convertit la liste de symptômes en un vecteur binaire pour le modèle ML. | |
| # ALL_SYMPTOMS = [...] # full list from your dataset | |
| # return [1 if s in symptoms else 0 for s in ALL_SYMPTOMS] | |
| # | |
| # def get_real_diagnosis(symptoms: list[str]) -> DiagnosisResponse: | |
| # vector = encode_symptoms(symptoms) | |
| # probas = _model.predict_proba([vector])[0] | |
| # classes = _model.classes_ | |
| # ... | |