import openai
import sys
from PyQt5.QtCore import \*
from PyQt5.QtGui import \*
from PyQt5.QtWidgets import \*
from PyQt5.QtWidgets import QApplication, QVBoxLayout, QWidget,QLabel,QLineEdit,QComboBox,QPushButton,QInputDialog, QLineEdit, QDialog
import time
import json
class EmailGenerator(QWidget):
def __init__(self):
super().__init__()
openai.api_key = "your-key"
# Create widgets
self.setWindowTitle("Email Generator by Open AI")
self.resize(800, 400)
self.recipient_label = QLabel("Recipient's name:")
self.recipient_edit = QLineEdit()
self.sender_label = QLabel("Sender's name:")
self.sender_edit = QLineEdit()
self.keywords_label = QLabel("Keywords:")
self.keywords_edit = QLineEdit()
self.topic_label = QLabel("Topic:")
self.topic_edit = QLineEdit()
self.language_label = QLabel("Language:")
self.language_combo = QComboBox()
#self.language_combo.addItem("Japanese")
self.language_combo.addItem("English")
self.language_combo.addItem("German")
self.max_tokens_button = QPushButton("Set max_tokens")
self.n_button = QPushButton("Set n")
self.stop_button = QPushButton("Set stop")
self.temperature_button = QPushButton("Set temperature")
self.api_key_button = QPushButton("Set API Key")
self.generate_button = QPushButton("Generate Email")
self.generate_button.setStyleSheet('background-color:green')
self.progressbar = QProgressBar()
self.progressbar.setStyleSheet('QProgressBar {border: 2px solid grey; border-radius:7px;padding:1px}')
self.te = QTextEdit(self)
self.clearText_button = QPushButton("Clear Text")
self.clearText_button.setStyleSheet('background-color:red')
self.result_label = QLabel()
#Create Events
self.max_tokens_button.clicked.connect(self.set_max_tokens)
self.n_button.clicked.connect(self.set_n)
self.stop_button.clicked.connect(self.set_stop)
self.temperature_button.clicked.connect(self.set_temperature)
self.api_key_button.clicked.connect(self.set_api_key)
# Create layout and add widgets
self.layout = QVBoxLayout()
self.layout.addWidget(self.recipient_label)
self.layout.addWidget(self.recipient_edit)
self.layout.addWidget(self.sender_label)
self.layout.addWidget(self.sender_edit)
self.layout.addWidget(self.keywords_label)
self.layout.addWidget(self.keywords_edit)
self.layout.addWidget(self.topic_label)
self.layout.addWidget(self.topic_edit)
self.layout.addWidget(self.language_label)
self.layout.addWidget(self.language_combo)
self.layout.addWidget(self.max_tokens_button)
self.layout.addWidget(self.n_button)
self.layout.addWidget(self.stop_button)
self.layout.addWidget(self.temperature_button)
self.layout.addWidget(self.api_key_button)
self.layout.addWidget(self.generate_button)
self.layout.addWidget(self.clearText_button)
self.layout.addWidget(self.progressbar)
self.layout.addWidget(self.te)
self.layout.addWidget(self.result_label)
self.setLayout(self.layout)
self.generate_button.clicked.connect(self.generate_email)
self.clearText_button.clicked.connect(self.clearText)
self.show()
# Set default values
self.max_tokens = 2048
self.n = 1
self.stop = ""
self.temperature = 0.9
self.api_key = ""
#self.result_label.setText(str(self.n) + self.stop)
def set_max_tokens(self):
# code to set max_tokens value
new_value, ok = QInputDialog.getInt(self, "Set max_tokens", "Enter new value for max_tokens:")
if ok:
self.max_tokens = new_value
pass
def set_n(self):
# code to set n value
new_value, ok = QInputDialog.getInt(self, "Set n", "Enter new value for n:")
if ok and new_value:
self.n = new_value
#self.result_label.setText(str(self.n))
pass
def set_stop(self):
# code to set stop value
new_value, ok = QInputDialog.getText(self, "Set stop", "Enter new value for stop:")
if ok:
self.stop = new_value
#self.result_label.setText(self.stop)
pass
def set_temperature(self):
# code to set temperature value
new_value, ok = QInputDialog.getDouble(self, "Set temperature", "Enter new value for temperature:")
if ok:
self.temperature = new_value
pass
def set_api_key(self):
# code to set api key value
new_value, ok = QInputDialog.getText(self, "Set API Key", "Enter new value for API Key:")
if ok:
self.api_key = new_value
pass
def clearText(self):
self.te.clear()
def generate_email(self):
#self.num_text = 0
recipient_name = self.recipient_edit.text()
sender_name = self.sender_edit.text()
keywords = self.keywords_edit.text()
topic = self.topic_edit.text()
language = self.language_combo.currentText()
num = self.n
if language == "German":
prompt = (f"Schreiben eine Email über {topic} zu {recipient_name} von {sender_name} mit den folgenden Schlüsselwörtern: {keywords}")
else:
prompt = (f"Write an email about {topic} addressed to {recipient_name} from {sender_name} using the following keywords: {keywords}")
response = openai.Completion.create(
engine="text-davinci-003",
prompt=prompt,
max_tokens=self.max_tokens,
n =num,
stop=self.stop,
temperature=self.temperature
)
val = response["usage"]["completion_tokens"]
for i in range(val):
#js = json.dumps(response, indent=6, sort_keys=True)
time.sleep(0.01)
self.progressbar.setValue(i+1)
email_text = response["choices"][0]["text"]
#self.te.append(js)
self.te.append(email_text + "\n")
self.progressbar.setValue(0)
#self.result_label.setText(str(completion_tokens))
# main method
if __name__ == '__main__':
# create pyqt5 app
App = QApplication(sys.argv)
# create the instance of EmailGenerator
email = EmailGenerator()
# start the app
sys.exit(App.exec())
I don't know where to and how to implement the thread to update the progress bar while the function "generate_email" is running