diff --git a/cli.py b/cli.py index d711da1723..a09d501621 100755 --- a/cli.py +++ b/cli.py @@ -55,7 +55,10 @@ from hermes_constants import OPENROUTER_BASE_URL env_path = Path(__file__).parent / '.env' if env_path.exists(): - load_dotenv(dotenv_path=env_path) + try: + load_dotenv(dotenv_path=env_path, encoding="utf-8") + except UnicodeDecodeError: + load_dotenv(dotenv_path=env_path, encoding="latin-1") # ============================================================================= # Configuration Loading @@ -133,7 +136,10 @@ def load_cli_config() -> Dict[str, Any]: user_env_path = Path.home() / '.hermes' / '.env' if user_env_path.exists(): from dotenv import load_dotenv - load_dotenv(dotenv_path=user_env_path, override=True) + try: + load_dotenv(dotenv_path=user_env_path, override=True, encoding="utf-8") + except UnicodeDecodeError: + load_dotenv(dotenv_path=user_env_path, override=True, encoding="latin-1") # Default configuration defaults = { diff --git a/cron/scheduler.py b/cron/scheduler.py index 74be6da698..8935769162 100644 --- a/cron/scheduler.py +++ b/cron/scheduler.py @@ -155,7 +155,10 @@ def run_job(job: dict) -> tuple[bool, str, str, Optional[str]]: # Re-read .env and config.yaml fresh every run so provider/key # changes take effect without a gateway restart. from dotenv import load_dotenv - load_dotenv(os.path.expanduser("~/.hermes/.env"), override=True) + try: + load_dotenv(os.path.expanduser("~/.hermes/.env"), override=True, encoding="utf-8") + except UnicodeDecodeError: + load_dotenv(os.path.expanduser("~/.hermes/.env"), override=True, encoding="latin-1") model = os.getenv("HERMES_MODEL", "anthropic/claude-opus-4.6") api_key = os.getenv("OPENROUTER_API_KEY", "") diff --git a/gateway/run.py b/gateway/run.py index ebc59be352..72986e3dc8 100644 --- a/gateway/run.py +++ b/gateway/run.py @@ -32,7 +32,10 @@ sys.path.insert(0, str(Path(__file__).parent.parent)) from dotenv import load_dotenv _env_path = Path.home() / '.hermes' / '.env' if _env_path.exists(): - load_dotenv(_env_path) + try: + load_dotenv(_env_path, encoding="utf-8") + except UnicodeDecodeError: + load_dotenv(_env_path, encoding="latin-1") # Also try project .env as fallback load_dotenv() diff --git a/hermes_cli/doctor.py b/hermes_cli/doctor.py index 6a103a372f..f9156354a1 100644 --- a/hermes_cli/doctor.py +++ b/hermes_cli/doctor.py @@ -19,9 +19,12 @@ HERMES_HOME = get_hermes_home() from dotenv import load_dotenv _env_path = get_env_path() if _env_path.exists(): - load_dotenv(_env_path) + try: + load_dotenv(_env_path, encoding="utf-8") + except UnicodeDecodeError: + load_dotenv(_env_path, encoding="latin-1") # Also try project .env as fallback -load_dotenv(PROJECT_ROOT / ".env", override=False) +load_dotenv(PROJECT_ROOT / ".env", override=False, encoding="utf-8") from hermes_cli.colors import Colors, color from hermes_constants import OPENROUTER_MODELS_URL diff --git a/hermes_cli/main.py b/hermes_cli/main.py index 18d71451b9..544932020d 100644 --- a/hermes_cli/main.py +++ b/hermes_cli/main.py @@ -37,7 +37,10 @@ sys.path.insert(0, str(PROJECT_ROOT)) from dotenv import load_dotenv env_path = PROJECT_ROOT / '.env' if env_path.exists(): - load_dotenv(dotenv_path=env_path) + try: + load_dotenv(dotenv_path=env_path, encoding="utf-8") + except UnicodeDecodeError: + load_dotenv(dotenv_path=env_path, encoding="latin-1") import logging diff --git a/run_agent.py b/run_agent.py index 94f683e297..0c73e44d56 100644 --- a/run_agent.py +++ b/run_agent.py @@ -43,7 +43,10 @@ from dotenv import load_dotenv # Load .env file if it exists env_path = Path(__file__).parent / '.env' if env_path.exists(): - load_dotenv(dotenv_path=env_path) + try: + load_dotenv(dotenv_path=env_path, encoding="utf-8") + except UnicodeDecodeError: + load_dotenv(dotenv_path=env_path, encoding="latin-1") logger.info("Loaded environment variables from %s", env_path) else: logger.info("No .env file found at %s. Using system environment variables.", env_path)