Провайдеры и модели
Велес может работать с разными провайдерами моделей. Модель задаётся вagents.defaults.model, а провайдер выбирается явно через agents.defaults.provider или автоматически по имени модели и настройкам.
Это значение используется как общий дефолт. У отдельной личности может быть собственная модель в personality.json, а переключение модели в интерфейсе остаётся переопределением для текущей сессии.
Поддерживаемые типы
Автовыбор провайдера
По умолчанию:openrouter/... выбирает OpenRouter, а openai-codex/... выбирает Codex.
Когда в переключателе моделей есть записи с разными префиксами, Велес выбирает поставщика для каждого запроса отдельно. Префикс нужен только для маршрутизации и не отправляется внутрь выбранного поставщика: custom/minimax-m2.7 уйдет в собственный совместимый адрес как minimax-m2.7, а openrouter/minimax/minimax-m3 уйдет в OpenRouter как minimax/minimax-m3.
Если хотите убрать неоднозначность, задайте провайдера явно:
API-провайдер
apiBase, если вы используете региональный адрес API или совместимый шлюз.
OpenRouter
OpenRouter удобен как универсальный шлюз:Собственный OpenAI-совместимый адрес API
Используйтеcustom, если у вас свой OpenAI-совместимый адрес API.
apiKey, например no-key.
Ollama
vLLM
OpenAI Codex OAuth
Codex использует OAuth. Обычныйproviders.openaiCodex.apiKey не нужен.
config.json не сохраняются.
VELES_SECRETS_MASTER_KEY, OAuth-токены сохраняются в зашифрованном хранилище профилей.
Показатели расхода поставщиков
Велес может получать баланс, расход или ограничения подписки через необязательный обработчик поставщика. OpenRouter сообщает денежный остаток и расход по периодам, а OpenAI Codex — оставшуюся долю пятичасового и недельного ограничений и время их сброса. Nerve получает единый список черезproviders.usage и не содержит отдельных правил для OpenRouter или Codex. Поэтому новый поставщик с таким обработчиком появляется в подробной панели и списке показателей значка без изменений интерфейса. Поставщики без обработчика или без подключённых учётных данных в список не входят. При временной ошибке сохраняется последнее успешно полученное значение.
GitHub Copilot OAuth
Список моделей в интерфейсе Велеса
Интерфейс Велеса показывает каталог моделей изagents.defaults.models и модель по умолчанию.
{ "id": "...", "label": "..." } или словарь, где ключ — идентификатор модели, а значение — подпись. Для объектов можно указать modalities: запись без этого поля считается текстовой. Если пользователь прикрепит изображение, Велес передаст данные изображения только модели с image или vision в modalities; для текстовой или неописанной модели в запросе останется только текстовое описание вложения.
Поле reasoningEfforts ограничивает переключатель рассуждения конкретной модели. Nerve автоматически читает reasoning.supported_efforts и признак обязательного рассуждения из открытого каталога OpenRouter. Записи openrouter/openai/<модель> и openai-codex/<модель> используют в каталоге одну модель openai/<модель>, поэтому для них не нужны отдельные встроенные списки. Явный список имеет приоритет над автоматическим определением; используйте его, если поставщик ещё не публикует возможности модели или нужен более узкий набор.
Отсутствующее поле supported_efforts не означает поддержку всех уровней. В этом случае ручная настройка недоступна, а Nerve использует режим auto. Явное значение null, напротив, означает поддержку всех уровней шлюза. При переключении модели несовместимый уровень заменяется значением модели по умолчанию или режимом auto в одном обновлении с самой моделью. Если default_effort отсутствует или содержит неизвестное значение, Nerve не задаёт уровень по умолчанию.
Практические советы
- Для интерфейса Велеса заранее задавайте
models, чтобы пользователь не вводил идентификатор вручную. - Для моделей, которые должны видеть изображения, явно добавляйте
modalities: ["text", "image"]. - Если автоматическое определение уровней рассуждения не подходит, задавайте для модели точный список
reasoningEfforts. - Для локальных моделей задавайте
providerявно. - Для провайдеров-шлюзов используйте префикс в
model, чтобы не было неоднозначности. - Не храните новые ключи plaintext в
config.json; используйте секреты.
