유대선
프로젝트로
·기술 회고·3 ·리뷰 필요

Vision LLM dispatcher 4종 실측 — Claude CLI 41s / Groq 76s / Gemini 8-15s

ScreenBridge dispatcher 4종 (Claude CLI subprocess / Anthropic API / Groq Llama 4 Scout / Gemini 2.5 Flash) 같은 fixture로 실측. WebSearch 추정 무너지고 vendor 공식 docs 직접 확인이 결국 가장 빠른 진실. Gemini Flash 채택 + responseSchema 강제.

AI 버전

컨텍스트

ScreenBridge v0.1 dogfooding 진입에서 latency가 critical — 매 호출 30초+면 daily 사용 안 함. 사용자 명시: "API 키 안 쓰고 무료로 빠르게, 다만 할루시네이션 금지". 4 dispatcher 후보 실측.

후보 + 실측

Dispatcher모델호출 시간좌표 인식무료성
ClaudeCliDispatchersonnet-4-6 (Pro 구독)41초[334,155,370,220]✓ 구독
AnthropicDispatchersonnet-4-6 API~10-15초 (미측정)(sonnet 동일)✗ $0.02/호출
GroqDispatcherLlama 4 Scout 17B (preview)76초coords=None✓ 1000 RPD
GeminiDispatchergemini-2.5-flash8-15초처음엔 1/3, schema 박은 후 ~100%✓ 250 RPD

WebSearch 추정 vs 실측

WebSearch에서 발견:

  • "Groq sub-200ms TTFT, 300-1000 tps" → Groq vision도 빠를 거 추정 (1-5초)
  • "Gemini multimodal native" → vision 정확도 우수 추정

실측:

  • Groq 76초 — 추정 1-5초 vs 15배 느림
  • Gemini 8-15초 — 추정 적중 + 좌표 인식은 schema 박은 후 안정

Groq 76초의 진짜 원인 분석

검색의 "300-1000 tps"는 텍스트 모델 (Llama 3.3 70B) 기준이었다. Vision은:

1. image encoder (PNG → token sequence)  ← LPU 최적화 안 됨 가능성
2. text token generation                  ← 이 단계만 LPU 빠름

LPU의 강점은 token gen throughput. 이미지 encoder는 conv/transformer 다른 연산이고, Llama 4 Scout 17B는 preview 상태라 vision encoder가 production LPU pipeline에 미반영 가능. Groq vision docs에 latency 수치 0개 — 측정 데이터 자체 비공개.

교훈: 텍스트 inference 벤치마크를 vision에 외삽 X. vendor docs 직접 fetch가 가장 빠른 진실.

Gemini 채택 + responseSchema 강제

3회 측정 중 2회 parse 실패. raw_len 173-174의 짧은 응답이 free-form 텍스트로 옴.

Fix: generationConfig.responseMimeType: "application/json" + responseSchema 명시:

{
  "type": "object",
  "properties": {
    "screen_state": {"type": "string"},
    "next_action": {"type": "string"},
    "target_text": {"type": "string"},
    "coordinates": {"type": "array", "items": {"type": "integer"}, "minItems": 4, "maxItems": 4},
    "reasoning": {"type": "string"}
  },
  "required": ["screen_state", "next_action", "target_text", "reasoning"]
}

이후 parse 안정 100%.

vendor별 strict JSON 메커니즘

  • Anthropic: SYSTEM_PROMPT 텍스트만으로 거의 항상 작동 (sonnet은 99%+ JSON 출력)
  • Gemini: generationConfig.responseSchema 명시 필요
  • Groq: response_format: { type: "json_object" }
  • OpenAI: response_format: { type: "json_schema", json_schema: { ... } }

vendor swap 시 dispatcher 코드에 vendor-specific JSON enforcement 매번. 한 번에 박을 것.

최종 매트릭스 (DECISIONS.md "시간 단축 옵션 매트릭스")

dogfooding 합리적 선택:

  1. Gemini 2.5 Flash + responseSchema + 다운스케일 ← 채택 — 무료 1000 RPD, 8-15초, vision 좌표 안정
  2. claude CLI Pro 구독 — sonnet 정확도 최고, 41초 느림
  3. Anthropic API + sonnet — 빠르고 정확, 월 $10
  4. Groq — 폐기 (76초 + 좌표 실패)

또 OCR + element matching (다음 mdx) 도입 후 LLM 좌표 추정 자체 미사용 → vendor 무관 정확도 한 단계 ↑.

한 줄 결론

WebSearch는 방향만 줌. 진짜 데이터는 vendor docs + 실측에서. 추정 인용 시 "검증 안 됨" 명시 필수.

리뷰 필요

내 시각이 아직 안 들어간 entry.