From a54d2d29c0af86d0950aae5f33995d1a316badfb Mon Sep 17 00:00:00 2001 From: Dita Aji Pratama Date: Mon, 6 Jul 2026 17:12:39 +0700 Subject: [PATCH] Cleaning vibescoding dengan vibescoding --- config.py | 112 ++++++++++++++++++++++++++---------------------------- 1 file changed, 53 insertions(+), 59 deletions(-) diff --git a/config.py b/config.py index c21f33e..d2388cc 100644 --- a/config.py +++ b/config.py @@ -7,75 +7,70 @@ from dotenv import load_dotenv load_dotenv() def _yaml_get(*keys, default=None): - + _CONFIG_PATH = Path(__file__).resolve().parent / "config.yaml" - _yaml: dict = {} + _yaml = {} if _CONFIG_PATH.is_file(): - with open(_CONFIG_PATH, "r", encoding="utf-8") as f: - _yaml = yaml.safe_load(f) or {} - - d = _yaml - for k in keys: - if isinstance(d, dict) and k in d: - d = d[k] + with open(_CONFIG_PATH, "r", encoding="utf-8") as file_object: + _yaml = yaml.safe_load(file_object) or {} + + current = _yaml + for key in keys: + if key in current: + current = current[key] else: return default - return d if d is not None else default + return current if current is not None else default -# Credential / Secret (only from .env) -llm_baseurl = os.getenv("LLM_BASE_URL", default="") -llm_model = os.getenv("LLM_MODEL", default="") -llm_api_key = os.getenv("LLM_API_KEY", default="") +llm_timeout = int(_yaml_get("llm", "timeout", default=600)) +_providers = _yaml_get("llm", "providers", default=[]) +MODELS_ITEMS = [] -llm_timeout = int(_yaml_get("llm", "timeout", default=600)) +for prov in _providers: + pname = prov.get("name", "") + base_url = prov.get("base_url", "").rstrip("/") + api_key = prov.get("api_key", "") + models = prov.get("models", []) + for m in models: + model_name = m.get("name", "") + is_default = m.get("default", False) + MODELS_ITEMS.append({ + "model" : model_name, + "provider" : pname, + "base_url" : base_url, + "api_key" : api_key, + "default" : is_default, + }) -XMPP_USERNAME = os.getenv("XMPP_USERNAME", default="") -XMPP_PASSWORD = os.getenv("XMPP_PASSWORD", default="") - -MODELS_ITEMS: list[dict] = [] -_providers = _yaml_get("llm", "providers", default=[]) -if isinstance(_providers, list): - for prov in _providers: - if not isinstance(prov, dict): - continue - pname = prov.get("name", "") - base_url = prov.get("base_url", "").rstrip("/") - api_key = prov.get("api_key", "") or llm_api_key - models = prov.get("models", []) - if isinstance(models, list): - for m in models: - if not isinstance(m, dict): - continue - model_name = m.get("name", "") - is_default = m.get("default", False) - MODELS_ITEMS.append({ - "model": model_name, - "provider": pname, - "base_url": base_url, - "api_key": api_key, - "default": is_default, - }) def resolve_provider(base_url: str, model: str) -> str | None: - """Cari nama provider yg cocok dengan (base_url, model) dari MODELS_ITEMS.""" base_url = base_url.rstrip("/") for item in MODELS_ITEMS: if item["base_url"] == base_url and item["model"] == model: return item["provider"] return None -_has_match = any( - item["model"] == llm_model and item["base_url"] == llm_baseurl.rstrip("/") - for item in MODELS_ITEMS -) -if not _has_match: - for item in MODELS_ITEMS: - if item.get("default"): - llm_model = item["model"] - llm_baseurl = item["base_url"] - llm_api_key = item["api_key"] - break +# Cari model default — pertama yg marked default: true, fallback ke yg pertama +llm_baseurl = "" +llm_model = "" +llm_api_key = "" +for item in MODELS_ITEMS: + if item.get("default"): + llm_baseurl = item["base_url" ] + llm_model = item["model" ] + llm_api_key = item["api_key" ] + break +if not llm_model and MODELS_ITEMS: + llm_baseurl = MODELS_ITEMS[0]["base_url" ] + llm_model = MODELS_ITEMS[0]["model" ] + llm_api_key = MODELS_ITEMS[0]["api_key" ] + + +XMPP_USERNAME = os.getenv("XMPP_USERNAME", default="") +XMPP_PASSWORD = os.getenv("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"))) @@ -130,12 +125,11 @@ RAG_MODEL_PATH = os.path.expanduser( ) -# ─── Humanize Delay (YAML) ───────────────────────────────────────────────────── - -READ_DELAY_MIN = float(os.getenv("READ_DELAY_MIN", default=_yaml_get("delay", "read_min", default="1.0"))) -READ_DELAY_MAX = float(os.getenv("READ_DELAY_MAX", default=_yaml_get("delay", "read_max", default="2.0"))) -TYPING_SPEED = float(os.getenv("TYPING_SPEED", default=_yaml_get("delay", "typing_speed", default="15.0"))) -TYPING_MAX = float(os.getenv("TYPING_MAX", default=_yaml_get("delay", "typing_max", default="10.0"))) +# Humanize Delay (YAML) +READ_DELAY_MIN = float( _yaml_get("delay", "read_min", default="1.0" ) ) +READ_DELAY_MAX = float( _yaml_get("delay", "read_max", default="2.0" ) ) +TYPING_SPEED = float( _yaml_get("delay", "typing_speed", default="15.0" ) ) +TYPING_MAX = float( _yaml_get("delay", "typing_max", default="10.0" ) ) # ─── Character Preset Override ──────────────────────────────────────────────────