try: from ..utils.db import * from ..agent.chat_history import clear_chat_history from ..llm_settings import llm_show_name, llm_settings from ..audio.tts import is_local_tts_available from ..audio.stt import is_local_stt_available except ImportError: from utils.db import * from llm_settings import llm_show_name, llm_settings from audio.tts import is_local_tts_available from audio.stt import is_local_stt_available from PyQt5.QtWidgets import ( QDialog, QVBoxLayout, QLabel, QLineEdit, QPushButton, QComboBox, ) from PyQt5.QtCore import Qt def llmsettings_popup(self): from ..gpt_computer_agent import the_main_window settings_dialog = QDialog() settings_dialog.setWindowTitle("Settings") settings_dialog.setWindowModality(Qt.ApplicationModal) settings_dialog.setLayout(QVBoxLayout()) api_key_label = QLabel("OpenAI API Key") settings_dialog.layout().addWidget(api_key_label) api_key_input = QLineEdit() api_key = load_api_key() api_key_input.setText(api_key) settings_dialog.layout().addWidget(api_key_input) save_button = QPushButton("Save") def save_api_key_(api_key): save_api_key(api_key) the_main_window.update_from_thread("Saved API Key") the_main_window.input_box.setPlaceholderText("Type here") settings_dialog.close() save_button.clicked.connect(lambda: save_api_key_(api_key_input.text())) settings_dialog.layout().addWidget(save_button) openai_url_label = QLabel("OpenAI Base URL") settings_dialog.layout().addWidget(openai_url_label) openai_url_input = QLineEdit() openai_url = load_openai_url() openai_url_input.setText(openai_url) settings_dialog.layout().addWidget(openai_url_input) def save_openai_url_(): openai_url = openai_url_input.text() save_openai_url(openai_url) the_main_window.update_from_thread("Saved OpenAI Base URL") the_main_window.input_box.setPlaceholderText("Type here") settings_dialog.close() openai_url_save_button = QPushButton("Save URL") openai_url_save_button.clicked.connect(save_openai_url_) settings_dialog.layout().addWidget(openai_url_save_button) groq_api_key_label = QLabel("Groq API Key") settings_dialog.layout().addWidget(groq_api_key_label) groq_api_key_input = QLineEdit() groq_api_key = load_groq_api_key() groq_api_key_input.setText(groq_api_key) settings_dialog.layout().addWidget(groq_api_key_input) groq_save_button = QPushButton("Save") def groq_save_api_key_(api_key): save_groq_api_key(api_key) the_main_window.update_from_thread("Saved Groq API Key") the_main_window.input_box.setPlaceholderText("Type here") settings_dialog.close() groq_save_button.clicked.connect( lambda: groq_save_api_key_(groq_api_key_input.text()) ) settings_dialog.layout().addWidget(groq_save_button) google_api_key_label = QLabel("Google Generative AI API Key") settings_dialog.layout().addWidget(google_api_key_label) google_api_key_input = QLineEdit() google_api_key = load_google_api_key() google_api_key_input.setText(google_api_key) settings_dialog.layout().addWidget(google_api_key_input) google_save_button = QPushButton("Save") def google_save_api_key_(api_key): save_google_api_key(api_key) the_main_window.update_from_thread("Saved Google API Key") the_main_window.input_box.setPlaceholderText("Type here") settings_dialog.close() google_save_button.clicked.connect( lambda: google_save_api_key_(google_api_key_input.text()) ) settings_dialog.layout().addWidget(google_save_button) def hide_openai(): api_key_label.hide() api_key_input.hide() openai_url_label.hide() openai_url_input.hide() save_button.hide() openai_url_save_button.hide() def hide_groq(): groq_api_key_label.hide() groq_api_key_input.hide() groq_save_button.hide() def hide_google(): google_api_key_label.hide() google_api_key_input.hide() google_save_button.hide() def show_openai(): api_key_label.show() api_key_input.show() openai_url_label.show() openai_url_input.show() save_button.show() openai_url_save_button.show() def show_groq(): groq_api_key_label.show() groq_api_key_input.show() groq_save_button.show() def show_google(): google_api_key_label.show() google_api_key_input.show() google_save_button.show() hide_openai() hide_groq() hide_google() model_label = QLabel("Model") model_select = QComboBox() model_select.addItems(list(llm_show_name.keys())) settings_dialog.layout().addWidget(model_label) settings_dialog.layout().addWidget(model_select) current_model = load_model_settings() for i, model in enumerate(llm_show_name.keys()): if llm_show_name[model] == current_model: model_select.setCurrentIndex(i) if llm_settings[llm_show_name[model_select.currentText()]]["provider"] == "openai": show_openai() if llm_settings[llm_show_name[model_select.currentText()]]["provider"] == "groq": show_groq() if llm_settings[llm_show_name[model_select.currentText()]]["provider"] == "google": show_google() if not llm_settings[llm_show_name[model_select.currentText()]]["vision"]: the_main_window.remove_screenshot_button() def on_model_change(): hide_openai() hide_groq() hide_google() the_save_string = llm_show_name[model_select.currentText()] save_model_settings(the_save_string) if ( llm_settings[llm_show_name[model_select.currentText()]]["provider"] == "openai" ): show_openai() openai_url_label.show() openai_url_input.show() openai_url_save_button.show() if llm_settings[llm_show_name[model_select.currentText()]]["vision"]: the_main_window.add_screenshot_button() else: the_main_window.remove_screenshot_button() if ( llm_settings[llm_show_name[model_select.currentText()]]["provider"] == "groq" ): show_groq() if ( llm_settings[llm_show_name[model_select.currentText()]]["provider"] == "google" ): show_google() model_select.currentIndexChanged.connect(on_model_change) # Add TTS model selection tts_model_label = QLabel("TTS Model") tts_model_select = QComboBox() tts_model_select.addItems(["openai", "microsoft_local"]) settings_dialog.layout().addWidget(tts_model_label) settings_dialog.layout().addWidget(tts_model_select) currently_tts_model = load_tts_model_settings() if currently_tts_model == "openai": tts_model_select.setCurrentIndex(0) show_openai() else: tts_model_select.setCurrentIndex(1) def on_tts_model_change(): if tts_model_select.currentText() == "openai": show_openai() save_tts_model_settings("openai") else: save_tts_model_settings("microsoft_local") if not is_local_tts_available(): # add an text to inform the user that local tts is not available information_text = QLabel( "Please install gpt-computer-agent[local_tts] to use local TTS" ) settings_dialog.layout().addWidget(information_text) tts_model_select.setEnabled(False) tts_model_select.currentIndexChanged.connect(on_tts_model_change) # Add STT model selection stt_model_label = QLabel("STT Model") stt_model_select = QComboBox() stt_model_select.addItems(["openai", "openai_whisper_local"]) settings_dialog.layout().addWidget(stt_model_label) settings_dialog.layout().addWidget(stt_model_select) currently_stt_model = load_stt_model_settings() if currently_stt_model == "openai": stt_model_select.setCurrentIndex(0) show_openai() else: stt_model_select.setCurrentIndex(1) def on_stt_model_change(): if stt_model_select.currentText() == "openai": show_openai() save_stt_model_settings("openai") else: save_stt_model_settings("openai_whisper_local") if not is_local_stt_available(): # add an text to inform the user that local stt is not available information_text = QLabel( "Please install gpt-computer-agent[local_stt] to use local STT" ) settings_dialog.layout().addWidget(information_text) stt_model_select.setEnabled(False) stt_model_select.currentIndexChanged.connect(on_stt_model_change) # Add an separator separator = QLabel("------------------------------------------------") settings_dialog.layout().addWidget(separator) # Add an powered by label powered_by_label = QLabel("Powered by KhulnaSoft <3") # Make label bold font = powered_by_label.font() font.setBold(True) powered_by_label.setFont(font) settings_dialog.layout().addWidget(powered_by_label) settings_dialog.exec_()