Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
4b3309b
chore: update dependencies and Python version to 3.11; upgrade deepsp…
miguelenes Jun 22, 2026
407dd5f
chore: add pytest configuration to suppress third-party import warnin…
miguelenes Jun 22, 2026
672cce4
feat: add benchmark script for attention backends and update pyprojec…
miguelenes Jun 22, 2026
1f38863
chore: update pyproject.toml formatting, enhance README with low-VRAM…
miguelenes Jun 22, 2026
0988c10
chore: update pre-commit configuration to enable linting and unit tes…
miguelenes Jun 22, 2026
1100b6a
chore: update dependencies in poetry.lock, enhance pyproject.toml wit…
miguelenes Jun 22, 2026
1db1d62
chore: add handoff documentation for Cursor integration, update READM…
miguelenes Jun 22, 2026
2c29265
chore: update .gitignore to exclude Jolli Memory logs and add CUDA-re…
miguelenes Jun 22, 2026
e4f0ce8
chore: enhance dependency management in poetry.lock and pyproject.tom…
miguelenes Jun 22, 2026
18f02ce
chore: add .env.example for environment variable configuration, intro…
miguelenes Jun 22, 2026
a81c1cc
chore: refactor imports across multiple files to remove unused depend…
miguelenes Jun 22, 2026
8a76b3d
chore: add new configuration files for domain-specific adult content …
miguelenes Jun 22, 2026
a4e2001
chore: add production inference documentation for Wan 2.2 Diffusers 7…
miguelenes Jun 22, 2026
3dee34e
chore: add CPU smoke presets for various models, enhance capability m…
miguelenes Jun 22, 2026
e0ccb56
chore: implement cloud provisioning scripts for Vast.ai, add environm…
miguelenes Jun 22, 2026
01e27cb
refactor: rename project from VideoTuna to PrivTune, update environme…
miguelenes Jun 22, 2026
86a40f0
refactor: update benchmark script for clarity, enhance test cases for…
miguelenes Jun 22, 2026
5ad137c
refactor: move utility functions to sched_utils.py for better organiz…
miguelenes Jun 22, 2026
1a36fc3
refactor: remove legacy commands and dependencies, update documentati…
miguelenes Jun 22, 2026
cb78e61
refactor: update PrivTune documentation for clarity, streamline train…
miguelenes Jun 22, 2026
7c745ac
docs: add Cursor Cloud specific instructions to AGENTS.md
cursoragent Jun 22, 2026
3a6650a
feat: add validation scripts and configurations for Wan 2.2 domain Lo…
miguelenes Jun 22, 2026
efb98b4
feat: introduce Wan 2.1 I2V LoRA training and validation configuratio…
miguelenes Jun 22, 2026
ffec76c
feat: introduce centralized settings management for environment varia…
miguelenes Jun 22, 2026
1b754ac
feat: integrate cyclopts for CLI management, add new inference entryp…
miguelenes Jun 22, 2026
172f672
refactor: remove black and isort from dev dependencies, update format…
miguelenes Jun 22, 2026
7083653
feat: add support for fast HF downloads via VIDEOTUNA_FAST_HF_DOWNLOA…
miguelenes Jun 22, 2026
1ac39d9
refactor: replace decord with PyAV for video processing, update video…
miguelenes Jun 22, 2026
ee47c66
Upgrade pytest to 9.1.1 and consolidate test config.
miguelenes Jun 22, 2026
ef96abd
Unify training metrics on TensorBoard and remove unused wandb.
miguelenes Jun 22, 2026
5f7468a
Bump diffusers to 0.38 and harden Wan 2.2 LoRA bridge pin audit.
miguelenes Jun 22, 2026
9dac4d2
Add optional torchao transformer quantization for Wan 2.2 low-VRAM in…
miguelenes Jun 22, 2026
0232fe3
Add tenacity retries for Vast bootstrap network steps.
miguelenes Jun 22, 2026
856cc15
Remove unused beartype and scope easydict to Wan vendor boundary.
miguelenes Jun 22, 2026
1cf7b69
Document DeepSpeed/Lightning pins and fix ZeRO-3 PEFT dtype mismatch.
miguelenes Jun 22, 2026
055e93f
Restore generation_base.py after accidental mixin refactor in prior c…
miguelenes Jun 22, 2026
eef7557
Split generation_base into focused mixins for clearer separation of c…
miguelenes Jun 22, 2026
f15fc8f
Unify training and flow logging on loguru with structured context.
miguelenes Jun 22, 2026
b28c1b6
Add Pydantic v2 validation for Wan domain LoRA YAML configs.
miguelenes Jun 22, 2026
cd34589
Remove sys.path hacks from Wan entry scripts.
miguelenes Jun 22, 2026
8b276e4
Extend ruff lint to scripts/ and tools/.
miguelenes Jun 22, 2026
a44ebb6
Consolidate configs under domain/ and inference/presets/.
miguelenes Jun 22, 2026
a607e3a
Scope type-check to the gradual mypy allowlist.
miguelenes Jun 22, 2026
ab65147
Drop unrelated mypy changes from config consolidation commit.
miguelenes Jun 23, 2026
679d392
Add Wan vendor provenance and update vendor-policy inventory.
miguelenes Jun 23, 2026
add39c1
Align CPU CI with AGENTS.md required verification list.
miguelenes Jun 23, 2026
07705b6
Document GPU nightly CI workflow and self-hosted runner setup.
miguelenes Jun 23, 2026
0df0273
Drop GPU nightly files accidentally bundled in CI alignment commit.
miguelenes Jun 23, 2026
d59c74b
Remove stale GPU nightly CI docs from AGENTS.md.
miguelenes Jun 23, 2026
1f6482f
Make Flux DataLoader num_workers configurable via train config.
miguelenes Jun 23, 2026
72e6861
Honor every Flux domain JSON key or fail loudly at load time.
miguelenes Jun 23, 2026
fe17c06
Prune unused Wan s2v/animate/ti2v vendor surface.
miguelenes Jun 23, 2026
afebe2e
Remove legacy Hunyuan FP8 from domain inference CLI.
miguelenes Jun 23, 2026
ec2e121
Rename Docker image and Compose service from videotuna to privtune.
miguelenes Jun 23, 2026
489a745
Revert "Rename Docker image and Compose service from videotuna to pri…
miguelenes Jun 23, 2026
12c7567
Rename Docker image and Compose service from videotuna to privtune.
miguelenes Jun 23, 2026
daa757f
Centralize inference memory preset and offload resolution.
miguelenes Jun 23, 2026
bac1710
Document why Flux uses Accelerate and Wan uses Lightning+DeepSpeed.
miguelenes Jun 23, 2026
46f43fa
Lock in Flux config behavior for gradient checkpointing and validation.
miguelenes Jun 23, 2026
2936f63
Add CI coverage gate for training and utils modules.
miguelenes Jun 23, 2026
3e4ae57
Fix Flux LoRA resume and grad accumulation; harden Wan bridge validat…
miguelenes Jun 23, 2026
fd152ff
Clarify ROCm training scope, reject MPS, and tighten inference/pre-co…
miguelenes Jun 23, 2026
5d0b62d
Fix C12–C15: optimi Flux optimizer, cloud weights, LoRA matching, I2V…
miguelenes Jun 23, 2026
f81e58b
Add optional video-fast extra for torchcodec video decode.
miguelenes Jun 23, 2026
182c026
Add optional quanto extra for optimum-quanto quant backend.
miguelenes Jun 23, 2026
c585c5f
Harden torch-optimi Flux optimizer wiring with config assertion and s…
cursoragent Jun 23, 2026
a17b6a0
Align torchao quantization with 0.15+ v2 APIs for Wan 2.2 int8/fp8 in…
miguelenes Jun 23, 2026
c707210
Add optional Trackio metrics backend for Flux training
cursoragent Jun 23, 2026
3f8226f
Merge origin/main into cursor/trackio-metrics-flux-9f1b
cursoragent Jun 23, 2026
8b46507
Merge pull request #3 from miguelenes/cursor/trackio-metrics-flux-9f1b
miguelenes Jun 23, 2026
e12f388
Merge pull request #2 from miguelenes/cursor/torch-optimi-verify-e91d
miguelenes Jun 23, 2026
d5aedee
Merge branch 'main' into cursor/setup-dev-environment-b8c9
miguelenes Jun 23, 2026
d79322a
Merge pull request #1 from miguelenes/cursor/setup-dev-environment-b8c9
miguelenes Jun 23, 2026
c2d4d0c
Add Ruff configuration, line wrapping utility, and various code impro…
miguelenes Jun 23, 2026
9a96f0c
Merge branch 'main' of github.com:miguelenes/VideoTuna
miguelenes Jun 23, 2026
9ef396d
Audit Wan 2.2 LoRA bridge pins and document version matrix.
cursoragent Jun 23, 2026
0e1a351
Merge pull request #4 from miguelenes/cursor/wan-lora-pin-audit-2d91
miguelenes Jun 23, 2026
620352e
Fix syntax errors from invalid automated string line wrapping.
miguelenes Jun 23, 2026
068021d
Refactor code for improved readability and maintainability
miguelenes Jun 23, 2026
c92748f
ci: add lint autofix workflow and smoke test file
miguelenes Jun 23, 2026
21bd7da
style: apply ruff lint and format fixes
github-actions[bot] Jun 23, 2026
6b81436
perf(ci): speed up lint-autofix with ruff-action
miguelenes Jun 23, 2026
592184c
ci: add initial settings.json for context7-plugin configuration
miguelenes Jun 23, 2026
b631b07
fix(ci): pin astral-sh/ruff-action to v4.0.0
miguelenes Jun 23, 2026
34d0b23
fix(ci): pin ruff 0.6.9 to match poetry.lock in lint-autofix
miguelenes Jun 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Binary file added .coverage
Binary file not shown.
140 changes: 140 additions & 0 deletions .cursor/archive/markr-handoff-2026-06-22.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
---
description: Archived Markr session handoff (stale — do not apply)
alwaysApply: false
---

<!-- Archived 2026-06-22. Superseded by AGENTS.md. Regenerate via Markr when starting a new handoff. -->

# Handoff from Cursor (archived)
> 10 messages | ~344 tokens | Projects/VideoTuna | branch `main`
>
> Conditional Residual Handoff — transmits what the repo can't tell you (decisions, dead-ends, constraints, uncommitted diff), not the code itself.

## ⚡ Paste this first

Continue in Cursor Chat. Use the project files as source of truth and keep changes scoped.

```text
I'm resuming a previous Cursor session on Projects/VideoTuna. You have the repository — read it for anything not stated here. This handoff carries only what the code itself cannot tell you.

TASK
Pin SimpleTuner upstream SHA on next sync
Migrate third_party/flux/ → videotuna/vendor/simpletuner/ via submodule
Remove cogvideo_sat after SAT deprecation
First-party Flux LoRA trainer to drop the 71-file snapshot
Original task: @/home/menes/.cursor/projects/home-menes-Projects-VideoTuna/terminals/10.txt:9-239

STATE
- Branch `main` · 40 uncommitted file(s)
UNCOMMITTED (in-flight — not on HEAD, you can't see this by reading committed code)
- M README.md
- D configs/005_cogvideox1.5/cogvideox1.5_5b.yaml
- M docs/MODEL_VERSIONS.md
- M docs/checkpoints.md
- M poetry.lock
- M pyproject.toml
- M scripts/__init__.py
- D scripts/inference_cogVideo_sat_refactor.py
- M tests/conftest.py
- M tests/test_import_smoke.py
- M uv.lock
- D videotuna/models/cogvideo_sat/arguments.py
- D videotuna/models/cogvideo_sat/data_video.py
- D videotuna/models/cogvideo_sat/diffusion_video.py
- D videotuna/models/cogvideo_sat/dit_video_concat.py
- D videotuna/models/cogvideo_sat/sgm/__init__.py
- D videotuna/models/cogvideo_sat/sgm/lr_scheduler.py
- D videotuna/models/cogvideo_sat/sgm/models/__init__.py
- D videotuna/models/cogvideo_sat/sgm/models/autoencoder.py
- D videotuna/models/cogvideo_sat/sgm/modules/__init__.py
NEXT
- Run the relevant build, lint, or test command before calling the handoff complete.
- Preserve existing user changes and avoid reverting unrelated work.
VERIFY
- No verification command was captured — run the project build/lint/test before finishing.

SYNTHESIS — before you change anything, restate in one line: (a) the task, and (b) the one constraint you must not break. Then proceed.
```

---

## 🧠 Decision log

_No explicit decisions were captured in the transcript._

## 🛑 Dead-ends — do not redo

_None captured._

## 📌 Constraints

_None explicitly stated._

## 🔀 In-flight (uncommitted) state

Branch: `main`

Uncommitted changes:
- `M README.md`
- `D configs/005_cogvideox1.5/cogvideox1.5_5b.yaml`
- `M docs/MODEL_VERSIONS.md`
- `M docs/checkpoints.md`
- `M poetry.lock`
- `M pyproject.toml`
- `M scripts/__init__.py`
- `D scripts/inference_cogVideo_sat_refactor.py`
- `M tests/conftest.py`
- `M tests/test_import_smoke.py`
- `M uv.lock`
- `D videotuna/models/cogvideo_sat/arguments.py`
- `D videotuna/models/cogvideo_sat/data_video.py`
- `D videotuna/models/cogvideo_sat/diffusion_video.py`
- `D videotuna/models/cogvideo_sat/dit_video_concat.py`
- `D videotuna/models/cogvideo_sat/sgm/__init__.py`
- `D videotuna/models/cogvideo_sat/sgm/lr_scheduler.py`
- `D videotuna/models/cogvideo_sat/sgm/models/__init__.py`
- `D videotuna/models/cogvideo_sat/sgm/models/autoencoder.py`
- `D videotuna/models/cogvideo_sat/sgm/modules/__init__.py`
- `D videotuna/models/cogvideo_sat/sgm/modules/attention.py`
- `D videotuna/models/cogvideo_sat/sgm/modules/autoencoding/__init__.py`
- `D videotuna/models/cogvideo_sat/sgm/modules/autoencoding/losses/__init__.py`
- `D videotuna/models/cogvideo_sat/sgm/modules/autoencoding/losses/discriminator_loss.py`
- `D videotuna/models/cogvideo_sat/sgm/modules/autoencoding/losses/lpips.py`
- `D videotuna/models/cogvideo_sat/sgm/modules/autoencoding/losses/video_loss.py`
- `D videotuna/models/cogvideo_sat/sgm/modules/autoencoding/lpips/__init__.py`
- `D videotuna/models/cogvideo_sat/sgm/modules/autoencoding/lpips/loss/.gitignore`
- `D videotuna/models/cogvideo_sat/sgm/modules/autoencoding/lpips/loss/LICENSE`
- `D videotuna/models/cogvideo_sat/sgm/modules/autoencoding/lpips/loss/__init__.py`
- `D videotuna/models/cogvideo_sat/sgm/modules/autoencoding/lpips/loss/lpips.py`
- `D videotuna/models/cogvideo_sat/sgm/modules/autoencoding/lpips/model/LICENSE`
- `D videotuna/models/cogvideo_sat/sgm/modules/autoencoding/lpips/model/__init__.py`
- `D videotuna/models/cogvideo_sat/sgm/modules/autoencoding/lpips/model/model.py`
- `D videotuna/models/cogvideo_sat/sgm/modules/autoencoding/lpips/util.py`
- `D videotuna/models/cogvideo_sat/sgm/modules/autoencoding/lpips/vqperceptual.py`
- `D videotuna/models/cogvideo_sat/sgm/modules/autoencoding/magvit2_pytorch.py`
- `D videotuna/models/cogvideo_sat/sgm/modules/autoencoding/regularizers/__init__.py`
- `D videotuna/models/cogvideo_sat/sgm/modules/autoencoding/regularizers/base.py`
- `D videotuna/models/cogvideo_sat/sgm/modules/autoencoding/regularizers/finite_scalar_quantization.py`

## 🎯 Task

**Continue:** Pin SimpleTuner upstream SHA on next sync
Migrate third_party/flux/ → videotuna/vendor/simpletuner/ via submodule
Remove cogvideo_sat after SAT deprecation
First-party Flux LoRA trainer to drop the 71-file snapshot

**Original request:** @/home/menes/.cursor/projects/home-menes-Projects-VideoTuna/terminals/10.txt:9-239

## 💬 Recent exchange (tail)

**You**: Provide me with 3 comprehensive prompts, to run in plan model to setup amdu rocm support, imrpove nvidia support and use cpu. Also, be thorough on how to improve integration with the current system.

**You**: This is too slow poetry run pytest tests/test_diffusers_video_flow.py

**You**: @videotuna/third_party Is there a better way than doing this in our repo ? Provide me with a prompt to re-organize and improve the dependencies, management, etc

**You**: Consume this article https://bitmovin.com/blog/ai-video-research/ , suggest me 10 improvements you would do on this codebase based on the information.

**You**: Provide me with 3 comprehensive prompts, to run in plan mode to setup amdu rocm support, imrpove nvidia support and use cpu. Also, be thorough on how to improve integration with the current system.

**You**: Pin SimpleTuner upstream SHA on next sync Migrate third_party/flux/ → videotuna/vendor/simpletuner/ via submodule Remove cogvideo_sat after SAT deprecation First-party Flux LoRA trainer to drop the 71-file snapshot
3 changes: 3 additions & 0 deletions .cursor/mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"mcpServers": {}
}
15 changes: 15 additions & 0 deletions .cursor/rules/privtune.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
description: PrivTune project conventions and agent workflow
alwaysApply: true
---

# PrivTune

**Role:** Private-domain LoRA training platform (Flux T2I + Wan 2.1 T2V train, Wan 2.2 Diffusers validate). Optimize for correct training behavior, portable CUDA/ROCm/CPU handling, and minimal scoped diffs.

Primary instructions: [`AGENTS.md`](../AGENTS.md) at the repo root.

- Python 3.11+ · Poetry default (`poetry run …`) · optional uv
- **Before finishing (required):** `poetry run lint`, `poetry run format-check`, `poetry run coverage-gate`
- Env vars: [`.env.example`](../.env.example) (`VIDEOTUNA_*` retained) · Vendor policy: [`docs/vendor-policy.md`](../docs/vendor-policy.md)
- Never commit `.env`, checkpoints, `outputs/`, weights, or secrets
7 changes: 7 additions & 0 deletions .cursor/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"plugins": {
"context7-plugin": {
"enabled": true
}
}
}
54 changes: 54 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# PrivTune environment variables (VIDEOTUNA_* prefix retained for compatibility)
# Copy to .env and export, or set in your shell profile.
# Do not commit .env — it may contain secrets.

# --- Compute backend ---
# auto | cuda | rocm | cpu
VIDEOTUNA_COMPUTE_BACKEND=auto

# --- Attention backend ---
# auto | flash | sdpa | eager
# ROCm: use sdpa (flash is not supported)
VIDEOTUNA_ATTN_BACKEND=auto

# Fail when flash is requested but flash-attn is not installed (0 | 1)
VIDEOTUNA_ATTN_BACKEND_STRICT=0

# --- torch.compile (denoiser only) ---
VIDEOTUNA_TORCH_COMPILE=0
VIDEOTUNA_TORCH_COMPILE_MODE=reduce-overhead

# --- Metrics ---
# Inference metrics.json ownership (not training experiment tracking): script | flow
VIDEOTUNA_METRICS_OWNER=script

# Training experiment tracking (Flux Phase 1): tensorboard | trackio
# trackio requires: poetry install -E trackio
# VIDEOTUNA_METRICS_BACKEND=tensorboard
# Optional Trackio remote dashboard (private Space recommended for domain content):
# VIDEOTUNA_TRACKIO_SPACE_ID=username/privtune-trackio
# VIDEOTUNA_TRACKIO_PROJECT=flux-domain-lora

# --- CPU inference mode ---
# off | smoke | force
VIDEOTUNA_CPU_MODE=off
# Deprecated — use VIDEOTUNA_CPU_MODE=force
# VIDEOTUNA_ALLOW_CPU_INFERENCE=0

# --- Training / benchmarks (optional) ---
# VIDEOTUNA_LOG_LEVEL=INFO
# VIDEOTUNA_BENCH_MODEL=

# --- GPU selection ---
# CUDA_VISIBLE_DEVICES=0
# HIP_VISIBLE_DEVICES=0

# --- Hugging Face (gated models, higher rate limits) ---
# HF_TOKEN=
# HF_HOME=~/.cache/huggingface

# --- DashScope (Wan prompt extension via dashscope method) ---
# DASH_API_KEY=

# --- Test harness ---
# ENV=test
15 changes: 15 additions & 0 deletions .gemini/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"hooks": {
"AfterAgent": [
{
"hooks": [
{
"type": "command",
"command": "\"$HOME/.jolli/jollimemory/run-hook\" gemini-after-agent",
"name": "jolli-session-tracker"
}
]
}
]
}
}
37 changes: 37 additions & 0 deletions .github/workflows/cpu.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
name: CPU

on:
push:
branches: [main]
pull_request:

jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: actions/setup-python@v5
with:
python-version: "3.11"

- name: Install Poetry
run: pip install poetry

- name: Install dependencies (CPU extra + dev + training)
run: poetry install -E cpu --with dev --with training

- name: Install CPU PyTorch wheels
run: poetry run install-cpu-torch

- name: Verify CPU torch
run: poetry run verify-cpu-torch

- name: Lint
run: poetry run lint

- name: Format check
run: poetry run format-check

- name: Smoke tests + coverage gate
run: poetry run coverage-gate
43 changes: 43 additions & 0 deletions .github/workflows/lint-autofix.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
name: Lint autofix

on:
pull_request:
types: [opened, synchronize, reopened]

permissions:
contents: write

concurrency:
group: lint-autofix-${{ github.event.pull_request.number }}
cancel-in-progress: true

jobs:
autofix:
if: github.event.pull_request.head.repo.full_name == github.repository
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.ref }}
repository: ${{ github.event.pull_request.head.repo.full_name }}
token: ${{ secrets.GITHUB_TOKEN }}
persist-credentials: true

# Install ruff only (no Poetry / torch). Pin matches poetry.lock (0.6.9).
# Mirrors scripts/__init__.py code_format() targets and command order.
- name: Install ruff
uses: astral-sh/ruff-action@v4.0.0
with:
args: "--version"
version: "0.6.9"

- name: Apply lint and format fixes
run: |
ruff check --fix videotuna tests scripts tools
ruff check --select I --fix .
ruff format .

- uses: stefanzweifel/git-auto-commit-action@v7
with:
commit_message: "style: apply ruff lint and format fixes"
commit_author: "github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>"
6 changes: 6 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,10 @@ Dataset/
output/
outputs/
/data
data/t2i/domain/
data/t2v/domain/

cloud/vast/.env

HPSv2/
SwissArmyTransformer/
Expand All @@ -28,3 +32,5 @@ temp


*.outputs
.jolli/jollimemory
.jolli/jollimemory/debug.log
3 changes: 3 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[submodule "videotuna/vendor/simpletuner"]
path = videotuna/vendor/simpletuner
url = https://github.com/bghira/SimpleTuner.git
18 changes: 18 additions & 0 deletions .markr/config-tests.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"version": 1,
"suites": [
{
"configPath": ".agents/skills/jolli-recall/SKILL.md",
"tests": [
{
"id": "3266f96c-3940-4c08-a8f9-0334be69b6e4",
"name": "New test",
"prompt": "",
"expectedBehavior": "",
"mustInclude": [],
"mustNotInclude": []
}
]
}
]
}
Loading