From 2d87641cfd9a5f57ed31766d815f6e7deea417c8 Mon Sep 17 00:00:00 2001 From: Dita Aji Pratama Date: Sun, 12 Jul 2026 15:01:17 +0700 Subject: [PATCH] Refactor --- config.py | 36 ++++++++++++++++-------------------- default-config.yaml | 3 +++ lib/personality.py | 27 ++++++++++++++------------- 3 files changed, 33 insertions(+), 33 deletions(-) diff --git a/config.py b/config.py index 40ea9c9..0ae8003 100644 --- a/config.py +++ b/config.py @@ -2,9 +2,6 @@ import os from pathlib import Path import yaml -from dotenv import load_dotenv - -load_dotenv() def _yaml_get(*keys, default=None): @@ -72,12 +69,12 @@ if not llm_model and MODELS_ITEMS: llm_api_key = MODELS_ITEMS[0]["api_key" ] -XMPP_USERNAME = os.getenv("XMPP_USERNAME", default="") -XMPP_PASSWORD = os.getenv("XMPP_PASSWORD", default="") +XMPP_USERNAME = _yaml_get("xmpp", "username", default="") +XMPP_PASSWORD = _yaml_get("xmpp", "password", default="") -AGENT_MAX_ITERATIONS = int(os.getenv("AGENT_MAX_ITERATIONS", default=_yaml_get("agent", "max_iterations", default="30"))) -AGENT_MAX_TOOL_OUTPUT = int(os.getenv("AGENT_MAX_TOOL_OUTPUT", default=_yaml_get("agent", "max_tool_output", default="40000"))) +AGENT_MAX_ITERATIONS = int(_yaml_get("agent", "max_iterations", default="30")) +AGENT_MAX_TOOL_OUTPUT = int(_yaml_get("agent", "max_tool_output", default="40000")) AGENT_SKILL = "programmer" PERSONALITY_NAME = "Hendrik" @@ -94,30 +91,29 @@ PERSONALITY_CATCHPHRASES = "" # ─── Character & Skills ──────────────────────────────────────────────────────── AGENT_CHARACTER = _yaml_get("agent", "character", default="").strip().lower() -AGENT_SKILLS = os.getenv("AGENT_SKILLS", default="").strip().lower() +AGENT_SKILLS = _yaml_get("agent", "skills", default="").strip().lower() -# ─── XMPP (non-credential dari YAML, credential dari .env) ───────────────────── +# ─── XMPP ────────────────────────────────────────────────────────────────────── -XMPP_ENABLED = os.getenv("XMPP_ENABLED", default=str(_yaml_get("xmpp", "enabled", default="false"))).strip().lower() in ("true", "1", "yes") -XMPP_MUC_ROOMS = os.getenv("XMPP_MUC_ROOMS", default=_yaml_get("xmpp", "muc_rooms", default="")).strip() -XMPP_NICKNAME = os.getenv("XMPP_NICKNAME", default=_yaml_get("xmpp", "nickname", default="")).strip() - -XMPP_SELECTIVE_RESPONSE = os.getenv("XMPP_SELECTIVE_RESPONSE", default=str(_yaml_get("xmpp", "selective_response", default="true"))).strip().lower() in ("true", "1", "yes") +XMPP_ENABLED = str(_yaml_get("xmpp", "enabled", default="false")).strip().lower() in ("true", "1", "yes") +XMPP_MUC_ROOMS = _yaml_get("xmpp", "muc_rooms", default="").strip() +XMPP_NICKNAME = _yaml_get("xmpp", "nickname", default="").strip() +XMPP_SELECTIVE_RESPONSE = str(_yaml_get("xmpp", "selective_response", default="true")).strip().lower() in ("true", "1", "yes") -# ─── Telegram (non-credential dari YAML, credential dari .env) ───────────────── +# ─── Telegram ────────────────────────────────────────────────────────────────── -TELEGRAM_ENABLED = os.getenv("TELEGRAM_ENABLED", default=str(_yaml_get("telegram", "enabled", default="false"))).strip().lower() in ("true", "1", "yes") -TELEGRAM_TOKEN = os.getenv("TELEGRAM_TOKEN", default="") -TELEGRAM_ALLOWED_GROUP_IDS = os.getenv("TELEGRAM_ALLOWED_GROUP_IDS", default=_yaml_get("telegram", "allowed_group_ids", default="")).strip() -TELEGRAM_SELECTIVE_RESPONSE = os.getenv("TELEGRAM_SELECTIVE_RESPONSE", default=str(_yaml_get("telegram", "selective_response", default="true"))).strip().lower() in ("true", "1", "yes") +TELEGRAM_ENABLED = str(_yaml_get("telegram", "enabled", default="false")).strip().lower() in ("true", "1", "yes") +TELEGRAM_TOKEN = _yaml_get("telegram", "token", default="") +TELEGRAM_ALLOWED_GROUP_IDS = _yaml_get("telegram", "allowed_group_ids", default="").strip() +TELEGRAM_SELECTIVE_RESPONSE = str(_yaml_get("telegram", "selective_response", default="true")).strip().lower() in ("true", "1", "yes") # ─── Session (TinyDB) ──────────────────────────────────────────────────────────── SESSION_DB_PATH = os.path.expanduser( - os.getenv("SESSION_DB_PATH", default=_yaml_get("session", "db_path", default="~/.config/hendrik/sessions.json")) + _yaml_get("session", "db_path", default="~/.config/hendrik/sessions.json") ) # Humanize Delay (YAML) diff --git a/default-config.yaml b/default-config.yaml index 4304562..689fa4c 100644 --- a/default-config.yaml +++ b/default-config.yaml @@ -45,12 +45,15 @@ session: xmpp: enabled: false + username: "" + password: "" muc_rooms: "" # comma-separated, e.g. "room1@conference.server,room2@conference.server" nickname: "" # custom MUC nickname (empty = use username) selective_response: true # true = only response if mentioned/relevant telegram: enabled: false + token: "" allowed_group_ids: "" # comma-separated, empty = all group selective_response: true # true = only response if mentioned/relevant diff --git a/lib/personality.py b/lib/personality.py index 693206e..617c973 100644 --- a/lib/personality.py +++ b/lib/personality.py @@ -10,13 +10,14 @@ Arsitektur: Load order: Base → Character → Policies → Skills """ -import os import re from dataclasses import dataclass, field from pathlib import Path import yaml +import config + # ─── Paths ──────────────────────────────────────────────────────────────────── @@ -28,7 +29,7 @@ SKILLS_DIR = BASE_DIR / "skills" # ─── Mode / Skill ────────────────────────────────────────────────────────────── -SKILL = os.getenv("AGENT_SKILL", default="programmer").strip().lower() +SKILL = config.AGENT_SKILL # ─── Personality Configuration ──────────────────────────────────────────────── @@ -49,19 +50,19 @@ class PersonalityConfig: def _load_personality_from_env() -> PersonalityConfig: - """Baca personality config dari environment variables.""" - raw_catchphrases = os.getenv("PERSONALITY_CATCHPHRASES", default="").strip() + """Baca personality config dari config module globals.""" + raw_catchphrases = config.PERSONALITY_CATCHPHRASES.strip() catchphrases = [c.strip() for c in raw_catchphrases.split(",") if c.strip()] if raw_catchphrases else [] return PersonalityConfig( - name=os.getenv("PERSONALITY_NAME", default="OWL").strip() or "OWL", - age=os.getenv("PERSONALITY_AGE", default="").strip(), - gender=os.getenv("PERSONALITY_GENDER", default="").strip(), - tone=os.getenv("PERSONALITY_TONE", default="casual").strip().lower() or "casual", - verbosity=os.getenv("PERSONALITY_VERBOSITY", default="balanced").strip().lower() or "balanced", - humor_level=os.getenv("PERSONALITY_HUMOR", default="light").strip().lower() or "light", - language=os.getenv("PERSONALITY_LANGUAGE", default="id").strip().lower() or "id", - mood=os.getenv("PERSONALITY_MOOD", default="cheerful").strip().lower() or "cheerful", + name=config.PERSONALITY_NAME.strip() or "OWL", + age=config.PERSONALITY_AGE.strip(), + gender=config.PERSONALITY_GENDER.strip(), + tone=config.PERSONALITY_TONE.strip().lower() or "casual", + verbosity=config.PERSONALITY_VERBOSITY.strip().lower() or "balanced", + humor_level=config.PERSONALITY_HUMOR.strip().lower() or "light", + language=config.PERSONALITY_LANGUAGE.strip().lower() or "id", + mood=config.PERSONALITY_MOOD.strip().lower() or "cheerful", catchphrases=catchphrases, ) @@ -317,7 +318,7 @@ def build_system_prompt( # personality.yaml meng-override skill → pakai skill dari personality.yaml skills_list = [selected_skill] if selected_skill in ("programmer", "roleplayer", "analyst", "strategist") else [] else: - skills_env = os.getenv("AGENT_SKILLS", default="").strip() + skills_env = config.AGENT_SKILLS.strip() if skills_env: skills_list = [s.strip() for s in skills_env.split(",") if s.strip()] else: