# Хардкод vs Конфігурація ## 🔴 ХАРДКОД (Hardcode) - Що це? **Хардкод** = значення, які "зашиті" прямо в коді і не можуть змінюватись без редагування коду. ### Приклад хардкоду: ```python # ❌ ХАРДКОД - значення прямо в коді local_model = "qwen3-8b" # Якщо треба змінити модель, треба редагувати код! ``` ### Проблеми хардкоду: 1. **Треба редагувати код** для зміни значення 2. **Не можна змінити без перезапуску** сервісу 3. **Важко тестувати** різні конфігурації 4. **Не гнучко** - однаковий код для всіх середовищ (dev/prod) --- ## ✅ КОНФІГУРАЦІЯ (Config) - Що це? **Конфігурація** = значення, які зберігаються окремо від коду (в файлах, змінних середовища, БД) і можуть змінюватись без редагування коду. ### Приклад конфігурації: ```yaml # ✅ КОНФІГ - значення в окремому файлі router-config.yml llm_profiles: qwen3_science_8b: provider: ollama model: qwen3:8b max_tokens: 2048 ``` ```python # ✅ КОД читає з конфігу 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. **Гнучко** - один код, багато конфігурацій --- ## 📊 ПОРІВНЯННЯ | Аспект | Хардкод | Конфігурація | |--------|---------|--------------| | **Де зберігається?** | В коді | В окремих файлах | | **Як змінити?** | Редагувати код | Редагувати конфіг | | **Потрібен рестарт?** | Так (перекомпіляція) | Так (перезапуск) | | **Гнучкість** | Низька | Висока | | **Тестування** | Важко | Легко | --- ## 🔧 ЩО МИ ВИПРАВИЛИ? ### БУЛО (хардкод): ```python # ❌ Хардкод - модель завжди "qwen3-8b" local_model = "qwen3-8b" ``` ### СТАЛО (з конфігу): ```python # ✅ Читаємо з конфігу 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 (конфігурація): ```yaml agents: helion: default_llm: qwen3_science_8b # ← Можна змінити тут llm_profiles: qwen3_science_8b: provider: ollama model: qwen3:8b # ← Можна змінити модель тут ``` ### main.py (код): ```python # Читаємо з конфігу default_llm = agent_config.get("default_llm", "qwen3-8b") llm_profile = llm_profiles.get(default_llm, {}) model = llm_profile.get("model") # ← Беремо з конфігу! ``` **Тепер можна змінити модель просто редагуванням YAML файлу!** 🎉