Spaces:
Build error
Build error
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_() | |