Greasy Fork is available in English.

Keyboard shortcut for switching between Chat GPT 3.5 and Chat GPT 4

Switch between Chat GPT 3.5 and Chat GPT 4 for Superpower ChatGPT and OpenAI when Ctrl + Alt + Shift is pressed

// ==UserScript==
// @name         Keyboard shortcut for switching between Chat GPT 3.5 and Chat GPT 4
// @author       NWP
// @description  Switch between Chat GPT 3.5 and Chat GPT 4 for Superpower ChatGPT and OpenAI when Ctrl + Alt + Shift is pressed
// @namespace    https://greasyfork.org/users/877912
// @version      0.4
// @license      MIT
// @match        https://chat.openai.com/*
// @match        https://chatgpt.com/*
// @grant        none
// ==/UserScript==

(function () {
    'use strict';


    document.addEventListener('keydown', function (e) {
        if (e.ctrlKey && e.altKey && e.shiftKey) {
            try {
                const selectedModel_superpowerchatgpt = document.getElementById('navbar-selected-model-title');
                if (!selectedModel_superpowerchatgpt) {
                    throw new Error('Selected element not found for superpowerchatgpt');
                }
                if (selectedModel_superpowerchatgpt) toggleModel_superpowerchatgpt(selectedModel_superpowerchatgpt);
            } catch (error) {
                console.error('Error occurred in toggleModel_superpowerchatgpt:', error);
            }

            try {
                let selectedModel_openai = document.querySelector('span.text-token-text-secondary:not([class*=" "])');
                if (!selectedModel_openai) {
                    throw new Error('Selected element not found for OpenAI');
                }
                if (selectedModel_openai) toggleModel_OpenAI(selectedModel_openai.innerText);
            } catch (error) {
                console.error('Error occurred in toggleModel_OpenAI:', error);
            }
        }
    });


    function toggleModel_superpowerchatgpt(selectedModel_superpowerchatgpt) {

        const selectedModel_superpowerchatgptText = selectedModel_superpowerchatgpt.innerText;
        const switchButton_superpowerchatgpt = document.getElementById('navbar-model-switcher-button');

        if (!switchButton_superpowerchatgpt) {
            throw new Error('Switch button element not found');
        }

        if (selectedModel_superpowerchatgptText.includes('GPT-3.5')) {
            switchButton_superpowerchatgpt.click();
            const gpt4Option = document.getElementById('navbar-model-switcher-option-gpt-4o');
            if (!gpt4Option) {
                throw new Error('GPT-4 option element not found');
            }
            gpt4Option.click();
        } else {
            switchButton_superpowerchatgpt.click();
            const gpt35Option = document.getElementById('navbar-model-switcher-option-text-davinci-002-render-sha');
            if (!gpt35Option) {
                throw new Error('GPT-3.5 option element not found');
            }
            gpt35Option.click();
        }
    }
    function toggleModel_OpenAI(modelText) {
        try {
            clickDropdown();

            const observer = new MutationObserver((mutations, obs) => {
                try {
                    const dropdownContent = document.querySelector('div[data-radix-popper-content-wrapper=""]');
                    if (dropdownContent) {
                        dropdownContent.style.visibility = "hidden";
                        obs.disconnect();
                        selectModel(modelText.includes('3.5') ? 'GPT-4o' : 'GPT-3.5');
                    }
                } catch (error) {
                    console.error("Error in MutationObserver callback: ", error);
                }
            });

            observer.observe(document.body, { childList: true, subtree: true });
        } catch (error) {
            console.error("Error in toggleModel_OpenAI: ", error);
        }
    }

    function clickDropdown() {
        try {
            let selectedModel_openai = document.querySelector('span.text-token-text-secondary:not([class*=" "])');
            if (!selectedModel_openai) return console.log("Element not found");

            ['pointerdown', 'pointerout', 'pointerleave', 'mouseout', 'mouseleave'].forEach(eventType => {
                selectedModel_openai.dispatchEvent(new PointerEvent(eventType, {
                    bubbles: true,
                    cancelable: true,
                    view: window
                }));
            });
        } catch (error) {
            console.error("Error in clickDropdown: ", error);
        }
    }

    function selectModel(modelName) {
        try {
            let menuItems = Array.from(document.querySelectorAll('div[role="menuitem"]'));
            let targetItem = menuItems.find(item => item.textContent.includes(modelName));

            if (targetItem) targetItem.click();
            else console.log(`No elements with "${modelName}" found`);
        } catch (error) {
            console.error("Error in selectModel: ", error);
        }
    }
})();