From f566feabcbb144ce75e2b3b3fba387a7005b6bd1 Mon Sep 17 00:00:00 2001 From: hleft <89069008+hleft@users.noreply.github.com> Date: Fri, 10 Mar 2023 20:50:49 +0800 Subject: [PATCH] refactor(translator): extract get_translation method (#112) - Extracted get_translation method to improve code readability and maintainability - Moved the code that handles API key and completion creation to the new method --- .../translator/chatgptapi_translator.py | 69 +++++++++---------- 1 file changed, 32 insertions(+), 37 deletions(-) diff --git a/book_maker/translator/chatgptapi_translator.py b/book_maker/translator/chatgptapi_translator.py index 49d75d9..7557cf9 100644 --- a/book_maker/translator/chatgptapi_translator.py +++ b/book_maker/translator/chatgptapi_translator.py @@ -15,48 +15,43 @@ class ChatGPTAPI(Base): def rotate_key(self): openai.api_key = next(self.keys) - def translate(self, text): - print(text) + def get_translation(self, text): self.rotate_key() + completion = openai.ChatCompletion.create( + model="gpt-3.5-turbo", + messages=[ + { + "role": "user", + "content": f"Please help me to translate,`{text}` to {self.language}, please return only translated content not include the origin text", + } + ], + ) + t_text = ( + completion["choices"][0] + .get("message") + .get("content") + .encode("utf8") + .decode() + ) + return t_text + + def translate(self, text): + # todo: Determine whether to print according to the cli option + print(text) + try: - completion = openai.ChatCompletion.create( - model="gpt-3.5-turbo", - messages=[ - { - "role": "user", - # english prompt here to save tokens - "content": f"Please help me to translate,`{text}` to {self.language}, please return only translated content not include the origin text", - } - ], - ) - t_text = ( - completion["choices"][0] - .get("message") - .get("content") - .encode("utf8") - .decode() - ) + t_text = self.get_translation(text) except Exception as e: - # TIME LIMIT for open api please pay + # todo: better sleep time? why sleep alawys about key_len + # 1. openai server error or own network interruption, sleep for a fixed time + # 2. an apikey has no money or reach limit, don’t sleep, just replace it with another apikey + # 3. all apikey reach limit, then use current sleep sleep_time = int(60 / self.key_len) time.sleep(sleep_time) print(e, f"will sleep {sleep_time} seconds") - self.rotate_key() - completion = openai.ChatCompletion.create( - model="gpt-3.5-turbo", - messages=[ - { - "role": "user", - "content": f"Please help me to translate,`{text}` to {self.language}, please return only translated content not include the origin text", - } - ], - ) - t_text = ( - completion["choices"][0] - .get("message") - .get("content") - .encode("utf8") - .decode() - ) + + t_text = self.get_translation(text) + + # todo: Determine whether to print according to the cli option print(t_text) return t_text