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

6.9 KiB
Raw Permalink Blame History

ConfigManager

Управление конфигурацией с регистрацией параметров и описаний.

Установка

import src.utils.config_manager
config = src.utils.config_manager.config

Быстрый старт

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()

Константы

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$" Ключ для корневого значения во вложенных структурах

Регистрация параметров

config.register(
    name="param_name",      # Имя параметра (обязательно)
    val="value",           # Текущее значение (обязательно)
    default="def_value",    # Значение по умолчанию
    desc="Description",     # Описание параметра
    cat="category",        # Категория (по умолчанию "global")
    env="ENV_VAR",         # Переменная окружения
    validator=int          # Функция валидации
)

Категории

Рекомендуемые категории:

  • app - параметры приложения
  • logging - параметры логирования
  • global - общие параметры (по умолчанию)

Получение значений

# Получить значение параметра
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")

Изменение значений

# Изменить значение параметра
config.set("param_name", "new_value", cat="app")

# Изменить по полному ключу
config.setraw("app.param_name", "new_value")

Вложенные параметры

Параметры с точками в имени создают вложенные структуры:

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"}}

Сохранение и загрузка

# Сохранить конфигурацию в файл
config.save()                           # использовать путь по умолчанию
config.save("/path/to/config.yaml")     # сохранить в указанный файл

# Загрузить конфигурацию из файла
config.load()                           # использовать путь по умолчанию
config.load("/path/to/config.yaml")     # загрузить из указанного файла

# Сбросить конфигурацию
config.reset()                          # очищает все параметры и перезагружает

Валидация

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")    # Ошибка валидации, значение не меняется

Примеры

Базовое использование

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

# Установить путь через переменную окружения
# export KOMAI_CONFIG_FILE=/path/to/config.yaml

config.load()  # автоматически использует KOMAI_CONFIG_FILE

Работа с ConfigParameter

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           # переменная окружения