eval_qa.py --debug로 plan/nodes/reasoning 전체 캡처 가능4/14 560-QA 전체 벤치마크 결과: Describe-once 80.7%, Frame-20 70.0%, Graph-VLM 67.9%. Graph가 Describe 대비 -12.8%p 열세. 하지만 이 벤치마크의 문제점은 560개 질문의 대부분이 description 텍스트만 읽어도 맞출 수 있다는 것 — Graph의 구조 retrieval 가치를 실제로 측정하지 못하고 있었다.
이를 해결하기 위해 (1) native video 비교를 위한 Letsur gateway 가능 여부 확인, (2) description-proof 질문만 자동 선별하는 파이프라인 구축, (3) Graph 병목을 plan/retrieval 수준에서 드릴다운하는 debug 인프라 구축이 필요했다.
tmp/probe_video.py로 7가지 포맷을 순차 테스트:
| 포맷 | 결과 |
|---|---|
video_url (data URI) | 조용히 드롭 (prompt_tokens=3, 텍스트만) |
image_url + video/mp4 mime | 400 upstream_error |
input_video | 500 upstream_error |
file type | 400 upstream_error |
video_url + YouTube URL | URL 문자열만 텍스트 전달, Gemini "UNAVAILABLE" |
video_url + HTTPS MP4 URL | 동일 (URL만 텍스트) |
/v1beta/files (Gemini File API) | 404 Not Found |
120-frame 균일 샘플로 10개 질문 생성 후 Frame-120으로 평가. Frame-120 결과 77.8%였지만 생성·평가가 같은 프레임 셋 사용 → circular baseline. Frame이 생성에 참여했으면 Frame이 평가에서도 유리하게 된다.
300 frames + 전체 28-segment description을 함께 넣고 "visual info만으로 답 가능한 질문" 생성 시도. Negative constraint("description만으론 답 안 나와야")를 프롬프트에 명시했지만 VLM이 무시 → Describe-once 10/10(100%).
| 시스템 | 정답 | 정확도 | 비용 |
|---|---|---|---|
| Frame-300 | 5/10 | 50% | $0.12 |
| Graph-VLM (V1) | 1/10 | 10% | $0.04 |
| Describe-once | 1/10 | 10% | $0.02 |
| Category | Difficulty | Hardness Criteria |
|---|---|---|
| EM1×3, EM3×4, EM5×3 | L2×2, L3×6, L4×2 | VISUAL-LOCATION×3, SEQUENTIAL×5, MULTI-OBJECT×4, FINE-GRAINED-DURATION×3, TRANSIENT-STATE×1 |
| Plan 타입 | 사용 횟수 | 정답 | 비고 |
|---|---|---|---|
{"query_type": "all"} fallback | 5/10 | 0 | 74K chars 덤프, VLM 익사 |
participant(X) | 4/10 | 1 | Q0만 정답 |
participant(stove_burner) | 1/10 | 0 | 그래프에 위치 정보 없음 |
gen_hard_qa_filtered.py로 이제부터 어떤 영상/도메인에도 description-proof hard QA를 자동 선별할 수 있다. 2-stage(dense-frame 생성 → describe-only 필터 → category balance)는 재현 가능한 파이프라인. 20개 후보 중 12개 하드(60%)는 충분한 하드율.
all fallback 과용 — 5/10이 74K 덤프에 익사, (b) single-seed entity linking — entity split 시 한쪽 miss, (c) 그래프 자체에 없는 정보 — visual position/count/enumeration.즉시 (이어서 구현): Query plan 3-bug fix — _fuzzy_match_all(multi-seed), plan union, keyword-subgraph fallback(74K→~5K). → 260421-query_plan_v3_bugfix.html 참조
QA 품질 개선: Frame-agreement filter 추가 — 생성자 hallucination 잡기. hardfilt10 중 Q7(rice 없는 영상에서 rice 요리 주장), Q9("suggests washing" → fill ≠ wash) 같은 케이스 방지.
Tier 2 — 그래프 빌드 수정 (다음 세션):
visual_position attribute (left/right/front/back, 프레임 내 위치)stored_in / inside / on_surface spatial edge 구분occurrence_count 집계X ↔ X_half / X_pieces 명시적 alias link