Custom (OpenAI 호환)
TL;DR
ONGRID_CUSTOM_API_KEY=...
ONGRID_CUSTOM_BASE_URL=https://your-relay/v1 # 필수 — 업스트림 기본 없음
ONGRID_CUSTOM_MODEL=your-default-modelProvider id: custom. SDK 어댑터: eino-openai (모든 OpenAI Chat Completions 호환 엔드포인트).
Custom 슬롯은 Settings UI 의 7 번째 provider 카드. 와이어 레벨에서 OpenAI 호환이지만 6 개 베이크된 provider 중 하나가 아닌 모든 것을 위해 존재:
- 셀프 호스트 vLLM / TGI / llama.cpp.
- OpenRouter, Together, Fireworks, Anyscale, Groq, Mistral.
- 사내 corporate 모델 게이트웨이.
- Ongrid 가 전용 슬롯을 추가하기 전에 출하되는 새 provider.
Base URL 가드
Custom 슬롯은 명시적 base URL 필수. 없으면 기반 SDK 가 OpenAI 의 기본 (https://api.openai.com/v1) 으로 조용히 폴백하여 운영자의 custom 키를 잘못된 호스트로 보냄. Resolver 가 그 경우 provider 건너뜀:
// internal/manager/biz/setting/llm.go:155
if pk.id == model.LLMProviderCustom && strings.TrimSpace(baseURL) == "" {
continue
}env 또는 Settings UI 로 BaseURL 제공; 그렇지 않으면 provider 가 카탈로그 에 절대 나타나지 않음.
환경 변수
| Var | Default | Notes |
|---|---|---|
ONGRID_CUSTOM_API_KEY | — | 비어 있음 = provider 제거 |
ONGRID_CUSTOM_BASE_URL | — | 필수 |
ONGRID_CUSTOM_MODEL | — | 모든 호출에 보내는 기본 모델 id |
ONGRID_CUSTOM_MODELS | — | 카탈로그 리스트 (SPA picker 가 보여 주는 폐쇄 셋) |
박스 그대로의 기본 카탈로그 없음 — 엔드포인트가 지원하는 것 채움.
사전 등록된 내부 ChatModel
그래프 커널 런타임이 custom provider id 에 대해 키가 아직 구성되지 않은 경우에도 부팅 시 내부 ChatModel 을 사전 등록. 이것이 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)
}
}내부는 부팅 시 존재; 호출별 키 / baseURL 은 LLM 설정 resolver 를 통해 동적으로 해석. 미구성 provider 는 절대 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-latestCustom 을 기본으로 만들기
ONGRID_LLM_DEFAULT_PROVIDER=customLLM resolver 버그 주의 — default_provider 가 설정되지 않으면 resolver 가 첫 정렬 provider id (anthropic) 로 폴백. OpenRouter 를 custom 슬롯으로 배선하고 default_provider="" 인 경우 채팅 호출은 Anthropic 의 모델 id 를 Anthropic 의 엔드포인트로, OpenRouter 가 아닌 — auth 실패. default_provider=custom 명시적 설정.
특이점
- 스키마 fidelity — 엔드포인트가 진짜 OpenAI Chat Completions 를 말한다고 가정. 필드 (
tool_calls,finish_reason) 를 제거하는 엔드포인트는 에이전트의 function calling 을 확실히 저하시킴. - 스트리밍 — 많은 relay 가 아직 스트리밍 지원하지 않음. 어댑터가 두 모드 모두 처리;
Stream()이"streaming not supported"로 에러 나면 채팅 UI 가 버퍼링으로 자동 폴백. - 네이티브 rate-limit 없음 — 사내 게이트웨이는 종종 표준 429 로 나타나지 않는 토큰별 rate limit 을 부과. 크로스 provider 예산 가드 용으로
ONGRID_LLM_DAILY_TOKEN_LIMIT설정 — 예산 참고.
같이 보기
- OpenAI (GPT) — 진짜 OpenAI 엔드포인트 또는 Azure OpenAI 용.
- 모델 개요.
- 라우팅.