import json import time from LanguageTranslator.utils.argument import ArgumentParser from LanguageTranslator.model.openai_model import OpenAIModel from fastapi import HTTPException class LocalTranslator: def __init__(self, open_ai, inputs_data): # Initialize the LocalTranslator with OpenAI and inputs data self.open_ai = open_ai self.inputs_data = inputs_data def translate(self): # Translates the provided text into the destination language translations = [] result_response = { 'text': '', 'language_translation': '' } if 'text' not in self.inputs_data or 'dest_language' not in self.inputs_data: print("Required fields 'text' and 'dest_language' are missing in input data.") return translations, '' text = self.inputs_data['text'] dest_language = self.inputs_data['dest_language'] if not isinstance(dest_language, str): print("Destination language is not a single text.") return translations, dest_language if isinstance(text, str): text = [text] if not isinstance(text, list): print("Input data is not a text or a list of text") return translations, dest_language start_time = time.time() for t in text: prompt = self.open_ai.translate_prompt(t, dest_language) translation, _ = self.open_ai.make_translation_request(prompt) translations.append(translation) end_time = time.time() execution_time = end_time - start_time result_response['text'] = translations if len(translations) > 1 else translations[0] result_response['language_translation'] = dest_language print(f"Translation completed in {execution_time:.2f} seconds 🎉🎉🎉\nTranslated: {result_response}") return result_response @classmethod def load_parser(cls): # Loads the parser object for argument parsing argument_parser = ArgumentParser() args = argument_parser.parse_arguments() return args @classmethod def language_translator(cls): # Builds the language translator using the provided arguments args = cls.load_parser() if args.model_type == "OpenAIModel": if args.openai_model and args.openai_api_key: model_name = args.openai_model api_key = args.openai_api_key else: raise ValueError("Invalid OpenAI model or API key") model = OpenAIModel(model_name=model_name, api_key=api_key) else: raise ValueError("Invalid OpenAIModel specified.") if args.json: with open(args.json, 'r') as j: input_data = json.load(j) else: input_data = { "text": args.text, "dest_language": args.dest_language } return cls(open_ai=model, inputs_data=input_data) class ServerTranslator: def __init__(self, open_ai, inputs_data): # Initialize the ServerTranslator with OpenAI and inputs data self.open_ai = open_ai self.inputs_data = inputs_data def translate(self): # Translates the given text into the destination language translations = [] result_response = { 'text': '', 'language_translation': '' } if 'text' not in self.inputs_data or 'dest_language' not in self.inputs_data: raise HTTPException(status_code=400, detail="Required fields 'text' and 'dest_language' are missing in input data.") text = self.inputs_data['text'] dest_language = self.inputs_data['dest_language'] if not isinstance(dest_language, str): raise HTTPException(status_code=400, detail="Destination language is not a single text.") if isinstance(text, str): text = text.split(',') text = [text] if not isinstance(text, list): raise HTTPException(status_code=400, detail="Input data is not a text or a list of text.") start_time = time.time() for t in text: prompt = self.open_ai.translate_prompt(t, dest_language) translation, _ = self.open_ai.make_translation_request(prompt) translations.append(translation) end_time = time.time() execution_time = end_time - start_time result_response['text'] = translations if len(translations) > 1 else translations[0] result_response['language_translation'] = dest_language print(f"Translation completed in {execution_time:.2f} seconds 🎉🎉🎉\nTranslated: {result_response}") return result_response @classmethod def language_translator(cls, inputs_data=None, text=None, dest_language=None, model_type='OpenAIModel', openai_model='gpt-3.5-turbo', openai_api_key='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'): # Builds the language translator using the provided arguments if model_type == "OpenAIModel": if openai_model and openai_api_key: model_name = openai_model api_key = openai_api_key else: raise HTTPException(status_code=400, detail="Invalid OpenAI model or API key") model = OpenAIModel(model_name=model_name, api_key=api_key) else: raise HTTPException(status_code=400, detail="Invalid OpenAIModel specified.") if inputs_data: input_data = { "text": inputs_data['text'].split(','), "dest_language": inputs_data['dest_language'] } else: input_data = { "text": text, "dest_language": dest_language } return cls(open_ai=model, inputs_data=input_data) if __name__ == "__main__": pass # process = LocalTranslator.language_translator() # process.translate()