Skip to content

Routing Policies

폴백 체인·가중 분산·속도 우선 라우팅을 정책으로 저장해 두고 model:"policy/<slug>"로 호출합니다.

라우팅 정책은 여러 모델을 하나의 호출 규칙으로 묶습니다 — 최대 10개의 모델 엔트리를 한 slug에 저장해 두면, 일반 채팅 호출에서 "model": "policy/<slug>"만 지정해 그 규칙대로 라우팅됩니다. 타입은 fallback·weighted·latency 3가지이며, 정책은 계정에 종속되고 발급한 plm_ 키로 호출합니다.

라우팅 정책 기능은 기본 비활성입니다(운영 설정 routing.policies_enabled). 비활성 상태에서 policy/ 모델을 호출하면 400 에러가 반환됩니다 — 정책 저장(CRUD)은 게이트와 무관하게 가능합니다.

정책 타입#

fallback — 엔트리를 등록한 순서 그대로 시도합니다. 각 엔트리에 retries(0~3)를 지정하면 같은 엔트리를 그 횟수만큼 반복한 뒤 다음 엔트리로 넘어갑니다. 첫 성공 응답이 그대로 반환됩니다.

weighted — 각 엔트리의 weight(1~10000) 비율로 요청을 분산합니다. 요청 본문에 trace_id를 넣으면 그 값의 해시로 결정론적으로 선택되어 같은 trace_id는 항상 같은 모델로 갑니다(sticky). 선택된 엔트리가 실패하면 나머지를 weight 내림차순으로 폴백합니다.

latency — 최근 1시간 실측 응답속도 기준으로 엔트리를 빠른 순으로 재정렬해 시도합니다(:nitro 접미사와 같은 스코어러). 측정 데이터가 없으면 등록 순서 그대로 시도합니다.

정책 호출#

일반 채팅 호출에서 "model": "policy/<slug>"로 지정하면 됩니다. OpenAI SDK와 plm_ 키 그대로 동작하며, 응답의 model·provider 필드로 실제 서빙된 모델을 확인할 수 있습니다. 과금은 실제로 성공한 엔트리의 모델·프로바이더 단가 기준입니다.

invoke policy
curl https://router.pleum.ai/v1/chat/completions \
  -H "Authorization: Bearer plm_..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "policy/prod-chat",
    "messages": [
      {"role": "user", "content": "Summarize this document."}
    ]
  }'

trace_id(최대 128자)는 라우팅 전용 필드입니다 — weighted 정책의 sticky 시드로만 쓰이고 업스트림 프로바이더로는 전달되지 않습니다. 같은 사용자·세션을 같은 모델에 고정하고 싶을 때 사용자 ID나 세션 ID를 넣으세요.

weighted + sticky trace_id
curl https://router.pleum.ai/v1/chat/completions \
  -H "Authorization: Bearer plm_..." \
  -H "Content-Type: application/json" \
  -d '{
    "model": "policy/ab-test",
    "trace_id": "user-1234",
    "messages": [
      {"role": "user", "content": "Hello!"}
    ]
  }'

스트리밍에서는 첫 토큰이 나가기 전의 실패만 다음 엔트리로 무중단 폴백됩니다. 토큰이 하나라도 클라이언트로 전송된 뒤의 실패는 폴백하지 않고 스트림이 종료됩니다(이중 전송 방지). 엔트리별 retries는 비스트리밍 호출에만 적용됩니다.

정책 관리#

정책은 대시보드의 라우팅 정책 페이지에서 만들거나, /v1/routing-policies 관리 API(JWT 인증)로 CRUD할 수 있습니다. 필드 상세는 API 레퍼런스를 참고하세요.

엔트리는 1~10개이며 실제 활성 모델만 넣을 수 있습니다. 다른 정책(policy/…)이나 가상 모델(pleum-smart·pleum-perfect)은 엔트리로 쓸 수 없습니다. 요청 1건의 총 시도 횟수는 상한(기본 6회)으로 제한됩니다.