Custom (OpenAI-совместимый)
TL;DR
ONGRID_CUSTOM_API_KEY=...
ONGRID_CUSTOM_BASE_URL=https://your-relay/v1 # REQUIRED — no upstream default
ONGRID_CUSTOM_MODEL=your-default-modelProvider id: custom. SDK adapter: eino-openai (любой OpenAI Chat Completions–совместимый эндпоинт).
Custom slot — 7-я provider-карточка в Settings UI. Она существует для всего, что OpenAI-совместимо на wire-уровне, но не один из шести запечённых providers:
- Self-hosted vLLM / TGI / llama.cpp.
- OpenRouter, Together, Fireworks, Anyscale, Groq, Mistral.
- Внутренние корпоративные model-шлюзы.
- Новые providers, которые отгружаются до того, как Ongrid добавит им dedicated slot.
Guard на base-URL
Custom slot требует явный base URL. Без него underlying SDK молча fall back'нул бы на дефолт OpenAI (https://api.openai.com/v1), отправляя operator's custom key на неправильный хост. Resolver пропускает provider в таком случае:
// internal/manager/biz/setting/llm.go:155
if pk.id == model.LLMProviderCustom && strings.TrimSpace(baseURL) == "" {
continue
}Предоставьте BaseURL через env или Settings UI; иначе provider никогда не появится в каталоге.
Env-переменные
| Var | По умолчанию | Заметки |
|---|---|---|
ONGRID_CUSTOM_API_KEY | — | Пусто = provider выпадает |
ONGRID_CUSTOM_BASE_URL | — | REQUIRED |
ONGRID_CUSTOM_MODEL | — | Дефолтный model id, отправляемый на каждый вызов |
ONGRID_CUSTOM_MODELS | — | Catalog-список (closed set, который показывает picker SPA) |
Нет out-of-box дефолтного каталога — заполните то, что ваш эндпоинт поддерживает.
Pre-registered внутренний ChatModel
Graph-kernel runtime pre-registers внутренний ChatModel для provider id custom при загрузке, даже когда ключ ещё не сконфигурирован. Это свойство «сконфигурированный ПОСЛЕ загрузки маршрутизируется немедленно, без рестарта», которое операторы ожидают от Settings UI:
// cmd/ongrid/main.go:2457
for _, id := range []string{
llm.ProviderOpenAI, llm.ProviderAnthropic, llm.ProviderZhipu,
llm.ProviderGemini, llm.ProviderDeepSeek, llm.ProviderKimi, llm.ProviderCustom,
} {
if _, ok := innerModels[id]; !ok {
addInner(id, "") // model supplied per-call (picker / DefaultResolver)
}
}Внутренний существует при загрузке; per-call key / baseURL разрешается динамически через LLM-settings resolver. Несконфигурированные providers никогда не достают до picker (каталог /v1/aiops/models гейтится на ResolveProviders), так что внутренний безвреден, пока он действительно не нужен.
Примеры конфигурации
OpenRouter
ONGRID_CUSTOM_API_KEY=sk-or-v1-...
ONGRID_CUSTOM_BASE_URL=https://openrouter.ai/api/v1
ONGRID_CUSTOM_MODEL=anthropic/claude-sonnet-4
ONGRID_CUSTOM_MODELS=anthropic/claude-sonnet-4,anthropic/claude-opus-4,meta-llama/llama-3.3-70bЛокальный vLLM
ONGRID_CUSTOM_API_KEY=sk-not-checked-by-vllm
ONGRID_CUSTOM_BASE_URL=http://vllm.internal:8000/v1
ONGRID_CUSTOM_MODEL=Qwen2.5-72B-Instruct
ONGRID_CUSTOM_MODELS=Qwen2.5-72B-InstructvLLM не валидирует API-ключи по умолчанию — поставьте любую непустую строку.
Groq
ONGRID_CUSTOM_API_KEY=gsk_...
ONGRID_CUSTOM_BASE_URL=https://api.groq.com/openai/v1
ONGRID_CUSTOM_MODEL=llama-3.3-70b-versatileMistral
ONGRID_CUSTOM_API_KEY=...
ONGRID_CUSTOM_BASE_URL=https://api.mistral.ai/v1
ONGRID_CUSTOM_MODEL=mistral-large-latestСделать Custom дефолтным
ONGRID_LLM_DEFAULT_PROVIDER=customБерегитесь LLM-resolver bug — если default_provider не установлен, resolver fall back'ит на первый отсортированный provider id (anthropic). С OpenRouter, подключённым через custom slot, но default_provider="", chat-вызовы идут к Anthropic model id на Anthropic-эндпоинте, не OpenRouter — который падает на auth. Поставьте default_provider=custom явно.
Особенности
- Schema fidelity — предполагает, что эндпоинт говорит реальный OpenAI Chat Completions. Эндпоинты, которые срезают поля (
tool_calls,finish_reason), будут стабильно деградировать function-calling агента. - Streaming — многие relays пока не поддерживают streaming. Адаптер обрабатывает оба режима; если
Stream()ошибается"streaming not supported", chat-UI авто-fall back'ит на buffered. - Нет нативного rate-limit — корпоративные шлюзы часто наложат per-token rate limits, которые не показываются как стандартные 429. Поставьте
ONGRID_LLM_DAILY_TOKEN_LIMITдля cross-provider budget-guard — см. Budget.
См. также
- OpenAI (GPT) — для реального OpenAI-эндпоинта или Azure OpenAI.
- Обзор моделей.
- Routing.