Spaces:
Build error
Build error
| 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 | |
| def load_parser(cls): | |
| # Loads the parser object for argument parsing | |
| argument_parser = ArgumentParser() | |
| args = argument_parser.parse_arguments() | |
| return args | |
| 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 | |
| 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() | |