From 94c8b78bedebe522f0b0d63e203913c28def5148 Mon Sep 17 00:00:00 2001 From: toki Date: Fri, 14 Aug 2026 05:07:14 +0900 Subject: [PATCH] =?UTF-8?q?docs(bench):=20hybrid=20=EC=9E=84=EC=8B=9C=20?= =?UTF-8?q?=EA=B2=BD=EB=A1=9C=20=ED=86=B5=EA=B3=BC=EB=A5=BC=20=EA=B8=B0?= =?UTF-8?q?=EB=A1=9D=ED=95=9C=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 세션 한정 ornith:35b Work 전환과 두 hybrid caller의 terminal 성공 근거를 남기고, 남은 경로를 OpenCode Gemini direct 하나로 좁힌다. --- .../milestones/benchmark-route-minimal-html-smoke.md | 3 ++- agent-test/dev/iop-benchmark-route-minimal-html-smoke.md | 8 +++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/agent-roadmap/phase/knowledge-tool-optimization-extension/milestones/benchmark-route-minimal-html-smoke.md b/agent-roadmap/phase/knowledge-tool-optimization-extension/milestones/benchmark-route-minimal-html-smoke.md index 1a976770..0f3d559f 100644 --- a/agent-roadmap/phase/knowledge-tool-optimization-extension/milestones/benchmark-route-minimal-html-smoke.md +++ b/agent-roadmap/phase/knowledge-tool-optimization-extension/milestones/benchmark-route-minimal-html-smoke.md @@ -79,7 +79,8 @@ IOP 전체 안정성을 처음부터 재검증하지 않고, 실패가 재현된 - TLS 환경 경계: 개발 Edge용 사설 CA는 Edge leaf 인증서가 아니라 managed CA bundle을 해당 벤치 caller process에만 전달한다. Codex에는 공식 변수 `CODEX_CA_CERTIFICATE`, Node 기반 caller에는 필요한 경우 `NODE_EXTRA_CA_CERTS`를 사용하며 Codex/IDE 시작 환경이나 셸 전역에 `export`하지 않는다. 그렇지 않으면 공개 TLS 연결에도 같은 CA override가 적용될 수 있다. - evidence 위치: `agent-test/dev/iop-benchmark-route-minimal-html-smoke.md` - 현재 사전 확인: 2026-08-13 실제 원격 실행기에서 Claude Code 2.1.177과 Codex 0.146.0을 확인했고, 현재 workspace의 OpenCode 1.18.3을 별도 사용자 설정 변경 없이 command-scoped provider config로 준비했다. 원격 SOPS에 보관된 기존 IOP principal token으로 token 원문을 출력하지 않은 `/v1/models`가 HTTP 200임을 확인했다. 새 벤치 전용 token은 발급하거나 사용하지 않는다. -- 현재 경로 결과: Claude Code → Claude direct와 Claude Code → Gemini direct는 최소 HTML 1회 호출을 통과했다. Claude Code → GPT direct는 Chat Completions의 tools+reasoning 조합 미지원으로 실패했으나 caller-neutral operation normalization 반영 뒤 9초 안에 caller success와 `index.html` marker 1회를 확인했다. Codex → GPT direct와 Codex → GPT execution preset도 각각 10초/16초에 통과했다. OpenCode → Gemini execution preset은 Plan 성공 후 `ornith-fast` Work provider가 내려가 첫 호출에서 실패했지만, 해당 Node를 명시적 `Up`으로 복구한 뒤 실패 경로 1회 재검증에서 19초·caller terminal marker 1회·오류 0으로 통과했다. +- 현재 경로 결과: 9개 중 8개가 통과했고 OpenCode → Gemini direct만 정규화 코드의 live 배포 후 재검증을 남겼다. Claude Code → GPT direct는 caller-neutral operation normalization 반영 뒤 9초에 통과했고, Codex → GPT direct와 Codex → GPT execution preset도 각각 10초/16초에 통과했다. OpenCode → Gemini execution preset은 `ornith-fast` Node 복구 후 19초에 통과했다. 이후 사용자 지시로 이 세션의 hybrid Work 바인딩만 `ornith:35b`로 임시 전환했고, Claude Code → GPT execution preset은 71초, OpenCode → Gemini execution preset은 51초에 terminal success·caller marker·오류 0으로 통과했다. - 추가 분리 결과: agy는 text completion은 가능하지만 trusted workspace에서도 파일 도구를 호출하지 않아 구현 Agent 벤치 대상에서 제외했다. 대체한 OpenCode → Gemini direct는 첫 tool 호출 뒤 `extra_content.google.thought_signature`를 일반 Chat history로 보존하지 못해 두 번째 provider 호출이 HTTP 400으로 닫혔다. IOP가 선택된 `gemini_openai_chat` tool-call wire에서만 opaque id로 캡슐화·복원하도록 공통 provider normalization을 추가했고 focused HTTP 연속 호출 회귀가 통과했다. 코드는 `dev`에 반영됐지만 live 재검증은 표준 배포 전이다. Codex → GPT direct의 최초 실패는 CA bundle 대신 Edge leaf 인증서를 전달한 측정 환경 결함이었다. Claude Code → Gemini/GPT preset의 이전 default-selector 및 profile operation normalization 결함도 국소 수정과 회귀 검증이 완료됐다. - 배포 경계: live dev는 이전 release를 실행 중이고, 원격에 이전부터 미종료 release branch 두 건이 남아 있다. `dev-runtime-deploy` fail-closed 규칙에 따라 새 release 생성·배포·tag 반영은 시작하지 않았다. 이 Git release 상태는 벤치 성공 판정이 아니라 제품 배포 경계에서 별도로 정리해야 한다. +- 세션 한정 override: tracked 설정은 변경하지 않고 live runtime config의 Gemini/GPT hybrid Work 바인딩 네 곳만 `ornith:35b`로 바꾸었다. 원본 백업, config check, refresh dry-run/apply 통과 근거를 확인했으며 세션 종료 시 원래 `ornith-fast`로 복구한다. - 후속 측정: [초경량 Agent 모델 비교](thin-agent-model-comparison-benchmark.md) diff --git a/agent-test/dev/iop-benchmark-route-minimal-html-smoke.md b/agent-test/dev/iop-benchmark-route-minimal-html-smoke.md index 1897a0ea..0255479e 100644 --- a/agent-test/dev/iop-benchmark-route-minimal-html-smoke.md +++ b/agent-test/dev/iop-benchmark-route-minimal-html-smoke.md @@ -30,8 +30,8 @@ | Claude Code → GPT direct | provider HTTP 400 | operation normalization 반영 뒤 9초, caller success, `index.html` marker 1회 | IOP가 tools+effort를 Chat으로 보낸 결함 수정 확인 | | Codex → GPT direct | 30초, `turn.failed`, 파일 없음 | 공식 설정대로 임시 `CODEX_HOME`, Responses 전용 provider, `CODEX_CA_CERTIFICATE`에 CA bundle을 사용해 10초 통과 | 측정 환경 결함: 첫 호출은 CA bundle 대신 Edge leaf 인증서를 사용 | | Claude Code → Gemini execution preset | 184초, caller terminal success, caller workspace 파일 없음 | 새 배포에서 33초 caller 정상 종료; Plan/Work/Review, workspace write/read/list, artifact 3개 cleanup 성공 | default-selector dispatch 결함 해소; terminal 문구에 marker가 없는 것은 caller-visible 결과 판정과 분리 | -| OpenCode → Gemini execution preset | 7초, Plan 통과 후 Work `provider` 오류 | `ornith-fast` Node를 명시적 `Up` 복구한 뒤 19초, caller terminal marker 1회, 오류 0 | preset은 `ornith-fast` → RTX provider로 정상 라우팅됐으나 해당 Node가 내려가 Edge가 502 `provider unavailable`로 닫은 환경 결함; OpenCode·IOP 코드 결함 아님 | -| Claude Code → GPT execution preset | 미실행 | selector/Chat 응답 정규화 배포 뒤 최신 Claude 요청이 provider 전 95ms에 `messages[1].role` 검증 거절 | 실제 caller가 `user → system`과 mid-conversation-system beta를 보냄; IOP가 beta만 선언하고 ingress/lineage/Chat/Responses normalize를 구현하지 않은 별도 제품 결함 확인·국소 수정 | +| OpenCode → Gemini execution preset | 7초, Plan 통과 후 Work `provider` 오류 | `ornith-fast` Node 복구 후 19초 통과; 이후 세션 한정 Work를 `ornith:35b`로 전환한 경로도 51초·caller terminal marker·오류 0 | 최초 실패는 Edge가 502 `provider unavailable`로 닫은 환경 결함; OpenCode·IOP 코드 결함 아님 | +| Claude Code → GPT execution preset | provider 전 `messages[1].role` 검증 거절, 입력 normalize 후 Work `validation` | `timings` normalize가 포함된 live release에서 통과; 세션 한정 Work `ornith:35b`에서 71초·caller terminal success·marker 확인·오류 0 | mid-conversation system 입력과 provider `timings` 정규화 누락이었으며 국소 수정 후 해소 | | Codex → GPT execution preset | 16초, `turn.completed`, terminal marker 1회 | 없음 | 통과 | 추가 API 분리에서는 동일 principal의 최소 `/v1/responses`가 HTTP 200이었다. Codex direct도 사용자 설정과 로그인 상태를 배제한 임시 `CODEX_HOME`, Responses 전용 custom provider, 원격 SOPS의 기존 token, command-scoped managed CA bundle으로 통과했다. OpenCode direct는 command-scoped `OPENCODE_CONFIG_CONTENT`와 원격 SOPS의 기존 token을 사용해 user config를 변경하지 않았다. 첫 `glob` tool까지 성공했으나 caller가 Gemini provider extension을 표준 Chat history에 보존하지 않아 다음 요청이 `thought_signature` 누락 HTTP 400으로 실패했다. 이는 OpenCode 전용 문제가 아니라 selected Gemini Chat provider normalization 누락으로 분류했다. @@ -44,8 +44,10 @@ OpenCode → Gemini execution preset의 최초 실행은 Plan을 정상 통과했지만 Work에서 7초 만에 `provider` 오류로 닫혔다. live preset과 Edge 단계 지표를 대조한 결과 Work는 `ornith:35b`가 아니라 의도한 `ornith-fast`로 선택됐으며, 동일 Work request shape의 단일 직접 호출은 연결된 Node에 해당 provider가 없어 HTTP 502 `provider unavailable`를 반환했다. 사용자 관리형 RTX runtime을 toggle가 아닌 명시적 `Up`으로 복구한 뒤 실패 경로만 1회 재검증했고, 19초 내 caller terminal marker 1회·오류 0으로 통과했다. preset workspace가 caller 로컬에 파일을 남기지 않은 것은 기존 정리 계약과 일치한다. +사용자 지시에 따라 이 세션의 live execution preset만 Work 바인딩 네 곳을 `ornith-fast`에서 `ornith:35b`로 임시 전환했다. Plan/Review 모델과 tracked 설정은 변경하지 않았고, runtime config의 원본 백업을 남겼다. config check, refresh dry-run, apply가 재시작 없이 통과했다. 임시 경로에서 Claude Code → GPT execution preset은 71초, OpenCode → Gemini execution preset은 51초에 각각 terminal success와 caller-visible marker를 남겼고 오류는 없었다. 두 경로의 caller 로컬에 `index.html`이 남지 않은 것은 preset workspace 정리 계약과 일치한다. + ## 재개 조건 -Gemini Chat tool-call normalization 코드는 `dev` commit `d99305d1`과 merge `dc2d9968`로 반영됐다. 현재 live dev는 이전 release를 실행 중이며, 원격에 이전부터 미종료 release branch 두 건이 남아 표준 `dev-runtime-deploy`가 새 release를 시작하지 않고 fail-closed했다. 해당 Git release 상태를 별도로 정리한 뒤 표준 배포를 수행하고 OpenCode → Gemini direct 실패 경로만 1회 재검증한다. OpenCode → Gemini execution preset은 이미 통과했으므로 반복하지 않는다. 제품 전체 capacity gate나 unrelated 운영 라우트는 이 얇은 경로 검증의 판정 기준으로 섞지 않는다. +Gemini Chat tool-call normalization 코드는 `dev` commit `d99305d1`과 merge `dc2d9968`로 반영됐다. 9개 경로 중 8개는 통과했고, 남은 경로는 이 코드의 live 배포가 필요한 OpenCode → Gemini direct 하나다. 현재 live dev는 이전 release를 실행 중이며, 원격에 이전부터 미종료 release branch 두 건이 남아 표준 `dev-runtime-deploy`가 새 release를 시작하지 않고 fail-closed했다. 해당 Git release 상태를 별도로 정리한 뒤 표준 배포를 수행하고 남은 direct 경로만 1회 재검증한다. 제품 전체 capacity gate나 unrelated 운영 라우트는 이 얇은 경로 검증의 판정 기준으로 섞지 않는다. 성공한 경로는 반복하지 않는다. 실패한 경로는 원인이 변경된 경우에만 해당 경로를 1회 재검증한다.