Merge branch 'staging' into persona-improvements

a611a3ac59a237ab331019391eb0a18a4ffa75ad

Wolfsblvt <wolfsblvt@gmail.com>

53 files changed, +1733 -568Showing whitespace changes
default/config.yaml+15 -13
@@ -133,24 +133,26 @@ whitelistImportDomains:
133133## headers:
134134## User-Agent: "Googlebot/2.1 (+http://www.google.com/bot.html)"
135135requestOverrides: []
136-# -- EXTENSIONS CONFIGURATION --
136+
137+# EXTENSIONS CONFIGURATION
138+extensions:
137139 # Enable UI extensions
138140enableExtensions enabled: true
139141 # Automatically update extensions when a release version changes
140142enableExtensionsAutoUpdate autoUpdate: true
143+ models:
144+ # Enables automatic model download from HuggingFace
145+ autoDownload: true
146+ # Additional models for extensions. Expects model IDs from HuggingFace model hub in ONNX format
147+ classification: Cohee/distilbert-base-uncased-go-emotions-onnx
148+ captioning: Xenova/vit-gpt2-image-captioning
149+ embedding: Cohee/jina-embeddings-v2-base-en
150+ speechToText: Xenova/whisper-small
151+ textToSpeech: Xenova/speecht5_tts
152+
141153# Additional model tokenizers can be downloaded on demand.
142154# Disabling will fallback to another locally available tokenizer.
143155enableDownloadableTokenizers: true
144-# Extension settings
145-extras:
146- # Disables automatic model download from HuggingFace
147- disableAutoDownload: false
148- # Extra models for plugins. Expects model IDs from HuggingFace model hub in ONNX format
149- classificationModel: Cohee/distilbert-base-uncased-go-emotions-onnx
150- captioningModel: Xenova/vit-gpt2-image-captioning
151- embeddingModel: Cohee/jina-embeddings-v2-base-en
152- speechToTextModel: Xenova/whisper-small
153- textToSpeechModel: Xenova/speecht5_tts
154156# -- OPENAI CONFIGURATION --
155157# A placeholder message to use in strict prompt post-processing mode when the prompt doesn't start with a user message
156158promptPlaceholder: "[Start a new chat]"
default/content/backgrounds/_black.jpg+0 -0

Binary file

default/content/backgrounds/_white.jpg+0 -0

Binary file

default/content/index.json+8 -0
@@ -782,5 +782,13 @@
782782 {
783783 "filename": "presets/context/Mistral V7.json",
784784 "type": "context"
785+ },
786+ {
787+ "filename": "presets/instruct/DeepSeek-V2.5.json",
788+ "type": "instruct"
789+ },
790+ {
791+ "filename": "presets/context/DeepSeek-V2.5.json",
792+ "type": "context"
785793 }
786794]
default/content/presets/context/DeepSeek-V2.5.json+11 -0
@@ -0,0 +1,11 @@
1+{
2+ "story_string": "{{#if system}}{{system}}\n{{/if}}{{#if wiBefore}}{{wiBefore}}\n{{/if}}{{#if description}}{{description}}\n{{/if}}{{#if personality}}{{char}}'s personality: {{personality}}\n{{/if}}{{#if scenario}}Scenario: {{scenario}}\n{{/if}}{{#if wiAfter}}{{wiAfter}}\n{{/if}}{{#if persona}}{{persona}}\n{{/if}}{{trim}}\n",
3+ "example_separator": "",
4+ "chat_start": "",
5+ "use_stop_strings": false,
6+ "allow_jailbreak": false,
7+ "always_force_name2": true,
8+ "trim_sentences": false,
9+ "single_line": false,
10+ "name": "DeepSeek-V2.5"
11+}
default/content/presets/instruct/DeepSeek-V2.5.json+22 -0
@@ -0,0 +1,22 @@
1+{
2+ "input_sequence": "<|User|>",
3+ "output_sequence": "<|Assistant|>",
4+ "first_output_sequence": "",
5+ "last_output_sequence": "",
6+ "system_sequence_prefix": "",
7+ "system_sequence_suffix": "",
8+ "stop_sequence": "",
9+ "wrap": false,
10+ "macro": true,
11+ "names_behavior": "force",
12+ "activation_regex": "",
13+ "skip_examples": false,
14+ "output_suffix": "<|end▁of▁sentence|>",
15+ "input_suffix": "",
16+ "system_sequence": "",
17+ "system_suffix": "",
18+ "user_alignment_message": "",
19+ "last_system_sequence": "",
20+ "system_same_as_user": true,
21+ "name": "DeepSeek-V2.5"
22+}
jsconfig.json+1 -1
@@ -15,7 +15,7 @@
1515 "**/node_modules/**",
1616 "**/dist/**",
1717 "**/.git/**",
1818 "public/lib/**",
1919 "backups/**",
2020 "data/**",
2121 "cache/**",
package-lock.json+2 -2
@@ -1,12 +1,12 @@
11{
22 "name": "sillytavern",
33 "version": "1.12.1011",
44 "lockfileVersion": 3,
55 "requires": true,
66 "packages": {
77 "": {
88 "name": "sillytavern",
99 "version": "1.12.1011",
1010 "hasInstallScript": true,
1111 "license": "AGPL-3.0",
1212 "dependencies": {
package.json+1 -1
@@ -86,7 +86,7 @@
8686 "type": "git",
8787 "url": "https://github.com/SillyTavern/SillyTavern.git"
8888 },
8989 "version": "1.12.1011",
9090 "scripts": {
9191 "start": "node server.js",
9292 "start:deno": "deno run --allow-run --allow-net --allow-read --allow-write --allow-sys --allow-env server.js",
post-install.js+41 -1
@@ -64,6 +64,46 @@ const keyMigrationMap = [
6464 newKey: 'backups.chat.throttleInterval',
6565 migrate: (value) => value,
6666 },
67+ {
68+ oldKey: 'enableExtensions',
69+ newKey: 'extensions.enabled',
70+ migrate: (value) => value,
71+ },
72+ {
73+ oldKey: 'enableExtensionsAutoUpdate',
74+ newKey: 'extensions.autoUpdate',
75+ migrate: (value) => value,
76+ },
77+ {
78+ oldKey: 'extras.disableAutoDownload',
79+ newKey: 'extensions.models.autoDownload',
80+ migrate: (value) => !value,
81+ },
82+ {
83+ oldKey: 'extras.classificationModel',
84+ newKey: 'extensions.models.classification',
85+ migrate: (value) => value,
86+ },
87+ {
88+ oldKey: 'extras.captioningModel',
89+ newKey: 'extensions.models.captioning',
90+ migrate: (value) => value,
91+ },
92+ {
93+ oldKey: 'extras.embeddingModel',
94+ newKey: 'extensions.models.embedding',
95+ migrate: (value) => value,
96+ },
97+ {
98+ oldKey: 'extras.speechToTextModel',
99+ newKey: 'extensions.models.speechToText',
100+ migrate: (value) => value,
101+ },
102+ {
103+ oldKey: 'extras.textToSpeechModel',
104+ newKey: 'extensions.models.textToSpeech',
105+ migrate: (value) => value,
106+ },
67107];
68108
69109/**
@@ -73,7 +113,7 @@ const keyMigrationMap = [
73113 * @returns {string[]} Array of all keys in the object
74114 */
75115function getAllKeys(obj, prefix = '') {
76116 if (typeof obj !== 'object' || Array.isArray(obj) || obj === null) {
77117 return [];
78118 }
79119
public/css/promptmanager.css+18 -0
@@ -271,6 +271,24 @@
271271 opacity: 0.8;
272272}
273273
274+#completion_prompt_manager #completion_prompt_manager_list .completion_prompt_manager_prompt .drag-handle:not(.ui-sortable-handle) {
275+ display: none;
276+}
277+
278+#completion_prompt_manager #completion_prompt_manager_list .completion_prompt_manager_prompt:has(.drag-handle.ui-sortable-handle) {
279+ position: relative;
280+ padding-left: 20px;
281+}
282+
283+#completion_prompt_manager #completion_prompt_manager_list .completion_prompt_manager_prompt .drag-handle {
284+ position: absolute;
285+ height: 100%;
286+ top: 0;
287+ padding: 0 5px;
288+ display: flex;
289+ align-items: center;
290+}
291+
274292#completion_prompt_manager_footer_append_prompt {
275293 font-size: 1em;
276294}
public/img/vllm.svg+1 -0
@@ -0,0 +1 @@
1+<svg version="1.0" width="565.752" height="586.537" viewBox="0 0 424.314 439.903" preserveAspectRatio="xMidYMid" xmlns="http://www.w3.org/2000/svg"><path d="M344.6 41.703c-43.4 23-79.3 42.4-79.7 43.2-.8 1.4-72.3 276.1-84.3 323.5-6.2 24.9-7.1 27.7-8 25.5-.4-.8-.5-77.7-.4-170.8l.3-169.2H86.3c-47.5 0-86.3.2-86.3.5 0 1 162.2 325 166.9 333.3 2.5 4.6 5 9.2 5.6 10.3.9 1.8 2.7 1.9 68.2 1.9 63.1 0 67.2-.1 67.7-1.8.3-.9 24.2-90.8 53-199.7 51-192.7 58.9-222.4 62-233.3.8-2.8 1.1-5.2.8-5.1-.4 0-36.2 18.8-79.6 41.7z"/></svg>
1 \ No newline at end of file
public/index.html+18 -12
@@ -1934,22 +1934,24 @@
19341934 <label for="openai_function_calling" class="checkbox_label flexWrap widthFreeExpand">
19351935 <input id="openai_function_calling" type="checkbox" />
19361936 <span data-i18n="Enable function calling">Enable function calling</span>
1937+ </label>
19371938 <div class="flexBasis100p toggle-description justifyLeft">
19381939 <span data-i18n="enable_functions_desc_1">Allows using </span><a href="https://platform.openai.com/docs/guides/function-calling" target="_blank" data-i18n="enable_functions_desc_2">function tools</a>.
19391940 <span data-i18n="enable_functions_desc_3">Can be utilized by various extensions to provide additional functionality.</span>
19401941 </div>
1941- </label>
19421942 </div>
19431943 <div class="range-block" data-source="openai,openrouter,makersuite,claude,custom,01ai">
19441944 <label for="openai_image_inlining" class="checkbox_label flexWrap widthFreeExpand">
19451945 <input id="openai_image_inlining" type="checkbox" />
19461946 <span data-i18n="Send inline images">Send inline images</span>
1947+ </label>
19471948 <div id="image_inlining_hint" class="flexBasis100p toggle-description justifyLeft">
19481949 <span data-i18n="image_inlining_hint_1">Sends images in prompts if the model supports it (e.g. GPT-4V, Claude 3 or Llava 13B). Use the</span>
19491950 Use the</span> <code><i class="fa-solid fa-paperclip"></i></code> <span data-i18n="image_inlining_hint_2">action on any message or the</span>
1950- <code><i class="fa-solid fa-wand-magic-sparkles"></i></code> <span data-i18n="image_inlining_hint_3">menu to attach an image file to the chat.</span>
1951+ <span data-i18n="image_inlining_hint_2">action on any message or the</span>
1952+ <code><i class="fa-solid fa-wand-magic-sparkles"></i></code>
1953+ <span data-i18n="image_inlining_hint_3">menu to attach an image file to the chat.</span>
19511954 </div>
1952- </label>
19531955 <div class="flex-container flexFlowColumn wide100p textAlignCenter marginTop10" data-source="openai,custom">
19541956 <label for="openai_inline_image_quality" data-i18n="Inline Image Quality">
19551957 Inline Image Quality
@@ -1975,12 +1977,12 @@
19751977 </span>
19761978 </div>
19771979 </div>
19781980 <div class="range-block" data-source="makersuite,deepseek">
19791981 <label for="openai_show_thoughts" class="checkbox_label widthFreeExpand">
19801982 <input id="openai_show_thoughts" type="checkbox" />
19811983 <span>
19821984 <span data-i18n="Show model thoughts">Show model thoughts</span>
19831985 <i class="opacity50p fa-solid fa-circle-info" title="Gemini 2.0 Thinking / DeepSeek Reasoner"></i>
19841986 </span>
19851987 </label>
19861988 <div class="toggle-description justifyLeft marginBot5">
@@ -2690,7 +2692,7 @@
26902692 <option value="windowai">Window AI</option>
26912693 </optgroup>
26922694 </select>
26932695 <div class="inline-drawer wide100p" data-source="openai,claude,mistralai,makersuite,deepseek">
26942696 <div class="inline-drawer-toggle inline-drawer-header">
26952697 <b data-i18n="Reverse Proxy">Reverse Proxy</b>
26962698 <div class="fa-solid fa-circle-chevron-down inline-drawer-icon down"></div>
@@ -2753,7 +2755,7 @@
27532755 </div>
27542756 </div>
27552757 </div>
27562758 <div id="ReverseProxyWarningMessage" data-source="openai,claude,mistralai,makersuite,deepseek">
27572759 <div class="reverse_proxy_warning">
27582760 <b>
27592761 <div data-i18n="Using a proxy that you're not running yourself is a risk to your data privacy.">
@@ -3060,7 +3062,9 @@
30603062 <option value="gemini-1.0-ultra-latest">Gemini 1.0 Ultra</option>
30613063 </optgroup>
30623064 <optgroup label="Subversions">
30633065 <option value="gemini-2.0-flash-thinking-exp-1219">Gemini 2.0 Flash Thinking Experimental</option>
3066+ <option value="gemini-2.0-flash-thinking-exp-01-21">Gemini 2.0 Flash Thinking Experimental 2025-01-21</option>
3067+ <option value="gemini-2.0-flash-thinking-exp-1219">Gemini 2.0 Flash Thinking Experimental 2024-12-19</option>
30643068 <option value="gemini-2.0-flash-exp">Gemini 2.0 Flash Experimental</option>
30653069 <option value="gemini-exp-1114">Gemini Experimental 2024-11-14</option>
30663070 <option value="gemini-exp-1121">Gemini Experimental 2024-11-21</option>
@@ -3207,6 +3211,7 @@
32073211 <select id="model_deepseek_select">
32083212 <option value="deepseek-chat">deepseek-chat</option>
32093213 <option value="deepseek-coder">deepseek-coder</option>
3214+ <option value="deepseek-reasoner">deepseek-reasoner</option>
32103215 </select>
32113216 </div>
32123217 </div>
@@ -5148,7 +5153,8 @@
51485153 <div id="spoiler_free_desc" class="flex-container flexFlowColumn flex1 flexNoGap">
51495154 <div id="creators_notes_div" class="title_restorable">
51505155 <span data-i18n="Creator's Notes">Creator's Notes</span>
5151- <div id="spoiler_free_desc_button" class="margin0 menu_button fa-solid fa-eye" title="Show / Hide Description and First Message" data-i18n="[title]Show / Hide Description and First Message"></div>
5156+ <small id="creators_note_desc_hidden" data-i18n="Character details are hidden.">Character details are hidden.</small>
5157+ <div id="spoiler_free_desc_button" class="margin0 menu_button fa-solid fa-eye fa-fw" title="Show / Hide Description and First Message" data-i18n="[title]Show / Hide Description and First Message"></div>
51525158 </div>
51535159 <div id="creator_notes_spoiler" class="flex1"></div>
51545160 <!-- A button to show / hide description_div and description_textarea and first_message_div and firstmessage_textarea-->
@@ -5486,7 +5492,7 @@
54865492 </div>
54875493 <div id="character_popup" class="flex-container flexFlowColumn flexNoGap">
54885494 <div id="character_popup_text">
54895495 <h3 id="character_popup-button-h3" class="margin0"></h3> <span data-i18n="Advanced DefininitionsDefinitions">- Advanced
54905496 Definitions</span>
54915497 </div>
54925498 <hr class="margin-bot-10px">
public/locales/ar-sa.json+1 -1
@@ -879,7 +879,7 @@
879879 "popup-button-no": "لا",
880880 "popup-button-cancel": "يلغي",
881881 "popup-button-import": "يستورد",
882882 "Advanced DefininitionsDefinitions": "تعريفات متقدمة",
883883 "Prompt Overrides": "التجاوزات السريعة",
884884 "(For Chat Completion and Instruct Mode)": "(لاستكمال الدردشة ووضع التعليمات)",
885885 "Insert {{original}} into either box to include the respective default prompt from system settings.": "أدخل {{original}} في أي مربع لتضمين التعليمات الافتراضية المعنية من إعدادات النظام.",
public/locales/de-de.json+1 -1
@@ -879,7 +879,7 @@
879879 "popup-button-no": "NEIN",
880880 "popup-button-cancel": "Stornieren",
881881 "popup-button-import": "Importieren",
882882 "Advanced DefininitionsDefinitions": "Erweiterte Definitionen",
883883 "Prompt Overrides": "Eingabeaufforderungsüberschreibungen",
884884 "(For Chat Completion and Instruct Mode)": "(Für Chat-Abschluss und Anweisungsmodus)",
885885 "Insert {{original}} into either box to include the respective default prompt from system settings.": "Füge {{original}} in eines der Felder ein, um den jeweiligen Standardprompt aus den Systemeinstellungen einzuschließen.",
public/locales/es-es.json+1 -1
@@ -879,7 +879,7 @@
879879 "popup-button-no": "No",
880880 "popup-button-cancel": "Cancelar",
881881 "popup-button-import": "Importar",
882882 "Advanced DefininitionsDefinitions": "Definiciones avanzadas",
883883 "Prompt Overrides": "Anulaciones rápidas",
884884 "(For Chat Completion and Instruct Mode)": "(Para completar el chat y el modo de instrucción)",
885885 "Insert {{original}} into either box to include the respective default prompt from system settings.": "Inserte {{original}} en cualquiera de las casillas para incluir las indicaciones predeterminadas respectivas de la configuración del sistema.",
public/locales/fr-fr.json+1012 -401
@@ -1,31 +1,31 @@
11{
22 "Favorite": "PréféréFavoris",
33 "Tag": "ÉtiqueterTag",
44 "Duplicate": "Dupliquer",
55 "Persona": "PersonnagePersona",
66 "Delete": "Supprimer",
77 "AI Response Configuration": "Configuration de la réponse de l'IA",
88 "AI Configuration panel will stay open": "Le panneau de configuration de l'IA restera ouvert",
99 "clickslidertips": "Cliquez sur le curseur pour saisir les valeurs manuellement.",
1010 "MAD LAB MODE ON": "MODE LABORATOIRE MAD LAB ACTIVÉ",
1111 "Documentation on sampling parameters": "Documentation sur les paramètres d'échantillonnage",
1212 "kobldpresets": "PréréglagesPresets de Kobold",
1313 "guikoboldaisettings": "Paramètres de l'interface utilisateur de KoboldAI",
1414 "Update current preset": "Mettre à jour le préréglagepreset actuel",
1515 "Save preset as": "Enregistrer le préréglagepreset sous",
1616 "Import preset": "Importer le préréglagepreset",
1717 "Export preset": "Exporter le préréglagepreset",
1818 "Restore current preset": "Restaurer le préréglagepreset actuel",
1919 "Delete the preset": "Supprimer le préréglagepreset",
2020 "novelaipresets": "PréréglagesPresets de NovelAI",
2121 "Default": "Par défaut",
2222 "openaipresets": "PréréglagesPresets d'OpenAI",
2323 "Text Completion presets": "PréréglagesPresets de complétion de texte",
2424 "AI Module": "Module IA",
2525 "Changes the style of the generated text.": "Modifie le style du texte généré.",
2626 "No Module": "Aucun module",
2727 "Instruct": "Instruire",
2828 "Prose Augmenter": "AugmenteurAmélioration de prose",
2929 "Text Adventure": "Aventure textuelle",
3030 "response legth(tokens)": "Longueur de la réponse (en tokens)",
3131 "Streaming": "Diffusion en continu",
@@ -33,8 +33,8 @@
3333 "context size(tokens)": "Taille du contexte (en tokens)",
3434 "unlocked": "Déverrouillé",
3535 "Only enable this if your model supports context sizes greater than 8192 tokens": "Activez cela uniquement si votre modèle prend en charge des tailles de contexte supérieures à 8192 tokens",
3636 "Max prompt cost:": "Coût rapide maximum  du prompt:",
3737 "Display the response bit by bit as it is generated.": "Afficher la réponse morceaubit par morceaubit au fur et à mesure de sa génération.",
3838 "When this is off, responses will be displayed all at once when they are complete.": "Lorsque cette fonction est désactivée, les réponses s'affichent toutes en une fois lorsqu'elles sont complètes.",
3939 "Temperature": "Température",
4040 "rep.pen": "Pénalité de répétition",
@@ -58,48 +58,45 @@
5858 "Enable OpenAI completion streaming": "Activer le streaming de complétion OpenAI",
5959 "Frequency Penalty": "Pénalité de fréquence",
6060 "Presence Penalty": "Pénalité de présence",
61- "Count Penalty": "Pénalité de décompte",
6261 "Top K": "Top K",
6362 "Top P": "Top P",
6463 "Repetition Penalty": "Pénalité de répétition",
6564 "Min P": "Min P",
6665 "Top A": "Top A",
6766 "Quick Prompts Edit": "Édition rapide des invitationsprompts",
6867 "Main": "Principal",
6968 "NSFWUtility Prompts": "NSFWPrompts utilitaires",
70- "Jailbreak": "Jailbreak",
71- "Utility Prompts": "Invitations utilitaires",
7269 "Impersonation prompt": "Prompt d'usurpation",
7370 "Restore default prompt": "Restaurer l'instructionle prompt par défaut",
7471 "Prompt that is used for Impersonation function": "Prompt utilisée pour la fonction d'usurpation",
7572 "World Info Format Template": "Modèle de format d'informationsdes mondialesWorld Info",
7673 "Restore default format": "Restaurer le format par défaut",
7774 "Wraps activated World Info entries before inserting into the prompt.": "Encapsule les entrées World Info activées avant de les insérer dans l'invitele prompt.",
7875 "scenario_format_template_part_1": "Utiliser",
7976 "scenario_format_template_part_2": "pour marquer un endroit où le contenu est inséré.",
8077 "Scenario Format Template": "Modèle de format de scénario",
8178 "Personality Format Template": "Modèle de format de personnalité",
8279 "Group Nudge Prompt Template": "Modèle d'invitede prompt de groupe Nudge",
8380 "Sent at the end of the group chat history to force reply from a specific character.": "Envoyé à la fin de l'historique des discussions de groupe pour forcer la réponse d'un personnage spécifique.",
8481 "New Chat": "Nouvelle discussion",
8582 "Restore new chat prompt": "Restaurer une nouvellele inviteprompt de nouvelle discussion",
8683 "Set at the beginning of the chat history to indicate that a new chat is about to start.": "Placez-le au début de l'historique de discussion pour indiquer qu'une nouvelle discussion est sur le point de démarrer.",
8784 "New Group Chat": "Nouvelle discussion de groupe",
8885 "Restore new group chat prompt": "Restaurer l'invitele parprompt défautpour les nouvelle discussion de groupe",
8986 "Set at the beginning of the chat history to indicate that a new group chat is about to start.": "Défini au début de l'historique des discussions pour indiquer qu'une nouvelle discussion de groupe est sur le point de démarrer.",
9087 "New Example Chat": "Nouvel exemple de discussion",
9188 "Set at the beginning of Dialogue examples to indicate that a new example chat is about to start.": "Défini au début des exemples de dialogue pour indiquer qu'un nouvel exemple de discussion est sur le point de démarrer.",
9289 "Continue nudge": "Continuer le coup de pouce",
9390 "Set at the end of the chat history when the continue button is pressed.": "Défini à la fin de l’historique des discussions lorsque vous appuyez sur le bouton Continuer.",
9491 "Replace empty message": "Remplacer le message vide",
9592 "Send this text instead of nothing when the text box is empty.": "Envoyer ce texte à la place de rien lorsque la zone de texte est vide.",
9693 "Seed": "Graine",
9794 "Set to get deterministic results. Use -1 for random seed.": "Réglé pour obtenir des résultats déterministes. Utilisez -1 pour les graines aléatoires.",
9895 "Temperature controls the randomness in token selection": "La température contrôle l'aléatoire dans la sélection des tokens:\n- Une température basse (<1.0) entraîne un texte plus prévisible, en donnant la priorité aux tokens à forte probabilité.\n- Une température élevée (>1.0) favorise la créativité et la diversité de sortie, en donnant plus de chances aux tokens à faible probabilité.\nRéglez la valeur à 1.0 pour les probabilités d'origine.",
9996 "Top_K_desc": "Top K définit une quantité maximale de tokens les plus fréquents qui peuvent être sélectionnés.",
10097 "Top_P_desc": "Top P (alias échantillonnage du noyau) regroupe tous les tokens supérieurs nécessaires pour atteindre un pourcentage spécifique.\nAutrement dit, si les deux premiers tokens représentent 25 % et que Top-P est de 0,50, seuls ces deux tokens sont considérés.\nRéglez la valeur à 1.0 pour la désactiver.",
10198 "Typical P": "P typiqueTypique",
10299 "Typical_P_desc": "L'échantillonnage P typiqueTypique privilégie les tokens en fonction de leur écart par rapport à l'entropie moyenne de l'ensemble.\nLes tokens dont la probabilité cumulée est proche du seuil spécifié (par exemple, 0.5) sont conservés, ce qui distingue ceux contenant une information moyenne.\nRéglez la valeur à 1.0 pour la désactiver.",
103100 "Min_P_desc": "Min P définit une probabilité minimale de base. Elle est optimisée en fonction de la probabilité du token supérieur.\nSi la probabilité du token supérieur est de 80 % et que Min P est de 0.1, seuls les tokens avec une probabilité supérieure à 8 % sont considérés.\nRéglez la valeur à 0 pour la désactiver.",
104101 "Top_A_desc": "Top A définit un seuil pour la sélection des tokens en fonction du carré de la probabilité du token le plus élevé.\nSi Top A est de 0.2 et que la probabilité du token le plus élevé est de 50 %, les tokens avec une probabilité inférieure à 5 % sont exclus (0.2 * 0.5^2).\nRéglez la valeur à 0 pour la désactiver.",
105102 "Tail_Free_Sampling_desc": "Échantillonnage sans queue (TFS) recherche les tokens de queue ayant une faible probabilité dans la distribution,\n en analysant le taux de changement des probabilités des tokens à l'aide de dérivées. Les tokens sont conservés jusqu'au seuil (par exemple, 0.3), en fonction de la dérivée seconde uniforme.\nPlus la valeur se rapproche de 0, plus le nombre de tokens rejetés augmente. Réglez la valeur à 1.0 pour la désactiver.",
@@ -115,8 +112,8 @@
115112 "Ban_EOS_Token_desc": "Interdisez le jeton de fin de séquence (EOS) avec KoboldCpp (et éventuellement aussi d'autres jetons avec KoboldAI).\rIdéal pour l'écriture d'histoires, mais ne doit pas être utilisé pour le mode chat et instruction.",
116113 "GBNF Grammar": "Grammaire GBNF",
117114 "Type in the desired custom grammar": "Saisissez la grammaire personnalisée souhaitée",
118115 "Samplers Order": "Ordre des échantillonséchantillonneurs",
119116 "Samplers will be applied in a top-down order. Use with caution.": "Les échantillonséchantillonneurs seront appliqués dans un ordre de haut en bas. Utilisez avec prudence.",
120117 "Tail Free Sampling": "Échantillonnage sans queue",
121118 "Load koboldcpp order": "Charger l'ordre koboldcpp",
122119 "Preamble": "Préambule",
@@ -127,9 +124,9 @@
127124 "Add": "Ajouter",
128125 "Helps to ban or reenforce the usage of certain words": "Aide à interdire ou à renforcer l'utilisation de certains mots",
129126 "CFG Scale": "Échelle CFG",
130127 "Negative Prompt": "IndicationPrompt négativenégatif",
131128 "Add text here that would make the AI generate things you don't want in your outputs.": "Ajoutez ici du texte qui ferait générer à l'IA des choses que vous ne voulez pas dans vos sorties.",
132129 "Used if CFG Scale is unset globally, per chat or character": "Utilisé si l'échelle CFG n'est pas définie globalement, par chat ou par caractèrepersonnage.",
133130 "Mirostat Tau": "Tau Mirostat",
134131 "Mirostat LR": "Mirostat LR",
135132 "Min Length": "Longueur minimale",
@@ -143,13 +140,13 @@
143140 "Customize displayed samplers or add custom samplers.": "Personnalisez les échantillonneurs affichés ou ajoutez des échantillonneurs personnalisés.",
144141 "Epsilon Cutoff": "Coupure epsilon",
145142 "Epsilon cutoff sets a probability floor below which tokens are excluded from being sampled": "La coupure epsilon définit un seuil de probabilité en dessous duquel les tokens sont exclus de l'échantillonnage.\nEn unités 1e-4; la valeur appropriée est 3. Réglez-la à 0 pour la désactiver.",
146143 "Eta Cutoff": "Coupure etaEta",
147144 "Eta_Cutoff_desc": "Le seuil Eta est le principal paramètre de la technique d'échantillonnage Eta spéciale.&#13;En unités de 1e-4 ; une valeur raisonnable est 3.&#13;Réglez sur 0 pour désactiver.&#13;Voir l'article Truncation Sampling as Language Model Desmoothing par Hewitt et al. (2022) pour plus de détails.",
148145 "rep.pen decay": "CarieDéclin dude stylola pénalité de représentationrépétition",
149146 "Encoder Rep. Pen.": "Pénalité de répétition de l'encodeur",
150147 "No Repeat Ngram Size": "Taille de n-gramme sans répétition",
151148 "Skew": "Fausser",
152149 "Max Tokens Second": "Nombre maximum de jetonstoken par seconde",
153150 "Smooth Sampling": "Échantillonnage fluide",
154151 "Smooth_Sampling_desc": "Vous permet d'utiliser des transformations quadratiques/cubiques pour ajuster la distribution. Les valeurs inférieures du facteur de lissage seront plus créatives, généralement entre 0,2 et 0,3 comme point idéal (en supposant que la courbe = 1). Des valeurs de courbe de lissage plus élevées rendront la courbe plus raide, ce qui punira plus agressivement les choix à faible probabilité. La courbe 1,0 équivaut à utiliser uniquement le facteur de lissage.",
155152 "Smoothing Factor": "Facteur de lissage",
@@ -164,7 +161,7 @@
164161 "Allowed Length": "Longueur autorisée",
165162 "Penalty Range": "Fourchette de pénalité",
166163 "DRY_Sequence_Breakers_desc": "Jetons sur lesquels la correspondance de séquence n'est pas poursuivie. Spécifié sous la forme d'une liste de chaînes entre guillemets séparées par des virgules.",
167164 "Sequence Breakers": "DisjoncteursInterrupteurs de séquence",
168165 "JSON-serialized array of strings.": "Tableau de chaînes sérialisées JSON.",
169166 "Dynamic Temperature": "Température dynamique",
170167 "Scale Temperature dynamically per token, based on the variation of probabilities": "Échelonnez dynamiquement la température par token, en fonction de la variation des probabilités.",
@@ -178,46 +175,41 @@
178175 "Mirostat Eta": "Eta Mirostat",
179176 "Learning rate of Mirostat": "Taux d'apprentissage de Mirostat.",
180177 "Beam search": "Recherche par faisceau",
181- "Helpful tip coming soon.": "Conseil utile à venir.",
182- "Number of Beams": "Nombre de faisceaux",
183178 "Length Penalty": "Pénalité de longueur",
184179 "Early Stopping": "Arrêt précoce",
185180 "Contrastive search": "Recherche contrastive",
186181 "Penalty Alpha": "Alpha de pénalité",
187182 "Strength of the Contrastive Search regularization term. Set to 0 to disable CS": "Force du terme de régularisation de la recherche contrastive. Réglez la valeur à 0 pour désactiverla CSdésactiver.",
188183 "Do Sample": "Faire une échantillon",
189184 "Add BOS Token": "Ajouter le token BOS",
190185 "Add the bos_token to the beginning of prompts. Disabling this can make the replies more creative": "Ajoutez le token BOS au début des prompts. Désactiver cela peut rendre les réponses plus créatives",
191186 "Ban the eos_token. This forces the model to never end the generation prematurely": "Interdire le token EOS. Cela force le modèle à ne jamais terminer la génération prématurément",
192187 "Ignore EOS Token": "Ignorer le jetontoken EOS",
193188 "Ignore the EOS Token even if it generates.": "Ignorez le jetontoken EOS même s'il est généré.",
194189 "Skip Special Tokens": "Ignorer les tokens spéciaux",
195190 "Temperature Last": "Température en dernier",
196191 "Temperature_Last_desc": "Utilisez le réglage de température en dernier. Cela est généralement logique.\nLorsqu'il est activé : une sélection de tokens potentiels est d'abord effectuée, puis la température est appliquée pour corriger leurs probabilités relatives (techniquement, les log-likelihoods).\nLorsqu'il est désactivé : la température est d'abord appliquée pour corriger les probabilités relatives de tous les tokens, puis une sélection de tokens potentiels est effectuée parmi eux.\nDésactivez la température en dernier.",
197192 "Speculative Ngram": "Ngramme spéculatif",
198193 "Use a different speculative decoding method without a draft model": "Utilisez une méthode de décodage spéculative différente sans projet de modèle.\rIl est préférable d’utiliser une ébauche de modèle. Le ngram spéculatif n’est pas aussi efficace.",
199194 "Spaces Between Special Tokens": "Espaces entre les jetonstokens spéciaux",
200195 "LLaMA / Mistral / Yi models only": "Modèles LLaMA / Mistral / Yi uniquement. Assurez-vous de sélectionner d'abord l'analyste approprié.\nLes chaînes de caractères ne doivent pas apparaître dans les résultats.\nUne chaîne par ligne. Texte ou [identifiants de tokens].\nDe nombreux tokens commencent par un espace. Utilisez un compteur de tokens si vous n'êtes pas sûr.",
201196 "Example: some text [42, 69, 1337]": "Exemple:\nun certain texte\n[42, 69, 1337]",
202197 "Classifier Free Guidance. More helpful tip coming soon": "Guidance gratuite du classificateur. Des conseils plus utiles arrivent bientôt.",
203198 "Scale": "Échelle",
204199 "JSON Schema": "Schéma JSON",
205200 "Type in the desired JSON schema": "Tapez le schéma JSON souhaité",
206201 "Grammar String": "Chaîne de grammaire",
207202 "GBNF or EBNF, depends on the backend in use. If you're using this you should know which.": "GBNF ou EBNF dépend du backend utilisé. Si vous l'utilisez, vous devez savoir lequel.",
208203 "Top P & Min P": "PTop supérieurP et PMin minimalP",
209204 "Load default order": "Charger l'ordre par défaut",
210205 "llama.cpp only. Determines the order of samplers. If Mirostat mode is not 0, sampler order is ignored.": "lama.cpp uniquement. Détermine l’ordre des échantillonneurs. Si le mode Mirostat n'est pas à 0, l'ordre de l'échantillonneur est ignoré.",
211206 "Sampler Priority": "Priorité de l'échantillonneur",
212207 "Ooba only. Determines the order of samplers.": "Ooba uniquement. Détermine l'ordre des échantillonneurs.",
213208 "Character Names Behavior": "Comportement des noms de personnages",
214209 "Helps the model to associate messages with characters.": "Aide le modèle à associer desles messages àavec desles personnages.",
215210 "None": "Aucun",
216211 "character_names_default": "Sauf pour les groupes et les personnages passés. Sinon, assurez-vous de fournir des noms dans l'invitele prompt.",
217- "Don't add character names.": "N'ajoutez pas de noms de personnages.",
218- "Completion": "Objet d'achèvement",
219212 "character_names_completion": "Des restrictions s'appliquent : uniquement les caractères alphanumériques latins et les traits de soulignement. Ne fonctionne pas pour toutes les sources, notamment : Claude, MistralAI, Google.",
220- "Add character names to completion objects.": "Ajoutez des noms de personnages aux objets de complétion.",
221213 "Message Content": "Contenu du message",
222214 "Prepend character names to message contents.": "Ajoutez les noms de caractères au contenu du message.",
223215 "Continue Postfix": "Continuer Postfix",
@@ -235,53 +227,45 @@
235227 "Combines consecutive system messages into one (excluding example dialogues). May improve coherence for some models.": "Combine les messages système consécutifs en un seul (à l'exclusion des dialogues d'exemple). Peut améliorer la cohérence pour certains modèles.",
236228 "Enable function calling": "Activer l'appel de fonction",
237229 "Send inline images": "Envoyer des images en ligne",
238230 "image_inlining_hint_1": "Envoie des images dans les invitesprompts si le modèle le prend en charge (par exemple GPT-4V, Claude 3 ou Llava 13B).\nUtilisez le",
239231 "image_inlining_hint_2": "action sur n'importe quel message ou le",
240232 "image_inlining_hint_3": "menu pour joindre un fichier image au chat.",
241233 "Inline Image Quality": "Qualité d'image en ligne",
242234 "openai_inline_image_quality_auto": "Auto",
243235 "openai_inline_image_quality_low": "Faible",
244236 "openai_inline_image_quality_high": "Haut",
245237 "Use AI21system Tokenizerprompt": "Utiliser le tokeniseurprompt AI21système",
246- "Use the appropriate tokenizer for Jurassic models, which is more efficient than GPT's.": "Utilisez le tokenizer approprié pour les modèles Jurassic, qui est plus efficace que celui de GPT.",
247- "Use Google Tokenizer": "Utiliser le tokenizer Google",
248- "Use the appropriate tokenizer for Google models via their API. Slower prompt processing, but offers much more accurate token counting.": "Utilisez le tokenizer approprié pour les modèles Google via leur API. Traitement des invitations plus lent, mais offre un décompte de jetons beaucoup plus précis.",
249- "Use system prompt": "Utiliser l'invite système",
250- "(Gemini 1.5 Pro/Flash only)": "(Gemini 1.5 Pro/Flash uniquement)",
251238 "Merges_all_system_messages_desc_1": "Fusionne tous les messages système jusqu'au premier message avec un rôle non-système et les envoie dans un",
252239 "Merges_all_system_messages_desc_2": "champ.",
253240 "Assistant Prefill": "Pré-remplissage de l'assistant",
254241 "Start Claude's answer with...": "Commencer la réponse de Claude par...",
255242 "Assistant Impersonation Prefill": "Pré-remplir l'usurpation d'identité de l'assistant",
256243 "Use system prompt (Claude 2.1+ only)": "Utiliser l'invitele prompt système (uniquement Claude 2.1+)",
257244 "Send the system prompt for supported models. If disabled, the user message is added to the beginning of the prompt.": "Envoyer l'invitele prompt système pour les modèles pris en charge. Si désactivé, le message de l'utilisateur est ajouté au début dedu l'inviteprompt.",
258245 "User firstNew messagepreset": "Premier message deNouveau l'utilisateurpreset",
259246 "Restore User firstDelete messagepreset": "RestaurerSupprimer le premier message de l'utilisateurpreset",
260- "Human message": "Message humain, instruction, etc.\nN'ajoute rien lorsqu'il est vide, c'est-à-dire nécessite une nouvelle invite avec le rôle « utilisateur ».",
247+ "View / Edit bias preset": "Afficher/Modifier le preset de biais",
261- "New preset": "Nouveau préréglage",
262- "Delete preset": "Supprimer le préréglage",
263- "View / Edit bias preset": "Afficher/Modifier le préréglage de biais",
264248 "Add bias entry": "Ajouter une entrée de biais",
265249 "Most tokens have a leading space.": "La plupart des jetonstokens ontsont précédés d'un espace de début.",
266250 "API Connections": "Connexions API",
267251 "Text Completion": "AchèvementComplétion dude texte",
268252 "Chat Completion": "AchèvementComplétion dude chat",
269253 "NovelAI": "NovelAI",
270254 "AI Horde": "AI Horde",
271255 "KoboldAI": "KoboldAI",
272256 "Avoid sending sensitive information to the Horde.": "Évitez d'envoyer des informations sensibles à la Horde.",
273257 "Review the Privacy statement": "Examiner la déclaration de confidentialité",
274258 "Register a Horde account for faster queue times": "Inscrivez-vous àEnregistrez un compte Horde pour desaccélérer tempsles files d'attente plus courts",
275259 "Learn how to contribute your idle GPU cycles to the Horde": "ApprenezDécouvrez comment contribuer à la Horde avec vos cycles GPU inactifs à la Horde.",
276260 "Adjust context size to worker capabilities": "Ajuster la taille du contexte aux capacités des travailleurs",
277261 "Adjust response length to worker capabilities": "Ajuster la longueur de la réponse aux capacités des travailleurs",
278262 "Can help with bad responses by queueing only the approved workers. May slowdown the response time.": "Peut aider avec les mauvaises réponses en mettant en file d'attente uniquement les travailleurs approuvés. Peut ralentir le temps de réponse.",
279263 "Trusted workers only": "Travailleurs de confiance uniquement",
280264 "API key": "Clé API",
281265 "Get it here:": "Obtenez-lela ici :",
282266 "Register": "S'inscrire",
283267 "View my Kudos": "Voir mes Kudos",
284268 "Enter": "EntrerEntrez",
285269 "to use anonymous mode.": "pour utiliser le mode anonyme.",
286270 "Clear your API key": "Effacer votre clé API",
287271 "For privacy reasons, your API key will be hidden after you reload the page.": "Pour des raisons de confidentialité, votre clé API sera masquée après le rechargement de la page.",
@@ -291,7 +275,7 @@
291275 "Not connected...": "Non connecté...",
292276 "API url": "URL de l'API",
293277 "Example: http://127.0.0.1:5000/api ": "Exemple : http://127.0.0.1:5000/api",
294278 "Connect": "Se connecterConnection",
295279 "Cancel": "Annuler",
296280 "Novel API key": "Clé API de NovelAI",
297281 "Get your NovelAI API Key": "Obtenez votre clé API NovelAI",
@@ -299,7 +283,6 @@
299283 "Novel AI Model": "Modèle NovelAI",
300284 "No connection...": "Pas de connexion...",
301285 "API Type": "Type d'API",
302- "Default (completions compatible)": "Par défaut [OpenAI /complétions compatibles : oobabooga, LM Studio, etc.]",
303286 "TogetherAI API Key": "Clé API de TogetherAI",
304287 "TogetherAI Model": "Modèle TogetherAI",
305288 "-- Connect to the API --": "-- Se connecter à l'API --",
@@ -338,25 +321,23 @@
338321 "Authorize": "Autoriser",
339322 "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",
340323 "Bypass status check": "Contourner la vérification de l'état",
341324 "Chat Completion Source": "Source de complétion de la conversationchat",
342325 "Reverse Proxy": "ProxyReverse inverseProxy",
343326 "Proxy Presets": "PréréglagesPresets proxy",
344327 "Saved addresses and passwords.": "Adresses et mots de passe enregistrés.",
345328 "Save Proxy": "Enregistrer le proxy",
346329 "Delete Proxy": "Supprimer le proxy",
347330 "Proxy Name": "Nom du proxy",
348331 "This will show up as your saved preset.": "Cela apparaîtra comme votre préréglagepreset enregistré.",
349332 "Proxy Server URL": "URL du serveur proxy",
350333 "Alternative server URL (leave empty to use the default value).": "URL du serveur alternatif (laissez vide pour utiliser la valeur par défaut).",
351- "Remove your real OAI API Key from the API panel BEFORE typing anything into this box": "Supprimez votre véritable clé API OAI du panneau API AVANT de taper quoi que ce soit dans cette boîte",
352- "We cannot provide support for problems encountered while using an unofficial OpenAI proxy": "Nous ne pouvons pas fournir de support pour les problèmes rencontrés lors de l'utilisation d'un proxy OpenAI non officiel",
353334 "Doesn't work? Try adding": "Ça ne marche pas ? Essayez d'ajouter",
354335 "at the end!": "à la fin!",
355336 "Proxy Password": "Mot de passe proxy",
356337 "Will be used as a password for the proxy instead of API key.": "Sera utilisé comme mot de passe pour le proxy au lieu de la clé API.",
357338 "Peek a password": "Jetez un œil à un mot de passe",
358339 "OpenAI API key": "Clé API OpenAI",
359340 "View API Usage Metrics": "Afficher les mesuresstatistiques d'utilisation de l'API",
360341 "Follow": "Suivre",
361342 "these directions": "ces instructions",
362343 "to get your OpenAI API key.": "pour obtenir votre clé API OpenAI.",
@@ -374,7 +355,6 @@
374355 "Context Size": "Taille du contexte",
375356 "Group by vendors": "Regrouper par fournisseurs",
376357 "Group by vendors Description": "Placez les modèles OpenAI dans un groupe, les modèles Anthropic dans un autre groupe, etc. Peut être combiné avec le tri.",
377- "Allow fallback routes": "Autoriser les itinéraires de secours",
378358 "Allow fallback routes Description": "Le modèle alternatif est automatiquement sélectionné si le modèle choisi ne peut pas répondre à votre demande.",
379359 "Scale API Key": "Clé API Scale",
380360 "Clear your cookie": "Effacer vos cookies",
@@ -387,15 +367,15 @@
387367 "MistralAI Model": "Modèle MistralAI",
388368 "Groq API Key": "Clé API Groq",
389369 "Groq Model": "Modèle Groq",
390370 "Perplexity API Key": "Clé API de perplexitéPerplexity",
391371 "Perplexity Model": "Modèle de perplexitéPerplexity",
392372 "Cohere API Key": "Cohérer la cléClé API Cohere",
393373 "Cohere Model": "Modèle de cohérenceCohere",
394374 "Custom Endpoint (Base URL)": "Point de terminaison personnalisé (URL de base)",
395375 "Custom API Key": "Clé API personnalisée",
396376 "Available Models": "Modèles disponibles",
397377 "Prompt Post-Processing": "Post-traitement rapidede prompt",
398378 "Applies additional processing to the prompt before sending it to the API.": "Applique un traitement supplémentaire àau l'inviteprompt avant de l'envoyer à l'API.",
399379 "Verifies your API connection by sending a short test message. Be aware that you'll be credited for it!": "Vérifie votre connexion API en envoyant un court message de test. Soyez conscient que vous serez crédité pour cela !",
400380 "Test Message": "Message de test",
401381 "Auto-connect to Last Server": "Connexion automatique au dernier serveur",
@@ -405,93 +385,65 @@
405385 "AI Response Formatting": "Formatage de la réponse de l'IA",
406386 "Advanced Formatting": "Formatage avancé",
407387 "Context Template": "Modèle de contexte",
408- "Auto-select this preset for Instruct Mode": "Sélectionner automatiquement ce préréglage pour le mode Instruct",
409388 "Story String": "Chaîne d'histoire",
410389 "Example Separator": "Séparateur d'exemple",
411390 "Chat Start": "Début de la discussion",
412391 "Add Chat Start and Example Separator to a list of stopping strings.": "Ajoutez Chat Start et Sample Separator à une liste de chaînes d’arrêt.",
413392 "Use as StopAuthor's StringsNote": "Utiliser comme chaînesNote d'arrêtauteur",
414- "context_allow_jailbreak": "Inclut Jailbreak à la fin de l'invite, s'il est défini dans la carte du personnage ET « Prefer Char. Le jailbreak'' est activé.\nCECI N'EST PAS RECOMMANDÉ POUR LES MODÈLES DE COMPLÉTION DE TEXTE, PEUT ENTRAÎNER UNE MAUVAIS SORTIE.",
415- "Allow Jailbreak": "Autoriser le jailbreak",
416- "Context Order": "Ordre contextuel",
417- "Summary": "Résumé",
418- "Author's Note": "Note de l'auteur",
419- "Example Dialogues": "Exemples de dialogues",
420- "Hint": "Indice:",
421- "In-Chat Position not affected": "Les commandes de résumé et de note de l'auteur ne sont affectées que lorsqu'elles n'ont pas de position définie dans le chat.",
422- "Instruct Mode": "Mode d'instruction",
423393 "Enabled": "Activé",
424394 "instruct_bind_to_context": "Si cette option est activée, les modèles de contexte seront automatiquement sélectionnés en fonction du nom du modèle d'instruction sélectionné ou par préférence.",
425- "Bind to Context": "Lier au contexte",
426- "Presets": "Préréglages",
427- "Auto-select this preset on API connection": "Sélectionner automatiquement ce préréglage lors de la connexion à l'API",
428395 "Activation Regex": "Regex d'activation",
429396 "Wrap Sequences with Newline": "Envelopper les séquences avec un saut de ligne",
430397 "Replace Macro in Sequences": "Remplacer lela macro dans les séquences",
431398 "Skip Example Dialogues Formatting": "Ignorer le formatage des dialogues d'exemple",
432399 "Include Names": "Inclure les noms",
433- "Force for Groups and Personas": "Forcer pour les groupes et les personnages",
400+ "System Prompt": "Prompt système",
434401 "Inserted before a System Promptprompt.": "PrompInséré avant un prompt système.",
435402 "InstructSystem ModePrompt SequencesPrefix": "SéquencesPréfixe dude modeprompt d'instructionsystème",
436403 "SystemInserted Promptafter Wrappinga System prompt.": "EnveloppementInséré d’inviteaprès un prompt système.",
437404 "Inserted before a System prompt.Prompt Suffix": "Inséré avantSuffixe unede inviteprompt système.",
438- "System Prompt Prefix": "Préfixe d'invite système",
405+ "Inserted before a User message and as a last prompt line when impersonating.": "Inséré avant un message utilisateur et comme dernière ligne du prompt lors de l'usurpation d'identité.",
439- "Inserted after a System prompt.": "Inséré après une invite système.",
440- "System Prompt Suffix": "Suffixe d'invite système",
441- "Chat Messages Wrapping": "Enveloppement des messages de discussion",
442- "Inserted before a User message and as a last prompt line when impersonating.": "Inséré avant un message utilisateur et comme dernière ligne d'invite lors de l'usurpation d'identité.",
443- "User Message Prefix": "Préfixe du message utilisateur",
444406 "Inserted after a User message.": "Inséré après un message utilisateur.",
445- "User Message Suffix": "Suffixe du message utilisateur",
407+ "Inserted before an Assistant message and as a last prompt line when generating an AI reply.": "Inséré avant un message de l'Assistant et comme dernière ligne du prompt lors de la génération d'une réponse de l'IA.",
446- "Inserted before an Assistant message and as a last prompt line when generating an AI reply.": "Inséré avant un message de l'Assistant et comme dernière ligne d'invite lors de la génération d'une réponse AI.",
447- "Assistant Message Prefix": "Préfixe du message de l'assistant",
448408 "Inserted after an Assistant message.": "Inséré après un message de l'assistant.",
449- "Assistant Message Suffix": "Suffixe du message de l'assistant",
450409 "Inserted before a System (added by slash commands or extensions) message.": "Inséré avant un message système (ajouté par des commandes slash ou des extensions).",
451- "System Message Prefix": "Préfixe du message système",
452410 "Inserted after a System message.": "Inséré après un message système.",
453- "System Message Suffix": "Suffixe du message système",
454411 "If enabled, System Sequences will be the same as User Sequences.": "Si cette option est activée, les séquences système seront les mêmes que les séquences utilisateur.",
455412 "System same as User": "Système identique à l'utilisateur",
456413 "Misc. Sequences": "Séquences diverses",
457414 "Inserted before the first Assistant's message.": "Inséré avant le messagepremier dumessage premierde l'assistant.",
458415 "First Assistant Prefix": "Préfixe du premier assistant",
459416 "instruct_last_output_sequence": "Inséré avant le dernier message de l'assistant ou comme dernière ligne d'invitedu prompt lors de la génération d'une réponse de l'IA (sauf un rôle neutre/système).",
460417 "Last Assistant Prefix": "Préfixe du dernier assistant",
461418 "Will be inserted as a last prompt line when using system/neutral generation.": "Sera inséré comme dernière ligne d’invitedu prompt lors de l’utilisation de la génération système/neutre.",
462419 "System Instruction Prefix": "Préfixe d'instruction système",
463420 "If a stop sequence is generated, everything past it will be removed from the output (inclusive).": "Si une séquence d'arrêt est générée, tout ce qui se trouve au-delà sera supprimé de la sortie (inclus).",
464421 "Stop Sequence": "Séquence d'arrêt",
465422 "Will be inserted at the start of the chat history if it doesn't start with a User message.": "Sera inséré au début de l'historique des discussions s'il ne commence pas par un message utilisateur.",
466423 "User Filler Message": "Message de remplissage de l'utilisateur",
467424 "Context Formatting": "Formatage du contexte",
468425 "(SavedAlways toadd Contextcharacter's Template)name to prompt": "(EnregistréToujours dansajouter le modèlenom dedu contexte)personnage au prompt",
469426 "AlwaysGenerate addonly character'sone nameline toper promptrequest": "Ajouter toujours leGénérer nomseulement duune personnageligne aupar supportrequête",
470- "Generate only one line per request": "Générer seulement une ligne par demande",
471427 "Trim Incomplete Sentences": "Supprimer les phrases incomplètes",
472- "Include Newline": "Inclure un retour à la ligne",
473- "Misc. Settings": "Paramètres divers",
474428 "Collapse Consecutive Newlines": "Réduire les sauts de ligne consécutifs",
475429 "Trim spaces": "Supprimer les espaces",
476430 "Tokenizer": "Tokeniseur",
477431 "Token Padding": "Remplissage de jetontoken",
478432 "Start Reply With": "Commencer la réponse avec",
479- "AI reply prefix": "Préfixe de réponse de l'IA",
480433 "Show reply prefix in chat": "Afficher le préfixe de réponse dans la conversation",
481434 "Non-markdown strings": "Chaînes non Markdown",
482- "separate with commas w/o space between": "séparez avec des virgules sans espace entre",
483435 "Custom Stopping Strings": "Chaînes d'arrêt personnalisées",
484436 "JSON serialized array of strings": "Tableau de chaînes sérialisé JSON",
485437 "Replace Macro in Custom Stopping Strings": "Remplacer les macro dans les chaînes d'arrêt personnalisées",
486438 "Auto-Continue": "Auto-ContinuerContinue",
487439 "Allow for Chat Completion APIs": "Autoriser les APIs de complétion de la discussionchat",
488440 "Target length (tokens)": "Longueur cible (jetonstokens)",
489441 "World Info": "Informations sur leWorld mondeInfo",
490442 "Locked = World Editor will stay open": "Verrouillé = l'éditeur dedes mondeWorld Info restera ouvert",
491443 "Worlds/Lorebooks": "MondesWorlds/Livres de loreLorebooks",
492444 "Active World(s) for all chats": "Monde(s) actif(s) pour toutes les conversations",
493445 "-- World Info not found --": "-- Informations sur leWorld mondeInfo non trouvées --",
494446 "Global World Info/Lorebook activation settings": "Paramètres d'activation deglobales Globaldes World Info/Lorebook",
495447 "Click to expand": "Cliquez pour agrandir",
496448 "Scan Depth": "Profondeur de scan",
497449 "Context %": "Pourcentage de contexte",
@@ -518,41 +470,39 @@
518470 "New": "Nouveau",
519471 "or": "ou",
520472 "--- Pick to Edit ---": "--- Sélectionnez pour éditer ---",
521473 "Rename World Info": "Renommer les informations sur le mondeWorld Info",
522474 "Open all Entries": "Ouvrir toutes les entrées",
523475 "Close all Entries": "Fermer toutes les entrées",
524476 "New Entry": "Nouvelle entrée",
525477 "Fill empty Memo/Titles with Keywords": "Remplir les mémos/titres vides avec des mots-clés",
526478 "Import World Info": "Importer les informations surun leWolrd mondeInfo",
527479 "Export World Info": "Exporter les informations sur le mondeWolrd Info",
528480 "Duplicate World Info": "Dupliquer les informations sur le mondeWorld Info",
529481 "Delete World Info": "Supprimer les informations sur le mondeWorld Info",
530482 "Search...": "Rechercher...",
531483 "Search": "Recherche",
532484 "Priority": "Priorité",
533485 "Custom": "Personnalisé",
534486 "Title A-Z": "Titre A-Z",
535487 "Title Z-A": "Titre Z-A",
536488 "Tokens ↗": "JetonsTokens ↗",
537489 "Tokens ↘": "JetonsTokens ↘",
538490 "Depth ↗": "Profondeur ↗",
539491 "Depth ↘": "Profondeur ↘",
540492 "Order ↗": "CommandeOrdre ↗",
541493 "Order ↘": "CommandeOrdre ↘",
542494 "UID ↗": "UID ↗",
543495 "UID ↘": "UID ↘",
544496 "Trigger% ↗": "Déclencheur% ↗",
545497 "Trigger% ↘": "Déclencheur% ↘",
546498 "Refresh": "Actualiser",
547499 "User Settings": "Paramètres utilisateur",
548- "Simple": "Simple",
549- "Advanced": "Avancé",
550500 "UI Language": "Langue",
551501 "Account": "Compte",
552502 "Admin Panel": "panneauPanneau d'administration",
553503 "Logout": "Se déconnecterDéconnection",
554504 "Search Settings": "ParamètresRecherche de rechercheparamètres",
555505 "UI Theme": "Thème de l'interface utilisateurUI",
556506 "Import a theme file": "Importer un fichier de thème",
557507 "Export a theme file": "Exporter un fichier de thème",
558508 "Delete a theme": "Supprimer un thème",
@@ -582,8 +532,8 @@
582532 "Width of the main chat window in % of screen width": "Largeur de la fenêtre de discussion principale en % de la largeur de l'écran",
583533 "Font Scale": "Échelle de police",
584534 "Font size": "Taille de police",
585535 "Blur Strength": "Force dedu flou",
586536 "Blur strength on UI panels.": "Force dedu flou sur les panneaux de l'interface utilisateur.",
587537 "Text Shadow Width": "Largeur de l'ombre du texte",
588538 "Strength of the text shadows": "Force des ombres du texte",
589539 "Disables animations and transitions": "Désactive les animations et transitions",
@@ -595,11 +545,11 @@
595545 "Reduce chat height, and put a static sprite behind the chat window": "Réduire la hauteur de la discussion et placer un sprite statique derrière la fenêtre de discussion",
596546 "Waifu Mode": "Mode Waifu",
597547 "Always show the full list of the Message Actions context items for chat messages, instead of hiding them behind '...'": "Afficher toujours la liste complète des éléments de contexte Actions de message pour les messages de discussion, au lieu de les cacher derrière '...' ",
598548 "Auto-Expand Message Actions": "Extension automatique des actions dedu message",
599549 "Alternative UI for numeric sampling parameters with fewer steps": "Interface utilisateur alternative pour les paramètres d'échantillonnage numérique avec moins d'étapes",
600550 "Zen Sliders": "Curseurs Zen",
601551 "Entirely unrestrict all numeric sampling parameters": "Déverrouiller entièrement tous les paramètres d'échantillonnage numérique",
602552 "Mad Lab Mode": "Mode laboratoireMad fouLab",
603553 "Time the AI's message generation, and show the duration in the chat log": "Chronométrer la génération de messages de l'IA et afficher la durée dans le journal de discussion",
604554 "Message Timer": "Minuteur de message",
605555 "Show a timestamp for each message in the chat log": "Afficher un horodatage pour chaque message dans le journal de discussion",
@@ -607,38 +557,35 @@
607557 "Show an icon for the API that generated the message": "Afficher une icône pour l'API qui a généré le message",
608558 "Model Icon": "Icône du modèle",
609559 "Show sequential message numbers in the chat log": "Afficher les numéros de message séquentiels dans le journal de discussion",
610560 "Message IDs": "Identifiants dedu message",
611561 "Hide avatars in chat messages.": "Masquez les avatars dans les messages de discussion.",
612562 "Hide Chat Avatars": "Masquer les avatars du chat",
613563 "Show the number of tokens in each message in the chat log": "Afficher le nombre de jetonstokens dans chaque message dans le journal de discussion",
614564 "Show Message Token Count": "Afficher le nombre de jetonstokens dedu message",
615565 "Single-row message input area. Mobile only, no effect on PC": "Zone de saisie de message sur une seule ligne. Mobile uniquement, aucun effet sur PC",
616566 "Compact Input Area (Mobile)": "Zone de saisie compacte (Mobile)",
617567 "In the Character Management panel, show quick selection buttons for favorited characters": "Dans le panneau de gestion des personnages, afficher des boutons de sélection rapide pour les personnages favoris",
618568 "Characters Hotswap": "Échange rapide de personnages",
619569 "Enable magnification for zoomed avatar display.": "Activer le grossissement pour l'affichage de l'avatar zoomé.",
620570 "Avatar Hover Magnification": "Agrandissement duau survol de l'avatar",
621571 "Enables a magnification effect on hover when you display the zoomed avatar after clicking an avatar's image in chat.": "Active un effet de grossissement au survol lorsque vous affichez l'avatar zoomé après avoir cliqué sur l'image d'un avatar dans le chat.",
622572 "Show tagged character folders in the character list": "Afficher les dossiers de personnages tagués dans la liste de personnages",
623573 "Tags as Folders": "BalisesTags comme dossiers",
624574 "Tags_as_Folders_desc": "Modification récente : les balisestags doivent être marquéesmarqués comme dossiers dans le menu Gestion des balisestags pour apparaître comme telles. Cliquez ici pour l'afficher.",
625575 "Character Handling": "Gestion des caractèrespersonnages",
626576 "If set in the advanced character definitions, this field will be displayed in the characters list.": "Si défini dans les définitions de personnage avancées, ce champ sera affiché dans la liste des personnages.",
627577 "Char List Subheader": "Sous-en-tête de la liste dedes caractèrespersonnages",
628578 "Character Version": "Version du personnage",
629579 "Created by": "Créé par",
630580 "Use fuzzy matching, and search characters in the list by all data fields, not just by a name substring": "Utiliser la correspondance floue et rechercher des personnages dans la liste par tous les champs de données, pas seulement par une sous-chaîne de nom",
631581 "Advanced Character Search": "Recherche de personnage avancée",
632582 "If checked and the character card contains a prompt override (System Prompt), use that instead": "Si cochée et si la carte de personnage contient un remplacementprompt d'invitede remplacement (inviteprompt système), l'utiliser à la place",
633583 "Prefer Character Card Prompt": "Préférer l'invite dele carteprompt dedu personnage",
634- "If checked and the character card contains a jailbreak override (Post History Instruction), use that instead": "Si cochée et si la carte de personnage contient un contournement de jailbreak (Instruction d'historique des messages), l'utiliser à la place",
635- "Prefer Character Card Jailbreak": "Préférer le jailbreak de carte de personnage",
636584 "Avoid cropping and resizing imported character images. When off, crop/resize to 512x768": "Évitez de recadrer et de redimensionner les images de personnages importés. Lorsqu'il est désactivé, recadrez/redimensionnez à 512 x 768.",
637585 "Never resize avatars": "Ne jamais redimensionner les avatars",
638586 "Show actual file names on the disk, in the characters list display only": "Afficher les noms de fichier réels sur le disque, dans l'affichage de la liste de personnages uniquement",
639587 "Show avatar filenames": "Afficher les noms de fichier des avatars",
640- "Prompt to import embedded card tags on character import. Otherwise embedded tags are ignored": "Proposer d'importer les balises de carte intégrées lors de l'importation de personnages. Sinon, les balises intégrées sont ignorées",
588+ "Import Card Tags": "Importer les tags de carte",
641- "Import Card Tags": "Importer les balises de carte",
642589 "Hide character definitions from the editor panel behind a spoiler button": "Masquer les définitions de personnages du panneau d'édition derrière un bouton spoiler",
643590 "Spoiler Free Mode": "Mode sans spoiler",
644591 "Miscellaneous": "Divers",
@@ -651,42 +598,42 @@
651598 "Fast": "Rapide",
652599 "Play a sound when a message generation finishes": "Jouer un son lorsque la génération de message est terminée",
653600 "Message Sound": "Son de message",
654601 "Only play a sound when ST's browser tab is unfocused": "Jouer un son uniquement lorsque l'onglet ST du navigateur ST n'est pas centréactive",
655602 "Background Sound Only": "Son de fond uniquement",
656603 "Reduce the formatting requirements on API URLs": "Réduire les exigences de formatage sur les URL d'API",
657604 "Relaxed API URLS": "URLs d'API détendues",
658605 "Ask to import the World Info/Lorebook for every new character with embedded lorebook. If unchecked, a brief message will be shown instead": "Demander d'importer les informationsle duWord mondeInfo/Lorebook pour chaque nouveau personnage avec Lorebook intégré. Si non cochée, un message bref sera affiché à la place",
659606 "Lorebook Import Dialog": "Boîte de dialogue d'importation de Lorebook",
660607 "Restore unsaved user input on page refresh": "Restaurer les saisies utilisateur non enregistrées lors du rafraîchissement de la page",
661608 "Restore User Input": "Restaurer l'entrée utilisateur",
662609 "Allow repositioning certain UI elements by dragging them. PC only, no effect on mobile": "Permettre le repositionnement de certains éléments de l'interface utilisateur en les faisant glisser. PC uniquement, aucun effet sur mobile",
663610 "Movable UI Panels": "Panels d'UI déplaçables",
664611 "MovingUI preset. Predefined/saved draggable positions": "PréréglagePreset MovingUI. Positions prédéfinies/enregistrées pouvant être déplacées",
665612 "MUI Preset": "PréréglagePreset MUI",
666613 "Save movingUI changes to a new file": "Enregistrer les modifications de MovingUI dans un nouveau fichier",
667614 "Reset MovingUI panel sizes/locations.": "Réinitialisez les tailles/emplacements des panneaux MovingUI.",
668615 "Apply a custom CSS style to all of the ST GUI": "Appliquer un style CSS personnalisé à toute l'interface utilisateur de ST",
669616 "Custom CSS": "CSS personnalisé",
670617 "Expand the editor": "DéveloppezAgrandir l'éditeur",
671618 "Chat/Message Handling": "Gestion de la discussion/des messages",
672619 "# Messages to Load": "# Message.Messages à charger",
673620 "The number of chat history messages to load before pagination.": "Le nombre de messages de l'historique des discussions à charger avant la pagination.",
674621 "(0 = All)": "(0 = Tout)",
675622 "Streaming FPS": "Images par secondeFPS en streaming",
676623 "Update speed of streamed text.": "Vitesse de mise à jour du texte diffusé.",
677624 "Example Messages Behavior": "Comportement des messages d'exemple",
678625 "Gradual push-out": "Poussée progressive",
679626 "Always include examples": "InclureToujours toujoursinclure desles exemples",
680627 "Never include examples": "Ne jamais inclure d'les exemples",
681628 "Send on Enter": "Envoyer sur Entrée",
682629 "Disabled": "Désactivé",
683630 "Automatic (PC)": "Automatique (PC)",
684631 "Press Send to continue": "Appuyez sur Envoyer pour continuer",
685632 "Show a button in the input area to ask the AI to continue (extend) its last message": "Afficher un bouton dans la zone de saisie pour demander à l'IA de continuer (étendre) son dernier message",
686633 "Quick 'Continue' button": "BoutonRaccourcis 'Continuer' rapide",
687634 "Show arrow buttons on the last in-chat message to generate alternative AI responses. Both PC and mobile": "Afficher des boutons fléchés sur le dernier message de discussion pour générer des réponses alternatives de l'IA. Sur PC et mobile",
688635 "Swipes": "Balayages",
689636 "Allow using swiping gestures on the last in-chat message to trigger swipe generation. Mobile only, no effect on PC": "Autoriser l'utilisation de gestes de balayage sur le dernier message de discussion pour déclencher la génération de glissementmessages alternatifs. Mobile uniquement, aucun effet sur PC",
690637 "Gestures": "Gestes",
691638 "Auto-load Last Chat": "Chargement automatique de la dernière discussion",
692639 "Auto-scroll Chat": "Défilement automatique de la discussion",
@@ -700,20 +647,20 @@
700647 "Allow {{user}}: in bot messages": "Autoriser {{user}} : dans les messages du bot",
701648 "Skip encoding and characters in message text, allowing a subset of HTML markup as well as Markdown": "Ignorer l'encodage et les caractères < et > dans le texte du message, permettant un sous-ensemble du balisage HTML ainsi que Markdown",
702649 "Show tags in responses": "Afficher les tags dans les réponses",
703650 "Allow AI messages in groups to contain lines spoken by other group members": "Autoriser les messages AIde l'IA dans les groupes à contenir des lignes prononcées par d'autres membres du groupe",
704651 "Relax message trim in Groups": "Relaxer la taille des messages dans les groupes",
705652 "Log prompts to console": "Journaliser les invitesprompts dans la console",
706653 "Requests logprobs from the API for the Token Probabilities feature": "Demande des logprobs de l'API pour la fonctionnalité des probabilités dedes jetonstokens",
707654 "Request token probabilities": "ProbabilitésDemande dedes jetonprobabilités de demandetokens",
708655 "Automatically reject and re-generate AI message based on configurable criteria": "Rejeter automatiquement et régénérer un message AI en fonction de critères configurables",
709656 "Auto-swipe": "GlissementBalayage automatique",
710657 "Enable the auto-swipe function. Settings in this section only have an effect when auto-swipe is enabled": "Activer la fonction de glissementbalayage automatique. Les paramètres de cette section n'ont d'effet que lorsque le glissementbalayage automatique est activé",
711658 "Minimum generated message length": "Longueur minimale du message généré",
712659 "If the generated message is shorter than this, trigger an auto-swipe": "Si le message généré est plus court que cela, déclenchez un glissementbalayage automatique",
713660 "Blacklisted words": "Mots en liste noire",
714661 "words you dont want generated separated by comma ','": "mots que vous ne voulez pas générer séparés par des virgules ','",
715662 "Blacklisted word count to swipe": "Nombre de mots en liste noire àpour glisserbalayer",
716663 "Minimum number of blacklisted words detected to trigger an auto-swipe": "Nombre minimum de mots en liste noire détectés pour déclencher un glissementbalayage automatique",
717664 "AutoComplete Settings": "Paramètres de saisie semi-automatique",
718665 "Automatically hide details": "Masquer automatiquement les détails",
719666 "Determines how entries are found for autocomplete.": "Détermine comment les entrées sont trouvées pour la saisie semi-automatique.",
@@ -736,115 +683,112 @@
736683 "Parser Flags": "Indicateurs de l'analyseur",
737684 "Switch to stricter escaping, allowing all delimiting characters to be escaped with a backslash, and backslashes to be escaped as well.": "Passez à un échappement plus strict, permettant à tous les caractères de délimitation d'être échappés avec une barre oblique inverse, ainsi qu'aux barres obliques inverses.",
738685 "STRICT_ESCAPING": "STRICT_ESCAPING",
739- "Replace all {{getvar::}} and {{getglobalvar::}} macros with scoped variables to avoid double macro substitution.": "Remplacez toutes les macros {{getvar::}} et {{getglobalvar::}} par des variables à portée limitée pour éviter la double substitution de macro.",
740686 "REPLACE_GETVAR": "REPLACE_GETVAR",
741687 "Change Background Image": "Changer l'image de fondarrière-plans",
742688 "Filter": "Filtre",
743689 "Automatically select a background based on the chat context": "Sélectionner automatiquement un arrière-plan en fonction du contexte de la discussion",
744690 "Auto-select": "Sélection automatique",
745691 "System Backgrounds": "Arrière-plans du système",
746692 "Chat Backgrounds": "Arrière-plans de la discussion",
747693 "bg_chat_hint_1": "ArrièreLes arrière-plans de discussion générés avec lel'extension ",
748694 "bg_chat_hint_2": "l'extension apparaîtraapparaîtrons ici.",
749695 "Extensions": "Extensions",
750696 "Notify on extension updates": "Notifier les mises à jour dedes l'extensionextensions",
751697 "Manage extensions": "Gérer les extensions",
752698 "Import Extension From Git Repo": "Importer une extension depuis un dépôt Git",
753699 "Install extension": "Installer l'une extension",
754700 "Extras API:": "API supplémentaires :",
755701 "Auto-connect": "Connexion automatique",
756702 "Extras API URL": "URL de l'API des extras",
757703 "Extras API key (optional)": "Clé API supplémentaire (facultatif)",
758704 "Persona Management": "Gestion de lades personnalitépersonas",
759- "How do I use this?": "Comment puis-je utiliser ceci?",
760705 "Click for stats!": "Cliquez pour les statistiques!",
761706 "Usage Stats": "Statistiques d'utilisation",
762707 "Backup your personas to a file": "Sauvegardez vos personas dans un fichier",
763708 "Backup": "Sauvegarde",
764709 "Restore your personas from a file": "Restaurez vos personas à partir d'un fichier",
765710 "Restore": "Restaurer",
766711 "Create a dummy persona": "Créer une personnalitépersona factice",
767712 "Create": "Créer",
768713 "Toggle grid view": "Basculer en mode grille",
769714 "No persona description": "[Pas de description]",
770715 "Name": "Nom",
771716 "Enter your name": "Entrez votre nom",
772717 "Click to set a new User Name": "Cliquez pour définir un nouveau nom d'utilisateur",
773718 "Click to lock your selected persona to the current chat. Click again to remove the lock.": "Cliquez pour verrouiller votre personnalitépersona sélectionnée sur la discussion actuelle. Cliquez à nouveau pour supprimer le verrou.",
774719 "Click to set user name for all messages": "Cliquez pour définir le nom d'utilisateur pour tous les messages",
775720 "Persona Description": "Description de la personnalitépersona",
776721 "Example: [{{user}} is a 28-year-old Romanian cat girl.]": "Exemple : [{{user}} est une fille chat roumaine de 28 ans.]",
777722 "Tokens persona description": "Description des jetonstokens",
778723 "Position:": "Position :",
779724 "In Story String / Prompt Manager": "Dans la chaîne d'histoire / Gestionnaire d'instructionsde prompt",
780725 "Top of Author's Note": "En haut de la note de ld'auteur",
781726 "Bottom of Author's Note": "En bas de la note de ld'auteur",
782727 "In-chat @ Depth": "Dans le chat @ Profondeur",
783728 "Depth:": "Profondeur :",
784729 "Role:": "Rôle:",
785730 "System": "Système",
786731 "User": "Utilisateur",
787732 "Assistant": "Assistant",
788733 "Show notifications on switching personas": "Afficher les notifications lors du changement de personnalitéspersona",
789734 "Character Management": "Gestion des personnages",
790735 "Locked = Character Management panel will stay open": "Verrouillé = le panneau de gestion des personnages restera ouvert",
791736 "Select/Create Characters": "Sélectionner/Créer des personnages",
792737 "Favorite characters to add them to HotSwaps": "FavoriserMettre les personnages en favoris pour les ajouter aux HotSwaps",
793738 "Token counts may be inaccurate and provided just for reference.": "LesLe comptagescomptage dedes jetonstokens peuventpeut être inexacts et est fournis uniquement à titre de référence.",
794739 "Total tokens": "Total des jetonstokens",
795740 "Calculating...": "CalculateurCalcul en cours...",
796741 "Tokens": "JetonsTokens",
797742 "Permanent tokens": "JetonsTokens permanents",
798743 "Permanent": "Permanent",
799744 "About Token 'Limits'": "À propos des « limites » des jetonstokens",
800745 "Toggle character info panel": "Basculer le panneau d'informations sur le personnage",
801746 "Name this character": "Nommer ce personnage",
802747 "extension_token_counter": "JetonsTokens :",
803748 "Click to select a new avatar for this character": "Cliquez pour sélectionner uneun nouvellenouvel avatar pour ce personnage",
804749 "Add to Favorites": "Ajouter aux favoris",
805750 "Advanced Definition": "Définition avancée",
806751 "CharacterChat Lore": "Lore du personnagechat",
807- "Chat Lore": "Histoire du chat",
808752 "Export and Download": "Exporter et Télécharger",
809753 "Duplicate Character": "Dupliquer le personnage",
810754 "Create Character": "Créer un personnage",
811755 "Delete Character": "Supprimer le personnage",
812756 "More...": "Plus...",
813757 "Link to World Info": "Lien vers les informations sur le mondeWorld Info",
814758 "Import Card Lore": "Importer lale lore de la carte",
815759 "Scenario Override": "Remplacement du scénario",
816760 "Convert to Persona": "Convertir en Persona",
817761 "Rename": "Renommer",
818762 "Link to Source": "Lien vers la source",
819763 "Replace / Update": "Remplacer/Mettre à jour",
820764 "Import Tags": "Importer desles balisestags",
821765 "Search / Create Tags": "Rechercher / Créer des balisestags",
822766 "View all tags": "Voir toutestout les balisestags",
823767 "Creator's Notes": "Notes du créateur",
824768 "Show / Hide Description and First Message": "Afficher / Masquer la description et le premier message",
825769 "Character Description": "Description du personnage",
826770 "Click to allow/forbid the use of external media for this character.": "Cliquez pour autoriser/interdire l’utilisation de médias externes pour ce personnage.",
827771 "Ext. Media": "Poste. Médias Ext.",
828772 "Describe your character's physical and mental traits here.": "Décrivez les traits physiques et mentaux de votre personnage ici.",
829773 "First message": "Premier message",
830774 "Click to set additional greeting messages": "Cliquez pour définir des messages de salutation supplémentaires",
831775 "Alt. Greetings": "Salutations Alt. Salutations",
832776 "This will be the first message from the character that starts every chat.": "Ce sera le premier message du personnage qui démarre chaque discussion.",
833777 "Group Controls": "Contrôles de groupe",
834778 "Chat Name (Optional)": "Nom de la discussion (Facultatif)",
835779 "Click to select a new avatar for this group": "Cliquez pour sélectionner uneun nouvellenouvel avatar pour ce groupe",
836780 "Group reply strategy": "Stratégie de réponse de groupe",
837781 "Natural order": "Ordre naturel",
838782 "List order": "Ordre de la liste",
839783 "Group generation handling mode": "Mode de gestion de la génération de groupe",
840784 "Swap character cards": "Échanger les cartes de personnages",
841785 "Join character cards (exclude muted)": "RejoignezJoignez les cartes de personnage (excluez les cartes en sourdine)",
842786 "Join character cards (include muted)": "RejoignezJoignez les cartes de personnage (y compris en sourdine)",
843787 "Inserted before each part of the joined fields.": "Inséré avant chaque partie des champs joints.",
844788 "Join Prefix": "RejoindreJoindre leles préfixepréfixes",
845- "When 'Join character cards' is selected, all respective fields of the characters are being joined together.This means that in the story string for example all character descriptions will be joined to one big text.If you want those fields to be separated, you can define a prefix or suffix here.This value supports normal macros and will also replace {{char}} with the relevant char's name and <FIELDNAME> with the name of the part (e.g.: description, personality, scenario, etc.)": "Lorsque « Rejoindre les cartes de personnage » est sélectionné, tous les champs respectifs des personnages sont réunis.\rCela signifie que dans la chaîne d'histoire, par exemple, toutes les descriptions des personnages seront réunies en un seul grand texte.\rSi vous souhaitez que ces champs soient séparés, vous pouvez définir ici un préfixe ou un suffixe.\r\rCette valeur prend en charge les macros normales et remplacera également {{char}} par le nom du caractère concerné et <FIELDNAME> par le nom de la pièce (par exemple : description, personnalité, scénario, etc.)",
789+ "When 'Join character cards' is selected, all respective fields of the characters are being joined together.This means that in the story string for example all character descriptions will be joined to one big text.If you want those fields to be separated, you can define a prefix or suffix here.This value supports normal macros and will also replace {{char}} with the relevant char's name and <FIELDNAME> with the name of the part (e.g.: description, personality, scenario, etc.)": "Lorsque « Joindre les cartes de personnage » est sélectionné, tous les champs respectifs des personnages sont réunis.\rCela signifie que dans la chaîne d'histoire, par exemple, toutes les descriptions des personnages seront réunies en un seul grand texte.\rSi vous souhaitez que ces champs soient séparés, vous pouvez définir ici un préfixe ou un suffixe.\r\rCette valeur prend en charge les macros normales et remplacera également {{char}} par le nom du caractère concerné et <FIELDNAME> par le nom de la pièce (par exemple : description, personnalité, scénario, etc.)",
846790 "Inserted after each part of the joined fields.": "Inséré après chaque partie des champs joints.",
847791 "Join Suffix": "RejoindreSuffixe lede suffixejointure",
848792 "Set a group chat scenario": "Définir un scénario de discussion de groupe",
849793 "Click to allow/forbid the use of external media for this group.": "Cliquez pour autoriser/interdire l’utilisation de médias externes pour ce groupe.",
850794 "Restore collage avatar": "Restaurer l'avatar du collage",
@@ -857,8 +801,8 @@
857801 "Create New Character": "Créer un nouveau personnage",
858802 "Import Character from File": "Importer un personnage à partir d'un fichier",
859803 "Import content from external URL": "Importer du contenu depuis une URL externe",
860804 "Create New Chat Group": "Créer unune nouveaunouvelle groupediscussion de discussiongroupe",
861805 "Characters sorting order": "Ordre de tri des personnages",
862806 "A-Z": "A-Z",
863807 "Z-A": "Z-A",
864808 "Newest": "Plus récent",
@@ -867,8 +811,8 @@
867811 "Recent": "Récent",
868812 "Most chats": "Plus de discussions",
869813 "Least chats": "Moins de discussions",
870814 "Most tokens": "La plupart desTokens jetonsmaximum",
871815 "Least tokens": "Moins deTokens jetonsminimum",
872816 "Random": "Aléatoire",
873817 "Toggle character grid view": "Basculer vers la vue en grille des personnages",
874818 "Bulk_edit_characters": "Édition en masse des personnages",
@@ -879,7 +823,7 @@
879823 "popup-button-no": "Non",
880824 "popup-button-cancel": "Annuler",
881825 "popup-button-import": "Importer",
882826 "Advanced DefininitionsDefinitions": "Définitions avancées",
883827 "Prompt Overrides": "Remplacements d'invite",
884828 "(For Chat Completion and Instruct Mode)": "(Pour l'achèvement du chat et le mode instruction)",
885829 "Insert {{original}} into either box to include the respective default prompt from system settings.": "Insérez {{original}} dans l'un ou l'autre des champs pour inclure l'instruction par défaut respective des paramètres système.",
@@ -888,13 +832,13 @@
888832 "Any contents here will replace the default Jailbreak Prompt used for this character. (v2 spec: post_history_instructions)": "Tout contenu ici remplacera l'instruction de jailbreak par défaut utilisée pour ce personnage. (spécification v2 : post_history_instructions)",
889833 "Creator's Metadata (Not sent with the AI prompt)": "Métadonnées du créateur (Non envoyées avec l'instruction de l'IA)",
890834 "Creator's Metadata": "Métadonnées du créateur",
891835 "(Not sent with the AI Prompt)": "(Non envoyé avec l'invitele AIprompt IA)",
892836 "Everything here is optional": "Tout ce qui se trouve ici est facultatif",
893837 "(Botmaker's name / Contact Info)": "(Nom du créateur du bot / Informations de contact)",
894838 "(If you want to track character versions)": "(Si vous voulez suivre les versions du personnage)",
895839 "(Describe the bot, give use tips, or list the chat models it has been tested on. This will be displayed in the character list.)": "(Décrivez le bot, donnez des conseils d'utilisation ou répertoriez les modèles de discussion sur lesquels il a été testé. Cela s'affichera dans la liste des personnages.)",
896840 "Tags to Embed": "BalisesTags à intégrer",
897841 "(Write a comma-separated list of tags)": "(Écrivez une liste de balisestags séparéesséparés par des virgules)",
898842 "Personality summary": "Résumé de la personnalité",
899843 "(A brief description of the personality)": "(Une brève description de la personnalité)",
900844 "Scenario": "Scénario",
@@ -912,58 +856,56 @@
912856 "Chatty": "Bavard",
913857 "Examples of dialogue": "Exemples de dialogue",
914858 "Important to set the character's writing style.": "Important de définir le style d'écriture du personnage.",
915859 "(Examples of chat dialog. Begin each example with START on a new line.)": "(Exemples de dialogue de chat. Commencez chaque exemple par DÉBUTSTART sur une nouvelle ligne.)",
916860 "Save": "Enregistrer",
917861 "Chat History": "Historique de la conversation",
918862 "Import Chat": "Importer une discussion",
919863 "Copy to system backgrounds": "Copier vers les arrière-plans du système",
920864 "Rename background": "Renommer l'arrière-plan",
921865 "Lock": "VerrouillageVerrouiller",
922866 "Unlock": "OuvrirDéverrouiller",
923867 "Delete background": "Supprimer l'arrière-plan",
924868 "Chat Scenario Override": "Remplacement du scénario de discussion",
925869 "Remove": "Supprimer",
926870 "Type here...": "Tapez ici...",
927871 "Chat Lorebook": "Livre de contesLorebook pour",
928872 "Chat Lorebook for": "Chat Lorebook pour",
929873 "chat_world_template_txt": "Un World Info sélectionné sera lié à ce chat. Lors de la génération d'une réponse AIIA,\n il sera combiné avec les entrées des livres de connaissances globaux et de personnages.",
930874 "Select a World Info file for": "Sélectionnez un fichier d'informations sur leWord mondeInfo pour",
931875 "Primary Lorebook": "Livre de loreLorebook principal",
932876 "A selected World Info will be bound to this character as its own Lorebook.": "UneUn informationWorld mondialeInfo sélectionnée sera liée à ce personnage comme son propre livre de lorelorebook.",
933877 "When generating an AI reply, it will be combined with the entries from a global World Info selector.": "Lors de la génération d'une réponse de l'IA, elle sera combinée avec les entrées d'un sélecteur d'informationsde mondialesWorld Info global.",
934878 "Exporting a character would also export the selected Lorebook file embedded in the JSON data.": "L'exportation d'un personnage exporterait également le fichier de livre de lorelorebook sélectionné incorporé dans les données JSON.",
935879 "Additional Lorebooks": "Livres de loreLorebooks supplémentaires",
936880 "Associate one or more auxillary Lorebooks with this character.": "Associer un ou plusieurs livres de lorelorebooks auxiliaires à ce personnage.",
937881 "NOTE: These choices are optional and won't be preserved on character export!": "REMARQUE : Ces choix sont facultatifs et ne seront pas conservés lors de l'exportation du personnage !",
938882 "Rename chat file": "Renommer le fichier de discussion",
939883 "Export JSONL chat file": "Exporter le fichier de discussion au format JSONL",
940884 "Download chat as plain text document": "Télécharger la discussion sous forme de document texte brut",
941885 "Delete chat file": "Supprimer le fichier de discussion",
942886 "Use tag as folder": "MarquerUtiliser les tags comme dossier",
943887 "Delete tag": "Supprimer lale balisetag'",
944888 "Entry Title/Memo": "Titre de l'entrée/Mémo",
945- "WI Entry Status:🔵 Constant🟢 Normal🔗 Vectorized❌ Disabled": "Statut d'entrée WI :\r🔵 Constante\r🟢 Normal\r🔗 Vectorisé\r❌ Désactivé",
946889 "WI_Entry_Status_Constant": "Constante",
947890 "WI_Entry_Status_Normal": "Normale",
948891 "WI_Entry_Status_Vectorized": "Vectorisé",
949- "WI_Entry_Status_Disabled": "Désactivé",
892+ "T_Position": "↑Personnage : avant les définitions de personnage\n↓Personnage : après les définitions de personnage\n↑AN : avant les notes d'auteur\n↓AN : après les notes d'auteur\n@D : à la profondeur",
950- "T_Position": "↑Caractère : avant les définitions de caractères\n↓Caractère : après les définitions de caractères\n↑AN : avant les notes d'auteur\n↓AN : après les notes d'auteur\n@D : à la profondeur",
893+ "Before Char Defs": "Avant les définitions de personnage",
951894 "BeforeAfter Char Defs": "AvantAprès les définitions de caractèrespersonnage",
952- "After Char Defs": "Après les définitions de caractères",
953895 "Before EM": "↑EM",
954896 "After EM": "↓EM",
955897 "Before AN": "Avant ANNA",
956898 "After AN": "Après ANNA",
957899 "at Depth System": "@D ⚙️",
958900 "at Depth User": "@D 👤",
959901 "at Depth AI": "@D 🤖",
960902 "Depth": "Profondeur",
961903 "Order:": "CommandeOrdre :",
962904 "Order": "Ordre :",
963905 "Trigger %:": "% Déclenchement %:",
964906 "Probability": "Probabilité",
965907 "Duplicate world info entry": "EntréeDupliquer dl'informationsentrée mondialesdu enWorld doubleInfo",
966908 "Delete world info entry": "Supprimer l'entrée d'informations surdu leWorld mondeInfo",
967909 "Comma separated (required)": "Séparé par des virgules (requis)",
968910 "Primary Keywords": "Mots-clés principaux",
969911 "Keywords or Regexes": "Mots-clés ou expressions régulières",
@@ -982,19 +924,15 @@
982924 "Case-Sensitive": "Sensible à la casse",
983925 "Yes": "Oui",
984926 "No": "Non",
985927 "Can be used to automatically activate Quick Replies": "Peut être utilisé pour activer automatiquement les réponsesQuick rapidesReplies",
986928 "Automation ID": "ID d'automatisation",
987929 "( None )": "( Aucun )",
988930 "Content": "Contenu",
989- "Exclude from recursion": "Exclure de la récursion",
990931 "Prevent further recursion (this entry will not activate others)": "Empêcher toute récursion ultérieure (cette entrée n’en activera pas d’autres)",
991- "Delay until recursion (this entry can only be activated on recursive checking)": "Délai jusqu'à récursion (cette entrée ne peut être activée que sur vérification récursive)",
992932 "What this keyword should mean to the AI, sent verbatim": "Ce que ce mot-clé devrait signifier pour l'IA, envoyé textuellement",
993- "Filter to Character(s)": "Filtrer par personnage(s)",
994- "Character Exclusion": "Exclusion de personnage",
995933 "-- Characters not found --": "-- Personnages non trouvés --",
996934 "Inclusion Group": "Groupe d'inclusion",
997935 "Inclusion Groups ensure only one entry from a group is activated at a time, if multiple are triggered.Documentation: World Info - Inclusion Group": "Les groupes d'inclusion garantissent qu'une seule entrée d'un groupe est activée à la fois, si plusieurs sont déclenchées.\rPrend en charge plusieurs groupes séparés par des virgules.\r\rDocumentation : InfoWorld MondeInfo - Groupe Inclusion",
998936 "Prioritize this entry: When checked, this entry is prioritized out of all selections.If multiple are prioritized, the one with the highest 'Order' is chosen.": "Prioriser cette entrée : Lorsque cette case est cochée, cette entrée est prioritaire parmi toutes les sélections.\rSi plusieurs sont prioritaires, celui avec l'ordre le plus élevé est choisi.",
999937 "Only one entry with the same label will be activated": "Seule une entrée avec la même étiquette sera activée",
1000938 "A relative likelihood of entry activation within the group": "Une probabilité relative d’activation d’entrée au sein du groupe",
@@ -1002,21 +940,20 @@
1002940 "Selective": "Sélectif",
1003941 "Use Probability": "Utiliser la probabilité",
1004942 "Add Memo": "Ajouter un mémo",
1005943 "Text or token ids": "Texte ou [identifiants detoken jetonids]",
1006944 "close": "fermer",
1007945 "prompt_manager_edit": "Modifier",
1008946 "prompt_manager_name": "Nom",
1009947 "A name for this prompt.": "Un nom pour cettece inviteprompt.",
1010948 "To whom this message will be attributed.": "À qui ce message sera attribué.",
1011949 "AI Assistant": "Assistant IA",
1012950 "prompt_manager_position": "Position",
1013- "Injection position. Next to other prompts (relative) or in-chat (absolute).": "Position d'injection. À côté d’autres invites (relatives) ou dans le chat (absolues).",
1014951 "prompt_manager_relative": "Relatif",
1015952 "prompt_manager_depth": "Profondeur",
1016953 "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "Profondeur d'injection. 0 = après le dernier message, 1 = avant le dernier message, etc.",
1017954 "Prompt": "InciterPrompt",
1018955 "The prompt to be sent.": "L'inviteLe prompt à envoyer.",
1019956 "This prompt cannot be overridden by character cards, even if overrides are preferred.": "CetteCe inviteprompt ne peut pas être annuléeremplacé par les cartes de personnage, même si les remplacements sont préférés.",
1020957 "prompt_manager_forbid_overrides": "Interdire les remplacements",
1021958 "reset": "réinitialiser",
1022959 "save": "sauvegarder",
@@ -1025,13 +962,12 @@
1025962 "Translate message": "Traduire le message",
1026963 "Generate Image": "Générer une image",
1027964 "Narrate": "Narrer",
1028965 "Exclude message from prompts": "Exclure le message des invitationsprompts",
1029966 "Include message in prompts": "Inclure le message dans les invitationsprompts",
1030967 "Embed file or image": "Intégrer un fichier ou une image",
1031968 "Create checkpoint": "Créer un point de contrôle",
1032969 "Create Branch": "Créer une branche",
1033970 "Copy": "Copier",
1034- "Open checkpoint chat": "Ouvrir le chat du point de contrôle",
1035971 "Edit": "Modifier",
1036972 "Confirm": "Confirmer",
1037973 "Copy this message": "Copier ce message",
@@ -1039,28 +975,25 @@
1039975 "Move message up": "Déplacer le message vers le haut",
1040976 "Move message down": "Déplacer le message vers le bas",
1041977 "Enlarge": "Agrandir",
1042978 "Welcome to SillyTavern!": "Bienvenue àsur SillyTaverneSillyTavern !",
1043979 "welcome_message_part_1": "LisLisez lela",
1044980 "welcome_message_part_2": "Documentation officielle",
1045981 "welcome_message_part_3": null,
1046982 "welcome_message_part_4": "TaperTapez",
1047983 "welcome_message_part_5": "dans le chat pour les commandes et les macros.",
1048984 "welcome_message_part_6": "RejoinsRejoignez le",
1049985 "Discord server": "Serveur DiscordeDiscord",
1050986 "welcome_message_part_7": "pour les infos et annonces.",
1051987 "SillyTavern is aimed at advanced users.": "SillyTavern s'adresse aux utilisateurs avancés.",
1052- "If you're new to this, enable the simplified UI mode below.": "Si vous êtes nouveau dans ce domaine, activez le mode d'interface utilisateur simplifié ci-dessous.",
988+ "Looking for AI characters?": "Vous recherchez des personnages ?",
1053- "Change it later in the 'User Settings' panel.": "Modifiez-le plus tard dans le panneau « Paramètres utilisateur ».",
1054- "Enable simple UI mode": "Activer le mode interface utilisateur simple",
1055- "Looking for AI characters?": "Vous recherchez des personnages IA ?",
1056989 "onboarding_import": "Importer",
1057990 "from supported sources or view": "à partir de sources prises en charge ou afficher des",
1058991 "Sample characters": "Exemples de personnages",
1059992 "Your Persona": "Votre personnalitépersona",
1060993 "Before you get started, you must select a persona name.": "Avant de commencer, vous devez sélectionner un nom depour personnagevotre persona.",
1061994 "welcome_message_part_8": "Ceci peut être modifié à tout moment via lel'icône",
1062995 "welcome_message_part_9": "icône.",
1063996 "Persona Name:": "Nom dude personnagela persona :",
1064997 "Temporarily disable automatic replies from this character": "Désactiver temporairement les réponses automatiques de ce personnage",
1065998 "Enable automatic replies from this character": "Activer les réponses automatiques de ce personnage",
1066999 "Trigger a message from this character": "Déclencher un message de ce personnage",
@@ -1071,7 +1004,6 @@
10711004 "Add to group": "Ajouter au groupe",
10721005 "Alternate Greetings": "Salutations alternatives",
10731006 "Alternate_Greetings_desc": "Ceux-ci seront affichés sous forme de balayages sur le premier message lors du démarrage d’une nouvelle discussion.\n Les membres du groupe peuvent en sélectionner un pour lancer la conversation.",
1074- "Alternate Greetings Hint": "Cliquez sur le bouton pour commencer !",
10751007 "(This will be the first message from the character that starts every chat)": "(Ce sera le premier message du personnage qui démarre chaque discussion)",
10761008 "Forbid Media Override explanation": "Capacité du personnage/groupe actuel à utiliser des médias externes dans les discussions.",
10771009 "Forbid Media Override subtitle": "Médias : images, vidéos, audio. Externe : non hébergé sur le serveur local.",
@@ -1081,46 +1013,46 @@
10811013 "Remove the file": "Supprimer le fichier",
10821014 "Unique to this chat": "Unique à ce chat",
10831015 "Checkpoints inherit the Note from their parent, and can be changed individually after that.": "Les points de contrôle héritent de la note de leur parent et peuvent ensuite être modifiés individuellement.",
10841016 "Include in World Info Scanning": "Inclure dans l'analyse des informationsWold mondialesInfo",
10851017 "Before Main Prompt / Story String": "Avant l'invitele principaleprompt principal/la chaîne d'histoire",
10861018 "After Main Prompt / Story String": "Après l'invitele principaleprompt principal/la chaîne d'histoire",
10871019 "as": "comme",
10881020 "Insertion Frequency": "Fréquence d'insertion",
10891021 "(0 = Disable, 1 = Always)": "(0 = Désactiver, 1 = Toujours)",
10901022 "User inputs until next insertion:": "Saisies de l'utilisateur jusqu'à la prochaine insertion :",
10911023 "Character Author's Note (Private)": "Note de ld'auteur du personnage (privé)",
10921024 "Won't be shared with the character card on export.": "Ne sera pas partagé avec la carte de personnage lors de l'exportation.",
10931025 "Will be automatically added as the author's note for this character. Will be used in groups, but can't be modified when a group chat is open.": "Sera automatiquement ajouté comme note de ld'auteur pour ce personnage. Sera utilisé en groupe, mais\n ne peut pas être modifié lorsqu'une discussion de groupe est ouverte.",
10941026 "Use character author's note": "Utiliser la note de ld'auteur du personnage",
10951027 "Replace Author's Note": "Remplacer la note de ld'auteur",
10961028 "Default Author's Note": "Note de ld'auteur par défaut",
10971029 "Will be automatically added as the Author's Note for all new chats.": "Sera automatiquement ajouté en tant que note de ld'auteur pour toutes les nouvelles discussions.",
10981030 "Chat CFG": "Chat CFG",
10991031 "1 = disabled": "1 = désactivé",
11001032 "write short replies, write replies using past tense": "rédiger des réponses courtes, rédiger des réponses en utilisant le passé",
11011033 "Positive Prompt": "InvitePrompt positivepositif",
11021034 "Use character CFG scales": "Utiliser les échelles CFG dedu caractèrespersonnage",
11031035 "Character CFG": "Personnage CFG du personnage",
11041036 "Will be automatically added as the CFG for this character.": "Sera automatiquement ajouté en tant que CFG pour ce personnage.",
11051037 "Global CFG": "CFG mondialglobal",
11061038 "Will be used as the default CFG options for every chat unless overridden.": "Sera utilisé comme options CFG par défaut pour chaque discussion, sauf remplacement.",
11071039 "CFG Prompt Cascading": "InvitePrompt CFG en cascade",
11081040 "Combine positive/negative prompts from other boxes.": "Combinez les invitesprompts positivespositifs/négativesnégatifs d’autres cases.",
11091041 "For example, ticking the chat, global, and character boxes combine all negative prompts into a comma-separated string.": "Par exemple, en cochant les cases Chat, Global et CaractèrePersonnage, vous combinez toutestout les invitesprompt négativesnégatifs dans une chaîne séparée par des virgules.",
11101042 "Always Include": "Toujours inclure",
11111043 "Chat Negatives": "Points négatifs du chat",
11121044 "Character Negatives": "Points négatifs sur lesdu personnagespersonnage",
11131045 "Global Negatives": "Points négatifs mondiauxglobaux",
11141046 "Custom Separator:": "Séparateur personnalisé :",
11151047 "Insertion Depth:": "Profondeur d'insertion :",
11161048 "Token Probabilities": "Probabilités dedes jetonstokens",
11171049 "Select a token to see alternatives considered by the AI.": "Sélectionnez un jetontoken pour voir les alternatives envisagées par l'IA.",
11181050 "Not connected to API!": "Non connecté à l'API !",
11191051 "Type a message, or /? for help": "Tapez un message, ou /? pour aiderl'aide",
11201052 "Continue script execution": "Continuer l'exécution du script",
11211053 "Pause script execution": "Suspendre l'exécution du script",
11221054 "Abort script execution": "Abandonner l'exécution du script",
11231055 "Abort request": "Annuler la demanderequête",
11241056 "Continue the last message": "Continuer le dernier message",
11251057 "Send a message": "Envoyer un message",
11261058 "Close chat": "Fermer la discussion",
@@ -1135,7 +1067,7 @@
11351067 "Ask AI to write your message for you": "Demander à l'IA d'écrire votre message pour vous",
11361068 "Impersonate": "Usurper l'identité",
11371069 "Continue": "Continuer",
11381070 "Bind user name to that avatar": "Lier le nom d'utilisateur à cetcette avatarpersona",
11391071 "Change persona image": "Changer l'image de la persona",
11401072 "Select this as default persona for the new chats.": "Sélectionner ceci comme persona par défaut pour les nouvelles discussions.",
11411073 "Delete persona": "Supprimer la persona",
@@ -1144,8 +1076,8 @@
11441076 "These characters are the finalists of character design contests and have remarkable quality.": "Ces personnages sont les finalistes des concours de conception de personnages et ont une qualité remarquable.",
11451077 "Featured Characters": "Personnages en vedette",
11461078 "Attach a File": "Joindre un fichier",
11471079 "Open Data Bank": "BanqueOuvrir la banque de données ouverte",
11481080 "Enter a URL or the ID of a Fandom wiki page to scrape:": "Entrez une URL ou l'ID d'une page wiki Fandom à récupérer   :",
11491081 "Examples:": "Exemples:",
11501082 "Example:": "Exemple:",
11511083 "Single file": "Un seul fichier",
@@ -1168,44 +1100,40 @@
11681100 "Global Attachments": "Pièces jointes globales",
11691101 "These files are available for all characters in all chats.": "Ces fichiers sont disponibles pour tous les personnages de toutes les discussions.",
11701102 "Character Attachments": "Pièces jointes aux personnages",
1171- "These files are available the current character in all chats they are in.": "Ces fichiers sont disponibles pour le personnage actuel dans toutes les discussions dans lesquelles ils se trouvent.",
11721103 "Saved locally. Not exported.": "Enregistré localement. Non exporté.",
11731104 "Chat Attachments": "Pièces jointes au chat",
11741105 "These files are availableEnter toa allbase charactersURL inof the currentMediaWiki chatto scrape.": "Ces fichiers sont disponiblesEntrez pourune tousURL lesde personnagesbase du chatMediaWiki enà coursrécupérer.",
1175- "Enter a base URL of the MediaWiki to scrape.": "Entrez une URL de base du MediaWiki à gratter.",
11761106 "Don't include the page name!": "N'incluez pas le nom de la page !",
11771107 "Enter web URLs to scrape (one per line):": "Entrez les URL Web à récupérer (une par ligne) :",
11781108 "Enter a video URL to download its transcript.": "Saisissez l'URL ou l'identifiant de la vidéo pour télécharger sa transcription.",
1179- "Expression API": "Locale\nSuppléments\nLLM",
11801109 "ext_sum_with": "Résumez avec :",
11811110 "ext_sum_main_api": "API principale",
11821111 "ext_sum_current_summary": "Résumé actuel :",
11831112 "ext_sum_restore_previous": "Rétablir le précédente",
11841113 "ext_sum_memory_placeholder": "Le résumé sera généré ici...",
1185- "Trigger a summary update right now.": "Résumez maintenant",
11861114 "ext_sum_force_text": "Résumez maintenant",
11871115 "Disable automatic summary updates. While paused, the summary remains as-is. You can still force an update by pressing the Summarize now button (which is only available with the Main API).": "Désactivez les mises à jour automatiques du résumé. Pendant la pause, le résumé reste tel quel. Vous pouvez toujours forcer une mise à jour en appuyant sur le bouton Résumer maintenant (qui n'est disponible qu'avec l'API principale).",
11881116 "ext_sum_pause": "Pause",
11891117 "Omit World Info and Author's Note from text to be summarized. Only has an effect when using the Main API. The Extras API always omits WI/AN.": "Omettre World Info et la note de ld'auteur du texte à résumer. N'a d'effet que lors de l'utilisation de l'API principale. L'API Extras omet toujours WI/AN.",
11901118 "ext_sum_no_wi_an": "Pas de WI/ANNA",
11911119 "ext_sum_settings_tip": "Modifier l'invitele prompt de résumé, la position d'insertion, etc.",
11921120 "ext_sum_settings": "Paramètres récapitulatifsdu résumé",
11931121 "ext_sum_prompt_builder": "Générateur d'invitesde prompt",
11941122 "ext_sum_prompt_builder_1_desc": "L'extension créera sason propre inviteprompt en utilisant des messages qui n'ont pas encore été résumés. Bloque le chat jusqu'à ce que le résumé soit généré.",
11951123 "ext_sum_prompt_builder_1": "Brut, bloquant",
11961124 "ext_sum_prompt_builder_2_desc": "L'extension créera sason propre inviteprompt en utilisant des messages qui n'ont pas encore été résumés. Ne bloque pas le chat pendant la génération du résumé. Tous les backends ne prennent pas en charge ce mode.",
11971125 "ext_sum_prompt_builder_2": "Brut, non bloquant",
11981126 "ext_sum_prompt_builder_3_desc": "L'extension utilisera le générateur d'invitede prompt principal standard et y ajoutera la demande de résumé comme dernier message système.",
11991127 "ext_sum_prompt_builder_3": "Classique, bloquant",
12001128 "Summary Prompt": "InvitePrompt de résumé",
12011129 "ext_sum_restore_default_prompt_tip": "Restaurer l'invitele prompt par défaut",
12021130 "ext_sum_prompt_placeholder": "CetteCe inviteprompt sera envoyée à AIl'IA pour demander la génération du résumé. {{words}} sera résolu par le paramètre \"Nombre de mots\".",
12031131 "ext_sum_target_length_1": "Longueur cible du résumé",
12041132 "ext_sum_target_length_2": null,
12051133 "ext_sum_target_length_3": "mots)",
12061134 "ext_sum_api_response_length_1": "Longueur de réponse de l'API",
12071135 "ext_sum_api_response_length_2": null,
12081136 "ext_sum_api_response_length_3": "jetonstokens)",
12091137 "ext_sum_0_default": "0 = par défaut",
12101138 "ext_sum_raw_max_msg": "[Brut] Nombre maximum de messages par requête",
12111139 "ext_sum_0_unlimited": "0 = illimité",
@@ -1225,12 +1153,12 @@
12251153 "ext_regex_new_global_script": "+ Mondial",
12261154 "ext_regex_new_scoped_script": "+ Portée",
12271155 "ext_regex_import_script": "Importer",
12281156 "ext_regex_global_scripts": "Scripts mondiauxglobaux",
12291157 "ext_regex_global_scripts_desc": "Disponible pour tous les personnages. Enregistré dans les paramètres locaux.",
12301158 "ext_regex_scoped_scripts": "Scripts étendus",
12311159 "ext_regex_scoped_scripts_desc": "Uniquement disponible pour ce personnage. Enregistré dans les données de la carte.",
12321160 "Regex Editor": "Éditeur d'expressions régulières",
12331161 "Test Mode": "Mode d'essaide test",
12341162 "ext_regex_desc": "Regex est un outil pour rechercher/remplacer des chaînes à l'aide d'expressions régulières. Si vous souhaitez en savoir plus, cliquez sur ? à côté du titre.",
12351163 "Input": "Saisir",
12361164 "ext_regex_test_input_placeholder": "Écrivez ici...",
@@ -1246,17 +1174,16 @@
12461174 "ext_regex_user_input": "Entrée de l'utilisateur",
12471175 "ext_regex_ai_output": "Sortie IA",
12481176 "Slash Commands": "Commandes barre oblique",
12491177 "ext_regex_min_depth_desc": "Lorsqu'il est appliqué aux invitesprompts ou à l'affichage, n'affecte que les messages d'au moins N niveaux de profondeur. 0 = dernier message, 1 = avant-dernier message, etc. Ne compte que les entrées WI @Depth et les messages utilisables, c'est-à-dire non cachés ou système.",
12501178 "Min Depth": "Profondeur minimale",
12511179 "ext_regex_min_depth_placeholder": "Illimité",
12521180 "ext_regex_max_depth_desc": "Lorsqu'il est appliqué aux invitesprompts ou à l'affichage, n'affecte que les messages en profondeur ne dépassant pas N niveaux. 0 = dernier message, 1 = avant-dernier message, etc. Ne compte que les entrées WI @Depth et les messages utilisables, c'est-à-dire non cachés ou système.",
12531181 "ext_regex_other_options": "Autres options",
12541182 "Only Format Display": "Format d'affichage uniquement",
12551183 "ext_regex_only_format_prompt_desc": "L'historique des discussions ne changera pas, seule l'invite lors de l'envoi de la demande (lors de la génération).",
12561184 "Only Format Prompt (?)": "Uniquement l'invite de formatage",
12571185 "Run On Edit": "Exécuter sur Modifier",
12581186 "ext_regex_substitute_regex_desc": "Remplacez {{macros}} dans Find Regex avant de l'exécuter",
1259- "Substitute Regex": "Remplacer l'expression régulière",
12601187 "ext_regex_import_target": "Importer vers :",
12611188 "ext_regex_disable_script": "Désactiver le script",
12621189 "ext_regex_enable_script": "Activer le script",
@@ -1265,23 +1192,21 @@
12651192 "ext_regex_move_to_scoped": "Passer aux scripts étendus",
12661193 "ext_regex_export_script": "Exporter le script",
12671194 "ext_regex_delete_script": "Supprimer le script",
12681195 "Trigger Stable Diffusion": "Déclencher une diffusionStable stableDiffusion",
12691196 "sd_Yourself": "ToiVous-même",
12701197 "sd_Your_Face": "TonVotre visage",
12711198 "sd_Me": "Moi",
12721199 "sd_The_Whole_Story": "Toute l'histoire",
12731200 "sd_The_Last_Message": "Le dernier message",
12741201 "sd_Raw_Last_Message": "Dernier message brut",
12751202 "sd_Background": "Arrière-plan",
12761203 "Image Generation": "Génération d'images",
12771204 "sd_refine_mode": "Autoriser la modification manuelle des invitesprompts avant de les envoyer à l'API de génération",
12781205 "sd_refine_mode_txt": "Modifier les invitesprompts avant la génération",
12791206 "sd_interactive_mode": "Générez automatiquement des images lors de l'envoi de messages tels que « envoyez-moi une photo de chat ».",
12801207 "sd_interactive_mode_txt": "Mode interactif",
12811208 "sd_multimodal_captioning": "Utilisez le sous-titrage multimodal pour générer des invitesprompts pour les portraits des utilisateurs et des personnages en fonction de leurs avatars.",
12821209 "sd_multimodal_captioning_txt": "Utiliser le sous-titrage multimodal pour les portraits",
1283- "sd_expand": "Étendre automatiquement les invites à l'aide du modèle de génération de texte",
1284- "sd_expand_txt": "Invites d’amélioration automatique",
12851210 "sd_snap": "Requêtes de génération d'instantanés avec un rapport hauteur/largeur forcé (portraits, arrière-plans) à la résolution connue la plus proche, tout en essayant de préserver le nombre absolu de pixels (recommandé pour SDXL).",
12861211 "sd_snap_txt": "Résolutions ajustées automatiquement",
12871212 "Source": "Source",
@@ -1297,56 +1222,53 @@
12971222 "The server must be accessible from the SillyTavern host machine.": "Le serveur doit être accessible depuis la machine hôte de SillyTavern.",
12981223 "Hint: Save an API key in AI Horde API settings to use it here.": "Astuce : enregistrez une clé API dans les paramètres de l'API AI Horde pour l'utiliser ici.",
12991224 "Allow NSFW images from Horde": "Autoriser les images NSFW de la Horde",
13001225 "Sanitize prompts (recommended)": "Désinfecter les invitesprompts (recommandé)",
13011226 "Automatically adjust generation parameters to ensure free image generations.": "Ajustez automatiquement les paramètres de génération pour garantir des générations d’images gratuites.",
13021227 "Avoid spending Anlas": "Évitez de dépenser des Anlas",
13031228 "Opus tier": "(NiveauTier Opus)",
13041229 "View my Anlas": "Voir monmes Anlas",
13051230 "These settings only apply to DALL-E 3": "Ces paramètres s'appliquent uniquement à DALL-E 3",
13061231 "Image Style": "Style dde l'image",
13071232 "Image Quality": "Qualité dde l'image",
13081233 "Standard": "Standard",
13091234 "HD": "HD",
13101235 "sd_comfy_url": "Exemple : {{comfy_url}}",
13111236 "Open workflow editor": "Ouvrir l'éditeur de workflow",
13121237 "Create new workflow": "Créer un nouveau flux de travailworkflow",
13131238 "Delete workflow": "Supprimer le flux de travailworkflow",
13141239 "Enhance": "Améliorer",
1315- "Refine": "Affiner",
13161240 "Decrisper": "Décrypteur",
13171241 "Sampling steps": "Étapes d'échantillonnage ()",
13181242 "Width": "Largeur ()",
13191243 "Height": "Hauteur ()",
13201244 "Resolution": "Résolution",
13211245 "Model": "Modèle",
13221246 "Sampling method": "Méthode d'échantillonnage",
1323- "Karras (not all samplers supported)": "Karras (tous les échantillonneurs ne sont pas pris en charge)",
13241247 "SMEA versions of samplers are modified to perform better at high resolution.": "Les versions SMEA des échantillonneurs sont modifiées pour mieux fonctionner à haute résolution.",
13251248 "SMEA": "PMEASDMEA",
13261249 "DYN variants of SMEA samplers often lead to more varied output, but may fail at very high resolutions.": "Les variantes DYN des échantillonneurs SMEA conduisent souvent à des sorties plus variées, mais peuvent échouer à des résolutions très élevées.",
13271250 "DYN": "DYN",
13281251 "Scheduler": "Planificateur",
13291252 "Restore Faces": "Restaurer les visages",
13301253 "Hires. Fix": "EmbauchesHires. RéparerFix",
13311254 "Upscaler": "Upscaleur",
13321255 "Upscale by": "Mise à niveauUpscale par",
13331256 "Denoising strength": "Force de débruitage",
13341257 "Hires steps (2nd pass)": "EmbauchesNombre marchesd'étapes Hires (2ème passage)",
13351258 "Preset for prompt prefix and negative prompt": "PréréglagePreset pour le préfixe d'invitede prompt et l'invitele négativeprompt négatif",
13361259 "Style": "Style",
13371260 "Save style": "Enregistrer le style",
13381261 "Delete style": "Supprimer le style",
13391262 "Common prompt prefix": "Préfixe d'invitede prompt commun",
13401263 "sd_prompt_prefix_placeholder": "Utilisez {prompt} pour spécifier où l'invitele prompt générée sera insérée",
13411264 "Negative common prompt prefix": "Préfixe d'invitede prompt commun négatif",
13421265 "Character-specific prompt prefix": "Préfixe d'invitede prompt spécifique au caractèrepersonnage",
13431266 "Won't be used in groups.": "Ne sera pas utilisé en groupe.",
13441267 "sd_character_prompt_placeholder": "Toutes les caractéristiques qui décrivent le personnage actuellement sélectionné. Sera ajouté après un préfixe d'invitede prompt commun.\nExemple : femme, yeux verts, cheveux bruns, chemise rose",
13451268 "Character-specific negative prompt prefix": "Préfixe d'invitede prompt négatif spécifique au caractèrepersonnage",
13461269 "sd_character_negative_prompt_placeholder": "Toutes les caractéristiques qui ne devraient pas apparaître pour le personnage sélectionné. Sera ajouté après un préfixe d’invitedde prompt commun négatif.\nExemple : bijoux, chaussures, lunettes",
13471270 "Shareable": "Partageable",
13481271 "Image Prompt Templates": "Modèles d'invitede prompt d'image",
1349- "Vectors Model Warning": "Il est recommandé de purger les vecteurs lors du changement de modèle en cours de discussion. Sinon, cela conduira à des résultats médiocres.",
13501272 "Translate files into English before processing": "Traduire les fichiers en anglais avant le traitement",
13511273 "Manager Users": "gérer les utilisateurs",
13521274 "New User": "Nouvel utilisateur",
@@ -1360,7 +1282,6 @@
13601282 "Current Password:": "Mot de passe actuel:",
13611283 "New Password:": "Nouveau mot de passe:",
13621284 "Confirm New Password:": "Confirmer le nouveau mot de passe:",
1363- "Debug Warning": "Les fonctions de cette catégorie sont réservées aux utilisateurs avancés. Ne cliquez sur rien si vous n'êtes pas sûr des conséquences.",
13641285 "Execute": "Exécuter",
13651286 "Are you sure you want to delete this user?": "Êtes-vous sûr de vouloir supprimer cet utilisateur ?",
13661287 "Deleting:": "Suppression :",
@@ -1368,18 +1289,18 @@
13681289 "Warning:": "Avertissement:",
13691290 "This action is irreversible.": "Cette action est irréversible.",
13701291 "Type the user's handle below to confirm:": "Tapez le pseudo de l'utilisateur ci-dessous pour confirmer :",
13711292 "Import Characters": "Importer des caractèrespersonnages",
13721293 "Enter the URL of the content to import": "Saisissez l'URL du contenu à importer",
13731294 "Supported sources:": "Sources prises en charge :",
13741295 "char_import_1": "Personnage de Chub (lien direct ou identifiant)",
13751296 "char_import_example": "Exemple:",
13761297 "char_import_2": "Livre de traditionsLorebook de Chub (lien direct ou ID)",
13771298 "char_import_3": "Personnage de JanitorAI (lien direct ou UUID)",
13781299 "char_import_4": "CaractèrePersonnage de Pygmalion.chat (lien direct ou UUID)",
13791300 "char_import_5": "Personnage de AICharacterCard.com (lien direct ou identifiant)",
13801301 "char_import_6": "Lien PNG direct (voir",
13811302 "char_import_7": "pour les hôtes autorisés)",
13821303 "char_import_8": "Personnage de RisuRealm (lien direct)",
13831304 "Supports importing multiple characters.": "Prend en charge l'importation de plusieurs caractères.",
13841305 "Write each URL or ID into a new line.": "Écrivez chaque URL ou identifiant dans une nouvelle ligne.",
13851306 "Export for character": "Exportation pour le personnage",
@@ -1394,10 +1315,10 @@
13941315 "New prompt": "Nouvelle invitation",
13951316 "Prompts": "Invitations",
13961317 "Total Tokens:": "Tokens totaux :",
13971318 "prompt_manager_tokens": "JetonsTokens",
13981319 "Are you sure you want to reset your settings to factory defaults?": "Êtes-vous sûr de vouloir réinitialiser vos paramètres aux valeurs d'usine par défaut ?",
13991320 "Don't forget to save a snapshot of your settings before proceeding.": "N'oubliez pas d'enregistrer un instantané de vos paramètres avant de continuer.",
14001321 "Settings Snapshots": "Paramètres des instantanés",
14011322 "Record a snapshot of your current settings.": "Enregistrez un instantané de vos paramètres actuels.",
14021323 "Make a Snapshot": "Faire un instantané",
14031324 "Restore this snapshot": "Restaurer cet instantané",
@@ -1425,19 +1346,709 @@
14251346 "Want to update?": "Envie de mettre à jour ?",
14261347 "How to start chatting?": "Comment commencer à discuter ?",
14271348 "Click _space": "Cliquez sur",
1428- "and select a": "et sélectionnez un",
1429- "Chat API": "API de chat",
14301349 "and pick a character.": "et choisissez un personnage.",
1431- "You can browse a list of bundled characters in the": "Vous pouvez parcourir une liste de caractères regroupés dans le",
14321350 "Download Extensions & Assets": "Télécharger des extensions et des ressources",
14331351 "menu within": "menu à l'intérieur de",
14341352 "Confused or lost?": "Confus ou perdu ?",
14351353 "click these icons!": "cliquez sur ces icônes !",
14361354 "in the chat bar": "dans la barre de chat",
14371355 "SillyTavern Documentation Site": "Site de documentationDocumentation de SillyTavern",
1438- "Extras Installation Guide": "Guide d'installation des extras",
14391356 "Still have questions?": "Vous avez encore des questions ?",
14401357 "Join the SillyTavern Discord": "Rejoignez le Discord de SillyTavern",
14411358 "Post a GitHub issue": "Poster un problème sur GitHub",
14421359 "Contact the developers": "Contacter les développeurs",
1360+ "Rename current preset": "Renommer le preset actuel",
1361+ "Linear": "Linéaire",
1362+ "Quad": "Quad",
1363+ "Conf": "Conf",
1364+ "Middle-out Transform": "Transformation Middle-out",
1365+ "Auto": "Auto",
1366+ "Allow": "Autoriser",
1367+ "Forbid": "Interdire",
1368+ "Auxiliary": "Auxiliaire",
1369+ "Post-History Instructions": "Instructions post-histoire",
1370+ "Unified Sampling": "Échantillonnage unifié",
1371+ "Top nsigma": "Top nsigma",
1372+ "Exclude Top Choices (XTC)": "Exclure les Top Choices (XTC)",
1373+ "Threshold": "Seuil",
1374+ "A greedy, brute-force algorithm used in LLM sampling to find the most likely sequence of words or tokens. It expands multiple candidate sequences at once, maintaining a fixed number (beam width) of top sequences at each step.": "Un algorithme gourmand et brutal utilisé dans l'échantillonnage LLM pour trouver la séquence de mots ou de tokens la plus probable. Il développe plusieurs séquences candidates à la fois, en conservant un nombre fixe (largeur du faisceau) de séquences supérieures à chaque étape.",
1375+ "# of Beams": "# de faisceaux",
1376+ "The number of sequences generated at each step with Beam Search.": "Le nombre de séquences générées à chaque étape avec Beam Search.",
1377+ "Penalize sequences based on their length.": "Pénaliser les séquences en fonction de leur longueur.",
1378+ "Controls the stopping condition for beam search. If checked, the generation stops as soon as there are '# of Beams' sequences. If not checked, a heuristic is applied and the generation is stopped when it's very unlikely to find better candidates.": "Contrôle la condition d'arrêt de la recherche de faisceaux. Si cette case est cochée, la génération s'arrête dès qu'il y a « # of Beams » séquences. Si cette case n'est pas cochée, une heuristique est appliquée et la génération est arrêtée lorsqu'il est très peu probable de trouver de meilleurs candidats.",
1379+ "Seed_desc": "Une graine aléatoire à utiliser pour obtenir des résultats déterministes et reproductibles. Définir à -1 pour utiliser une graine aléatoire.",
1380+ "Sampler Order": "Ordre des échantillonneurs",
1381+ "Aphrodite only. Determines the order of samplers. Skew is always applied post-softmax, so it's not included here.": "Aphrodite seulement. Determines l'ordres des échantillonneurs. L'obliquité est toujours appliquée après le softmax, elle n'est donc pas incluse ici.",
1382+ "Aphrodite only. Determines the order of samplers.": "Aphrodite seulement. Determines l'ordres des échantillonneurs.",
1383+ "character_names_none": "Ne jamais ajouter de préfixes de noms de personnages. Peut mal se comporter en groupe, à choisir avec précaution.",
1384+ "Completion Object": "Completion Object",
1385+ "enable_functions_desc_1": "Autorise l'utilisation",
1386+ "enable_functions_desc_2": "outils de fonction",
1387+ "enable_functions_desc_3": "Peut être utilisé par diverses extensions pour fournir des fonctionnalités supplémentaires.",
1388+ "Show model thoughts": "Afficher les pensées du modèle",
1389+ "Display the model's internal thoughts in the response.": "Afficher les pensées internes du modèle dans la réponse.",
1390+ "Confirm token parsing with": "Confirmer l'analyse des tokens avec",
1391+ "openai_logit_bias_no_items": "Aucun élément",
1392+ "api_no_connection": "Pas de connection...",
1393+ "AI Horde Website": "Site Web de AI Horde",
1394+ "Generic (OpenAI-compatible) [LM Studio, LiteLLM, etc.]": "Générique (OpenAI-compatible) [LM Studio, LiteLLM, etc.]",
1395+ "Allow fallback providers": "Autoriser les fournisseurs de secours",
1396+ "Model ID (optional)": "Model ID (optionnel)",
1397+ "Featherless Model Selection": "Séléction de modèle Featherless",
1398+ "category": "categorie",
1399+ "Top": "Top",
1400+ "All": "Tous",
1401+ "class": "Toutes les classes",
1402+ "No model description": "[Pas de déscription]",
1403+ "HuggingFace Token": "Token HuggingFace",
1404+ "Endpoint URL": "URL Endpoint",
1405+ "Example: https://****.endpoints.huggingface.cloud": "Exemple: https://****.endpoints.huggingface.cloud",
1406+ "Tabby Model": "Modèle Tabby",
1407+ "must be set in Tabby's config.yml to switch models.": "doit être défini dans le fichier config.yml de Tabby pour changer de modèle.",
1408+ "Use an admin API key.": "Utiliser une clé API d'administrateur.",
1409+ "Derive context size from backend": "Déterminer la taille du contexte à partir du backend",
1410+ "Custom (OpenAI-compatible)": "Personnalisé (OpenAI-compatible)",
1411+ "Using a proxy that you're not running yourself is a risk to your data privacy.": "L'utilisation d'un proxy que vous ne gérez pas vous-même présente un risque pour la confidentialité de vos données.",
1412+ "ANY support requests will be REFUSED if you are using a proxy.": "TOUTE demande d'assistance sera REFUSÉE si vous utilisez un proxy.",
1413+ "Do not proceed if you do not agree to this!": "Ne continuez pas si vous n'êtes pas d'accord avec cela !",
1414+ "Claude API Key": "Clé API Claude",
1415+ "Allow fallback models": "Autoriser les modèles de secours",
1416+ "NanoGPT API Key": "Clé API NanoGPT",
1417+ "NanoGPT Model": "Modèle NanoGPT",
1418+ "DeepSeek API Key": "Clé API DeepSeek",
1419+ "DeepSeek Model": "Modèle DeepSeek",
1420+ "Block Entropy API Key": "Clé API Block Entropy",
1421+ "Select a Model": "Sélectionner un modèle",
1422+ "Example: http://localhost:1234/v1": "Exemple: http://localhost:1234/v1",
1423+ "at the end of the URL!": "à la fin de l'URL !",
1424+ "(Optional)": "(Optionnel)",
1425+ "Enter a Model ID": "Saisir un ID de modèle",
1426+ "Example: gpt-3.5-turbo": "Exemple: gpt-3.5-turbo",
1427+ "prompt_post_processing_none": "Aucun",
1428+ "prompt_post_processing_merge": "Fusionner les rôles consécutifs",
1429+ "prompt_post_processing_semi": "Semi-strict (rôles alternés)",
1430+ "prompt_post_processing_strict": "Strict (l'utilisateur d'abord, rôles alternés)",
1431+ "01.AI API Key": "01.Clé IA API",
1432+ "01.AI Model": "01.Modèle IA",
1433+ "Additional Parameters": "Paramètres supplémentaires",
1434+ "Import Advanced Formatting settings": "Importer les paramètres de formatage avancé\n\nVous pouvez également fournir des fichiers hérités pour les modèles Instruct et Context..",
1435+ "Master Import": "Master Import",
1436+ "Export Advanced Formatting settings": "Exporter les paramètres de formatage avancé",
1437+ "Master Export": "Master Export",
1438+ "context_derived": "Dériver des métadonnées du modèle, si possible.",
1439+ "Select your current Context Template": "Sélectionnez votre modèle de contexte actuel",
1440+ "Update current template": "Mise à jour du modèle actuel",
1441+ "Rename current template": "Renommer le modèle actuel",
1442+ "Save template as": "Enregistrer le modèle sous",
1443+ "Import template": "Importer un modèle",
1444+ "Export template": "Exporter un modèle",
1445+ "Restore current template": "Restaurer le modèle actuel",
1446+ "Delete the template": "Supprimer le modèle",
1447+ "Disabling is not recommended.": "La désactivation n'est pas recommandée.",
1448+ "Separators as Stop Strings": "Séparateurs comme chaînes d'arrêt",
1449+ "Add Character and User names to a list of stopping strings.": "Ajouter les noms de personnages et d'utilisateurs à une liste de chaînes d'arrêt.",
1450+ "Names as Stop Strings": "Noms comme chaînes d'arrêt",
1451+ "context_allow_post_history_instructions": "Inclut les instructions post-historiques à la fin du prompt, si elles sont définies dans la fiche de personnage ET si l'option 'Préférer les instructions de personnage' est activée.\nN'EST PAS RECOMMANDÉ POUR LES MODÈLES DE COMPLÉTION DE TEXTE, CAR IL PEUT ENTRAÎNER DE MAUVAIS RÉSULTATS.",
1452+ "Allow Post-History Instructions": "Autoriser les instructions post-histoire",
1453+ "Instruct Template": "Modèle d'instruction",
1454+ "instruct_derived": "Dériver des métadonnées du modèle, si possible.",
1455+ "instruct_enabled": "Activer le mode d'instruction",
1456+ "Select your current Instruct Template": "Sélectionnez votre modèle d'instruction actuel",
1457+ "Delete template": "Supprimer le modèle",
1458+ "instruct_template_activation_regex_desc": "Lors de la connexion à une API ou du choix d'un modèle, ce modèle d'instruction est automatiquement activé si le nom du modèle correspond à l'expression régulière fournie.",
1459+ "Never": "Jamais",
1460+ "Groups and Past Personas": "Groupes et personas antérieures",
1461+ "Always": "Toujours",
1462+ "Instruct Sequences": "Séquences d'instruction",
1463+ "User Message Sequences": "Séquences de messages d'utilisateurs",
1464+ "User Prefix": "Préfixe du message de l'utilisateur",
1465+ "User Suffix": "Suffixe du message de l'utilisateur",
1466+ "Assistant Message Sequences": "Séquences de messages de l'assistant",
1467+ "Assistant Prefix": "Préfixe du message de l'assistant",
1468+ "Assistant Suffix": "Suffixe du message de l'assistant",
1469+ "System Message Sequences": "Séquences de messages système",
1470+ "System Prefix": "Préfixe des messages système",
1471+ "System Suffix": "Suffixe des messages du système",
1472+ "System Prompt Sequences": "Séquences du prompt système",
1473+ "Inserted before the first User's message.": "Inséré avant le premier message de l'utilisateur.",
1474+ "First User Prefix": "Préfixe du premier utilisateur",
1475+ "instruct_last_input_sequence": "Inséré avant le dernier message de l'utilisateur.",
1476+ "Last User Prefix": "Préfixe du dernier utilisateur",
1477+ "sysprompt_enabled": "Activer le prompt système",
1478+ "Select your current System Prompt": "Sélectionnez votre prompt système actuel",
1479+ "Update current prompt": "Mise à jour du prompt actuel",
1480+ "Rename current prompt": "Renommer le prompt actuel",
1481+ "Save prompt as": "Enregistrer le prompt sous",
1482+ "Restore current prompt": "Restaurer le prompt actuel",
1483+ "Prompt Content": "Contenu du prompt",
1484+ "comma delimited,no spaces between": "délimité par des virgules, sans espace entre",
1485+ "(disabled when max recursion steps are used)": "(désactivé lorsque le nombre maximum de pas de récursivité est utilisé)",
1486+ "Cap the number of entry activation recursions": "Plafonner le nombre de récursions d'activation d'entrée",
1487+ "Max Recursion Steps": "Nombre maximal d'étapes de récursivité",
1488+ "0 = unlimited, 1 = scans once and doesn't recurse, 2 = scans once and recurses once, etc\\n(disabled when min activations are used)": "0 = illimité, 1 = scanne une fois et ne récure pas, 2 = scanne une fois et récure une fois, etc.\n(désactivé lorsque des activations minimales sont utilisées)",
1489+ "Include names with each message into the context for scanning": "Inclure les noms dans chaque message dans le contexte pour l'analyse.",
1490+ "Apply current sorting as Order": "Appliquer le tri actuel comme ordre",
1491+ "Display swipe numbers for all messages, not just the last.": "Afficher le nombre de balayage sur tous les messages, et pas seulement le dernier.",
1492+ "Swipe # for All Messages": "Balayage # pour tous les messages",
1493+ "Defines on importing cards which action should be chosen for importing its listed tags. 'Ask' will always display the dialog.": "Définit, lors de l'importation de cartes, l'action à choisir pour importer les tags répertoriés. L'action 'Demander' affichera toujours la boîte de dialogue.",
1494+ "Ask": "Demander",
1495+ "tag_import_none": "Aucun",
1496+ "tag_import_all": "Tous",
1497+ "Existing": "Existant",
1498+ "If checked and the character card contains a Post-History Instructions override, use that instead": "Si cette case est cochée et que la carte de personnage contient une instruction de remplacement pour le post-histoire, utilisez-la à la place.",
1499+ "Prefer Character Card Instructions": "Préférer les instructions du personnage",
1500+ "Enable auto-select of input text in some text fields when clicking/selecting them. Applies to popup input textboxes, and possible other custom input fields.": "Active la sélection automatique du texte saisi dans certains champs de texte lorsque l'on clique dessus ou qu'on les sélectionne. S'applique aux zones de texte de type popup et, éventuellement, à d'autres champs de saisie personnalisés.",
1501+ "Auto-select Input Text": "Sélection automatique du texte d'entrée",
1502+ "markdown_hotkeys_desc": "Activer les raccourcis clavier pour l'insertion de caractères au format markdown dans certaines zones de saisie de texte. Voir '/help hotkeys'.",
1503+ "Markdown Hotkeys": "Markdown Hotkeys",
1504+ "mui_reset": "Réinitialisation",
1505+ "Show a button in the input area to ask the AI to impersonate your character for a single message": "Affichez un bouton dans la zone de saisie pour demander à l'IA de se faire passer pour votre personnage le temps d'un message.",
1506+ "Quick 'Impersonate' button": "Bouton \"Usurpation\" rapide",
1507+ "In group chat, highlight the character(s) that are currently queued to generate responses and the order in which they will respond.": "Dans le chat de groupe, mettez en évidence le(s) personnage(s) qui sont actuellement en file d'attente pour générer des réponses et l'ordre dans lequel ils répondront.",
1508+ "Show group chat queue": "Afficher la file d'attente du chat de groupe",
1509+ "Keyboard": "Clavier:",
1510+ "Select with Tab or Enter": "Sélectionner avec Tab ou Entrée",
1511+ "Select with Tab": "Sélectionner avec Tab",
1512+ "Select with Enter": "Sélectionner avec Entrée",
1513+ "stscript_parser_flag_replace_getvar_label": "Empêche les macros {{getvar::}} {{getglobalvar::}} d'avoir des valeurs littérales de type macro auto-évaluées.\nPar exemple, \"{{newline}}\" reste la chaîne littérale \"{{newline}}\"\n\n((Cela se fait en remplaçant en interne les macros {{getvar::}} {{getglobalvar::}} par des variables scopées)",
1514+ "Background Image": "Arrière-plans",
1515+ "Background Fitting": "Ajustement de l'arrière-plan",
1516+ "Classic": "Classique",
1517+ "Cover": "Couvrir",
1518+ "Contain": "Contenir",
1519+ "Stretch": "Étirer",
1520+ "Center": "Centrer",
1521+ "Persona Lore Alt+Click to open the lorebook": "Lore de persona\nAlt+Click pour ouvrir le lorebook",
1522+ "None (disabled)": "Aucun (désactivé)",
1523+ "world_button_title": "Lore de personnage\n\nCliquer pour charger\nMajuscule-clic pour ouvrir la fenêtre contextuelle « Lien vers le Wold Info ».",
1524+ "Chat Lore Alt+Click to open the lorebook": "Lore du chat\nAlt+Click pour ouvrir le lorebook",
1525+ "Manual": "Manuel",
1526+ "Duplicate persona": "Dupliquer la persona",
1527+ "popup-button-crop": "Recadrer",
1528+ "Close popup": "Fermer le popup",
1529+ "Close": "Fermer",
1530+ "Any contents here will replace the default Post-History Instructions used for this character. (v2 spec: post_history_instructions)": "Tout contenu ici remplacera les instructions post-histore par défaut utilisées pour ce personnage.\n(v2 spec: post_history_instructions)",
1531+ "WI Entry Status:🔵 Constant🟢 Normal🔗 Vectorized": "WI Statut de l'entrée :\r🔵 Constant\r🟢 Normal\r🔗 Vectorisé",
1532+ "Use global": "Utiliser les données globales",
1533+ "Whole Words": "Mots entiers",
1534+ "Group Scoring": "Notation des groupes",
1535+ "delay_until_recursion_level": "Définit les niveaux de délai pour les balayages récursifs.\r\rDans un premier temps, seul le premier niveau (le plus petit nombre) sera pris en compte.\rSi aucune correspondance n'est trouvée, le niveau suivant devient éligible pour la correspondance.\rCette opération est répétée jusqu'à ce que tous les niveaux soient vérifiés.\r\rLié au réglage \"Délai avant récursion\".",
1536+ "Recursion Level": "Niveau de récursivité",
1537+ "Non-recursable (will not be activated by another)": "Non récursable (ne peut être activé par un autre)",
1538+ "Delay until recursion (can only be activated on recursive checking)": "Délai jusqu'à la récursion (ne peut être activé que lors d'un contrôle récursif)",
1539+ "Prioritize": "Priorités",
1540+ "Sticky entries will stay active for N messages after being triggered.": "Les entrées collantes restent actives pendant N messages après avoir été déclenchées.",
1541+ "Sticky": "Collant",
1542+ "Entries with a cooldown can't be activated N messages after being triggered.": "Les entrées avec un temps de recharge ne peuvent pas être activées N messages après avoir été déclenchées.",
1543+ "Cooldown": "Récupération",
1544+ "Entries with a delay can't be activated until there are N messages present in the chat.": "Les entrées avec un délai ne peuvent pas être activées tant qu'il n'y a pas N messages dans le chat.",
1545+ "Delay": "Délai",
1546+ "Filter to Characters or Tags": "Filtre sur les personnages ou les tags",
1547+ "Switch the Character/Tags filter around to exclude the listed characters and tags from matching for this entry": "Changez le filtre Personnages/Tags pour exclure les personnages et tags listés de la correspondance pour cette entrée.",
1548+ "Exclude": "Exclure",
1549+ "Injection position. Relative (to other prompts in prompt manager) or In-chat @ Depth.": "Position d'injection. Relative (par rapport à d'autres prompts dans le gestionnaire de prompts) ou In-chat @ Depth.",
1550+ "prompt_manager_in_chat": "In-chat",
1551+ "The content of this prompt is pulled from elsewhere and cannot be edited here.": "Le contenu de ce message est tiré d'autres sources et ne peut être modifié ici..",
1552+ "Open checkpoint chat\nShift+Click to replace the existing checkpoint with a new one": "Cliquer pour ouvrir le chat du point de contrôle\nShift+Click pour remplacer le point de contrôle existant par un nouveau.",
1553+ "Caption": "Légende",
1554+ "Swipe left": "Balayer à gauche",
1555+ "Swipe right": "Balayer à droite",
1556+ "alternate_greetings_hint_1": "Cliquez sur le",
1557+ "alternate_greetings_hint_2": "bouton pour commencer !",
1558+ "Alternate Greeting #": "Salutation alternative #",
1559+ "Reroll with the entire prefix": "Renouvellement avec l'ensemble du préfixe",
1560+ "Load a custom asset list or select": "Charger une liste de ressources personnalisée ou sélectionner",
1561+ "to install 3rd party extensions.": "pour installer des extensions tierces.",
1562+ "Assets URL": "URL des ressources",
1563+ "load_asset_list_desc": "Chargement d'une liste d'extensions et de ressources sur la base d'un fichier de liste de ressources.\n\nL'URL des ressources par défaut dans ce champ pointe vers la liste des extensions et des ressources officielles.\nSi vous disposez d'une liste de ressources personnalisée, vous pouvez l'insérer ici.\n\nPour installer une seule extension tierce, utilisez le bouton \"Installer des extensions\" en haut à droite.",
1564+ "Load an asset list": "Charger une liste de ressources",
1565+ "Load Asset List": "Charger la liste des ressources",
1566+ "Characters": "Personnages",
1567+ "Disable": "Désactiver",
1568+ "Enable": "Activer",
1569+ "These files are available for the current character in all chats they are in.": "Ces fichiers sont disponibles pour le personnage actuel dans tous les chats auxquels il participe.",
1570+ "These files are available for all characters in the current chat.": "Ces fichiers sont disponibles pour tous les personnages du chat actuel.",
1571+ "Image Captioning": "Légende des images",
1572+ "Local": "Local",
1573+ "Multimodal (OpenAI / Anthropic / llama / Google)": "Multimodal (OpenAI / Anthropic / llama / Google)",
1574+ "Extras": "Extras",
1575+ "Horde": "Horde",
1576+ "API": "API",
1577+ "Text Generation WebUI (oobabooga)": "Text Generation WebUI (oobabooga)",
1578+ "currently_selected": "[Actuellement sélectionné]",
1579+ "currently_loaded": "[Actuellement chargée]",
1580+ "Allow reverse proxy": "Autoriser le reverse proxy",
1581+ "Hint:": "Indice:",
1582+ "Set your API keys and endpoints in the 'API Connections' tab first.": "Définissez d'abord vos clés API et vos points de terminaison dans l'onglet « Connexions API ».",
1583+ "Caption Prompt": "Légende Prompt",
1584+ "Ask every time": "Demander à chaque fois",
1585+ "Message Template": "Modèle de message",
1586+ "(use _space": "(use",
1587+ "macro)": "macro)",
1588+ "Automatically caption images": "Légende automatique des images",
1589+ "Edit captions before saving": "Modifier les légendes avant l'enregistrement",
1590+ "Profile name:": "Nom du profil :",
1591+ "Creating a Connection Profile": "Création d'un profil de connexion",
1592+ "{{@key}}": "{{@key}}:",
1593+ "Enter a name:": "Saisir un nom :",
1594+ "Connection Profile": "Profil de connexion",
1595+ "View connection profile details": "Voir les détails du profil de connexion",
1596+ "Create a new connection profile": "Créer un nouveau profil de connexion",
1597+ "Update a connection profile": "Mise à jour d'un profil de connexion",
1598+ "Edit a connection profile": "Modifier un profil de connexion",
1599+ "Reload a connection profile": "Recharger un profil de connexion",
1600+ "Delete a connection profile": "Supprimer un profil de connexion",
1601+ "Omitted Settings:": "Réglages omis :",
1602+ "Character Expressions": "Expressions de personnages",
1603+ "Translate text to English before classification": "Traduire le texte en anglais avant de le classer",
1604+ "Show default images (emojis) if sprite missing": "Afficher les images par défaut (emojis) si le sprite est manquant",
1605+ "Image Type - talkinghead (extras)": "Type d'image - talkinghead (extras)",
1606+ "Classifier API": "API de classification",
1607+ "Select the API for classifying expressions.": "Sélectionnez l'API pour classer les expressions.",
1608+ "Main API": "API principale",
1609+ "WebLLM Extension": "Extension WebLLM",
1610+ "LLM Prompt": "Prompt LLM",
1611+ "Will be used if the API doesn't support JSON schemas or function calling.": "Sera utilisé si l'API ne prend pas en charge les schémas JSON ou les appels de fonction.",
1612+ "Default / Fallback Expression": "Expression par défaut / de secours",
1613+ "Set the default and fallback expression being used when no matching expression is found.": "Définir l'expression par défaut et l'expression de secours utilisées lorsqu'aucune expression correspondante n'est trouvée.",
1614+ "Custom Expressions": "Expressions personnalisées",
1615+ "Can be set manually or with an _space": "Peut être réglé manuellement ou à l'aide d'une",
1616+ "space_ slash command.": "commande slash.",
1617+ "Open a chat to see the character expressions.": "Ouvrez un chat pour voir les expressions du personnage.",
1618+ "You are in offline mode. Click on the image below to set the expression.": "Vous êtes en mode hors ligne. Cliquez sur l'image ci-dessous pour définir l'expression.",
1619+ "Sprite Folder Override": "Remplacement du dossier des sprites",
1620+ "Use a forward slash to specify a subfolder. Example: _space": "Utilisez une barre oblique pour spécifier un sous-dossier. Exemple :",
1621+ "Upload sprite pack (ZIP)": "Charger le pack de sprites (ZIP)",
1622+ "Remove all image overrides": "Suppression de toutes les surcharges d'image",
1623+ "Create new folder in the _space": "Créer un nouveau dossier dans le",
1624+ "folder of your user data directory and name it as the name of the character.": "de votre répertoire de données utilisateur et nommez-le comme le nom du personnage.",
1625+ "Put images with expressions there. File names should follow the pattern:": "Placez-y des images avec des expressions. Les noms de fichiers doivent suivre le modèle :",
1626+ "expression_label_pattern": "[expression_label].[image_format]",
1627+ "Sprite set:": "Ensemble de sprites :",
1628+ "Show Gallery": "Show Gallery",
1629+ "ext_sum_title": "Résumer",
1630+ "ext_sum_webllm": "Extension WebLLM",
1631+ "ext_sum_restore_tip": "Rétablir un résumé précédent ; à utiliser plusieurs fois pour effacer l'état du résumé pour ce chat.",
1632+ "ext_sum_force_tip": "Déclencher une mise à jour du résumé dès maintenant.",
1633+ "ext_sum_include_wi_scan_desc": "Inclure le dernier résumé dans l'analyse WI.",
1634+ "ext_sum_include_wi_scan": "Inclure dans l'analyse des World Info",
1635+ "None (not injected)": "Aucune (pas d'injection)",
1636+ "ext_sum_injection_position_none": "Le résumé ne sera pas injecté dans le prompt. Vous pouvez toujours y accéder via la macro {{summary}}.",
1637+ "Labels and Message": "Étiquettes et message",
1638+ "Label": "Étiquette",
1639+ "(label of the button, if no icon is chosen) ": "(étiquette du bouton, si aucune icône n'est choisie)",
1640+ "Title": "Titre",
1641+ "(tooltip, leave empty to show message or /command)": "(info-bulle, laisser vide pour afficher un message ou une commande)",
1642+ "Message / Command:": "Message / Commande :",
1643+ "Word wrap": "Enveloppe de mot",
1644+ "Tab size:": "Tab size:",
1645+ "Ctrl+Enter to execute": "Ctrl+Entrée pour exécuter",
1646+ "Context Menu": "Menu Contexte",
1647+ "Auto-Execute": "Auto-Exécution",
1648+ "Don't trigger auto-execute": "Ne pas déclencher l'exécution automatique",
1649+ "Invisible (auto-execute only)": "Invisible (exécution automatique uniquement)",
1650+ "Execute on startup": "Exécuter au démarrage",
1651+ "Execute on user message": "Exécuter sur message de l'utilisateur",
1652+ "Execute on AI message": "Exécuter sur message de l'IA",
1653+ "Execute on chat change": "Exécuter sur changement de chat",
1654+ "Execute on new chat": "Exécution sur un nouveau chat",
1655+ "Execute on group member draft": "Execute on group member draft",
1656+ "Automation ID:": "Automation ID",
1657+ "Testing": "Essai",
1658+ "Quick Reply": "Quick Reply",
1659+ "Enable Quick Replies": "Activer les Quick Replies",
1660+ "Combine Quick Replies": "Combiner les Quick Replies",
1661+ "Show Popout Button": "Afficher le bouton contextuel (sur le bureau)",
1662+ "Global Quick Reply Sets": "Global Quick Reply Sets",
1663+ "Chat Quick Reply Sets": "Chat Quick Reply Sets",
1664+ "Edit Quick Replies": "Editer les Quick Replies",
1665+ "Disable Send (Insert Into Input Field)": "Désactiver l'envoi (insérer dans le champ de saisie)",
1666+ "Place Quick Reply Before Input": "Placez le quick reply avant la saisie",
1667+ "Inject user input automatically": "Injecter automatiquement les données de l'utilisateur",
1668+ "(if disabled, use ": "(si désactivé, utiliser",
1669+ "macro for manual injection)": "macro pour injection manuelle)",
1670+ "Color": "Couleur",
1671+ "Only apply color as accent": "N'appliquez la couleur qu'en tant qu'accent",
1672+ "ext_regex_new_global_script_desc": "Nouveau script global de regex",
1673+ "ext_regex_new_scoped_script_desc": "Nouveau script délimitée de regex",
1674+ "ext_regex_disallow_scoped": "Interdire l'utilisation de regex délimitée",
1675+ "ext_regex_allow_scoped": "Autoriser l'utilisation de regex délimitées",
1676+ "ext_regex_user_input_desc": "Messages envoyés par l'utilisateur.",
1677+ "ext_regex_ai_input_desc": "Messages reçus de l'API Génération.",
1678+ "ext_regex_slash_desc": "Messages envoyés à l'aide de commandes STscript.",
1679+ "ext_regex_wi_desc": "Contenu de l'entrée Lorebook/World Info. Nécessite de cocher la case 'Only Format Prompt' !",
1680+ "ext_regex_run_on_edit_desc": "Exécute le script regex lorsque le message appartenant à un ou plusieurs rôles spécifiés est modifié.",
1681+ "Macro in Find Regex": "Macros dans Find Regex",
1682+ "Don't substitute": "Ne pas substituer",
1683+ "Substitute (raw)": "Substituer (raw)",
1684+ "Substitute (escaped)": "Substituer (escaped)",
1685+ "Ephemerality": "Éphémérité",
1686+ "ext_regex_only_format_visual_desc": "Le contenu du fichier d'historique du chat ne changera pas, mais les regex seront appliquées aux messages affichés dans l'UI du chat.",
1687+ "Abort current image generation task": "Abandonner la tâche de génération d'images en cours",
1688+ "Stop Image Generation": "Arrêt de la génération d'images",
1689+ "sd_function_tool": "Utilisez les outils pour détecter automatiquement les intentions de générer des images.",
1690+ "sd_function_tool_txt": "Utilisez les outils",
1691+ "sd_free_extend": "Étendre automatiquement les prompts de sujet en mode libre (pas les portraits ou les arrière-plans) à l'aide d'un LLM actuellement sélectionné.",
1692+ "sd_free_extend_txt": "Étendre les prompts de sujet en mode libre",
1693+ "sd_free_extend_small": "(interactif/commandes)",
1694+ "Model ID": "Model ID",
1695+ "e.g. black-forest-labs/FLUX.1-dev": "ex. black-forest-labs/FLUX.1-dev",
1696+ "API Key": "Clé API",
1697+ "Click to set": "Cliquez pour définir",
1698+ "You can find your API key in the Stability AI dashboard.": "Vous trouverez votre clé API dans le tableau de bord de Stability AI.",
1699+ "Style Preset": "Preset de style",
1700+ "Prompt Upsampling": "Prompt Upsampling",
1701+ "Swap width and height": "Intervertir la largeur et la hauteur",
1702+ "CLIP Skip": "CLIP Skip",
1703+ "Karras": "Karras",
1704+ "Not all samplers supported.": "Tous les échantillonneurs ne sont pas pris en charge.",
1705+ "sd_adetailer_face": "Utiliser ADetailer avec le modèle de visage pendant la génération. L'extension ADetailer doit être installée sur le backend.",
1706+ "Use ADetailer (Face)": "Utiliser ADetailer (Face)",
1707+ "(-1 for random)": "(-1 pour aléatoire)",
1708+ "Chat Message Visibility (by source)": "Visibilité des messages de chat (par source)",
1709+ "Uncheck to hide the extension's messages in chat prompts.": "Décochez cette case pour masquer les messages de l'extension dans les prompts de chat.",
1710+ "Extensions Menu": "Menu des extensions",
1711+ "Slash Command": "Commande Slash",
1712+ "Interactive Mode": "Mode interactif",
1713+ "Function Tool": "Outils",
1714+ "ext_translate_btn_chat": "Traduire le chat",
1715+ "ext_translate_btn_input": "Traduire la saisie",
1716+ "ext_translate_delete_confirm_1": "Êtes-vous sûr ?",
1717+ "ext_translate_delete_confirm_2": "Cette action supprime le texte traduit de tous les messages de la discussion en cours. Cette action ne peut pas être annulée.",
1718+ "ext_translate_title": "Traduction du chat",
1719+ "ext_translate_auto_mode": "Mode auto",
1720+ "ext_translate_mode_none": "Aucun",
1721+ "ext_translate_mode_responses": "Traduire les réponses",
1722+ "ext_translate_mode_inputs": "Traduire la saisie",
1723+ "ext_translate_mode_both": "Traduire les deux",
1724+ "ext_translate_mode_provider": "Fournisseur",
1725+ "ext_translate_target_lang": "Langue cible",
1726+ "ext_translate_clear": "Clear Translations",
1727+ "Select TTS Provider": "Sélectionner le fournisseur TTS",
1728+ "tts_enabled": "Activé",
1729+ "Narrate user messages": "Narrer les messages de l'utilisateur",
1730+ "Auto Generation": "Generation Auto",
1731+ "Requires auto generation to be enabled.": "La génération automatique doit être activée.",
1732+ "Narrate by paragraphs (when streaming)": "Narration par paragraphes (en cas de diffusion en continu)",
1733+ "Only narrate quotes": "Ne narrer que les \"citations\"",
1734+ "Ignore text, even quotes, inside asterisk": "Ignorer le *texte, même les \"citations\", à l'intérieur d'astérisques*",
1735+ "Narrate only the translated text": "Ne narrer que le texte traduit",
1736+ "Skip codeblocks": "Sauter les blocs de code",
1737+ "Skip tagged blocks": "Skip <tagged> blocks",
1738+ "Pass Asterisks to TTS Engine": "Transmettre les astérisques au moteur TTS",
1739+ "Audio Playback Speed": "Vitesse de lecture audio",
1740+ "Vector Storage": "Vector Storage",
1741+ "Vectorization Source": "Source de vectorisation",
1742+ "Local (Transformers)": "Local (Transformers)",
1743+ "Vectorization Model": "Modèle de vectorisation",
1744+ "Keep model in memory": "Garder le modèle en mémoire",
1745+ "Hint: Set the URL in the API connection settings.": "Conseil : définissez l'URL dans les paramètres de connexion à l'API.",
1746+ "The server MUST be started with the --embedding flag to use this feature!": "Le serveur DOIT être démarré avec l'option --embedding pour utiliser cette fonctionnalité !",
1747+ "NomicAI API Key": "Clé API NomicAI",
1748+ "Query messages": "Messages de requête",
1749+ "Score threshold": "Seuil de score",
1750+ "Chunk boundary": "Limite des morceaux",
1751+ "World Info settings": "Réglages desWorld Info",
1752+ "Enable for World Info": "Activer pour les World Info",
1753+ "Enabled for all entries": "Activé pour toutes les entrées",
1754+ "Checked: all entries except ❌ status can be activated.": "Vérifié : toutes les entrées sauf l'état ❌ peuvent être activées..",
1755+ "Unchecked: only entries with ❌ status can be activated.": "Non coché : seules les entrées ayant un statut 🔗 peuvent être activées.",
1756+ "Max Entries": "Nombre maximal d'entrées",
1757+ "File vectorization settings": "Paramètres de vectorisation des fichiers",
1758+ "Enable for files": "Activer pour les fichiers",
1759+ "Message attachments": "Pièces jointes aux messages",
1760+ "Size threshold (KB)": "Seuil de taille (KB)",
1761+ "Chunk size (chars)": "Taille des morceaux (chars)",
1762+ "Chunk overlap (%)": "Chevauchement des morceaux (%)",
1763+ "Retrieve chunks": "Récupérer des morceaux",
1764+ "Data Bank files": "Fichiers de la banque de données",
1765+ "Injection Template": "Modèle d'injection",
1766+ "Injection Position": "Position d'injection",
1767+ "Vectorize All": "Vectoriser tout",
1768+ "Purge Vectors": "Vecteurs de purge",
1769+ "Chat vectorization settings": "Paramètres de vectorisation du chat",
1770+ "Enabled for chat messages": "Activé pour les messages de chat",
1771+ "Retain#": "Conserver#",
1772+ "Insert#": "Insérer#",
1773+ "Vector Summarization": "Résumés vectoriels",
1774+ "Summarize chat messages for vector generation": "Résumer les messages de chat pour la génération de vecteurs",
1775+ "Warning: This will slow down vector generation drastically, as all messages have to be summarized first.": "Attention : Cela ralentira considérablement la génération de vecteurs, car tous les messages doivent d'abord être résumés.",
1776+ "Summarize chat messages when sending": "Résumer les messages de chat lors de l'envoi",
1777+ "Warning: This might cause your sent messages to take a bit to process and slow down response time.": "Attention : Le traitement des messages envoyés risque d'être un peu plus long et de ralentir le temps de réponse.",
1778+ "Extras API": "Extras API",
1779+ "Only used when Main API or WebLLM Extension is selected.": "Utilisé uniquement lorsque l'API principale ou l'extension WebLLM est sélectionnée.",
1780+ "Old messages are vectorized gradually as you chat. To process all previous messages, click the button below.": "Les anciens messages sont vectorisés progressivement au fur et à mesure que vous discutez.\n To process all previous messages, click the button below.",
1781+ "View Stats": "Voir les statistiques",
1782+ "Note:": "Note:",
1783+ "this chat is temporary and will be deleted as soon as you leave it.": "ce chat est temporaire et sera supprimé dès que vous le quitterez.",
1784+ "Enter a new display name:": "Saisissez un nouveau nom d'affichage :",
1785+ "Import Tags For _begin": "Importer des tags pour ",
1786+ "Click remove on any tag to remove it from this import.<br />Select one of the import options to finish importing the tags.": "Cliquez sur le bouton « Supprimer » d'un tag pour le retirer de l'importation..\n Sélectionnez l'une des options d'importation pour terminer l'importation des tags.",
1787+ "Existing Tags": "Tags existantes",
1788+ "New Tags": "Nouveaux tags",
1789+ "Folder Tags": "Tags de dossier",
1790+ "The following tags will be auto-imported based on the currently selected folders": "Les tags suivants seront importés automatiquement en fonction des dossiers sélectionnés.",
1791+ "Import None": "Aucun Import",
1792+ "Import All": "Importer Tout",
1793+ "Import Existing": "Importer l'existants",
1794+ "Import": "Importer",
1795+ "chat_rename_1": "Saisissez le nouveau nom du chat :",
1796+ "chat_rename_2": "!!L'utilisation d'un nom de fichier existant produira une erreur !!!",
1797+ "chat_rename_3": "Cela rompra le lien entre les points de contrôle des chats .",
1798+ "chat_rename_4": "Il n'est pas nécessaire d'ajouter '.jsonl' à la fin.",
1799+ "Enter Checkpoint Name:": "Saisir le nom du point de contrôle :",
1800+ "(Leave empty to auto-generate)": "(Laisser vide pour une génération automatique)",
1801+ "The currently existing checkpoint will be unlinked and replaced with the new checkpoint, but can still be found in the Chat Management.": "Le point de contrôle existant sera dissocié et remplacé par le nouveau point de contrôle, mais pourra toujours être trouvé dans la gestion du chat.",
1802+ "Include Body Parameters": "Inclure les paramètres du corps",
1803+ "custom_include_body_desc": "Paramètres à inclure dans le corps de la requête Chat Completion (objet YAML)\n\nExemple:\n- top_k: 20\n- repetition_penalty: 1.1",
1804+ "Exclude Body Parameters": "Exclure les paramètres du corps",
1805+ "custom_exclude_body_desc": "Paramètres à exclure du corps de la requête Chat Completion (tableau YAML)\n\nExemple:\n- frequency_penalty\n- presence_penalty",
1806+ "Include Request Headers": "Inclure les en-têtes des requêtes",
1807+ "custom_include_headers_desc": "En-têtes supplémentaires pour les demandes de Chat Completion (objet YAML)\n\nExemple:\n- CustomHeader: custom-value\n- AnotherHeader: custom-value",
1808+ "Functions in this category are for advanced users only. Don't click anything if you're not sure about the consequences.": "Les fonctions de cette catégorie sont réservées aux utilisateurs avancés. Ne cliquez sur rien si vous n'êtes pas sûr des conséquences.",
1809+ "THIS IS PERMANENT!": "CECI EST PERMANENT !",
1810+ "Also delete the chat files": "Supprimez également les fichiers de chat",
1811+ "Are you sure you want to duplicate this character?": "Êtes-vous sûr de vouloir dupliquer ce personnage ?",
1812+ "If you just want to start a new chat with the same character...": "Si vous voulez simplement commencer un nouveau chat avec le même personnage, utilisez l'option \"Commencer un nouveau chat\" dans le menu d'options en bas à gauche.",
1813+ "forbid_media_global_state_forbidden": "(interdit)",
1814+ "forbid_media_global_state_allowed": "(autorisé)",
1815+ "help_format_1": "Commandes de mise en forme du texte :",
1816+ "help_format_2": "*texte*",
1817+ "help_format_3": "s'affiche comme",
1818+ "help_format_4": "italique",
1819+ "help_format_5": "**texte**",
1820+ "help_format_6": "s'affiche comme",
1821+ "help_format_7": "gras",
1822+ "help_format_8": "***text***",
1823+ "help_format_9": "s'affiche comme",
1824+ "help_format_10": "gras italique",
1825+ "help_format_11": "__texte__",
1826+ "help_format_12": "s'affiche comme",
1827+ "help_format_13": "souligné",
1828+ "help_format_14": "~~texte~~",
1829+ "help_format_15": "displays as a",
1830+ "help_format_16": "strikethough",
1831+ "help_format_17": "[texte](url)",
1832+ "help_format_18": "s'affiche comme un",
1833+ "help_format_19": "hyperlink",
1834+ "help_format_20": "![texte](url)",
1835+ "help_format_21": "s'affiche sous forme d'image",
1836+ "help_format_22": "```texte```",
1837+ "help_format_23": "s'affiche comme un bloc de code (de nouvelles lignes sont autorisées entre les backticks)",
1838+ "help_format_like_this": "comme cela",
1839+ "help_format_24": "`texte`",
1840+ "help_format_25": "s'affiche comme du",
1841+ "help_format_26": "code inline",
1842+ "help_format_27": "> texte",
1843+ "help_format_28": "s'affiche comme une citation en bloc (notez l'espace après >)",
1844+ "help_format_29": "# texte",
1845+ "help_format_30": "s'affiche comme un grand en-tête (notez l'espace)",
1846+ "help_format_32": "## texte",
1847+ "help_format_33": "s'affiche comme un en-tête moyen (notez l'espace)",
1848+ "help_format_35": "### texte",
1849+ "help_format_36": "s'affiche comme un petit en-tête (notez l'espace)",
1850+ "help_1": "Bonjour à tous ! Veuillez sélectionner la rubrique d'aide sur laquelle vous souhaitez en savoir plus :",
1851+ "help_2": "Commands Slash",
1852+ "help_or": "ou",
1853+ "help_3": "Formatage",
1854+ "help_4": "Raccourcis",
1855+ "help_5": "{{Macros}}",
1856+ "help_6": "Vous avez encore des questions ? Le",
1857+ "help_7": "la documentation officielle de SillyTavern",
1858+ "help_8": "contient beaucoup plus d'informations !",
1859+ "help_hotkeys_0": "Raccourcis du chat",
1860+ "help_hotkeys_1": "Haut",
1861+ "help_hotkeys_2": "Modifier le dernier message dans le chat",
1862+ "help_hotkeys_3": "Ctrl+Haut",
1863+ "help_hotkeys_4": "Modifier le dernier message de l'utilisateur dans le chat",
1864+ "help_hotkeys_5": "Gauche",
1865+ "help_hotkeys_6": "balayage gauche",
1866+ "help_hotkeys_7": "Droite",
1867+ "help_hotkeys_8": "balayage droite (REMARQUE : les touches de raccourci sont désactivées lorsque quelque chose est tapé dans la barre de discussion.)",
1868+ "help_hotkeys_9": "Entrée",
1869+ "help_hotkeys_10": "(avec la barre de chat sélectionnée)",
1870+ "help_hotkeys_10_1": "envoyez votre message à l'IA",
1871+ "help_hotkeys_11": "Ctrl+Entrée",
1872+ "help_hotkeys_12": "Régénérer la dernière réponse de l'IA",
1873+ "help_hotkeys_13": "Alt+Entrée",
1874+ "help_hotkeys_14": "Poursuivre la dernière réponse de l'IA",
1875+ "help_hotkeys_15": "Echap",
1876+ "help_hotkeys_16": "arrêter la génération de réponses de l'IA, fermer les panneaux de l'interface utilisateur, annuler l'édition du message",
1877+ "help_hotkeys_17": "Ctrl+Maj+Haut",
1878+ "help_hotkeys_18": "Défiler jusqu'à la ligne de contexte",
1879+ "help_hotkeys_19": "Ctrl+Maj+Bas",
1880+ "help_hotkeys_20": "Raccourcis Markdown",
1881+ "help_hotkeys_21": "Fonctionne dans la barre de chat et les zones de texte marquées par cette icône :",
1882+ "help_hotkeys_22": "**gras**",
1883+ "help_hotkeys_23": "*italique*",
1884+ "help_hotkeys_24": "__underline__",
1885+ "help_hotkeys_25": "`code inline`",
1886+ "help_hotkeys_26": "~~strikethrough~~",
1887+ "Enter the Git URL of the extension to install": "Saisir l'URL Git de l'extension à installer",
1888+ "Disclaimer:": "Disclaimer:",
1889+ "Please be aware that using external extensions can have unintended side effects and may pose security risks. Always make sure you trust the source before importing an extension. We are not responsible for any damage caused by third-party extensions.": "Veuillez noter que l'utilisation d'extensions externes peut avoir des effets secondaires inattendus et présenter des risques pour la sécurité. Assurez-vous toujours de la fiabilité de la source avant d'importer une extension. Nous ne sommes pas responsables des dommages causés par des extensions tierces.",
1890+ "Prompt Itemization": "Prompt Itemization",
1891+ "Show Raw Prompt": "Afficher le prompt brut",
1892+ "Copy Prompt": "Copier le prompt",
1893+ "Show Prompt Differences": "Montrer les différences entre les prompts",
1894+ "API/Model:": "API/Modèle:",
1895+ "Preset:": "Preset:",
1896+ "Tokenizer:": "Tokenizer:",
1897+ "Only the white numbers really matter. All numbers are estimates. Grey color items may not have been included in the context due to certain prompt format settings.": "Seuls les chiffres blancs comptent vraiment. Tous les chiffres sont des estimations.\n Les éléments de couleur grise peuvent ne pas avoir été inclus dans le contexte en raison de certains paramètres du format du prompt.",
1898+ "System Info:": "Info système :",
1899+ "Prompt Tokens:": "Prompt Tokens:",
1900+ "World Info:": "World Info:",
1901+ "Chat History:": "Historique du chat :",
1902+ "Extensions:": "Extensions:",
1903+ "Bias:": "Biais:",
1904+ "Total Tokens in Prompt:": "Total des Tokens dans le Prompt:",
1905+ "Max Context": "Contexte Maximums",
1906+ "(Context Size - Response Length)": "(Taille du contexte - Longueur de la réponse)",
1907+ "System-wide Replacement Macros (in order of evaluation):": "Macros de remplacement globales (par ordre d'évaluation) :",
1908+ "help_macros_1": "uniquement pour la mise en lot des commandes slash. Remplacé par le résultat de la commande précédente.",
1909+ "help_macros_2": "insère simplement une nouvelle ligne.",
1910+ "help_macros_3": "supprime les nouvelles lignes entourant cette macro.",
1911+ "help_macros_4": "pas d'opération, juste une chaîne vide.",
1912+ "help_macros_5": "prompts globaux définis dans les paramètres de l'API. Valable uniquement dans les overrides de définitions avancées.",
1913+ "help_macros_6": "l'entrée de l'utilisateur",
1914+ "help_macros_7": "l'override du prompt principal du personnage",
1915+ "help_macros_8": "les overrides des instructions post-histoire du personnage",
1916+ "help_macros_9": "la description du personnage",
1917+ "help_macros_10": "la personnalité du personnage",
1918+ "help_macros_11": "le scénario du personnage",
1919+ "help_macros_12": "la description de votre persona actuelle",
1920+ "help_macros_13": "Exemples de dialogue du personnage",
1921+ "help_macros_14": "Exemples de dialogues non formatés",
1922+ "(only for Story String)": "(uniquement pour Story String)",
1923+ "help_macros_summary": "le dernier résumé du chat généré par l'extension \"Summarize\" (si disponible).",
1924+ "help_macros_15": "votre nom de persona actuel",
1925+ "help_macros_16": "le nom du personnage",
1926+ "help_macros_17": "le numéro de version du personnage",
1927+ "help_macros_18": "une liste de noms de membres du groupe séparés par des virgules (y compris les personnes en sourdine) ou le nom du personnage dans les discussions en solo. Alias: {{charIfNotGroup}}",
1928+ "help_groupNotMuted": "la même chose que {{group}}, mais exclut les membres en sourdine",
1929+ "help_macros_19": "un nom de modèle de génération de texte pour l'API actuellement sélectionnée.",
1930+ "Can be inaccurate!": "Peut être imprécis !",
1931+ "help_macros_20": "le texte du dernier message de chat.",
1932+ "help_macros_lastUser": "le texte du dernier message de chat de l'utilisateur.",
1933+ "help_macros_lastChar": "le texte du dernier message de chat du personnage.",
1934+ "help_macros_21": "index # du dernier message de chat. Utile pour la mise en lot des commandes slash.",
1935+ "help_macros_22": "l'ID du premier message inclus dans le contexte. La génération doit être exécutée au moins une fois dans la session en cours.",
1936+ "help_macros_23": "l'ID basé sur 1 du swipe actuel dans le dernier message de chat. Chaîne vide si le dernier message est caché par l'utilisateur ou le prompt.",
1937+ "help_macros_24": "le nombre de swipes dans le dernier message de chat. Chaîne vide si le dernier message est caché par l'utilisateur ou le prompt.",
1938+ "help_macros_reverse": "inverse le contenu de la macro.",
1939+ "help_macros_25": "vous pouvez laisser une note ici, et la macro sera remplacée par un contenu vide. Non visible pour l'IA.",
1940+ "help_macros_26": "l'heure actuelle",
1941+ "help_macros_27": "la date du jour",
1942+ "help_macros_28": "le jour de la semaine",
1943+ "help_macros_29": "l'heure ISO actuelle (24 heures)",
1944+ "help_macros_30": "la date ISO actuelle (AAAA-MM-JJ)",
1945+ "help_macros_31": "la date et l'heure actuelles dans le format spécifié, par exemple pour la date/heure allemandes :",
1946+ "help_macros_32": "l'heure actuelle dans le fuseau horaire UTC spécifié, ex. UTC-4 or UTC+2",
1947+ "help_macros_33": "la différence de temps entre time1 et time2. Accepte les macros d'heure et de date. (Ex: {{timeDiff::{{isodate}} {{time}}::2024/5/11 12:30:00}})",
1948+ "help_macros_34": "le temps écoulé depuis l'envoi du dernier message de l'utilisateur",
1949+ "help_macros_35": "définit un biais comportemental pour l'IA jusqu'à la prochaine entrée de l'utilisateur. Les guillemets autour du texte sont importants.",
1950+ "help_macros_36": "lance un dé. (ex :",
1951+ "space_ will roll a 6-sided dice and return a number between 1 and 6)": "lancera un dé à 6 faces et renverra un nombre entre 1 et 6)",
1952+ "help_macros_37": "renvoie un élément aléatoire de la liste. (ex :",
1953+ "space_ will return 1 of the 4 numbers at random. Works with text lists too.": "renverra 1 des 4 nombres au hasard. Fonctionne également avec les listes de texte.",
1954+ "help_macros_38": "syntaxe alternative pour random qui permet d'utiliser des virgules dans les éléments de la liste.",
1955+ "help_macros_39": "choisit un élément aléatoire dans la liste. Fonctionne de la même manière que {{random}}, avec les mêmes options syntaxiques possibles, mais le choix restera cohérent pour ce chat une fois choisi et ne sera pas relancé sur les messages consécutifs et le traitement des prompts.",
1956+ "help_macros_40": "ajoute dynamiquement du texte entre guillemets aux séquences de mots interdits, si le backend Text Generation WebUI est utilisé. Ne fait rien pour les autres backends. Peut être utilisé n'importe où (description de personnage, WI, AN, etc.) Les guillemets autour du texte sont importants.",
1957+ "help_macros_isMobile": "\"true\" si ST fonctionne actuellement dans un environnement mobile, \"false\" sinon",
1958+ "Instruct Mode and Context Template Macros:": "Mode d'instruction et macros de modèle de contexte :",
1959+ "(enabled in the Advanced Formatting settings)": "(activée dans les paramètres de formatage avancés)",
1960+ "help_macros_41": "longueur maximale autorisée du prompt en tokens = (taille du contexte - longueur de la réponse)",
1961+ "help_macros_42": "contexte modèle exemple dialogues séparateur",
1962+ "help_macros_43": "contexte modèle chat ligne de début",
1963+ "help_macros_44": "contenu du prompt système s'il est activé (soit override du prompt du personnage si c'est autorisée, soit defaultSystemPrompt)",
1964+ "help_macros_45": "contenu du prompt système",
1965+ "help_macros_46": "séquence de préfixes du prompt système d'instruction",
1966+ "help_macros_47": "séquence de suffixes du prompt système d'instruction",
1967+ "help_macros_48": "séquence de préfixes de l'utilisateur d'instruction",
1968+ "help_macros_49": "séquence de suffixes de l'utilisateur d'instruction",
1969+ "help_macros_50": "séquence de préfixes de l'assistant d'instruction",
1970+ "help_macros_51": "séquence de suffixes de l'assistant d'instruction",
1971+ "help_macros_52": "instruct assistant first output sequence",
1972+ "help_macros_53": "instruct assistant last output sequence",
1973+ "help_macros_54": "instruct system message prefix sequence",
1974+ "help_macros_55": "instruct system message suffix sequence",
1975+ "help_macros_56": "instruct system instruction prefix",
1976+ "help_macros_57": "instruct first user message filler",
1977+ "help_macros_58": "instruct stop sequence",
1978+ "help_macros_first_user": "instruct user first input sequence",
1979+ "help_macros_last_user": "instruct user last input sequence",
1980+ "Chat variables Macros:": "Macros de variables de chat :",
1981+ "Local variables = unique to the current chat": "Variables locales = propres au chat actuel",
1982+ "Global variables = works in any chat for any character": "Variables globales = fonctionnent dans n'importe quel chat pour n'importe quel personnage",
1983+ "Scoped variables = works in STscript": "Variables scopés = fonctionne dans STscript",
1984+ "help_macros_59": "remplacée par la valeur de la variable locale \"name\"",
1985+ "help_macros_60": "remplacée par une chaîne vide, définit la variable locale \"name\" à \"value\"",
1986+ "help_macros_61": "remplacés par des chaînes vides, ajoute une valeur numérique de \"increment\" à la variable locale \"name\"",
1987+ "help_macros_62": "remplacé par le résultat de l'incrémentation de la valeur de la variable \"name\" de 1",
1988+ "help_macros_63": "remplacé par le résultat de la décrémentation de la valeur de la variable \"name\" de 1",
1989+ "help_macros_64": "remplacée par la valeur de la variable globale \"name\"",
1990+ "help_macros_65": "remplacée par une chaîne vide, définit la variable globale \"name\" à \"value\"",
1991+ "help_macros_66": "remplacé par une chaîne vide, ajoute une valeur numérique de \"increment\" à la variable globale \"name\"",
1992+ "help_macros_67": "remplacé par le résultat de l'incrémentation de la valeur de la variable globale \"name\" de 1",
1993+ "help_macros_68": "remplacé par le résultat de la décrémentation de la valeur de la variable globale \"name\" de 1",
1994+ "help_macros_69": "remplacée par la valeur de la variable scopée \"name\"",
1995+ "help_macros_70": "remplacée par la valeur de l'élément à l'index (pour les tableaux / listes ou objets / dictionnaires) de la variable scopée \"name\"",
1996+ "Choose what to export": "Choisir ce qui doit être exporté",
1997+ "{{name}}": "{{name}}",
1998+ "Choose what to import": "Choisir ce qu'il faut importer",
1999+ "If necessary, you can later restore this chat file from the /backups folder": "Si nécessaire, vous pouvez restaurer ultérieurement ce fichier de chat à partir du dossier /backups",
2000+ "Also delete the current chat file": "Supprime également le fichier de chat actuel",
2001+ "Persona Lorebook for": "Persona Lorebook pour",
2002+ "persona_world_template_txt": "Une Wolrd Info sélectionnée sera liée à ce personnage. Lors de la création d'une réponse de l'IA,\n il sera combiné avec les entrées des lorebooks globaux, de personnages et de chat.",
2003+ "Are you sure you want to connect to the following proxy URL?": "Êtes-vous sûr de vouloir vous connecter à l'URL proxy suivante ?",
2004+ "Encountered an error while processing your request.": "Une erreur s'est produite lors du traitement de votre requête.",
2005+ "Check you have credits available on your": "Vérifiez que vous avez des crédits disponibles sur votre",
2006+ "OpenAI account quora_error": "compte OpenAI",
2007+ "dot quota_error": ".",
2008+ "If you have sufficient credits, please try again later.": "Si vous avez suffisamment de crédits, veuillez réessayer plus tard.",
2009+ "Enter your password below to confirm:": "Entrez votre mot de passe ci-dessous pour confirmer :",
2010+ "Unique to this chat.": "Unique à ce chat.",
2011+ "All group members will use the following scenario text instead of what is specified in their character cards.": "Tous les membres du groupe utiliseront le texte du scénario suivant au lieu de ce qui est spécifié dans leur fiche de personnage.",
2012+ "The following scenario text will be used instead of the value set in the character card.": "Le texte du scénario suivant sera utilisé à la place de la valeur définie dans la fiche de personnage.",
2013+ "Checkpoints inherit the scenario override from their parent, and can be changed individually after that.": "Les points de contrôle héritent du scénario de leur parent et peuvent ensuite être modifiés individuellement.",
2014+ "Download Model": "Télécharger le modèle",
2015+ "Downloader Options": "Options de téléchargement",
2016+ "Extra parameters for downloading/HuggingFace API": "Paramètres supplémentaires pour le téléchargement/HuggingFace API.\rSi vous n'êtes pas sûr, laissez ces paramètres vides.",
2017+ "Revision": "Révision",
2018+ "Folder Name": "Nom du dossier de sortie",
2019+ "HF Token": "Token HF",
2020+ "Include Patterns": "Inclure les patterns",
2021+ "Glob patterns of files to include in the download.": "Patterns globaux de fichiers à inclure dans le téléchargement.\rSéparer chaque pattern par une nouvelle ligne.",
2022+ "Exclude Patterns": "Exclure les patterns",
2023+ "Glob patterns of files to exclude in the download.": "Patterns globaux de fichiers à exclure du téléchargement.\rSéparer chaque pattern par une nouvelle ligne.",
2024+ "Tag Management": "Gestion des tags",
2025+ "Save your tags to a file": "Enregistrer vos tags dans un fichier",
2026+ "Restore tags from a file": "Enregistrer vos tags dans un fichier",
2027+ "Create a new tag": "Créer un nouveau tag",
2028+ "Drag handle to reorder. Click name to rename. Click color to change display.": "Faites glisser la poignée pour réorganiser. Cliquez sur le nom pour le renommer. Cliquez sur la couleur pour modifier l'affichage.",
2029+ "Click on the folder icon to use this tag as a folder.": "Cliquez sur l'icône de dossier pour utiliser ce tag comme dossier.",
2030+ "Use alphabetical sorting": "Utiliser le tri alphabétique",
2031+ "tags_sorting_desc": "Si cette option est activée, les tags seront automatiquement triés par ordre alphabétique lors de leur création ou de leur renommage.\nSi cette option est désactivée, les nouveaux tags seront ajoutés à la fin.\n\nSi un tag est réorganisé manuellement en le faisant glisser, le tri automatique sera désactivé.",
2032+ "Are you sure you want to delete the theme?": "Êtes-vous sûr de vouloir supprimer le thème ?",
2033+ "This will delete all your settings and data. There will be no undo button. Make sure you have a backup before proceeding.": "Cette opération effacera tous vos paramètres et toutes vos données. Il n'y aura pas de bouton d'annulation.\n Assurez-vous de disposer d'une sauvegarde avant de poursuivre.",
2034+ "Account reset code has been posted to the server console.": "Le code de réinitialisation du compte a été affiché sur la console du serveur.",
2035+ "and connect to an": "et se connectez à une",
2036+ "You can add more": "Vous pouvez ajouter d'autres",
2037+ "or_welcome": "ou",
2038+ "from other websites": "d'autres sites web.",
2039+ "Go to the": "Aller au menu ",
2040+ "to install additional features.": "pour installer des fonctionnalités supplémentaires.",
2041+ "If you're connected to an API, try asking me something!": "Si vous êtes connecté à une API, essayez de me demander quelque chose !",
2042+ "Title/Memo": "Titre/Memo",
2043+ "Strategy": "Stratégie",
2044+ "Position": "Position",
2045+ "Trigger %": "Déclencheur %",
2046+ "Only chunk on custom boundary": "Only chunk on custom boundary",
2047+ "Generate Caption": "Générer une légende",
2048+ "Use System Prompt": "Utiliser le prompt système:",
2049+ "Settings Preset": "Preset de réglages:",
2050+ "System Prompt Name": "Nom du prompt système:",
2051+ "Instruct Mode": "Mode Instruction:",
2052+ "Save and Update": "Sauvegarder et mettre à jour",
2053+ "Don't ask again for this URL": "Ne plus demander pour cette URL"
14432054}
public/locales/is-is.json+1 -1
@@ -879,7 +879,7 @@
879879 "popup-button-no": "Nei",
880880 "popup-button-cancel": "Hætta við",
881881 "popup-button-import": "Flytja inn",
882882 "Advanced DefininitionsDefinitions": "Ítarleg skilgreiningar",
883883 "Prompt Overrides": "Hnekkja hvetjandi",
884884 "(For Chat Completion and Instruct Mode)": "(Til að ljúka spjalli og leiðbeiningarham)",
885885 "Insert {{original}} into either box to include the respective default prompt from system settings.": "Settu inn {{original}} í hvora kassa til að innifela viðkomandi sjálfgefna framkallan frá kerfisstillingum.",
public/locales/it-it.json+1 -1
@@ -879,7 +879,7 @@
879879 "popup-button-no": "NO",
880880 "popup-button-cancel": "Annulla",
881881 "popup-button-import": "Importare",
882882 "Advanced DefininitionsDefinitions": "Definizioni avanzate",
883883 "Prompt Overrides": "Sostituzioni richieste",
884884 "(For Chat Completion and Instruct Mode)": "(Per il completamento della chat e la modalità istruzione)",
885885 "Insert {{original}} into either box to include the respective default prompt from system settings.": "Inserisci {{originale}} in uno dei due riquadri per includere il prompt predefinito corrispondente dalle impostazioni di sistema.",
public/locales/ja-jp.json+1 -1
@@ -879,7 +879,7 @@
879879 "popup-button-no": "いいえ",
880880 "popup-button-cancel": "キャンセル",
881881 "popup-button-import": "インポート",
882882 "Advanced DefininitionsDefinitions": "高度な定義",
883883 "Prompt Overrides": "プロンプトのオーバーライド",
884884 "(For Chat Completion and Instruct Mode)": "(チャット補完と指示モード用)",
885885 "Insert {{original}} into either box to include the respective default prompt from system settings.": "システム設定からの対応するデフォルトのプロンプトを含めるには、どちらかのボックスに{{original}}を挿入します。",
public/locales/ko-kr.json+1 -1
@@ -895,7 +895,7 @@
895895 "popup-button-no": "아니요",
896896 "popup-button-cancel": "취소",
897897 "popup-button-import": "불러오기",
898898 "Advanced DefininitionsDefinitions": "고급 정의",
899899 "Prompt Overrides": "프롬프트 무시",
900900 "(For Chat Completion and Instruct Mode)": "(채팅 완료 및 지시 모드의 경우)",
901901 "Insert {{original}} into either box to include the respective default prompt from system settings.": "{{original}}를 해당 상자에 넣어 시스템 설정의 기본 프롬프트를 포함합니다.",
public/locales/nl-nl.json+1 -1
@@ -879,7 +879,7 @@
879879 "popup-button-no": "Nee",
880880 "popup-button-cancel": "Annuleren",
881881 "popup-button-import": "Importeren",
882882 "Advanced DefininitionsDefinitions": "Geavanceerde definities",
883883 "Prompt Overrides": "Prompt-overschrijvingen",
884884 "(For Chat Completion and Instruct Mode)": "(Voor voltooiing van chat en instructiemodus)",
885885 "Insert {{original}} into either box to include the respective default prompt from system settings.": "Voeg {{original}} in in elk vak in om de respectievelijke standaardprompt vanuit systeeminstellingen op te nemen.",
public/locales/pt-pt.json+1 -1
@@ -879,7 +879,7 @@
879879 "popup-button-no": "Não",
880880 "popup-button-cancel": "Cancelar",
881881 "popup-button-import": "Importar",
882882 "Advanced DefininitionsDefinitions": "Definições Avançadas",
883883 "Prompt Overrides": "Substituições de prompt",
884884 "(For Chat Completion and Instruct Mode)": "(Para conclusão de bate-papo e modo de instrução)",
885885 "Insert {{original}} into either box to include the respective default prompt from system settings.": "Insira {{original}} em qualquer caixa para incluir o prompt padrão respectivo das configurações do sistema.",
public/locales/ru-ru.json+1 -1
@@ -265,7 +265,7 @@
265265 "Current Members": "Текущие участники",
266266 "Delete": "Удалить",
267267 "Cancel": "Отменить",
268268 "Advanced DefininitionsDefinitions": "Расширенное описание",
269269 "Personality summary": "Резюме по личности",
270270 "Scenario": "Сценарий",
271271 "Talkativeness": "Разговорчивость",
public/locales/uk-ua.json+1 -1
@@ -879,7 +879,7 @@
879879 "popup-button-no": "Немає",
880880 "popup-button-cancel": "Скасувати",
881881 "popup-button-import": "Імпорт",
882882 "Advanced DefininitionsDefinitions": "Розширені визначення",
883883 "Prompt Overrides": "Перевизначення підказок",
884884 "(For Chat Completion and Instruct Mode)": "(Для завершення чату та режиму інструктажу)",
885885 "Insert {{original}} into either box to include the respective default prompt from system settings.": "Вставте {{original}} в будь-яке поле, щоб включити відповідний запит з налаштувань системи.",
public/locales/vi-vn.json+1 -1
@@ -879,7 +879,7 @@
879879 "popup-button-no": "KHÔNG",
880880 "popup-button-cancel": "Hủy",
881881 "popup-button-import": "Nhập",
882882 "Advanced DefininitionsDefinitions": "Các Định nghĩa Nâng cao",
883883 "Prompt Overrides": "Ghi đè Prompt",
884884 "(For Chat Completion and Instruct Mode)": "(Đối với chế độ hoàn thành trò chuyện và hướng dẫn)",
885885 "Insert {{original}} into either box to include the respective default prompt from system settings.": "Chèn {{original}} vào bất kỳ hộp nào để bao gồm Prompt mặc định tương ứng từ cài đặt hệ thống.",
public/locales/zh-cn.json+9 -9
@@ -997,7 +997,7 @@
997997 "popup-button-import": "导入",
998998 "popup-button-crop": "裁剪",
999999 "Close popup": "关闭弹出窗口",
10001000 "Advanced DefininitionsDefinitions": "高级定义",
10011001 "Prompt Overrides": "提示词覆盖",
10021002 "(For Chat Completion and Instruct Mode)": "(用于聊天补全和指导模式)",
10031003 "Insert {{original}} into either box to include the respective default prompt from system settings.": "将{{original}}插入到任一框中,以包含系统设置中的相应默认提示词。",
@@ -1191,9 +1191,9 @@
11911191 "welcome_message_part_8": "您可随时通过",
11921192 "welcome_message_part_9": "图标来更改此设置。",
11931193 "Persona Name:": "用户角色名称:",
11941194 "Temporarily disable automatic replies from this character": "暂时禁用此角色的自动回复临时禁言此角色",
11951195 "Enable automatic replies from this character": "启用此角色的自动回复解除禁言此角色",
11961196 "Trigger a message from this character": "从此角色触发消息强制触发该角色发言",
11971197 "Move up": "向上移动",
11981198 "Move down": "向下移动",
11991199 "View character card": "查看角色卡片",
@@ -1838,7 +1838,7 @@
18381838 "Enter the Git URL of the extension to install": "输入扩展程序的 Git URL 以安装",
18391839 "Disclaimer:": "免责声明:",
18401840 "Please be aware that using external extensions can have unintended side effects and may pose security risks. Always make sure you trust the source before importing an extension. We are not responsible for any damage caused by third-party extensions.": "使用外部的扩展程序可能存在意料外的副作用和安全隐患。在导入扩展程序前,请一定确认其来源可信。我们不为第三方扩展程序造成的任何损失负责。",
18411841 "Prompt Itemization": "将提示词分条提示词拆分",
18421842 "Show Raw Prompt": "显示原始提示词",
18431843 "Copy Prompt": "复制提示词",
18441844 "Show Prompt Differences": "显示提示词差异",
@@ -2045,8 +2045,8 @@
20452045 "Post a GitHub issue": "在 GitHub 发布问题",
20462046 "Contact the developers": "联系开发者",
20472047 "If you're connected to an API, try asking me something!": "若您已经配置好API,尝试发送些什么吧!",
20482048 "Title/Memo": "标题/备忘录(备忘)",
20492049 "Strategy": "Strategy触发策略",
20502050 "Position": "位置插入位置",
20512051 "Trigger %": "触发率 %触发概率%"
20522052}
public/locales/zh-tw.json+75 -9
@@ -28,14 +28,14 @@
2828 "Prose Augmenter": "散文增強器",
2929 "Text Adventure": "文字冒險",
3030 "response legth(tokens)": "回應長度(符元數)",
3131 "Streaming": "串流即時串流",
3232 "Streaming_desc": "生成時逐位顯示回應逐字顯示生成中的回應內容當此功能關閉時關閉時回應將在完成後一次顯示回應將在生成完成後一次性顯示。",
3333 "context size(tokens)": "上下文長度(符元數)",
3434 "unlocked": "解鎖",
3535 "Only enable this if your model supports context sizes greater than 8192 tokens": "僅在您的模型支援超過 8192 個符元的上下文長度時啟用此功能",
3636 "Max prompt cost:": "最大提示詞費用",
3737 "Display the response bit by bit as it is generated.": "生成時逐位顯示回應逐字顯示生成中的回應內容。",
3838 "When this is off, responses will be displayed all at once when they are complete.": "關閉時,回應將在完成後一次性顯示回應將在生成完成後一次性顯示。",
3939 "Temperature": "溫度",
4040 "rep.pen": "重複懲罰",
4141 "Rep. Pen. Range.": "重複懲罰範圍",
@@ -880,7 +880,7 @@
880880 "popup-button-no": "取消",
881881 "popup-button-cancel": "關閉",
882882 "popup-button-import": "匯入",
883883 "Advanced DefininitionsDefinitions": "- 進階定義",
884884 "Prompt Overrides": "提示詞覆寫",
885885 "(For Chat Completion and Instruct Mode)": "(用於聊天補全和指令模式)",
886886 "Insert {{original}} into either box to include the respective default prompt from system settings.": "在任一框中插入 {{original}} 以包含系統設定中的預設提示詞。",
@@ -1745,7 +1745,7 @@
17451745 "Sprite Folder Override": "表情立繪資料夾覆蓋",
17461746 "Sprite set:": "立繪組:",
17471747 "Show Gallery": "查看圖庫",
17481748 "Sticky": "固定黏性",
17491749 "Style Preset": "預設樣式",
17501750 "Summarize chat messages for vector generation": "摘要聊天訊息以進行向量化處理",
17511751 "Summarize chat messages when sending": "傳送時摘要聊天內容",
@@ -2124,7 +2124,7 @@
21242124 "from other websites": "以從其他網站新增。",
21252125 "Go to the": "前往",
21262126 "to install additional features.": "以安裝更多功能。",
21272127 "If you're connected to an API, try asking me something!": "若您已連接若您已連線 API,嘗試問我一些問題吧!",
21282128 "Title/Memo": "標題/備註",
21292129 "Strategy": "插入策略",
21302130 "Position": "位置",
@@ -2386,5 +2386,71 @@
23862386 "Your preset contains proxy and/or custom endpoint settings.": "此預設包含代理和/或自訂端點設定。",
23872387 "Do you want to remove these fields before exporting?": "是否要在匯出前移除這些欄位?",
23882388 "Delete the preset? This action is irreversible and your current settings will be overwritten.": "確定刪除此預設?刪除後無法復原,且此設定將被覆蓋。",
23892389 "Update all": "全部更新",
2390+ "Automatically chooses an alternative provider if chosen providers can't serve your request.": "當所選提供者無法滿足您的請求時,自動選擇替代提供者。",
2391+ "Use extension settings": "使用擴充功能設定",
2392+ "To use instruct formatting, switch to OpenRouter under Text Completion API.": "若要使用指令格式,請在文本補全 API 下切換至 OpenRouter。",
2393+ "Automatically 'continue' a response if the model stopped before reaching a certain amount of tokens.": "如果模型在達到一定數量的符元前停止,則自動繼續生成回應。",
2394+ "Toggle entry's active state.": "切換條目的啟用狀態。",
2395+ "Non-sticky": "無黏性",
2396+ "No cooldown": "無冷卻時間",
2397+ "No delay": "無延遲",
2398+ "Included settings:": "包含設定:",
2399+ "Click on the setting name to omit it from the profile.": "點擊設定名稱以從設定檔中省略。",
2400+ "Tints the chat background and/or character sprites.": "調整聊天背景或角色圖片的色調。",
2401+ "Only chunk on custom boundary": "僅在自定邊界進行分塊(chunk)",
2402+ "help_macros_firstDisplayedMessageId": "載入到可見聊天中的第一則訊息的 ID。",
2403+ "Couldn't import tags:": "無法匯入標籤:",
2404+ "Select providers. No selection = all providers.": "選擇供應商。未選擇=所有供應商。",
2405+ "Select a model": "選擇模型",
2406+ "Search models...": "搜尋模型⋯",
2407+ "[Currently loaded]": "[當前加載]",
2408+ "Search providers...": "搜尋供應商⋯",
2409+ "No-sticky": "無固定",
2410+ "Create a new World Info": "建立新世界資訊",
2411+ "Enter a name for the new file:": "輸入新檔案的名稱:",
2412+ "Valid World Info file name is required": "需要有效的世界資訊檔案名稱",
2413+ "World Info file has an invalid format": "世界資訊檔案格式無效",
2414+ "World Info file has no entries": "世界資訊檔案中無任何條目",
2415+ "Character not found.": "未找到該角色。",
2416+ "Open a chat to get a name of the chat-bound lorebook": "開啟聊天以取得綁定聊天的知識書名稱。",
2417+ "File is not valid: ${0}": "檔案無效或格式不正確:${0}",
2418+ "The world with ${0} is invalid or corrupted.": "世界 ${0} 無效或已損壞。",
2419+ "Deactivated all worlds": "已停用所有世界",
2420+ "No world found named: ${0}": "未找到名為 ${0} 的世界",
2421+ "Activated world: ${0}": "已啟用世界:${0}",
2422+ "Deactivated world: ${0}": "已停用世界:${0}",
2423+ "World was not active: ${0}": "世界 ${0} 未啟用",
2424+ "The world '${0}' has been imported and linked to the character successfully.": "世界「${0}」已成功匯入並綁定至角色。",
2425+ "World/Lorebook imported": "世界/知識書已匯入",
2426+ "Are you sure you want to import '${0}'?": "確定要匯入「${0}」嗎?",
2427+ "Built-in Extensions:": "內建擴充功能:",
2428+ "Installed Extensions:": "已安裝的擴充功能:",
2429+ "Loading third-party extensions... Please wait...": "正在載入第三方擴充功能,請稍候⋯",
2430+ "The page will be reloaded shortly...": "頁面即將重新載入⋯",
2431+ "Extensions state changed": "擴充功能狀態已更改",
2432+ "Error loading extensions. See browser console for details.": "載入擴充功能時出現錯誤。詳情請查看瀏覽器控制台。",
2433+ "You don't have permission to update global extensions.": "您無權更新全域擴充功能。",
2434+ "Extension update failed": "擴充功能更新失敗",
2435+ "Extension ${0} updated to ${1}": "擴充功能 ${0} 已更新至 ${1}",
2436+ "Reload the page to apply updates": "重新加載頁面以使用更新",
2437+ "You don't have permission to delete global extensions.": "您無權刪除全域擴充功能。",
2438+ "Are you sure you want to delete ${0}?": "確定要刪除 ${0} 嗎?",
2439+ "You don't have permission to move extensions.": "您無權移動擴充功能。",
2440+ "Are you sure you want to move ${0} to your local extensions? This will make it available only for you.": "確定要將 ${0} 移至本地擴充功能嗎?此後僅您可使用。",
2441+ "Are you sure you want to move ${0} to the global extensions? This will make it available for all users.": "確定要將 ${0} 移至全域擴充功能嗎?此後所有使用者皆可使用。",
2442+ "Extension ${0} moved.": "擴充功能 ${0} 已移動。",
2443+ "Extension ${0} deleted": "擴充功能 ${0} 已刪除。",
2444+ "Please wait...": "請稍候⋯",
2445+ "Installing extension": "正在安裝擴充功能",
2446+ "Extension installation failed": "擴充功能安裝失敗",
2447+ "Extension '${0}' by ${1} (version ${2}) has been installed successfully!": "擴充功能 '${0}' 由 ${1} 提供(版本 ${2})已成功安裝!",
2448+ "Extension installation successful": "擴充功能安裝成功",
2449+ "Extension updates available": "有可用的擴充功能更新",
2450+ "Auto-updating extensions. This may take several minutes.": "正在自動更新擴充功能。這可能需要幾分鐘時間。",
2451+ "Install": "安裝",
2452+ "Modules provided by your Extras API:": "由您的 Extras API 提供的模組:",
2453+ "Not connected to the API!": "未連線到 API!",
2454+ "ext_type_system": "這是內建的擴充功能,無法刪除,且會跟隨系統更新。",
2455+ "Valid": "已驗證"
23902456}
public/script.js+132 -44
@@ -168,6 +168,7 @@ import {
168168 isTrueBoolean,
169169 toggleDrawer,
170170 isElementInViewport,
171+ copyText,
171172} from './scripts/utils.js';
172173import { debounce_timeout } from './scripts/constants.js';
173174
@@ -443,6 +444,7 @@ export const event_types = {
443444 MESSAGE_DELETED: 'message_deleted',
444445 MESSAGE_UPDATED: 'message_updated',
445446 MESSAGE_FILE_EMBEDDED: 'message_file_embedded',
447+ MORE_MESSAGES_LOADED: 'more_messages_loaded',
446448 IMPERSONATE_READY: 'impersonate_ready',
447449 CHAT_CHANGED: 'chat_id_changed',
448450 GENERATION_AFTER_COMMANDS: 'GENERATION_AFTER_COMMANDS',
@@ -575,7 +577,7 @@ export const DEFAULT_SAVE_EDIT_TIMEOUT = debounce_timeout.relaxed;
575577/** @type {debounce_timeout} The debounce timeout used for printing. debounce_timeout.quick: 100 ms */
576578export const DEFAULT_PRINT_TIMEOUT = debounce_timeout.quick;
577579
578580export const saveSettingsDebounced = debounce((loopCounter = 0) => saveSettings(loopCounter), DEFAULT_SAVE_EDIT_TIMEOUT);
579581export const saveCharacterDebounced = debounce(() => $('#create_button').trigger('click'), DEFAULT_SAVE_EDIT_TIMEOUT);
580582
581583/**
@@ -723,6 +725,7 @@ async function getSystemMessages() {
723725 is_user: false,
724726 is_system: true,
725727 mes: await renderTemplateAsync('assistantNote'),
728+ uses_system_ui: true,
726729 extra: {
727730 isSmallSys: true,
728731 },
@@ -1830,7 +1833,7 @@ export async function replaceCurrentChat() {
18301833 }
18311834}
18321835
18331836export async function showMoreMessages(messagesToLoad = null) {
18341837 const firstDisplayedMesId = $('#chat').children('.mes').first().attr('mesid');
18351838 let messageId = Number(firstDisplayedMesId);
18361839 let count = messagesToLoad || power_user.chat_truncation || Number.MAX_SAFE_INTEGER;
@@ -1860,6 +1863,8 @@ export function showMoreMessages(messagesToLoad = null) {
18601863 const newHeight = $('#chat').prop('scrollHeight');
18611864 $('#chat').scrollTop(newHeight - prevHeight);
18621865 }
1866+
1867+ await eventSource.emit(event_types.MORE_MESSAGES_LOADED);
18631868}
18641869
18651870export async function printMessages() {
@@ -2317,18 +2322,17 @@ export function addCopyToCodeBlocks(messageElement) {
23172322 const codeBlocks = $(messageElement).find('pre code');
23182323 for (let i = 0; i < codeBlocks.length; i++) {
23192324 hljs.highlightElement(codeBlocks.get(i));
2320- if (navigator.clipboard !== undefined) {
23212325 const copyButton = document.createElement('i');
23222326 copyButton.classList.add('fa-solid', 'fa-copy', 'code-copy', 'interactable');
23232327 copyButton.title = 'Copy code';
23242328 codeBlocks.get(i).appendChild(copyButton);
23252329 copyButton.addEventListener('pointerup', async function (event) {
23262330 navigator.clipboard.writeText( const text = codeBlocks.get(i).innerText);
2331+ await copyText(text);
23272332 toastr.info(t`Copied!`, '', { timeOut: 2000 });
23282333 });
23292334 }
23302335}
2331-}
23322336
23332337
23342338/**
@@ -2726,7 +2730,7 @@ export function getStoppingStrings(isImpersonate, isContinue) {
27262730export async function generateQuietPrompt(quiet_prompt, quietToLoud, skipWIAN, quietImage = null, quietName = null, responseLength = null, force_chid = null) {
27272731 console.log('got into genQuietPrompt');
27282732 const responseLengthCustomized = typeof responseLength === 'number' && responseLength > 0;
27292733 let originalResponseLengtheventHook = -1() => { };
27302734 try {
27312735 /** @type {GenerateOptions} */
27322736 const options = {
@@ -2738,11 +2742,15 @@ export async function generateQuietPrompt(quiet_prompt, quietToLoud, skipWIAN, q
27382742 quietName: quietName,
27392743 force_chid: force_chid,
27402744 };
2741- originalResponseLength = responseLengthCustomized ? saveResponseLength(main_api, responseLength) : -1;
2745+ if (responseLengthCustomized) {
2746+ TempResponseLength.save(main_api, responseLength);
2747+ eventHook = TempResponseLength.setupEventHook(main_api);
2748+ }
27422749 return await Generate('quiet', options);
27432750 } finally {
27442751 if (responseLengthCustomized && TempResponseLength.isCustomized()) {
27452752 restoreResponseLengthTempResponseLength.restore(main_api, originalResponseLength);
2753+ TempResponseLength.removeEventHook(main_api, eventHook);
27462754 }
27472755 }
27482756}
@@ -3386,9 +3394,9 @@ export async function generateRaw(prompt, api, instructOverride, quietToLoud, sy
33863394
33873395 const abortController = new AbortController();
33883396 const responseLengthCustomized = typeof responseLength === 'number' && responseLength > 0;
3389- let originalResponseLength = -1;
33903397 const isInstruct = power_user.instruct.enabled && api !== 'openai' && api !== 'novel' && !instructOverride;
33913398 const isQuiet = true;
3399+ let eventHook = () => { };
33923400
33933401 if (systemPrompt) {
33943402 systemPrompt = substituteParams(systemPrompt);
@@ -3402,7 +3410,9 @@ export async function generateRaw(prompt, api, instructOverride, quietToLoud, sy
34023410 prompt = isInstruct ? (prompt + formatInstructModePrompt(name2, false, '', name1, name2, isQuiet, quietToLoud)) : (prompt + '\n');
34033411
34043412 try {
3405- originalResponseLength = responseLengthCustomized ? saveResponseLength(api, responseLength) : -1;
3413+ if (responseLengthCustomized) {
3414+ TempResponseLength.save(api, responseLength);
3415+ }
34063416 let generateData = {};
34073417
34083418 switch (api) {
@@ -3415,20 +3425,24 @@ export async function generateRaw(prompt, api, instructOverride, quietToLoud, sy
34153425 const koboldSettings = koboldai_settings[koboldai_setting_names[preset_settings]];
34163426 generateData = getKoboldGenerationData(prompt, koboldSettings, amount_gen, max_context, isHorde, 'quiet');
34173427 }
3428+ TempResponseLength.restore(api);
34183429 break;
34193430 case 'novel': {
34203431 const novelSettings = novelai_settings[novelai_setting_names[nai_settings.preset_settings_novel]];
34213432 generateData = getNovelGenerationData(prompt, novelSettings, amount_gen, false, false, null, 'quiet');
3433+ TempResponseLength.restore(api);
34223434 break;
34233435 }
34243436 case 'textgenerationwebui':
34253437 generateData = getTextGenGenerationData(prompt, amount_gen, false, false, null, 'quiet');
3438+ TempResponseLength.restore(api);
34263439 break;
34273440 case 'openai': {
34283441 generateData = [{ role: 'user', content: prompt.trim() }];
34293442 if (systemPrompt) {
34303443 generateData.unshift({ role: 'system', content: systemPrompt.trim() });
34313444 }
3445+ eventHook = TempResponseLength.setupEventHook(api);
34323446 } break;
34333447 }
34343448
@@ -3470,41 +3484,100 @@ export async function generateRaw(prompt, api, instructOverride, quietToLoud, sy
34703484
34713485 return message;
34723486 } finally {
34733487 if (responseLengthCustomized && TempResponseLength.isCustomized()) {
34743488 restoreResponseLengthTempResponseLength.restore(api, originalResponseLength);
3489+ TempResponseLength.removeEventHook(api, eventHook);
3490+ }
34753491 }
34763492}
3493+
3494+class TempResponseLength {
3495+ static #originalResponseLength = -1;
3496+ static #lastApi = null;
3497+
3498+ static isCustomized() {
3499+ return this.#originalResponseLength > -1;
34773500 }
34783501
34793502 /**
34803503 * Temporarily changeSave the current response length for the specified API.
34813504 * @param {string} api API to use.identifier
34823505 * @param {number} responseLength TargetNew response length.
3483- * @returns {number} The original response length.
34843506 */
34853507function static saveResponseLengthsave(api, responseLength) {
3486- let oldValue = -1;
34873508 if (api === 'openai') {
34883509 oldValue this.#originalResponseLength = oai_settings.openai_max_tokens;
34893510 oai_settings.openai_max_tokens = responseLength;
34903511 } else {
34913512 oldValue this.#originalResponseLength = amount_gen;
34923513 amount_gen = responseLength;
34933514 }
3494- return oldValue;
3515+
3516+ this.#lastApi = api;
3517+ console.log('[TempResponseLength] Saved original response length:', TempResponseLength.#originalResponseLength);
34953518 }
34963519
34973520 /**
34983521 * Restore the original response length for the specified API.
34993522 * @param {string|null} api API to use.identifier
3500- * @param {number} responseLength Target response length.
35013523 * @returns {void}
35023524 */
35033525function static restoreResponseLengthrestore(api, responseLength) {
3526+ if (this.#originalResponseLength === -1) {
3527+ return;
3528+ }
3529+ if (!api && this.#lastApi) {
3530+ api = this.#lastApi;
3531+ }
35043532 if (api === 'openai') {
35053533 oai_settings.openai_max_tokens = responseLengththis.#originalResponseLength;
35063534 } else {
35073535 amount_gen = responseLengththis.#originalResponseLength;
3536+ }
3537+
3538+ console.log('[TempResponseLength] Restored original response length:', this.#originalResponseLength);
3539+ this.#originalResponseLength = -1;
3540+ this.#lastApi = null;
3541+ }
3542+
3543+ /**
3544+ * Sets up an event hook to restore the original response length when the event is emitted.
3545+ * @param {string} api API identifier
3546+ * @returns {function(): void} Event hook function
3547+ */
3548+ static setupEventHook(api) {
3549+ const eventHook = () => {
3550+ if (this.isCustomized()) {
3551+ this.restore(api);
3552+ }
3553+ };
3554+
3555+ switch (api) {
3556+ case 'openai':
3557+ eventSource.once(event_types.CHAT_COMPLETION_SETTINGS_READY, eventHook);
3558+ break;
3559+ default:
3560+ eventSource.once(event_types.GENERATE_AFTER_DATA, eventHook);
3561+ break;
3562+ }
3563+
3564+ return eventHook;
3565+ }
3566+
3567+ /**
3568+ * Removes the event hook for the specified API.
3569+ * @param {string} api API identifier
3570+ * @param {function(): void} eventHook Previously set up event hook
3571+ */
3572+ static removeEventHook(api, eventHook) {
3573+ switch (api) {
3574+ case 'openai':
3575+ eventSource.removeListener(event_types.CHAT_COMPLETION_SETTINGS_READY, eventHook);
3576+ break;
3577+ default:
3578+ eventSource.removeListener(event_types.GENERATE_AFTER_DATA, eventHook);
3579+ break;
3580+ }
35083581 }
35093582}
35103583
@@ -3835,7 +3908,7 @@ export async function Generate(type, { automatic_trigger, force_name2, quiet_pro
38353908 * @returns {string[]} Examples array with block heading
38363909 */
38373910 function parseMesExamples(examplesStr) {
38383911 if (!examplesStr || examplesStr.length === 0 || examplesStr === '<START>') {
38393912 return [];
38403913 }
38413914
@@ -5402,7 +5475,7 @@ async function promptItemize(itemizedPrompts, requestedMesId) {
54025475 } else {
54035476 diffPrevPrompt.style.display = 'none';
54045477 }
54055478 popup.dlg.querySelector('#copyPromptToClipboard').addEventListener('clickpointerup', async function () {
54065479 let rawPrompt = itemizedPrompts[PromptArrayItemForRawPromptDisplay].rawPrompt;
54075480 let rawPromptValues = rawPrompt;
54085481
@@ -5410,7 +5483,7 @@ async function promptItemize(itemizedPrompts, requestedMesId) {
54105483 rawPromptValues = rawPrompt.map(x => x.content).join('\n');
54115484 }
54125485
54135486 navigator.clipboard.writeTextawait copyText(rawPromptValues);
54145487 toastr.info(t`Copied!`);
54155488 });
54165489
@@ -5588,6 +5661,7 @@ function extractMessageFromData(data) {
55885661 return data;
55895662 }
55905663
5664+ function getTextContext() {
55915665 switch (main_api) {
55925666 case 'kobold':
55935667 return data.results[0].text;
@@ -5604,6 +5678,16 @@ function extractMessageFromData(data) {
56045678 }
56055679 }
56065680
5681+ const content = getTextContext();
5682+
5683+ if (main_api === 'openai' && oai_settings.chat_completion_source === chat_completion_sources.DEEPSEEK && oai_settings.show_thoughts) {
5684+ const thoughts = data?.choices?.[0]?.message?.reasoning_content ?? '';
5685+ return [thoughts, content].filter(x => x).join('\n\n');
5686+ }
5687+
5688+ return content;
5689+}
5690+
56075691/**
56085692 * Extracts multiswipe swipes from the response data.
56095693 * @param {Object} data Response data
@@ -6873,12 +6957,23 @@ function selectKoboldGuiPreset() {
68736957 .trigger('change');
68746958}
68756959
68766960export async function saveSettings(typeloopCounter = 0) {
68776961 if (!settingsReady) {
68786962 console.warn('Settings not ready, aborting save');
68796963 return;
68806964 }
68816965
6966+ const MAX_RETRIES = 3;
6967+ if (TempResponseLength.isCustomized()) {
6968+ if (loopCounter < MAX_RETRIES) {
6969+ console.warn('Response length is currently being overridden, scheduling another save');
6970+ saveSettingsDebounced(++loopCounter);
6971+ return;
6972+ }
6973+ console.error('Response length is currently being overridden, but the save loop has reached the maximum number of retries');
6974+ TempResponseLength.restore(null);
6975+ }
6976+
68826977 //console.log('Entering settings with name1 = '+name1);
68836978 return jQuery.ajax({
68846979 type: 'POST',
@@ -9435,7 +9530,7 @@ API Settings: ${JSON.stringify(getSettingsContents[getSettingsContents.main_api
94359530 //console.log(logMessage);
94369531
94379532 try {
94389533 await navigator.clipboard.writeTextcopyText(logMessage);
94399534 toastr.info('Your ST API setup data has been copied to the clipboard.');
94409535 } catch (error) {
94419536 toastr.error('Failed to copy ST Setup to clipboard:', error);
@@ -10500,24 +10595,18 @@ jQuery(async function () {
1050010595 setTimeout(function () { $('#shadow_select_chat_popup').css('display', 'none'); }, animation_duration);
1050110596 });
1050210597
10503- if (navigator.clipboard === undefined) {
10598+ $(document).on('pointerup', '.mes_copy', async function () {
10504- // No clipboard support
10505- $('.mes_copy').remove();
10506- }
10507- else {
10508- $(document).on('pointerup', '.mes_copy', function () {
1050910599 if (this_chid !== undefined || selected_group || name2 === neutralCharacterName) {
1051010600 try {
1051110601 const messageId = $(this).closest('.mes').attr('mesid');
1051210602 const text = chat[messageId]['mes'];
10513- navigator.clipboard.writeText(text);
10603+ await copyText(text);
1051410604 toastr.info('Copied!', '', { timeOut: 2000 });
1051510605 } catch (err) {
1051610606 console.error('Failed to copy: ', err);
1051710607 }
1051810608 }
1051910609 });
10520- }
1052110610
1052210611 $(document).on('pointerup', '.mes_prompt', async function () {
1052310612 let mesIdForItemization = $(this).closest('.mes').attr('mesId');
@@ -11388,8 +11477,8 @@ jQuery(async function () {
1138811477 $('#avatar-and-name-block').slideToggle();
1138911478 });
1139011479
1139111480 $(document).on('mouseup touchend', '#show_more_messages', async function () => {
1139211481 await showMoreMessages();
1139311482 });
1139411483
1139511484 $(document).on('click', '.open_characters_library', async function () {
@@ -11411,4 +11500,3 @@ jQuery(async function () {
1141111500
1141211501 initCustomSelectedSamplers();
1141311502});
11414-
public/scripts/PromptManager.js+3 -0
@@ -11,6 +11,7 @@ import { debounce_timeout } from './constants.js';
1111import { renderTemplateAsync } from './templates.js';
1212import { Popup } from './popup.js';
1313import { t } from './i18n.js';
14+import { isMobile } from './RossAscends-mods.js';
1415
1516function debouncePromise(func, delay) {
1617 let timeoutId;
@@ -1562,6 +1563,7 @@ class PromptManager {
15621563
15631564 listItemHtml += `
15641565 <li class="${prefix}prompt_manager_prompt ${draggableClass} ${enabledClass} ${markerClass} ${importantClass}" data-pm-identifier="${escapeHtml(prompt.identifier)}">
1566+ <span class="drag-handle">☰</span>
15651567 <span class="${prefix}prompt_manager_prompt_name" data-pm-name="${encodedName}">
15661568 ${isMarkerPrompt ? '<span class="fa-fw fa-solid fa-thumb-tack" title="Marker"></span>' : ''}
15671569 ${isSystemPrompt ? '<span class="fa-fw fa-solid fa-square-poll-horizontal" title="Global Prompt"></span>' : ''}
@@ -1741,6 +1743,7 @@ class PromptManager {
17411743 makeDraggable() {
17421744 $(`#${this.configuration.prefix}prompt_manager_list`).sortable({
17431745 delay: this.configuration.sortableDelay,
1746+ handle: isMobile() ? '.drag-handle' : null,
17441747 items: `.${this.configuration.prefix}prompt_manager_prompt_draggable`,
17451748 update: (event, ui) => {
17461749 const promptOrder = this.getPromptOrderForCharacter(this.activeCharacter);
public/scripts/chat-templates.js+10 -0
@@ -59,6 +59,16 @@ const hash_derivations = {
5959 // Tulu-3-8B
6060 // Tulu-3-70B
6161 'Tulu'
62+ ,
63+
64+ // DeepSeek V2.5
65+ '54d400beedcd17f464e10063e0577f6f798fa896266a912d8a366f8a2fcc0bca':
66+ 'DeepSeek-V2.5'
67+ ,
68+
69+ // DeepSeek R1
70+ 'b6835114b7303ddd78919a82e4d9f7d8c26ed0d7dfc36beeb12d524f6144eab1':
71+ 'DeepSeek-V2.5'
6272};
6373
6474const substr_derivations = {
public/scripts/chats.js+17 -0
@@ -11,6 +11,7 @@ import {
1111 getCurrentChatId,
1212 getRequestHeaders,
1313 hideSwipeButtons,
14+ name1,
1415 name2,
1516 reloadCurrentChat,
1617 saveChatDebounced,
@@ -21,6 +22,7 @@ import {
2122 chat_metadata,
2223 neutralCharacterName,
2324 updateChatMetadata,
25+ system_message_types,
2426} from '../script.js';
2527import { selected_group } from './group-chats.js';
2628import { power_user } from './power-user.js';
@@ -34,6 +36,7 @@ import {
3436 humanFileSize,
3537 saveBase64AsFile,
3638 extractTextFromOffice,
39+ download,
3740} from './utils.js';
3841import { extension_settings, renderExtensionTemplateAsync, saveMetadataDebounced } from './extensions.js';
3942import { POPUP_RESULT, POPUP_TYPE, Popup, callGenericPopup } from './popup.js';
@@ -41,6 +44,7 @@ import { ScraperManager } from './scrapers.js';
4144import { DragAndDropHandler } from './dragdrop.js';
4245import { renderTemplateAsync } from './templates.js';
4346import { t } from './i18n.js';
47+import { humanizedDateTime } from './RossAscends-mods.js';
4448
4549/**
4650 * @typedef {Object} FileAttachment
@@ -1437,6 +1441,19 @@ jQuery(function () {
14371441 await viewMessageFile(messageId);
14381442 });
14391443
1444+ $(document).on('click', '.assistant_note_export', async function () {
1445+ const chatToSave = [
1446+ {
1447+ user_name: name1,
1448+ character_name: name2,
1449+ chat_metadata: chat_metadata,
1450+ },
1451+ ...chat.filter(x => x?.extra?.type !== system_message_types.ASSISTANT_NOTE),
1452+ ];
1453+
1454+ download(JSON.stringify(chatToSave, null, 4), `Assistant - ${humanizedDateTime()}.json`, 'application/json');
1455+ });
1456+
14401457 // Do not change. #attachFile is added by extension.
14411458 $(document).on('click', '#attachFile', function () {
14421459 $('#file_form_input').trigger('click');
public/scripts/extensions.js+23 -9
@@ -38,7 +38,8 @@ export let modules = [];
3838let activeExtensions = new Set();
3939
4040const getApiUrl = () => extension_settings.apiUrl;
4141const sortManifestssortManifestsByOrder = (a, b) => parseInt(a.loading_order) - parseInt(b.loading_order) || String(a.display_name).localeCompare(String(b.display_name));
42+const sortManifestsByName = (a, b) => String(a.display_name).localeCompare(String(b.display_name)) || parseInt(a.loading_order) - parseInt(b.loading_order);
4243let connectedToApi = false;
4344
4445/**
@@ -355,7 +356,7 @@ async function getManifests(names) {
355356 * @returns {Promise<void>}
356357 */
357358async function activateExtensions() {
358359 const extensions = Object.entries(manifests).sort((a, b) => sortManifestssortManifestsByOrder(a[1], b[1]));
359360 const promises = [];
360361
361362 for (let entry of extensions) {
@@ -712,7 +713,10 @@ async function showExtensionsDetails() {
712713
713714 htmlExternal.append(htmlLoading);
714715
715- const extensions = Object.entries(manifests).sort((a, b) => sortManifests(a[1], b[1])).map(getExtensionData);
716+ const sortOrderKey = 'extensions_sortByName';
717+ const sortByName = localStorage.getItem(sortOrderKey) === 'true';
718+ const sortFn = sortByName ? sortManifestsByName : sortManifestsByOrder;
719+ const extensions = Object.entries(manifests).sort((a, b) => sortFn(a[1], b[1])).map(getExtensionData);
716720
717721 extensions.forEach(value => {
718722 const { isExternal, extensionHtml } = value;
@@ -729,7 +733,6 @@ async function showExtensionsDetails() {
729733 /** @type {import('./popup.js').CustomPopupButton} */
730734 const updateAllButton = {
731735 text: t`Update all`,
732- appendAtEnd: true,
733736 action: async () => {
734737 requiresReload = true;
735738 await autoUpdateExtensions(true);
@@ -737,13 +740,23 @@ async function showExtensionsDetails() {
737740 },
738741 };
739742
743+ /** @type {import('./popup.js').CustomPopupButton} */
744+ const sortOrderButton = {
745+ text: sortByName ? t`Sort: Display Name` : t`Sort: Loading Order`,
746+ action: async () => {
747+ abortController.abort();
748+ localStorage.setItem(sortOrderKey, sortByName ? 'false' : 'true');
749+ await showExtensionsDetails();
750+ },
751+ };
752+
740753 let waitingForSave = false;
741754
742755 const popup = new Popup(html, POPUP_TYPE.TEXT, '', {
743756 okButton: t`Close`,
744757 wide: true,
745758 large: true,
746759 customButtons: [sortOrderButton, updateAllButton],
747760 allowVerticalScrolling: true,
748761 onClosing: async () => {
749762 if (waitingForSave) {
@@ -762,7 +775,7 @@ async function showExtensionsDetails() {
762775 });
763776 popupPromise = popup.show();
764777 popup.content.scrollTop = initialScrollTop;
765778 checkForUpdatesManual(sortFn, abortController.signal).finally(() => htmlLoading.remove());
766779 } catch (error) {
767780 toastr.error(t`Error loading extensions. See browser console for details.`);
768781 console.error(error);
@@ -1073,12 +1086,13 @@ function processVersionCheckQueue() {
10731086
10741087/**
10751088 * Performs a manual check for updates on all 3rd-party extensions.
1089+ * @param {function} sortFn Sort function
10761090 * @param {AbortSignal} abortSignal Signal to abort the operation
10771091 * @returns {Promise<any[]>}
10781092 */
10791093async function checkForUpdatesManual(sortFn, abortSignal) {
10801094 const promises = [];
10811095 for (const id of Object.keys(manifests).filter(x => x.startsWith('third-party')).sort((a, b) => sortManifestssortFn(manifests[a], manifests[b]))) {
10821096 const externalId = id.replace('third-party', '');
10831097 const promise = enqueueVersionCheck(async () => {
10841098 try {
@@ -1223,7 +1237,7 @@ export async function runGenerationInterceptors(chat, contextSize, type) {
12231237 exitImmediately = immediately;
12241238 };
12251239
12261240 for (const manifest of Object.values(manifests).filter(x => x.generate_interceptor).sort((a, b) => sortManifestssortManifestsByOrder(a, b))) {
12271241 const interceptorKey = manifest.generate_interceptor;
12281242 if (typeof globalThis[interceptorKey] === 'function') {
12291243 try {
public/scripts/extensions/caption/settings.html+2 -0
@@ -54,6 +54,8 @@
5454 <option data-type="anthropic" value="claude-3-sonnet-20240229">claude-3-sonnet-20240229</option>
5555 <option data-type="anthropic" value="claude-3-haiku-20240307">claude-3-haiku-20240307</option>
5656 <option data-type="google" value="gemini-2.0-flash-exp">gemini-2.0-flash-exp</option>
57+ <option data-type="google" value="gemini-2.0-flash-thinking-exp">gemini-2.0-flash-thinking-exp</option>
58+ <option data-type="google" value="gemini-2.0-flash-thinking-exp-01-21">gemini-2.0-flash-thinking-exp-01-21</option>
5759 <option data-type="google" value="gemini-2.0-flash-thinking-exp-1219">gemini-2.0-flash-thinking-exp-1219</option>
5860 <option data-type="google" value="gemini-1.5-flash">gemini-1.5-flash</option>
5961 <option data-type="google" value="gemini-1.5-flash-latest">gemini-1.5-flash-latest</option>
public/scripts/group-chats.js+1 -0
@@ -81,6 +81,7 @@ import { t } from './i18n.js';
8181
8282export {
8383 selected_group,
84+ openGroupId,
8485 is_group_automode_enabled,
8586 hideMutedSprites,
8687 is_group_generating,
public/scripts/openai.js+34 -8
@@ -1922,7 +1922,7 @@ async function sendOpenAIRequest(type, messages, signal) {
19221922 }
19231923
19241924 // Proxy is only supported for Claude, OpenAI, Mistral, and Google MakerSuite
19251925 if (oai_settings.reverse_proxy && [chat_completion_sources.CLAUDE, chat_completion_sources.OPENAI, chat_completion_sources.MISTRALAI, chat_completion_sources.MAKERSUITE, chat_completion_sources.DEEPSEEK].includes(oai_settings.chat_completion_source)) {
19261926 await validateReverseProxy();
19271927 generate_data['reverse_proxy'] = oai_settings.reverse_proxy;
19281928 generate_data['proxy_password'] = oai_settings.proxy_password;
@@ -2030,6 +2030,16 @@ async function sendOpenAIRequest(type, messages, signal) {
20302030 // https://api-docs.deepseek.com/api/create-chat-completion
20312031 if (isDeepSeek) {
20322032 generate_data.top_p = generate_data.top_p || Number.EPSILON;
2033+
2034+ if (generate_data.model.endsWith('-reasoner')) {
2035+ delete generate_data.top_p;
2036+ delete generate_data.temperature;
2037+ delete generate_data.frequency_penalty;
2038+ delete generate_data.presence_penalty;
2039+ delete generate_data.top_logprobs;
2040+ delete generate_data.logprobs;
2041+ delete generate_data.logit_bias;
2042+ }
20332043 }
20342044
20352045 if ((isOAI || isOpenRouter || isMistral || isCustom || isCohere || isNano) && oai_settings.seed >= 0) {
@@ -2085,6 +2095,7 @@ async function sendOpenAIRequest(type, messages, signal) {
20852095 let text = '';
20862096 const swipes = [];
20872097 const toolCalls = [];
2098+ const state = {};
20882099 while (true) {
20892100 const { done, value } = await reader.read();
20902101 if (done) return;
@@ -2095,9 +2106,9 @@ async function sendOpenAIRequest(type, messages, signal) {
20952106
20962107 if (Array.isArray(parsed?.choices) && parsed?.choices?.[0]?.index > 0) {
20972108 const swipeIndex = parsed.choices[0].index - 1;
20982109 swipes[swipeIndex] = (swipes[swipeIndex] || '') + getStreamingReply(parsed, state);
20992110 } else {
21002111 text += getStreamingReply(parsed, state);
21012112 }
21022113
21032114 ToolManager.parseToolCalls(toolCalls, parsed);
@@ -2129,13 +2140,26 @@ async function sendOpenAIRequest(type, messages, signal) {
21292140 }
21302141}
21312142
2132-function getStreamingReply(data) {
2143+/**
2144+ * Extracts the reply from the response data from a chat completions-like source
2145+ * @param {object} data Response data from the chat completions-like source
2146+ * @param {object} state Additional state to keep track of
2147+ * @returns {string} The reply extracted from the response data
2148+ */
2149+function getStreamingReply(data, state) {
21332150 if (oai_settings.chat_completion_source === chat_completion_sources.CLAUDE) {
21342151 return data?.delta?.text || '';
21352152 } else if (oai_settings.chat_completion_source === chat_completion_sources.MAKERSUITE) {
21362153 return data?.candidates?.[0]?.content?.parts?.filter(x => oai_settings.show_thoughts || !x.thought)?.map(x => x.text)?.filter(x => x)?.join('\n\n') || '';
21372154 } else if (oai_settings.chat_completion_source === chat_completion_sources.COHERE) {
21382155 return data?.delta?.message?.content?.text || data?.delta?.message?.tool_plan || '';
2156+ } else if (oai_settings.chat_completion_source === chat_completion_sources.DEEPSEEK) {
2157+ const hadThoughts = state.hadThoughts;
2158+ const thoughts = data.choices?.filter(x => oai_settings.show_thoughts || !x?.delta?.reasoning_content)?.[0]?.delta?.reasoning_content || '';
2159+ const content = data.choices?.[0]?.delta?.content || '';
2160+ state.hadThoughts = !!thoughts;
2161+ const separator = hadThoughts && !thoughts ? '\n\n' : '';
2162+ return [thoughts, separator, content].filter(x => x).join('\n\n');
21392163 } else {
21402164 return data.choices?.[0]?.delta?.content ?? data.choices?.[0]?.message?.content ?? data.choices?.[0]?.text ?? '';
21412165 }
@@ -3346,7 +3370,7 @@ async function getStatusOpen() {
33463370 chat_completion_source: oai_settings.chat_completion_source,
33473371 };
33483372
33493373 if (oai_settings.reverse_proxy && [chat_completion_sources.CLAUDE, chat_completion_sources.OPENAI, chat_completion_sources.MISTRALAI, chat_completion_sources.MAKERSUITE, chat_completion_sources.DEEPSEEK].includes(oai_settings.chat_completion_source)) {
33503374 await validateReverseProxy();
33513375 }
33523376
@@ -4204,7 +4228,7 @@ async function onModelChange() {
42044228 $('#openai_max_context').attr('max', max_32k);
42054229 } else if (value.includes('gemini-1.5-pro') || value.includes('gemini-exp-1206')) {
42064230 $('#openai_max_context').attr('max', max_2mil);
42074231 } else if (value.includes('gemini-1.5-flash') || value.includes('gemini-2.0-flash-exp') || value.includes('gemini-2.0-flash-thinking-exp')) {
42084232 $('#openai_max_context').attr('max', max_1mil);
42094233 } else if (value.includes('gemini-1.0-pro') || value === 'gemini-pro') {
42104234 $('#openai_max_context').attr('max', max_32k);
@@ -4488,7 +4512,7 @@ async function onModelChange() {
44884512 if (oai_settings.chat_completion_source === chat_completion_sources.DEEPSEEK) {
44894513 if (oai_settings.max_context_unlocked) {
44904514 $('#openai_max_context').attr('max', unlocked_max);
44914515 } else if (oai_settings.deepseek_model ==['deepseek-reasoner', 'deepseek-chat'].includes(oai_settings.deepseek_model)) {
44924516 $('#openai_max_context').attr('max', max_64k);
44934517 } else if (oai_settings.deepseek_model == 'deepseek-coder') {
44944518 $('#openai_max_context').attr('max', max_16k);
@@ -4725,7 +4749,7 @@ async function onConnectButtonClick(e) {
47254749 await writeSecret(SECRET_KEYS.DEEPSEEK, api_key_deepseek);
47264750 }
47274751
47284752 if (!secret_state[SECRET_KEYS.DEEPSEEK] && !oai_settings.reverse_proxy) {
47294753 console.log('No secret key saved for DeepSeek');
47304754 return;
47314755 }
@@ -4901,6 +4925,8 @@ export function isImageInliningSupported() {
49014925 const visionSupportedModels = [
49024926 'gpt-4-vision',
49034927 'gemini-2.0-flash-thinking-exp-1219',
4928+ 'gemini-2.0-flash-thinking-exp-01-21',
4929+ 'gemini-2.0-flash-thinking-exp',
49044930 'gemini-2.0-flash-exp',
49054931 'gemini-1.5-flash',
49064932 'gemini-1.5-flash-latest',
public/scripts/power-user.js+1 -1
@@ -2536,7 +2536,7 @@ async function loadUntilMesId(mesId) {
25362536 let target;
25372537
25382538 while (getFirstDisplayedMessageId() > mesId && getFirstDisplayedMessageId() !== 0) {
25392539 await showMoreMessages();
25402540 await delay(1);
25412541 target = $('#chat').find(`.mes[mesid=${mesId}]`);
25422542
public/scripts/slash-commands.js+2 -2
@@ -1968,8 +1968,8 @@ export function initDefaultSlashCommands() {
19681968 SlashCommandParser.addCommandObject(SlashCommand.fromProps({
19691969 name: 'chat-render',
19701970 helpString: 'Renders a specified number of messages into the chat window. Displays all messages if no argument is provided.',
19711971 callback: async (args, number) => {
19721972 await showMoreMessages(number && !isNaN(Number(number)) ? Number(number) : Number.MAX_SAFE_INTEGER);
19731973 if (isTrueBoolean(String(args?.scroll ?? ''))) {
19741974 $('#chat').scrollTop(0);
19751975 }
public/scripts/sse-stream.js+15 -0
@@ -220,6 +220,21 @@ async function* parseStreamData(json) {
220220 }
221221 return;
222222 }
223+ else if (typeof json.choices[0].delta.reasoning_content === 'string' && json.choices[0].delta.reasoning_content.length > 0) {
224+ for (let j = 0; j < json.choices[0].delta.reasoning_content.length; j++) {
225+ const str = json.choices[0].delta.reasoning_content[j];
226+ const isLastSymbol = j === json.choices[0].delta.reasoning_content.length - 1;
227+ const choiceClone = structuredClone(json.choices[0]);
228+ choiceClone.delta.reasoning_content = str;
229+ choiceClone.delta.content = isLastSymbol ? choiceClone.delta.content : '';
230+ const choices = [choiceClone];
231+ yield {
232+ data: { ...json, choices },
233+ chunk: str,
234+ };
235+ }
236+ return;
237+ }
223238 else if (typeof json.choices[0].delta.content === 'string' && json.choices[0].delta.content.length > 0) {
224239 for (let j = 0; j < json.choices[0].delta.content.length; j++) {
225240 const str = json.choices[0].delta.content[j];
public/scripts/st-context.js+6 -2
@@ -12,6 +12,7 @@ import {
1212 extension_prompts,
1313 Generate,
1414 generateQuietPrompt,
15+ getCharacters,
1516 getCurrentChatId,
1617 getRequestHeaders,
1718 getThumbnailUrl,
@@ -55,7 +56,7 @@ import { MacrosParser } from './macros.js';
5556import { oai_settings } from './openai.js';
5657import { callGenericPopup, Popup, POPUP_RESULT, POPUP_TYPE } from './popup.js';
5758import { power_user, registerDebugFunction } from './power-user.js';
5859import { humanizedDateTime, isMobile, shouldSendOnEnter } from './RossAscends-mods.js';
5960import { ScraperManager } from './scrapers.js';
6061import { executeSlashCommands, executeSlashCommandsWithOptions, registerSlashCommand } from './slash-commands.js';
6162import { SlashCommand } from './slash-commands/SlashCommand.js';
@@ -65,7 +66,7 @@ import { tag_map, tags } from './tags.js';
6566import { textgenerationwebui_settings } from './textgen-settings.js';
6667import { tokenizers, getTextTokens, getTokenCount, getTokenCountAsync, getTokenizerModel } from './tokenizers.js';
6768import { ToolManager } from './tool-calling.js';
6869import { timestampToMoment, uuidv4 } from './utils.js';
6970
7071export function getContext() {
7172 return {
@@ -167,6 +168,9 @@ export function getContext() {
167168 chatCompletionSettings: oai_settings,
168169 textCompletionSettings: textgenerationwebui_settings,
169170 powerUserSettings: power_user,
171+ getCharacters,
172+ uuidv4,
173+ humanizedDateTime,
170174 };
171175}
172176
public/scripts/templates/assistantNote.html+6 -0
@@ -1,3 +1,9 @@
1+<div data-type="assistant_note">
12 <div>
23 <b data-i18n="Note:">Note:</b> <span data-i18n="this chat is temporary and will be deleted as soon as you leave it.">this chat is temporary and will be deleted as soon as you leave it.</span>
4+ <span>Click the button to save it as a file.</span>
5+ </div>
6+ <div class="assistant_note_export menu_button menu_button_icon" title="Export as JSONL">
7+ <i class="fa-solid fa-file-export"></i>
8+ </div>
39</div>
public/scripts/templates/itemizationChat.html+1 -1
@@ -139,7 +139,7 @@
139139 <div class="">{{finalPromptTokens}}</div>
140140 </div>
141141 <div class="flex-container wide100p">
142142 <div class="flex1"><span data-i18n="Max Context">Max Context</span>&nbsp;<small data-i18n="(Context Size - Response Length)">(Context Size - Response Length)</small><span data-i18n=":">:</span></div>
143143 <div class="">{{thisPrompt_max_context}}</div>
144144 </div>
145145 </div>
public/scripts/textgen-models.js+11 -11
@@ -319,8 +319,6 @@ export async function loadFeatherlessModels(data) {
319319 return;
320320 }
321321
322- // Sort the data by model id (default A-Z)
323- data.sort((a, b) => a.id.localeCompare(b.id));
324322 originalModels = data; // Store the original data for search
325323 featherlessModels = data;
326324
@@ -334,10 +332,8 @@ export async function loadFeatherlessModels(data) {
334332 // Retrieve the stored number of items per page or default to 10
335333 const perPage = Number(localStorage.getItem(storageKey)) || 10;
336334
337335 // Initialize pagination with the full set of models
338- const currentModelIndex = data.findIndex(x => x.id === textgen_settings.featherless_model);
336+ applyFiltersAndSort();
339- featherlessCurrentPage = currentModelIndex >= 0 ? (currentModelIndex / perPage) + 1 : 1;
340- setupPagination(originalModels, perPage);
341337
342338 // Function to set up pagination (also used for filtered results)
343339 function setupPagination(models, perPage, pageNumber = featherlessCurrentPage) {
@@ -383,7 +379,7 @@ export async function loadFeatherlessModels(data) {
383379
384380 const dateAddedDiv = document.createElement('div');
385381 dateAddedDiv.classList.add('model-date-added');
386382 dateAddedDiv.textContent = `Added On: ${new Date(model.updated_atcreated * 1000).toLocaleDateString()}`;
387383
388384 detailsContainer.appendChild(modelClassDiv);
389385 detailsContainer.appendChild(contextLengthDiv);
@@ -472,6 +468,7 @@ export async function loadFeatherlessModels(data) {
472468 featherlessTop = await fetchFeatherlessStats();
473469 }
474470 const featherlessIds = featherlessTop.map(stat => stat.id);
471+
475472 if (selectedCategory === 'New') {
476473 featherlessNew = await fetchFeatherlessNew();
477474 }
@@ -493,7 +490,7 @@ export async function loadFeatherlessModels(data) {
493490 return matchesSearch && matchesClass && matchesNew;
494491 }
495492 else {
496493 return matchesSearch && matchesClass;
497494 }
498495 });
499496
@@ -502,11 +499,14 @@ export async function loadFeatherlessModels(data) {
502499 } else if (selectedSortOrder === 'desc') {
503500 filteredModels.sort((a, b) => b.id.localeCompare(a.id));
504501 } else if (selectedSortOrder === 'date_asc') {
505502 filteredModels.sort((a, b) => a.updated_at.localeCompare(created - b.updated_at)created);
506503 } else if (selectedSortOrder === 'date_desc') {
507504 filteredModels.sort((a, b) => b.updated_at.localeCompare(created - a.updated_at)created);
508505 }
509506
507+ const currentModelIndex = filteredModels.findIndex(x => x.id === textgen_settings.featherless_model);
508+ featherlessCurrentPage = currentModelIndex >= 0 ? (currentModelIndex / perPage) + 1 : 1;
509+
510510 setupPagination(filteredModels, Number(localStorage.getItem(storageKey)) || perPage, featherlessCurrentPage);
511511 }
512512
@@ -528,7 +528,7 @@ async function fetchFeatherlessStats() {
528528}
529529
530530async function fetchFeatherlessNew() {
531531 const response = await fetch('https://api.featherless.ai/feather/models?sort=-created_at&perPage=1020');
532532 const data = await response.json();
533533 return data.items;
534534}
public/scripts/textgen-settings.js+2 -2
@@ -1231,7 +1231,7 @@ export function getTextGenGenerationData(finalPrompt, maxTokens, isImpersonate,
12311231 'top_p': settings.top_p,
12321232 'typical_p': settings.typical_p,
12331233 'typical': settings.typical_p,
12341234 'sampler_seed': settings.seed >= 0 ? settings.seed : undefined,
12351235 'min_p': settings.min_p,
12361236 'repetition_penalty': settings.rep_pen,
12371237 'frequency_penalty': settings.freq_pen,
@@ -1294,7 +1294,7 @@ export function getTextGenGenerationData(finalPrompt, maxTokens, isImpersonate,
12941294 'temperature_last': (settings.type === OOBA || settings.type === APHRODITE || settings.type == TABBY) ? settings.temperature_last : undefined,
12951295 'speculative_ngram': settings.type === TABBY ? settings.speculative_ngram : undefined,
12961296 'do_sample': settings.type === OOBA ? settings.do_sample : undefined,
12971297 'seed': settings.seed >= 0 ? settings.seed : undefined,
12981298 'guidance_scale': cfgValues?.guidanceScale?.value ?? settings.guidance_scale ?? 1,
12991299 'negative_prompt': cfgValues?.negativePrompt ?? substituteParams(settings.negative_prompt) ?? '',
13001300 'grammar_string': settings.grammar_string,
public/scripts/utils.js+20 -0
@@ -392,6 +392,26 @@ export function getStringHash(str, seed = 0) {
392392}
393393
394394/**
395+ * Copy text to clipboard. Use navigator.clipboard.writeText if available, otherwise use document.execCommand.
396+ * @param {string} text - The text to copy to the clipboard.
397+ * @returns {Promise<void>} A promise that resolves when the text has been copied to the clipboard.
398+ */
399+export function copyText(text) {
400+ if (navigator.clipboard) {
401+ return navigator.clipboard.writeText(text);
402+ }
403+
404+ const parent = document.querySelector('dialog[open]:last-of-type') ?? document.body;
405+ const textArea = document.createElement('textarea');
406+ textArea.value = text;
407+ parent.appendChild(textArea);
408+ textArea.focus();
409+ textArea.select();
410+ document.execCommand('copy');
411+ parent.removeChild(textArea);
412+}
413+
414+/**
395415 * Map of debounced functions to their timers.
396416 * Weak map is used to avoid memory leaks.
397417 * @type {WeakMap<function, any>}
public/style.css+33 -2
@@ -1318,6 +1318,10 @@ button {
13181318 transition: clip-path 200ms;
13191319}
13201320
1321+#send_textarea:placeholder-shown {
1322+ overflow: hidden;
1323+}
1324+
13211325#send_textarea:focus-visible {
13221326 /* Disable outline for the chat bar itself, we add it to the outer div */
13231327 outline: none;
@@ -3259,6 +3263,18 @@ grammarly-extension {
32593263 align-items: center;
32603264}
32613265
3266+#creators_notes_div {
3267+ align-items: baseline;
3268+}
3269+
3270+#creators_note_desc_hidden {
3271+ display: none;
3272+}
3273+
3274+#creators_notes_div:has(#spoiler_free_desc_button.fa-eye-slash) #creators_note_desc_hidden {
3275+ display: initial;
3276+}
3277+
32623278.alternate_greeting details {
32633279 padding: 2px;
32643280}
@@ -5635,6 +5651,7 @@ body:not(.movingUI) .drawer-content.maximized {
56355651
56365652.model-card .details-container {
56375653 text-align: right;
5654+ line-height: 0.9;
56385655}
56395656
56405657.model-card:hover {
@@ -5657,7 +5674,7 @@ body:not(.movingUI) .drawer-content.maximized {
56575674}
56585675
56595676.model-title {
5660- font-size: 13px;
5677+ font-size: calc(var(--mainFontSize) * 0.95);
56615678 font-weight: bold;
56625679 overflow: hidden;
56635680}
@@ -5673,7 +5690,7 @@ body:not(.movingUI) .drawer-content.maximized {
56735690.model-class,
56745691.model-context-length,
56755692.model-date-added {
5676- font-size: 10px;
5693+ font-size: calc(var(--mainFontSize) * 0.75);
56775694}
56785695
56795696.model-class,
@@ -5755,3 +5772,17 @@ body:not(.movingUI) .drawer-content.maximized {
57555772.alternate_greetings_list {
57565773 overflow-y: scroll;
57575774}
5775+
5776+.mes_text div[data-type="assistant_note"]:has(.assistant_note_export) {
5777+ display: flex;
5778+ flex-direction: row;
5779+ flex-wrap: nowrap;
5780+ justify-content: space-between;
5781+ align-items: center;
5782+ gap: 10px;
5783+ padding: 0 2px;
5784+}
5785+
5786+.mes_text div[data-type="assistant_note"]:has(.assistant_note_export)>div:not(.assistant_note_export) {
5787+ flex: 1;
5788+}
src/endpoints/backends/chat-completions.js+90 -16
@@ -61,6 +61,7 @@ const API_DEEPSEEK = 'https://api.deepseek.com/beta';
6161 * @returns
6262 */
6363function postProcessPrompt(messages, type, names) {
64+ const addAssistantPrefix = x => x.length && (x[x.length - 1].role !== 'assistant' || (x[x.length - 1].prefix = true)) ? x : x;
6465 switch (type) {
6566 case 'merge':
6667 case 'claude':
@@ -70,7 +71,9 @@ function postProcessPrompt(messages, type, names) {
7071 case 'strict':
7172 return mergeMessages(messages, names, true, true);
7273 case 'deepseek':
73- return (x => x.length && (x[x.length - 1].role !== 'assistant' || (x[x.length - 1].prefix = true)) ? x : x)(mergeMessages(messages, names, true, false));
74+ return addAssistantPrefix(mergeMessages(messages, names, true, false));
75+ case 'deepseek-reasoner':
76+ return addAssistantPrefix(mergeMessages(messages, names, true, true));
7477 default:
7578 return messages;
7679 }
@@ -636,6 +639,89 @@ async function sendCohereRequest(request, response) {
636639 }
637640}
638641
642+/**
643+ * Sends a request to DeepSeek API.
644+ * @param {express.Request} request Express request
645+ * @param {express.Response} response Express response
646+ */
647+async function sendDeepSeekRequest(request, response) {
648+ const apiUrl = new URL(request.body.reverse_proxy || API_DEEPSEEK).toString();
649+ const apiKey = request.body.reverse_proxy ? request.body.proxy_password : readSecret(request.user.directories, SECRET_KEYS.DEEPSEEK);
650+
651+ if (!apiKey && !request.body.reverse_proxy) {
652+ console.log('DeepSeek API key is missing.');
653+ return response.status(400).send({ error: true });
654+ }
655+
656+ const controller = new AbortController();
657+ request.socket.removeAllListeners('close');
658+ request.socket.on('close', function () {
659+ controller.abort();
660+ });
661+
662+ try {
663+ let bodyParams = {};
664+
665+ if (request.body.logprobs > 0) {
666+ bodyParams['top_logprobs'] = request.body.logprobs;
667+ bodyParams['logprobs'] = true;
668+ }
669+
670+ const postProcessType = String(request.body.model).endsWith('-reasoner') ? 'deepseek-reasoner' : 'deepseek';
671+ const processedMessages = postProcessPrompt(request.body.messages, postProcessType, getPromptNames(request));
672+
673+ const requestBody = {
674+ 'messages': processedMessages,
675+ 'model': request.body.model,
676+ 'temperature': request.body.temperature,
677+ 'max_tokens': request.body.max_tokens,
678+ 'stream': request.body.stream,
679+ 'presence_penalty': request.body.presence_penalty,
680+ 'frequency_penalty': request.body.frequency_penalty,
681+ 'top_p': request.body.top_p,
682+ 'stop': request.body.stop,
683+ 'seed': request.body.seed,
684+ ...bodyParams,
685+ };
686+
687+ const config = {
688+ method: 'POST',
689+ headers: {
690+ 'Content-Type': 'application/json',
691+ 'Authorization': 'Bearer ' + apiKey,
692+ },
693+ body: JSON.stringify(requestBody),
694+ signal: controller.signal,
695+ };
696+
697+ console.log('DeepSeek request:', requestBody);
698+
699+ const generateResponse = await fetch(apiUrl + '/chat/completions', config);
700+
701+ if (request.body.stream) {
702+ forwardFetchResponse(generateResponse, response);
703+ } else {
704+ if (!generateResponse.ok) {
705+ const errorText = await generateResponse.text();
706+ console.log(`DeepSeek API returned error: ${generateResponse.status} ${generateResponse.statusText} ${errorText}`);
707+ const errorJson = tryParse(errorText) ?? { error: true };
708+ return response.status(500).send(errorJson);
709+ }
710+ const generateResponseJson = await generateResponse.json();
711+ console.log('DeepSeek response:', generateResponseJson);
712+ return response.send(generateResponseJson);
713+ }
714+ } catch (error) {
715+ console.log('Error communicating with DeepSeek API: ', error);
716+ if (!response.headersSent) {
717+ response.send({ error: true });
718+ } else {
719+ response.end();
720+ }
721+ }
722+}
723+
724+
639725export const router = express.Router();
640726
641727router.post('/status', jsonParser, async function (request, response_getstatus_openai) {
@@ -680,8 +766,8 @@ router.post('/status', jsonParser, async function (request, response_getstatus_o
680766 api_key_openai = readSecret(request.user.directories, SECRET_KEYS.NANOGPT);
681767 headers = {};
682768 } else if (request.body.chat_completion_source === CHAT_COMPLETION_SOURCES.DEEPSEEK) {
683769 api_url = new URL(request.body.reverse_proxy || API_DEEPSEEK.replace('/beta', ''));
684770 api_key_openai = request.body.reverse_proxy ? request.body.proxy_password : readSecret(request.user.directories, SECRET_KEYS.DEEPSEEK);
685771 headers = {};
686772 } else {
687773 console.log('This chat completion source is not supported yet.');
@@ -841,6 +927,7 @@ router.post('/generate', jsonParser, function (request, response) {
841927 case CHAT_COMPLETION_SOURCES.MAKERSUITE: return sendMakerSuiteRequest(request, response);
842928 case CHAT_COMPLETION_SOURCES.MISTRALAI: return sendMistralAIRequest(request, response);
843929 case CHAT_COMPLETION_SOURCES.COHERE: return sendCohereRequest(request, response);
930+ case CHAT_COMPLETION_SOURCES.DEEPSEEK: return sendDeepSeekRequest(request, response);
844931 }
845932
846933 let apiUrl;
@@ -954,18 +1041,6 @@ router.post('/generate', jsonParser, function (request, response) {
9541041 apiKey = readSecret(request.user.directories, SECRET_KEYS.BLOCKENTROPY);
9551042 headers = {};
9561043 bodyParams = {};
957- } else if (request.body.chat_completion_source === CHAT_COMPLETION_SOURCES.DEEPSEEK) {
958- apiUrl = API_DEEPSEEK;
959- apiKey = readSecret(request.user.directories, SECRET_KEYS.DEEPSEEK);
960- headers = {};
961- bodyParams = {};
962-
963- if (request.body.logprobs > 0) {
964- bodyParams['top_logprobs'] = request.body.logprobs;
965- bodyParams['logprobs'] = true;
966- }
967-
968- request.body.messages = postProcessPrompt(request.body.messages, 'deepseek', getPromptNames(request));
9691044 } else {
9701045 console.log('This chat completion source is not supported yet.');
9711046 return response.status(400).send({ error: true });
@@ -1103,4 +1178,3 @@ router.post('/generate', jsonParser, function (request, response) {
11031178 }
11041179 }
11051180});
1106-
src/endpoints/chats.js+30 -0
@@ -264,6 +264,34 @@ function flattenChubChat(userName, characterName, lines) {
264264 return (lines ?? []).map(convert).join('\n');
265265}
266266
267+/**
268+ * Imports a chat from RisuAI format.
269+ * @param {string} userName User name
270+ * @param {string} characterName Character name
271+ * @param {object} jsonData Imported chat data
272+ * @returns {string} Chat data
273+ */
274+function importRisuChat(userName, characterName, jsonData) {
275+ /** @type {object[]} */
276+ const chat = [{
277+ user_name: userName,
278+ character_name: characterName,
279+ create_date: humanizedISO8601DateTime(),
280+ }];
281+
282+ for (const message of jsonData.data.message) {
283+ const isUser = message.role === 'user';
284+ chat.push({
285+ name: message.name ?? (isUser ? userName : characterName),
286+ is_user: isUser,
287+ send_date: Number(message.time ?? Date.now()),
288+ mes: message.data ?? '',
289+ });
290+ }
291+
292+ return chat.map(obj => JSON.stringify(obj)).join('\n');
293+}
294+
267295export const router = express.Router();
268296
269297router.post('/save', jsonParser, function (request, response) {
@@ -481,6 +509,8 @@ router.post('/import', urlencodedParser, function (request, response) {
481509 importFunc = importOobaChat;
482510 } else if (Array.isArray(jsonData.messages)) { // Agnai's format
483511 importFunc = importAgnaiChat;
512+ } else if (jsonData.type === 'risuChat') { // RisuAI format
513+ importFunc = importRisuChat;
484514 } else { // Unknown format
485515 console.log('Incorrect chat format .json');
486516 return response.send({ error: true });
src/endpoints/search.js+37 -0
@@ -4,6 +4,8 @@ import express from 'express';
44import { decode } from 'html-entities';
55import { readSecret, SECRET_KEYS } from './secrets.js';
66import { jsonParser } from '../express-common.js';
7+import { trimV1 } from '../util.js';
8+import { setAdditionalHeaders } from '../additional-headers.js';
79
810export const router = express.Router();
911
@@ -257,6 +259,41 @@ router.post('/tavily', jsonParser, async (request, response) => {
257259 }
258260});
259261
262+router.post('/koboldcpp', jsonParser, async (request, response) => {
263+ try {
264+ const { query, url } = request.body;
265+
266+ if (!url) {
267+ console.error('No URL provided for KoboldCpp search');
268+ return response.sendStatus(400);
269+ }
270+
271+ console.debug('KoboldCpp search query', query);
272+
273+ const baseUrl = trimV1(url);
274+ const args = {
275+ method: 'POST',
276+ headers: {},
277+ body: JSON.stringify({ q: query }),
278+ };
279+
280+ setAdditionalHeaders(request, args, baseUrl);
281+ const result = await fetch(`${baseUrl}/api/extra/websearch`, args);
282+
283+ if (!result.ok) {
284+ const text = await result.text();
285+ console.error('KoboldCpp request failed', result.statusText, text);
286+ return response.status(500).send(text);
287+ }
288+
289+ const data = await result.json();
290+ return response.json(data);
291+ } catch (error) {
292+ console.error(error);
293+ return response.sendStatus(500);
294+ }
295+});
296+
260297router.post('/visit', jsonParser, async (request, response) => {
261298 try {
262299 const url = request.body.url;
src/endpoints/settings.js+2 -2
@@ -10,8 +10,8 @@ import { getConfigValue, generateTimestamp, removeOldBackups } from '../util.js'
1010import { jsonParser } from '../express-common.js';
1111import { getAllUserHandles, getUserDirectories } from '../users.js';
1212
1313const ENABLE_EXTENSIONS = !!getConfigValue('enableExtensionsextensions.enabled', true);
1414const ENABLE_EXTENSIONS_AUTO_UPDATE = !!getConfigValue('enableExtensionsAutoUpdateextensions.autoUpdate', true);
1515const ENABLE_ACCOUNTS = getConfigValue('enableUserAccounts', false);
1616
1717// 10 minutes
src/endpoints/vectors.js+1 -1
@@ -164,7 +164,7 @@ function getSourceSettings(source, request) {
164164 };
165165 case 'transformers':
166166 return {
167167 model: getConfigValue('extrasextensions.embeddingModelmodels.embedding', ''),
168168 };
169169 case 'palm':
170170 return {
src/prompt-converters.js+2 -0
@@ -360,6 +360,8 @@ export function convertCohereMessages(messages, names) {
360360 */
361361export function convertGooglePrompt(messages, model, useSysPrompt, names) {
362362 const visionSupportedModels = [
363+ 'gemini-2.0-flash-thinking-exp',
364+ 'gemini-2.0-flash-thinking-exp-01-21',
363365 'gemini-2.0-flash-thinking-exp-1219',
364366 'gemini-2.0-flash-exp',
365367 'gemini-1.5-flash',
src/transformers.js+6 -6
@@ -19,31 +19,31 @@ const tasks = {
1919 'text-classification': {
2020 defaultModel: 'Cohee/distilbert-base-uncased-go-emotions-onnx',
2121 pipeline: null,
2222 configField: 'extrasextensions.classificationModelmodels.classification',
2323 quantized: true,
2424 },
2525 'image-to-text': {
2626 defaultModel: 'Xenova/vit-gpt2-image-captioning',
2727 pipeline: null,
2828 configField: 'extrasextensions.captioningModelmodels.captioning',
2929 quantized: true,
3030 },
3131 'feature-extraction': {
3232 defaultModel: 'Xenova/all-mpnet-base-v2',
3333 pipeline: null,
3434 configField: 'extrasextensions.embeddingModelmodels.embedding',
3535 quantized: true,
3636 },
3737 'automatic-speech-recognition': {
3838 defaultModel: 'Xenova/whisper-small',
3939 pipeline: null,
4040 configField: 'extrasextensions.speechToTextModelmodels.speechToText',
4141 quantized: true,
4242 },
4343 'text-to-speech': {
4444 defaultModel: 'Xenova/speecht5_tts',
4545 pipeline: null,
4646 configField: 'extrasextensions.textToSpeechModelmodels.textToSpeech',
4747 quantized: false,
4848 },
4949};
@@ -132,7 +132,7 @@ export async function getPipeline(task, forceModel = '') {
132132
133133 const cacheDir = path.join(globalThis.DATA_ROOT, '_cache');
134134 const model = forceModel || getModelForTask(task);
135135 const localOnly = !getConfigValue('extrasextensions.disableAutoDownloadmodels.autoDownload', falsetrue);
136136 console.log('Initializing transformers.js pipeline for task', task, 'with model', model);
137137 const instance = await pipeline(task, model, { cache_dir: cacheDir, quantized: tasks[task].quantized ?? true, local_files_only: localOnly });
138138 tasks[task].pipeline = instance;