Files
komAI/doc/src.utils.config_manager.md

205 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ConfigManager
Управление конфигурацией с регистрацией параметров и описаний.
## Установка
```python
import src.utils.config_manager
config = src.utils.config_manager.config
```
## Быстрый старт
```python
import src.utils.config_manager
config = src.utils.config_manager.config
# Регистрация параметра
config.register(name="app_name", val="komAI", desc="Наименование проекта", cat="app")
# Получение значения
name = config.get("app_name", cat="app")
# Изменение значения
config.set("app_name", "NewName", cat="app")
# Сохранение в файл
config.save()
# Сброс и перезагрузка
config.reset()
```
## Константы
```python
from src.utils.config_manager import DEFAULT_CONFIG_FILE, DEFAULT_CONFIG_ENV, DEFAULT_CATEGORY, ROOT_KEY
```
| Константа | Значение | Описание |
|----------|---------|----------|
| `DEFAULT_CONFIG_FILE` | `"config/global.yaml"` | Путь к файлу конфигурации |
| `DEFAULT_CONFIG_ENV` | `"KOMAI_CONFIG_FILE"` | Переменная окружения для переопределения пути |
| `DEFAULT_CATEGORY` | `"global"` | Категория по умолчанию |
| `ROOT_KEY` | `"$root$"` | Ключ для корневого значения во вложенных структурах |
## Регистрация параметров
```python
config.register(
name="param_name", # Имя параметра (обязательно)
val="value", # Текущее значение (обязательно)
default="def_value", # Значение по умолчанию
desc="Description", # Описание параметра
cat="category", # Категория (по умолчанию "global")
env="ENV_VAR", # Переменная окружения
validator=int # Функция валидации
)
```
### Категории
Рекомендуемые категории:
- `app` - параметры приложения
- `logging` - параметры логирования
- `global` - общие параметры (по умолчанию)
## Получение значений
```python
# Получить значение параметра
value = config.get("param_name") # категория по умолчанию (global)
value = config.get("param_name", cat="app") # категория app
# Получить по полному ключу (без подстановки категории)
value = config.getraw("app.param_name")
# Получить описание параметра
desc = config.get_description("param_name", cat="app")
# Получить объект ConfigParameter
param = config.get_parameter("param_name", cat="app")
```
## Изменение значений
```python
# Изменить значение параметра
config.set("param_name", "new_value", cat="app")
# Изменить по полному ключу
config.setraw("app.param_name", "new_value")
```
## Вложенные параметры
Параметры с точками в имени создают вложенные структуры:
```python
config.register(name="coder", val="llama-coder", cat="models")
config.register(name="coder.thinking", val="full", cat="models")
config.register(name="coder.temperature", val="0.3", cat="models")
config.register(name="chatter", val="gemmini", cat="models")
config.register(name="chatter.thinking", val="none", cat="models")
config.register(name="chatter.temperature", val="0.9", cat="models")
# Получить корневое значение
config.get("coder", cat="models") # "llama-coder"
# Получить все параметры группы с корневым значением
config.getall("coder", cat="models")
# {"$root$": "llama-coder", "thinking": "full", "temperature": "0.3"}
# Получить все параметры категории в виде вложенного dict
config.getrawall("models")
# {"coder": {"$root$": "llama-coder", "thinking": "full", "temperature": "0.3"},
# "chatter": {"$root$": "gemmini", "thinking": "none", "temperature": "0.9"}}
```
## Сохранение и загрузка
```python
# Сохранить конфигурацию в файл
config.save() # использовать путь по умолчанию
config.save("/path/to/config.yaml") # сохранить в указанный файл
# Загрузить конфигурацию из файла
config.load() # использовать путь по умолчанию
config.load("/path/to/config.yaml") # загрузить из указанного файла
# Сбросить конфигурацию
config.reset() # очищает все параметры и перезагружает
```
## Валидация
```python
def validate_level(old_val, new_val):
valid_levels = ["DEBUG", "INFO", "WARNING", "ERROR"]
if new_val not in valid_levels:
raise ValueError(f"Invalid level: {new_val}")
config.register(
name="level",
val="INFO",
default="INFO",
desc="Уровень логирования",
cat="logging",
validator=validate_level
)
# При изменении значения вызывается валидатор
config.set("level", "DEBUG") # OK
config.set("level", "INVALID") # Ошибка валидации, значение не меняется
```
## Примеры
### Базовое использование
```python
import src.utils.config_manager
config = src.utils.config_manager.config
# Регистрация параметра приложения
config.register(
name="name",
val="komAI",
default="MyApp",
desc="Наименование проекта",
cat="app"
)
# Получение значения
print(config.get("name", cat="app")) # "komAI"
```
### Переопределение через env
```python
# Установить путь через переменную окружения
# export KOMAI_CONFIG_FILE=/path/to/config.yaml
config.load() # автоматически использует KOMAI_CONFIG_FILE
```
### Работа с ConfigParameter
```python
param = config.get_parameter("name", cat="app")
# Конвертация значений
param.as_int() # в целое число
param.as_bool() # в boolean
param.as_str() # в строку
# Доступ к свойствам
param.name # имя параметра
param.val # текущее значение
param.default # значение по умолчанию
param.desc # описание
param.cat # категория
param.env # переменная окружения
```