您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Optimize your experience on the chat.lmsys.org with the `lmsys-enhancer` Tampermonkey script.
当前为
// ==UserScript== // @name lmsys-enhancer // @namespace http://tampermonkey.net/ // @version 0.3 // @description Optimize your experience on the chat.lmsys.org with the `lmsys-enhancer` Tampermonkey script. // @author joshlee // @match https://chat.lmsys.org/ // @icon https://www.google.com/s2/favicons?sz=64&domain=lmsys.org // @grant none // @license MIT // ==/UserScript== const scriptConfig = { model: "gpt-4-turbo", wsUrl: "wss://chat.lmsys.org/queue/join", keepConnectionInterval: 120 * 1000, keepConnectionTimeout: 30 * 1000, autoCleanBlankDialogInterval: 5000, sessionHash: "", }; const originalSend = WebSocket.prototype.send; function removeUselessElements() { // Remove unnecessary notices and components document .querySelectorAll("#notice_markdown") .forEach((elem) => elem.remove()); let componentToRemove = document.querySelector("#component-93"); if (componentToRemove) componentToRemove.remove(); componentToRemove = document.querySelector("#component-83"); if (componentToRemove) componentToRemove.remove(); } function setMaxOutputToken(maxValue = 4096) { // Set the maximum token output to the desired value const maxOutputTokenInputs = document.querySelectorAll( "#component-100 input" ); if (maxOutputTokenInputs.length >= 2) { maxOutputTokenInputs[1].max = String(maxValue); maxOutputTokenInputs[0].value = String(maxValue); maxOutputTokenInputs[1].value = String(maxValue); const changeEvent = new Event("change", { bubbles: true, cancelable: true, }); maxOutputTokenInputs[1].dispatchEvent(changeEvent); } } function changeModel(model) { document.querySelector("#model_selector_row label").click(); document.querySelector(`li[data-value=${model}]`).dispatchEvent( new MouseEvent("mousedown", { view: window, bubbles: true, cancelable: true, }) ); } function hackWsSend(data) { const d = JSON.parse(data); // get session_hash if (d.session_hash) { scriptConfig.sessionHash = d.session_hash; console.log("🤗 session_hash:", d.session_hash); } originalSend.call(this, data); } function autoCleanBlankDialog() { setInterval(function () { var elements = document.querySelectorAll('div[data-testid="user"]'); elements.forEach(function (element) { if (element.textContent.trim() === "") { element.parentNode.removeChild(element); } }); }, scriptConfig.autoCleanBlankDialogInterval); } function keepConnection() { const createWebSocket = function () { const ws = new WebSocket(scriptConfig.wsUrl); ws.onmessage = function (event) { // console.log("Received:", event.data); const data = JSON.parse(event.data); if (data.msg === "send_hash") { ws.send( JSON.stringify({ fn_index: 39, session_hash: scriptConfig.sessionHash, }) ); } else if (data.msg === "send_data") { const sendData = { data: [null, scriptConfig.model, " "], event_data: null, fn_index: 39, session_hash: scriptConfig.sessionHash, }; ws.send(JSON.stringify(sendData)); } }; }; createWebSocket(); setInterval(createWebSocket, scriptConfig.keepConnectionInterval); } function optimizePage() { window.alert = null; WebSocket.prototype.send = hackWsSend; document.querySelectorAll(".tab-nav.scroll-hide button")[2].click(); removeUselessElements(); setMaxOutputToken(); changeModel(scriptConfig.model); autoCleanBlankDialog(); setTimeout(keepConnection, scriptConfig.keepConnectionTimeout); } (function main() { // Create a MutationObserver instance and pass the callback function const observer = new MutationObserver((mutations, observer) => { // Find the target element using its ID (you may adjust the selector according to your needs) const targetElement = document.getElementById("component-1"); if (targetElement) { // If the target element exists, execute the optimize function and stop observing optimizePage(); observer.disconnect(); // Stop observing } }); // Configuration for the observer: const observerConfig = { childList: true, subtree: true }; // Select the node that will be observed for mutations const targetNode = document.body; // You may specify a more specific parent node to reduce the scope of observation // Call the observer's observe method to start observing the target node observer.observe(targetNode, observerConfig); })();