Skip to content

Custom (OpenAI 호환)

TL;DR

bash
ONGRID_CUSTOM_API_KEY=...
ONGRID_CUSTOM_BASE_URL=https://your-relay/v1     # 필수 — 업스트림 기본 없음
ONGRID_CUSTOM_MODEL=your-default-model

Provider 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 건너뜀:

go
// internal/manager/biz/setting/llm.go:155
if pk.id == model.LLMProviderCustom && strings.TrimSpace(baseURL) == "" {
    continue
}

env 또는 Settings UI 로 BaseURL 제공; 그렇지 않으면 provider 가 카탈로그 에 절대 나타나지 않음.

환경 변수

VarDefaultNotes
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 에서 운영자가 기대하는 "부팅 후 구성 시 재시작 없이 즉시 라우팅" 속성:

go
// 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

bash
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

bash
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-Instruct

vLLM 은 기본적으로 API 키를 검증하지 않음 — 아무 비어 있지 않은 문자열 설정.

Groq

bash
ONGRID_CUSTOM_API_KEY=gsk_...
ONGRID_CUSTOM_BASE_URL=https://api.groq.com/openai/v1
ONGRID_CUSTOM_MODEL=llama-3.3-70b-versatile

Mistral

bash
ONGRID_CUSTOM_API_KEY=...
ONGRID_CUSTOM_BASE_URL=https://api.mistral.ai/v1
ONGRID_CUSTOM_MODEL=mistral-large-latest

Custom 을 기본으로 만들기

bash
ONGRID_LLM_DEFAULT_PROVIDER=custom

LLM 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 설정 — 예산 참고.

같이 보기