""" Build the 5K SFT/OPD dataset: - 1K from TemporalBench (long_qa) - 4K from LLaVA-Video-178K (cap / oe / mc across academic_v0_1, nextqa, activitynetqa, perceptiontest) Filters: only entries whose video is in the corresponding manifest_jsonl (≥32 decodable frames). Output: - {OUT_DIR}/sft_5k.jsonl — chat-template messages, multi-turn preserved - {OUT_DIR}/sft_5k.parquet — verl-ready (prompt[list], videos[list], response, data_source, ability, extra_info) - {OUT_DIR}/eval_100.jsonl — held-out subset for sanity checks (not in sft_5k) Each row has: prompt: list[ChatMessage] (only user-side messages; for OPD the student generates the response) response: str (the chosen ground-truth response for SFT; ignored by OPD) videos: list[dict] (one entry per