This commit is contained in:
Dita Aji Pratama 2026-07-12 15:01:17 +07:00
parent b9a76d080a
commit 2d87641cfd
3 changed files with 33 additions and 33 deletions

View File

@ -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)

View File

@ -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

View File

@ -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: