Spaces:
Sleeping
Sleeping
| import json | |
| import os | |
| import random | |
| from typing import List, Dict, Any | |
| # PATH SETUP (Docker-safe) | |
| BASE_DIR = os.path.dirname(os.path.abspath(__file__)) | |
| PROJECT_ROOT = os.path.dirname(BASE_DIR) | |
| DATASET_PATH = os.path.join(PROJECT_ROOT, "datasets", "disorders.json") | |
| # LOAD DATASET | |
| def load_disorders() -> List[Dict[str, Any]]: | |
| try: | |
| print(f"Loading dataset from: {DATASET_PATH}") | |
| with open(DATASET_PATH, "r", encoding="utf-8") as f: | |
| data = json.load(f) | |
| if not isinstance(data, list): | |
| raise ValueError("Dataset must be a list of disorder objects") | |
| print(f"Loaded {len(data)} disorders successfully ✅") | |
| return data | |
| except FileNotFoundError: | |
| print(f"❌ File not found: {DATASET_PATH}") | |
| return [] | |
| except json.JSONDecodeError: | |
| print(f"❌ Invalid JSON format in {DATASET_PATH}") | |
| return [] | |
| except Exception as e: | |
| print(f"❌ Unexpected error: {e}") | |
| return [] | |
| # INITIALIZE DATA | |
| disorders: List[Dict[str, Any]] = load_disorders() | |
| # CREATE FAST LOOKUP MAP | |
| disorders_map: Dict[str, Dict[str, Any]] = { | |
| d["name"]: d for d in disorders | |
| } | |
| # FUNCTIONS | |
| def get_random_disorder(n: int = 1) -> List[Dict[str, Any]]: | |
| if not disorders: | |
| return [] | |
| n = min(n, len(disorders)) | |
| return random.sample(disorders, n) | |
| def get_random_disorder_names(n: int = 1) -> List[str]: | |
| return [d["name"] for d in get_random_disorder(n)] | |
| def get_disorder_info(name: str) -> Dict[str, Any]: | |
| return disorders_map.get(name, {}) | |
| def get_symptoms(name: str, category: str = "emotional") -> List[str]: | |
| disorder = get_disorder_info(name) | |
| return disorder.get("symptoms", {}).get(category, []) | |
| def get_trigger_keywords(name: str) -> List[str]: | |
| disorder = get_disorder_info(name) | |
| return disorder.get("trigger_keywords", []) | |
| def get_random_symptom(name: str, category: str = "emotional") -> str: | |
| symptoms = get_symptoms(name, category) | |
| return random.choice(symptoms) if symptoms else "" | |
| # TEST (only runs directly) | |
| if __name__ == "__main__": | |
| print("Random disorder:", get_random_disorder(2)) | |
| if disorders: | |
| name = disorders[0]["name"] | |
| print("Sample disorder:", name) | |
| print("Symptoms:", get_random_symptom(name)) |