Files
microdao-daarion/docs/hardcode_vs_config.md

4.4 KiB
Raw Blame History

Хардкод vs Конфігурація

🔴 ХАРДКОД (Hardcode) - Що це?

Хардкод = значення, які "зашиті" прямо в коді і не можуть змінюватись без редагування коду.

Приклад хардкоду

# ❌ ХАРДКОД - значення прямо в коді
local_model = "qwen3-8b"  # Якщо треба змінити модель, треба редагувати код!

Проблеми хардкоду

  1. Треба редагувати код для зміни значення
  2. Не можна змінити без перезапуску сервісу
  3. Важко тестувати різні конфігурації
  4. Не гнучко - однаковий код для всіх середовищ (dev/prod)

КОНФІГУРАЦІЯ (Config) - Що це?

Конфігурація = значення, які зберігаються окремо від коду (в файлах, змінних середовища, БД) і можуть змінюватись без редагування коду.

Приклад конфігурації

# ✅ КОНФІГ - значення в окремому файлі router-config.yml
llm_profiles:
  qwen3_science_8b:
    provider: ollama
    model: qwen3:8b
    max_tokens: 2048
# ✅ КОД читає з конфігу
llm_profile = router_config.get("llm_profiles", {}).get("qwen3_science_8b")
model = llm_profile.get("model")  # Беремо з конфігу, не хардкодимо!

Переваги конфігурації

  1. Зміна без редагування коду - просто змінити YAML файл
  2. Різні конфіги для різних середовищ (dev/prod/staging)
  3. Легко тестувати - можна створити test-config.yml
  4. Гнучко - один код, багато конфігурацій

📊 ПОРІВНЯННЯ

Аспект Хардкод Конфігурація
Де зберігається? В коді В окремих файлах
Як змінити? Редагувати код Редагувати конфіг
Потрібен рестарт? Так (перекомпіляція) Так (перезапуск)
Гнучкість Низька Висока
Тестування Важко Легко

🔧 ЩО МИ ВИПРАВИЛИ?

БУЛО (хардкод)

# ❌ Хардкод - модель завжди "qwen3-8b"
local_model = "qwen3-8b"

СТАЛО (з конфігу)

# ✅ Читаємо з конфігу
if llm_profile.get("provider") == "ollama":
    ollama_model = llm_profile.get("model", "qwen3:8b")
    local_model = ollama_model.replace(":", "-")  # qwen3:8b → qwen3-8b

Результат

  • Модель береться з router-config.yml
  • Якщо змінити конфіг → зміниться поведінка
  • Не треба редагувати код для зміни моделі
  • Різні агенти можуть мати різні локальні моделі

💡 КОЛИ ВИКОРИСТОВУВАТИ?

Хардкод - тільки для

  • Константи (π = 3.14, версія API)
  • Значення, які ніколи не зміняться
  • Технічні деталі (timeout = 5.0 сек)

Конфігурація - для

  • Моделі LLM
  • API ключі
  • URL сервісів
  • Параметри (temperature, max_tokens)
  • Налаштування агентів

📝 ПРИКЛАД З НАШОГО ПРОЄКТУ

router-config.yml (конфігурація)

agents:
  helion:
    default_llm: qwen3_science_8b  # ← Можна змінити тут

llm_profiles:
  qwen3_science_8b:
    provider: ollama
    model: qwen3:8b  # ← Можна змінити модель тут

main.py (код)

# Читаємо з конфігу
default_llm = agent_config.get("default_llm", "qwen3-8b")
llm_profile = llm_profiles.get(default_llm, {})
model = llm_profile.get("model")  # ← Беремо з конфігу!

Тепер можна змінити модель просто редагуванням YAML файлу! 🎉