Download adapters/sample_langflow.py from jyliuAI/diffusion_baseline: direct link, hf CLI and curl.
- Browser
- Download file 2.73 kB
-
https://huggingface.co/jyliuAI/diffusion_baseline/resolve/main/adapters/sample_langflow.py
- Command line
-
hf download hf://jyliuAI/diffusion_baseline/adapters/sample_langflow.py
-
curl -L -o sample_langflow.py https://huggingface.co/jyliuAI/diffusion_baseline/resolve/main/adapters/sample_langflow.py
2.73 kB
| #!/usr/bin/env python3 | |
| """Dataset-configurable LangFlow sampler used by the DLB capture wrapper.""" | |
| from __future__ import annotations | |
| import argparse | |
| from pathlib import Path | |
| import sys | |
| import torch | |
| from safetensors.torch import load_file | |
| from transformers import AutoTokenizer | |
| ROOT = Path(__file__).resolve().parents[1] | |
| UPSTREAM_ROOT = ROOT / "upstreams" / "langflow" | |
| if str(UPSTREAM_ROOT) not in sys.path: | |
| sys.path.insert(0, str(UPSTREAM_ROOT)) | |
| from langflow import LangFlow, LangFlowConfig # noqa: E402 | |
| def parse_args() -> argparse.Namespace: | |
| parser = argparse.ArgumentParser(description="Generate samples with pinned LangFlow") | |
| parser.add_argument("--checkpoint", required=True) | |
| parser.add_argument("--num_samples", type=int, default=5) | |
| parser.add_argument("--batch_size", type=int, default=1) | |
| parser.add_argument("--num_steps", type=int, default=128) | |
| parser.add_argument("--seq_length", type=int, default=None) | |
| parser.add_argument("--seed", type=int, default=42) | |
| parser.add_argument("--output") | |
| parser.add_argument("--tokenizer", required=True) | |
| return parser.parse_args() | |
| def main() -> None: | |
| args = parse_args() | |
| checkpoint = Path(args.checkpoint) | |
| config_dir = checkpoint.parent | |
| torch.manual_seed(args.seed) | |
| if torch.cuda.is_available(): | |
| torch.cuda.manual_seed_all(args.seed) | |
| device = torch.device("cuda" if torch.cuda.is_available() else "cpu") | |
| config = LangFlowConfig.from_pretrained(str(config_dir)) | |
| model = LangFlow(config) | |
| state_dict = load_file(str(checkpoint), device=str(device)) | |
| model.load_state_dict(state_dict) | |
| model = model.to(device) | |
| model.eval() | |
| tokenizer = AutoTokenizer.from_pretrained(args.tokenizer) | |
| all_samples = [] | |
| remaining = args.num_samples | |
| with torch.no_grad(): | |
| while remaining > 0: | |
| batch = min(args.batch_size, remaining) | |
| samples = model.generate_samples( | |
| num_samples=batch, | |
| seq_length=args.seq_length, | |
| num_steps=args.num_steps, | |
| device=device, | |
| ) | |
| all_samples.append(samples) | |
| remaining -= batch | |
| generated = torch.cat(all_samples, dim=0) | |
| texts = tokenizer.batch_decode(generated, skip_special_tokens=True) | |
| for index, text in enumerate(texts): | |
| print(f"\n--- Sample {index + 1} ---") | |
| print(text[:500] + ("..." if len(text) > 500 else "")) | |
| if args.output is not None: | |
| with open(args.output, "w", encoding="utf-8") as output_file: | |
| for index, text in enumerate(texts): | |
| output_file.write(f"--- Sample {index + 1} ---\n{text}\n\n") | |
| if __name__ == "__main__": | |
| main() | |