# -*- coding: utf-8 -*-# file: omnigenbench_cli.py# time: 12:51 05/02/2025# author: YANG, HENG <hy345@exeter.ac.uk> (杨恒)# Homepage: https://yangheng95.github.io# github: https://github.com/yangheng95# huggingface: https://huggingface.co/yangheng# google scholar: https://scholar.google.com/citations?user=NPq5a_0AAAAJ&hl=en# Copyright (C) 2019-2025. All Rights Reserved.importargparseimportjson
[docs]defmain():""" The main entry point for the OmniGenome command-line interface. This function sets up the command-line argument parser and handles the execution of different subcommands. Currently supports RNA design functionality with genetic algorithm optimization. Example: >>> # Design RNA sequences from command line >>> python -m omnigenbench.cli.omnigenome_cli rna_design --structure "(((...)))" >>> # Design with custom parameters >>> python -m omnigenbench.cli.omnigenome_cli rna_design ... --structure "(((...)))" ... --model "yangheng/OmniGenome-186M" ... --mutation-ratio 0.3 ... --num-population 200 ... --num-generation 150 ... --output-file "results.json" """parser=argparse.ArgumentParser(description="OmniGenome CLI")subparsers=parser.add_subparsers(dest="command",required=True,help="Sub-command help")# Design commanddesign_parser=subparsers.add_parser("rna_design",help="Design RNA sequences for a given secondary structure")design_parser.add_argument("--structure",type=str,required=True,help='Target RNA structure in dot-bracket notation (e.g., "(((...)))")',)design_parser.add_argument("--model",type=str,default="yangheng/OmniGenome-186M",help="Path to the pre-trained model (default: yangheng/OmniGenome-186M)",)design_parser.add_argument("--mutation-ratio",type=float,default=0.5,help="Mutation ratio for genetic algorithm (0.0-1.0, default: 0.5)",)design_parser.add_argument("--num-population",type=int,default=100,help="Number of individuals in population (default: 100)",)design_parser.add_argument("--num-generation",type=int,default=100,help="Number of generations to evolve (default: 100)",)design_parser.add_argument("--output-file",type=str,help="Output JSON file to save results")args=parser.parse_args()ifargs.command=="rna_design":fromomnigenbenchimportOmniModelForRNADesign# Validate parametersifnot0<=args.mutation_ratio<=1:raiseValueError("--mutation-ratio must be between 0.0 and 1.0")ifargs.num_population<=0orargs.num_generation<=0:raiseValueError("Population and generation numbers must be positive integers")# Run RNA designmodel=OmniModelForRNADesign(model=args.model)best_sequences=model.design(structure=args.structure,mutation_ratio=args.mutation_ratio,num_population=args.num_population,num_generation=args.num_generation,)# Output resultsprint(f"Best RNA sequences for {args.structure}:")forseqinbest_sequences:print(f"- {seq}")# Save to file if specifiedifargs.output_file:withopen(args.output_file,"w")asf:json.dump({"structure":args.structure,"parameters":{"mutation_ratio":args.mutation_ratio,"population":args.num_population,"generations":args.num_generation,},"best_sequences":best_sequences,},f,indent=2,)print(f"\nResults saved to {args.output_file}")