--- base_model: mistralai/Mistral-7B-Instruct-v0.2 library_name: peft model_name: peleke-mistral-7b-instruct-v0.2 tags: - base_model:adapter:mistralai/Mistral-7B-Instruct-v0.2 - lora - sft - transformers - trl - chemistry - biology - antibody - antigen - protein - amino-acid - drug-design licence: gpl-3 pipeline_tag: text-generation license: gpl-3.0 datasets: - silicobio/peleke_antibody-antigen_sabdab --- # Model Card for peleke-mistral-7b-instruct-v0.2 This model is a fine-tuned version of [mistralai/Mistral-7B-Instruct-v0.2](https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.2) for antibody sequence generation. It takes in an antigen sequence and returns novel Fv portions of heavy and light chain antibody sequences. ## Important Note on Vocabulary Size This model was fine-tuned with additional special tokens, resulting in a vocabulary size of 32,005 tokens (vs. the base model's 32,000). You must resize the embeddings before loading the PEFT adapters. ## Quick Start ### 1. Load the Model ```python from transformers import AutoTokenizer, AutoModelForCausalLM from peft import PeftModel, PeftConfig import torch model_path = 'silicobio/peleke-mistral-7b-instruct-v0.2' # Load configuration and tokenizer config = PeftConfig.from_pretrained(model_path) tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True) # Set pad token if not already set if tokenizer.pad_token is None: tokenizer.pad_token = tokenizer.eos_token # Load base model base_model = AutoModelForCausalLM.from_pretrained( config.base_model_name_or_path, device_map="auto", # Automatically handle device placement torch_dtype=torch.bfloat16, low_cpu_mem_usage=True, trust_remote_code=True ) # IMPORTANT: Resize embeddings to match the fine-tuned vocabulary size expected_vocab_size = 32005 # The fine-tuned model has 5 additional tokens base_model.resize_token_embeddings(expected_vocab_size) # Load PEFT adapters model = PeftModel.from_pretrained( base_model, model_path, is_trainable=False # Set to False for inference ) model.eval() ``` ### 2. Format Your Input This model uses `` and `` to annotate epitope residues of interest. It may be easier to use other characters for annotation, such as `[ ]`. For example: `...CSFS[S][F][V]L[N]WY...` ```python import re def convert_epitope_format(sequence): """Convert [X] format to X format""" return re.sub(r'\[([A-Z])\]', r'\1', sequence) def format_prompt(antigen_sequence): """Format the antigen sequence for Mistral model""" formatted_antigen = convert_epitope_format(antigen_sequence) prompt = f"Antigen: {formatted_antigen}\nAntibody:" return prompt ``` ### 3. Generate an Antibody Sequence ```python def generate_antibody(model, tokenizer, antigen_sequence): # Format the prompt prompt = format_prompt(antigen_sequence) # Tokenize inputs = tokenizer(prompt, return_tensors="pt", truncation=True, max_length=1024) # Move to device device = next(model.parameters()).device inputs = {k: v.to(device) for k, v in inputs.items()} # Store input length to extract only generated tokens input_length = inputs['input_ids'].shape[1] # Generate with torch.no_grad(): outputs = model.generate( **inputs, max_new_tokens=800, do_sample=True, temperature=0.7, pad_token_id=tokenizer.pad_token_id, use_cache=False, ) # Decode only the generated part generated_tokens = outputs[0][input_length:] antibody_sequence = tokenizer.decode(generated_tokens, skip_special_tokens=True).strip() return antibody_sequence # Example usage antigen = "AYSTREILLALCIRDSRVHGNGTLHPVLELAARETPLRLSPEDTVVLRYHVLLEE[I]IE[R][N]RVLFATGSPYYDKNSP" antibody = generate_antibody(model, tokenizer, antigen) print(f"Antigen: {antigen}\nAntibody: {antibody}") ``` This will generate a `|`-delimited output, which represents the Fv portions of heavy and light chains: ``` Antigen: NPPTFSPALL... Antibody: QVQLVQSGGG...|DIQMTQSPSS... ``` ## Alternative Loading Method (if vocabulary size issues persist) ```python def load_model_with_vocab_fix(model_path): from peft import PeftConfig, PeftModel from transformers import AutoTokenizer, AutoModelForCausalLM # Load config config = PeftConfig.from_pretrained(model_path) # Load tokenizer tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True) if tokenizer.pad_token is None: tokenizer.pad_token = tokenizer.eos_token # Load base model base_model = AutoModelForCausalLM.from_pretrained( config.base_model_name_or_path, device_map="auto", torch_dtype=torch.bfloat16, low_cpu_mem_usage=True, trust_remote_code=True ) # Force resize to match fine-tuned vocab size base_model.resize_token_embeddings(32005) # Load PEFT adapters model = PeftModel.from_pretrained( base_model, model_path, is_trainable=False ) model.eval() return model, tokenizer ``` ## Special Tokens The model recognizes the following special tokens: - ``, ``: Epitope markers - ``, ``: Sentence boundaries (Mistral format) - `|`: Chain separator (between heavy and light chains) Additional tokens that may be present: - `Antigen`, `Antibody`, `Epitope`: Task identifiers - Single amino acid codes: `A`, `C`, `D`, `E`, `F`, `G`, `H`, `I`, `K`, `L`, `M`, `N`, `P`, `Q`, `R`, `S`, `T`, `V`, `W`, `Y` ## Training Procedure This model was trained with Supervised Fine-Tuning (SFT) on antibody-antigen pairs from the SAbDab database. ### Framework Versions - PEFT 0.17.0 - TRL: 0.19.1 - Transformers: 4.54.0 - PyTorch: 2.7.1 - Datasets: 4.0.0 ## Known Issues and Solutions ### Vocabulary Size Mismatch If you encounter a `RuntimeError` about size mismatch (32005 vs 32000), ensure you resize the embeddings BEFORE loading the PEFT adapters: ```python base_model.resize_token_embeddings(32005) # Must be done before PeftModel.from_pretrained() ``` ### Generation Parameters For best results, use: - `temperature`: 0.7-0.9 for diversity - `max_new_tokens`: 800-1000 (antibody sequences can be long) - `do_sample`: True - `use_cache`: False (for memory efficiency with long sequences) ## Citation If you use this model in your research, please cite: ```bibtex @model{peleke-mistral-2024, title={Peleke Mistral 7B Instruct v0.2 for Antibody Generation}, author={SilicoBio}, year={2024}, publisher={HuggingFace}, url={https://huggingface.co/silicobio/peleke-mistral-7b-instruct-v0.2} } ``` - Tokenizers: 0.21.2