O.G.A.S. English

Настройки

Настройки платформы: уровни, на которых их задают, хозяева ключей, окно настроек, языки интерфейса и перечень всех ключей.

Введение

Документ описывает источники значений настроек, хозяев ключей, отображение настроек человеку и устройство языков интерфейса. Значения хранит функция settings, тексты собирает функция i18n, смысл каждого ключа определяет его хозяин. Формат файлов — Форматы файлов, раздел 8, методы — Методы служб платформы, раздел 1.

1 Уровни

Значение ищется от узкого уровня к широкому и берётся с первого уровня, где оно задано. Уровни в таблице 1 перечислены от широкого к узкому.

Таблица 1 — Уровни

Уровень Где хранится Кто пишет
умолчание схемы в схеме ключа хозяин ключа
core data/config/core.json, только ключи core.* окно настроек; ядро при первом старте создаёт пустой файл
system data/config/system.json вручную; мастерская этот уровень не записывает. Уровень сохранён, хотя экземпляр обслуживает одного человека: он может потребоваться для настроек машины отдельно от настроек человека
user data/config/user.json окно настроек
process data/processes/<id>/settings.json настройки процесса
session в памяти функции настроек, не в файле действует до перезапуска функции

Уровня настроек модуля нет: то, что человек задаёт модулю, — параметры узла (Модули, раздел 10).

Ключи core.* на любом уровне, кроме session, записываются в core.json. Ключ со схемой restart: true начинает действовать при следующем запуске; платформа не показывает его применённым сразу.

2 Схема настроек

Каждый хозяин описывает свои настройки в одном файле схемы settings.schema.json рядом со своим кодом (Устройство платформы); программа встраивает его при сборке. Других мест, где записаны умолчание или пределы настройки, нет — ни в коде хозяина, ни в функции настроек, ни в окне (правило 2.2 Правила разработки). Формат файла — Форматы файлов, раздел 8.

Схема делит настройки хозяина на подразделы. У каждого ключа в ней:

Тексты настройки хранятся в словарях хозяина, а не в схеме, и именуются по правилу; имена текстов отдельно не записываются (таблица 2).

Таблица 2 — Тексты настройки в словарях

Текст Ключ словаря
название настройки setting.<ключ>.title
пояснение: назначение, единица, особые значения (например, «0 — выключено») и когда изменение действует; пределов и умолчания схемы в нём нет — окно настроек показывает их из схемы setting.<ключ>.help
название значения из закрытого набора setting.<ключ>.choice.<значение>
название подраздела setting.section.<id подраздела>

Проверка в make ci не проходит, если у ключа схемы нет хотя бы одного из этих текстов на русском или английском или если пояснение повторяет число своей схемы — предел или умолчание, кроме нуля: такая копия разойдётся со схемой при первом её изменении.

Код хозяина читает свою настройку через общий помощник из общего кода протокола. Помощник запрашивает функцию настроек, а при отсутствии ответа берёт умолчание из того же файла схемы. Собственных запасных значений у кода нет.

Исключение — значения уровня процесса: это свободные ключи для подстановки в параметры узлов (Программа: граф и запуски, раздел 15), схемы у них нет. Записывает их settings.set с уровнем process, а settings.get с process_id возвращает их в записанном виде (Методы служб платформы, раздел 1).

3 Хозяева ключей

Префикс ключа — адрес хозяина (правило 2.4). Функция настроек хранит значения и проверяет их по схеме, но своих ключей у неё нет: смысл каждого ключа определяет его хозяин.

Таблица 3 — Хозяева ключей

Префикс Хозяин Передача схемы функции настроек
core.* ядро функция настроек при запуске запрашивает схему у ядра методом core.settings.schema
ui.* функция ui settings.schema.register
i18n.* функция i18n settings.schema.register
graph.*, modules.*, canvas.*, observe.*, sources.* и любой другой функция с этим id settings.schema.register

Хозяин регистрирует схему при запуске и снова всякий раз, когда функция настроек поднимается заново (событие function.ready): схемы хозяев она держит, только пока работает, и после её перезапуска без повторной регистрации значения человека перестали бы действовать. Хозяин называет settings в своём описании (requires, Устройство платформы, 3.4.1); make ci это проверяет. Хозяин, которому умолчания его схемы безвредны, называет её необязательной (optional) и до её прихода работает на умолчаниях — так устроена функция i18n; графу и функции модулей настройки обязательны: их значения решают, что хранить и сколько ресурсов занять. Регистрировать можно только свою схему: хозяина называет ядро, отправитель вызова (Обмен с ядром, раздел 3), и схема другого хозяина — отказ settings_invalid_owner; в схеме — только ключи со своим префиксом, чужой ключ — отказ settings_invalid. Повторная регистрация того же хозяина заменяет его схему целиком.

Ядро стартует раньше функции настроек и не может её запросить. Поэтому ключи core.* оно читает само: по своей схеме, из core.json и system.json. Если значение в этих файлах не подходит по схеме — недопустимое число или неверный тип, — ядро не стартует и называет файл, ключ, значение и допустимые значения. Так же оно поступает с файлом, который не разбирается.

Функция настроек проверяет по схеме и то, что уже лежит в файлах уровней: файл мог быть изменён вручную. Неподходящее значение она не использует — берёт значение с более широкого уровня — и публикует событие settings.value_invalid с error_code: settings_value_invalid, файлом и ключом; по нему функция наблюдения открывает проблему.

4 Запись и сброс

5 Секреты

Платформа не хранит пароли и ключи доступа. Настройка, в имени которой есть secret, password, token, api_key, apikey или private_key (большие и маленькие буквы не различаются), отклоняется с settings_secret_rejected. Это защита от случайной ошибки, а не распознавание секретов: ключ openai_key проверку пройдёт (Защита, 3.5).

6 Окно настроек

7 Языки

8 Перечень ключей

Раздел содержит только ключи и их назначение. Тип, умолчание, допустимые значения и нужен ли перезапуск записаны в одном месте — в файле схемы хозяина, — и в документе не повторяются: изменение умолчания выполняется в одном файле. Проверка в make ci не проходит, если ключ схемы здесь не упомянут или упомянут ключ, которого нет ни в одной схеме.

Ядро — core/kernel/settings.schema.json:

Таблица 4 — Ключи настроек ядра

Ключ Назначение
core.connections_max сколько частей программы может одновременно подключиться к ядру
core.rpc_queue сколько просьб одной части держать в очереди
core.document_max_bytes наибольший размер одного документа
core.function_start_timeout_ms сколько ждать, пока запущенная функция познакомится с ядром
core.health_interval_ms как часто спрашивать функции «вы живы?»
core.health_timeout_ms сколько ждать ответа «жива»
core.function_restart_max сколько раз подряд перезапускать упавшую функцию
core.function_restart_base_ms пауза перед первым перезапуском, дальше вдвое
core.shutdown_grace_ms сколько ждать спокойной остановки экземпляра
core.process_stop_grace_ms от просьбы остановиться до принудительной остановки программы, запущенной частью платформы (например, программы модуля)
core.disk_budget_gib сколько места на диске платформа может занять всего; 0 — без предела; действует без перезапуска
core.disk_free_min_gib сколько места на диске платформа оставляет свободным при любом пределе; действует без перезапуска
core.backups_dir куда кладутся резервные копии; пусто — backups в папке установки; действует без перезапуска
core.backups_keep сколько последних резервных копий хранить
core.event_ring_size сколько последних событий помнит ядро
core.command_dedup сколько команд ядро помнит, чтобы узнать повторную доставку

Ядро читает свои ключи при запуске, поэтому они действуют после перезапуска платформы; два ключа места ядро перечитывает при каждом вопросе о месте, и они действуют сразу.

Мастерская — functions/ui/settings.schema.json:

Таблица 5 — Ключи настроек мастерской

Ключ Назначение
ui.scheme цветовая схема: тёмная или светлая; цвета, которые человек не задал, следуют ей
ui.notice.show_s сколько секунд уведомление о вопросе программы или сбое остаётся на экране
ui.notice.at_once сколько уведомлений видно одновременно
ui.undo_depth сколько последних правок программы возвращает «Отменить»
ui.open_dir с какой папки Windows открывается окно выбора файла; пусто — с той, что выберет Windows
ui.keep_awake не давать Windows уйти в сон, пока идёт запуск хоть одной программы
ui.autostart запускать платформу при входе в Windows: ярлык в автозагрузке
ui.window.exe программа окна, путь в WSL; пусто — bin/ogas-window.exe, затем результат make window
ui.window.port порт окна на 127.0.0.1; 0 — свободный на каждый запуск
ui.window.devtools_port порт отладки WebView2, только для разработки; 0 — выключен
ui.font.source источник шрифта: встроенный, системный Windows или файл
ui.font.file путь в WSL к файлу шрифта, если источник — файл
ui.font.size_* размеры букв: основной, заголовок, подзаголовок, мелкий, подписи баров, узел
ui.radius.* скругления: окно, кнопки окна платформы, поле, кнопка действия, узел, строка списка
ui.space.* отступ списка, промежуток между строками, высота строки
ui.stroke.* толщина обводки: окно, поле, узел, связь графа
ui.layout.* клетка бара, кнопки окна операционной системы, колонка слева и панель выбранного у окон на хосте, размер узла
ui.color.* цвета оболочки: хост, бары, окна (колонка слева, рабочее поле, панель выбранного), диалоги, строки и поля, кнопки, граф, пульт, обводки; шапки узлов по семействам вида и шапка группы (ui.color.head_*), связи и точки портов по типу данных (ui.color.type_*) — Мастерская, 5.3

Язык — functions/i18n/settings.schema.json:

Таблица 6 — Ключи настроек языка

Ключ Назначение
i18n.language язык интерфейса

Граф — functions/graph/settings.schema.json:

Таблица 7 — Ключи настроек функции графа

Ключ Назначение
graph.max_iterations наибольшее число кругов одного цикла
graph.max_loop_ms наибольшее время одного цикла от первого входа в тело; узел может задать меньше
graph.queue_depth сколько данных может ждать у одного входа узла
graph.runs_keep сколько последних прогонов процесса хранить; 0 — не убирать самой
graph.show_max_bytes сколько байтов данных держит и отдаёт окну один узел «Показать»; от большего держится начало
graph.file_max_bytes самый большой файл, который человек может дать процессу; по умолчанию 1 ГиБ (Форматы файлов, 16.4)
graph.timer_min_ms наименьший промежуток между срабатываниями события по таймеру

Модули — functions/modules/settings.schema.json:

Таблица 8 — Ключи настроек функции модулей

Ключ Назначение
modules.artifact_max_bytes наибольший размер одного файла результата шага
modules.gpu_budget_mb сколько видеопамяти делят поднятые модули; 0 — видеокартой пользуется один
modules.models_dir папка нейросетей: путь от папки установки, по умолчанию models, или полный путь так, как его пишет WSL или Windows (Модули, раздел 11)
modules.ping_interval_ms как часто спрашивать поднятые долгие модули и службы, отвечают ли они (ping)
modules.ping_timeout_ms сколько ждать ответа на ping; не ответивший модуль останавливается как потерянный
modules.python_candidates какие программы Python пробовать, по порядку
modules.stderr_tail_bytes сколько байт конца служебного вывода модуля хранить и показывать при отказе шага
modules.uv программа uv, которой ставятся окружения Python процессов: имя или путь
modules.parallel_max сколько модулей на всём компьютере выполняют шаг одновременно; 0 — без предела
modules.memory_max_mb сколько памяти все модули вместе могут занять; 0 — без предела
modules.cpu_max сколько ядер процессора все модули вместе могут занять; 0 — без предела

Сколько ждать остановки модуля, задаёт core.process_stop_grace_ms: остановкой OS-процесса занимается ядро, и второго ключа о том же нет.

Пульт — functions/canvas/settings.schema.json, раздел окна настроек «Интерфейс платформы»:

Таблица 9 — Ключи настроек функции пульта

Ключ Назначение
canvas.image_max_bytes наибольший размер рисунка пульта; крупнее рисунок в пульт не берётся и окну не отдаётся. Верхний предел ключа — то, что проходит одним сообщением обмена
canvas.sheet_gap промежуток между элементами, который функция пульта оставляет, когда сама даёт место новому элементу
canvas.sheet_height высота листа нового пульта и нового раздела, в единицах листа
canvas.sheet_margin отступ от края листа, который функция пульта оставляет, когда сама даёт место; к этой же черте прилипает элемент, который несут
canvas.sheet_scale_min предел уменьшения листа на экране, в процентах его полного размера; мельче лист не становится, поле прокручивается
canvas.sheet_step шаг листа: на него встаёт элемент, который несут или тянут за край, и по нему функция пульта ищет место новому элементу
canvas.sheet_width ширина листа нового пульта и нового раздела, в единицах листа
canvas.theme_accent цвет действия: кнопка события, заполнение полосы, включённый выключатель
canvas.theme_background фон пульта: цвет листа и поля вокруг него
canvas.theme_font шрифт пульта: шрифт платформы, шрифт Windows, с засечками или равной ширины
canvas.theme_letters высота букв на пульте, в единицах листа
canvas.theme_ok цвет готового: индикатор прошедшего запуска, кнопка повтора
canvas.theme_radius скругление углов на пульте, в единицах листа
canvas.theme_stop цвет остановки: кнопка остановки, сбой, отметка неработающего элемента
canvas.theme_surface цвет элементов: поля, значения, рамки
canvas.theme_text цвет букв

Числа листа действуют со следующего изменения пульта; листы, которые уже есть, от них не меняются. Процесс может иметь свои числа на уровне настроек процесса (Мастерская, 6.3).

Ключи canvas.theme_* — вид пульта, который своего не задал: пульт называет в документе только те ключи темы, которые задал сам, остальные берутся отсюда (Мастерская, 6.5). Раздел схемы canvas.theme — одновременно закрытый перечень ключей темы и описание того, что каждый принимает: документ пульта проверяется по нему же (Форматы файлов, раздел 7).

Журнал — functions/observe/settings.schema.json:

Таблица 10 — Ключи настроек функции наблюдения

Ключ Назначение
observe.logs_keep_months сколько последних месяцев общего журнала хранить, нынешний среди них; 0 — хранить всё (Устройство платформы, 3.8.2)

Источники — functions/sources/settings.schema.json (Мастерская, 5.6):

Таблица 11 — Ключи настроек функции источников

Ключ Назначение
sources.ogas_url адрес витрины O.G.A.S., по умолчанию https://ogas.space/catalog.json; пусто — витрины в библиотеке нет
sources.catalogs адреса других витрин того же формата — у каждой своя строка под «Источниками»
sources.huggingface_url адрес Hugging Face или его зеркала; пусто — источника нет
sources.civitai_url адрес Civitai; пусто — источника нет
sources.check_on_start смотреть ли витрину ogas.space при запуске — о новой версии платформы: on (по умолчанию) или off — только кнопкой «Проверить»
sources.results сколько вещей показывает один поиск
sources.answer_s сколько ждать ответа источника на поиск и на вопрос о файлах
sources.stall_s сколько секунд загрузка может стоять без единого байта, прежде чем оборваться
sources.max_gib наибольшая загрузка, ГиБ: больше не начинается

Вход для программ — functions/gate/settings.schema.json (Методы служб платформы, раздел 5):

Таблица 12 — Ключи настроек функции входа

Ключ Назначение
gate.door открыт ли вход для программ человека: closed или open
gate.port порт входа на 127.0.0.1; 0 — свободный, его называет data/gate.json
gate.clients сколько программ может войти сразу

Помощник — functions/assistant/settings.schema.json (Методы служб платформы, раздел 6):

Таблица 13 — Ключи настроек функции помощника

Ключ Назначение
assistant.max_steps сколько обращений к сети за задачу, прежде чем помощник остановится и спросит
assistant.task_budget сколько токенов за задачу, прежде чем помощник остановится и спросит
assistant.answer_length сколько токенов сеть может написать за один ответ
assistant.result_chars сколько знаков результата одного действия помощника читает сеть

Профиль — functions/profile/settings.schema.json (Методы служб платформы, раздел 7):

Таблица 14 — Ключи настроек функции профиля

Ключ Назначение
profile.ask_at_start предлагать ли при запуске создать профиль или войти в свой: on (по умолчанию) или off — так ставит «Позже»
profile.check_on_start смотреть ли при запуске, что стало со своими отправками, и письма: on (по умолчанию) или off — только кнопкой «Проверить»
profile.site адрес сайта платформы, по умолчанию https://ogas.space/
profile.answer_s сколько ждать ответа сайта на чтение
profile.send_s сколько может идти одна отправка