fix(benchmark): 무경합 재측정 기준을 정리한다
비교 불가능한 기존 시간 결과를 무효화하고 외부 시작·완료 시각과 preset 단계 진단을 필수 evidence로 고정한다.
This commit is contained in:
parent
4e422376c3
commit
824842eb5c
4 changed files with 54 additions and 16 deletions
|
|
@ -65,9 +65,9 @@ Phase를 가로지르는 실제 다음 작업 선택은 [전역 마일스톤 실
|
|||
- 경로: [[bench-02] IOP 원샷 Agent 모델 비교 벤치마크](../../archive/phase/knowledge-tool-optimization-extension/milestones/iop-one-shot-agent-model-comparison.md)
|
||||
- 요약: 전용 harness의 정합성과 복구가 제품 안정성보다 우선되는 목적 역전으로 2026-08-13 폐기했다. 기존 결과와 계획은 재개하지 않는다.
|
||||
|
||||
- [완료] [bench-lite-01] 초경량 Agent 모델 비교
|
||||
- 경로: [[bench-lite-01] 초경량 Agent 모델 비교](../../archive/phase/knowledge-tool-optimization-extension/milestones/thin-agent-model-comparison-benchmark.md)
|
||||
- 요약: 동일 9개 경로를 producer 재시도 없이 한 번씩 실행해 7개 산출물을 공통 100점 기준표로 한 번 평가했고, 실행 실패 1건과 미완료 1건은 점수 0으로 왜곡하지 않고 채점 불가로 분리했다.
|
||||
- [진행중] [bench-lite-01] 초경량 Agent 모델 비교
|
||||
- 경로: [[bench-lite-01] 초경량 Agent 모델 비교](milestones/thin-agent-model-comparison-benchmark.md)
|
||||
- 요약: 이전 품질 evidence는 보존하되 무경합과 외부 시작·완료 시각이 없는 속도 비교는 무효화한다. 동일 9개 경로를 완전 순차로 다시 측정하고 preset 단계별 실패 근거를 함께 기록한다.
|
||||
|
||||
- [계획] [surface-01] Inference API Surface와 실행 Lifecycle 책임 경계 리팩터링
|
||||
- 경로: [[surface-01] Inference API Surface와 실행 Lifecycle 책임 경계 리팩터링](milestones/inference-api-surface-execution-lifecycle-refactor.md)
|
||||
|
|
|
|||
|
|
@ -2,8 +2,8 @@
|
|||
|
||||
## 위치
|
||||
|
||||
- Roadmap: [ROADMAP.md](../../../../ROADMAP.md)
|
||||
- Phase: [PHASE.md](../../../../phase/knowledge-tool-optimization-extension/PHASE.md)
|
||||
- Roadmap: [ROADMAP.md](../../../ROADMAP.md)
|
||||
- Phase: [PHASE.md](../PHASE.md)
|
||||
|
||||
## 목표
|
||||
|
||||
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
## 상태
|
||||
|
||||
[완료]
|
||||
[진행중]
|
||||
|
||||
## 구현 잠금
|
||||
|
||||
|
|
@ -25,7 +25,7 @@
|
|||
## 범위
|
||||
|
||||
- `[bench-route-01]`과 동일한 9개 caller/model/route 조합
|
||||
- 모든 조합에 [얇은 비교 결과 문서](../../../../../agent-test/dev/iop-thin-agent-model-comparison.md)의 같은 고정 비교 prompt와 같은 빈 임시 workspace 사용
|
||||
- 모든 조합에 [얇은 비교 결과 문서](../../../../agent-test/dev/iop-thin-agent-model-comparison.md)의 같은 고정 비교 prompt와 같은 빈 임시 workspace 사용
|
||||
- 조합별 정확히 1회 실행
|
||||
- 성공 여부, 전체 경과 시간, caller가 직접 제공한 usage, 산출물 경로와 짧은 수동 관찰만 기록
|
||||
- 실행 전에 잠근 공통 100점 기준표로 각 산출물의 source와 동일 viewport render를 한 번만 분석하고, 항목별 증거·감점 사유·총점을 기록
|
||||
|
|
@ -40,18 +40,24 @@
|
|||
- [x] [single-pass-scorecard] 실행 전에 고정한 공통 100점 기준표로 각 scorable 산출물의 source와 desktop/mobile render를 한 번만 함께 분석해 항목별 점수, 직접 증거, 감점 사유와 산술 총점을 기록한다. 검증: 평가 pass에는 route·model·시간·usage를 제공하지 않고 opaque 평가 ID만 사용하며, 모든 점수는 고정 anchor와 evidence를 가지고 재채점은 산술·전사 오류 수정으로만 제한한다.
|
||||
- [x] [bounded-conclusion] 성공한 결과만 비교하고 실패·미제공 데이터를 점수 0으로 취급하지 않는 짧은 결론을 남긴다. 자동 채점이나 통계적 일반화는 하지 않는다.
|
||||
|
||||
### Epic: [thin-rerun] 무경합 재측정과 preset 진단
|
||||
|
||||
- [ ] [isolated-timing-rerun] 동일 9개 조합을 다른 benchmark·agent 작업이 없고 provider queue/in-flight가 비어 있는 상태에서 완전 순차로 한 번씩 다시 실행한다. 각 행은 외부 기준 `request_sent_at`, `terminal_received_at`, monotonic elapsed를 기록하고 caller 내부 duration·TTFT는 별도 보조 지표로 분리한다. 검증: 실행 직전 무경합 snapshot, 단일 producer attempt, 두 외부 시각과 monotonic elapsed가 모든 행에 있어야 하며 조건을 증명하지 못한 행은 속도 비교에서 제외한다.
|
||||
- [ ] [preset-stage-diagnosis] 네 preset 행마다 request ID와 Plan/Work/Review/Repair stage의 시작·종료, 실제 선택 model, terminal/error, 최종 workspace와 caller-visible 응답 상태를 기존 Edge/Node 운영 로그에서 추출한다. 검증: generic error나 `채점 불가`만 남기지 않고 실패 소유 stage와 직접 오류 evidence를 기록하며, evidence가 없으면 관측 결함으로 명시한다.
|
||||
- [ ] [corrected-rerun-report] 재측정 결과표에서 운영 성공, 외부 완료 시간, preset 단계 진단과 산출물 품질을 분리하고 새 산출물만 기존 공통 기준표로 opaque 단일 평가한다. 검증: 이전 시간 비교는 무효로 표시하고, 측정 불가·오염된 실행·미제공 값은 0이나 추정값으로 바꾸지 않는다.
|
||||
|
||||
## 완료 리뷰
|
||||
|
||||
- 상태: 통과
|
||||
- 상태: 보완 필요
|
||||
- 요청일: 2026-08-14
|
||||
- 완료 근거: 9개 producer 단일 시도와 최소 결과표는 [실행 완료 로그](../../../../../agent-task/archive/2026/08/m-thin-agent-model-comparison-benchmark/complete.log), 사용자 승인 동일 viewport 재수집과 점수표·제한 결론은 [평가 완료 로그](../../../../../agent-task/archive/2026/08/m-thin-agent-model-comparison-benchmark_1/complete.log)로 확인했다.
|
||||
- 완료 근거: 이전 9개 producer 단일 시도와 품질 평가는 [실행 완료 로그](../../../../agent-task/archive/2026/08/m-thin-agent-model-comparison-benchmark/complete.log)와 [평가 완료 로그](../../../../agent-task/archive/2026/08/m-thin-agent-model-comparison-benchmark_1/complete.log)에 보존한다. 다만 무경합 상태를 증명하지 않았고 외부 요청·완료 시각이 누락됐으며 preset 실패의 내부 stage evidence가 없어 시간 비교와 완료 판정을 철회한다.
|
||||
- 검토 항목:
|
||||
- [x] `[bench-route-01]`이 통과 또는 사용자 승인된 외부 차단 상태다.
|
||||
- [x] 새 benchmark script와 자동화 state가 없다.
|
||||
- [x] 조합별 정확히 한 번의 실행, 최소 결과 표와 evidence-backed 단일 평가표만 남았다.
|
||||
- agent-ui 상태 반영: 해당 없음
|
||||
- Spec sync: 해당 없음 — 제품 코드·계약·런타임 동작을 바꾸지 않은 test-only 비교 evidence이므로 활성 구현 spec 갱신 대상이 아니다.
|
||||
- 리뷰 코멘트: producer 호출은 재시도하지 않았고, 최초 렌더러 실패 뒤 사용자 승인으로 동일 source·opaque ID·viewport를 유지한 캡처만 재수집했다. 7개 점수 산술과 E04/E06 채점 불가 처리가 공식 리뷰 PASS를 받았다.
|
||||
- 리뷰 코멘트: 이전 품질 점수는 참고 evidence로만 보존한다. OpenCode preset의 `0초` 표기는 잘못된 내부 이벤트 간격이므로 폐기하며, Sonnet/Gemini 시간 비교를 포함한 기존 속도 해석은 무효다. preset의 generic failure와 caller-visible source 누락은 단계별 운영 evidence로 다시 진단한다.
|
||||
|
||||
## 범위 제외
|
||||
|
||||
|
|
@ -63,8 +69,8 @@
|
|||
|
||||
## 작업 컨텍스트
|
||||
|
||||
- 선행 작업: [벤치 경로 최소 HTML 스모크](benchmark-route-minimal-html-smoke.md) 완료
|
||||
- 선행 작업: [벤치 경로 최소 HTML 스모크](../../../archive/phase/knowledge-tool-optimization-extension/milestones/benchmark-route-minimal-html-smoke.md) 완료
|
||||
- 실행 방식: 기존 공식 caller 명령을 한 번씩 직접 실행하며 공통 runner를 만들지 않는다.
|
||||
- 결과 위치: [얇은 비교 결과](../../../../../agent-test/dev/iop-thin-agent-model-comparison.md)
|
||||
- 결과 위치: [얇은 비교 결과](../../../../agent-test/dev/iop-thin-agent-model-comparison.md)
|
||||
- 준비 상태: 교체 가능한 고정 prompt, 9행 결과표, 공통 100점 기준표, 단일 평가 scorecard를 준비했다. 별도 script, judge, manifest, state store는 없다.
|
||||
- 세션 라우팅: execution preset의 Work 바인딩은 사용자 지시에 따라 live `ornith-fast`를 사용하며 tracked 설정은 변경하지 않는다.
|
||||
|
|
@ -4,6 +4,11 @@
|
|||
|
||||
## 실행 순서
|
||||
|
||||
### bench-lite
|
||||
|
||||
1. [[bench-lite-01] 초경량 Agent 모델 비교](phase/knowledge-tool-optimization-extension/milestones/thin-agent-model-comparison-benchmark.md)
|
||||
무경합 상태에서 동일 9개 경로의 외부 요청·완료 시각을 다시 측정하고, preset 내부 stage와 실패 원인을 운영 evidence로 분리해 기록한다.
|
||||
|
||||
### route
|
||||
|
||||
3. [[route-03] Heavy Plan/Review 실행과 검증 MVP](phase/knowledge-tool-optimization-extension/milestones/knowledge-tool-validation-optimization.md)
|
||||
|
|
|
|||
|
|
@ -14,10 +14,12 @@
|
|||
|
||||
## 실행 규칙
|
||||
|
||||
- 재측정은 다른 benchmark·agent producer가 없고 provider queue/in-flight가 비어 있음을 직전에 확인한 뒤 완전 순차로 수행한다. 이 무경합 상태를 증명하지 못한 행은 실행 결과는 보존하되 속도 비교에서 제외한다.
|
||||
- 각 조합은 빈 임시 workspace에서 정확히 한 번만 실행한다.
|
||||
- 실패도 결과이며 같은 측정에서 retry, resume, recovery 또는 대체 실행을 하지 않는다.
|
||||
- 모든 행은 caller 명령 바깥에서 같은 clock으로 `request_sent_at`, `terminal_received_at`과 monotonic elapsed를 기록한다. caller 내부 duration, API duration과 TTFT는 별도 보조 지표이며 외부 완료 시간 대신 사용하지 않는다.
|
||||
- direct 경로는 caller workspace의 `index.html`과 terminal marker를 확인한다.
|
||||
- execution preset은 Edge private workspace cleanup 계약을 유지하므로 caller-visible terminal marker와 최종 응답의 exact HTML code block을 확인한다.
|
||||
- execution preset은 request ID와 Plan/Work/Review/Repair stage별 시작·종료, 실제 선택 model, terminal/error, 최종 workspace 및 caller-visible 응답 상태를 기록한다. Edge private workspace cleanup 계약을 유지하므로 caller-visible terminal marker와 최종 응답의 exact HTML code block도 확인한다.
|
||||
- usage는 caller가 직접 제공한 값만 기록하고 없으면 `미제공`으로 둔다.
|
||||
- 기존 원격 SOPS token과 command-scoped managed CA만 사용하며 별도 benchmark token이나 전역 CA override를 만들지 않는다.
|
||||
- 이 세션의 execution preset Work는 live `ornith-fast` 바인딩을 사용한다. tracked runtime 설정은 변경하지 않는다.
|
||||
|
|
@ -25,7 +27,9 @@
|
|||
- full source를 얻지 못한 실행은 `실행 실패`와 별개로 `채점 불가`로 기록하며 0점으로 바꾸지 않는다.
|
||||
- scorable source에는 실행 후 opaque 평가 ID를 부여한다. 단일 평가 pass에는 ID, source와 두 render만 제공하고 route·model·시간·usage 매핑은 점수와 evidence가 고정된 뒤 결합한다.
|
||||
|
||||
## 결과
|
||||
## 이전 실행 결과 — 시간 비교 무효
|
||||
|
||||
아래 결과는 무경합 상태를 증명하지 않았고 외부 요청·완료 시각을 일관되게 기록하지 못했다. 산출물과 caller raw evidence는 참고용으로 보존하지만 경과 시간, 속도 순위와 모델 간 시간 차이는 비교 근거로 사용하지 않는다. 특히 OpenCode → Gemini execution preset의 `0초`는 요청 전체 시간이 아니라 마지막 내부 이벤트 간격을 잘못 사용한 값이다.
|
||||
|
||||
| 경로 | 평가 ID | 상태 | 경과 시간 | caller usage | source SHA-256 / terminal evidence | 짧은 관찰 |
|
||||
|---|---|---|---:|---|---|---|
|
||||
|
|
@ -39,6 +43,29 @@
|
|||
| Claude Code → GPT execution preset | E06 | 응답 불완전 | 89.870초 | input 0, output 0 | source 없음 / terminal marker·exact fence 없음 | 완료 문구만 반환해 채점 불가; 재시도하지 않음 |
|
||||
| Codex → GPT execution preset | E02 | 성공 | 미제공 | input 123,280, cached input 39,124, cache write input 83,814, output 7,557, reasoning output 372 | `c7760fcffe964ffe7189a600d47534bab9731fe158f49b169c6461d83324838c` / terminal marker 확인 | terminal exact fence 추출 및 사용자 승인 동일 viewport render 확보 |
|
||||
|
||||
## 무경합 재측정 결과
|
||||
|
||||
| 경로 | 상태 | 무경합 snapshot | request sent UTC | terminal received UTC | 외부 elapsed | caller duration / API / TTFT | usage | source / terminal evidence |
|
||||
|---|---|---|---|---|---:|---|---|---|
|
||||
| Claude Code → Claude direct | 미실행 | 미확인 | — | — | — | 미제공 | 미제공 | 미확인 |
|
||||
| Claude Code → Gemini direct | 미실행 | 미확인 | — | — | — | 미제공 | 미제공 | 미확인 |
|
||||
| OpenCode → Gemini direct | 미실행 | 미확인 | — | — | — | 미제공 | 미제공 | 미확인 |
|
||||
| Claude Code → GPT direct | 미실행 | 미확인 | — | — | — | 미제공 | 미제공 | 미확인 |
|
||||
| Codex → GPT direct | 미실행 | 미확인 | — | — | — | 미제공 | 미제공 | 미확인 |
|
||||
| Claude Code → Gemini execution preset | 미실행 | 미확인 | — | — | — | 미제공 | 미제공 | 미확인 |
|
||||
| OpenCode → Gemini execution preset | 미실행 | 미확인 | — | — | — | 미제공 | 미제공 | 미확인 |
|
||||
| Claude Code → GPT execution preset | 미실행 | 미확인 | — | — | — | 미제공 | 미제공 | 미확인 |
|
||||
| Codex → GPT execution preset | 미실행 | 미확인 | — | — | — | 미제공 | 미제공 | 미확인 |
|
||||
|
||||
## Preset 단계 진단
|
||||
|
||||
| 경로 | request ID | Plan | Work | Review | Repair | 실패 소유 stage / 직접 오류 | 최종 workspace | caller-visible terminal |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| Claude Code → Gemini execution preset | 미실행 | — | — | — | — | 미확인 | 미확인 | 미확인 |
|
||||
| OpenCode → Gemini execution preset | 미실행 | — | — | — | — | 미확인 | 미확인 | 미확인 |
|
||||
| Claude Code → GPT execution preset | 미실행 | — | — | — | — | 미확인 | 미확인 | 미확인 |
|
||||
| Codex → GPT execution preset | 미실행 | — | — | — | — | 미확인 | 미확인 | 미확인 |
|
||||
|
||||
## 공통 평가 기준표 — 100점
|
||||
|
||||
평가자는 route, model, 경과 시간과 usage를 보지 않고 opaque 평가 ID, exact source와 두 고정 viewport render만 사용한다. `A`는 명시된 세부 점수를 합산한다. `B`~`D`의 각 5점 항목은 `5=명확히 충족`, `3=대체로 충족하나 눈에 띄는 결함 1개`, `1=일부 흔적만 있거나 결함이 여러 개`, `0=없거나 깨짐`의 네 anchor만 사용한다. 중간 점수는 쓰지 않는다.
|
||||
|
|
@ -91,6 +118,6 @@ Evidence block 형식: `평가 ID — A: 충족/누락 selector와 점수; B~D:
|
|||
|
||||
## 결론
|
||||
|
||||
9개 조합은 각각 한 번씩 실행되었고, 7개는 exact HTML source를 확보했으며 1개는 실행 실패, 1개는 exact terminal source가 없어 응답 불완전으로 남았다. caller가 제공한 경과 시간 중에는 Claude Code → GPT direct가 63.757초로 가장 짧았지만 Codex 두 행의 경과 시간은 제공되지 않아 전체 속도 순위를 만들 수 없다. usage는 caller가 제공한 필드만 위 표에 보존했다.
|
||||
이전 9개 조합은 7개 exact HTML source, 실행 실패 1개, exact terminal source가 없는 응답 불완전 1개를 남겼다. 그러나 단독·무경합 상태와 동일한 외부 시작·완료 clock을 증명하지 못했으므로 기존 시간 비교와 속도 해석은 무효다. usage는 caller가 제공한 필드만 참고 evidence로 보존한다.
|
||||
|
||||
최초 로컬 Chromium 14개 render는 모두 hang 또는 timeout이었고, 이후 사용자가 프로세스 강제 재시작과 동일 기준 재시도를 명시적으로 승인했다. 동일 opaque ID와 1440×900/390×844 viewport를 유지한 독립 Chrome 재수집으로 scorable 7개를 한 번 채점했다. E02·E03·E09가 85점, E01·E05·E07·E08이 83점이었으며, 7개 모두 desktop 완성도는 높았지만 390×844에서 horizontal overflow와 clipping이 공통으로 관찰됐다. 이는 단일 과제·단일 평가 결과이므로 모델 우위로 일반화하지 않는다. 실행 실패 E04, 응답 불완전 E06, 미제공 경과 시간은 0으로 치환하지 않았고 producer 호출은 재시도하지 않았다.
|
||||
이전 산출물의 단일 평가는 품질 참고 자료로만 보존한다. 재측정에서는 새 산출물만 동일 rubric으로 새 opaque ID를 부여해 한 번 평가하며, 운영 성공·외부 완료 시간·preset 단계 진단과 품질 점수를 서로 결합해 단일 순위로 만들지 않는다.
|
||||
|
|
|
|||
Loading…
Reference in a new issue