평가 / 스모크¶
cue.eval.digest_eval은 fixture 세션 세트에 대해 로컬 Gemma 4
백엔드를 cloud Haiku 백엔드와 비교하는 dev-only harness입니다.
출력이 온디바이스 기본값 flip을 게이팅.
하는 일¶
각 fixture (최대 10 키프레임 + timeline JSON으로 캡처된 짧은 세션):
LocalVisionBackend와CloudVisionBackend독립 실행.- 캡처: 라텐시, 길이, 에러 / 타임아웃 플래그, scrub된 요약,
잔여 PII entity (입력 scrub이 못 잡은 leakage 감지용 second-pass
scrub_strict). - 백엔드별 stat 집계: p95 / median 라텐시, 성공 카운트, 타임아웃 카운트, PII-leakage 카운트, 평균 출력 char.
기본 flip 체크가 다음 임계값 검증:
- 로컬에서 PII leakage — 0이어야 함.
- 로컬 p95 라텐시 — ≤ 14초.
- 로컬 타임아웃 비율 — ≤ 5%.
- 로컬 출력 길이 — 평균 ≥ 20자 (모델이 뭐든 생성).
모두 통과하면 게이트가 ready_for_default_flip: true 보고하고
다음 릴리스가 digest_backend를 cloud에서 local로 flip 가능.
실행 방법¶
repo 루트에서:
uv run python -m cue.eval.digest_eval --fixtures tests/fixtures/digest_eval
스모크 fixture (3 세션)이 in-tree로 tests/fixtures/digest_eval/
아래 ship. 전체 30-fixture 세트는 maintainer가 별도로 캡처 (실제
스크린 녹화는 repo에 ship하기 너무 민감).
출력은 eval/digest_eval_<date>.json에 감사용으로 작성.
Fixture 형식¶
각 fixture는 JSON 파일:
{
"id": "session_001",
"label": "code review in PR diff",
"keyframes": ["./keyframes/0.jpg", "./keyframes/1.jpg"],
"timeline": [
{"topic": "window", "ts_ns": 1000000000,
"payload": {"application": "Chrome", "title": "..."}},
{"topic": "keyboard", "ts_ns": 2000000000,
"payload": {"event_type": "press", "vk": 0x41}}
],
"expected_topics": ["code review", "PR"]
}
키프레임 경로는 fixture 파일에 상대적. expected_topics은 옵션이며
미래 missed-activity scoring에 사용.
JSON 출력 읽기¶
{
"generated_at": "2026-04-30T18:19:19Z",
"fixture_count": 3,
"records": [
{"fixture_id": "smoke_blue", "backend": "cloud", "latency_s": 1.76, ...},
{"fixture_id": "smoke_blue", "backend": "local", "latency_s": 34.70, ...}
],
"stats": {
"cloud": {"p95_latency_s": 1.92, "n_succeeded": 3, ...},
"local": {"p95_latency_s": 34.70, "n_succeeded": 3, ...}
},
"ready_for_default_flip": false,
"checks": {
"local_p95_latency_ok": false,
...
}
}
현재 상태¶
Apple Silicon CPU의 스모크 세트는 로컬 p95이 22-35초 범위 — 14초 임계값 한참 초과. 예상된 일: b8987 prebuilt의 Metal 커널이 pre-M5 / pre-A19 Apple Silicon에서 bf16 ops 부재라 온디바이스 추론이 CPU로 fallback. 온디바이스 비전 참고.
maintainer 하드웨어 (또는 모델)이 그 bar 통과하면 평가가
ready_for_default_flip: true로 flip하고 config 기본값 변경 가능.
스모크 vs full run¶
- Smoke — 3 fixture, main에 매 push마다 CI에서 실행, regression sentinel.
- Full — 30 fixture, maintainer가 기본값 flip 고려 시 손으로
실행. 출력은 감사용으로
eval/에 commit.
더 보기¶
cue.eval.digest_eval— 모듈 reference (deferred).- 디지스트 파이프라인 — harness가 비교하는 것.
- 온디바이스 비전 — 로컬 측이 현재 hold back된 이유.