Warp

Warp Router

Warp 라우터

모든 요청이 프론티어 모델을 쓸 필요는 없습니다. Warp은 프롬프트 난이도를 수 밀리초 만에 점수화해서, 품질을 지키는 선에서 가장 저렴한 티어로 요청을 보냅니다.

warp/auto — 자동 라우팅

model: "warp/auto"로 요청하면 매 요청을 평가해 알맞은 모델로 보냅니다. 쉬운 요청은 가벼운 모델이, 어려운 요청은 상위 모델이 맡습니다. 평가는 게이트웨이 안에서 수 밀리초 안에 끝나며 별도 LLM 호출이 없어, 라우팅 자체가 지연이나 비용을 더하지 않습니다.

어떤 모델이 서빙했는지는 응답 메타의 model x-warp-model 헤더로, 얼마나 아꼈는지는 saved_usd로 매 요청 확인할 수 있습니다.

인텐트 다이얼

워크로드마다 원하는 트레이드오프가 다릅니다. warp.dial(요청 단위) 또는 키의 라우팅 정책(routing.dial)으로 4가지 중 하나를 고릅니다. 적용된 다이얼은 응답 메타 dialx-warp-dial 헤더로 확인합니다.

다이얼설명추천 워크로드
balanced기본값. 비용과 품질의 균형점.범용 백엔드 · 사내 어시스턴트 · 기본 통합
strict-quality품질 우선. 상위 모델로 더 쉽게 올리고, 하향에 보수적입니다.고객 대면 챗봇 · 법률/의료 등 오답 비용이 큰 업무
max-savings절약 우선. 점수와 무관하게 가장 저렴한 티어로 보냅니다 (anchor가 걸린 최고난도 요청만 예외).대량 배치 · 오프라인 파이프라인 · 태깅/분류
low-latency속도 우선. 올리는 기준은 balanced와 같고, 고른 후보 중 응답이 빠른 쪽과 직전에 쓰던 모델을 우선합니다.앵커를 건 실시간 UI · 자동완성 · 음성/스트리밍 프런트

자동 라우터 — 셋

셋뿐이고, 위의 warp/auto도 그중 하나입니다. 셋 다 자동으로 라우팅하며, 무엇을 대상으로 고르는지가 다릅니다. 라우터 id를 모델 문자열로 지정할 수 있습니다. 전부 가상 모델 id라 어떤 OpenAI SDK에서도 model 문자열 하나만 바꾸면 적용됩니다.

라우터 id설명추천 워크로드
warp/auto기본 — 프롬프트 난이도를 점수화해 알맞은 티어로 보냅니다.범용
warp/code코드코딩 특화 — 티어별로 코딩 작업에 맞춰 고른 체인을 쓰고, 어려운 코드는 프론티어로 보냅니다.코드 작성·리팩터링·디버깅, 코딩 에이전트
warp/nitro최고 속도실측 처리량(tokens/sec)·지연 기준으로 가장 빠른 모델을 고릅니다. 난이도 티어 없음.실시간 UI · 자동완성 · 음성/스트리밍

지정 라우팅 — 쓰던 모델을 기준으로

warp/auto에 모델 선택을 통째로 맡기는 게 부담스럽다면, 반대 방향으로 쓸 수 있습니다. 지금 쓰는 모델을 warp.anchor로 지정하면 그 모델이 품질 상한이 됩니다 — 어려운 요청은 반드시 그 모델이 답하고, 쉬운 요청만 아래 티어로 내려갑니다. 정할 것은 두 가지뿐입니다.

정하는 것필드
품질 상한anchor지금 쓰는 모델의 카탈로그 id. 어려운 요청은 여기까지 올라오고, 이 위로는 올라가지 않습니다.
성향dialstrict-quality(품질 우선) · balanced(균형, 기본값) · max-savings(절약 우선) · low-latency(속도 우선) — 인텐트 다이얼 참조.

dial을 생략하면 balanced입니다. 즉 최소 형태는 앵커 한 줄입니다.

request.json
{
  "model": "warp/auto",
  "messages": [{ "role": "user", "content": "이번 분기 지표를 요약해줘" }],
  "warp": {
    "anchor": "anthropic/claude-fable-5"
  }
}

나머지는 라우터가 정합니다

어떤 경량 모델을 붙일지, 언제 내려보낼지는 고르지 않아도 됩니다. 후보는 티어별로 선별된 체인이고, 벤치마크 성적을 참고해 저희가 갱신합니다 — 직접 고르거나 관리하지 않아도 됩니다. 특정 모델이나 벤더를 쓰지 않게 하려면 고르는 대신 모델 정책으로 제외하세요.

요청 본문을 못 보내는 도구

Claude Code·Cursor처럼 고정된 형식으로만 말하는 도구는 요청에 warp 객체를 넣을 자리가 없습니다. 이런 도구는 키에 저장된 라우팅 기본값을 씁니다 — 적용 순서는 요청 > 키 > 조직이라, 키에 앵커를 저장해두면 그 키로 들어오는 warp/auto 요청 전부에 적용됩니다. 도구별 설정은 도구 연동을 참고하세요.

터미널
curl -X PATCH https://api.warp.inc/v1/org/keys/key_abc123 \
  -H "Authorization: Bearer $WARP_ADMIN_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "routing": {
      "anchorModel": "anthropic/claude-fable-5",
      "dial": "balanced"
    }
  }'

동적 가격 추적

카탈로그에 표시된 가격은 스냅샷입니다. 실제 과금 단가는 LiteLLM·OpenRouter 가격 피드에서 주기적으로 동기화되며(기본 6시간), 변경 이력은 model_pricing 이력 테이블에 기록됩니다. 현재 단가는 GET /admin/pricing으로 조회하고, POST /admin/pricing/refresh로 즉시 재동기화하거나, PUT /admin/pricing/override로 특정 모델의 단가를 수동 고정할 수 있습니다.

명시적 모델 지정

카탈로그 id는 vendor/model 형식입니다 — 예: anthropic/claude-fable-5, openai/gpt-5.2, deepseek/deepseek-v3.2. 전체 목록은 GET /v1/models로 조회합니다. 모델을 명시하면 라우팅을 거치지 않고 그대로 전달되며(classifier_score: null), 카탈로그에 없는 id는 404 model_not_found로 거부됩니다. 다만 warp.tier는 명시 모델에도 지출 상한으로 적용됩니다 — 상한을 넘는 모델을 지목하면 그 요청은 강제된 티어의 라우팅을 다시 타고, 예산 하향이 모델 이름을 하드코딩한 클라이언트만 비껴가지 않게 합니다.

요청별 warp 옵션

요청 본문의 warp 객체로 라우팅·캐시 동작을 요청 단위로 제어할 수 있습니다. 모든 필드는 선택 사항입니다.

request.json
{
  "model": "warp/auto",
  "messages": [{ "role": "user", "content": "핵심 API를 설계해줘" }],
  "warp": {
    "dial": "strict-quality",
    "anchor": "anthropic/claude-fable-5",
    "session_id": "conv_8f2a91",
    "context_compression": true,
    "no_cache": true
  }
}
필드타입설명
dialbalanced | strict-quality | max-savings | low-latency이 요청의 인텐트 다이얼. 생략 시 키에 설정된 다이얼, 그다음 balanced. 앵커가 걸린 요청에서만 적용됩니다.
anchorstring앵커(상한) 모델 id — 초고난도 쿼리도 이 모델 이상으로는 폴백하지 않습니다. 키의 routing.anchorModel보다 우선합니다.
cascadeboolean품질 재검증 — 기본 true. 티어 2·3이 낸 답이 명백히 못 쓸 응답이면 한 단계 위 티어에서 한 번 다시 서빙합니다. 자동으로 되는 것 참조. 키의 routing.cascade보다 우선합니다.
session_idstring스티키 라우팅 세션 id — 같은 id의 대화는 프롬프트 캐시가 따뜻한 모델로 고정됩니다 (x-warp-sticky 헤더로 확인).
context_compressionboolean과도하게 긴 프롬프트의 중간을 잘라(lost-in-the-middle trim) 더 저렴한 모델의 컨텍스트 윈도에 맞춥니다.
tier1 | 2 | 3라우터가 고르는 대신 이 티어를 강제합니다. 명시 모델·warp/nitro를 포함한 모든 경로에서 지출 상한으로 적용됩니다.
no_cacheboolean이 요청의 캐시 조회·저장을 모두 비활성화합니다.
no_pii_maskboolean키에 PII 마스킹이 켜져 있어도 이 요청만 마스킹 없이 전달합니다.
fallbacksstring[]명시 모델 요청 전용 — 지정한 모델 뒤에 이어 붙는 카탈로그 id 체인입니다. 라우터 id를 쓰면 폴백은 이미 자동으로 동작합니다.
shadowboolean검증(섀도) 모드 — 응답은 앵커(없으면 기준 모델)가 그대로 서빙하고, 라우터가 골랐을 모델과 예상 비용은 응답 메타 warp.shadow(would_model · would_tier · would_cost_usd)와 x-warp-shadow 헤더에 기록만 합니다. 실제 트래픽으로 라우터를 무위험 검증할 때 쓰세요. 키의 routing.shadow보다 우선하며, 자동 라우팅에만 적용됩니다.

Fallback 체인의 동작

  • 재시도 조건 — 업스트림이 429, 5xx, 또는 인증·한도 오류(401·402·403)를 반환하거나 네트워크/타임아웃 오류가 나면 다음 후보로 자동 전환합니다 — 한 프로바이더의 키가 만료되거나 잔액이 떨어졌다고 요청 전체가 실패할 이유는 없기 때문입니다. 그 외 4xx(잘못된 요청 등)는 즉시 실패합니다 — 다만 잔액 소진·엔진 과부하처럼 “이 호스트가 못 한다”는 벤더 코드가 실려 오면 429처럼 다음 후보로 넘어갑니다.
  • 전환 순서 — 같은 모델의 대체 프로바이더(altProviders, 예: DeepInfra → Novita)를 먼저 시도한 뒤, 다음 후보 모델로 넘어갑니다.
  • 추적 — 시도한 경로는 응답 메타의 attempts 배열과 x-warp-attempts 헤더에 기록됩니다.
  • 전부 실패 시502 upstream_unavailable로 응답합니다.
  • 예산 다운그레이드 — 키 또는 그 팀이 예산을 넘고 정책이 downgrade이면, 그 키의 모든 요청이 Tier 3로 강제됩니다 — 자동 라우팅도, 직접 지정한 모델도, warp/nitro도 같습니다. 거버넌스 참조.

응답 메타데이터

모든 응답에는 라우팅 결과가 본문 warp 필드와 x-warp-* 헤더로 붙습니다.

response.json
{
  "id": "chatcmpl-…",
  "object": "chat.completion",
  "model": "moonshot/kimi-k2.7-code",
  "choices": [ … ],
  "usage": { "prompt_tokens": 21, "completion_tokens": 96, "total_tokens": 117 },
  "warp": {
    "model": "moonshot/kimi-k2.7-code",
    "provider": "moonshot",
    "tier": 2,
    "classifier_score": 0.41,
    "cache_hit": null,
    "cost_usd": 0.000122,
    "saved_usd": 0.003886,
    "latency_ms": 842,
    "pii_masked": 0,
    "attempts": [],
    "dial": "balanced",
    "sticky": true,
    "pipeline": ["difficulty:0.41→tier2", "context:fit=3/3", "sticky:applied"],
    "guardrails": { "mode": "mask", "findings": 0, "blocked": false }
  }
}
헤더
x-warp-model실제 서빙한 카탈로그 모델 id
x-warp-tier라우팅된 티어 (1–3). 티어가 없는 요청에는 헤더가 붙지 않습니다.
x-warp-cacheexact | semantic | miss
x-warp-cost-usd이 요청의 비용 (USD, 소수 6자리)
x-warp-saved-usdTier 1 baseline 대비 절감액 (USD)
x-warp-attempts이 요청에서 기록된 시도 메모 (폴백이 일어났을 때 등)
x-warp-dial적용된 인텐트 다이얼 — balanced · strict-quality · max-savings · low-latency
x-warp-stickytrue | false — 스티키 라우팅이 캐시가 따뜻한 프로바이더로 고정했는지. 캐시 히트 응답에는 붙지 않습니다 — 라우팅 전에 반환되기 때문입니다.
x-warp-guardrail-findings가드레일 탐지 건수 (0이어도 붙습니다) — 티어드 가드레일 참조

스트리밍에서는 비용을 미리 알 수 없으므로 시작 시 x-warp-model · x-warp-tier · x-warp-dial · x-warp-strategy · x-warp-sticky · x-warp-attempts · x-warp-shadow · x-warp-guardrail-findings가 헤더로 나가고, 스트림의 마지막 데이터 청크(choices: [])에 usagewarp 메타 전체가 담긴 뒤 data: [DONE]이 옵니다.