Download tools/check_isolation.py from EliovpAI/Qwen_Image-2.1-Uncensored-MXFP4-Paiton: direct link, hf CLI and curl.
- Browser
- Download file 2.47 kB
-
https://huggingface.co/EliovpAI/Qwen_Image-2.1-Uncensored-MXFP4-Paiton/resolve/main/tools/check_isolation.py
- Command line
-
hf download hf://EliovpAI/Qwen_Image-2.1-Uncensored-MXFP4-Paiton/tools/check_isolation.py
-
curl -L -o check_isolation.py https://huggingface.co/EliovpAI/Qwen_Image-2.1-Uncensored-MXFP4-Paiton/resolve/main/tools/check_isolation.py
2.47 kB
| import sys,json,hashlib | |
| from pathlib import Path | |
| import argparse | |
| PACKAGE=Path(__file__).resolve().parent.parent | |
| sys.path.insert(0,str(PACKAGE)) | |
| p=argparse.ArgumentParser() | |
| p.add_argument('--model-dir',type=Path,required=True) | |
| p.add_argument('--output',type=Path,required=True) | |
| a=p.parse_args() | |
| from qwen_image21.runtime import ImageEngine | |
| import torch | |
| from PIL import Image | |
| out=a.output;out.mkdir(parents=True,exist_ok=False) | |
| e=ImageEngine(a.model_dir) | |
| # Keep snapshots on CPU, outside timed qualification; trace request boundaries. | |
| captured={} | |
| def capture_tensor(name,t): | |
| if isinstance(t,tuple):t=t[0] | |
| if not isinstance(t,torch.Tensor):return | |
| captured[name]=t.detach().cpu().contiguous() | |
| orig=e.pipeline.encode_prompt | |
| def encode(*args,**kwargs): | |
| r=orig(*args,**kwargs);capture_tensor('prompt',r[0]);return r | |
| e.pipeline.encode_prompt=encode | |
| e.pipeline.vae.decoder.register_forward_pre_hook(lambda m,a: capture_tensor('vae_input',a[0])) | |
| e.pipeline.vae.decoder.register_forward_hook(lambda m,a,o: capture_tensor('vae_output',o)) | |
| prompt='A blue ceramic teapot on a wooden table, soft daylight, studio photograph' | |
| records=[];control=None;image=None | |
| for name,mode in [('a0','text-to-image'),('a1','text-to-image'),('b_rgba','rgba'),('a2','text-to-image'),('b_edit','edit'),('a3','text-to-image'),('a4','text-to-image')]: | |
| captured={} | |
| if mode=='text-to-image':p=prompt;seed=51;im=None | |
| elif mode=='rgba':p='A cute cartoon dragon sticker.';seed=52;im=None | |
| else:p='Change the blue teapot to bright red. Keep the table and composition.';seed=53;im=image | |
| result,png,metrics=e.generate(p,width=1024,height=1024,seed=seed,mode=mode,image=im) | |
| (out/(name+'.png')).write_bytes(png) | |
| if image is None:image=result | |
| row={'name':name,'sha':hashlib.sha256(png).hexdigest(),'metrics':metrics} | |
| if mode=='text-to-image': | |
| if control is None:control=captured | |
| row['stages']={} | |
| for key,t in captured.items(): | |
| diff=(t.float()-control[key].float()).abs() | |
| row['stages'][key]={'exact':torch.equal(t,control[key]),'max':diff.max().item(),'mae':diff.mean().item()} | |
| records.append(row);print(json.dumps(row),flush=True) | |
| (out/'result.json').write_text(json.dumps(records,indent=2)+'\n') | |
| assert all(row['stages'][stage]['exact'] for row in records if 'stages' in row | |
| for stage in ('prompt','vae_input')), 'Request conditioning or denoising state leaked across requests' | |
| print('PASS: exact prompt embeddings and final denoising latents across immediate and A-B-A repeats') | |