--- library_name: transformers tags: [] --- # Model Card for Model ID ```python from transformers import AutoModelForCausalLM, AutoTokenizer import torch from typing import List, Optional import numpy as np from datetime import datetime class TextStreamer: def __init__(self, tokenizer, output_file=None): self.tokenizer = tokenizer self.current_tokens = [] self.output_file = output_file self.full_response = "" def put(self, value): if isinstance(value, torch.Tensor): value = value.cpu().numpy() if len(value.shape) > 1: value = value[0] if isinstance(value, np.ndarray): value = value.tolist() if isinstance(value, list): if isinstance(value[0], list): value = value[0] self.current_tokens.extend(value) else: self.current_tokens.append(value) tokens_to_decode = [int(token) for token in self.current_tokens] text = self.tokenizer.decode(tokens_to_decode, skip_special_tokens=True) if len(self.current_tokens) > len(value): previous_text = self.tokenizer.decode( [int(token) for token in self.current_tokens[:-len(value) if isinstance(value, list) else -1]], skip_special_tokens=True ) new_text = text[len(previous_text):] else: new_text = text if new_text: print(new_text, end="", flush=True) self.full_response += new_text def end(self): print("") if self.output_file: with open(self.output_file, 'a', encoding='utf-8') as f: f.write(f"\n--- Response generated at {datetime.now().strftime('%Y-%m-%d %H:%M:%S')} ---\n") f.write(self.full_response) f.write("\n\n") return self.full_response class Translator: DEFAULT_SYSTEM_PROMPT = """ You are a skilled linguistic expert specializing in cross-lingual translation. Your task is to perform accurate and detailed translations, moving from a given source language to a specified destination language. You will perform the translation by thinking and reasoning step-by-step by and demonstrating the linguistic transformation process while maintaining the source context. # Output Format Your translation responses should be structured as follows: ``` [Detailed thinking and reasoning process, including the analysis and breakdown of the sentence] [Final translated sentence based on the step-by-step reasoning] ``` Stick to the above formate and exclose the final translation in {translated sentence} """ def __init__( self, model_name: str, system_prompt: Optional[str] = None, device_map: str = "auto", torch_dtype: str = "auto" ): """ Initialize the translator with a model and tokenizer. Args: model_name: Path or name of the model to load system_prompt: Optional custom system prompt device_map: Device mapping strategy for model loading torch_dtype: Torch data type for model """ self.model = AutoModelForCausalLM.from_pretrained( model_name, torch_dtype=torch_dtype, device_map=device_map ) self.tokenizer = AutoTokenizer.from_pretrained(model_name) self.system_prompt = system_prompt or self.DEFAULT_SYSTEM_PROMPT def translate( self, text: str, max_new_tokens: int = 2048, temperature: float = 0.1, top_p: float = 0.7, output_file: Optional[str] = None ) -> str: """ Translate the given text using the loaded model. Args: text: Text to translate max_new_tokens: Maximum number of tokens to generate temperature: Temperature for generation top_p: Top-p sampling parameter output_file: Optional file to save the translation Returns: str: The translated text """ # Prepare messages messages = [ {"role": "system", "content": self.system_prompt}, {"role": "user", "content": text} ] # Apply chat template prompt = self.tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True ) # Tokenize input model_inputs = self.tokenizer([prompt], return_tensors="pt").to(self.model.device) # Create streamer streamer = TextStreamer(self.tokenizer, output_file=output_file) # Generate with streaming self.model.generate( **model_inputs, max_new_tokens=max_new_tokens, temperature=temperature, top_p=top_p, streamer=streamer ) return streamer.end() def __call__(self, *args, **kwargs) -> str: """ Make the translator callable directly. """ return self.translate(*args, **kwargs) # %% translator = Translator( model_name="CoT-Translator/Llama-3b-Reasoning-Translate" ) # %% # Use it multiple times texts = [ # "संक्रमित चमगादड़ निपाह विषाणु को सूअरों जैसे अन्य जानवरों में भी फैला सकते हैं। .translate from hindi to english", "how are you doing today and what is your name .translate from english to hindi", # "सफरचंदसाठी आजचा दिवस खरोखर चांगला आहे आणि मला खूप मजा येत आहे. translate from marathi to english" # "Today's day is really good for Safar Chand and I'm having a lot of fun. translate from english to marathi" ] for text in texts: print(f"\nTranslating: {text}") translation = translator( text, output_file="translation_responses_llama_translate.txt" ) print(f"Complete translation: {translation}\n") ```