> For the complete documentation index, see [llms.txt](https://genos-docs.gitbook.io/default/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://genos-docs.gitbook.io/default/v1.9.3/basic-tutorials/guides/llm/revision-budget.md).

# 서빙 리비전 월 예산

## 개요

월 예산은 **하나의 서빙 리비전이 KST 기준 한 달 동안 쓸 수 있는 크레딧 상한**입니다. 계정 크레딧이 "누가 얼마나 쓸 수 있는가"를 통제하는 반면, 월 예산은 "이 모델에 얼마까지 쓸 것인가"를 통제합니다. 예산을 넘긴 리비전은 계정에 잔액이 남아 있어도 호출이 차단됩니다.

관리자 콘솔의 `외부 API 추가` 또는 `서빙 리비전 추가` 화면에서 차감 크레딧 아래에 입력합니다.

<figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-96c878d59a0eaa4d51898605f5fa577cec9207c2%2Frevbudget_03_budget_filled.png?alt=media" alt="월 예산 입력"><figcaption><p>월 예산 입력</p></figcaption></figure>

크레딧 자체의 배정·과금 규칙은 크레딧 과금 매뉴얼을 참고하세요.

## 주요 개념

| 개념     | 설명                                                   |
| ------ | ---------------------------------------------------- |
| 월 예산   | 리비전 하나의 한 달 크레딧 상한입니다. 비워 두면 무제한입니다.                 |
| 주기     | 매월 1일 0시(KST)에 새로 시작합니다. 사용액은 0으로 돌아갑니다.             |
| 예약     | 진행 중인 호출이 쓸지 모르는 최대치를 잠시 잡아 두는 값입니다. 동시 요청 제어에만 씁니다. |
| 사용률 배지 | 리비전 상세에 표시되는 `사용 크레딧 / 월 예산` 표시입니다.                  |
| 소진     | 사용액이 예산에 도달한 상태입니다. 배지가 빨간 `소진`으로 바뀝니다.              |

## 월 예산 설정

차감 크레딧(단가)이 없으면 월 예산 입력은 비활성화됩니다. 크레딧 환산액이 0이면 예산이 진행되지 않아 설정 자체가 무의미하기 때문입니다.

<figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-3db25f0343e9b5b30f58dbe9d454c00c9dc9bc82%2Frevbudget_01_budget_disabled.png?alt=media" alt="월 예산 비활성"><figcaption><p>월 예산 비활성</p></figcaption></figure>

입력·출력 단가 중 하나 이상을 양수로 설정하면 입력할 수 있게 됩니다.

<figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-608e246bea506deb412de01e5d34e3d08b50486f%2Frevbudget_02_budget_enabled.png?alt=media" alt="월 예산 활성"><figcaption><p>월 예산 활성</p></figcaption></figure>

| 항목  | 값                    |
| --- | -------------------- |
| 단위  | 크레딧/월                |
| 범위  | 0 \~ 99,999,999 정수   |
| 빈 값 | 무제한                  |
| 주기  | 매월 1일 0시 KST         |
| 대상  | 단가가 설정된 LLM·VLM 리비전만 |

**0은 무제한이 아니라 첫 호출부터 차단한다는 뜻입니다.** 무제한으로 두려면 값을 비웁니다.

<figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-4bfaf6548c3433c3d3c5c975c67b32347bd408f2%2Frevbudget_06_budget_unlimited.png?alt=media" alt="월 예산 무제한"><figcaption><p>월 예산 무제한</p></figcaption></figure>

예산은 리비전 생성 시 단가와 함께 고정됩니다. 기존 리비전의 예산을 바꾸거나 같은 달에 소진된 리비전을 다시 열려면 **새 리비전을 만들어 전환**해야 합니다. 리비전 기본정보 탭은 읽기 전용이고 단가도 수정 경로가 없으므로, 예산만 수정 가능하게 하면 비대칭이 되기 때문입니다.

같은 서빙의 다른 리비전은 각각 별도 예산을 사용합니다. 임베딩·리랭킹·이미지 계열은 월 예산 대상이 아니어서 입력 항목 자체가 표시되지 않습니다.

## 이번 달 사용률 확인

예산을 설정한 리비전은 `서빙 리비전 상세 > 기본 정보` 탭의 `월 예산` 옆에 이번 달 사용률 배지가 붙습니다. 괄호 안은 `사용 크레딧 / 월 예산`입니다.

<figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-ee14278959191d20b7d03d1343f7b9d9620d9453%2Frevbudget_04_budget_usage_badge.png?alt=media" alt="월 예산 사용률 배지"><figcaption><p>월 예산 사용률 배지</p></figcaption></figure>

예산을 다 쓰면 같은 자리가 빨간 `소진` 배지로 바뀝니다. **100%를 넘겨 표시되는 것이 정상입니다** — 아래 "예산은 정확히 어디서 끊기나"에서 설명하듯 마지막 요청 1건만큼 초과한 뒤 차단됩니다.

<figure><img src="https://541419907-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FKhN1XWFV3oOVnFMMIHTE%2Fuploads%2Fgit-blob-001a6561bd955c6bae5652d26a119a429ee1b4c6%2Frevbudget_05_budget_depleted_badge.png?alt=media" alt="월 예산 소진 배지"><figcaption><p>월 예산 소진 배지</p></figcaption></figure>

| 상황                    | 배지                        |
| --------------------- | ------------------------- |
| 예산을 비워 둔 리비전(무제한)     | 표시하지 않습니다                 |
| 예산은 있고 이번 달 사용 이력이 없음 | `사용률 0% (0 / 예산)`         |
| 예산 이내 사용              | `사용률 n% (사용 / 예산)`        |
| 예산 초과                 | 빨간 `소진 n% (사용 / 예산)`      |
| 임베딩·리랭킹·이미지 계열        | 월 예산 대상이 아니라 항목이 보이지 않습니다 |

배지의 분자는 **정산이 끝난 사용액**입니다. 그래서 응답이 오지 않은 호출 때문에 잡아 둔 예약분은 아직 반영되지 않으며, 그 예약이 유지되는 동안(최대 1시간) **배지가 100% 미만인데도 호출이 차단될 수 있습니다.** 배지와 차단이 어긋나 보이면 잠시 후 다시 확인해 주세요.

## 예산은 정확히 어디서 끊기나

예산이 조금이라도 남아 있으면 **요청 1건은 통과합니다.** 그래서 사용액이 예산을 약간 넘은 뒤에 차단되는 것이 정상이며, 초과폭의 상한은 그 마지막 1건의 실제 사용량입니다.

호출 전에는 응답 길이를 알 수 없으므로, 요청 크기로 계산한 넉넉한 예상치를 잠시 잡아 둡니다. 이 예상치는 **차단 판정에는 쓰지 않고 동시에 들어온 다른 호출을 막는 데만** 씁니다. 요청 바이트 수를 입력 토큰 상한으로 쓰기 때문에 실제보다 훨씬 크고(실측 약 20배), 판정에 쓰면 사용률 0%인 예산에서도 소진으로 막히기 때문입니다.

따라서 큰 요청 하나가 처리되는 동안 같은 리비전의 다른 호출이 잠시 예산 초과로 막힐 수 있으며, 앞선 호출이 끝나면 풀립니다.

## 호출 경로별 동작

월 예산은 리비전별 상한입니다. 같은 서빙의 다른 리비전이나 라우터에 묶인 다른 서빙에는 각자의 예산이 남아 있으므로, "후보를 바꿔서 의미가 있는가"에 따라 경로별 동작이 갈립니다.

| 호출 경로                             | 예산이 소진된 대상이 선택되면                                                         |
| --------------------------------- | ------------------------------------------------------------------------ |
| 서비스 라우터 엔드포인트                     | 그 대상을 이번 요청의 후보에서 빼고 **다른 후보로 자동 전환**합니다. 후보가 전부 소진이면 `13030003`으로 차단합니다 |
| 대표 서빙(`/rep/serving`) · 리비전 직접 호출 | 전환 없이 `13030003`으로 차단합니다. 다른 리비전을 쓰려면 호출 대상을 바꿔야 합니다                     |

라우터의 자동 전환은 **응답 모델이 바뀔 수 있다는 뜻**입니다(서로 다른 모델을 한 라우터에 묶은 경우). 예산 소진은 장애가 아니므로 자동 전환이 일어나도 해당 대상의 서킷 브레이커 상태는 바뀌지 않습니다. 계정 크레딧 소진(`13030001`)이나 일시 장애(`13030006`)는 후보를 바꿔도 결과가 같으므로 전환하지 않습니다.

## 차단 코드

| 코드         | 의미                                     | 조치                      |
| ---------- | -------------------------------------- | ----------------------- |
| `13030003` | 리비전 월 예산 소진 — 질문 첫 호출                  | 더 큰 예산 또는 무제한인 새 리비전 생성 |
| `13030004` | 리비전 월 예산 소진 — 답변 도중                    | 위와 같음. 이미 생성된 답변은 유지됩니다 |
| `13030006` | 예산 판정을 할 수 없음 (단가 설정 오류·요청 길이 확정 불가 등) | 아래 동작 예시의 설정 오류 항목 확인   |

차단 응답은 HTTP 200이며 본문의 `code: 1`과 `error_code`로 판단합니다. 차단은 모델 호출 전에 일어나므로 토큰을 사용하지 않습니다.

## 동작 예시

### 설정

| 입력                           | 결과                                 |
| ---------------------------- | ---------------------------------- |
| 단가 설정 후 예산 `100` 입력          | `100`으로 저장                         |
| 예산을 빈 값으로 두고 생성              | 무제한                                |
| 예산 `0`으로 생성                  | 첫 호출부터 차단                          |
| 입력·출력 단가 모두 0인 상태에서 예산 입력 시도 | 입력 비활성. 저장되지 않음                    |
| 예산을 입력한 뒤 단가를 0으로 바꿨다 되돌림    | 입력한 예산은 **지워지지 않습니다**(비활성은 편집만 막음) |
| `99,999,999` 초과·소수·음수·문자 입력  | 검증 실패                              |
| 임베딩 서빙에 예산 전송                | 검증 실패 (LLM·VLM만 허용)                |
| 단가 없이 예산만 전송                 | 검증 실패                              |
| 생성된 리비전 상세에 진입               | 값은 조회만 가능. 저장 경로 없음                |

### 차단·통과

| 상황                                    | 결과                                        |
| ------------------------------------- | ----------------------------------------- |
| 예산 100, 사용 0에서 아주 큰 요청 1건             | **통과** — 확정 사용액만 판정하므로 추정치로 막지 않습니다       |
| 예산 100, 진행 중인 큰 호출이 있는 상태에서 동시 2번째 요청 | `13030003`/`13030004` 차단. 앞선 호출이 끝나면 풀립니다 |
| 예산 100, 정산 사용액이 100에 도달               | 차단. 초과폭 상한은 동시 1건의 실사용량                   |
| 응답이 정상 완료                             | 리비전의 이번 달 사용액과 호출 수가 증가                   |
| 같은 서빙의 다른 리비전 호출                      | 예산은 리비전별로 독립 — 영향 없음                      |

### 설정 조합에 따른 판정

| 조합                                            | 결과                                               |
| --------------------------------------------- | ------------------------------------------------ |
| 챗서비스 배수 0(무과금) + 예산 설정                        | **무과금 처리.** 설정 오류가 아니며 예산이 진행되지 않을 뿐입니다          |
| 리비전 자체 단가 0 + 예산 설정                           | **설정 오류** → `13030006`                           |
| 예산 있는 입력단가형 + 길이를 알 수 없는(chunked non-JSON) 요청 | `13030006` — 예약할 크기를 확정할 수 없습니다                  |
| 카탈로그에서 리비전 복제                                 | 원본에 고정된 단가·배수·예산이 그대로 복사됩니다. **요청에 실은 값은 무시됩니다** |

### 중단·usage 미보고

| 상황                        | 결과                                                            |
| ------------------------- | ------------------------------------------------------------- |
| 사용자가 스트림을 중단(stop 버튼)     | 게이트웨이가 중단을 확인하면 예약을 즉시 해제                                     |
| 모델이 완료 응답을 주고도 사용량을 싣지 않음 | 예약을 **최대 1시간까지 유지**합니다. 사용량을 안 주는 경로로 예산을 무한히 넘기는 것을 막기 위함입니다 |

두 번째 경우 때문에, **사용량이 실리지 않는 스트리밍 경로에 월 예산을 걸면 실사용이 0인데도 최대 1시간 차단될 수 있습니다.** 예산을 걸기 전에 그 경로의 응답에 사용량이 실리는지 확인하세요. 신호는 `[CREDIT] completed response has no usage` 오류 로그이며, 예산이 설정된 리비전에서는 이 로그가 발생하지 않아야 합니다.

## 운영 시 주의

예산은 반드시 리비전 생성 화면에서 설정해 주세요. 데이터베이스에서 직접 바꾸면 두 가지 문제가 있습니다.

* **최대 15분간 이전 값으로 판정됩니다** — 게이트가 단가·예산 스냅샷을 15분 캐시합니다.
* **소수는 화면에서 정수로 잘려 보입니다** — 게이트는 소수 예산을 그대로 쓰지만(예: 0.5 유효) 화면 배지의 분모는 `0`으로 표시됩니다. 음수를 넣으면 게이트가 잘못된 설정으로 보고 호출을 막습니다.

## 자주 묻는 질문

**월 예산 입력이 비활성화되어 있습니다.**

입력·출력 단가 중 하나 이상을 양수로 설정해야 합니다.

**배지는 90%인데 호출이 막힙니다.**

응답이 오지 않은 호출의 예약이 남아 있는 상태입니다. 최대 1시간 뒤 자동 해제되며, 반복되면 그 경로의 응답에 사용량이 실리는지 확인하세요.

**예산을 늘리고 싶습니다.**

새 리비전을 만들어 전환합니다. 기존 리비전의 예산은 수정할 수 없습니다.

**라우터로 호출했더니 다른 모델이 답했습니다.**

예산이 소진된 후보를 빼고 다음 후보로 전환한 결과입니다. 서로 다른 모델을 한 라우터에 묶으면 응답 모델이 바뀔 수 있습니다.

**예산이 남았는데 계정 크레딧 때문에 막힙니다.**

월 예산과 계정 크레딧은 별개 축입니다. `13030001`/`13030002`는 계정 잔액 문제이므로 크레딧 과금 매뉴얼을 참고하세요.

***

관련 문서: 크레딧 즉시차감 아키텍처 · 크레딧 API 사양 · 크레딧 과금 매뉴얼 · FE 계약


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://genos-docs.gitbook.io/default/v1.9.3/basic-tutorials/guides/llm/revision-budget.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
