fix(dev): OneXPlayer agent 요청을 직렬화한다
This commit is contained in:
parent
8497bc0ebc
commit
00185d9fd7
4 changed files with 18 additions and 18 deletions
|
|
@ -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 어디에도 `<tool_call>`, `{{`, `<|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`를 사용한다.
|
||||
|
|
|
|||
|
|
@ -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 파일에 원문을 남기지 않는다.
|
||||
|
|
|
|||
|
|
@ -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`
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue