--- library_name: transformers tags: - biology - chemistry - biological materials - materials science - engineering - materials informatics - scientific AI - AI4science --- ## Inference example ``` model_name='lamm-mit/BioinspiredLlama-3-1-8B-128k' model = AutoModelForCausalLM.from_pretrained( model_name, trust_remote_code=True, device_map="auto", torch_dtype =torch.bfloat16, attn_implementation="flash_attention_2" ) model.config.use_cache = True tokenizer = AutoTokenizer.from_pretrained(model_name) ``` Check https://huggingface.co/lamm-mit/BioinspiredLlama-3-1-8B-128k-dominant-protein-SS-structure for further examples use of the model for protein structural features prediction, including a fine-tuning script. #### Function to interact with the model ``` def generate_response (text_input="What is spider silk?", system_prompt='', num_return_sequences=1, temperature=1., #the higher the temperature, the more creative the model becomes max_new_tokens=127,device='cuda', add_special_tokens = False, #since tokenizer.apply_chat_template adds <|begin_of_text|> template already, set to False num_beams=1,eos_token_id= [ 128001, 128008, 128009 ], verbatim=False, top_k = 50, top_p = 0.9, repetition_penalty=1.1, messages=[], ): if messages==[]: #start new messages dictionary if system_prompt != '': #include system prompt if provided messages.extend ([ {"role": "system", "content": system_prompt}, ]) messages.extend ( [ {"role": "user", "content": text_input}, ]) else: #if messages provided, will extend (make sure to add previous response as assistant message) messages.append ({"role": "user", "content": text_input}) text_input = tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True ) inputs = tokenizer([text_input], add_special_tokens = add_special_tokens, return_tensors ='pt' ).to(device) if verbatim: print (inputs) with torch.no_grad(): outputs = model.generate(**inputs, max_new_tokens=max_new_tokens, temperature=temperature, num_beams=num_beams, top_k = top_k,eos_token_id=eos_token_id, top_p =top_p, num_return_sequences = num_return_sequences, do_sample =True, repetition_penalty=repetition_penalty, ) outputs=outputs[:, inputs["input_ids"].shape[1]:] return tokenizer.batch_decode(outputs.detach().cpu().numpy(), skip_special_tokens=True), messages ``` Usage: ``` res,_= generate_response (text_input = "What is collagen?", system_prompt = 'You are a materials scientist.', num_return_sequences=1, temperature=1., #the higher the temperature, the more creative the model becomes max_new_tokens=127, num_beams=1, top_k = 50, top_p =0.9, repetition_penalty=1.1, ) print (res[0]) ``` To realize multi-turn interactions, see this example: ``` res, messages = generate_response (text_input="What is spider silk?", messages=[]) messages.append ({"role": "assistant", "content": res[0]}, ) #append result to messages dict print (res) res, messages = generate_response (text_input="Explain this result in detail.", messages=messages) messages.append ({"role": "assistant", "content": res[0]}, ) #append result to messages dict print (res) res, messages = generate_response (text_input="Provide this in JSON format.", messages=messages) messages.append ({"role": "assistant", "content": res[0]}) #append result to messages dict print (res) ``` ## Fine-tuning script See (https://huggingface.co/lamm-mit/BioinspiredLlama-3-1-8B-128k-dominant-protein-SS-structure) for a Colab fine-tuning script.