콘텐츠로 이동

평가 / 스모크

cue.eval.digest_eval은 fixture 세션 세트에 대해 로컬 Gemma 4 백엔드를 cloud Haiku 백엔드와 비교하는 dev-only harness입니다. 출력이 온디바이스 기본값 flip을 게이팅.

하는 일

각 fixture (최대 10 키프레임 + timeline JSON으로 캡처된 짧은 세션):

  1. LocalVisionBackendCloudVisionBackend 독립 실행.
  2. 캡처: 라텐시, 길이, 에러 / 타임아웃 플래그, scrub된 요약, 잔여 PII entity (입력 scrub이 못 잡은 leakage 감지용 second-pass scrub_strict).
  3. 백엔드별 stat 집계: p95 / median 라텐시, 성공 카운트, 타임아웃 카운트, PII-leakage 카운트, 평균 출력 char.

기본 flip 체크가 다음 임계값 검증:

  • 로컬에서 PII leakage — 0이어야 함.
  • 로컬 p95 라텐시 — ≤ 14초.
  • 로컬 타임아웃 비율 — ≤ 5%.
  • 로컬 출력 길이 — 평균 ≥ 20자 (모델이 뭐든 생성).

모두 통과하면 게이트가 ready_for_default_flip: true 보고하고 다음 릴리스가 digest_backendcloud에서 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.

더 보기