diff --git a/agent-test/dev/edge-smoke.md b/agent-test/dev/edge-smoke.md index 93fe6f56..3202434e 100644 --- a/agent-test/dev/edge-smoke.md +++ b/agent-test/dev/edge-smoke.md @@ -89,10 +89,10 @@ Claude Anthropic-compatible 단일 요청 Agent 실행을 검증할 때는 Claud - 접속 기준: 현재 작업 호스트에서 직접 SSH - provider endpoint: `http://192.168.0.59:13305/v1` - served model: `Ornith-1.0-35B-GGUF-llamacpp-tp1-Q5_K_M` - - capacity baseline: `3` + - capacity baseline: `1` (agent 장문 요청의 provider 독점 실행 기준) - priority baseline: `2` - load baseline: checkpoint `LordNeel/Ornith-1.0-35B-GGUF-llamacpp-tp1:Q5_K_M`, backend `vulkan`, ctx size `524288`, `llamacpp_args="--spec-type none -cb -fa on -b 4096 -ub 1024 --kv-unified --temp 0.6 --top-p 0.95 --top-k 20"`, `save_options=true` - - long-context admission baseline: `total_context_tokens=524288`, `long_context_capacity=2` (`-np` 고정 분할을 제거하고 `--kv-unified`를 사용한다. `/slots`는 auto slots 4개와 slot `n_ctx=262144`를 보고한다) + - long-context admission baseline: `total_context_tokens=524288`, `long_context_capacity=1` (`-np` 고정 분할을 제거하고 `--kv-unified`를 사용하되, IOP admission은 agent 장문 요청의 동시 prefill 간섭을 막기 위해 1개로 제한한다. `/slots`는 auto slots 4개와 slot `n_ctx=262144`를 보고한다) - workspace: `C:/Users/r0bin/iop-field` - RTX5090 Lemonade node: `rtx5090-lemonade-node` / `rtx5090-lemonade` - SSH/user: `ssh iop-dev-rtx5090` @@ -150,7 +150,7 @@ GX10 Laguna 공식 vLLM baseline은 `temperature=0.7`, `top_p=0.95`, model `gene - raw text tool-call boundary smoke: Pi/Cline형 `tools[]` 요청에서 응답 body와 SSE delta 어디에도 ``, `{{`, `<|mask_end|>` 원문이 성공 content로 남지 않는다. 요청 `tools[]`에 있는 valid raw text tool-call은 `message.tool_calls`(또는 stream `delta.tool_calls`)와 `finish_reason: "tool_calls"`로 정규화되고, unknown tool hallucination이나 malformed 블록은 성공 content가 아니라 non-stream `tool_validation_error`(HTTP 502) 또는 SSE `tool_validation_error` 이벤트로 끝난다. non-stream/strict buffered stream은 bounded retry 후 차단을 확인한다. 세부 payload와 계약은 `docs/edge-local-dev-guide.md`의 Raw text tool-call boundary smoke와 `agent-contract/outer/openai-compatible-api.md`를 따른다. - raw boundary smoke evidence는 tracked 문서가 아니라 ignored run 위치(`agent-test/runs/**`)나 code-review output path에 저장하고, 저장물에도 token 원문을 남기지 않는다. - provider-pool dispatch는 `in_flight >= capacity`인 provider를 후보에서 제외하고, 남은 후보 중 가장 낮은 `in_flight` 레벨을 먼저 선택한다. 같은 `in_flight` 레벨 안에서는 낮은 priority 값과 rotation으로 분산한다. -- dev-runtime managed capacity smoke는 `scripts/e2e-openai-managed-capacity-smoke.sh`를 사용한다. 같은 principal token으로 authenticated route alias를 먼저 조회하고, exact active route의 `resource_selector`, profile, upstream model과 일치하는 healthy provider snapshot 하나만 eligible pool로 본다. `ornith:35b`는 `onexplayer-lemonade=3`, `ornith-fast`는 `rtx5090-lemonade=1`로 각각 분리하며, 현재 projected route에서 제외된 두 provider의 capacity를 더하지 않는다. Chat/Responses를 alias별로 따로 실행해 각각 4개/2개 요청에서 selected `in_flight=3`/`1`, `queued>=1`을 확인한다. +- dev-runtime managed capacity smoke는 `scripts/e2e-openai-managed-capacity-smoke.sh`를 사용한다. 같은 principal token으로 authenticated route alias를 먼저 조회하고, exact active route의 `resource_selector`, profile, upstream model과 일치하는 healthy provider snapshot 하나만 eligible pool로 본다. `ornith:35b`는 `onexplayer-lemonade=1`, `ornith-fast`는 `rtx5090-lemonade=1`로 각각 분리하며, 현재 projected route에서 제외된 두 provider의 capacity를 더하지 않는다. Chat/Responses를 alias별로 따로 실행해 각각 2개 요청에서 selected `in_flight=1`, `queued>=1`을 확인한다. - managed smoke는 실제 emitted request JSON의 Unicode rune 수와 `runes/4 + runes/16` estimate를 계산하고 `long_context_threshold_tokens`와 대조한다. normal qualification은 `capacity`, 별도 long-context 시나리오는 `long_context_capacity`를 사용한다. 장문 반복/liveness payload로 normal capacity를 증명하거나 normal 요청으로 long slot을 증명하지 않는다. unprojected/legacy Laguna `laguna-s:2.1`과 Qwen `qwen3.6:35b`는 기존 model-group capacity `4`/`2` 기준을 유지한다. - capacity smoke 완료 후 대상 provider의 `in_flight=0`, `queued=0` 회복을 확인한다. - long-context admission 시나리오(normal 10-way, mixed long/normal, all-long-slot-full)와 최종 회복 근거는 `agent-test/dev/long-context-admission-smoke.md`와 `scripts/e2e-long-context-admission-smoke.sh`를 사용한다. diff --git a/agent-test/dev/long-context-admission-smoke.md b/agent-test/dev/long-context-admission-smoke.md index ee228ff7..d56efbf7 100644 --- a/agent-test/dev/long-context-admission-smoke.md +++ b/agent-test/dev/long-context-admission-smoke.md @@ -33,11 +33,11 @@ last_rule_updated_at: 2026-07-24 - Control Plane status URL: `http://127.0.0.1:18001/edges/edge-toki-labs-dev/status` (runner-local; 다른 host에서는 `IOP_LONG_SMOKE_STATUS_SSH`로 ssh curl). - 현재 모델 그룹별 capacity baseline: - `laguna-s:2.1`: `4` (`gx10-vllm=4`) - - `ornith:35b`: `4` (`onexplayer-lemonade=3`, `rtx5090-vllm=1`) + - `ornith:35b`: `2` (`onexplayer-lemonade=1`, `rtx5090-lemonade=1`) - `qwen3.6:35b`: `2` (`mac-mlx-vllm=2`) - 현재 모델 그룹별 long slot baseline: - `laguna-s:2.1`: `1` (`gx10-vllm=1`) - - `ornith:35b`: `3` (`onexplayer-lemonade=2`, `rtx5090-vllm=1`) + - `ornith:35b`: `2` (`onexplayer-lemonade=1`, `rtx5090-lemonade=1`) - `qwen3.6:35b`: `1` (`mac-mlx-vllm=1`) - `scripts/e2e-long-context-admission-smoke.sh`는 아직 이전 `qwen3.6:35b` 공용 풀(`gx10-vllm`, `onexplayer-lemonade`, `mac-mlx-vllm`)과 총 capacity `9`를 전제로 한다. 현재 dev에서 이 스크립트의 `normal-10`/`mixed`/`all-long-slot-full` 결과를 최신 Laguna-S 모델 그룹 evidence로 사용하지 않는다. - credential: bearer token은 `IOP_LONG_SMOKE_TOKEN` 환경 변수로만 주입하고 명령/로그/tracked 파일에 원문을 남기지 않는다. diff --git a/agent-test/dev/node-smoke.md b/agent-test/dev/node-smoke.md index 2dd10b83..c227d3b8 100644 --- a/agent-test/dev/node-smoke.md +++ b/agent-test/dev/node-smoke.md @@ -74,10 +74,10 @@ dev-runtime의 실제 4-node 연결을 점검할 때는 원격 runner `ssh toki@ - 접속 기준: 현재 작업 호스트에서 직접 SSH - provider endpoint: `http://192.168.0.59:13305/v1` - served model: `Ornith-1.0-35B-GGUF-llamacpp-tp1-Q5_K_M` - - capacity baseline: `3` + - capacity baseline: `1` (agent 장문 요청의 provider 독점 실행 기준) - priority baseline: `2` - load baseline: checkpoint `LordNeel/Ornith-1.0-35B-GGUF-llamacpp-tp1:Q5_K_M`, backend `vulkan`, ctx size `524288`, `llamacpp_args="--spec-type none -cb -fa on -b 4096 -ub 1024 --kv-unified --temp 0.6 --top-p 0.95 --top-k 20"`, `save_options=true` - - long-context admission baseline: `total_context_tokens=524288`, `long_context_capacity=2` (`-np` 고정 분할을 제거하고 `--kv-unified`를 사용한다. `/slots`는 auto slots 4개와 slot `n_ctx=262144`를 보고한다) + - long-context admission baseline: `total_context_tokens=524288`, `long_context_capacity=1` (`-np` 고정 분할을 제거하고 `--kv-unified`를 사용하되, IOP admission은 agent 장문 요청의 동시 prefill 간섭을 막기 위해 1개로 제한한다. `/slots`는 auto slots 4개와 slot `n_ctx=262144`를 보고한다) - workspace: `C:/Users/r0bin/iop-field` - RTX5090 Lemonade node: `rtx5090-lemonade-node` / `rtx5090-lemonade` - SSH/user: `ssh iop-dev-rtx5090` diff --git a/agent-test/inventory-dev.yaml b/agent-test/inventory-dev.yaml index 6acdafb3..40903fef 100644 --- a/agent-test/inventory-dev.yaml +++ b/agent-test/inventory-dev.yaml @@ -2,7 +2,7 @@ inventory_id: inventory-dev common_inventory: agent-test/inventory.yaml test_env: dev profile: dev-runtime-provider-pool -last_updated_at: "2026-08-10" +last_updated_at: "2026-08-13" source: remote_runner: @@ -241,7 +241,7 @@ model: "ornith:35b": status: active_edge_model_group display_name: Ornith 1.0 35B - capacity_total: 4 + capacity_total: 2 providers: - id: onexplayer-lemonade served_model: Ornith-1.0-35B-GGUF-llamacpp-tp1-Q5_K_M @@ -289,7 +289,7 @@ model: - onexplayer-lemonade-node - rtx5090-lemonade-node known_risk: ornith-fast and ornith:35b each admit against an independent model-group capacity counter, so one simultaneous request through each alias can target the same RTX5090 provider until provider-owned shared capacity is implemented. - provider_capacity_total: 4 + provider_capacity_total: 2 provider_capacity_status: verified_with_edge_routing_and_provider_metrics_2026_07_24 context_window: 262144 default_max_tokens: 65536 @@ -427,10 +427,10 @@ model: upstream_url: https://huggingface.co/LordNeel/Ornith-1.0-35B-GGUF-llamacpp-tp1 upstream_revision: c50d5d4407f70e43208dee836c66bb8a05c1be91 quantization: Q5_K_M - capacity: 3 + capacity: 1 priority: 2 total_context_tokens: 524288 - long_context_capacity: 2 + long_context_capacity: 1 runtime_args: ctx_size: 524288 llamacpp_backend: vulkan @@ -807,11 +807,11 @@ model: health: healthy served_model: mlx-community/Qwen3.6-35B-A3B-4bit onexplayer-lemonade: - capacity: 3 + capacity: 1 priority: 2 in_flight: 0 queued: 0 - long_context_capacity: 2 + long_context_capacity: 1 health: healthy served_model: Ornith-1.0-35B-GGUF-llamacpp-tp1-Q5_K_M rtx5090-lemonade: @@ -1174,17 +1174,17 @@ nodes: removed_args: "-np 3" expected_slot_n_ctx: 262144 expected_auto_slots: 4 - iop_capacity_guard: 3 - long_context_capacity: 2 + iop_capacity_guard: 1 + long_context_capacity: 1 validation_required_after_load: true validation_basis: Same Lemonade llama.cpp backend and current Ornith Q5 runtime confirmed --kv-unified with omitted -np prevents fixed ctx_size/parallel partitioning. - capacity: 3 + capacity: 1 priority: 2 # Long-context admission policy (maps to edge.yaml nodes[].providers[]). # Ornith Q5 direct runtime keeps ctx_size=524288 and removes fixed -np # partitioning by using llama.cpp unified KV. Do NOT raise ctx_size above 524288. total_context_tokens: 524288 - long_context_capacity: 2 + long_context_capacity: 1 load: endpoint: http://192.168.0.59:13305/v1/load model_name: Ornith-1.0-35B-GGUF-llamacpp-tp1-Q5_K_M