Spaces:
Runtime error
Runtime error
| from transformers import AutoModelForCausalLM, AutoTokenizer | |
| from typing import Tuple, List, Dict | |
| import torch | |
| def load_model( | |
| model_name: str, | |
| dtype: torch.dtype = torch.float32, | |
| ) -> Tuple[AutoModelForCausalLM, any]: | |
| """ | |
| Load and initialize the language model for CPU-only inference. | |
| Args: | |
| model_name (str): Name of the pre-trained model to load | |
| dtype (torch.dtype): Data type for model weights (default: torch.float32) | |
| Returns: | |
| Tuple[AutoModelForCausalLM, any]: Tuple containing the model and tokenizer | |
| """ | |
| kwargs = { | |
| "device_map": "cpu", # Explicitly set to CPU | |
| "torch_dtype": dtype, | |
| "low_cpu_mem_usage": True, # Optimize memory usage for CPU | |
| } | |
| # Load the tokenizer | |
| tokenizer = AutoTokenizer.from_pretrained("CodeTranslatorLLM/LinguistLLM") | |
| # Load the model | |
| model = AutoModelForCausalLM.from_pretrained( | |
| pretrained_model_name_or_path="CodeTranslatorLLM/LinguistLLM", | |
| **kwargs | |
| ) | |
| model.eval() # Set model to evaluation mode | |
| return model, tokenizer | |
| def prepare_input( | |
| messages: List[Dict[str, str]], | |
| tokenizer: any, | |
| ) -> torch.Tensor: | |
| """ | |
| Prepare input for the model by applying chat template and tokenization. | |
| Args: | |
| messages (List[Dict[str, str]]): List of message dictionaries | |
| tokenizer: The tokenizer instance | |
| Returns: | |
| torch.Tensor: Prepared input tensor | |
| """ | |
| # Combine messages into a single string (simple concatenation for this example) | |
| input_text = " ".join([msg["content"] for msg in messages]) | |
| # Tokenize the input | |
| return tokenizer( | |
| input_text, | |
| return_tensors="pt", | |
| padding=True, | |
| truncation=True, | |
| )["input_ids"] | |
| def generate_response( | |
| model: AutoModelForCausalLM, | |
| inputs: torch.Tensor, | |
| tokenizer: any, | |
| max_new_tokens: int = 200, | |
| ) -> str: | |
| """ | |
| Generate response using the model. | |
| Args: | |
| model (AutoModelForCausalLM): The language model | |
| inputs (torch.Tensor): Prepared input tensor | |
| tokenizer: The tokenizer instance | |
| max_new_tokens (int): Maximum number of tokens to generate | |
| Returns: | |
| str: Generated response | |
| """ | |
| outputs = model.generate( | |
| inputs, | |
| max_new_tokens=max_new_tokens, | |
| do_sample=False, # Deterministic generation for reproducibility | |
| ) | |
| # Decode the generated tokens | |
| return tokenizer.decode(outputs[0], skip_special_tokens=True) | |
| def main( | |
| USER_INPUT_CODE: str, | |
| USER_INPUT_EXPLANATION: str, | |
| MODEL_PATH: str, | |
| ): | |
| """ | |
| Main function to demonstrate the inference pipeline. | |
| """ | |
| # Example messages | |
| messages = [ | |
| { | |
| "role": "user", | |
| "content": f"[Fortran Code]\n{USER_INPUT_CODE}\n[Fortran Code Explain]\n{USER_INPUT_EXPLANATION}" | |
| } | |
| ] | |
| # Load model | |
| model, tokenizer = load_model(MODEL_PATH) | |
| # Prepare input | |
| inputs = prepare_input(messages, tokenizer) | |
| # Generate response | |
| response = generate_response(model, inputs, tokenizer) | |
| print("Generated Response:\n", response) | |
| if __name__ == "__main__": | |
| # Define your Fortran code and explanation | |
| USER_INPUT_CODE = """ | |
| program sum_of_numbers | |
| implicit none | |
| integer :: n, i, sum | |
| ! Initialize variables | |
| sum = 0 | |
| ! Get user input | |
| print *, "Enter a positive integer:" | |
| read *, n | |
| ! Calculate the sum of numbers from 1 to n | |
| do i = 1, n | |
| sum = sum + i | |
| end do | |
| ! Print the result | |
| print *, "The sum of numbers from 1 to", n, "is", sum | |
| end program sum_of_numbers | |
| """ | |
| USER_INPUT_EXPLANATION = """ | |
| The provided Fortran code snippet is a program that calculates the sum of integers from 1 to n, where n is provided by the user. | |
| It uses a simple procedural approach, including variable declarations, input handling, and a loop for the summation. | |
| The program starts by initializing variables and prompting the user for input. | |
| It then calculates the sum using a do loop, iterating from 1 to n, and accumulating the result in a variable. | |
| Finally, it prints the computed sum to the console. | |
| This program demonstrates a straightforward application of Fortran's capabilities for handling loops and basic arithmetic operations. | |
| """ | |
| # Path to your model | |
| MODEL_PATH = "lora_model" | |
| # Run the main function | |
| main(USER_INPUT_CODE, USER_INPUT_EXPLANATION, MODEL_PATH) | |