Gemini Auto Model Selector

Automatically select default model (thinking). You can choose default model in code

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램을 설치해야 합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name         Gemini Auto Model Selector
// @namespace    http://greasyfork.org/
// @version      1.4
// @description  Automatically select default model (thinking). You can choose default model in code
// @author       Bui Quoc Dung
// @match        https://gemini.google.com/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    const TARGET_KEYWORDS = ["Thinking", "Tư duy"];
    let isSwitching = false;
    let lastUrl = location.href;

    function checkAndSwitchModel() {
        if (isSwitching) return;

        const pickerContainer = document.querySelector('div[aria-label="Open mode picker"], div[aria-label="Mở bộ chọn chế độ"]');
        const pickerBtn = pickerContainer ? pickerContainer.querySelector('button') : null;

        if (!pickerBtn) {
            setTimeout(checkAndSwitchModel, 500);
            return;
        }

        const currentLabel = pickerBtn.innerText || "";
        if (TARGET_KEYWORDS.some(keyword => currentLabel.includes(keyword))) {
            return;
        }

        isSwitching = true;

        pickerBtn.click();

        setTimeout(() => {
            const menuItems = document.querySelectorAll('.mat-mdc-menu-item-text, div[role="menu"] button');
            let found = false;

            for (let item of menuItems) {
                const itemText = item.innerText;
                if (TARGET_KEYWORDS.some(keyword => itemText.includes(keyword))) {
                    const clickableItem = item.closest('button') || item;
                    clickableItem.click();
                    found = true;
                    break;
                }
            }

            if (!found) {
                document.body.click();
            }
            isSwitching = false;
        }, 500);
    }

    checkAndSwitchModel();


    setInterval(() => {
        if (location.href !== lastUrl) {
            lastUrl = location.href;
            setTimeout(checkAndSwitchModel, 1000);
        }
    }, 2000);

})();