"""③ motion 단계 VLM 응답 스키마. 모션 키는 Literal로 고정한다 — 어휘 밖의 값이 나올 수 없다. 키 목록은 raw_prompt/motion_phrase.json과 일치해야 하며, motion.py가 기동 시 대조한다. """ from typing import Literal from pydantic import BaseModel MotionKey = Literal[ "firework", "water", "wave", "cloud", "smoke", "moon", "sun", "star", "light", "flag", "foliage", "wheel", "vessel", "crowd", "ray", "snow", "fog", "glow", ] class MotionElement(BaseModel): motion: MotionKey what: str confident: bool class MotionAnswer(BaseModel): elements: list[MotionElement]