bilingual_book_maker/book_maker/translator/chatgptapi_translator.py
Frost Ming 6c72c29943
Minor improvements for loader and translator (#103)
* Minor improvements for loader and translator

* use rotate key

* fix: typo

---------

Co-authored-by: yihong0618 <zouzou0208@gmail.com>
2023-03-08 13:27:00 +08:00

63 lines
2.0 KiB
Python

import time
import openai
from .base_translator import Base
class ChatGPTAPI(Base):
def __init__(self, key, language, api_base=None):
super().__init__(key, language)
self.key_len = len(key.split(","))
if api_base:
openai.api_base = api_base
def rotate_key(self):
openai.api_key = next(self.keys)
def translate(self, text):
print(text)
self.rotate_key()
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()
)
except Exception as e:
# TIME LIMIT for open api please pay
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()
)
print(t_text)
return t_text