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( {"+++": 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_())