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
This commit is contained in:
hleft 2023-03-10 20:50:49 +08:00 committed by GitHub
parent 1ef61a75c8
commit f566feabcb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -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, dont 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