Refactor
This commit is contained in:
parent
b9a76d080a
commit
2d87641cfd
36
config.py
36
config.py
@ -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)
|
||||||
|
|||||||
@ -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
|
||||||
|
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user