import openai import tkinter as tk import subprocess openai.api_key = " " def get_response(prompt): response = openai.Completion.create( engine="text-davinci-003", prompt=prompt, max_tokens=500, n=1, stop=None, temperature=0.4, ) message = response.get('choices')[0].get('text') return message def say_response(message): subprocess.Popen(['espeak-ng', '-v', voice.get(), '-m', '-s', speed.get(), '-z', message], stdout=subprocess.PIPE) def toggle_espeak(): global espeak_on espeak_on = not espeak_on if espeak_on: espeak_toggle_button.config(text='espeak Off') else: espeak_toggle_button.config(text='espeak On') def send_message(): message = entry_box.get("1.0",'end-1c') response = get_response(message) chat_history.config(state=tk.NORMAL) chat_history.insert(tk.END, "YOU: " + message + "\n\n") chat_history.config(foreground="#442265", font=("Verdana", 12 )) chat_history.insert(tk.END, "Assistant: " + response + "\n\n") chat_history.config(state=tk.DISABLED) chat_history.yview(tk.END) if espeak_on: say_response(response) entry_box.delete('1.0', tk.END) app = tk.Tk() app.title("ChatGPT") app.geometry("900x500") espeak_on = False voice = tk.StringVar() speed = tk.StringVar() espeak_toggle_button = tk.Button(app, text='espeak On', command=toggle_espeak) espeak_toggle_button.pack() voice_label = tk.Label(app, text="Select the voice") voice_label.pack() voice_options = ["fr+f2", "fr+m7", "en+f2", "en+m7", "nl+f2", "nl+m7", "de+f2", "de+m7"] voice = tk.StringVar(app) voice.set(voice_options[0]) voice_dropdown = tk.OptionMenu(app, voice, *voice_options) voice_dropdown.pack() speed_label = tk.Label(app, text="Select speed") speed_label.pack() speed = tk.StringVar(app) speed.set("150") speed_scale = tk.Scale(app, variable=speed, from_=80, to=400, orient=tk.HORIZONTAL) speed_scale.pack() chat_history = tk.Text(app, bd=1, bg='white', height=15, width=50) chat_history.pack() scrollbar = tk.Scrollbar(app) scrollbar.pack(side=tk.RIGHT, fill=tk.Y) chat_history.config(yscrollcommand=scrollbar.set) scrollbar.config(command=chat_history.yview, cursor="heart") entry_box = tk.Text(app, bd=0, bg="white", width="28", height="5", font="Arial") entry_box.pack() send_button = tk.Button(app, font="Arial", text="Send", width="10", height=5, bd=0, bg="blue", activebackground="#ffffff", command=send_message) send_button.pack() espeak_toggle_button.place(x=7,y=7) voice_label.place(x=110,y=12) voice_dropdown.place(x=220,y=6) speed_label.place(x=307,y=12) speed_scale.place(x=398,y=1) chat_history.place(x=6,y=50, height=352, width=874) scrollbar.place(x=880,y=50, height=353) entry_box.place(x=128, y=401, height=90, width=765) send_button.place(x=6, y=401, height=90) app.mainloop()