khulnasoft's picture
Upload 76 files
873d0cf verified
raw
history blame
5.37 kB
import os
import platform
import sys
import webbrowser
from PyQt5.QtWidgets import QApplication
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import Qt
from pynput import keyboard
def start(api=False):
"""
Starts the computer assistant application.
This function starts the computer assistant application, which includes parsing command-line arguments
to set the profile, initializing the graphical user interface, and starting the application event loop.
Command-line Arguments:
--profile (str): The profile to use for the application.
Raises:
ImportError: If the required modules or packages are not found.
Returns:
None
"""
try:
pass
except:
pass
# get --profile argument with library
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--profile", help="profile to use")
parser.add_argument("--api", help="Enable API mode", action="store_true")
parser.add_argument("--set_tts_provider", help="Set tts provider only")
parser.add_argument("--set_stt_provider", help="Set stt provider only")
parser.add_argument("--set_llm", help="Set llm model only")
args = parser.parse_args()
set_tts_provider = args.set_tts_provider
if set_tts_provider is not None:
from .utils.db import save_tts_model_settings
save_tts_model_settings(set_tts_provider)
return
set_stt_provider = args.set_stt_provider
if set_stt_provider is not None:
from .utils.db import save_stt_model_settings
save_stt_model_settings(set_stt_provider)
return
set_llm = args.set_llm
if set_llm is not None:
from .utils.db import save_model_settings
save_model_settings(set_llm)
return
profile = args.profile
api_arg = args.api
print("Profile:", profile)
if profile is not None:
from .utils.db import set_profile
set_profile(profile)
try:
from .utils.db import (
load_tts_model_settings,
load_stt_model_settings,
is_logo_active_setting_active,
load_logo_file_path,
)
except ImportError:
from utils.db import (
load_tts_model_settings,
load_stt_model_settings,
load_logo_file_path,
)
if load_tts_model_settings() != "openai":
from .audio.tts_providers.microsoft_local import preload_tts_microsoft_local
preload_tts_microsoft_local()
if load_stt_model_settings() != "openai":
from .audio.stt_providers.openai_whisper_local import (
preload_stt_openai_whisper_local,
)
preload_stt_openai_whisper_local()
try:
from .gpt_computer_agent import MainWindow
except ImportError:
from gpt_computer_agent import MainWindow
os.environ["QT_AUTO_SCREEN_SCALE_FACTOR"] = "1"
if api or api_arg:
print("API Enabled")
MainWindow.api_enabled = True
app = QApplication(sys.argv)
ex = MainWindow()
from PyQt5 import QtGui
from PyQt5 import QtCore
app_icon = QtGui.QIcon()
app_icon.addFile(load_logo_file_path(), QtCore.QSize(48, 48))
app.setWindowIcon(app_icon)
ex.the_app = app
# Create the tray
menu_icon = QtGui.QIcon()
menu_icon.addFile(load_logo_file_path(), QtCore.QSize(48, 48))
menu_active_icon = QtGui.QIcon()
menu_active_icon.addFile(load_logo_file_path(), QtCore.QSize(48, 48))
tray = QSystemTrayIcon()
tray.setIcon(menu_icon)
tray.setVisible(True)
ex.tray = tray
ex.tray_active_icon = menu_active_icon
ex.tray_icon = menu_icon
# Create the menu
menu = QMenu()
ex.the_tray = tray
show_menu = QAction("Show")
def show_menu_connect():
ex.setWindowState(Qt.WindowNoState)
show_menu.triggered.connect(show_menu_connect)
menu.addAction(show_menu)
hide_menu = QAction("Hide")
hide_menu.triggered.connect(ex.showMinimized)
menu.addAction(hide_menu)
menu.addSeparator()
if platform.system() == "Darwin":
the_text_of_screenshot_and_microphone = (
"Action: βŒƒ+βŒ₯+⌘+up Screenshot and Microphone"
)
else:
the_text_of_screenshot_and_microphone = (
"Action: ctrl+alt+windows+up Screenshot and Microphone"
)
screenshot_and_microphone = QAction(the_text_of_screenshot_and_microphone)
def screenshot_and_microphone_connect():
ex.setWindowState(Qt.WindowNoState)
ex.screenshot_and_microphone_button_action()
screenshot_listener = keyboard.GlobalHotKeys(
{"<ctrl>+<alt>+<cmd>+<up>": screenshot_and_microphone_connect}
)
screenshot_listener.start()
screenshot_and_microphone.triggered.connect(screenshot_and_microphone_connect)
menu.addAction(screenshot_and_microphone)
menu.addSeparator()
action = QAction("Open GitHub Issues")
action.triggered.connect(
lambda: webbrowser.open(
"https://github.com/khulnasoft/gpt-computer-agent/issues"
)
)
menu.addAction(action)
# Add a Quit option to the menu.
quit = QAction("Quit")
quit.triggered.connect(app.quit)
menu.addAction(quit)
# Add the menu to the tray
tray.setContextMenu(menu)
sys.exit(app.exec_())