| """Shared CLI and construction helpers for binding-affinity backends.""" | |
| from scoring.functions.binding import create_multi_target_affinity_predictor | |
| def add_affinity_arguments(parser, default_backend="original"): | |
| """Add the common affinity-backend options to an argument parser.""" | |
| group = parser.add_argument_group("Binding Affinity") | |
| group.add_argument( | |
| "--affinity_backend", | |
| choices=("original", "peptiverse"), | |
| default=default_backend, | |
| help="Affinity predictor to use; the original TD3B model remains the default.", | |
| ) | |
| group.add_argument( | |
| "--peptiverse_affinity_checkpoint", | |
| default=None, | |
| help=( | |
| "Optional local PeptiVerse pooled SMILES-affinity checkpoint. " | |
| "If omitted, it is downloaded from the Hub." | |
| ), | |
| ) | |
| group.add_argument( | |
| "--peptiverse_repo_id", | |
| default=( | |
| "ChatterjeeLab/PeptiVerse" if default_backend is not None else None | |
| ), | |
| help="Hugging Face repository used to download the PeptiVerse checkpoint.", | |
| ) | |
| group.add_argument( | |
| "--peptiverse_revision", | |
| default=None, | |
| help="Optional Hugging Face revision for reproducible model downloads.", | |
| ) | |
| group.add_argument( | |
| "--peptiverse_cache_dir", | |
| default=None, | |
| help="Optional cache directory for PeptiVerse and encoder artifacts.", | |
| ) | |
| group.add_argument( | |
| "--peptiverse_local_files_only", | |
| action="store_true", | |
| default=False if default_backend is not None else None, | |
| help="Require all PeptiVerse and encoder artifacts to exist locally.", | |
| ) | |
| group.add_argument( | |
| "--peptiverse_batch_size", | |
| type=int, | |
| default=32 if default_backend is not None else None, | |
| help="Binder-SMILES embedding batch size for PeptiVerse scoring.", | |
| ) | |
| return parser | |
| def create_affinity_from_args(args, tokenizer, base_path, device, emb_model=None): | |
| """Build the selected multi-target affinity predictor from CLI/config values.""" | |
| return create_multi_target_affinity_predictor( | |
| backend=getattr(args, "affinity_backend", None) or "original", | |
| tokenizer=tokenizer, | |
| base_path=base_path, | |
| device=device, | |
| emb_model=emb_model, | |
| peptiverse_checkpoint=getattr( | |
| args, "peptiverse_affinity_checkpoint", None | |
| ), | |
| peptiverse_repo_id=( | |
| getattr(args, "peptiverse_repo_id", None) | |
| or "ChatterjeeLab/PeptiVerse" | |
| ), | |
| peptiverse_revision=getattr(args, "peptiverse_revision", None), | |
| peptiverse_cache_dir=getattr(args, "peptiverse_cache_dir", None), | |
| peptiverse_local_files_only=bool( | |
| getattr(args, "peptiverse_local_files_only", False) | |
| ), | |
| peptiverse_batch_size=( | |
| getattr(args, "peptiverse_batch_size", None) or 32 | |
| ), | |
| ) | |