Provider 라우팅
`provider{}` 로 후보를 좁히고 순서를 바꾼다
한 모델을 서빙하는 곳은 여러 군데일 수 있습니다 — 우리 GPU 의 슬롯, 외부 provider, 때로는 양쪽 다. 요청 본문의 provider 객체로 그중 무엇을 받아들일지, 어떤 순서로 시도할지 지정합니다.
{
"model": "google/gemma-4-26b-a4b",
"provider": { "only": ["local-gpu"], "sort": "price" },
"messages": [{ "role": "user", "content": "…" }]
}provider 객체가 아예 없으면 후보는 priority 순으로 정렬되고, 그 결과 로컬 GPU 슬롯이 맨 앞에 옵니다. 로컬 우선 라우팅 을 보세요.
Provider slug
order, only, ignore 에 넣는 값은 provider slug 입니다. 목록은 이렇게 봅니다.
curl https://openrouter.myip.co.kr/api/v1/providers{
"data": [
{ "name": "MyIP Local GPU", "slug": "local-gpu", "model_count": 4,
"privacy_policy_url": null, "terms_of_service_url": null, "status_page_url": null }
]
}local-gpu 가 우리 하드웨어의 slug 입니다. 어떤 외부 provider 가 있는지는 운영자가 등록한 바에 따라 달라지므로, 코드에 박아 두지 말고 목록을 읽으세요.
특정 모델을 어떤 provider 가 어떤 컨텍스트·양자화로 서빙하는지 보려면:
curl https://openrouter.myip.co.kr/api/v1/models/google/gemma-4-26b-a4b/endpoints필드
orderstring[]나열한 slug 를 준 순서대로 앞으로 당깁니다. 나열하지 않은 slug 는 그 뒤에서 원래 순서를 유지합니다. 필터가 아니라 재정렬입니다.
onlystring[]나열한 slug 만 남깁니다. 남는 것이 없으면 404 no_endpoints_found 입니다.
ignorestring[]나열한 slug 를 체인에서 제거합니다.
sortstringprice — 프롬프트 단가가 싼 순(동률이면 완성 단가). throughput — 측정 처리량이 높은 순. latency — 측정 지연이 낮은 순. 측정값이 없는 후보는 뒤로 갑니다. 모른다는 것이 좋다는 뜻은 아니기 때문입니다.
allow_fallbacksbooleanfalse 면 체인을 후보 하나로 잘라냅니다. 넘어갈 곳이 없으니 실패는 그대로 실패입니다.
max_priceobject{"prompt": number, "completion": number} 이며 단위는 토큰당 USD 입니다. OpenAI 호환 생태계가 이 필드에 쓰는 단위와 같습니다. 우리는 현재 환율로 환산해서, 원화 단가가 그 상한을 넘는 후보를 제거합니다.
require_parametersbooleantrue 면 요청 본문에 실린 파라미터를 전부 광고하지 않는 후보를 제거합니다. 파라미터 목록이 아예 비어 있는 후보는 남깁니다 — 빈 목록은 "모른다"이지 "지원하지 않는다"가 아니기 때문입니다.
data_collectionstring"deny" 면 데이터를 수집하는 것으로 알려진 후보를 제거합니다. 해당 메타데이터가 없는 후보는 남깁니다.
zdrbooleantrue 면 무보존(zero data retention)을 제공하지 않는 것으로 알려진 후보를 제거합니다. 메타데이터가 없는 후보는 남깁니다.
quantizationsstring[]양자화가 이 목록에 있는 후보만 남깁니다. 양자화를 모르는 후보는 남깁니다.
적용 순서
필드는 고정된 순서로 적용되고, 그 순서가 결과를 바꿉니다.
order → only → ignore → sort → allow_fallbacks → max_price → require_parameters → 메타 필터 → 쿨다운기억해 둘 두 가지가 있습니다.
sort가order를 덮습니다. 둘 다 주면 정렬이 나중에 돌면서 전체를 다시 늘어놓습니다. 정렬은 안정 정렬이라 동률인 후보는 이전 순서를 유지하는데, 여러분의order가 살아남는 곳은 딱 거기뿐입니다.allow_fallbacks: false는 가격·파라미터 필터보다 먼저 돕니다. 체인이 먼저 후보 하나로 잘리고, 그 후보가max_price나require_parameters에 걸려 제거되면 더 싼 대안이 아니라404 no_endpoints_found가 돌아옵니다.
쿨다운은 마지막에 적용됩니다. 3회 연속 실패한 후보는 여러분의 조건과 무관하게 60초 동안 건너뜁니다.
예제
# 로컬 GPU 만 — 이 프롬프트를 외부 provider 가 보지 못하게 한다
curl https://openrouter.myip.co.kr/api/v1/chat/completions \
-H "Authorization: Bearer $MYIP_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "google/gemma-4-26b-a4b",
"provider": { "only": ["local-gpu"] },
"messages": [{ "role": "user", "content": "사내 문서를 요약해 줘." }]
}'models[] 와의 관계
models[] 는 모델을 고르고, provider{} 는 그 모델들의 엔드포인트를 한꺼번에 거르고 정렬합니다. provider 객체는 모델별이 아니라 이어 붙인 체인 전체에 적용됩니다. 특히 allow_fallbacks: false 는 "모델마다 하나"가 아니라 전체에서 하나로 자릅니다. 모델 폴백 을 보세요.
결과 확인
X-MyIP-Provider: MyIP Local GPU
X-MyIP-Model: google/gemma-4-26b-a4b기대한 provider 가 아니었다면 GET /api/v1/generation?id=… 의 provider_responses 에 시도한 것과 지나친 이유가 남아 있습니다.
우리에게 없는 것
다른 게이트웨이에는 있지만 우리는 일부러 두지 않은 것들입니다.
- 오토 라우팅·프론티어 선택. 모델을 대신 고르는 메타 모델도, 파레토·융합 라우터도 없습니다. 라우팅은 여러분의 체인이 전부입니다.
- 모델 변종.
:nitro,:floor,:free접미사가 없습니다. 대신sort: "throughput"이나sort: "price"를 쓰세요 — 그 접미사들이 축약하던 것이 바로 이것입니다. - 프리셋. 서버에 저장해 두는 라우팅 설정이 없습니다. 요청마다
provider객체를 보내거나, 여러분 쪽 클라이언트로 감싸세요. - BYOK. 여러분의 provider 자격증명을 붙일 수 없습니다. 키 응답의
byok_*필드는 언제나 0 입니다.
해당 기능의 엔드포인트는 404 not_supported 입니다. 지원하지 않는 엔드포인트 를 보세요.
마지막 수정 2026. 9. 5.