from __future__ import annotations import io import json import struct import sys import threading import time from pathlib import Path import pytest from adam.assets import AssetRegistry from adam.config import ConfigManager from adam.executor import ToolCancelled, ToolContext, ToolExecutionError from adam.models import ExecutionPlan, PlanStep from adam.registry import ToolRegistry, ToolSpec from adam.tools import wan_video_adapter as adapter from adam.video_lora import ( MODEL_FILES, checkpoint_info, dataset_errors, discover_assets, frames_for_seconds, generation_plan, settings_for, trainer_root, training_plan, ) def checkpoint(path: Path, *, base="wan2.1_t2v_1.3B_bf16.safetensors") -> Path: header = json.dumps({"__metadata__": {"ss_network_module": "networks.lora_wan", "ss_sd_model_name": base, "ss_epoch": "2", "ss_network_dim": "16"}, "lora_unet_blocks_0.lora_down.weight": {"dtype": "F32", "shape": [1, 1], "data_offsets": [0, 4]}}).encode() path.parent.mkdir(parents=True, exist_ok=True) path.write_bytes(struct.pack("= 0 assert str(archived.resolve()) in ConfigManager(root).get("video_lora_settings")["dataset_history"] page.close() page.deleteLater() app.processEvents() def test_desktop_caption_shortcut_and_batch_captioning(workspace, monkeypatch): monkeypatch.setenv("QT_QPA_PLATFORM", "offscreen") from PySide6.QtWidgets import QApplication from PySide6.QtCore import QObject, Signal, Qt from PySide6.QtTest import QTest from adam.ui.video_lora import VideoLoraPage class Jobs(QObject): job_updated = Signal(object) active_job = None root, _, dataset = workspace second = dataset / "second.mp4" second.write_bytes(b"video") app = QApplication.instance() or QApplication([]) page = VideoLoraPage(root, ToolRegistry(root), Jobs(), AssetRegistry(root), ConfigManager(root)) page.show() app.processEvents() page.dataset_folder.setText(str(dataset)) page._refresh_clips() page.clips.setCurrentRow(0) page.clips.item(1).setSelected(True) page.caption.setPlainText("subject_token smiles at the camera") page._apply_caption_to_selected() assert (dataset / "clip.txt").read_text(encoding="utf-8").strip() == "subject_token smiles at the camera" assert (dataset / "second.txt").read_text(encoding="utf-8").strip() == "subject_token smiles at the camera" page.clips.setCurrentRow(0) page.caption.setPlainText("subject_token waves") page.caption.document().setModified(True) page.caption.setFocus() QTest.keyClick(page.caption, Qt.Key_Return, Qt.ShiftModifier) app.processEvents() assert page.clips.currentRow() == 1 assert (dataset / "clip.txt").read_text(encoding="utf-8").strip() == "subject_token waves" page.close() page.deleteLater() app.processEvents()