Merge branch 'staging' into ffmpeg-videobg
| @@ -48,6 +48,7 @@ | |||
| 48 | "cookie-parser": "^1.4.6", | 48 | "cookie-parser": "^1.4.6", |
| 49 | "cookie-session": "^2.1.0", | 49 | "cookie-session": "^2.1.0", |
| 50 | "cors": "^2.8.5", | 50 | "cors": "^2.8.5", |
| 51 | "crc": "^4.3.2", | ||
| 51 | "csrf-sync": "^4.0.3", | 52 | "csrf-sync": "^4.0.3", |
| 52 | "diff-match-patch": "^1.0.5", | 53 | "diff-match-patch": "^1.0.5", |
| 53 | "dompurify": "^3.2.4", | 54 | "dompurify": "^3.2.4", |
| @@ -76,7 +77,6 @@ | |||
| 76 | "node-persist": "^4.0.4", | 77 | "node-persist": "^4.0.4", |
| 77 | "open": "^8.4.2", | 78 | "open": "^8.4.2", |
| 78 | "png-chunk-text": "^1.0.0", | 79 | "png-chunk-text": "^1.0.0", |
| 79 | "png-chunks-encode": "^1.0.0", | ||
| 80 | "png-chunks-extract": "^1.0.0", | 80 | "png-chunks-extract": "^1.0.0", |
| 81 | "proxy-agent": "^6.5.0", | 81 | "proxy-agent": "^6.5.0", |
| 82 | "rate-limiter-flexible": "^5.0.5", | 82 | "rate-limiter-flexible": "^5.0.5", |
| @@ -121,7 +121,6 @@ | |||
| 121 | "@types/node": "^18.19.80", | 121 | "@types/node": "^18.19.80", |
| 122 | "@types/node-persist": "^3.1.8", | 122 | "@types/node-persist": "^3.1.8", |
| 123 | "@types/png-chunk-text": "^1.0.3", | 123 | "@types/png-chunk-text": "^1.0.3", |
| 124 | "@types/png-chunks-encode": "^1.0.2", | ||
| 125 | "@types/png-chunks-extract": "^1.0.2", | 124 | "@types/png-chunks-extract": "^1.0.2", |
| 126 | "@types/response-time": "^2.3.8", | 125 | "@types/response-time": "^2.3.8", |
| 127 | "@types/select2": "^4.0.63", | 126 | "@types/select2": "^4.0.63", |
| @@ -2033,13 +2032,6 @@ | |||
| 2033 | "dev": true, | 2032 | "dev": true, |
| 2034 | "license": "MIT" | 2033 | "license": "MIT" |
| 2035 | }, | 2034 | }, |
| 2036 | "node_modules/@types/png-chunks-encode": { | ||
| 2037 | "version": "1.0.2", | ||
| 2038 | "resolved": "https://registry.npmjs.org/@types/png-chunks-encode/-/png-chunks-encode-1.0.2.tgz", | ||
| 2039 | "integrity": "sha512-Dxn0aXEcSg1wVeHjvNlygm/+fKBDzWMCdxJYhjGUTeefFW/jYxWcrg+W7ppLBfH44iJMqeVBHtHBwtYQUeYvgw==", | ||
| 2040 | "dev": true, | ||
| 2041 | "license": "MIT" | ||
| 2042 | }, | ||
| 2043 | "node_modules/@types/png-chunks-extract": { | 2035 | "node_modules/@types/png-chunks-extract": { |
| 2044 | "version": "1.0.2", | 2036 | "version": "1.0.2", |
| 2045 | "resolved": "https://registry.npmjs.org/@types/png-chunks-extract/-/png-chunks-extract-1.0.2.tgz", | 2037 | "resolved": "https://registry.npmjs.org/@types/png-chunks-extract/-/png-chunks-extract-1.0.2.tgz", |
| @@ -3542,6 +3534,23 @@ | |||
| 3542 | "node": ">= 0.10" | 3534 | "node": ">= 0.10" |
| 3543 | } | 3535 | } |
| 3544 | }, | 3536 | }, |
| 3537 | "node_modules/crc": { | ||
| 3538 | "version": "4.3.2", | ||
| 3539 | "resolved": "https://registry.npmjs.org/crc/-/crc-4.3.2.tgz", | ||
| 3540 | "integrity": "sha512-uGDHf4KLLh2zsHa8D8hIQ1H/HtFQhyHrc0uhHBcoKGol/Xnb+MPYfUMw7cvON6ze/GUESTudKayDcJC5HnJv1A==", | ||
| 3541 | "license": "MIT", | ||
| 3542 | "engines": { | ||
| 3543 | "node": ">=12" | ||
| 3544 | }, | ||
| 3545 | "peerDependencies": { | ||
| 3546 | "buffer": ">=6.0.3" | ||
| 3547 | }, | ||
| 3548 | "peerDependenciesMeta": { | ||
| 3549 | "buffer": { | ||
| 3550 | "optional": true | ||
| 3551 | } | ||
| 3552 | } | ||
| 3553 | }, | ||
| 3545 | "node_modules/crc-32": { | 3554 | "node_modules/crc-32": { |
| 3546 | "version": "0.3.0", | 3555 | "version": "0.3.0", |
| 3547 | "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-0.3.0.tgz", | 3556 | "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-0.3.0.tgz", |
| @@ -6686,16 +6695,6 @@ | |||
| 6686 | "integrity": "sha512-DEROKU3SkkLGWNMzru3xPVgxyd48UGuMSZvioErCure6yhOc/pRH2ZV+SEn7nmaf7WNf3NdIpH+UTrRdKyq9Lw==", | 6695 | "integrity": "sha512-DEROKU3SkkLGWNMzru3xPVgxyd48UGuMSZvioErCure6yhOc/pRH2ZV+SEn7nmaf7WNf3NdIpH+UTrRdKyq9Lw==", |
| 6687 | "license": "MIT" | 6696 | "license": "MIT" |
| 6688 | }, | 6697 | }, |
| 6689 | "node_modules/png-chunks-encode": { | ||
| 6690 | "version": "1.0.0", | ||
| 6691 | "resolved": "https://registry.npmjs.org/png-chunks-encode/-/png-chunks-encode-1.0.0.tgz", | ||
| 6692 | "integrity": "sha512-J1jcHgbQRsIIgx5wxW9UmCymV3wwn4qCCJl6KYgEU/yHCh/L2Mwq/nMOkRPtmV79TLxRZj5w3tH69pvygFkDqA==", | ||
| 6693 | "license": "MIT", | ||
| 6694 | "dependencies": { | ||
| 6695 | "crc-32": "^0.3.0", | ||
| 6696 | "sliced": "^1.0.1" | ||
| 6697 | } | ||
| 6698 | }, | ||
| 6699 | "node_modules/png-chunks-extract": { | 6698 | "node_modules/png-chunks-extract": { |
| 6700 | "version": "1.0.0", | 6699 | "version": "1.0.0", |
| 6701 | "resolved": "https://registry.npmjs.org/png-chunks-extract/-/png-chunks-extract-1.0.0.tgz", | 6700 | "resolved": "https://registry.npmjs.org/png-chunks-extract/-/png-chunks-extract-1.0.0.tgz", |
| @@ -7532,12 +7531,6 @@ | |||
| 7532 | "dev": true, | 7531 | "dev": true, |
| 7533 | "license": "ISC" | 7532 | "license": "ISC" |
| 7534 | }, | 7533 | }, |
| 7535 | "node_modules/sliced": { | ||
| 7536 | "version": "1.0.1", | ||
| 7537 | "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", | ||
| 7538 | "integrity": "sha512-VZBmZP8WU3sMOZm1bdgTadsQbcscK0UM8oKxKVBs4XAhUo2Xxzm/OFMGBkPusxw9xL3Uy8LrzEqGqJhclsr0yA==", | ||
| 7539 | "license": "MIT" | ||
| 7540 | }, | ||
| 7541 | "node_modules/slidetoggle": { | 7534 | "node_modules/slidetoggle": { |
| 7542 | "version": "4.0.0", | 7535 | "version": "4.0.0", |
| 7543 | "resolved": "https://registry.npmjs.org/slidetoggle/-/slidetoggle-4.0.0.tgz", | 7536 | "resolved": "https://registry.npmjs.org/slidetoggle/-/slidetoggle-4.0.0.tgz", |
| @@ -38,6 +38,7 @@ | |||
| 38 | "cookie-parser": "^1.4.6", | 38 | "cookie-parser": "^1.4.6", |
| 39 | "cookie-session": "^2.1.0", | 39 | "cookie-session": "^2.1.0", |
| 40 | "cors": "^2.8.5", | 40 | "cors": "^2.8.5", |
| 41 | "crc": "^4.3.2", | ||
| 41 | "csrf-sync": "^4.0.3", | 42 | "csrf-sync": "^4.0.3", |
| 42 | "diff-match-patch": "^1.0.5", | 43 | "diff-match-patch": "^1.0.5", |
| 43 | "dompurify": "^3.2.4", | 44 | "dompurify": "^3.2.4", |
| @@ -66,7 +67,6 @@ | |||
| 66 | "node-persist": "^4.0.4", | 67 | "node-persist": "^4.0.4", |
| 67 | "open": "^8.4.2", | 68 | "open": "^8.4.2", |
| 68 | "png-chunk-text": "^1.0.0", | 69 | "png-chunk-text": "^1.0.0", |
| 69 | "png-chunks-encode": "^1.0.0", | ||
| 70 | "png-chunks-extract": "^1.0.0", | 70 | "png-chunks-extract": "^1.0.0", |
| 71 | "proxy-agent": "^6.5.0", | 71 | "proxy-agent": "^6.5.0", |
| 72 | "rate-limiter-flexible": "^5.0.5", | 72 | "rate-limiter-flexible": "^5.0.5", |
| @@ -151,7 +151,6 @@ | |||
| 151 | "@types/node": "^18.19.80", | 151 | "@types/node": "^18.19.80", |
| 152 | "@types/node-persist": "^3.1.8", | 152 | "@types/node-persist": "^3.1.8", |
| 153 | "@types/png-chunk-text": "^1.0.3", | 153 | "@types/png-chunk-text": "^1.0.3", |
| 154 | "@types/png-chunks-encode": "^1.0.2", | ||
| 155 | "@types/png-chunks-extract": "^1.0.2", | 154 | "@types/png-chunks-extract": "^1.0.2", |
| 156 | "@types/response-time": "^2.3.8", | 155 | "@types/response-time": "^2.3.8", |
| 157 | "@types/select2": "^4.0.63", | 156 | "@types/select2": "^4.0.63", |
| @@ -2432,7 +2432,7 @@ | |||
| 2432 | </div> | 2432 | </div> |
| 2433 | <div class="flex1"> | 2433 | <div class="flex1"> |
| 2434 | <h4 data-i18n="Server url">Server URL</h4> | 2434 | <h4 data-i18n="Server url">Server URL</h4> |
| 2435 | <small data-i18n="Example: 127.0.0.1:5000">Example: http://127.0.0.1:5000</small> | 2435 | <small data-i18n="Example: http://127.0.0.1:5000">Example: http://127.0.0.1:5000</small> |
| 2436 | <input id="generic_api_url_text" name="generic_api_url" class="text_pole wide100p" value="" autocomplete="off" data-server-history="generic"> | 2436 | <input id="generic_api_url_text" name="generic_api_url" class="text_pole wide100p" value="" autocomplete="off" data-server-history="generic"> |
| 2437 | </div> | 2437 | </div> |
| 2438 | <datalist id="generic_model_fill"></datalist> | 2438 | <datalist id="generic_model_fill"></datalist> |
| @@ -2461,7 +2461,7 @@ | |||
| 2461 | </div> | 2461 | </div> |
| 2462 | <div class="flex1"> | 2462 | <div class="flex1"> |
| 2463 | <h4 data-i18n="Server url">Server URL</h4> | 2463 | <h4 data-i18n="Server url">Server URL</h4> |
| 2464 | <small data-i18n="Example: 127.0.0.1:5000">Example: http://127.0.0.1:5000</small> | 2464 | <small data-i18n="Example: http://127.0.0.1:5000">Example: http://127.0.0.1:5000</small> |
| 2465 | <input id="textgenerationwebui_api_url_text" name="textgenerationwebui_api_url" class="text_pole wide100p" value="" autocomplete="off" data-server-history="ooba_blocking"> | 2465 | <input id="textgenerationwebui_api_url_text" name="textgenerationwebui_api_url" class="text_pole wide100p" value="" autocomplete="off" data-server-history="ooba_blocking"> |
| 2466 | </div> | 2466 | </div> |
| 2467 | <input id="custom_model_textgenerationwebui" class="text_pole wide100p" placeholder="Custom model (optional)" data-i18n="[placeholder]Custom model (optional)" type="text"> | 2467 | <input id="custom_model_textgenerationwebui" class="text_pole wide100p" placeholder="Custom model (optional)" data-i18n="[placeholder]Custom model (optional)" type="text"> |
| @@ -2534,7 +2534,7 @@ | |||
| 2534 | </div> | 2534 | </div> |
| 2535 | <div class="flex1"> | 2535 | <div class="flex1"> |
| 2536 | <h4 data-i18n="API url">API URL</h4> | 2536 | <h4 data-i18n="API url">API URL</h4> |
| 2537 | <small data-i18n="Example: 127.0.0.1:8000">Example: http://127.0.0.1:8000</small> | 2537 | <small data-i18n="Example: http://127.0.0.1:8000">Example: http://127.0.0.1:8000</small> |
| 2538 | <input id="vllm_api_url_text" class="text_pole wide100p" value="" autocomplete="off" data-server-history="vllm"> | 2538 | <input id="vllm_api_url_text" class="text_pole wide100p" value="" autocomplete="off" data-server-history="vllm"> |
| 2539 | </div> | 2539 | </div> |
| 2540 | <div> | 2540 | <div> |
| @@ -2580,7 +2580,7 @@ | |||
| 2580 | </div> | 2580 | </div> |
| 2581 | <div class="flex1"> | 2581 | <div class="flex1"> |
| 2582 | <h4 data-i18n="API url">API URL</h4> | 2582 | <h4 data-i18n="API url">API URL</h4> |
| 2583 | <small data-i18n="Example: 127.0.0.1:5000">Example: http://127.0.0.1:5000</small> | 2583 | <small data-i18n="Example: http://127.0.0.1:5000">Example: http://127.0.0.1:5000</small> |
| 2584 | <input id="aphrodite_api_url_text" class="text_pole wide100p" value="" autocomplete="off" data-server-history="aphrodite"> | 2584 | <input id="aphrodite_api_url_text" class="text_pole wide100p" value="" autocomplete="off" data-server-history="aphrodite"> |
| 2585 | </div> | 2585 | </div> |
| 2586 | <div> | 2586 | <div> |
| @@ -2609,7 +2609,7 @@ | |||
| 2609 | </div> | 2609 | </div> |
| 2610 | <div class="flex1"> | 2610 | <div class="flex1"> |
| 2611 | <h4 data-i18n="API url">API URL</h4> | 2611 | <h4 data-i18n="API url">API URL</h4> |
| 2612 | <small data-i18n="Example: 127.0.0.1:8080">Example: http://127.0.0.1:8080</small> | 2612 | <small data-i18n="Example: http://127.0.0.1:8080">Example: http://127.0.0.1:8080</small> |
| 2613 | <input id="llamacpp_api_url_text" class="text_pole wide100p" value="" autocomplete="off" data-server-history="llamacpp"> | 2613 | <input id="llamacpp_api_url_text" class="text_pole wide100p" value="" autocomplete="off" data-server-history="llamacpp"> |
| 2614 | </div> | 2614 | </div> |
| 2615 | </div> | 2615 | </div> |
| @@ -2621,7 +2621,7 @@ | |||
| 2621 | </div> | 2621 | </div> |
| 2622 | <div class="flex1"> | 2622 | <div class="flex1"> |
| 2623 | <h4 data-i18n="API url">API URL</h4> | 2623 | <h4 data-i18n="API url">API URL</h4> |
| 2624 | <small data-i18n="Example: 127.0.0.1:11434">Example: http://127.0.0.1:11434</small> | 2624 | <small data-i18n="Example: http://127.0.0.1:11434">Example: http://127.0.0.1:11434</small> |
| 2625 | <input id="ollama_api_url_text" class="text_pole wide100p" value="" autocomplete="off" data-server-history="ollama"> | 2625 | <input id="ollama_api_url_text" class="text_pole wide100p" value="" autocomplete="off" data-server-history="ollama"> |
| 2626 | </div> | 2626 | </div> |
| 2627 | <div class="flex1"> | 2627 | <div class="flex1"> |
| @@ -2656,7 +2656,7 @@ | |||
| 2656 | </div> | 2656 | </div> |
| 2657 | <div class="flex1"> | 2657 | <div class="flex1"> |
| 2658 | <h4 data-i18n="API url">API URL</h4> | 2658 | <h4 data-i18n="API url">API URL</h4> |
| 2659 | <small data-i18n="Example: 127.0.0.1:5000">Example: http://127.0.0.1:5000</small> | 2659 | <small data-i18n="Example: http://127.0.0.1:5000">Example: http://127.0.0.1:5000</small> |
| 2660 | <input id="tabby_api_url_text" class="text_pole wide100p" value="" autocomplete="off" data-server-history="tabby"> | 2660 | <input id="tabby_api_url_text" class="text_pole wide100p" value="" autocomplete="off" data-server-history="tabby"> |
| 2661 | </div> | 2661 | </div> |
| 2662 | <div class="flex1"> | 2662 | <div class="flex1"> |
| @@ -2708,7 +2708,7 @@ | |||
| 2708 | </div> | 2708 | </div> |
| 2709 | <div class="flex1"> | 2709 | <div class="flex1"> |
| 2710 | <h4 data-i18n="API url">API URL</h4> | 2710 | <h4 data-i18n="API url">API URL</h4> |
| 2711 | <small data-i18n="Example: 127.0.0.1:5001">Example: http://127.0.0.1:5001</small> | 2711 | <small data-i18n="Example: http://127.0.0.1:5001">Example: http://127.0.0.1:5001</small> |
| 2712 | <input id="koboldcpp_api_url_text" class="text_pole wide100p" value="" autocomplete="off" data-server-history="koboldcpp"> | 2712 | <input id="koboldcpp_api_url_text" class="text_pole wide100p" value="" autocomplete="off" data-server-history="koboldcpp"> |
| 2713 | </div> | 2713 | </div> |
| 2714 | </div> | 2714 | </div> |
| @@ -3140,6 +3140,7 @@ | |||
| 3140 | <option value="gemma-3-27b-it">Gemma 3 27B</option> | 3140 | <option value="gemma-3-27b-it">Gemma 3 27B</option> |
| 3141 | </optgroup> | 3141 | </optgroup> |
| 3142 | <optgroup label="Subversions"> | 3142 | <optgroup label="Subversions"> |
| 3143 | <option value="gemini-2.5-pro-preview-03-25">Gemini 2.5 Pro Preview 2025-03-25</option> | ||
| 3143 | <option value="gemini-2.5-pro-exp-03-25">Gemini 2.5 Pro Experimental 2025-03-25</option> | 3144 | <option value="gemini-2.5-pro-exp-03-25">Gemini 2.5 Pro Experimental 2025-03-25</option> |
| 3144 | <option value="gemini-2.0-pro-exp">Gemini 2.0 Pro Experimental</option> | 3145 | <option value="gemini-2.0-pro-exp">Gemini 2.0 Pro Experimental</option> |
| 3145 | <option value="gemini-2.0-pro-exp-02-05">Gemini 2.0 Pro Experimental 2025-02-05</option> | 3146 | <option value="gemini-2.0-pro-exp-02-05">Gemini 2.0 Pro Experimental 2025-02-05</option> |
| @@ -3248,28 +3249,29 @@ | |||
| 3248 | <option value="qwen-2.5-32b">qwen-2.5-32b</option> | 3249 | <option value="qwen-2.5-32b">qwen-2.5-32b</option> |
| 3249 | <option value="qwen-2.5-coder-32b">qwen-2.5-coder-32b</option> | 3250 | <option value="qwen-2.5-coder-32b">qwen-2.5-coder-32b</option> |
| 3250 | </optgroup> | 3251 | </optgroup> |
| 3251 | <optgroup label="DeepSeek / Alibaba Cloud"> | 3252 | <optgroup label="DeepSeek"> |
| 3252 | <option value="deepseek-r1-distill-qwen-32b">deepseek-r1-distill-qwen-32b</option> | 3253 | <option value="deepseek-r1-distill-qwen-32b">deepseek-r1-distill-qwen-32b</option> |
| 3253 | </optgroup> | ||
| 3254 | <optgroup label="DeepSeek / Meta"> | ||
| 3255 | <option value="deepseek-r1-distill-llama-70b">deepseek-r1-distill-llama-70b</option> | 3254 | <option value="deepseek-r1-distill-llama-70b">deepseek-r1-distill-llama-70b</option> |
| 3256 | </optgroup> | 3255 | </optgroup> |
| 3257 | <optgroup label="Google"> | 3256 | <optgroup label="Google"> |
| 3258 | <option value="gemma2-9b-it">gemma2-9b-it</option> | 3257 | <option value="gemma2-9b-it">gemma2-9b-it</option> |
| 3259 | </optgroup> | 3258 | </optgroup> |
| 3260 | <optgroup label="Meta"> | 3259 | <optgroup label="Meta"> |
| 3261 | <option value="llama-3.1-8b-instant">llama-3.1-8b-instant </option> | 3260 | <option value="meta-llama/llama-4-scout-17b-16e-instruct">meta-llama/llama-4-scout-17b-16e-instruct</option> |
| 3261 | <option value="meta-llama/llama-4-maverick-17b-128e-instruct">meta-llama/llama-4-maverick-17b-128e-instruct</option> | ||
| 3262 | <option value="llama-3.1-8b-instant">llama-3.1-8b-instant</option> | ||
| 3262 | <option value="llama-3.2-11b-vision-preview">llama-3.2-11b-vision-preview </option> | 3263 | <option value="llama-3.2-11b-vision-preview">llama-3.2-11b-vision-preview </option> |
| 3263 | <option value="llama-3.2-1b-preview">llama-3.2-1b-preview </option> | 3264 | <option value="llama-3.2-1b-preview">llama-3.2-1b-preview </option> |
| 3264 | <option value="llama-3.2-3b-preview">llama-3.2-3b-preview </option> | 3265 | <option value="llama-3.2-3b-preview">llama-3.2-3b-preview </option> |
| 3265 | <option value="llama-3.2-90b-vision-preview">llama-3.2-90b-vision-preview </option> | 3266 | <option value="llama-3.2-90b-vision-preview">llama-3.2-90b-vision-preview </option> |
| 3266 | <option value="llama-3.3-70b-specdec">llama-3.3-70b-specdec </option> | 3267 | <option value="llama-3.3-70b-specdec">llama-3.3-70b-specdec</option> |
| 3267 | <option value="llama-3.3-70b-versatile">llama-3.3-70b-versatile </option> | 3268 | <option value="llama-3.3-70b-versatile">llama-3.3-70b-versatile </option> |
| 3268 | <option value="llama-guard-3-8b">llama-guard-3-8b </option> | 3269 | <option value="llama-guard-3-8b">llama-guard-3-8b</option> |
| 3269 | <option value="llama3-70b-8192">llama3-70b-8192 </option> | 3270 | <option value="llama3-70b-8192">llama3-70b-8192</option> |
| 3270 | <option value="llama3-8b-8192">llama3-8b-8192 </option> | 3271 | <option value="llama3-8b-8192">llama3-8b-8192</option> |
| 3271 | </optgroup> | 3272 | </optgroup> |
| 3272 | <optgroup label="Mistral AI"> | 3273 | <optgroup label="Mistral AI"> |
| 3274 | <option value="mistral-saba-24b">mistral-saba-24b</option> | ||
| 3273 | <option value="mixtral-8x7b-32768">mixtral-8x7b-32768</option> | 3275 | <option value="mixtral-8x7b-32768">mixtral-8x7b-32768</option> |
| 3274 | </optgroup> | 3276 | </optgroup> |
| 3275 | </select> | 3277 | </select> |
| @@ -6450,7 +6452,7 @@ | |||
| 6450 | <div class="mes_text"></div> | 6452 | <div class="mes_text"></div> |
| 6451 | <div class="mes_img_container"> | 6453 | <div class="mes_img_container"> |
| 6452 | <div class="mes_img_controls"> | 6454 | <div class="mes_img_controls"> |
| 6453 | <div title="Enlarge" class="right_menu_button fa-lg fa-solid fa-magnifying-glass mes_img_enlarge" data-i18n="[title]Enlarge"></div> | 6455 | <div title="Expand and zoom" class="right_menu_button fa-lg fa-solid fa-magnifying-glass mes_img_enlarge" data-i18n="[title]Expand and zoom"></div> |
| 6454 | <div title="Caption" class="right_menu_button fa-lg fa-solid fa-envelope-open-text mes_img_caption" data-i18n="[title]Caption"></div> | 6456 | <div title="Caption" class="right_menu_button fa-lg fa-solid fa-envelope-open-text mes_img_caption" data-i18n="[title]Caption"></div> |
| 6455 | <div title="Delete" class="right_menu_button fa-lg fa-solid fa-trash-can mes_img_delete" data-i18n="[title]Delete"></div> | 6457 | <div title="Delete" class="right_menu_button fa-lg fa-solid fa-trash-can mes_img_delete" data-i18n="[title]Delete"></div> |
| 6456 | </div> | 6458 | </div> |
| @@ -318,23 +318,23 @@ | |||
| 318 | "flag": "وضع علامة", | 318 | "flag": "وضع علامة", |
| 319 | "API key (optional)": "مفتاح API (اختياري)", | 319 | "API key (optional)": "مفتاح API (اختياري)", |
| 320 | "Server url": "رابط الخادم", | 320 | "Server url": "رابط الخادم", |
| 321 | "Example: 127.0.0.1:5000": "مثال: 127.0.0.1:5000", | 321 | "Example: http://127.0.0.1:5000": "مثال: http://127.0.0.1:5000", |
| 322 | "Custom model (optional)": "نموذج مخصص (اختياري)", | 322 | "Custom model (optional)": "نموذج مخصص (اختياري)", |
| 323 | "vllm-project/vllm": "vllm-project/vllm (وضع غلاف OpenAI API)", | 323 | "vllm-project/vllm": "vllm-project/vllm (وضع غلاف OpenAI API)", |
| 324 | "vLLM API key": "مفتاح واجهة برمجة التطبيقات vLLM", | 324 | "vLLM API key": "مفتاح واجهة برمجة التطبيقات vLLM", |
| 325 | "Example: 127.0.0.1:8000": "مثال: http://127.0.0.1:8000", | 325 | "Example: http://127.0.0.1:8000": "مثال: http://127.0.0.1:8000", |
| 326 | "vLLM Model": "نموذج vLLM", | 326 | "vLLM Model": "نموذج vLLM", |
| 327 | "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (وضع التغليف لواجهة برمجة التطبيقات OpenAI)", | 327 | "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (وضع التغليف لواجهة برمجة التطبيقات OpenAI)", |
| 328 | "Aphrodite API key": "مفتاح واجهة برمجة التطبيقات Aphrodite", | 328 | "Aphrodite API key": "مفتاح واجهة برمجة التطبيقات Aphrodite", |
| 329 | "Aphrodite Model": "نموذج أفروديت", | 329 | "Aphrodite Model": "نموذج أفروديت", |
| 330 | "ggerganov/llama.cpp": "ggerganov/llama.cpp (خادم إخراج)", | 330 | "ggerganov/llama.cpp": "ggerganov/llama.cpp (خادم إخراج)", |
| 331 | "Example: 127.0.0.1:8080": "مثال: 127.0.0.1:8080", | 331 | "Example: http://127.0.0.1:8080": "مثال: http://127.0.0.1:8080", |
| 332 | "Example: 127.0.0.1:11434": "مثال: 127.0.0.1:11434", | 332 | "Example: http://127.0.0.1:11434": "مثال: http://127.0.0.1:11434", |
| 333 | "Ollama Model": "نموذج Ollama", | 333 | "Ollama Model": "نموذج Ollama", |
| 334 | "Download": "تحميل", | 334 | "Download": "تحميل", |
| 335 | "Tabby API key": "مفتاح API لـ Tabby", | 335 | "Tabby API key": "مفتاح API لـ Tabby", |
| 336 | "koboldcpp API key (optional)": "مفتاح koboldcpp API (اختياري)", | 336 | "koboldcpp API key (optional)": "مفتاح koboldcpp API (اختياري)", |
| 337 | "Example: 127.0.0.1:5001": "مثال: 127.0.0.1:5001", | 337 | "Example: http://127.0.0.1:5001": "مثال: http://127.0.0.1:5001", |
| 338 | "Authorize": "تفويض", | 338 | "Authorize": "تفويض", |
| 339 | "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "احصل على رمز واجهة برمجة التطبيقات الخاص بك لموزع الاتصالات باستخدام تدفق OAuth. سيتم توجيهك إلى openrouter.ai", | 339 | "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "احصل على رمز واجهة برمجة التطبيقات الخاص بك لموزع الاتصالات باستخدام تدفق OAuth. سيتم توجيهك إلى openrouter.ai", |
| 340 | "Bypass status check": "تجاوز فحص الحالة", | 340 | "Bypass status check": "تجاوز فحص الحالة", |
| @@ -318,23 +318,23 @@ | |||
| 318 | "flag": "Flagge", | 318 | "flag": "Flagge", |
| 319 | "API key (optional)": "API-Schlüssel (optional)", | 319 | "API key (optional)": "API-Schlüssel (optional)", |
| 320 | "Server url": "Server-URL", | 320 | "Server url": "Server-URL", |
| 321 | "Example: 127.0.0.1:5000": "Beispiel: 127.0.0.1:5000", | 321 | "Example: http://127.0.0.1:5000": "Beispiel: http://127.0.0.1:5000", |
| 322 | "Custom model (optional)": "Benutzerdefiniertes Modell (optional)", | 322 | "Custom model (optional)": "Benutzerdefiniertes Modell (optional)", |
| 323 | "vllm-project/vllm": "vllm-project/vllm (OpenAI API-Wrappermodus)", | 323 | "vllm-project/vllm": "vllm-project/vllm (OpenAI API-Wrappermodus)", |
| 324 | "vLLM API key": "vLLM-API-Schlüssel", | 324 | "vLLM API key": "vLLM-API-Schlüssel", |
| 325 | "Example: 127.0.0.1:8000": "Beispiel: http://127.0.0.1:8000", | 325 | "Example: http://127.0.0.1:8000": "Beispiel: http://127.0.0.1:8000", |
| 326 | "vLLM Model": "vLLM-Modell", | 326 | "vLLM Model": "vLLM-Modell", |
| 327 | "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (Wrappermodus für OpenAI API)", | 327 | "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (Wrappermodus für OpenAI API)", |
| 328 | "Aphrodite API key": "Aphrodite API-Schlüssel", | 328 | "Aphrodite API key": "Aphrodite API-Schlüssel", |
| 329 | "Aphrodite Model": "Aphrodite-Modell", | 329 | "Aphrodite Model": "Aphrodite-Modell", |
| 330 | "ggerganov/llama.cpp": "ggerganov/llama.cpp (Output-Server)", | 330 | "ggerganov/llama.cpp": "ggerganov/llama.cpp (Output-Server)", |
| 331 | "Example: 127.0.0.1:8080": "Beispiel: 127.0.0.1:8080", | 331 | "Example: http://127.0.0.1:8080": "Beispiel: http://127.0.0.1:8080", |
| 332 | "Example: 127.0.0.1:11434": "Beispiel: 127.0.0.1:11434", | 332 | "Example: http://127.0.0.1:11434": "Beispiel: http://127.0.0.1:11434", |
| 333 | "Ollama Model": "Ollama-Modell", | 333 | "Ollama Model": "Ollama-Modell", |
| 334 | "Download": "Herunterladen", | 334 | "Download": "Herunterladen", |
| 335 | "Tabby API key": "Tabby API-Schlüssel", | 335 | "Tabby API key": "Tabby API-Schlüssel", |
| 336 | "koboldcpp API key (optional)": "koboldcpp API-Schlüssel (optional)", | 336 | "koboldcpp API key (optional)": "koboldcpp API-Schlüssel (optional)", |
| 337 | "Example: 127.0.0.1:5001": "Beispiel: 127.0.0.1:5001", | 337 | "Example: http://127.0.0.1:5001": "Beispiel: http://127.0.0.1:5001", |
| 338 | "Authorize": "Autorisieren", | 338 | "Authorize": "Autorisieren", |
| 339 | "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "Hole dein OpenRouter-API-Token mit OAuth-Fluss. Du wirst zu openrouter.ai weitergeleitet", | 339 | "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "Hole dein OpenRouter-API-Token mit OAuth-Fluss. Du wirst zu openrouter.ai weitergeleitet", |
| 340 | "Bypass status check": "Umgehe Statusüberprüfung", | 340 | "Bypass status check": "Umgehe Statusüberprüfung", |
| @@ -318,23 +318,23 @@ | |||
| 318 | "flag": "bandera", | 318 | "flag": "bandera", |
| 319 | "API key (optional)": "Clave API (opcional)", | 319 | "API key (optional)": "Clave API (opcional)", |
| 320 | "Server url": "URL del servidor", | 320 | "Server url": "URL del servidor", |
| 321 | "Example: 127.0.0.1:5000": "Ejemplo: 127.0.0.1:5000", | 321 | "Example: http://127.0.0.1:5000": "Ejemplo: http://127.0.0.1:5000", |
| 322 | "Custom model (optional)": "Modelo personalizado (opcional)", | 322 | "Custom model (optional)": "Modelo personalizado (opcional)", |
| 323 | "vllm-project/vllm": "vllm-project/vllm (modo contenedor de API OpenAI)", | 323 | "vllm-project/vllm": "vllm-project/vllm (modo contenedor de API OpenAI)", |
| 324 | "vLLM API key": "Clave API vLLM", | 324 | "vLLM API key": "Clave API vLLM", |
| 325 | "Example: 127.0.0.1:8000": "Ejemplo: http://127.0.0.1:8000", | 325 | "Example: http://127.0.0.1:8000": "Ejemplo: http://127.0.0.1:8000", |
| 326 | "vLLM Model": "Modelo vLLM", | 326 | "vLLM Model": "Modelo vLLM", |
| 327 | "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (Modo envolvente para API de OpenAI)", | 327 | "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (Modo envolvente para API de OpenAI)", |
| 328 | "Aphrodite API key": "Clave de API de Aphrodite", | 328 | "Aphrodite API key": "Clave de API de Aphrodite", |
| 329 | "Aphrodite Model": "Modelo Afrodita", | 329 | "Aphrodite Model": "Modelo Afrodita", |
| 330 | "ggerganov/llama.cpp": "ggerganov/llama.cpp (Servidor de salida)", | 330 | "ggerganov/llama.cpp": "ggerganov/llama.cpp (Servidor de salida)", |
| 331 | "Example: 127.0.0.1:8080": "Ejemplo: 127.0.0.1:8080", | 331 | "Example: http://127.0.0.1:8080": "Ejemplo: http://127.0.0.1:8080", |
| 332 | "Example: 127.0.0.1:11434": "Ejemplo: 127.0.0.1:11434", | 332 | "Example: http://127.0.0.1:11434": "Ejemplo: http://127.0.0.1:11434", |
| 333 | "Ollama Model": "Modelo Ollama", | 333 | "Ollama Model": "Modelo Ollama", |
| 334 | "Download": "Descargar", | 334 | "Download": "Descargar", |
| 335 | "Tabby API key": "Clave API de Tabby", | 335 | "Tabby API key": "Clave API de Tabby", |
| 336 | "koboldcpp API key (optional)": "Clave API de koboldcpp (opcional)", | 336 | "koboldcpp API key (optional)": "Clave API de koboldcpp (opcional)", |
| 337 | "Example: 127.0.0.1:5001": "Ejemplo: 127.0.0.1:5001", | 337 | "Example: http://127.0.0.1:5001": "Ejemplo: http://127.0.0.1:5001", |
| 338 | "Authorize": "Autorizar", | 338 | "Authorize": "Autorizar", |
| 339 | "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "Obtenga su token de API de OpenRouter utilizando el flujo OAuth. Será redirigido a openrouter.ai", | 339 | "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "Obtenga su token de API de OpenRouter utilizando el flujo OAuth. Será redirigido a openrouter.ai", |
| 340 | "Bypass status check": "Saltar la verificación del estado", | 340 | "Bypass status check": "Saltar la verificación del estado", |
| @@ -301,23 +301,23 @@ | |||
| 301 | "flag": "fanion", | 301 | "flag": "fanion", |
| 302 | "API key (optional)": "Clé API (optionnelle)", | 302 | "API key (optional)": "Clé API (optionnelle)", |
| 303 | "Server url": "URL du serveur", | 303 | "Server url": "URL du serveur", |
| 304 | "Example: 127.0.0.1:5000": "Exemple : 127.0.0.1:5000", | 304 | "Example: http://127.0.0.1:5000": "Exemple : http://127.0.0.1:5000", |
| 305 | "Custom model (optional)": "Modèle personnalisé (optionnel)", | 305 | "Custom model (optional)": "Modèle personnalisé (optionnel)", |
| 306 | "vllm-project/vllm": "vllm-project/vllm (mode wrapper de l'API OpenAI)", | 306 | "vllm-project/vllm": "vllm-project/vllm (mode wrapper de l'API OpenAI)", |
| 307 | "vLLM API key": "Clé API vLLM", | 307 | "vLLM API key": "Clé API vLLM", |
| 308 | "Example: 127.0.0.1:8000": "Exemple : http://127.0.0.1:8000", | 308 | "Example: http://127.0.0.1:8000": "Exemple : http://127.0.0.1:8000", |
| 309 | "vLLM Model": "Modèle vLLM", | 309 | "vLLM Model": "Modèle vLLM", |
| 310 | "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (mode wrapper pour l'API OpenAI)", | 310 | "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (mode wrapper pour l'API OpenAI)", |
| 311 | "Aphrodite API key": "Clé API Aphrodite", | 311 | "Aphrodite API key": "Clé API Aphrodite", |
| 312 | "Aphrodite Model": "Modèle Aphrodite", | 312 | "Aphrodite Model": "Modèle Aphrodite", |
| 313 | "ggerganov/llama.cpp": "ggerganov/llama.cpp", | 313 | "ggerganov/llama.cpp": "ggerganov/llama.cpp", |
| 314 | "Example: 127.0.0.1:8080": "Exemple : 127.0.0.1:8080", | 314 | "Example: http://127.0.0.1:8080": "Exemple : http://127.0.0.1:8080", |
| 315 | "Example: 127.0.0.1:11434": "Exemple : 127.0.0.1:11434", | 315 | "Example: http://127.0.0.1:11434": "Exemple : http://127.0.0.1:11434", |
| 316 | "Ollama Model": "Modèle Ollama", | 316 | "Ollama Model": "Modèle Ollama", |
| 317 | "Download": "Télécharger", | 317 | "Download": "Télécharger", |
| 318 | "Tabby API key": "Clé API de Tabby", | 318 | "Tabby API key": "Clé API de Tabby", |
| 319 | "koboldcpp API key (optional)": "Clé API koboldcpp (facultatif)", | 319 | "koboldcpp API key (optional)": "Clé API koboldcpp (facultatif)", |
| 320 | "Example: 127.0.0.1:5001": "Exemple : 127.0.0.1:5001", | 320 | "Example: http://127.0.0.1:5001": "Exemple : http://127.0.0.1:5001", |
| 321 | "Authorize": "Autoriser", | 321 | "Authorize": "Autoriser", |
| 322 | "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "Obtenez votre jeton API OpenRouter en utilisant le flux OAuth. Vous serez redirigé vers openrouter.ai", | 322 | "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "Obtenez votre jeton API OpenRouter en utilisant le flux OAuth. Vous serez redirigé vers openrouter.ai", |
| 323 | "Bypass status check": "Contourner la vérification de l'état", | 323 | "Bypass status check": "Contourner la vérification de l'état", |
| @@ -318,23 +318,23 @@ | |||
| 318 | "flag": "merki", | 318 | "flag": "merki", |
| 319 | "API key (optional)": "API lykill (valkvæmt)", | 319 | "API key (optional)": "API lykill (valkvæmt)", |
| 320 | "Server url": "URL þjóns", | 320 | "Server url": "URL þjóns", |
| 321 | "Example: 127.0.0.1:5000": "Dæmi: 127.0.0.1:5000", | 321 | "Example: http://127.0.0.1:5000": "Dæmi: http://127.0.0.1:5000", |
| 322 | "Custom model (optional)": "Sérsniðið módel (valkvæmt)", | 322 | "Custom model (optional)": "Sérsniðið módel (valkvæmt)", |
| 323 | "vllm-project/vllm": "vllm-project/vllm (OpenAI API umbúðastilling)", | 323 | "vllm-project/vllm": "vllm-project/vllm (OpenAI API umbúðastilling)", |
| 324 | "vLLM API key": "vLLM API lykill", | 324 | "vLLM API key": "vLLM API lykill", |
| 325 | "Example: 127.0.0.1:8000": "Dæmi: http://127.0.0.1:8000", | 325 | "Example: http://127.0.0.1:8000": "Dæmi: http://127.0.0.1:8000", |
| 326 | "vLLM Model": "vLLM líkan", | 326 | "vLLM Model": "vLLM líkan", |
| 327 | "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (OpenAI forritunargrensl)", | 327 | "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (OpenAI forritunargrensl)", |
| 328 | "Aphrodite API key": "Aphrodite API lykill", | 328 | "Aphrodite API key": "Aphrodite API lykill", |
| 329 | "Aphrodite Model": "Afródíta fyrirmynd", | 329 | "Aphrodite Model": "Afródíta fyrirmynd", |
| 330 | "ggerganov/llama.cpp": "ggerganov/llama.cpp (úttak þjónn)", | 330 | "ggerganov/llama.cpp": "ggerganov/llama.cpp (úttak þjónn)", |
| 331 | "Example: 127.0.0.1:8080": "Dæmi: 127.0.0.1:8080", | 331 | "Example: http://127.0.0.1:8080": "Dæmi: http://127.0.0.1:8080", |
| 332 | "Example: 127.0.0.1:11434": "Dæmi: 127.0.0.1:11434", | 332 | "Example: http://127.0.0.1:11434": "Dæmi: http://127.0.0.1:11434", |
| 333 | "Ollama Model": "Ollama módel", | 333 | "Ollama Model": "Ollama módel", |
| 334 | "Download": "Niðurhal", | 334 | "Download": "Niðurhal", |
| 335 | "Tabby API key": "Tabby API lykill", | 335 | "Tabby API key": "Tabby API lykill", |
| 336 | "koboldcpp API key (optional)": "koboldcpp API lykill (valfrjálst)", | 336 | "koboldcpp API key (optional)": "koboldcpp API lykill (valfrjálst)", |
| 337 | "Example: 127.0.0.1:5001": "Dæmi: 127.0.0.1:5001", | 337 | "Example: http://127.0.0.1:5001": "Dæmi: http://127.0.0.1:5001", |
| 338 | "Authorize": "Heimild", | 338 | "Authorize": "Heimild", |
| 339 | "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "Fáðu API lykilinn þinn fyrir OpenRouter með því að nota OAuth strauminn. Þú verður endurvísað(ð/ur) á openrouter.ai", | 339 | "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "Fáðu API lykilinn þinn fyrir OpenRouter með því að nota OAuth strauminn. Þú verður endurvísað(ð/ur) á openrouter.ai", |
| 340 | "Bypass status check": "Hlaupa framhjá stöðutík", | 340 | "Bypass status check": "Hlaupa framhjá stöðutík", |
| @@ -318,23 +318,23 @@ | |||
| 318 | "flag": "bandiera", | 318 | "flag": "bandiera", |
| 319 | "API key (optional)": "Chiave API (opzionale)", | 319 | "API key (optional)": "Chiave API (opzionale)", |
| 320 | "Server url": "URL del server", | 320 | "Server url": "URL del server", |
| 321 | "Example: 127.0.0.1:5000": "Esempio: 127.0.0.1:5000", | 321 | "Example: http://127.0.0.1:5000": "Esempio: http://127.0.0.1:5000", |
| 322 | "Custom model (optional)": "Modello personalizzato (opzionale)", | 322 | "Custom model (optional)": "Modello personalizzato (opzionale)", |
| 323 | "vllm-project/vllm": "vllm-project/vllm (modalità wrapper API OpenAI)", | 323 | "vllm-project/vllm": "vllm-project/vllm (modalità wrapper API OpenAI)", |
| 324 | "vLLM API key": "Chiave API vLLM", | 324 | "vLLM API key": "Chiave API vLLM", |
| 325 | "Example: 127.0.0.1:8000": "Esempio: http://127.0.0.1:8000", | 325 | "Example: http://127.0.0.1:8000": "Esempio: http://127.0.0.1:8000", |
| 326 | "vLLM Model": "Modello vLLM", | 326 | "vLLM Model": "Modello vLLM", |
| 327 | "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (Modalità wrapper per l'API OpenAI)", | 327 | "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (Modalità wrapper per l'API OpenAI)", |
| 328 | "Aphrodite API key": "Chiave API di Aphrodite", | 328 | "Aphrodite API key": "Chiave API di Aphrodite", |
| 329 | "Aphrodite Model": "Modello di Afrodite", | 329 | "Aphrodite Model": "Modello di Afrodite", |
| 330 | "ggerganov/llama.cpp": "ggerganov/llama.cpp (Server di output)", | 330 | "ggerganov/llama.cpp": "ggerganov/llama.cpp (Server di output)", |
| 331 | "Example: 127.0.0.1:8080": "Esempio: 127.0.0.1:8080", | 331 | "Example: http://127.0.0.1:8080": "Esempio: http://127.0.0.1:8080", |
| 332 | "Example: 127.0.0.1:11434": "Esempio: 127.0.0.1:11434", | 332 | "Example: http://127.0.0.1:11434": "Esempio: http://127.0.0.1:11434", |
| 333 | "Ollama Model": "Modello Ollama", | 333 | "Ollama Model": "Modello Ollama", |
| 334 | "Download": "Scarica", | 334 | "Download": "Scarica", |
| 335 | "Tabby API key": "Chiave API di Tabby", | 335 | "Tabby API key": "Chiave API di Tabby", |
| 336 | "koboldcpp API key (optional)": "Chiave API koboldcpp (opzionale)", | 336 | "koboldcpp API key (optional)": "Chiave API koboldcpp (opzionale)", |
| 337 | "Example: 127.0.0.1:5001": "Esempio: 127.0.0.1:5001", | 337 | "Example: http://127.0.0.1:5001": "Esempio: http://127.0.0.1:5001", |
| 338 | "Authorize": "Autorizzare", | 338 | "Authorize": "Autorizzare", |
| 339 | "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "Ottieni il tuo token API di OpenRouter utilizzando il flusso OAuth. Sarai reindirizzato su openrouter.ai", | 339 | "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "Ottieni il tuo token API di OpenRouter utilizzando il flusso OAuth. Sarai reindirizzato su openrouter.ai", |
| 340 | "Bypass status check": "Ignora controllo stato", | 340 | "Bypass status check": "Ignora controllo stato", |
| @@ -318,23 +318,23 @@ | |||
| 318 | "flag": "フラグ", | 318 | "flag": "フラグ", |
| 319 | "API key (optional)": "APIキー(オプション)", | 319 | "API key (optional)": "APIキー(オプション)", |
| 320 | "Server url": "サーバーURL", | 320 | "Server url": "サーバーURL", |
| 321 | "Example: 127.0.0.1:5000": "例: 127.0.0.1:5000", | 321 | "Example: http://127.0.0.1:5000": "例: http://127.0.0.1:5000", |
| 322 | "Custom model (optional)": "カスタムモデル(オプション)", | 322 | "Custom model (optional)": "カスタムモデル(オプション)", |
| 323 | "vllm-project/vllm": "vllm-project/vllm (OpenAI API ラッパーモード)", | 323 | "vllm-project/vllm": "vllm-project/vllm (OpenAI API ラッパーモード)", |
| 324 | "vLLM API key": "vLLM API キー", | 324 | "vLLM API key": "vLLM API キー", |
| 325 | "Example: 127.0.0.1:8000": "例: http://127.0.0.1:8000", | 325 | "Example: http://127.0.0.1:8000": "例: http://127.0.0.1:8000", |
| 326 | "vLLM Model": "vLLM モデル", | 326 | "vLLM Model": "vLLM モデル", |
| 327 | "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine(OpenAI APIエンドポイントのパッケージングモード)", | 327 | "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine(OpenAI APIエンドポイントのパッケージングモード)", |
| 328 | "Aphrodite API key": "アフロディーテAPIキー", | 328 | "Aphrodite API key": "アフロディーテAPIキー", |
| 329 | "Aphrodite Model": "アフロディーテモデル", | 329 | "Aphrodite Model": "アフロディーテモデル", |
| 330 | "ggerganov/llama.cpp": "ggerganov/llama.cpp(出力サーバー)", | 330 | "ggerganov/llama.cpp": "ggerganov/llama.cpp(出力サーバー)", |
| 331 | "Example: 127.0.0.1:8080": "例: 127.0.0.1:8080", | 331 | "Example: http://127.0.0.1:8080": "例: http://127.0.0.1:8080", |
| 332 | "Example: 127.0.0.1:11434": "例: 127.0.0.1:11434", | 332 | "Example: http://127.0.0.1:11434": "例: http://127.0.0.1:11434", |
| 333 | "Ollama Model": "Ollamaモデル", | 333 | "Ollama Model": "Ollamaモデル", |
| 334 | "Download": "ダウンロード", | 334 | "Download": "ダウンロード", |
| 335 | "Tabby API key": "TabbyのAPIキー", | 335 | "Tabby API key": "TabbyのAPIキー", |
| 336 | "koboldcpp API key (optional)": "koboldcpp API キー (オプション)", | 336 | "koboldcpp API key (optional)": "koboldcpp API キー (オプション)", |
| 337 | "Example: 127.0.0.1:5001": "例: 127.0.0.1:5001", | 337 | "Example: http://127.0.0.1:5001": "例: http://127.0.0.1:5001", |
| 338 | "Authorize": "承認", | 338 | "Authorize": "承認", |
| 339 | "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "OAuthフローを使用してOpenRouter APIトークンを取得します。 openrouter.aiにリダイレクトされます", | 339 | "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "OAuthフローを使用してOpenRouter APIトークンを取得します。 openrouter.aiにリダイレクトされます", |
| 340 | "Bypass status check": "ステータスのチェックをバイパスする", | 340 | "Bypass status check": "ステータスのチェックをバイパスする", |
| @@ -320,23 +320,23 @@ | |||
| 320 | "flag": "깃발", | 320 | "flag": "깃발", |
| 321 | "API key (optional)": "API 키 (선택 사항)", | 321 | "API key (optional)": "API 키 (선택 사항)", |
| 322 | "Server url": "서버 URL", | 322 | "Server url": "서버 URL", |
| 323 | "Example: 127.0.0.1:5000": "예시: 127.0.0.1:5000", | 323 | "Example: http://127.0.0.1:5000": "예시: http://127.0.0.1:5000", |
| 324 | "Custom model (optional)": "사용자 정의 모델 (선택 사항)", | 324 | "Custom model (optional)": "사용자 정의 모델 (선택 사항)", |
| 325 | "vllm-project/vllm": "vllm-project/vllm(OpenAI API 래퍼 모드)", | 325 | "vllm-project/vllm": "vllm-project/vllm(OpenAI API 래퍼 모드)", |
| 326 | "vLLM API key": "vLLM API 키", | 326 | "vLLM API key": "vLLM API 키", |
| 327 | "Example: 127.0.0.1:8000": "예: http://127.0.0.1:8000", | 327 | "Example: http://127.0.0.1:8000": "예: http://127.0.0.1:8000", |
| 328 | "vLLM Model": "vLLM 모델", | 328 | "vLLM Model": "vLLM 모델", |
| 329 | "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (OpenAI API의 래퍼 모드)", | 329 | "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (OpenAI API의 래퍼 모드)", |
| 330 | "Aphrodite API key": "Aphrodite API 키", | 330 | "Aphrodite API key": "Aphrodite API 키", |
| 331 | "Aphrodite Model": "Aphrodite 모델", | 331 | "Aphrodite Model": "Aphrodite 모델", |
| 332 | "ggerganov/llama.cpp": "ggerganov/llama.cpp (출력 서버)", | 332 | "ggerganov/llama.cpp": "ggerganov/llama.cpp (출력 서버)", |
| 333 | "Example: 127.0.0.1:8080": "예: 127.0.0.1:8080", | 333 | "Example: http://127.0.0.1:8080": "예: http://127.0.0.1:8080", |
| 334 | "Example: 127.0.0.1:11434": "예: 127.0.0.1:11434", | 334 | "Example: http://127.0.0.1:11434": "예: http://127.0.0.1:11434", |
| 335 | "Ollama Model": "Ollama 모델", | 335 | "Ollama Model": "Ollama 모델", |
| 336 | "Download": "다운로드", | 336 | "Download": "다운로드", |
| 337 | "Tabby API key": "Tabby API 키", | 337 | "Tabby API key": "Tabby API 키", |
| 338 | "koboldcpp API key (optional)": "koboldcpp API 키(선택사항)", | 338 | "koboldcpp API key (optional)": "koboldcpp API 키(선택사항)", |
| 339 | "Example: 127.0.0.1:5001": "예: 127.0.0.1:5001", | 339 | "Example: http://127.0.0.1:5001": "예: http://127.0.0.1:5001", |
| 340 | "Authorize": "승인하기", | 340 | "Authorize": "승인하기", |
| 341 | "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "OAuth 플로우를 사용하여 OpenRouter API 토큰을 가져옵니다. openrouter.ai로 리디렉션됩니다.", | 341 | "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "OAuth 플로우를 사용하여 OpenRouter API 토큰을 가져옵니다. openrouter.ai로 리디렉션됩니다.", |
| 342 | "Legacy API (pre-OAI, no streaming)": "레거시 API (OAI 이전, 스트리밍 없음)", | 342 | "Legacy API (pre-OAI, no streaming)": "레거시 API (OAI 이전, 스트리밍 없음)", |
| @@ -318,23 +318,23 @@ | |||
| 318 | "flag": "vlag", | 318 | "flag": "vlag", |
| 319 | "API key (optional)": "API-sleutel (optioneel)", | 319 | "API key (optional)": "API-sleutel (optioneel)", |
| 320 | "Server url": "Server-URL", | 320 | "Server url": "Server-URL", |
| 321 | "Example: 127.0.0.1:5000": "Voorbeeld: 127.0.0.1:5000", | 321 | "Example: http://127.0.0.1:5000": "Voorbeeld: http://127.0.0.1:5000", |
| 322 | "Custom model (optional)": "Aangepast model (optioneel)", | 322 | "Custom model (optional)": "Aangepast model (optioneel)", |
| 323 | "vllm-project/vllm": "vllm-project/vllm (OpenAI API-wrappermodus)", | 323 | "vllm-project/vllm": "vllm-project/vllm (OpenAI API-wrappermodus)", |
| 324 | "vLLM API key": "vLLM API-sleutel", | 324 | "vLLM API key": "vLLM API-sleutel", |
| 325 | "Example: 127.0.0.1:8000": "Voorbeeld: http://127.0.0.1:8000", | 325 | "Example: http://127.0.0.1:8000": "Voorbeeld: http://127.0.0.1:8000", |
| 326 | "vLLM Model": "vLLM-model", | 326 | "vLLM Model": "vLLM-model", |
| 327 | "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (Wrappermodus voor OpenAI API)", | 327 | "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (Wrappermodus voor OpenAI API)", |
| 328 | "Aphrodite API key": "Aphrodite API-sleutel", | 328 | "Aphrodite API key": "Aphrodite API-sleutel", |
| 329 | "Aphrodite Model": "Aphrodite-model", | 329 | "Aphrodite Model": "Aphrodite-model", |
| 330 | "ggerganov/llama.cpp": "ggerganov/llama.cpp (Output-server)", | 330 | "ggerganov/llama.cpp": "ggerganov/llama.cpp (Output-server)", |
| 331 | "Example: 127.0.0.1:8080": "Voorbeeld: 127.0.0.1:8080", | 331 | "Example: http://127.0.0.1:8080": "Voorbeeld: http://127.0.0.1:8080", |
| 332 | "Example: 127.0.0.1:11434": "Voorbeeld: 127.0.0.1:11434", | 332 | "Example: http://127.0.0.1:11434": "Voorbeeld: http://127.0.0.1:11434", |
| 333 | "Ollama Model": "Ollama-model", | 333 | "Ollama Model": "Ollama-model", |
| 334 | "Download": "Downloaden", | 334 | "Download": "Downloaden", |
| 335 | "Tabby API key": "Tabby API-sleutel", | 335 | "Tabby API key": "Tabby API-sleutel", |
| 336 | "koboldcpp API key (optional)": "koboldcpp API-sleutel (optioneel)", | 336 | "koboldcpp API key (optional)": "koboldcpp API-sleutel (optioneel)", |
| 337 | "Example: 127.0.0.1:5001": "Voorbeeld: 127.0.0.1:5001", | 337 | "Example: http://127.0.0.1:5001": "Voorbeeld: http://127.0.0.1:5001", |
| 338 | "Authorize": "Toestemming geven", | 338 | "Authorize": "Toestemming geven", |
| 339 | "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "Haal uw OpenRouter API-token op met behulp van OAuth-flow. U wordt doorgestuurd naar openrouter.ai", | 339 | "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "Haal uw OpenRouter API-token op met behulp van OAuth-flow. U wordt doorgestuurd naar openrouter.ai", |
| 340 | "Bypass status check": "Omzeil statuscontrole", | 340 | "Bypass status check": "Omzeil statuscontrole", |
| @@ -318,23 +318,23 @@ | |||
| 318 | "flag": "bandeira", | 318 | "flag": "bandeira", |
| 319 | "API key (optional)": "Chave da API (opcional)", | 319 | "API key (optional)": "Chave da API (opcional)", |
| 320 | "Server url": "URL do servidor", | 320 | "Server url": "URL do servidor", |
| 321 | "Example: 127.0.0.1:5000": "Exemplo: 127.0.0.1:5000", | 321 | "Example: http://127.0.0.1:5000": "Exemplo: http://127.0.0.1:5000", |
| 322 | "Custom model (optional)": "Modelo personalizado (opcional)", | 322 | "Custom model (optional)": "Modelo personalizado (opcional)", |
| 323 | "vllm-project/vllm": "vllm-project/vllm (modo wrapper da API OpenAI)", | 323 | "vllm-project/vllm": "vllm-project/vllm (modo wrapper da API OpenAI)", |
| 324 | "vLLM API key": "Chave de API vLLM", | 324 | "vLLM API key": "Chave de API vLLM", |
| 325 | "Example: 127.0.0.1:8000": "Exemplo: http://127.0.0.1:8000", | 325 | "Example: http://127.0.0.1:8000": "Exemplo: http://127.0.0.1:8000", |
| 326 | "vLLM Model": "Modelo vLLM", | 326 | "vLLM Model": "Modelo vLLM", |
| 327 | "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (Modo Wrapper para API OpenAI)", | 327 | "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (Modo Wrapper para API OpenAI)", |
| 328 | "Aphrodite API key": "Chave da API Aphrodite", | 328 | "Aphrodite API key": "Chave da API Aphrodite", |
| 329 | "Aphrodite Model": "Modelo Afrodite", | 329 | "Aphrodite Model": "Modelo Afrodite", |
| 330 | "ggerganov/llama.cpp": "ggerganov/llama.cpp (Servidor de Saída)", | 330 | "ggerganov/llama.cpp": "ggerganov/llama.cpp (Servidor de Saída)", |
| 331 | "Example: 127.0.0.1:8080": "Exemplo: 127.0.0.1:8080", | 331 | "Example: http://127.0.0.1:8080": "Exemplo: http://127.0.0.1:8080", |
| 332 | "Example: 127.0.0.1:11434": "Exemplo: 127.0.0.1:11434", | 332 | "Example: http://127.0.0.1:11434": "Exemplo: http://127.0.0.1:11434", |
| 333 | "Ollama Model": "Modelo Ollama", | 333 | "Ollama Model": "Modelo Ollama", |
| 334 | "Download": "Baixar", | 334 | "Download": "Baixar", |
| 335 | "Tabby API key": "Chave da API do Tabby", | 335 | "Tabby API key": "Chave da API do Tabby", |
| 336 | "koboldcpp API key (optional)": "Chave API koboldcpp (opcional)", | 336 | "koboldcpp API key (optional)": "Chave API koboldcpp (opcional)", |
| 337 | "Example: 127.0.0.1:5001": "Exemplo: 127.0.0.1:5001", | 337 | "Example: http://127.0.0.1:5001": "Exemplo: http://127.0.0.1:5001", |
| 338 | "Authorize": "Autorizar", | 338 | "Authorize": "Autorizar", |
| 339 | "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "Obtenha seu token da API do OpenRouter usando o fluxo OAuth. Você será redirecionado para openrouter.ai", | 339 | "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "Obtenha seu token da API do OpenRouter usando o fluxo OAuth. Você será redirecionado para openrouter.ai", |
| 340 | "Bypass status check": "Ignorar verificação de status", | 340 | "Bypass status check": "Ignorar verificação de status", |
| @@ -109,10 +109,10 @@ | |||
| 109 | "Get it here:": "Получите здесь:", | 109 | "Get it here:": "Получите здесь:", |
| 110 | "Register": "Зарегистрироваться", | 110 | "Register": "Зарегистрироваться", |
| 111 | "TogetherAI Model": "Модель TogetherAI", | 111 | "TogetherAI Model": "Модель TogetherAI", |
| 112 | "Example: 127.0.0.1:5001": "Пример: http://127.0.0.1:5001", | 112 | "Example: http://127.0.0.1:5001": "Пример: http://127.0.0.1:5001", |
| 113 | "ggerganov/llama.cpp": "ggerganov/llama.cpp (сервер вывода)", | 113 | "ggerganov/llama.cpp": "ggerganov/llama.cpp (сервер вывода)", |
| 114 | "Example: 127.0.0.1:8080": "Пример: http://127.0.0.1:8080", | 114 | "Example: http://127.0.0.1:8080": "Пример: http://127.0.0.1:8080", |
| 115 | "Example: 127.0.0.1:11434": "Пример: http://127.0.0.1:11434", | 115 | "Example: http://127.0.0.1:11434": "Пример: http://127.0.0.1:11434", |
| 116 | "Ollama Model": "Модель Ollama", | 116 | "Ollama Model": "Модель Ollama", |
| 117 | "Download": "Скачать", | 117 | "Download": "Скачать", |
| 118 | "TogetherAI API Key": "TogetherAI API-ключ", | 118 | "TogetherAI API Key": "TogetherAI API-ключ", |
| @@ -133,7 +133,7 @@ | |||
| 133 | "Server url": "URL-адрес сервера", | 133 | "Server url": "URL-адрес сервера", |
| 134 | "Custom model (optional)": "Пользовательская модель (необязательно)", | 134 | "Custom model (optional)": "Пользовательская модель (необязательно)", |
| 135 | "Bypass API status check": "Обход проверки статуса API", | 135 | "Bypass API status check": "Обход проверки статуса API", |
| 136 | "Example: 127.0.0.1:5000": "Пример: http://127.0.0.1:5000", | 136 | "Example: http://127.0.0.1:5000": "Пример: http://127.0.0.1:5000", |
| 137 | "Bypass status check": "Обход проверки статуса", | 137 | "Bypass status check": "Обход проверки статуса", |
| 138 | "Mancer API key": "Ключ от Mancer API", | 138 | "Mancer API key": "Ключ от Mancer API", |
| 139 | "to get your OpenAI API key.": "для получения ключа от API OpenAI", | 139 | "to get your OpenAI API key.": "для получения ключа от API OpenAI", |
| @@ -1252,7 +1252,6 @@ | |||
| 1252 | "DreamGen Model": "Модель DreamGen", | 1252 | "DreamGen Model": "Модель DreamGen", |
| 1253 | "vllm-project/vllm": "vllm-project/vllm (режим враппера OpenAI API)", | 1253 | "vllm-project/vllm": "vllm-project/vllm (режим враппера OpenAI API)", |
| 1254 | "vLLM API key": "Ключ от API vLLM", | 1254 | "vLLM API key": "Ключ от API vLLM", |
| 1255 | "Example: 127.0.0.1:8000": "Example: http://127.0.0.1:8000", | ||
| 1256 | "vLLM Model": "Модель vLLM", | 1255 | "vLLM Model": "Модель vLLM", |
| 1257 | "Aphrodite Model": "Модель Aphrodite", | 1256 | "Aphrodite Model": "Модель Aphrodite", |
| 1258 | "Peek a password": "Посмотреть пароль", | 1257 | "Peek a password": "Посмотреть пароль", |
| @@ -2033,7 +2032,7 @@ | |||
| 2033 | "[Currently loaded]": "[Загруженная сейчас]", | 2032 | "[Currently loaded]": "[Загруженная сейчас]", |
| 2034 | "Search providers...": "Искать по провайдерам...", | 2033 | "Search providers...": "Искать по провайдерам...", |
| 2035 | "Automatically chooses an alternative provider if chosen providers can't serve your request.": "Автоматически переключаться на другого провайдера, если текущий не может обслужить запрос.", | 2034 | "Automatically chooses an alternative provider if chosen providers can't serve your request.": "Автоматически переключаться на другого провайдера, если текущий не может обслужить запрос.", |
| 2036 | "Example: 127.0.0.1:8000": "Пример: 127.0.0.1:8000", | 2035 | "Example: http://127.0.0.1:8000": "Пример: http://127.0.0.1:8000", |
| 2037 | "Edit a connection profile": "Редактировать профиль соединения", | 2036 | "Edit a connection profile": "Редактировать профиль соединения", |
| 2038 | "System Prompt Name": "Название системного промпта", | 2037 | "System Prompt Name": "Название системного промпта", |
| 2039 | "Use System Prompt": "Использовать системный промпт", | 2038 | "Use System Prompt": "Использовать системный промпт", |
| @@ -318,23 +318,23 @@ | |||
| 318 | "flag": "прапорцем", | 318 | "flag": "прапорцем", |
| 319 | "API key (optional)": "Ключ API (необов'язково)", | 319 | "API key (optional)": "Ключ API (необов'язково)", |
| 320 | "Server url": "URL-адреса сервера", | 320 | "Server url": "URL-адреса сервера", |
| 321 | "Example: 127.0.0.1:5000": "Приклад: 127.0.0.1:5000", | 321 | "Example: http://127.0.0.1:5000": "Приклад: http://127.0.0.1:5000", |
| 322 | "Custom model (optional)": "Власна модель (необов'язково)", | 322 | "Custom model (optional)": "Власна модель (необов'язково)", |
| 323 | "vllm-project/vllm": "vllm-project/vllm (режим оболонки OpenAI API)", | 323 | "vllm-project/vllm": "vllm-project/vllm (режим оболонки OpenAI API)", |
| 324 | "vLLM API key": "Ключ API vLLM", | 324 | "vLLM API key": "Ключ API vLLM", |
| 325 | "Example: 127.0.0.1:8000": "Приклад: http://127.0.0.1:8000", | 325 | "Example: http://127.0.0.1:8000": "Приклад: http://127.0.0.1:8000", |
| 326 | "vLLM Model": "Модель vLLM", | 326 | "vLLM Model": "Модель vLLM", |
| 327 | "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (режим OpenAI API)", | 327 | "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (режим OpenAI API)", |
| 328 | "Aphrodite API key": "Ключ API для Aphrodite", | 328 | "Aphrodite API key": "Ключ API для Aphrodite", |
| 329 | "Aphrodite Model": "Модель Афродіта", | 329 | "Aphrodite Model": "Модель Афродіта", |
| 330 | "ggerganov/llama.cpp": "ggerganov/llama.cpp (сервер виведення)", | 330 | "ggerganov/llama.cpp": "ggerganov/llama.cpp (сервер виведення)", |
| 331 | "Example: 127.0.0.1:8080": "Приклад: 127.0.0.1:8080", | 331 | "Example: http://127.0.0.1:8080": "Приклад: http://127.0.0.1:8080", |
| 332 | "Example: 127.0.0.1:11434": "Приклад: 127.0.0.1:11434", | 332 | "Example: http://127.0.0.1:11434": "Приклад: http://127.0.0.1:11434", |
| 333 | "Ollama Model": "Модель Ollama", | 333 | "Ollama Model": "Модель Ollama", |
| 334 | "Download": "Завантажити", | 334 | "Download": "Завантажити", |
| 335 | "Tabby API key": "Ключ API для Tabby", | 335 | "Tabby API key": "Ключ API для Tabby", |
| 336 | "koboldcpp API key (optional)": "API-ключ koboldcpp (необов’язково)", | 336 | "koboldcpp API key (optional)": "API-ключ koboldcpp (необов’язково)", |
| 337 | "Example: 127.0.0.1:5001": "Приклад: 127.0.0.1:5001", | 337 | "Example: http://127.0.0.1:5001": "Приклад: http://127.0.0.1:5001", |
| 338 | "Authorize": "Авторизувати", | 338 | "Authorize": "Авторизувати", |
| 339 | "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "Отримайте свій токен API OpenRouter за допомогою OAuth. Вас буде перенаправлено на openrouter.ai", | 339 | "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "Отримайте свій токен API OpenRouter за допомогою OAuth. Вас буде перенаправлено на openrouter.ai", |
| 340 | "Bypass status check": "Обійти перевірку статусу", | 340 | "Bypass status check": "Обійти перевірку статусу", |
| @@ -318,23 +318,23 @@ | |||
| 318 | "flag": "cờ", | 318 | "flag": "cờ", |
| 319 | "API key (optional)": "Key API (tùy chọn)", | 319 | "API key (optional)": "Key API (tùy chọn)", |
| 320 | "Server url": "URL máy chủ", | 320 | "Server url": "URL máy chủ", |
| 321 | "Example: 127.0.0.1:5000": "Ví dụ: 127.0.0.1:5000", | 321 | "Example: http://127.0.0.1:5000": "Ví dụ: http://127.0.0.1:5000", |
| 322 | "Custom model (optional)": "Model tùy chỉnh (tùy chọn)", | 322 | "Custom model (optional)": "Model tùy chỉnh (tùy chọn)", |
| 323 | "vllm-project/vllm": "vllm-project/vllm (Chế độ trình bao bọc API OpenAI)", | 323 | "vllm-project/vllm": "vllm-project/vllm (Chế độ trình bao bọc API OpenAI)", |
| 324 | "vLLM API key": "Key API vLLM", | 324 | "vLLM API key": "Key API vLLM", |
| 325 | "Example: 127.0.0.1:8000": "Ví dụ: http://127.0.0.1:8000", | 325 | "Example: http://127.0.0.1:8000": "Ví dụ: http://127.0.0.1:8000", |
| 326 | "vLLM Model": "Model vLLM", | 326 | "vLLM Model": "Model vLLM", |
| 327 | "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (Chế độ đóng gói cho Giao diện lập trình ứng dụng OpenAI)", | 327 | "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (Chế độ đóng gói cho Giao diện lập trình ứng dụng OpenAI)", |
| 328 | "Aphrodite API key": "Key API Aphrodite", | 328 | "Aphrodite API key": "Key API Aphrodite", |
| 329 | "Aphrodite Model": "Moddel cho Aphrodite", | 329 | "Aphrodite Model": "Moddel cho Aphrodite", |
| 330 | "ggerganov/llama.cpp": "ggerganov/llama.cpp", | 330 | "ggerganov/llama.cpp": "ggerganov/llama.cpp", |
| 331 | "Example: 127.0.0.1:8080": "Ví dụ: 127.0.0.1:8080", | 331 | "Example: http://127.0.0.1:8080": "Ví dụ: http://127.0.0.1:8080", |
| 332 | "Example: 127.0.0.1:11434": "Ví dụ: 127.0.0.1:11434", | 332 | "Example: http://127.0.0.1:11434": "Ví dụ: http://127.0.0.1:11434", |
| 333 | "Ollama Model": "Model Ollama", | 333 | "Ollama Model": "Model Ollama", |
| 334 | "Download": "Tải xuống", | 334 | "Download": "Tải xuống", |
| 335 | "Tabby API key": "Key API Tabby", | 335 | "Tabby API key": "Key API Tabby", |
| 336 | "koboldcpp API key (optional)": "Key API koboldcpp (tùy chọn)", | 336 | "koboldcpp API key (optional)": "Key API koboldcpp (tùy chọn)", |
| 337 | "Example: 127.0.0.1:5001": "Ví dụ: 127.0.0.1:5001", | 337 | "Example: http://127.0.0.1:5001": "Ví dụ: http://127.0.0.1:5001", |
| 338 | "Cho phép": "Ủy quyền", | 338 | "Cho phép": "Ủy quyền", |
| 339 | "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "Nhận mã thông báo API OpenRouter của bạn bằng cách sử dụng luồng OAuth. Bạn sẽ được chuyển hướng đến openrouter.ai", | 339 | "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "Nhận mã thông báo API OpenRouter của bạn bằng cách sử dụng luồng OAuth. Bạn sẽ được chuyển hướng đến openrouter.ai", |
| 340 | "Bypass status check": "Bỏ qua check trạng thái", | 340 | "Bypass status check": "Bỏ qua check trạng thái", |
| @@ -347,7 +347,7 @@ | |||
| 347 | "Mancer Model": "Mancer 模型", | 347 | "Mancer Model": "Mancer 模型", |
| 348 | "API key (optional)": "API密钥(可选)", | 348 | "API key (optional)": "API密钥(可选)", |
| 349 | "Server url": "服务器URL", | 349 | "Server url": "服务器URL", |
| 350 | "Example: 127.0.0.1:5000": "示例:127.0.0.1:5000", | 350 | "Example: http://127.0.0.1:5000": "示例:http://127.0.0.1:5000", |
| 351 | "Model ID (optional)": "模型 ID(可选)", | 351 | "Model ID (optional)": "模型 ID(可选)", |
| 352 | "Make sure you run it with": "确保您在运行时加上", | 352 | "Make sure you run it with": "确保您在运行时加上", |
| 353 | "flag": "标志", | 353 | "flag": "标志", |
| @@ -364,7 +364,7 @@ | |||
| 364 | "No model description": "[无描述]", | 364 | "No model description": "[无描述]", |
| 365 | "vllm-project/vllm": "vllm-project/vllm(OpenAI API 包装器模式)", | 365 | "vllm-project/vllm": "vllm-project/vllm(OpenAI API 包装器模式)", |
| 366 | "vLLM API key": "vLLM API 密钥", | 366 | "vLLM API key": "vLLM API 密钥", |
| 367 | "Example: 127.0.0.1:8000": "示例:http://127.0.0.1:8000", | 367 | "Example: http://127.0.0.1:8000": "示例:http://127.0.0.1:8000", |
| 368 | "vLLM Model": "vLLM 模型", | 368 | "vLLM Model": "vLLM 模型", |
| 369 | "HuggingFace Token": "HuggingFace 代币", | 369 | "HuggingFace Token": "HuggingFace 代币", |
| 370 | "Endpoint URL": "端点 URL", | 370 | "Endpoint URL": "端点 URL", |
| @@ -373,8 +373,8 @@ | |||
| 373 | "Aphrodite API key": "Aphrodite API 密钥", | 373 | "Aphrodite API key": "Aphrodite API 密钥", |
| 374 | "Aphrodite Model": "Aphrodite 模型", | 374 | "Aphrodite Model": "Aphrodite 模型", |
| 375 | "ggerganov/llama.cpp": "ggerganov/llama.cpp", | 375 | "ggerganov/llama.cpp": "ggerganov/llama.cpp", |
| 376 | "Example: 127.0.0.1:8080": "示例:127.0.0.1:8080", | 376 | "Example: http://127.0.0.1:8080": "示例:http://127.0.0.1:8080", |
| 377 | "Example: 127.0.0.1:11434": "示例:127.0.0.1:11434", | 377 | "Example: http://127.0.0.1:11434": "示例:http://127.0.0.1:11434", |
| 378 | "Ollama Model": "Ollama 模型", | 378 | "Ollama Model": "Ollama 模型", |
| 379 | "Download": "下载", | 379 | "Download": "下载", |
| 380 | "Tabby API key": "Tabby API 密钥", | 380 | "Tabby API key": "Tabby API 密钥", |
| @@ -382,7 +382,7 @@ | |||
| 382 | "must be set in Tabby's config.yml to switch models.": "必须在Tabby的config.yml内设置以切换模型", | 382 | "must be set in Tabby's config.yml to switch models.": "必须在Tabby的config.yml内设置以切换模型", |
| 383 | "Use an admin API key.": "使用管理员API密钥。", | 383 | "Use an admin API key.": "使用管理员API密钥。", |
| 384 | "koboldcpp API key (optional)": "koboldcpp API 密钥(可选)", | 384 | "koboldcpp API key (optional)": "koboldcpp API 密钥(可选)", |
| 385 | "Example: 127.0.0.1:5001": "示例:127.0.0.1:5001", | 385 | "Example: http://127.0.0.1:5001": "示例:http://127.0.0.1:5001", |
| 386 | "Bypass status check": "跳过状态检查", | 386 | "Bypass status check": "跳过状态检查", |
| 387 | "Derive context size from backend": "从后端获取上下文长度", | 387 | "Derive context size from backend": "从后端获取上下文长度", |
| 388 | "Authorize": "授权", | 388 | "Authorize": "授权", |
| @@ -319,23 +319,23 @@ | |||
| 319 | "flag": "旗標", | 319 | "flag": "旗標", |
| 320 | "API key (optional)": "API 金鑰(可選)", | 320 | "API key (optional)": "API 金鑰(可選)", |
| 321 | "Server url": "伺服器 URL", | 321 | "Server url": "伺服器 URL", |
| 322 | "Example: 127.0.0.1:5000": "範例:127.0.0.1:5000", | 322 | "Example: http://127.0.0.1:5000": "範例:http://127.0.0.1:5000", |
| 323 | "Custom model (optional)": "自訂模型(選填)", | 323 | "Custom model (optional)": "自訂模型(選填)", |
| 324 | "vllm-project/vllm": "vllm-project/vllm", | 324 | "vllm-project/vllm": "vllm-project/vllm", |
| 325 | "vLLM API key": "vLLM API 金鑰", | 325 | "vLLM API key": "vLLM API 金鑰", |
| 326 | "Example: 127.0.0.1:8000": "範例:127.0.0.1:8000", | 326 | "Example: http://127.0.0.1:8000": "範例:http://127.0.0.1:8000", |
| 327 | "vLLM Model": "vLLM 模型", | 327 | "vLLM Model": "vLLM 模型", |
| 328 | "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite 引擎", | 328 | "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite 引擎", |
| 329 | "Aphrodite API key": "Aphrodite API 金鑰", | 329 | "Aphrodite API key": "Aphrodite API 金鑰", |
| 330 | "Aphrodite Model": "Aphrodite 模型", | 330 | "Aphrodite Model": "Aphrodite 模型", |
| 331 | "ggerganov/llama.cpp": "ggerganov/llama.cpp", | 331 | "ggerganov/llama.cpp": "ggerganov/llama.cpp", |
| 332 | "Example: 127.0.0.1:8080": "範例:127.0.0.1:8080", | 332 | "Example: http://127.0.0.1:8080": "範例:http://127.0.0.1:8080", |
| 333 | "Example: 127.0.0.1:11434": "範例:127.0.0.1:11434", | 333 | "Example: http://127.0.0.1:11434": "範例:http://127.0.0.1:11434", |
| 334 | "Ollama Model": "Ollama 模型", | 334 | "Ollama Model": "Ollama 模型", |
| 335 | "Download": "下載", | 335 | "Download": "下載", |
| 336 | "Tabby API key": "Tabby API 金鑰", | 336 | "Tabby API key": "Tabby API 金鑰", |
| 337 | "koboldcpp API key (optional)": "KoboldCpp API 金鑰(可選)", | 337 | "koboldcpp API key (optional)": "KoboldCpp API 金鑰(可選)", |
| 338 | "Example: 127.0.0.1:5001": "範例:127.0.0.1:5001", | 338 | "Example: http://127.0.0.1:5001": "範例:http://127.0.0.1:5001", |
| 339 | "Authorize": "授權", | 339 | "Authorize": "授權", |
| 340 | "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "使用 OAuth 流程取得您的 OpenRouter API 符元。您將被重新導向到 openrouter.ai", | 340 | "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "使用 OAuth 流程取得您的 OpenRouter API 符元。您將被重新導向到 openrouter.ai", |
| 341 | "Bypass status check": "繞過狀態檢查", | 341 | "Bypass status check": "繞過狀態檢查", |
| @@ -173,6 +173,7 @@ import { | |||
| 173 | escapeHtml, | 173 | escapeHtml, |
| 174 | saveBase64AsFile, | 174 | saveBase64AsFile, |
| 175 | uuidv4, | 175 | uuidv4, |
| 176 | equalsIgnoreCaseAndAccents, | ||
| 176 | } from './scripts/utils.js'; | 177 | } from './scripts/utils.js'; |
| 177 | import { debounce_timeout, IGNORE_SYMBOL } from './scripts/constants.js'; | 178 | import { debounce_timeout, IGNORE_SYMBOL } from './scripts/constants.js'; |
| 178 | 179 | ||
| @@ -2133,7 +2134,7 @@ export function messageFormatting(mes, ch_name, isSystem, isUser, messageId, san | |||
| 2133 | } | 2134 | } |
| 2134 | 2135 | ||
| 2135 | mes = mes.replace( | 2136 | mes = mes.replace( |
| 2136 | /```[\s\S]*?```|~~~[\s\S]*?~~~|``[\s\S]*?``|`[\s\S]*?`|(".*?")|(\u201C.*?\u201D)|(\u00AB.*?\u00BB)|(\u300C.*?\u300D)|(\u300E.*?\u300F)|(\uFF02.*?\uFF02)/gm, | 2137 | /<style>[\s\S]*?<\/style>|```[\s\S]*?```|~~~[\s\S]*?~~~|``[\s\S]*?``|`[\s\S]*?`|(".*?")|(\u201C.*?\u201D)|(\u00AB.*?\u00BB)|(\u300C.*?\u300D)|(\u300E.*?\u300F)|(\uFF02.*?\uFF02)/gim, |
| 2137 | function (match, p1, p2, p3, p4, p5, p6) { | 2138 | function (match, p1, p2, p3, p4, p5, p6) { |
| 2138 | if (p1) { | 2139 | if (p1) { |
| 2139 | // English double quotes | 2140 | // English double quotes |
| @@ -9878,6 +9879,15 @@ export async function renameChat(oldFileName, newName) { | |||
| 9878 | renamed_file: `${newName.trim()}.jsonl`, | 9879 | renamed_file: `${newName.trim()}.jsonl`, |
| 9879 | }; | 9880 | }; |
| 9880 | 9881 | ||
| 9882 | if (body.original_file === body.renamed_file) { | ||
| 9883 | console.debug('Chat rename cancelled, old and new names are the same'); | ||
| 9884 | return; | ||
| 9885 | } | ||
| 9886 | if (equalsIgnoreCaseAndAccents(body.original_file, body.renamed_file)) { | ||
| 9887 | toastr.warning(t`Name not accepted, as it is the same as before (ignoring case and accents).`, t`Rename Chat`); | ||
| 9888 | return; | ||
| 9889 | } | ||
| 9890 | |||
| 9881 | try { | 9891 | try { |
| 9882 | showLoader(); | 9892 | showLoader(); |
| 9883 | const response = await fetch('/api/chats/rename', { | 9893 | const response = await fetch('/api/chats/rename', { |
| @@ -12209,4 +12219,11 @@ jQuery(async function () { | |||
| 12209 | }); | 12219 | }); |
| 12210 | 12220 | ||
| 12211 | initCustomSelectedSamplers(); | 12221 | initCustomSelectedSamplers(); |
| 12222 | |||
| 12223 | window.addEventListener('beforeunload', (e) => { | ||
| 12224 | if (isChatSaving) { | ||
| 12225 | e.preventDefault(); | ||
| 12226 | e.returnValue = true; | ||
| 12227 | } | ||
| 12228 | }); | ||
| 12212 | }); | 12229 | }); |
| @@ -459,7 +459,7 @@ export async function appendFileContent(message, messageText) { | |||
| 459 | * @copyright https://github.com/kwaroran/risuAI | 459 | * @copyright https://github.com/kwaroran/risuAI |
| 460 | */ | 460 | */ |
| 461 | export function encodeStyleTags(text) { | 461 | export function encodeStyleTags(text) { |
| 462 | const styleRegex = /<style>(.+?)<\/style>/gms; | 462 | const styleRegex = /<style>(.+?)<\/style>/gims; |
| 463 | return text.replaceAll(styleRegex, (_, match) => { | 463 | return text.replaceAll(styleRegex, (_, match) => { |
| 464 | return `<custom-style>${escape(match)}</custom-style>`; | 464 | return `<custom-style>${escape(match)}</custom-style>`; |
| 465 | }); | 465 | }); |
| @@ -65,6 +65,7 @@ | |||
| 65 | <option data-type="anthropic" value="claude-3-opus-20240229">claude-3-opus-20240229</option> | 65 | <option data-type="anthropic" value="claude-3-opus-20240229">claude-3-opus-20240229</option> |
| 66 | <option data-type="anthropic" value="claude-3-sonnet-20240229">claude-3-sonnet-20240229</option> | 66 | <option data-type="anthropic" value="claude-3-sonnet-20240229">claude-3-sonnet-20240229</option> |
| 67 | <option data-type="anthropic" value="claude-3-haiku-20240307">claude-3-haiku-20240307</option> | 67 | <option data-type="anthropic" value="claude-3-haiku-20240307">claude-3-haiku-20240307</option> |
| 68 | <option data-type="google" value="gemini-2.5-pro-preview-03-25">gemini-2.5-pro-preview-03-25</option> | ||
| 68 | <option data-type="google" value="gemini-2.5-pro-exp-03-25">gemini-2.5-pro-exp-03-25</option> | 69 | <option data-type="google" value="gemini-2.5-pro-exp-03-25">gemini-2.5-pro-exp-03-25</option> |
| 69 | <option data-type="google" value="gemini-2.0-pro-exp">gemini-2.0-pro-exp</option> | 70 | <option data-type="google" value="gemini-2.0-pro-exp">gemini-2.0-pro-exp</option> |
| 70 | <option data-type="google" value="gemini-2.0-pro-exp-02-05">gemini-2.0-pro-exp-02-05</option> | 71 | <option data-type="google" value="gemini-2.0-pro-exp-02-05">gemini-2.0-pro-exp-02-05</option> |
| @@ -180,13 +180,18 @@ function displayError(message) { | |||
| 180 | * Preserves the query string. | 180 | * Preserves the query string. |
| 181 | */ | 181 | */ |
| 182 | function redirectToHome() { | 182 | function redirectToHome() { |
| 183 | // After a login theres no need to preserve the | 183 | // Create a URL object based on the current location |
| 184 | // noauto (if present) | 184 | const currentUrl = new URL(window.location.href); |
| 185 | const urlParams = new URLSearchParams(window.location.search); | ||
| 186 | 185 | ||
| 187 | urlParams.delete('noauto'); | 186 | // After a login there's no need to preserve the |
| 187 | // noauto parameter (if present) | ||
| 188 | currentUrl.searchParams.delete('noauto'); | ||
| 188 | 189 | ||
| 189 | window.location.href = '/' + urlParams.toString(); | 190 | // Set the pathname to root and keep the updated query string |
| 191 | currentUrl.pathname = '/'; | ||
| 192 | |||
| 193 | // Redirect to the new URL | ||
| 194 | window.location.href = currentUrl.toString(); | ||
| 190 | } | 195 | } |
| 191 | 196 | ||
| 192 | /** | 197 | /** |
| @@ -4193,6 +4193,9 @@ function getGroqMaxContext(model, isUnlocked) { | |||
| 4193 | 'qwen-2.5-32b': max_128k, | 4193 | 'qwen-2.5-32b': max_128k, |
| 4194 | 'deepseek-r1-distill-qwen-32b': max_128k, | 4194 | 'deepseek-r1-distill-qwen-32b': max_128k, |
| 4195 | 'deepseek-r1-distill-llama-70b-specdec': max_128k, | 4195 | 'deepseek-r1-distill-llama-70b-specdec': max_128k, |
| 4196 | 'mistral-saba-24b': max_32k, | ||
| 4197 | 'meta-llama/llama-4-scout-17b-16e-instruct': max_128k, | ||
| 4198 | 'meta-llama/llama-4-maverick-17b-128e-instruct': max_128k, | ||
| 4196 | }; | 4199 | }; |
| 4197 | 4200 | ||
| 4198 | // Return context size if model found, otherwise default to 128k | 4201 | // Return context size if model found, otherwise default to 128k |
| @@ -4327,7 +4330,7 @@ async function onModelChange() { | |||
| 4327 | $('#openai_max_context').attr('max', max_32k); | 4330 | $('#openai_max_context').attr('max', max_32k); |
| 4328 | } else if (value.includes('gemini-1.5-pro') || value.includes('gemini-exp-1206') || value.includes('gemini-2.0-pro')) { | 4331 | } else if (value.includes('gemini-1.5-pro') || value.includes('gemini-exp-1206') || value.includes('gemini-2.0-pro')) { |
| 4329 | $('#openai_max_context').attr('max', max_2mil); | 4332 | $('#openai_max_context').attr('max', max_2mil); |
| 4330 | } else if (value.includes('gemini-1.5-flash') || value.includes('gemini-2.0-flash') || value.includes('gemini-2.5-pro-exp-03-25')) { | 4333 | } else if (value.includes('gemini-1.5-flash') || value.includes('gemini-2.0-flash') || value.includes('gemini-2.5-pro-exp-03-25') || value.includes('gemini-2.5-pro-preview-03-25')) { |
| 4331 | $('#openai_max_context').attr('max', max_1mil); | 4334 | $('#openai_max_context').attr('max', max_1mil); |
| 4332 | } else if (value.includes('gemini-1.0-pro') || value === 'gemini-pro') { | 4335 | } else if (value.includes('gemini-1.0-pro') || value === 'gemini-pro') { |
| 4333 | $('#openai_max_context').attr('max', max_32k); | 4336 | $('#openai_max_context').attr('max', max_32k); |
| @@ -4961,6 +4964,7 @@ export function isImageInliningSupported() { | |||
| 4961 | const visionSupportedModels = [ | 4964 | const visionSupportedModels = [ |
| 4962 | 'gpt-4-vision', | 4965 | 'gpt-4-vision', |
| 4963 | 'gemini-2.5-pro-exp-03-25', | 4966 | 'gemini-2.5-pro-exp-03-25', |
| 4967 | 'gemini-2.5-pro-preview-03-25', | ||
| 4964 | 'gemini-2.0-pro-exp', | 4968 | 'gemini-2.0-pro-exp', |
| 4965 | 'gemini-2.0-pro-exp-02-05', | 4969 | 'gemini-2.0-pro-exp-02-05', |
| 4966 | 'gemini-2.0-flash-lite-preview', | 4970 | 'gemini-2.0-flash-lite-preview', |
| @@ -36,7 +36,7 @@ import { | |||
| 36 | textgenerationwebui_presets, | 36 | textgenerationwebui_presets, |
| 37 | textgenerationwebui_settings as textgen_settings, | 37 | textgenerationwebui_settings as textgen_settings, |
| 38 | } from './textgen-settings.js'; | 38 | } from './textgen-settings.js'; |
| 39 | import { download, parseJsonFile, waitUntilCondition } from './utils.js'; | 39 | import { download, equalsIgnoreCaseAndAccents, parseJsonFile, waitUntilCondition } from './utils.js'; |
| 40 | import { t } from './i18n.js'; | 40 | import { t } from './i18n.js'; |
| 41 | import { reasoning_templates } from './reasoning.js'; | 41 | import { reasoning_templates } from './reasoning.js'; |
| 42 | 42 | ||
| @@ -454,6 +454,9 @@ class PresetManager { | |||
| 454 | 454 | ||
| 455 | async renamePreset(newName) { | 455 | async renamePreset(newName) { |
| 456 | const oldName = this.getSelectedPresetName(); | 456 | const oldName = this.getSelectedPresetName(); |
| 457 | if (equalsIgnoreCaseAndAccents(oldName, newName)) { | ||
| 458 | throw new Error('New name must be different from old name'); | ||
| 459 | } | ||
| 457 | try { | 460 | try { |
| 458 | await this.savePreset(newName); | 461 | await this.savePreset(newName); |
| 459 | await this.deletePreset(oldName); | 462 | await this.deletePreset(oldName); |
| @@ -892,6 +895,10 @@ export async function initPresetManager() { | |||
| 892 | console.debug(!presetManager.isAdvancedFormatting() ? 'Preset rename cancelled' : 'Template rename cancelled'); | 895 | console.debug(!presetManager.isAdvancedFormatting() ? 'Preset rename cancelled' : 'Template rename cancelled'); |
| 893 | return; | 896 | return; |
| 894 | } | 897 | } |
| 898 | if (equalsIgnoreCaseAndAccents(oldName, newName)) { | ||
| 899 | toastr.warning(t`Name not accepted, as it is the same as before (ignoring case and accents).`, t`Rename Preset`); | ||
| 900 | return; | ||
| 901 | } | ||
| 895 | 902 | ||
| 896 | await presetManager.renamePreset(newName); | 903 | await presetManager.renamePreset(newName); |
| 897 | 904 | ||
| @@ -832,6 +832,12 @@ function registerReasoningSlashCommands() { | |||
| 832 | typeList: ARGUMENT_TYPE.NUMBER, | 832 | typeList: ARGUMENT_TYPE.NUMBER, |
| 833 | enumProvider: commonEnumProviders.messages(), | 833 | enumProvider: commonEnumProviders.messages(), |
| 834 | }), | 834 | }), |
| 835 | SlashCommandNamedArgument.fromProps({ | ||
| 836 | name: 'collapse', | ||
| 837 | description: 'Whether to collapse the reasoning block. (If not provided, uses the default expand setting)', | ||
| 838 | typeList: [ARGUMENT_TYPE.BOOLEAN], | ||
| 839 | enumList: commonEnumProviders.boolean('trueFalse')(), | ||
| 840 | }), | ||
| 835 | ], | 841 | ], |
| 836 | unnamedArgumentList: [ | 842 | unnamedArgumentList: [ |
| 837 | SlashCommandArgument.fromProps({ | 843 | SlashCommandArgument.fromProps({ |
| @@ -856,6 +862,9 @@ function registerReasoningSlashCommands() { | |||
| 856 | 862 | ||
| 857 | closeMessageEditor('reasoning'); | 863 | closeMessageEditor('reasoning'); |
| 858 | updateMessageBlock(messageId, message); | 864 | updateMessageBlock(messageId, message); |
| 865 | |||
| 866 | if (isTrueBoolean(String(args.collapse))) $(`#chat [mesid="${messageId}"] .mes_reasoning_details`).removeAttr('open'); | ||
| 867 | if (isFalseBoolean(String(args.collapse))) $(`#chat [mesid="${messageId}"] .mes_reasoning_details`).attr('open', ''); | ||
| 859 | return message.extra.reasoning; | 868 | return message.extra.reasoning; |
| 860 | }, | 869 | }, |
| 861 | })); | 870 | })); |
| @@ -8,10 +8,10 @@ export const markdownUnderscoreExt = () => { | |||
| 8 | 8 | ||
| 9 | return [{ | 9 | return [{ |
| 10 | type: 'output', | 10 | type: 'output', |
| 11 | regex: new RegExp('(<code(?:\\s+[^>]*)?>[\\s\\S]*?<\\/code>)|\\b(?<!_)_(?!_)(.*?)(?<!_)_(?!_)\\b', 'g'), | 11 | regex: new RegExp('(<code(?:\\s+[^>]*)?>[\\s\\S]*?<\\/code>|<style(?:\\s+[^>]*)?>[\\s\\S]*?<\\/style>)|\\b(?<!_)_(?!_)(.*?)(?<!_)_(?!_)\\b', 'gi'), |
| 12 | replace: function(match, codeContent, italicContent) { | 12 | replace: function(match, tagContent, italicContent) { |
| 13 | if (codeContent) { | 13 | if (tagContent) { |
| 14 | // If it's inside <code> tags, return unchanged | 14 | // If it's inside <code> or <style> tags, return unchanged |
| 15 | return match; | 15 | return match; |
| 16 | } else if (italicContent) { | 16 | } else if (italicContent) { |
| 17 | // If it's an italic group, apply the replacement | 17 | // If it's an italic group, apply the replacement |
| @@ -9,8 +9,8 @@ import { ensureImageFormatSupported, getBase64Async, humanFileSize } from './uti | |||
| 9 | export let currentUser = null; | 9 | export let currentUser = null; |
| 10 | export let accountsEnabled = false; | 10 | export let accountsEnabled = false; |
| 11 | 11 | ||
| 12 | // Extend the session every 30 minutes | 12 | // Extend the session every 10 minutes |
| 13 | const SESSION_EXTEND_INTERVAL = 30 * 60 * 1000; | 13 | const SESSION_EXTEND_INTERVAL = 10 * 60 * 1000; |
| 14 | 14 | ||
| 15 | /** | 15 | /** |
| 16 | * Enable or disable user account controls in the UI. | 16 | * Enable or disable user account controls in the UI. |
| @@ -1,7 +1,7 @@ | |||
| 1 | import { Fuse } from '../lib.js'; | 1 | import { Fuse } from '../lib.js'; |
| 2 | 2 | ||
| 3 | import { saveSettings, substituteParams, getRequestHeaders, chat_metadata, this_chid, characters, saveCharacterDebounced, menu_type, eventSource, event_types, getExtensionPromptByName, saveMetadata, getCurrentChatId, extension_prompt_roles } from '../script.js'; | 3 | import { saveSettings, substituteParams, getRequestHeaders, chat_metadata, this_chid, characters, saveCharacterDebounced, menu_type, eventSource, event_types, getExtensionPromptByName, saveMetadata, getCurrentChatId, extension_prompt_roles } from '../script.js'; |
| 4 | import { download, debounce, initScrollHeight, resetScrollHeight, parseJsonFile, extractDataFromPng, getFileBuffer, getCharaFilename, getSortableDelay, escapeRegex, PAGINATION_TEMPLATE, navigation_option, waitUntilCondition, isTrueBoolean, setValueByPath, flashHighlight, select2ModifyOptions, getSelect2OptionId, dynamicSelect2DataViaAjax, highlightRegex, select2ChoiceClickSubscribe, isFalseBoolean, getSanitizedFilename, checkOverwriteExistingData, getStringHash, parseStringArray, cancelDebounce, findChar, onlyUnique } from './utils.js'; | 4 | import { download, debounce, initScrollHeight, resetScrollHeight, parseJsonFile, extractDataFromPng, getFileBuffer, getCharaFilename, getSortableDelay, escapeRegex, PAGINATION_TEMPLATE, navigation_option, waitUntilCondition, isTrueBoolean, setValueByPath, flashHighlight, select2ModifyOptions, getSelect2OptionId, dynamicSelect2DataViaAjax, highlightRegex, select2ChoiceClickSubscribe, isFalseBoolean, getSanitizedFilename, checkOverwriteExistingData, getStringHash, parseStringArray, cancelDebounce, findChar, onlyUnique, equalsIgnoreCaseAndAccents } from './utils.js'; |
| 5 | import { extension_settings, getContext } from './extensions.js'; | 5 | import { extension_settings, getContext } from './extensions.js'; |
| 6 | import { NOTE_MODULE_NAME, metadata_keys, shouldWIAddPrompt } from './authors-note.js'; | 6 | import { NOTE_MODULE_NAME, metadata_keys, shouldWIAddPrompt } from './authors-note.js'; |
| 7 | import { isMobile } from './RossAscends-mods.js'; | 7 | import { isMobile } from './RossAscends-mods.js'; |
| @@ -3586,6 +3586,10 @@ async function renameWorldInfo(name, data) { | |||
| 3586 | console.debug('World info rename cancelled'); | 3586 | console.debug('World info rename cancelled'); |
| 3587 | return; | 3587 | return; |
| 3588 | } | 3588 | } |
| 3589 | if (equalsIgnoreCaseAndAccents(oldName, newName)) { | ||
| 3590 | toastr.warning(t`Name not accepted, as it is the same as before (ignoring case and accents).`, t`Rename World Info`); | ||
| 3591 | return; | ||
| 3592 | } | ||
| 3589 | 3593 | ||
| 3590 | const entryPreviouslySelected = selected_world_info.findIndex((e) => e === oldName); | 3594 | const entryPreviouslySelected = selected_world_info.findIndex((e) => e === oldName); |
| 3591 | 3595 | ||
| @@ -1,7 +1,7 @@ | |||
| 1 | import fs from 'node:fs'; | 1 | import fs from 'node:fs'; |
| 2 | import { Buffer } from 'node:buffer'; | 2 | import { Buffer } from 'node:buffer'; |
| 3 | 3 | ||
| 4 | import encode from 'png-chunks-encode'; | 4 | import encode from './png/encode.js'; |
| 5 | import extract from 'png-chunks-extract'; | 5 | import extract from 'png-chunks-extract'; |
| 6 | import PNGtext from 'png-chunk-text'; | 6 | import PNGtext from 'png-chunk-text'; |
| 7 | 7 | ||
| @@ -16,7 +16,7 @@ router.post('/caption-image', async (request, response) => { | |||
| 16 | const base64Data = request.body.image.split(',')[1]; | 16 | const base64Data = request.body.image.split(',')[1]; |
| 17 | const apiKey = request.body.reverse_proxy ? request.body.proxy_password : readSecret(request.user.directories, SECRET_KEYS.MAKERSUITE); | 17 | const apiKey = request.body.reverse_proxy ? request.body.proxy_password : readSecret(request.user.directories, SECRET_KEYS.MAKERSUITE); |
| 18 | const apiUrl = new URL(request.body.reverse_proxy || API_MAKERSUITE); | 18 | const apiUrl = new URL(request.body.reverse_proxy || API_MAKERSUITE); |
| 19 | const model = request.body.model || 'gemini-pro-vision'; | 19 | const model = request.body.model || 'gemini-2.0-flash'; |
| 20 | const url = `${apiUrl.origin}/v1beta/models/${model}:generateContent?key=${apiKey}`; | 20 | const url = `${apiUrl.origin}/v1beta/models/${model}:generateContent?key=${apiKey}`; |
| 21 | const body = { | 21 | const body = { |
| 22 | contents: [{ | 22 | contents: [{ |
| @@ -30,7 +30,6 @@ router.post('/caption-image', async (request, response) => { | |||
| 30 | }], | 30 | }], |
| 31 | }], | 31 | }], |
| 32 | safetySettings: GEMINI_SAFETY, | 32 | safetySettings: GEMINI_SAFETY, |
| 33 | generationConfig: { maxOutputTokens: 1000 }, | ||
| 34 | }; | 33 | }; |
| 35 | 34 | ||
| 36 | console.debug('Multimodal captioning request', model, body); | 35 | console.debug('Multimodal captioning request', model, body); |
| @@ -0,0 +1,68 @@ | |||
| 1 | import { crc32 } from 'crc'; | ||
| 2 | |||
| 3 | /** | ||
| 4 | * Encodes PNG chunks into a PNG file format buffer. | ||
| 5 | * @param {Array<{ name: string; data: Uint8Array }>} chunks Array of PNG chunks | ||
| 6 | * @returns {Uint8Array} Encoded PNG data | ||
| 7 | * @copyright Based on https://github.com/hughsk/png-chunks-encode (MIT) | ||
| 8 | */ | ||
| 9 | export default function encode(chunks) { | ||
| 10 | const uint8 = new Uint8Array(4); | ||
| 11 | const int32 = new Int32Array(uint8.buffer); | ||
| 12 | const uint32 = new Uint32Array(uint8.buffer); | ||
| 13 | |||
| 14 | let totalSize = 8; | ||
| 15 | let idx = totalSize; | ||
| 16 | |||
| 17 | for (let i = 0; i < chunks.length; i++) { | ||
| 18 | totalSize += chunks[i].data.length; | ||
| 19 | totalSize += 12; | ||
| 20 | } | ||
| 21 | |||
| 22 | const output = new Uint8Array(totalSize); | ||
| 23 | |||
| 24 | output[0] = 0x89; | ||
| 25 | output[1] = 0x50; | ||
| 26 | output[2] = 0x4E; | ||
| 27 | output[3] = 0x47; | ||
| 28 | output[4] = 0x0D; | ||
| 29 | output[5] = 0x0A; | ||
| 30 | output[6] = 0x1A; | ||
| 31 | output[7] = 0x0A; | ||
| 32 | |||
| 33 | for (let i = 0; i < chunks.length; i++) { | ||
| 34 | const { name, data } = chunks[i]; | ||
| 35 | const size = data.length; | ||
| 36 | const nameChars = [ | ||
| 37 | name.charCodeAt(0), | ||
| 38 | name.charCodeAt(1), | ||
| 39 | name.charCodeAt(2), | ||
| 40 | name.charCodeAt(3), | ||
| 41 | ]; | ||
| 42 | |||
| 43 | uint32[0] = size; | ||
| 44 | output[idx++] = uint8[3]; | ||
| 45 | output[idx++] = uint8[2]; | ||
| 46 | output[idx++] = uint8[1]; | ||
| 47 | output[idx++] = uint8[0]; | ||
| 48 | |||
| 49 | output[idx++] = nameChars[0]; | ||
| 50 | output[idx++] = nameChars[1]; | ||
| 51 | output[idx++] = nameChars[2]; | ||
| 52 | output[idx++] = nameChars[3]; | ||
| 53 | |||
| 54 | for (let j = 0; j < size;) { | ||
| 55 | output[idx++] = data[j++]; | ||
| 56 | } | ||
| 57 | |||
| 58 | const crc = crc32(data, crc32(new Uint8Array(nameChars))); | ||
| 59 | |||
| 60 | int32[0] = crc; | ||
| 61 | output[idx++] = uint8[3]; | ||
| 62 | output[idx++] = uint8[2]; | ||
| 63 | output[idx++] = uint8[1]; | ||
| 64 | output[idx++] = uint8[0]; | ||
| 65 | } | ||
| 66 | |||
| 67 | return output; | ||
| 68 | } | ||
| @@ -360,6 +360,7 @@ export function convertCohereMessages(messages, names) { | |||
| 360 | */ | 360 | */ |
| 361 | export function convertGooglePrompt(messages, model, useSysPrompt, names) { | 361 | export function convertGooglePrompt(messages, model, useSysPrompt, names) { |
| 362 | const visionSupportedModels = [ | 362 | const visionSupportedModels = [ |
| 363 | 'gemini-2.5-pro-preview-03-25', | ||
| 363 | 'gemini-2.5-pro-exp-03-25', | 364 | 'gemini-2.5-pro-exp-03-25', |
| 364 | 'gemini-2.0-pro-exp', | 365 | 'gemini-2.0-pro-exp', |
| 365 | 'gemini-2.0-pro-exp-02-05', | 366 | 'gemini-2.0-pro-exp-02-05', |
| @@ -412,7 +413,7 @@ export function convertGooglePrompt(messages, model, useSysPrompt, names) { | |||
| 412 | } | 413 | } |
| 413 | } | 414 | } |
| 414 | 415 | ||
| 415 | const system_instruction = { parts: { text: sys_prompt.trim() } }; | 416 | const system_instruction = { parts: [{ text: sys_prompt.trim() }]}; |
| 416 | const toolNameMap = {}; | 417 | const toolNameMap = {}; |
| 417 | 418 | ||
| 418 | const contents = []; | 419 | const contents = []; |