9.7 KiB
9.7 KiB
Milestone: Model Group Long-Context Admission
위치
- Roadmap:
agent-roadmap/ROADMAP.md - Phase:
agent-roadmap/phase/operational-observability-provider-management/PHASE.md
목표
Model group의 단일 요청 context window 계약을 유지하면서, 입력 토큰 기준 long-context 요청을 별도 admission slot으로 제어한다. 일반 요청은 기존 provider capacity와 priority 기반으로 적극 배정하되, long-context 요청은 provider별 long slot과 model group 전체 long slot 여유가 있을 때만 배정해 256k급 요청이 서로 몰려 전체 사용성을 떨어뜨리지 않게 한다. long slot이 찬 provider도 일반 capacity가 남아 있으면 normal 요청 후보로 유지한다.
상태
[완료]
승격 조건
- 없음
구현 잠금
- 상태: 해제
- SDD: 필요
- SDD 문서:
agent-roadmap/sdd/operational-observability-provider-management/model-group-long-context-admission/SDD.md - SDD 사유: model group routing, queue admission, provider runtime config, dev provider pool smoke 기준을 함께 바꾸는 설계 Milestone이다.
- 잠금 해제 조건: 없음
- 결정 필요: 없음
범위
- Edge root 설정의
long_context_threshold_tokens도입. 초기 기준은 입력 토큰 추정치100000이상이다. - model group의
context_window_tokens를 단일 요청 최대 context 계약으로 둔다.qwen3.6:35b기준은262144이며 같은 model group provider가 이를 낮춰 다르게 해석하지 않는다. - provider별
total_context_tokens또는 이에 대응하는 runtime KV/context budget 기준을 명시하고,long_context_capacity와 비례 검증한다. 기본 검증식은total_context_tokens >= context_window_tokens * long_context_capacity이다. - provider별
long_context_capacity도입. long slot은 provider가 확보한 전체 KV/context budget을context_window_tokens * long_context_capacity로 해석하며, 일반 동시성 capacity와 별도로 관리한다. - long-context 판별은 요청 입력 기준으로만 수행한다. output 길이와 hidden thinking은 사전 분류 기준에 넣지 않고, provider fit과 timeout/usage 관측은 별도 운영 지표로 둔다.
- long-context 요청은 일반
in_flightcapacity도 점유하고, 별도long_in_flight도 점유한다. - 할당 직전 queue item의 long flag를 보고 long slot이 꽉 찬 provider는 후보에서 제외한다. model group 전체 long slot이 모두 찼으면 long 요청은 대기한다.
- long slot full은 long 요청에 대한 후보 제외 조건이며, 해당 provider의 일반 capacity가 남아 있으면 normal 요청 후보에서는 제외하지 않는다.
- queue 앞 long 요청이 long slot을 기다리는 동안, 뒤의 normal 요청이 빈 일반 capacity로 처리 가능하면 normal 요청을 먼저 dispatch한다.
- dev 기준 OneXPlayer는
ctx_size=524288,long_context_capacity=2,-np 3을 유지한다.-np는 단순 최대 동시 요청 수로 취급하며,ctx_size를262144 * 3 = 786432로 키우는 방향은 제외한다. - GX10, OneXPlayer, mac-mlx-vllm provider pool에서 long-context admission 상태와 queue 회복을 smoke로 검증한다.
기능
Epic: [long-admission] Long-Context Admission Policy
long-context 요청을 model group과 provider의 별도 slot 기준으로 admission하는 capability를 묶는다.
- [threshold-config] Edge root 설정에
long_context_threshold_tokens를 추가하고 dev 기준100000으로 설정한다. 검증: 설정 로딩과 config check에서 threshold가 반영된다. - [model-window] model group에
context_window_tokens=262144계약을 명시하고 같은 model group provider가 provider별 단일 요청 최대 context를 낮춰 해석하지 않도록 한다. 검증:qwen3.6:35bcatalog/config에서 context window가 단일 기준으로 조회된다. - [provider-long-capacity] provider별
total_context_tokens또는 runtime KV/context budget 기준,long_context_capacity,long_in_flight상태를 추가하고, long 요청이 일반 capacity와 long capacity를 함께 점유하도록 한다. 검증:total_context_tokens >= context_window_tokens * long_context_capacity검증과 long 요청 dispatch 중long_in_flight증가가 확인된다. - [input-estimator] OpenAI-compatible chat/responses 요청의 system/developer/user messages, tool schema, metadata payload를 입력 기준으로 토큰 근사 추정해 long flag를 붙인다. 검증: 100k 이상 입력은 long, 작은 설명형 요청은 normal로 분류된다.
- [queue-skip] queue head의 long 요청이 long slot 부족으로 대기 중이어도 뒤의 normal 요청이 빈 일반 capacity로 dispatch될 수 있게 한다. 검증: long queue 대기 중 normal 요청이 head-of-line blocking 없이 완료된다.
- [provider-exclusion] long 요청 배정 시 이미 long slot이 찬 provider를 long 후보에서 제외하고, model group 전체 long slot이 모두 차면 long 요청을 대기시킨다. 검증: long 요청이 같은 provider에 과밀 배정되지 않고, normal 요청은 남은 일반 capacity로 계속 dispatch되며, long slot 회복 뒤 long 요청이 dispatch된다.
- [dev-runtime-policy] dev provider pool에서 GX10, OneXPlayer, mac-mlx-vllm의
context_window_tokens,long_context_capacity, 실제 runtime context/KV 설정을 인벤토리와 config에 맞춘다. 검증: OneXPlayer는ctx_size=524288,-np 3, long slot 2 기준을 유지하며786432로 변경하지 않는다. - [status-logs] status/log에
estimated_input_tokens,context_class,long_context_capacity,long_in_flight, long queue reason을 남긴다. 검증: Control Plane status 또는 Edge log로 long admission 판단을 재구성할 수 있다. - [capacity-smoke] dev 환경에서 normal 10-way, mixed long/normal, all-long-slot-full queue 시나리오를 수행하고 완료 후
in_flight=0,queued=0,long_in_flight=0회복 근거를 남긴다.
완료 리뷰
- 상태: 통과
- 요청일: 2026-07-06
- 완료 근거:
agent-task/archive/2026/07/m-model-group-long-context-admission/**/complete.log6개가input-estimator,provider-long-capacity,provider-exclusion,queue-skip,status-logs,dev-runtime-policy,capacity-smokePASS와 SDD S03-S09 evidence를 남겼다. - 완료 근거:
threshold-config,model-window는 2026-07-05 직접 처리 근거와 현재 파일/git sanity pass로 SDD S01-S02 기준을 재확인했다. - 완료 근거: 종료 전 코드 레벨 검토에서
input_estimatorfloat schema 직렬화 panic 가능성을 작은 이슈로 수정했고,go test -count=1 ./...,go run ./apps/edge/cmd/edge config check --config configs/edge.yaml,bash -n scripts/e2e-long-context-admission-smoke.sh,git diff --check가 통과했다. - 검토 항목:
- long-context 분류가 입력 기준으로만 수행된다.
- 같은 model group provider는
context_window_tokens=262144단일 요청 계약을 공유한다. - long slot이 찬 provider는 long 요청 후보에서 제외되지만 일반 capacity가 남으면 normal 요청 후보로 유지된다.
- OneXPlayer는
ctx_size=524288,-np 3, long slot 2 기준을 유지하며786432로 키우지 않는다.
- agent-ui 상태 반영: 해당 없음
- 리뷰 코멘트: 모든 기능 Task와 SDD Evidence Map 연결이 충족되고 종료 전 코드 레벨 검토의 작은 보완까지 반영되어
[완료]archive 대상으로 확정했다.
범위 제외
- output 길이나 hidden thinking budget을 이용한 사전 long-context 분류
- provider별 단일 요청 최대 context를 model group 계약보다 낮게 허용하는 혼합 model group
- OneXPlayer
ctx_size를786432로 올리는 설정 변경 - billing/chargeback, 장기 usage ledger 저장, 품질 기반 route recommendation
- tokenizer별 완전 정확한 토큰 계산기 구현. 초기 분류는 보수적 근사 추정으로 시작한다.
작업 컨텍스트
- 관련 경로:
apps/edge/internal/service,apps/edge/internal/openai,apps/node/internal/adapters/openai_compat,packages/go/config,configs/edge.yaml,agent-test/dev/inventory.yaml,agent-test/dev/edge-smoke.md,agent-test/dev/node-smoke.md - 2026-07-05 직접 처리 완료:
threshold-config,model-window. 근거:packages/go/config/config.go,apps/edge/internal/configrefresh/classify.go,configs/edge.yaml,agent-contract/inner/edge-config-runtime-refresh.md, 관련 Go tests 갱신. 검증:go test ./apps/edge/... ./packages/go/config,go run ./apps/edge/cmd/edge config check --config configs/edge.yaml. - 2026-07-05 plan 생성: 남은 long-admission 큰 작업은
agent-task/m-model-group-long-context-admission/01_input_estimator부터06+01,02,03,04,05_capacity_smoke까지 split plan으로 분리했다. - 표준선(선택): model group의
context_window_tokens가 단일 요청 최대 context 계약을 소유하고, provider는 이를 낮춰 해석하지 않는다. - 표준선(선택):
long_context_capacity는 provider가 가진 전체 KV/context budget을 model group context window 몇 개분으로 운영할지 나타내며, 일반capacity와 분리한다. - 표준선(선택): provider runtime의 ctx/KV budget은
total_context_tokens >= context_window_tokens * long_context_capacity기준으로 검증한다. - 표준선(선택): OneXPlayer에서
-np 3은 단순 최대 동시 요청 수로 다루고, long slot 산정은ctx_size=524288 = 262144 * 2기준으로 고정한다. - 선행 작업: Model Alias Provider Pool과 Provider Catalog, Node Resource Model Unification, Node Provider-First Config Surface
- 후속 작업: 요청 실행 로그와 Usage Ledger 기반, Provider-Device-Model Qualification 리포트와 Lifecycle 관리
- 확인 필요: 없음