Cleaning vibescoding dengan vibescoding
This commit is contained in:
parent
a8ea6db485
commit
a54d2d29c0
70
config.py
70
config.py
@ -9,43 +9,29 @@ load_dotenv()
|
|||||||
def _yaml_get(*keys, default=None):
|
def _yaml_get(*keys, default=None):
|
||||||
|
|
||||||
_CONFIG_PATH = Path(__file__).resolve().parent / "config.yaml"
|
_CONFIG_PATH = Path(__file__).resolve().parent / "config.yaml"
|
||||||
_yaml: dict = {}
|
_yaml = {}
|
||||||
if _CONFIG_PATH.is_file():
|
if _CONFIG_PATH.is_file():
|
||||||
with open(_CONFIG_PATH, "r", encoding="utf-8") as f:
|
with open(_CONFIG_PATH, "r", encoding="utf-8") as file_object:
|
||||||
_yaml = yaml.safe_load(f) or {}
|
_yaml = yaml.safe_load(file_object) or {}
|
||||||
|
|
||||||
d = _yaml
|
current = _yaml
|
||||||
for k in keys:
|
for key in keys:
|
||||||
if isinstance(d, dict) and k in d:
|
if key in current:
|
||||||
d = d[k]
|
current = current[key]
|
||||||
else:
|
else:
|
||||||
return default
|
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))
|
llm_timeout = int(_yaml_get("llm", "timeout", default=600))
|
||||||
|
|
||||||
XMPP_USERNAME = os.getenv("XMPP_USERNAME", default="")
|
|
||||||
XMPP_PASSWORD = os.getenv("XMPP_PASSWORD", default="")
|
|
||||||
|
|
||||||
MODELS_ITEMS: list[dict] = []
|
|
||||||
_providers = _yaml_get("llm", "providers", default=[])
|
_providers = _yaml_get("llm", "providers", default=[])
|
||||||
if isinstance(_providers, list):
|
MODELS_ITEMS = []
|
||||||
|
|
||||||
for prov in _providers:
|
for prov in _providers:
|
||||||
if not isinstance(prov, dict):
|
|
||||||
continue
|
|
||||||
pname = prov.get("name", "")
|
pname = prov.get("name", "")
|
||||||
base_url = prov.get("base_url", "").rstrip("/")
|
base_url = prov.get("base_url", "").rstrip("/")
|
||||||
api_key = prov.get("api_key", "") or llm_api_key
|
api_key = prov.get("api_key", "")
|
||||||
models = prov.get("models", [])
|
models = prov.get("models", [])
|
||||||
if isinstance(models, list):
|
|
||||||
for m in models:
|
for m in models:
|
||||||
if not isinstance(m, dict):
|
|
||||||
continue
|
|
||||||
model_name = m.get("name", "")
|
model_name = m.get("name", "")
|
||||||
is_default = m.get("default", False)
|
is_default = m.get("default", False)
|
||||||
MODELS_ITEMS.append({
|
MODELS_ITEMS.append({
|
||||||
@ -56,25 +42,34 @@ if isinstance(_providers, list):
|
|||||||
"default" : is_default,
|
"default" : is_default,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
def resolve_provider(base_url: str, model: str) -> str | None:
|
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("/")
|
base_url = base_url.rstrip("/")
|
||||||
for item in MODELS_ITEMS:
|
for item in MODELS_ITEMS:
|
||||||
if item["base_url"] == base_url and item["model"] == model:
|
if item["base_url"] == base_url and item["model"] == model:
|
||||||
return item["provider"]
|
return item["provider"]
|
||||||
return None
|
return None
|
||||||
|
|
||||||
_has_match = any(
|
|
||||||
item["model"] == llm_model and item["base_url"] == llm_baseurl.rstrip("/")
|
# Cari model default — pertama yg marked default: true, fallback ke yg pertama
|
||||||
for item in MODELS_ITEMS
|
llm_baseurl = ""
|
||||||
)
|
llm_model = ""
|
||||||
if not _has_match:
|
llm_api_key = ""
|
||||||
for item in MODELS_ITEMS:
|
for item in MODELS_ITEMS:
|
||||||
if item.get("default"):
|
if item.get("default"):
|
||||||
llm_model = item["model"]
|
|
||||||
llm_baseurl = item["base_url" ]
|
llm_baseurl = item["base_url" ]
|
||||||
|
llm_model = item["model" ]
|
||||||
llm_api_key = item["api_key" ]
|
llm_api_key = item["api_key" ]
|
||||||
break
|
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_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_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) ─────────────────────────────────────────────────────
|
# Humanize Delay (YAML)
|
||||||
|
READ_DELAY_MIN = float( _yaml_get("delay", "read_min", default="1.0" ) )
|
||||||
READ_DELAY_MIN = float(os.getenv("READ_DELAY_MIN", default=_yaml_get("delay", "read_min", default="1.0")))
|
READ_DELAY_MAX = float( _yaml_get("delay", "read_max", default="2.0" ) )
|
||||||
READ_DELAY_MAX = float(os.getenv("READ_DELAY_MAX", default=_yaml_get("delay", "read_max", default="2.0")))
|
TYPING_SPEED = float( _yaml_get("delay", "typing_speed", default="15.0" ) )
|
||||||
TYPING_SPEED = float(os.getenv("TYPING_SPEED", default=_yaml_get("delay", "typing_speed", default="15.0")))
|
TYPING_MAX = float( _yaml_get("delay", "typing_max", default="10.0" ) )
|
||||||
TYPING_MAX = float(os.getenv("TYPING_MAX", default=_yaml_get("delay", "typing_max", default="10.0")))
|
|
||||||
|
|
||||||
|
|
||||||
# ─── Character Preset Override ──────────────────────────────────────────────────
|
# ─── Character Preset Override ──────────────────────────────────────────────────
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user