| | """ |
| | ⚙️ Haven Kitchen OS Configuration |
| | User preferences and system settings. |
| | """ |
| |
|
| | import os |
| | import json |
| | from pathlib import Path |
| | from dataclasses import dataclass, field |
| | from dotenv import load_dotenv |
| |
|
| | load_dotenv() |
| |
|
| |
|
| | @dataclass |
| | class SystemConfig: |
| | base_dir: Path = Path(__file__).parent.parent |
| | prefs_file: Path = base_dir / "user_preferences.json" |
| | |
| | |
| | groq_key: str = os.getenv("GROQ_API_KEY") |
| | serper_key: str = os.getenv("SERPER_API_KEY") |
| | openai_api_key: str = os.getenv("OPENAI_API_KEY") |
| | elevenlabs_key: str = os.getenv("ELEVENLABS_API_KEY") |
| | |
| | |
| | user_name: str = "Friend" |
| | location: str = "Denver, CO" |
| | dietary_restrictions: str = "None" |
| | user_avatar: str = "👩🏻" |
| | meal_times: dict = field(default_factory=lambda: { |
| | "breakfast": {"start": "06:00 AM", "end": "10:00 AM"}, |
| | "lunch": {"start": "11:30 AM", "end": "02:00 PM"}, |
| | "dinner": {"start": "05:00 PM", "end": "08:00 PM"} |
| | }) |
| |
|
| | def __post_init__(self): |
| | self.load_preferences() |
| |
|
| | def load_preferences(self): |
| | if self.prefs_file.exists(): |
| | try: |
| | with open(self.prefs_file, 'r') as f: |
| | data = json.load(f) |
| | self.user_name = data.get("user_name", self.user_name) |
| | self.location = data.get("location", self.location) |
| | self.dietary_restrictions = data.get("dietary_restrictions", self.dietary_restrictions) |
| | self.meal_times = data.get("meal_times", self.meal_times) |
| | self.user_avatar = data.get("user_avatar", self.user_avatar) |
| | except: |
| | pass |
| | else: |
| | self.save_preferences() |
| |
|
| | def save_preferences(self): |
| | data = { |
| | "user_name": self.user_name, |
| | "location": self.location, |
| | "dietary_restrictions": self.dietary_restrictions, |
| | "meal_times": self.meal_times, |
| | "user_avatar": self.user_avatar |
| | } |
| | with open(self.prefs_file, 'w') as f: |
| | json.dump(data, f, indent=4) |
| |
|