mirror of
https://github.com/SillyTavern/SillyTavern.git
synced 2025-06-05 21:59:27 +02:00
Merge branch 'staging' into ffmpeg-videobg
This commit is contained in:
43
package-lock.json
generated
43
package-lock.json
generated
@@ -48,6 +48,7 @@
|
||||
"cookie-parser": "^1.4.6",
|
||||
"cookie-session": "^2.1.0",
|
||||
"cors": "^2.8.5",
|
||||
"crc": "^4.3.2",
|
||||
"csrf-sync": "^4.0.3",
|
||||
"diff-match-patch": "^1.0.5",
|
||||
"dompurify": "^3.2.4",
|
||||
@@ -76,7 +77,6 @@
|
||||
"node-persist": "^4.0.4",
|
||||
"open": "^8.4.2",
|
||||
"png-chunk-text": "^1.0.0",
|
||||
"png-chunks-encode": "^1.0.0",
|
||||
"png-chunks-extract": "^1.0.0",
|
||||
"proxy-agent": "^6.5.0",
|
||||
"rate-limiter-flexible": "^5.0.5",
|
||||
@@ -121,7 +121,6 @@
|
||||
"@types/node": "^18.19.80",
|
||||
"@types/node-persist": "^3.1.8",
|
||||
"@types/png-chunk-text": "^1.0.3",
|
||||
"@types/png-chunks-encode": "^1.0.2",
|
||||
"@types/png-chunks-extract": "^1.0.2",
|
||||
"@types/response-time": "^2.3.8",
|
||||
"@types/select2": "^4.0.63",
|
||||
@@ -2033,13 +2032,6 @@
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/png-chunks-encode": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/png-chunks-encode/-/png-chunks-encode-1.0.2.tgz",
|
||||
"integrity": "sha512-Dxn0aXEcSg1wVeHjvNlygm/+fKBDzWMCdxJYhjGUTeefFW/jYxWcrg+W7ppLBfH44iJMqeVBHtHBwtYQUeYvgw==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/png-chunks-extract": {
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/png-chunks-extract/-/png-chunks-extract-1.0.2.tgz",
|
||||
@@ -3542,6 +3534,23 @@
|
||||
"node": ">= 0.10"
|
||||
}
|
||||
},
|
||||
"node_modules/crc": {
|
||||
"version": "4.3.2",
|
||||
"resolved": "https://registry.npmjs.org/crc/-/crc-4.3.2.tgz",
|
||||
"integrity": "sha512-uGDHf4KLLh2zsHa8D8hIQ1H/HtFQhyHrc0uhHBcoKGol/Xnb+MPYfUMw7cvON6ze/GUESTudKayDcJC5HnJv1A==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"buffer": ">=6.0.3"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"buffer": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/crc-32": {
|
||||
"version": "0.3.0",
|
||||
"resolved": "https://registry.npmjs.org/crc-32/-/crc-32-0.3.0.tgz",
|
||||
@@ -6686,16 +6695,6 @@
|
||||
"integrity": "sha512-DEROKU3SkkLGWNMzru3xPVgxyd48UGuMSZvioErCure6yhOc/pRH2ZV+SEn7nmaf7WNf3NdIpH+UTrRdKyq9Lw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/png-chunks-encode": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/png-chunks-encode/-/png-chunks-encode-1.0.0.tgz",
|
||||
"integrity": "sha512-J1jcHgbQRsIIgx5wxW9UmCymV3wwn4qCCJl6KYgEU/yHCh/L2Mwq/nMOkRPtmV79TLxRZj5w3tH69pvygFkDqA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"crc-32": "^0.3.0",
|
||||
"sliced": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"node_modules/png-chunks-extract": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/png-chunks-extract/-/png-chunks-extract-1.0.0.tgz",
|
||||
@@ -7532,12 +7531,6 @@
|
||||
"dev": true,
|
||||
"license": "ISC"
|
||||
},
|
||||
"node_modules/sliced": {
|
||||
"version": "1.0.1",
|
||||
"resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz",
|
||||
"integrity": "sha512-VZBmZP8WU3sMOZm1bdgTadsQbcscK0UM8oKxKVBs4XAhUo2Xxzm/OFMGBkPusxw9xL3Uy8LrzEqGqJhclsr0yA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/slidetoggle": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/slidetoggle/-/slidetoggle-4.0.0.tgz",
|
||||
|
@@ -38,6 +38,7 @@
|
||||
"cookie-parser": "^1.4.6",
|
||||
"cookie-session": "^2.1.0",
|
||||
"cors": "^2.8.5",
|
||||
"crc": "^4.3.2",
|
||||
"csrf-sync": "^4.0.3",
|
||||
"diff-match-patch": "^1.0.5",
|
||||
"dompurify": "^3.2.4",
|
||||
@@ -66,7 +67,6 @@
|
||||
"node-persist": "^4.0.4",
|
||||
"open": "^8.4.2",
|
||||
"png-chunk-text": "^1.0.0",
|
||||
"png-chunks-encode": "^1.0.0",
|
||||
"png-chunks-extract": "^1.0.0",
|
||||
"proxy-agent": "^6.5.0",
|
||||
"rate-limiter-flexible": "^5.0.5",
|
||||
@@ -151,7 +151,6 @@
|
||||
"@types/node": "^18.19.80",
|
||||
"@types/node-persist": "^3.1.8",
|
||||
"@types/png-chunk-text": "^1.0.3",
|
||||
"@types/png-chunks-encode": "^1.0.2",
|
||||
"@types/png-chunks-extract": "^1.0.2",
|
||||
"@types/response-time": "^2.3.8",
|
||||
"@types/select2": "^4.0.63",
|
||||
|
@@ -2432,7 +2432,7 @@
|
||||
</div>
|
||||
<div class="flex1">
|
||||
<h4 data-i18n="Server url">Server URL</h4>
|
||||
<small data-i18n="Example: 127.0.0.1:5000">Example: http://127.0.0.1:5000</small>
|
||||
<small data-i18n="Example: http://127.0.0.1:5000">Example: http://127.0.0.1:5000</small>
|
||||
<input id="generic_api_url_text" name="generic_api_url" class="text_pole wide100p" value="" autocomplete="off" data-server-history="generic">
|
||||
</div>
|
||||
<datalist id="generic_model_fill"></datalist>
|
||||
@@ -2461,7 +2461,7 @@
|
||||
</div>
|
||||
<div class="flex1">
|
||||
<h4 data-i18n="Server url">Server URL</h4>
|
||||
<small data-i18n="Example: 127.0.0.1:5000">Example: http://127.0.0.1:5000</small>
|
||||
<small data-i18n="Example: http://127.0.0.1:5000">Example: http://127.0.0.1:5000</small>
|
||||
<input id="textgenerationwebui_api_url_text" name="textgenerationwebui_api_url" class="text_pole wide100p" value="" autocomplete="off" data-server-history="ooba_blocking">
|
||||
</div>
|
||||
<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 @@
|
||||
</div>
|
||||
<div class="flex1">
|
||||
<h4 data-i18n="API url">API URL</h4>
|
||||
<small data-i18n="Example: 127.0.0.1:8000">Example: http://127.0.0.1:8000</small>
|
||||
<small data-i18n="Example: http://127.0.0.1:8000">Example: http://127.0.0.1:8000</small>
|
||||
<input id="vllm_api_url_text" class="text_pole wide100p" value="" autocomplete="off" data-server-history="vllm">
|
||||
</div>
|
||||
<div>
|
||||
@@ -2580,7 +2580,7 @@
|
||||
</div>
|
||||
<div class="flex1">
|
||||
<h4 data-i18n="API url">API URL</h4>
|
||||
<small data-i18n="Example: 127.0.0.1:5000">Example: http://127.0.0.1:5000</small>
|
||||
<small data-i18n="Example: http://127.0.0.1:5000">Example: http://127.0.0.1:5000</small>
|
||||
<input id="aphrodite_api_url_text" class="text_pole wide100p" value="" autocomplete="off" data-server-history="aphrodite">
|
||||
</div>
|
||||
<div>
|
||||
@@ -2609,7 +2609,7 @@
|
||||
</div>
|
||||
<div class="flex1">
|
||||
<h4 data-i18n="API url">API URL</h4>
|
||||
<small data-i18n="Example: 127.0.0.1:8080">Example: http://127.0.0.1:8080</small>
|
||||
<small data-i18n="Example: http://127.0.0.1:8080">Example: http://127.0.0.1:8080</small>
|
||||
<input id="llamacpp_api_url_text" class="text_pole wide100p" value="" autocomplete="off" data-server-history="llamacpp">
|
||||
</div>
|
||||
</div>
|
||||
@@ -2621,7 +2621,7 @@
|
||||
</div>
|
||||
<div class="flex1">
|
||||
<h4 data-i18n="API url">API URL</h4>
|
||||
<small data-i18n="Example: 127.0.0.1:11434">Example: http://127.0.0.1:11434</small>
|
||||
<small data-i18n="Example: http://127.0.0.1:11434">Example: http://127.0.0.1:11434</small>
|
||||
<input id="ollama_api_url_text" class="text_pole wide100p" value="" autocomplete="off" data-server-history="ollama">
|
||||
</div>
|
||||
<div class="flex1">
|
||||
@@ -2656,7 +2656,7 @@
|
||||
</div>
|
||||
<div class="flex1">
|
||||
<h4 data-i18n="API url">API URL</h4>
|
||||
<small data-i18n="Example: 127.0.0.1:5000">Example: http://127.0.0.1:5000</small>
|
||||
<small data-i18n="Example: http://127.0.0.1:5000">Example: http://127.0.0.1:5000</small>
|
||||
<input id="tabby_api_url_text" class="text_pole wide100p" value="" autocomplete="off" data-server-history="tabby">
|
||||
</div>
|
||||
<div class="flex1">
|
||||
@@ -2708,7 +2708,7 @@
|
||||
</div>
|
||||
<div class="flex1">
|
||||
<h4 data-i18n="API url">API URL</h4>
|
||||
<small data-i18n="Example: 127.0.0.1:5001">Example: http://127.0.0.1:5001</small>
|
||||
<small data-i18n="Example: http://127.0.0.1:5001">Example: http://127.0.0.1:5001</small>
|
||||
<input id="koboldcpp_api_url_text" class="text_pole wide100p" value="" autocomplete="off" data-server-history="koboldcpp">
|
||||
</div>
|
||||
</div>
|
||||
@@ -3140,6 +3140,7 @@
|
||||
<option value="gemma-3-27b-it">Gemma 3 27B</option>
|
||||
</optgroup>
|
||||
<optgroup label="Subversions">
|
||||
<option value="gemini-2.5-pro-preview-03-25">Gemini 2.5 Pro Preview 2025-03-25</option>
|
||||
<option value="gemini-2.5-pro-exp-03-25">Gemini 2.5 Pro Experimental 2025-03-25</option>
|
||||
<option value="gemini-2.0-pro-exp">Gemini 2.0 Pro Experimental</option>
|
||||
<option value="gemini-2.0-pro-exp-02-05">Gemini 2.0 Pro Experimental 2025-02-05</option>
|
||||
@@ -3248,28 +3249,29 @@
|
||||
<option value="qwen-2.5-32b">qwen-2.5-32b</option>
|
||||
<option value="qwen-2.5-coder-32b">qwen-2.5-coder-32b</option>
|
||||
</optgroup>
|
||||
<optgroup label="DeepSeek / Alibaba Cloud">
|
||||
<optgroup label="DeepSeek">
|
||||
<option value="deepseek-r1-distill-qwen-32b">deepseek-r1-distill-qwen-32b</option>
|
||||
</optgroup>
|
||||
<optgroup label="DeepSeek / Meta">
|
||||
<option value="deepseek-r1-distill-llama-70b">deepseek-r1-distill-llama-70b</option>
|
||||
</optgroup>
|
||||
<optgroup label="Google">
|
||||
<option value="gemma2-9b-it">gemma2-9b-it</option>
|
||||
</optgroup>
|
||||
<optgroup label="Meta">
|
||||
<option value="llama-3.1-8b-instant">llama-3.1-8b-instant </option>
|
||||
<option value="meta-llama/llama-4-scout-17b-16e-instruct">meta-llama/llama-4-scout-17b-16e-instruct</option>
|
||||
<option value="meta-llama/llama-4-maverick-17b-128e-instruct">meta-llama/llama-4-maverick-17b-128e-instruct</option>
|
||||
<option value="llama-3.1-8b-instant">llama-3.1-8b-instant</option>
|
||||
<option value="llama-3.2-11b-vision-preview">llama-3.2-11b-vision-preview </option>
|
||||
<option value="llama-3.2-1b-preview">llama-3.2-1b-preview </option>
|
||||
<option value="llama-3.2-3b-preview">llama-3.2-3b-preview </option>
|
||||
<option value="llama-3.2-90b-vision-preview">llama-3.2-90b-vision-preview </option>
|
||||
<option value="llama-3.3-70b-specdec">llama-3.3-70b-specdec </option>
|
||||
<option value="llama-3.3-70b-specdec">llama-3.3-70b-specdec</option>
|
||||
<option value="llama-3.3-70b-versatile">llama-3.3-70b-versatile </option>
|
||||
<option value="llama-guard-3-8b">llama-guard-3-8b </option>
|
||||
<option value="llama3-70b-8192">llama3-70b-8192 </option>
|
||||
<option value="llama3-8b-8192">llama3-8b-8192 </option>
|
||||
<option value="llama-guard-3-8b">llama-guard-3-8b</option>
|
||||
<option value="llama3-70b-8192">llama3-70b-8192</option>
|
||||
<option value="llama3-8b-8192">llama3-8b-8192</option>
|
||||
</optgroup>
|
||||
<optgroup label="Mistral AI">
|
||||
<option value="mistral-saba-24b">mistral-saba-24b</option>
|
||||
<option value="mixtral-8x7b-32768">mixtral-8x7b-32768</option>
|
||||
</optgroup>
|
||||
</select>
|
||||
@@ -6450,7 +6452,7 @@
|
||||
<div class="mes_text"></div>
|
||||
<div class="mes_img_container">
|
||||
<div class="mes_img_controls">
|
||||
<div title="Enlarge" class="right_menu_button fa-lg fa-solid fa-magnifying-glass mes_img_enlarge" data-i18n="[title]Enlarge"></div>
|
||||
<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>
|
||||
<div title="Caption" class="right_menu_button fa-lg fa-solid fa-envelope-open-text mes_img_caption" data-i18n="[title]Caption"></div>
|
||||
<div title="Delete" class="right_menu_button fa-lg fa-solid fa-trash-can mes_img_delete" data-i18n="[title]Delete"></div>
|
||||
</div>
|
||||
|
@@ -318,23 +318,23 @@
|
||||
"flag": "وضع علامة",
|
||||
"API key (optional)": "مفتاح API (اختياري)",
|
||||
"Server url": "رابط الخادم",
|
||||
"Example: 127.0.0.1:5000": "مثال: 127.0.0.1:5000",
|
||||
"Example: http://127.0.0.1:5000": "مثال: http://127.0.0.1:5000",
|
||||
"Custom model (optional)": "نموذج مخصص (اختياري)",
|
||||
"vllm-project/vllm": "vllm-project/vllm (وضع غلاف OpenAI API)",
|
||||
"vLLM API key": "مفتاح واجهة برمجة التطبيقات vLLM",
|
||||
"Example: 127.0.0.1:8000": "مثال: http://127.0.0.1:8000",
|
||||
"Example: http://127.0.0.1:8000": "مثال: http://127.0.0.1:8000",
|
||||
"vLLM Model": "نموذج vLLM",
|
||||
"PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (وضع التغليف لواجهة برمجة التطبيقات OpenAI)",
|
||||
"Aphrodite API key": "مفتاح واجهة برمجة التطبيقات Aphrodite",
|
||||
"Aphrodite Model": "نموذج أفروديت",
|
||||
"ggerganov/llama.cpp": "ggerganov/llama.cpp (خادم إخراج)",
|
||||
"Example: 127.0.0.1:8080": "مثال: 127.0.0.1:8080",
|
||||
"Example: 127.0.0.1:11434": "مثال: 127.0.0.1:11434",
|
||||
"Example: http://127.0.0.1:8080": "مثال: http://127.0.0.1:8080",
|
||||
"Example: http://127.0.0.1:11434": "مثال: http://127.0.0.1:11434",
|
||||
"Ollama Model": "نموذج Ollama",
|
||||
"Download": "تحميل",
|
||||
"Tabby API key": "مفتاح API لـ Tabby",
|
||||
"koboldcpp API key (optional)": "مفتاح koboldcpp API (اختياري)",
|
||||
"Example: 127.0.0.1:5001": "مثال: 127.0.0.1:5001",
|
||||
"Example: http://127.0.0.1:5001": "مثال: http://127.0.0.1:5001",
|
||||
"Authorize": "تفويض",
|
||||
"Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "احصل على رمز واجهة برمجة التطبيقات الخاص بك لموزع الاتصالات باستخدام تدفق OAuth. سيتم توجيهك إلى openrouter.ai",
|
||||
"Bypass status check": "تجاوز فحص الحالة",
|
||||
|
@@ -318,23 +318,23 @@
|
||||
"flag": "Flagge",
|
||||
"API key (optional)": "API-Schlüssel (optional)",
|
||||
"Server url": "Server-URL",
|
||||
"Example: 127.0.0.1:5000": "Beispiel: 127.0.0.1:5000",
|
||||
"Example: http://127.0.0.1:5000": "Beispiel: http://127.0.0.1:5000",
|
||||
"Custom model (optional)": "Benutzerdefiniertes Modell (optional)",
|
||||
"vllm-project/vllm": "vllm-project/vllm (OpenAI API-Wrappermodus)",
|
||||
"vLLM API key": "vLLM-API-Schlüssel",
|
||||
"Example: 127.0.0.1:8000": "Beispiel: http://127.0.0.1:8000",
|
||||
"Example: http://127.0.0.1:8000": "Beispiel: http://127.0.0.1:8000",
|
||||
"vLLM Model": "vLLM-Modell",
|
||||
"PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (Wrappermodus für OpenAI API)",
|
||||
"Aphrodite API key": "Aphrodite API-Schlüssel",
|
||||
"Aphrodite Model": "Aphrodite-Modell",
|
||||
"ggerganov/llama.cpp": "ggerganov/llama.cpp (Output-Server)",
|
||||
"Example: 127.0.0.1:8080": "Beispiel: 127.0.0.1:8080",
|
||||
"Example: 127.0.0.1:11434": "Beispiel: 127.0.0.1:11434",
|
||||
"Example: http://127.0.0.1:8080": "Beispiel: http://127.0.0.1:8080",
|
||||
"Example: http://127.0.0.1:11434": "Beispiel: http://127.0.0.1:11434",
|
||||
"Ollama Model": "Ollama-Modell",
|
||||
"Download": "Herunterladen",
|
||||
"Tabby API key": "Tabby API-Schlüssel",
|
||||
"koboldcpp API key (optional)": "koboldcpp API-Schlüssel (optional)",
|
||||
"Example: 127.0.0.1:5001": "Beispiel: 127.0.0.1:5001",
|
||||
"Example: http://127.0.0.1:5001": "Beispiel: http://127.0.0.1:5001",
|
||||
"Authorize": "Autorisieren",
|
||||
"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",
|
||||
"Bypass status check": "Umgehe Statusüberprüfung",
|
||||
|
@@ -318,23 +318,23 @@
|
||||
"flag": "bandera",
|
||||
"API key (optional)": "Clave API (opcional)",
|
||||
"Server url": "URL del servidor",
|
||||
"Example: 127.0.0.1:5000": "Ejemplo: 127.0.0.1:5000",
|
||||
"Example: http://127.0.0.1:5000": "Ejemplo: http://127.0.0.1:5000",
|
||||
"Custom model (optional)": "Modelo personalizado (opcional)",
|
||||
"vllm-project/vllm": "vllm-project/vllm (modo contenedor de API OpenAI)",
|
||||
"vLLM API key": "Clave API vLLM",
|
||||
"Example: 127.0.0.1:8000": "Ejemplo: http://127.0.0.1:8000",
|
||||
"Example: http://127.0.0.1:8000": "Ejemplo: http://127.0.0.1:8000",
|
||||
"vLLM Model": "Modelo vLLM",
|
||||
"PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (Modo envolvente para API de OpenAI)",
|
||||
"Aphrodite API key": "Clave de API de Aphrodite",
|
||||
"Aphrodite Model": "Modelo Afrodita",
|
||||
"ggerganov/llama.cpp": "ggerganov/llama.cpp (Servidor de salida)",
|
||||
"Example: 127.0.0.1:8080": "Ejemplo: 127.0.0.1:8080",
|
||||
"Example: 127.0.0.1:11434": "Ejemplo: 127.0.0.1:11434",
|
||||
"Example: http://127.0.0.1:8080": "Ejemplo: http://127.0.0.1:8080",
|
||||
"Example: http://127.0.0.1:11434": "Ejemplo: http://127.0.0.1:11434",
|
||||
"Ollama Model": "Modelo Ollama",
|
||||
"Download": "Descargar",
|
||||
"Tabby API key": "Clave API de Tabby",
|
||||
"koboldcpp API key (optional)": "Clave API de koboldcpp (opcional)",
|
||||
"Example: 127.0.0.1:5001": "Ejemplo: 127.0.0.1:5001",
|
||||
"Example: http://127.0.0.1:5001": "Ejemplo: http://127.0.0.1:5001",
|
||||
"Authorize": "Autorizar",
|
||||
"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",
|
||||
"Bypass status check": "Saltar la verificación del estado",
|
||||
|
@@ -301,23 +301,23 @@
|
||||
"flag": "fanion",
|
||||
"API key (optional)": "Clé API (optionnelle)",
|
||||
"Server url": "URL du serveur",
|
||||
"Example: 127.0.0.1:5000": "Exemple : 127.0.0.1:5000",
|
||||
"Example: http://127.0.0.1:5000": "Exemple : http://127.0.0.1:5000",
|
||||
"Custom model (optional)": "Modèle personnalisé (optionnel)",
|
||||
"vllm-project/vllm": "vllm-project/vllm (mode wrapper de l'API OpenAI)",
|
||||
"vLLM API key": "Clé API vLLM",
|
||||
"Example: 127.0.0.1:8000": "Exemple : http://127.0.0.1:8000",
|
||||
"Example: http://127.0.0.1:8000": "Exemple : http://127.0.0.1:8000",
|
||||
"vLLM Model": "Modèle vLLM",
|
||||
"PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (mode wrapper pour l'API OpenAI)",
|
||||
"Aphrodite API key": "Clé API Aphrodite",
|
||||
"Aphrodite Model": "Modèle Aphrodite",
|
||||
"ggerganov/llama.cpp": "ggerganov/llama.cpp",
|
||||
"Example: 127.0.0.1:8080": "Exemple : 127.0.0.1:8080",
|
||||
"Example: 127.0.0.1:11434": "Exemple : 127.0.0.1:11434",
|
||||
"Example: http://127.0.0.1:8080": "Exemple : http://127.0.0.1:8080",
|
||||
"Example: http://127.0.0.1:11434": "Exemple : http://127.0.0.1:11434",
|
||||
"Ollama Model": "Modèle Ollama",
|
||||
"Download": "Télécharger",
|
||||
"Tabby API key": "Clé API de Tabby",
|
||||
"koboldcpp API key (optional)": "Clé API koboldcpp (facultatif)",
|
||||
"Example: 127.0.0.1:5001": "Exemple : 127.0.0.1:5001",
|
||||
"Example: http://127.0.0.1:5001": "Exemple : http://127.0.0.1:5001",
|
||||
"Authorize": "Autoriser",
|
||||
"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",
|
||||
"Bypass status check": "Contourner la vérification de l'état",
|
||||
|
@@ -318,23 +318,23 @@
|
||||
"flag": "merki",
|
||||
"API key (optional)": "API lykill (valkvæmt)",
|
||||
"Server url": "URL þjóns",
|
||||
"Example: 127.0.0.1:5000": "Dæmi: 127.0.0.1:5000",
|
||||
"Example: http://127.0.0.1:5000": "Dæmi: http://127.0.0.1:5000",
|
||||
"Custom model (optional)": "Sérsniðið módel (valkvæmt)",
|
||||
"vllm-project/vllm": "vllm-project/vllm (OpenAI API umbúðastilling)",
|
||||
"vLLM API key": "vLLM API lykill",
|
||||
"Example: 127.0.0.1:8000": "Dæmi: http://127.0.0.1:8000",
|
||||
"Example: http://127.0.0.1:8000": "Dæmi: http://127.0.0.1:8000",
|
||||
"vLLM Model": "vLLM líkan",
|
||||
"PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (OpenAI forritunargrensl)",
|
||||
"Aphrodite API key": "Aphrodite API lykill",
|
||||
"Aphrodite Model": "Afródíta fyrirmynd",
|
||||
"ggerganov/llama.cpp": "ggerganov/llama.cpp (úttak þjónn)",
|
||||
"Example: 127.0.0.1:8080": "Dæmi: 127.0.0.1:8080",
|
||||
"Example: 127.0.0.1:11434": "Dæmi: 127.0.0.1:11434",
|
||||
"Example: http://127.0.0.1:8080": "Dæmi: http://127.0.0.1:8080",
|
||||
"Example: http://127.0.0.1:11434": "Dæmi: http://127.0.0.1:11434",
|
||||
"Ollama Model": "Ollama módel",
|
||||
"Download": "Niðurhal",
|
||||
"Tabby API key": "Tabby API lykill",
|
||||
"koboldcpp API key (optional)": "koboldcpp API lykill (valfrjálst)",
|
||||
"Example: 127.0.0.1:5001": "Dæmi: 127.0.0.1:5001",
|
||||
"Example: http://127.0.0.1:5001": "Dæmi: http://127.0.0.1:5001",
|
||||
"Authorize": "Heimild",
|
||||
"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",
|
||||
"Bypass status check": "Hlaupa framhjá stöðutík",
|
||||
|
@@ -318,23 +318,23 @@
|
||||
"flag": "bandiera",
|
||||
"API key (optional)": "Chiave API (opzionale)",
|
||||
"Server url": "URL del server",
|
||||
"Example: 127.0.0.1:5000": "Esempio: 127.0.0.1:5000",
|
||||
"Example: http://127.0.0.1:5000": "Esempio: http://127.0.0.1:5000",
|
||||
"Custom model (optional)": "Modello personalizzato (opzionale)",
|
||||
"vllm-project/vllm": "vllm-project/vllm (modalità wrapper API OpenAI)",
|
||||
"vLLM API key": "Chiave API vLLM",
|
||||
"Example: 127.0.0.1:8000": "Esempio: http://127.0.0.1:8000",
|
||||
"Example: http://127.0.0.1:8000": "Esempio: http://127.0.0.1:8000",
|
||||
"vLLM Model": "Modello vLLM",
|
||||
"PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (Modalità wrapper per l'API OpenAI)",
|
||||
"Aphrodite API key": "Chiave API di Aphrodite",
|
||||
"Aphrodite Model": "Modello di Afrodite",
|
||||
"ggerganov/llama.cpp": "ggerganov/llama.cpp (Server di output)",
|
||||
"Example: 127.0.0.1:8080": "Esempio: 127.0.0.1:8080",
|
||||
"Example: 127.0.0.1:11434": "Esempio: 127.0.0.1:11434",
|
||||
"Example: http://127.0.0.1:8080": "Esempio: http://127.0.0.1:8080",
|
||||
"Example: http://127.0.0.1:11434": "Esempio: http://127.0.0.1:11434",
|
||||
"Ollama Model": "Modello Ollama",
|
||||
"Download": "Scarica",
|
||||
"Tabby API key": "Chiave API di Tabby",
|
||||
"koboldcpp API key (optional)": "Chiave API koboldcpp (opzionale)",
|
||||
"Example: 127.0.0.1:5001": "Esempio: 127.0.0.1:5001",
|
||||
"Example: http://127.0.0.1:5001": "Esempio: http://127.0.0.1:5001",
|
||||
"Authorize": "Autorizzare",
|
||||
"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",
|
||||
"Bypass status check": "Ignora controllo stato",
|
||||
|
@@ -318,23 +318,23 @@
|
||||
"flag": "フラグ",
|
||||
"API key (optional)": "APIキー(オプション)",
|
||||
"Server url": "サーバーURL",
|
||||
"Example: 127.0.0.1:5000": "例: 127.0.0.1:5000",
|
||||
"Example: http://127.0.0.1:5000": "例: http://127.0.0.1:5000",
|
||||
"Custom model (optional)": "カスタムモデル(オプション)",
|
||||
"vllm-project/vllm": "vllm-project/vllm (OpenAI API ラッパーモード)",
|
||||
"vLLM API key": "vLLM API キー",
|
||||
"Example: 127.0.0.1:8000": "例: http://127.0.0.1:8000",
|
||||
"Example: http://127.0.0.1:8000": "例: http://127.0.0.1:8000",
|
||||
"vLLM Model": "vLLM モデル",
|
||||
"PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine(OpenAI APIエンドポイントのパッケージングモード)",
|
||||
"Aphrodite API key": "アフロディーテAPIキー",
|
||||
"Aphrodite Model": "アフロディーテモデル",
|
||||
"ggerganov/llama.cpp": "ggerganov/llama.cpp(出力サーバー)",
|
||||
"Example: 127.0.0.1:8080": "例: 127.0.0.1:8080",
|
||||
"Example: 127.0.0.1:11434": "例: 127.0.0.1:11434",
|
||||
"Example: http://127.0.0.1:8080": "例: http://127.0.0.1:8080",
|
||||
"Example: http://127.0.0.1:11434": "例: http://127.0.0.1:11434",
|
||||
"Ollama Model": "Ollamaモデル",
|
||||
"Download": "ダウンロード",
|
||||
"Tabby API key": "TabbyのAPIキー",
|
||||
"koboldcpp API key (optional)": "koboldcpp API キー (オプション)",
|
||||
"Example: 127.0.0.1:5001": "例: 127.0.0.1:5001",
|
||||
"Example: http://127.0.0.1:5001": "例: http://127.0.0.1:5001",
|
||||
"Authorize": "承認",
|
||||
"Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "OAuthフローを使用してOpenRouter APIトークンを取得します。 openrouter.aiにリダイレクトされます",
|
||||
"Bypass status check": "ステータスのチェックをバイパスする",
|
||||
|
@@ -320,23 +320,23 @@
|
||||
"flag": "깃발",
|
||||
"API key (optional)": "API 키 (선택 사항)",
|
||||
"Server url": "서버 URL",
|
||||
"Example: 127.0.0.1:5000": "예시: 127.0.0.1:5000",
|
||||
"Example: http://127.0.0.1:5000": "예시: http://127.0.0.1:5000",
|
||||
"Custom model (optional)": "사용자 정의 모델 (선택 사항)",
|
||||
"vllm-project/vllm": "vllm-project/vllm(OpenAI API 래퍼 모드)",
|
||||
"vLLM API key": "vLLM API 키",
|
||||
"Example: 127.0.0.1:8000": "예: http://127.0.0.1:8000",
|
||||
"Example: http://127.0.0.1:8000": "예: http://127.0.0.1:8000",
|
||||
"vLLM Model": "vLLM 모델",
|
||||
"PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (OpenAI API의 래퍼 모드)",
|
||||
"Aphrodite API key": "Aphrodite API 키",
|
||||
"Aphrodite Model": "Aphrodite 모델",
|
||||
"ggerganov/llama.cpp": "ggerganov/llama.cpp (출력 서버)",
|
||||
"Example: 127.0.0.1:8080": "예: 127.0.0.1:8080",
|
||||
"Example: 127.0.0.1:11434": "예: 127.0.0.1:11434",
|
||||
"Example: http://127.0.0.1:8080": "예: http://127.0.0.1:8080",
|
||||
"Example: http://127.0.0.1:11434": "예: http://127.0.0.1:11434",
|
||||
"Ollama Model": "Ollama 모델",
|
||||
"Download": "다운로드",
|
||||
"Tabby API key": "Tabby API 키",
|
||||
"koboldcpp API key (optional)": "koboldcpp API 키(선택사항)",
|
||||
"Example: 127.0.0.1:5001": "예: 127.0.0.1:5001",
|
||||
"Example: http://127.0.0.1:5001": "예: http://127.0.0.1:5001",
|
||||
"Authorize": "승인하기",
|
||||
"Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "OAuth 플로우를 사용하여 OpenRouter API 토큰을 가져옵니다. openrouter.ai로 리디렉션됩니다.",
|
||||
"Legacy API (pre-OAI, no streaming)": "레거시 API (OAI 이전, 스트리밍 없음)",
|
||||
|
@@ -318,23 +318,23 @@
|
||||
"flag": "vlag",
|
||||
"API key (optional)": "API-sleutel (optioneel)",
|
||||
"Server url": "Server-URL",
|
||||
"Example: 127.0.0.1:5000": "Voorbeeld: 127.0.0.1:5000",
|
||||
"Example: http://127.0.0.1:5000": "Voorbeeld: http://127.0.0.1:5000",
|
||||
"Custom model (optional)": "Aangepast model (optioneel)",
|
||||
"vllm-project/vllm": "vllm-project/vllm (OpenAI API-wrappermodus)",
|
||||
"vLLM API key": "vLLM API-sleutel",
|
||||
"Example: 127.0.0.1:8000": "Voorbeeld: http://127.0.0.1:8000",
|
||||
"Example: http://127.0.0.1:8000": "Voorbeeld: http://127.0.0.1:8000",
|
||||
"vLLM Model": "vLLM-model",
|
||||
"PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (Wrappermodus voor OpenAI API)",
|
||||
"Aphrodite API key": "Aphrodite API-sleutel",
|
||||
"Aphrodite Model": "Aphrodite-model",
|
||||
"ggerganov/llama.cpp": "ggerganov/llama.cpp (Output-server)",
|
||||
"Example: 127.0.0.1:8080": "Voorbeeld: 127.0.0.1:8080",
|
||||
"Example: 127.0.0.1:11434": "Voorbeeld: 127.0.0.1:11434",
|
||||
"Example: http://127.0.0.1:8080": "Voorbeeld: http://127.0.0.1:8080",
|
||||
"Example: http://127.0.0.1:11434": "Voorbeeld: http://127.0.0.1:11434",
|
||||
"Ollama Model": "Ollama-model",
|
||||
"Download": "Downloaden",
|
||||
"Tabby API key": "Tabby API-sleutel",
|
||||
"koboldcpp API key (optional)": "koboldcpp API-sleutel (optioneel)",
|
||||
"Example: 127.0.0.1:5001": "Voorbeeld: 127.0.0.1:5001",
|
||||
"Example: http://127.0.0.1:5001": "Voorbeeld: http://127.0.0.1:5001",
|
||||
"Authorize": "Toestemming geven",
|
||||
"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",
|
||||
"Bypass status check": "Omzeil statuscontrole",
|
||||
|
@@ -318,23 +318,23 @@
|
||||
"flag": "bandeira",
|
||||
"API key (optional)": "Chave da API (opcional)",
|
||||
"Server url": "URL do servidor",
|
||||
"Example: 127.0.0.1:5000": "Exemplo: 127.0.0.1:5000",
|
||||
"Example: http://127.0.0.1:5000": "Exemplo: http://127.0.0.1:5000",
|
||||
"Custom model (optional)": "Modelo personalizado (opcional)",
|
||||
"vllm-project/vllm": "vllm-project/vllm (modo wrapper da API OpenAI)",
|
||||
"vLLM API key": "Chave de API vLLM",
|
||||
"Example: 127.0.0.1:8000": "Exemplo: http://127.0.0.1:8000",
|
||||
"Example: http://127.0.0.1:8000": "Exemplo: http://127.0.0.1:8000",
|
||||
"vLLM Model": "Modelo vLLM",
|
||||
"PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (Modo Wrapper para API OpenAI)",
|
||||
"Aphrodite API key": "Chave da API Aphrodite",
|
||||
"Aphrodite Model": "Modelo Afrodite",
|
||||
"ggerganov/llama.cpp": "ggerganov/llama.cpp (Servidor de Saída)",
|
||||
"Example: 127.0.0.1:8080": "Exemplo: 127.0.0.1:8080",
|
||||
"Example: 127.0.0.1:11434": "Exemplo: 127.0.0.1:11434",
|
||||
"Example: http://127.0.0.1:8080": "Exemplo: http://127.0.0.1:8080",
|
||||
"Example: http://127.0.0.1:11434": "Exemplo: http://127.0.0.1:11434",
|
||||
"Ollama Model": "Modelo Ollama",
|
||||
"Download": "Baixar",
|
||||
"Tabby API key": "Chave da API do Tabby",
|
||||
"koboldcpp API key (optional)": "Chave API koboldcpp (opcional)",
|
||||
"Example: 127.0.0.1:5001": "Exemplo: 127.0.0.1:5001",
|
||||
"Example: http://127.0.0.1:5001": "Exemplo: http://127.0.0.1:5001",
|
||||
"Authorize": "Autorizar",
|
||||
"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",
|
||||
"Bypass status check": "Ignorar verificação de status",
|
||||
|
@@ -109,10 +109,10 @@
|
||||
"Get it here:": "Получите здесь:",
|
||||
"Register": "Зарегистрироваться",
|
||||
"TogetherAI Model": "Модель TogetherAI",
|
||||
"Example: 127.0.0.1:5001": "Пример: http://127.0.0.1:5001",
|
||||
"Example: http://127.0.0.1:5001": "Пример: http://127.0.0.1:5001",
|
||||
"ggerganov/llama.cpp": "ggerganov/llama.cpp (сервер вывода)",
|
||||
"Example: 127.0.0.1:8080": "Пример: http://127.0.0.1:8080",
|
||||
"Example: 127.0.0.1:11434": "Пример: http://127.0.0.1:11434",
|
||||
"Example: http://127.0.0.1:8080": "Пример: http://127.0.0.1:8080",
|
||||
"Example: http://127.0.0.1:11434": "Пример: http://127.0.0.1:11434",
|
||||
"Ollama Model": "Модель Ollama",
|
||||
"Download": "Скачать",
|
||||
"TogetherAI API Key": "TogetherAI API-ключ",
|
||||
@@ -133,7 +133,7 @@
|
||||
"Server url": "URL-адрес сервера",
|
||||
"Custom model (optional)": "Пользовательская модель (необязательно)",
|
||||
"Bypass API status check": "Обход проверки статуса API",
|
||||
"Example: 127.0.0.1:5000": "Пример: http://127.0.0.1:5000",
|
||||
"Example: http://127.0.0.1:5000": "Пример: http://127.0.0.1:5000",
|
||||
"Bypass status check": "Обход проверки статуса",
|
||||
"Mancer API key": "Ключ от Mancer API",
|
||||
"to get your OpenAI API key.": "для получения ключа от API OpenAI",
|
||||
@@ -1252,7 +1252,6 @@
|
||||
"DreamGen Model": "Модель DreamGen",
|
||||
"vllm-project/vllm": "vllm-project/vllm (режим враппера OpenAI API)",
|
||||
"vLLM API key": "Ключ от API vLLM",
|
||||
"Example: 127.0.0.1:8000": "Example: http://127.0.0.1:8000",
|
||||
"vLLM Model": "Модель vLLM",
|
||||
"Aphrodite Model": "Модель Aphrodite",
|
||||
"Peek a password": "Посмотреть пароль",
|
||||
@@ -2033,7 +2032,7 @@
|
||||
"[Currently loaded]": "[Загруженная сейчас]",
|
||||
"Search providers...": "Искать по провайдерам...",
|
||||
"Automatically chooses an alternative provider if chosen providers can't serve your request.": "Автоматически переключаться на другого провайдера, если текущий не может обслужить запрос.",
|
||||
"Example: 127.0.0.1:8000": "Пример: 127.0.0.1:8000",
|
||||
"Example: http://127.0.0.1:8000": "Пример: http://127.0.0.1:8000",
|
||||
"Edit a connection profile": "Редактировать профиль соединения",
|
||||
"System Prompt Name": "Название системного промпта",
|
||||
"Use System Prompt": "Использовать системный промпт",
|
||||
|
@@ -318,23 +318,23 @@
|
||||
"flag": "прапорцем",
|
||||
"API key (optional)": "Ключ API (необов'язково)",
|
||||
"Server url": "URL-адреса сервера",
|
||||
"Example: 127.0.0.1:5000": "Приклад: 127.0.0.1:5000",
|
||||
"Example: http://127.0.0.1:5000": "Приклад: http://127.0.0.1:5000",
|
||||
"Custom model (optional)": "Власна модель (необов'язково)",
|
||||
"vllm-project/vllm": "vllm-project/vllm (режим оболонки OpenAI API)",
|
||||
"vLLM API key": "Ключ API vLLM",
|
||||
"Example: 127.0.0.1:8000": "Приклад: http://127.0.0.1:8000",
|
||||
"Example: http://127.0.0.1:8000": "Приклад: http://127.0.0.1:8000",
|
||||
"vLLM Model": "Модель vLLM",
|
||||
"PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (режим OpenAI API)",
|
||||
"Aphrodite API key": "Ключ API для Aphrodite",
|
||||
"Aphrodite Model": "Модель Афродіта",
|
||||
"ggerganov/llama.cpp": "ggerganov/llama.cpp (сервер виведення)",
|
||||
"Example: 127.0.0.1:8080": "Приклад: 127.0.0.1:8080",
|
||||
"Example: 127.0.0.1:11434": "Приклад: 127.0.0.1:11434",
|
||||
"Example: http://127.0.0.1:8080": "Приклад: http://127.0.0.1:8080",
|
||||
"Example: http://127.0.0.1:11434": "Приклад: http://127.0.0.1:11434",
|
||||
"Ollama Model": "Модель Ollama",
|
||||
"Download": "Завантажити",
|
||||
"Tabby API key": "Ключ API для Tabby",
|
||||
"koboldcpp API key (optional)": "API-ключ koboldcpp (необов’язково)",
|
||||
"Example: 127.0.0.1:5001": "Приклад: 127.0.0.1:5001",
|
||||
"Example: http://127.0.0.1:5001": "Приклад: http://127.0.0.1:5001",
|
||||
"Authorize": "Авторизувати",
|
||||
"Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "Отримайте свій токен API OpenRouter за допомогою OAuth. Вас буде перенаправлено на openrouter.ai",
|
||||
"Bypass status check": "Обійти перевірку статусу",
|
||||
|
@@ -318,23 +318,23 @@
|
||||
"flag": "cờ",
|
||||
"API key (optional)": "Key API (tùy chọn)",
|
||||
"Server url": "URL máy chủ",
|
||||
"Example: 127.0.0.1:5000": "Ví dụ: 127.0.0.1:5000",
|
||||
"Example: http://127.0.0.1:5000": "Ví dụ: http://127.0.0.1:5000",
|
||||
"Custom model (optional)": "Model tùy chỉnh (tùy chọn)",
|
||||
"vllm-project/vllm": "vllm-project/vllm (Chế độ trình bao bọc API OpenAI)",
|
||||
"vLLM API key": "Key API vLLM",
|
||||
"Example: 127.0.0.1:8000": "Ví dụ: http://127.0.0.1:8000",
|
||||
"Example: http://127.0.0.1:8000": "Ví dụ: http://127.0.0.1:8000",
|
||||
"vLLM Model": "Model vLLM",
|
||||
"PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (Chế độ đóng gói cho Giao diện lập trình ứng dụng OpenAI)",
|
||||
"Aphrodite API key": "Key API Aphrodite",
|
||||
"Aphrodite Model": "Moddel cho Aphrodite",
|
||||
"ggerganov/llama.cpp": "ggerganov/llama.cpp",
|
||||
"Example: 127.0.0.1:8080": "Ví dụ: 127.0.0.1:8080",
|
||||
"Example: 127.0.0.1:11434": "Ví dụ: 127.0.0.1:11434",
|
||||
"Example: http://127.0.0.1:8080": "Ví dụ: http://127.0.0.1:8080",
|
||||
"Example: http://127.0.0.1:11434": "Ví dụ: http://127.0.0.1:11434",
|
||||
"Ollama Model": "Model Ollama",
|
||||
"Download": "Tải xuống",
|
||||
"Tabby API key": "Key API Tabby",
|
||||
"koboldcpp API key (optional)": "Key API koboldcpp (tùy chọn)",
|
||||
"Example: 127.0.0.1:5001": "Ví dụ: 127.0.0.1:5001",
|
||||
"Example: http://127.0.0.1:5001": "Ví dụ: http://127.0.0.1:5001",
|
||||
"Cho phép": "Ủy quyền",
|
||||
"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",
|
||||
"Bypass status check": "Bỏ qua check trạng thái",
|
||||
|
@@ -347,7 +347,7 @@
|
||||
"Mancer Model": "Mancer 模型",
|
||||
"API key (optional)": "API密钥(可选)",
|
||||
"Server url": "服务器URL",
|
||||
"Example: 127.0.0.1:5000": "示例:127.0.0.1:5000",
|
||||
"Example: http://127.0.0.1:5000": "示例:http://127.0.0.1:5000",
|
||||
"Model ID (optional)": "模型 ID(可选)",
|
||||
"Make sure you run it with": "确保您在运行时加上",
|
||||
"flag": "标志",
|
||||
@@ -364,7 +364,7 @@
|
||||
"No model description": "[无描述]",
|
||||
"vllm-project/vllm": "vllm-project/vllm(OpenAI API 包装器模式)",
|
||||
"vLLM API key": "vLLM API 密钥",
|
||||
"Example: 127.0.0.1:8000": "示例:http://127.0.0.1:8000",
|
||||
"Example: http://127.0.0.1:8000": "示例:http://127.0.0.1:8000",
|
||||
"vLLM Model": "vLLM 模型",
|
||||
"HuggingFace Token": "HuggingFace 代币",
|
||||
"Endpoint URL": "端点 URL",
|
||||
@@ -373,8 +373,8 @@
|
||||
"Aphrodite API key": "Aphrodite API 密钥",
|
||||
"Aphrodite Model": "Aphrodite 模型",
|
||||
"ggerganov/llama.cpp": "ggerganov/llama.cpp",
|
||||
"Example: 127.0.0.1:8080": "示例:127.0.0.1:8080",
|
||||
"Example: 127.0.0.1:11434": "示例:127.0.0.1:11434",
|
||||
"Example: http://127.0.0.1:8080": "示例:http://127.0.0.1:8080",
|
||||
"Example: http://127.0.0.1:11434": "示例:http://127.0.0.1:11434",
|
||||
"Ollama Model": "Ollama 模型",
|
||||
"Download": "下载",
|
||||
"Tabby API key": "Tabby API 密钥",
|
||||
@@ -382,7 +382,7 @@
|
||||
"must be set in Tabby's config.yml to switch models.": "必须在Tabby的config.yml内设置以切换模型",
|
||||
"Use an admin API key.": "使用管理员API密钥。",
|
||||
"koboldcpp API key (optional)": "koboldcpp API 密钥(可选)",
|
||||
"Example: 127.0.0.1:5001": "示例:127.0.0.1:5001",
|
||||
"Example: http://127.0.0.1:5001": "示例:http://127.0.0.1:5001",
|
||||
"Bypass status check": "跳过状态检查",
|
||||
"Derive context size from backend": "从后端获取上下文长度",
|
||||
"Authorize": "授权",
|
||||
|
@@ -319,23 +319,23 @@
|
||||
"flag": "旗標",
|
||||
"API key (optional)": "API 金鑰(可選)",
|
||||
"Server url": "伺服器 URL",
|
||||
"Example: 127.0.0.1:5000": "範例:127.0.0.1:5000",
|
||||
"Example: http://127.0.0.1:5000": "範例:http://127.0.0.1:5000",
|
||||
"Custom model (optional)": "自訂模型(選填)",
|
||||
"vllm-project/vllm": "vllm-project/vllm",
|
||||
"vLLM API key": "vLLM API 金鑰",
|
||||
"Example: 127.0.0.1:8000": "範例:127.0.0.1:8000",
|
||||
"Example: http://127.0.0.1:8000": "範例:http://127.0.0.1:8000",
|
||||
"vLLM Model": "vLLM 模型",
|
||||
"PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite 引擎",
|
||||
"Aphrodite API key": "Aphrodite API 金鑰",
|
||||
"Aphrodite Model": "Aphrodite 模型",
|
||||
"ggerganov/llama.cpp": "ggerganov/llama.cpp",
|
||||
"Example: 127.0.0.1:8080": "範例:127.0.0.1:8080",
|
||||
"Example: 127.0.0.1:11434": "範例:127.0.0.1:11434",
|
||||
"Example: http://127.0.0.1:8080": "範例:http://127.0.0.1:8080",
|
||||
"Example: http://127.0.0.1:11434": "範例:http://127.0.0.1:11434",
|
||||
"Ollama Model": "Ollama 模型",
|
||||
"Download": "下載",
|
||||
"Tabby API key": "Tabby API 金鑰",
|
||||
"koboldcpp API key (optional)": "KoboldCpp API 金鑰(可選)",
|
||||
"Example: 127.0.0.1:5001": "範例:127.0.0.1:5001",
|
||||
"Example: http://127.0.0.1:5001": "範例:http://127.0.0.1:5001",
|
||||
"Authorize": "授權",
|
||||
"Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "使用 OAuth 流程取得您的 OpenRouter API 符元。您將被重新導向到 openrouter.ai",
|
||||
"Bypass status check": "繞過狀態檢查",
|
||||
|
@@ -173,6 +173,7 @@ import {
|
||||
escapeHtml,
|
||||
saveBase64AsFile,
|
||||
uuidv4,
|
||||
equalsIgnoreCaseAndAccents,
|
||||
} from './scripts/utils.js';
|
||||
import { debounce_timeout, IGNORE_SYMBOL } from './scripts/constants.js';
|
||||
|
||||
@@ -2133,7 +2134,7 @@ export function messageFormatting(mes, ch_name, isSystem, isUser, messageId, san
|
||||
}
|
||||
|
||||
mes = mes.replace(
|
||||
/```[\s\S]*?```|~~~[\s\S]*?~~~|``[\s\S]*?``|`[\s\S]*?`|(".*?")|(\u201C.*?\u201D)|(\u00AB.*?\u00BB)|(\u300C.*?\u300D)|(\u300E.*?\u300F)|(\uFF02.*?\uFF02)/gm,
|
||||
/<style>[\s\S]*?<\/style>|```[\s\S]*?```|~~~[\s\S]*?~~~|``[\s\S]*?``|`[\s\S]*?`|(".*?")|(\u201C.*?\u201D)|(\u00AB.*?\u00BB)|(\u300C.*?\u300D)|(\u300E.*?\u300F)|(\uFF02.*?\uFF02)/gim,
|
||||
function (match, p1, p2, p3, p4, p5, p6) {
|
||||
if (p1) {
|
||||
// English double quotes
|
||||
@@ -9878,6 +9879,15 @@ export async function renameChat(oldFileName, newName) {
|
||||
renamed_file: `${newName.trim()}.jsonl`,
|
||||
};
|
||||
|
||||
if (body.original_file === body.renamed_file) {
|
||||
console.debug('Chat rename cancelled, old and new names are the same');
|
||||
return;
|
||||
}
|
||||
if (equalsIgnoreCaseAndAccents(body.original_file, body.renamed_file)) {
|
||||
toastr.warning(t`Name not accepted, as it is the same as before (ignoring case and accents).`, t`Rename Chat`);
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
showLoader();
|
||||
const response = await fetch('/api/chats/rename', {
|
||||
@@ -12209,4 +12219,11 @@ jQuery(async function () {
|
||||
});
|
||||
|
||||
initCustomSelectedSamplers();
|
||||
|
||||
window.addEventListener('beforeunload', (e) => {
|
||||
if (isChatSaving) {
|
||||
e.preventDefault();
|
||||
e.returnValue = true;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
@@ -459,7 +459,7 @@ export async function appendFileContent(message, messageText) {
|
||||
* @copyright https://github.com/kwaroran/risuAI
|
||||
*/
|
||||
export function encodeStyleTags(text) {
|
||||
const styleRegex = /<style>(.+?)<\/style>/gms;
|
||||
const styleRegex = /<style>(.+?)<\/style>/gims;
|
||||
return text.replaceAll(styleRegex, (_, match) => {
|
||||
return `<custom-style>${escape(match)}</custom-style>`;
|
||||
});
|
||||
|
@@ -65,6 +65,7 @@
|
||||
<option data-type="anthropic" value="claude-3-opus-20240229">claude-3-opus-20240229</option>
|
||||
<option data-type="anthropic" value="claude-3-sonnet-20240229">claude-3-sonnet-20240229</option>
|
||||
<option data-type="anthropic" value="claude-3-haiku-20240307">claude-3-haiku-20240307</option>
|
||||
<option data-type="google" value="gemini-2.5-pro-preview-03-25">gemini-2.5-pro-preview-03-25</option>
|
||||
<option data-type="google" value="gemini-2.5-pro-exp-03-25">gemini-2.5-pro-exp-03-25</option>
|
||||
<option data-type="google" value="gemini-2.0-pro-exp">gemini-2.0-pro-exp</option>
|
||||
<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) {
|
||||
* Preserves the query string.
|
||||
*/
|
||||
function redirectToHome() {
|
||||
// After a login theres no need to preserve the
|
||||
// noauto (if present)
|
||||
const urlParams = new URLSearchParams(window.location.search);
|
||||
// Create a URL object based on the current location
|
||||
const currentUrl = new URL(window.location.href);
|
||||
|
||||
urlParams.delete('noauto');
|
||||
// After a login there's no need to preserve the
|
||||
// noauto parameter (if present)
|
||||
currentUrl.searchParams.delete('noauto');
|
||||
|
||||
window.location.href = '/' + urlParams.toString();
|
||||
// Set the pathname to root and keep the updated query string
|
||||
currentUrl.pathname = '/';
|
||||
|
||||
// Redirect to the new URL
|
||||
window.location.href = currentUrl.toString();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -4193,6 +4193,9 @@ function getGroqMaxContext(model, isUnlocked) {
|
||||
'qwen-2.5-32b': max_128k,
|
||||
'deepseek-r1-distill-qwen-32b': max_128k,
|
||||
'deepseek-r1-distill-llama-70b-specdec': max_128k,
|
||||
'mistral-saba-24b': max_32k,
|
||||
'meta-llama/llama-4-scout-17b-16e-instruct': max_128k,
|
||||
'meta-llama/llama-4-maverick-17b-128e-instruct': max_128k,
|
||||
};
|
||||
|
||||
// Return context size if model found, otherwise default to 128k
|
||||
@@ -4327,7 +4330,7 @@ async function onModelChange() {
|
||||
$('#openai_max_context').attr('max', max_32k);
|
||||
} else if (value.includes('gemini-1.5-pro') || value.includes('gemini-exp-1206') || value.includes('gemini-2.0-pro')) {
|
||||
$('#openai_max_context').attr('max', max_2mil);
|
||||
} else if (value.includes('gemini-1.5-flash') || value.includes('gemini-2.0-flash') || value.includes('gemini-2.5-pro-exp-03-25')) {
|
||||
} 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')) {
|
||||
$('#openai_max_context').attr('max', max_1mil);
|
||||
} else if (value.includes('gemini-1.0-pro') || value === 'gemini-pro') {
|
||||
$('#openai_max_context').attr('max', max_32k);
|
||||
@@ -4961,6 +4964,7 @@ export function isImageInliningSupported() {
|
||||
const visionSupportedModels = [
|
||||
'gpt-4-vision',
|
||||
'gemini-2.5-pro-exp-03-25',
|
||||
'gemini-2.5-pro-preview-03-25',
|
||||
'gemini-2.0-pro-exp',
|
||||
'gemini-2.0-pro-exp-02-05',
|
||||
'gemini-2.0-flash-lite-preview',
|
||||
|
@@ -36,7 +36,7 @@ import {
|
||||
textgenerationwebui_presets,
|
||||
textgenerationwebui_settings as textgen_settings,
|
||||
} from './textgen-settings.js';
|
||||
import { download, parseJsonFile, waitUntilCondition } from './utils.js';
|
||||
import { download, equalsIgnoreCaseAndAccents, parseJsonFile, waitUntilCondition } from './utils.js';
|
||||
import { t } from './i18n.js';
|
||||
import { reasoning_templates } from './reasoning.js';
|
||||
|
||||
@@ -454,6 +454,9 @@ class PresetManager {
|
||||
|
||||
async renamePreset(newName) {
|
||||
const oldName = this.getSelectedPresetName();
|
||||
if (equalsIgnoreCaseAndAccents(oldName, newName)) {
|
||||
throw new Error('New name must be different from old name');
|
||||
}
|
||||
try {
|
||||
await this.savePreset(newName);
|
||||
await this.deletePreset(oldName);
|
||||
@@ -892,6 +895,10 @@ export async function initPresetManager() {
|
||||
console.debug(!presetManager.isAdvancedFormatting() ? 'Preset rename cancelled' : 'Template rename cancelled');
|
||||
return;
|
||||
}
|
||||
if (equalsIgnoreCaseAndAccents(oldName, newName)) {
|
||||
toastr.warning(t`Name not accepted, as it is the same as before (ignoring case and accents).`, t`Rename Preset`);
|
||||
return;
|
||||
}
|
||||
|
||||
await presetManager.renamePreset(newName);
|
||||
|
||||
|
@@ -832,6 +832,12 @@ function registerReasoningSlashCommands() {
|
||||
typeList: ARGUMENT_TYPE.NUMBER,
|
||||
enumProvider: commonEnumProviders.messages(),
|
||||
}),
|
||||
SlashCommandNamedArgument.fromProps({
|
||||
name: 'collapse',
|
||||
description: 'Whether to collapse the reasoning block. (If not provided, uses the default expand setting)',
|
||||
typeList: [ARGUMENT_TYPE.BOOLEAN],
|
||||
enumList: commonEnumProviders.boolean('trueFalse')(),
|
||||
}),
|
||||
],
|
||||
unnamedArgumentList: [
|
||||
SlashCommandArgument.fromProps({
|
||||
@@ -856,6 +862,9 @@ function registerReasoningSlashCommands() {
|
||||
|
||||
closeMessageEditor('reasoning');
|
||||
updateMessageBlock(messageId, message);
|
||||
|
||||
if (isTrueBoolean(String(args.collapse))) $(`#chat [mesid="${messageId}"] .mes_reasoning_details`).removeAttr('open');
|
||||
if (isFalseBoolean(String(args.collapse))) $(`#chat [mesid="${messageId}"] .mes_reasoning_details`).attr('open', '');
|
||||
return message.extra.reasoning;
|
||||
},
|
||||
}));
|
||||
|
@@ -8,10 +8,10 @@ export const markdownUnderscoreExt = () => {
|
||||
|
||||
return [{
|
||||
type: 'output',
|
||||
regex: new RegExp('(<code(?:\\s+[^>]*)?>[\\s\\S]*?<\\/code>)|\\b(?<!_)_(?!_)(.*?)(?<!_)_(?!_)\\b', 'g'),
|
||||
replace: function(match, codeContent, italicContent) {
|
||||
if (codeContent) {
|
||||
// If it's inside <code> tags, return unchanged
|
||||
regex: new RegExp('(<code(?:\\s+[^>]*)?>[\\s\\S]*?<\\/code>|<style(?:\\s+[^>]*)?>[\\s\\S]*?<\\/style>)|\\b(?<!_)_(?!_)(.*?)(?<!_)_(?!_)\\b', 'gi'),
|
||||
replace: function(match, tagContent, italicContent) {
|
||||
if (tagContent) {
|
||||
// If it's inside <code> or <style> tags, return unchanged
|
||||
return match;
|
||||
} else if (italicContent) {
|
||||
// If it's an italic group, apply the replacement
|
||||
|
@@ -9,8 +9,8 @@ import { ensureImageFormatSupported, getBase64Async, humanFileSize } from './uti
|
||||
export let currentUser = null;
|
||||
export let accountsEnabled = false;
|
||||
|
||||
// Extend the session every 30 minutes
|
||||
const SESSION_EXTEND_INTERVAL = 30 * 60 * 1000;
|
||||
// Extend the session every 10 minutes
|
||||
const SESSION_EXTEND_INTERVAL = 10 * 60 * 1000;
|
||||
|
||||
/**
|
||||
* Enable or disable user account controls in the UI.
|
||||
|
@@ -1,7 +1,7 @@
|
||||
import { Fuse } from '../lib.js';
|
||||
|
||||
import { saveSettings, substituteParams, getRequestHeaders, chat_metadata, this_chid, characters, saveCharacterDebounced, menu_type, eventSource, event_types, getExtensionPromptByName, saveMetadata, getCurrentChatId, extension_prompt_roles } from '../script.js';
|
||||
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';
|
||||
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';
|
||||
import { extension_settings, getContext } from './extensions.js';
|
||||
import { NOTE_MODULE_NAME, metadata_keys, shouldWIAddPrompt } from './authors-note.js';
|
||||
import { isMobile } from './RossAscends-mods.js';
|
||||
@@ -3586,6 +3586,10 @@ async function renameWorldInfo(name, data) {
|
||||
console.debug('World info rename cancelled');
|
||||
return;
|
||||
}
|
||||
if (equalsIgnoreCaseAndAccents(oldName, newName)) {
|
||||
toastr.warning(t`Name not accepted, as it is the same as before (ignoring case and accents).`, t`Rename World Info`);
|
||||
return;
|
||||
}
|
||||
|
||||
const entryPreviouslySelected = selected_world_info.findIndex((e) => e === oldName);
|
||||
|
||||
|
@@ -1,7 +1,7 @@
|
||||
import fs from 'node:fs';
|
||||
import { Buffer } from 'node:buffer';
|
||||
|
||||
import encode from 'png-chunks-encode';
|
||||
import encode from './png/encode.js';
|
||||
import extract from 'png-chunks-extract';
|
||||
import PNGtext from 'png-chunk-text';
|
||||
|
||||
|
@@ -16,7 +16,7 @@ router.post('/caption-image', async (request, response) => {
|
||||
const base64Data = request.body.image.split(',')[1];
|
||||
const apiKey = request.body.reverse_proxy ? request.body.proxy_password : readSecret(request.user.directories, SECRET_KEYS.MAKERSUITE);
|
||||
const apiUrl = new URL(request.body.reverse_proxy || API_MAKERSUITE);
|
||||
const model = request.body.model || 'gemini-pro-vision';
|
||||
const model = request.body.model || 'gemini-2.0-flash';
|
||||
const url = `${apiUrl.origin}/v1beta/models/${model}:generateContent?key=${apiKey}`;
|
||||
const body = {
|
||||
contents: [{
|
||||
@@ -30,7 +30,6 @@ router.post('/caption-image', async (request, response) => {
|
||||
}],
|
||||
}],
|
||||
safetySettings: GEMINI_SAFETY,
|
||||
generationConfig: { maxOutputTokens: 1000 },
|
||||
};
|
||||
|
||||
console.debug('Multimodal captioning request', model, body);
|
||||
|
68
src/png/encode.js
Normal file
68
src/png/encode.js
Normal file
@@ -0,0 +1,68 @@
|
||||
import { crc32 } from 'crc';
|
||||
|
||||
/**
|
||||
* Encodes PNG chunks into a PNG file format buffer.
|
||||
* @param {Array<{ name: string; data: Uint8Array }>} chunks Array of PNG chunks
|
||||
* @returns {Uint8Array} Encoded PNG data
|
||||
* @copyright Based on https://github.com/hughsk/png-chunks-encode (MIT)
|
||||
*/
|
||||
export default function encode(chunks) {
|
||||
const uint8 = new Uint8Array(4);
|
||||
const int32 = new Int32Array(uint8.buffer);
|
||||
const uint32 = new Uint32Array(uint8.buffer);
|
||||
|
||||
let totalSize = 8;
|
||||
let idx = totalSize;
|
||||
|
||||
for (let i = 0; i < chunks.length; i++) {
|
||||
totalSize += chunks[i].data.length;
|
||||
totalSize += 12;
|
||||
}
|
||||
|
||||
const output = new Uint8Array(totalSize);
|
||||
|
||||
output[0] = 0x89;
|
||||
output[1] = 0x50;
|
||||
output[2] = 0x4E;
|
||||
output[3] = 0x47;
|
||||
output[4] = 0x0D;
|
||||
output[5] = 0x0A;
|
||||
output[6] = 0x1A;
|
||||
output[7] = 0x0A;
|
||||
|
||||
for (let i = 0; i < chunks.length; i++) {
|
||||
const { name, data } = chunks[i];
|
||||
const size = data.length;
|
||||
const nameChars = [
|
||||
name.charCodeAt(0),
|
||||
name.charCodeAt(1),
|
||||
name.charCodeAt(2),
|
||||
name.charCodeAt(3),
|
||||
];
|
||||
|
||||
uint32[0] = size;
|
||||
output[idx++] = uint8[3];
|
||||
output[idx++] = uint8[2];
|
||||
output[idx++] = uint8[1];
|
||||
output[idx++] = uint8[0];
|
||||
|
||||
output[idx++] = nameChars[0];
|
||||
output[idx++] = nameChars[1];
|
||||
output[idx++] = nameChars[2];
|
||||
output[idx++] = nameChars[3];
|
||||
|
||||
for (let j = 0; j < size;) {
|
||||
output[idx++] = data[j++];
|
||||
}
|
||||
|
||||
const crc = crc32(data, crc32(new Uint8Array(nameChars)));
|
||||
|
||||
int32[0] = crc;
|
||||
output[idx++] = uint8[3];
|
||||
output[idx++] = uint8[2];
|
||||
output[idx++] = uint8[1];
|
||||
output[idx++] = uint8[0];
|
||||
}
|
||||
|
||||
return output;
|
||||
}
|
@@ -360,6 +360,7 @@ export function convertCohereMessages(messages, names) {
|
||||
*/
|
||||
export function convertGooglePrompt(messages, model, useSysPrompt, names) {
|
||||
const visionSupportedModels = [
|
||||
'gemini-2.5-pro-preview-03-25',
|
||||
'gemini-2.5-pro-exp-03-25',
|
||||
'gemini-2.0-pro-exp',
|
||||
'gemini-2.0-pro-exp-02-05',
|
||||
@@ -412,7 +413,7 @@ export function convertGooglePrompt(messages, model, useSysPrompt, names) {
|
||||
}
|
||||
}
|
||||
|
||||
const system_instruction = { parts: { text: sys_prompt.trim() } };
|
||||
const system_instruction = { parts: [{ text: sys_prompt.trim() }]};
|
||||
const toolNameMap = {};
|
||||
|
||||
const contents = [];
|
||||
|
Reference in New Issue
Block a user