Spaces:
Build error
Build error
File size: 6,133 Bytes
cc91688 e1a87b1 cc91688 ea340dc cc91688 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
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()
|