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 from pathlib import Path
import yaml import yaml
from dotenv import load_dotenv
load_dotenv()
def _yaml_get(*keys, default=None): 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" ] llm_api_key = MODELS_ITEMS[0]["api_key" ]
XMPP_USERNAME = os.getenv("XMPP_USERNAME", default="") XMPP_USERNAME = _yaml_get("xmpp", "username", default="")
XMPP_PASSWORD = os.getenv("XMPP_PASSWORD", 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_ITERATIONS = int(_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_TOOL_OUTPUT = int(_yaml_get("agent", "max_tool_output", default="40000"))
AGENT_SKILL = "programmer" AGENT_SKILL = "programmer"
PERSONALITY_NAME = "Hendrik" PERSONALITY_NAME = "Hendrik"
@ -94,30 +91,29 @@ PERSONALITY_CATCHPHRASES = ""
# ─── Character & Skills ──────────────────────────────────────────────────────── # ─── Character & Skills ────────────────────────────────────────────────────────
AGENT_CHARACTER = _yaml_get("agent", "character", default="").strip().lower() 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_ENABLED = 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_MUC_ROOMS = _yaml_get("xmpp", "muc_rooms", default="").strip()
XMPP_NICKNAME = os.getenv("XMPP_NICKNAME", default=_yaml_get("xmpp", "nickname", 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")
XMPP_SELECTIVE_RESPONSE = os.getenv("XMPP_SELECTIVE_RESPONSE", default=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_ENABLED = str(_yaml_get("telegram", "enabled", default="false")).strip().lower() in ("true", "1", "yes")
TELEGRAM_TOKEN = os.getenv("TELEGRAM_TOKEN", default="") TELEGRAM_TOKEN = _yaml_get("telegram", "token", default="")
TELEGRAM_ALLOWED_GROUP_IDS = os.getenv("TELEGRAM_ALLOWED_GROUP_IDS", default=_yaml_get("telegram", "allowed_group_ids", default="")).strip() TELEGRAM_ALLOWED_GROUP_IDS = _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_SELECTIVE_RESPONSE = str(_yaml_get("telegram", "selective_response", default="true")).strip().lower() in ("true", "1", "yes")
# ─── Session (TinyDB) ──────────────────────────────────────────────────────────── # ─── Session (TinyDB) ────────────────────────────────────────────────────────────
SESSION_DB_PATH = os.path.expanduser( 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) # Humanize Delay (YAML)

View File

@ -45,12 +45,15 @@ session:
xmpp: xmpp:
enabled: false enabled: false
username: ""
password: ""
muc_rooms: "" # comma-separated, e.g. "room1@conference.server,room2@conference.server" muc_rooms: "" # comma-separated, e.g. "room1@conference.server,room2@conference.server"
nickname: "" # custom MUC nickname (empty = use username) nickname: "" # custom MUC nickname (empty = use username)
selective_response: true # true = only response if mentioned/relevant selective_response: true # true = only response if mentioned/relevant
telegram: telegram:
enabled: false enabled: false
token: ""
allowed_group_ids: "" # comma-separated, empty = all group allowed_group_ids: "" # comma-separated, empty = all group
selective_response: true # true = only response if mentioned/relevant selective_response: true # true = only response if mentioned/relevant

View File

@ -10,13 +10,14 @@ Arsitektur:
Load order: Base Character Policies Skills Load order: Base Character Policies Skills
""" """
import os
import re import re
from dataclasses import dataclass, field from dataclasses import dataclass, field
from pathlib import Path from pathlib import Path
import yaml import yaml
import config
# ─── Paths ──────────────────────────────────────────────────────────────────── # ─── Paths ────────────────────────────────────────────────────────────────────
@ -28,7 +29,7 @@ SKILLS_DIR = BASE_DIR / "skills"
# ─── Mode / Skill ────────────────────────────────────────────────────────────── # ─── Mode / Skill ──────────────────────────────────────────────────────────────
SKILL = os.getenv("AGENT_SKILL", default="programmer").strip().lower() SKILL = config.AGENT_SKILL
# ─── Personality Configuration ──────────────────────────────────────────────── # ─── Personality Configuration ────────────────────────────────────────────────
@ -49,19 +50,19 @@ class PersonalityConfig:
def _load_personality_from_env() -> PersonalityConfig: def _load_personality_from_env() -> PersonalityConfig:
"""Baca personality config dari environment variables.""" """Baca personality config dari config module globals."""
raw_catchphrases = os.getenv("PERSONALITY_CATCHPHRASES", default="").strip() raw_catchphrases = config.PERSONALITY_CATCHPHRASES.strip()
catchphrases = [c.strip() for c in raw_catchphrases.split(",") if c.strip()] if raw_catchphrases else [] catchphrases = [c.strip() for c in raw_catchphrases.split(",") if c.strip()] if raw_catchphrases else []
return PersonalityConfig( return PersonalityConfig(
name=os.getenv("PERSONALITY_NAME", default="OWL").strip() or "OWL", name=config.PERSONALITY_NAME.strip() or "OWL",
age=os.getenv("PERSONALITY_AGE", default="").strip(), age=config.PERSONALITY_AGE.strip(),
gender=os.getenv("PERSONALITY_GENDER", default="").strip(), gender=config.PERSONALITY_GENDER.strip(),
tone=os.getenv("PERSONALITY_TONE", default="casual").strip().lower() or "casual", tone=config.PERSONALITY_TONE.strip().lower() or "casual",
verbosity=os.getenv("PERSONALITY_VERBOSITY", default="balanced").strip().lower() or "balanced", verbosity=config.PERSONALITY_VERBOSITY.strip().lower() or "balanced",
humor_level=os.getenv("PERSONALITY_HUMOR", default="light").strip().lower() or "light", humor_level=config.PERSONALITY_HUMOR.strip().lower() or "light",
language=os.getenv("PERSONALITY_LANGUAGE", default="id").strip().lower() or "id", language=config.PERSONALITY_LANGUAGE.strip().lower() or "id",
mood=os.getenv("PERSONALITY_MOOD", default="cheerful").strip().lower() or "cheerful", mood=config.PERSONALITY_MOOD.strip().lower() or "cheerful",
catchphrases=catchphrases, catchphrases=catchphrases,
) )
@ -317,7 +318,7 @@ def build_system_prompt(
# personality.yaml meng-override skill → pakai skill dari personality.yaml # personality.yaml meng-override skill → pakai skill dari personality.yaml
skills_list = [selected_skill] if selected_skill in ("programmer", "roleplayer", "analyst", "strategist") else [] skills_list = [selected_skill] if selected_skill in ("programmer", "roleplayer", "analyst", "strategist") else []
else: else:
skills_env = os.getenv("AGENT_SKILLS", default="").strip() skills_env = config.AGENT_SKILLS.strip()
if skills_env: if skills_env:
skills_list = [s.strip() for s in skills_env.split(",") if s.strip()] skills_list = [s.strip() for s in skills_env.split(",") if s.strip()]
else: else: