diff --git a/agent-ops/skills/project/dev-corp-runtime-deploy/SKILL.md b/agent-ops/skills/project/dev-corp-runtime-deploy/SKILL.md index 4ca0c01..846af86 100644 --- a/agent-ops/skills/project/dev-corp-runtime-deploy/SKILL.md +++ b/agent-ops/skills/project/dev-corp-runtime-deploy/SKILL.md @@ -1,6 +1,6 @@ --- name: dev-corp-runtime-deploy -version: 1.0.3 +version: 1.0.4 description: dev-corp 배포, 회사망 mac-mini Edge와 내부 DGX/Mac Studio provider pool 배포 및 OpenAI-compatible capacity smoke 절차 --- @@ -60,6 +60,7 @@ dev-corp provider pool을 현재 dev-runtime과 같은 구조로 배포한다. - 2026-07-08 재확인 기준 DGX Spark 02는 Docker `vllm-gemma4` image `vllm/vllm-openai:v0.24.0`, host/container `8004`, text-only/eager profile과 `default_chat_template_kwargs.enable_thinking=true`로 동작하며 mac-mini와 node-local `/health`, `/v1/models`, 직접 API auto/streaming tool-call smoke를 통과했다. startup log에서 GPU KV cache `1,452,633` tokens, full-context concurrency `5.54x`를 확인했다. - 2026-07-02 기준 native Control Plane은 mac-mini provider-pool runtime에서 `18002/19004/19005`를 listen하고, Edge id `dev-corp-edge`가 `127.0.0.1:19005`로 connected 상태다. status URL은 `http://127.0.0.1:18002/edges/dev-corp-edge/status`이다. - 2026-07-08 기준 dev-corp provider-pool Edge OpenAI-compatible capacity smoke 표준은 `/v1/responses`와 `/v1/chat/completions` 각각 15개 동시 요청이다. provider capacity 합은 `4 + 4 + 5 = 13`으로 유지하고, Control Plane provider snapshot에서 peak total `in_flight=13`, `queued>=2`, 완료 후 provider별 `in_flight=0`, `queued=0` 회복을 성공 기준으로 본다. +- 2026-07-08 source ref `c2437aaedefbac4312d69dfd10aa017c2739e187` 재배포 검증에서 `/v1/responses`와 `/v1/chat/completions` 모두 15/15 성공했다. 두 endpoint 모두 peak total `in_flight=13`, `queued=6`, provider별 max queued `2`, 최종 회복 `in_flight=0`, `queued=0`으로 통과했으며 원격 evidence는 mac-mini `build/dev-corp-runtime/logs/capacity_15_20260708_155027.json`이다. ## 실행 절차 diff --git a/agent-test/dev-corp/edge-smoke.md b/agent-test/dev-corp/edge-smoke.md index b5ee05d..72114c7 100644 --- a/agent-test/dev-corp/edge-smoke.md +++ b/agent-test/dev-corp/edge-smoke.md @@ -95,19 +95,19 @@ Mac Studio의 `http://192.168.2.3:8005/v1` mlx-vlm DiffusionGemma endpoint는 - Gemma4 agent/tool-call compatibility profile은 DGX Spark 01/02 vLLM에서 `--enable-auto-tool-choice`, `--tool-call-parser gemma4`, Gemma4 tool chat template, `--reasoning-parser gemma4`, `--default-chat-template-kwargs '{"enable_thinking":true}'`, `--enforce-eager`, `--skip-mm-profiling`, `--limit-mm-per-prompt '{"image": 0, "video": 0}'`, `--mm-processor-cache-gb 0`을 함께 둔다. Mac Studio vLLM-MLX는 별도 chat template override 없이 `--continuous-batching`, `--disable-prefix-cache`, `--enable-auto-tool-choice`, `--tool-call-parser gemma4`, `--reasoning-parser gemma4`, `--default-chat-template-kwargs '{"enable_thinking":true}'`를 둔다. Qwen provider는 dev-runtime 문서의 Qwen 전용 parser/template 값을 따른다. - Mac Studio provider runtime은 `vllm-mlx=0.4.0`, provider catalog capacity `5`, context window `262144`, requested KV `262144x3` 기준으로 `--continuous-batching`, runtime headroom `--max-num-seqs 6`, `--prefill-batch-size 6`, `--completion-batch-size 6`, `--chunked-prefill-tokens 1024`, `--disable-prefix-cache`, `--max-request-tokens 262144`, `--max-kv-size 786432`, `--enable-auto-tool-choice`, `--tool-call-parser gemma4`, `--reasoning-parser gemma4`, `--default-chat-template-kwargs '{"enable_thinking":true}'`를 적용했고 `/health`, `/v1/models`, 직접 API non-stream/stream auto tool-call, streaming multi-turn tool-result final answer, Pi `-p` tool-call, Pi TUI 초기 프롬프트 tool-call 로그 종료를 확인했다. - Mac Studio vLLM-MLX의 위 값은 2026-07-08 기준 구동 가능한 최종 체크포인트다. 잔여 이슈로 Gemma4 thought channel delimiter가 최종 content에 누수될 수 있으며, 이 경우 runtime option 미세 조정보다 vLLM-MLX Gemma provider 전용 Pi extension/provider adapter sanitizer를 우선 검토한다. 추가 튜닝은 Spark vLLM 설정과 분리된 별도 실험으로만 수행한다. -- 2026-07-08 재확인 기준 DGX Spark 01은 mac-mini 내부 endpoint `http://192.168.2.2:8002`에서 `/health` 200과 `/v1/models`, 직접 API forced/auto/streaming tool-call smoke, 로컬 Pi TUI bash/git-push tool-call 흐름을 통과했다. DGX Spark 02는 mac-mini 내부 endpoint `http://192.168.2.4:8004`에서 `/health` 200과 `/v1/models`, 직접 API auto/streaming tool-call smoke를 통과했다. Edge OpenAI-compatible capacity smoke는 Control Plane status snapshot 기준으로 재검증한다. +- 2026-07-08 재확인 기준 DGX Spark 01은 mac-mini 내부 endpoint `http://192.168.2.2:8002`에서 `/health` 200과 `/v1/models`, 직접 API forced/auto/streaming tool-call smoke, 로컬 Pi TUI bash/git-push tool-call 흐름을 통과했다. DGX Spark 02는 mac-mini 내부 endpoint `http://192.168.2.4:8004`에서 `/health` 200과 `/v1/models`, 직접 API auto/streaming tool-call smoke를 통과했다. Edge OpenAI-compatible capacity smoke는 source ref `c2437aaedefbac4312d69dfd10aa017c2739e187` 재배포 후 `/v1/responses`, `/v1/chat/completions` 각각 15개 동시 요청으로 통과했다. - Gemma provider-pool `gemma4:26b`는 `default_thinking_token_budget: 1024` 기준으로 thinking을 기본 활성화한다. Edge strict output이 켜져 있어도 provider-pool catalog의 thinking policy가 우선하며, vLLM/vLLM-MLX adapter에는 `chat_template_kwargs.enable_thinking=true`로 전달되는지 확인한다. - Gemma provider를 Pi/Cline형 agent/tool-call 용도로 검증할 때는 일반 chat smoke와 별도로 forced tool call, auto tool call, streaming `delta.tool_calls`, multi-turn tool result 후 최종 답변을 확인한다. raw `<|tool_call>`/`<|"|>` marker나 thought channel text가 assistant content로 새면 provider parser/template profile 또는 Edge relay 경계 문제로 판정한다. - Gemma provider-pool의 IOP queue timeout은 두지 않는다. config 값은 `queue_timeout_ms=0`이며, caller context cancellation 또는 연결 종료로만 queued request를 중단한다. OpenAI run timeout과 backend request timeout은 long reasoning/long-context 요청을 위해 각각 `openai.timeout_sec=1800`, `request_timeout_ms=1800000`으로 둔다. -## 2026-07-02 dev-corp native runtime 상태 +## 2026-07-08 dev-corp native runtime 상태 -- mac-mini checkout은 `5b1255a` 기준으로 clean sync/rebuild되었고, runtime 경로는 `/Users/fe/agent-work/iop-dev-corp/build/dev-corp-runtime`이다. +- mac-mini checkout은 `c2437aaedefbac4312d69dfd10aa017c2739e187` 기준으로 clean sync/rebuild/redeploy되었고, runtime 경로는 `/Users/fe/agent-work/iop-dev-corp/build/dev-corp-runtime`이다. - Control Plane native runtime이 활성화되어 `18002` HTTP, `19004` Client WS, `19005` CP-Edge wire를 listen한다. Edge config의 `control_plane.enabled=true`, `wire_addr=127.0.0.1:19005`로 `dev-corp-edge`가 connected 상태다. - Edge native runtime은 `18085` bootstrap, `18086` OpenAI-compatible, `18087` Edge-Node TCP, `19094` refresh admin을 listen한다. - Mac Studio provider catalog `type`은 최신 config validator 기준으로 `openai_compat`를 사용한다. 실제 provider runtime은 vLLM-MLX이고 `runtime_type: vllm-mlx`로 추적한다. -- `/v1/responses` capacity smoke 표준: 15개 동시 요청, Control Plane `provider_snapshots` peak total `in_flight=13`, `queued>=2`, provider별 `in_flight`가 DGX01 `4`, DGX02 `4`, Mac Studio `5`를 넘지 않고 완료 후 모두 `in_flight=0`, `queued=0`으로 회복해야 한다. -- `/v1/chat/completions` capacity smoke 표준: 15개 동시 요청, Control Plane `provider_snapshots` peak total `in_flight=13`, `queued>=2`, provider별 `in_flight`가 DGX01 `4`, DGX02 `4`, Mac Studio `5`를 넘지 않고 완료 후 모두 `in_flight=0`, `queued=0`으로 회복해야 한다. +- `/v1/responses` capacity smoke 표준: 15개 동시 요청, Control Plane `provider_snapshots` peak total `in_flight=13`, `queued>=2`, provider별 `in_flight`가 DGX01 `4`, DGX02 `4`, Mac Studio `5`를 넘지 않고 완료 후 모두 `in_flight=0`, `queued=0`으로 회복해야 한다. 2026-07-08 검증에서는 15/15 성공, peak total `in_flight=13`, `queued=6`, provider별 max queued `2`로 통과했다. +- `/v1/chat/completions` capacity smoke 표준: 15개 동시 요청, Control Plane `provider_snapshots` peak total `in_flight=13`, `queued>=2`, provider별 `in_flight`가 DGX01 `4`, DGX02 `4`, Mac Studio `5`를 넘지 않고 완료 후 모두 `in_flight=0`, `queued=0`으로 회복해야 한다. 2026-07-08 검증에서는 15/15 성공, peak total `in_flight=13`, `queued=6`, provider별 max queued `2`로 통과했다. ## 명령 diff --git a/agent-test/dev-corp/inventory.yaml b/agent-test/dev-corp/inventory.yaml index adfe1fe..964c03f 100644 --- a/agent-test/dev-corp/inventory.yaml +++ b/agent-test/dev-corp/inventory.yaml @@ -8,7 +8,7 @@ source: repo_root: /Users/fe/agent-work/iop-dev-corp setup_required: true setup_status: deployed - current_observation: /Users/fe/agent-work/iop-dev-corp checkout and build/dev-corp-runtime runtime were created on 2026-06-25, clean-synced/rebuilt at source ref 2d08d24 on 2026-07-06, then validated with the provider-pool thinking-policy patch and gemma4:26b default_thinking_token_budget config update; /Users/fe/iop-field remains unrelated legacy field state + current_observation: /Users/fe/agent-work/iop-dev-corp checkout and build/dev-corp-runtime runtime were created on 2026-06-25, clean-synced/rebuilt at source ref 2d08d24 on 2026-07-06, then clean-synced/rebuilt/redeployed at source ref c2437aa on 2026-07-08 with 15-concurrency capacity smoke passed for /v1/responses and /v1/chat/completions; /Users/fe/iop-field remains unrelated legacy field state clean_sync: - git fetch origin main - git reset --hard origin/main @@ -58,7 +58,7 @@ model: alias_status: candidate alias_policy: expose one IOP model alias and map provider-specific served_model values per provider provider_capacity_total: 13 - provider_capacity_status: verified_with_control_plane_provider_snapshots_2026_07_06 + provider_capacity_status: verified_with_control_plane_provider_snapshots_2026_07_08_15_concurrency context_window_max: 262144 default_thinking_token_budget: 1024 reasoning_policy: bounded_thinking_enabled @@ -105,7 +105,7 @@ model: - /v1/chat/completions concurrent_requests: 15 expected_total_in_flight: 13 - expected_total_in_flight_status: standard_15_concurrency_pending_reverification + expected_total_in_flight_status: verified_15_concurrency_2026_07_08 expected_min_queued: 2 previous_capacity_plus_one_concurrent_requests: 14 previous_capacity_plus_one_expected_min_queued: 1 @@ -113,12 +113,20 @@ model: think_policy: enabled_for_provider_pool exact_output_match: false latest_capacity_verification: - date: "2026-07-06" - source_ref: 2d08d240d48a954df6847df2ba08fb8b39fc3f7d - edge_runtime_patch: provider_pool_thinking_policy_enabled_under_strict_output + date: "2026-07-08" + source_ref: c2437aaedefbac4312d69dfd10aa017c2739e187 + edge_runtime_patch: docs_15_concurrency_standard_redeploy default_thinking_token_budget: 1024 control_plane_enabled: true control_plane_status_url: http://127.0.0.1:18002/edges/dev-corp-edge/status + runtime: + runner_checkout: /Users/fe/agent-work/iop-dev-corp + remote_log: build/dev-corp-runtime/logs/capacity_15_20260708_155027.json + control_plane_pid: 1446 + edge_pid: 1481 + rebuild_time: "2026-07-08 15:48" + post_build_config_check: passed + post_build_refresh_dry_run: no_changes_detected provider_snapshot_baseline: total_capacity: 13 providers: @@ -135,40 +143,42 @@ model: health: healthy status: available responses: - concurrent_requests: 14 - ok: 14 + concurrent_requests: 15 + ok: 15 timeout_errors: 0 http_errors: 0 max_total_in_flight: 13 - max_total_queued: 3 + max_total_queued: 6 + elapsed_sec: 22.563 provider_max: corp-dgx-spark-01-vllm: max_in_flight: 4 - max_queued: 1 + max_queued: 2 corp-dgx-spark-02-vllm: max_in_flight: 4 - max_queued: 1 + max_queued: 2 corp-mac-studio-mlx-vllm: max_in_flight: 5 - max_queued: 1 + max_queued: 2 final_recovery: in_flight_0_queued_0 chat_completions: - concurrent_requests: 14 - ok: 14 + concurrent_requests: 15 + ok: 15 timeout_errors: 0 http_errors: 0 max_total_in_flight: 13 - max_total_queued: 3 + max_total_queued: 6 + elapsed_sec: 25.117 provider_max: corp-dgx-spark-01-vllm: max_in_flight: 4 - max_queued: 1 + max_queued: 2 corp-dgx-spark-02-vllm: max_in_flight: 4 - max_queued: 1 + max_queued: 2 corp-mac-studio-mlx-vllm: max_in_flight: 5 - max_queued: 1 + max_queued: 2 final_recovery: in_flight_0_queued_0 latest_runtime_update: date: "2026-06-25" diff --git a/agent-test/dev-corp/node-smoke.md b/agent-test/dev-corp/node-smoke.md index 1439471..76908b3 100644 --- a/agent-test/dev-corp/node-smoke.md +++ b/agent-test/dev-corp/node-smoke.md @@ -97,14 +97,14 @@ Mac Studio의 secondary `http://192.168.2.3:8005/v1` endpoint는 기본 Node/pro - Mac Studio vLLM-MLX의 위 값은 2026-07-08 기준 구동 가능한 최종 체크포인트다. 잔여 이슈로 Gemma4 thought channel delimiter가 최종 content에 누수될 수 있으며, 이 경우 runtime option 미세 조정보다 vLLM-MLX Gemma provider 전용 Pi extension/provider adapter sanitizer를 우선 검토한다. 추가 튜닝은 Spark vLLM 설정과 분리된 별도 실험으로만 수행한다. - Gemma provider를 Pi/Cline형 agent/tool-call 용도로 검증할 때는 일반 chat smoke와 별도로 forced tool call, auto tool call, streaming `delta.tool_calls`, multi-turn tool result 후 최종 답변을 확인한다. raw `<|tool_call>`/`<|"|>` marker나 thought channel text가 assistant content로 새면 provider parser/template profile 또는 Edge relay 경계 문제로 판정한다. - Gemma provider-pool의 provider queue timeout은 두지 않는다. config 값은 `queue_timeout_ms=0`이며, backend request timeout은 30분 기준인 `request_timeout_ms=1800000`으로 맞춘다. -- 2026-07-08 재확인 기준 DGX Spark 02는 mac-mini에서 SSH, provider `/health`, `/v1/models`가 회복됐고 직접 API auto/streaming tool-call smoke를 통과했다. Edge OpenAI-compatible capacity smoke는 Control Plane status snapshot 기준으로 재검증한다. +- 2026-07-08 재확인 기준 DGX Spark 02는 mac-mini에서 SSH, provider `/health`, `/v1/models`가 회복됐고 직접 API auto/streaming tool-call smoke를 통과했다. Edge OpenAI-compatible capacity smoke는 source ref `c2437aaedefbac4312d69dfd10aa017c2739e187` 재배포 후 `/v1/responses`, `/v1/chat/completions` 각각 15개 동시 요청으로 통과했다. -## 2026-07-02 연결/용량 검증 상태 +## 2026-07-08 연결/용량 검증 상태 - dev-corp Control Plane native runtime이 활성화되어 `http://127.0.0.1:18002/edges/dev-corp-edge/status`에서 3개 provider node가 connected로 관측된다. -- DGX Spark 01, DGX Spark 02, Mac Studio Node binary는 source ref `5b1255a` 기준으로 재배포되었고 각 host의 `iop-dev-corp-field/iop-node`로 실행된다. +- DGX Spark 01, DGX Spark 02, Mac Studio Node binary는 source ref `c2437aaedefbac4312d69dfd10aa017c2739e187` 기준으로 재배포되었고 각 host의 `iop-dev-corp-field/iop-node`로 실행된다. - Control Plane `provider_snapshots` 기준 provider 상태는 DGX01 capacity `4`, DGX02 capacity `4`, Mac Studio capacity `5`, 모두 `health=healthy`, `status=available`이다. -- dev-corp capacity smoke 표준은 `/v1/responses`와 `/v1/chat/completions` 각각 15개 동시 요청이다. provider capacity 합 `13` 기준 peak total `in_flight=13`, `queued>=2`를 관측하고, 완료 후 모든 provider가 `in_flight=0`, `queued=0`으로 회복해야 한다. +- dev-corp capacity smoke 표준은 `/v1/responses`와 `/v1/chat/completions` 각각 15개 동시 요청이다. provider capacity 합 `13` 기준 peak total `in_flight=13`, `queued>=2`를 관측하고, 완료 후 모든 provider가 `in_flight=0`, `queued=0`으로 회복해야 한다. 2026-07-08 검증에서는 두 endpoint 모두 15/15 성공, peak total `in_flight=13`, `queued=6`, provider별 max queued `2`, 최종 회복 `in_flight=0`, `queued=0`으로 통과했다. ## 명령