Merge branch 'staging' into stability
| @@ -233,7 +233,6 @@ | |||
| 233 | } | 233 | } |
| 234 | 234 | ||
| 235 | #completion_prompt_manager .completion_prompt_manager_footer a { | 235 | #completion_prompt_manager .completion_prompt_manager_footer a { |
| 236 | padding: 0.75em; | ||
| 237 | font-size: 12px; | 236 | font-size: 12px; |
| 238 | } | 237 | } |
| 239 | 238 | ||
| @@ -68,9 +68,9 @@ | |||
| 68 | margin-top: 0.25rem; | 68 | margin-top: 0.25rem; |
| 69 | margin-bottom: 0.5rem; | 69 | margin-bottom: 0.5rem; |
| 70 | border: 1px solid var(--SmartThemeBorderColor); | 70 | border: 1px solid var(--SmartThemeBorderColor); |
| 71 | ; | ||
| 72 | border-radius: 10px; | 71 | border-radius: 10px; |
| 73 | background-color: var(--black30a); | 72 | background-color: var(--black30a); |
| 73 | padding: 2px; | ||
| 74 | } | 74 | } |
| 75 | 75 | ||
| 76 | #rm_group_buttons_expander { | 76 | #rm_group_buttons_expander { |
| @@ -4141,6 +4141,10 @@ | |||
| 4141 | <input id="request_token_probabilities" type="checkbox" /> | 4141 | <input id="request_token_probabilities" type="checkbox" /> |
| 4142 | <small data-i18n="Request token probabilities">Request token probabilities</small> | 4142 | <small data-i18n="Request token probabilities">Request token probabilities</small> |
| 4143 | </label> | 4143 | </label> |
| 4144 | <label data-newbie-hidden class="checkbox_label" for="show_group_chat_queue" title="In group chat, highlight the character(s) that are currently queued to generate responses and the order in which they will respond." data-i18n="[title]In group chat, highlight the character(s) that are currently queued to generate responses and the order in which they will respond."> | ||
| 4145 | <input id="show_group_chat_queue" type="checkbox" /> | ||
| 4146 | <small data-i18n="Show group chat queue">Show group chat queue</small> | ||
| 4147 | </label> | ||
| 4144 | <div data-newbie-hidden class="inline-drawer wide100p flexFlowColumn"> | 4148 | <div data-newbie-hidden class="inline-drawer wide100p flexFlowColumn"> |
| 4145 | <div class="inline-drawer-toggle inline-drawer-header userSettingsInnerExpandable" title="Automatically reject and re-generate AI message based on configurable criteria." data-i18n="[title]Automatically reject and re-generate AI message based on configurable criteria"> | 4149 | <div class="inline-drawer-toggle inline-drawer-header userSettingsInnerExpandable" title="Automatically reject and re-generate AI message based on configurable criteria." data-i18n="[title]Automatically reject and re-generate AI message based on configurable criteria"> |
| 4146 | <b><span data-i18n="Auto-swipe">Auto-swipe</span></b> | 4150 | <b><span data-i18n="Auto-swipe">Auto-swipe</span></b> |
| @@ -5596,10 +5600,10 @@ | |||
| 5596 | <label for="completion_prompt_manager_popup_entry_form_injection_position"> | 5600 | <label for="completion_prompt_manager_popup_entry_form_injection_position"> |
| 5597 | <span data-i18n="prompt_manager_position">Position</span> | 5601 | <span data-i18n="prompt_manager_position">Position</span> |
| 5598 | </label> | 5602 | </label> |
| 5599 | <div class="text_muted" data-i18n="Injection position. Next to other prompts (relative) or in-chat (absolute).">Injection position. Next to other prompts (relative) or in-chat (absolute).</div> | 5603 | <div class="text_muted" data-i18n="Injection position. Relative (to other prompts in prompt manager) or In-chat @ Depth.">Injection position. Relative (to other prompts in prompt manager) or In-chat @ Depth.</div> |
| 5600 | <select id="completion_prompt_manager_popup_entry_form_injection_position" class="text_pole" name="injection_position"> | 5604 | <select id="completion_prompt_manager_popup_entry_form_injection_position" class="text_pole" name="injection_position"> |
| 5601 | <option data-i18n="prompt_manager_relative" value="0">Relative</option> | 5605 | <option data-i18n="prompt_manager_relative" value="0">Relative</option> |
| 5602 | <option data-i18n="prompt_manager_absolute" value="1">Absolute</option> | 5606 | <option data-i18n="prompt_manager_in_chat" value="1">In-chat</option> |
| 5603 | </select> | 5607 | </select> |
| 5604 | </div> | 5608 | </div> |
| 5605 | <div id="completion_prompt_manager_depth_block" class="completion_prompt_manager_popup_entry_form_control flex1"> | 5609 | <div id="completion_prompt_manager_depth_block" class="completion_prompt_manager_popup_entry_form_control flex1"> |
| @@ -5796,6 +5800,7 @@ | |||
| 5796 | <div class="tags tags_inline"></div> | 5800 | <div class="tags tags_inline"></div> |
| 5797 | </div> | 5801 | </div> |
| 5798 | <input class="ch_fav" value="" hidden /> | 5802 | <input class="ch_fav" value="" hidden /> |
| 5803 | <div class="queue_position"></div> | ||
| 5799 | <div class="group_member_icon"> | 5804 | <div class="group_member_icon"> |
| 5800 | <div title="Temporarily disable automatic replies from this character" data-action="disable" class="right_menu_button fa-solid fa-lg fa-comment-slash" data-i18n="[title]Temporarily disable automatic replies from this character"></div> | 5805 | <div title="Temporarily disable automatic replies from this character" data-action="disable" class="right_menu_button fa-solid fa-lg fa-comment-slash" data-i18n="[title]Temporarily disable automatic replies from this character"></div> |
| 5801 | <div title="Enable automatic replies from this character" data-action="enable" class="right_menu_button fa-solid fa-lg fa-comment-slash" data-i18n="[title]Enable automatic replies from this character"></div> | 5806 | <div title="Enable automatic replies from this character" data-action="enable" class="right_menu_button fa-solid fa-lg fa-comment-slash" data-i18n="[title]Enable automatic replies from this character"></div> |
| @@ -1023,7 +1023,6 @@ | |||
| 1023 | "prompt_manager_position": "موضع", | 1023 | "prompt_manager_position": "موضع", |
| 1024 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "موضع الحقن. بجوار المطالبات الأخرى (نسبية) أو داخل الدردشة (مطلقة).", | 1024 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "موضع الحقن. بجوار المطالبات الأخرى (نسبية) أو داخل الدردشة (مطلقة).", |
| 1025 | "prompt_manager_relative": "نسبي", | 1025 | "prompt_manager_relative": "نسبي", |
| 1026 | "prompt_manager_absolute": "مطلق", | ||
| 1027 | "prompt_manager_depth": "عمق", | 1026 | "prompt_manager_depth": "عمق", |
| 1028 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "عمق الحقن. 0 = بعد الرسالة الأخيرة، 1 = قبل الرسالة الأخيرة، الخ.", | 1027 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "عمق الحقن. 0 = بعد الرسالة الأخيرة، 1 = قبل الرسالة الأخيرة، الخ.", |
| 1029 | "Prompt": "موضوع", | 1028 | "Prompt": "موضوع", |
| @@ -1023,7 +1023,6 @@ | |||
| 1023 | "prompt_manager_position": "Position", | 1023 | "prompt_manager_position": "Position", |
| 1024 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "Injektionsposition. Neben anderen Eingabeaufforderungen (relativ) oder im Chat (absolut).", | 1024 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "Injektionsposition. Neben anderen Eingabeaufforderungen (relativ) oder im Chat (absolut).", |
| 1025 | "prompt_manager_relative": "Relativ", | 1025 | "prompt_manager_relative": "Relativ", |
| 1026 | "prompt_manager_absolute": "Absolut", | ||
| 1027 | "prompt_manager_depth": "Tiefe", | 1026 | "prompt_manager_depth": "Tiefe", |
| 1028 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "Injektionstiefe. 0 = nach der letzten Nachricht, 1 = vor der letzten Nachricht usw.", | 1027 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "Injektionstiefe. 0 = nach der letzten Nachricht, 1 = vor der letzten Nachricht usw.", |
| 1029 | "Prompt": "Aufforderung", | 1028 | "Prompt": "Aufforderung", |
| @@ -1023,7 +1023,6 @@ | |||
| 1023 | "prompt_manager_position": "Posición", | 1023 | "prompt_manager_position": "Posición", |
| 1024 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "Posición de inyección. Junto a otras indicaciones (relativa) o en el chat (absoluta).", | 1024 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "Posición de inyección. Junto a otras indicaciones (relativa) o en el chat (absoluta).", |
| 1025 | "prompt_manager_relative": "Relativo", | 1025 | "prompt_manager_relative": "Relativo", |
| 1026 | "prompt_manager_absolute": "Absoluto", | ||
| 1027 | "prompt_manager_depth": "Profundidad", | 1026 | "prompt_manager_depth": "Profundidad", |
| 1028 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "Profundidad de inyección. 0 = después del último mensaje, 1 = antes del último mensaje, etc.", | 1027 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "Profundidad de inyección. 0 = después del último mensaje, 1 = antes del último mensaje, etc.", |
| 1029 | "Prompt": "Indicar", | 1028 | "Prompt": "Indicar", |
| @@ -1023,7 +1023,6 @@ | |||
| 1023 | "prompt_manager_position": "Position", | 1023 | "prompt_manager_position": "Position", |
| 1024 | "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).", | 1024 | "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).", |
| 1025 | "prompt_manager_relative": "Relatif", | 1025 | "prompt_manager_relative": "Relatif", |
| 1026 | "prompt_manager_absolute": "Absolu", | ||
| 1027 | "prompt_manager_depth": "Profondeur", | 1026 | "prompt_manager_depth": "Profondeur", |
| 1028 | "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.", | 1027 | "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.", |
| 1029 | "Prompt": "Inciter", | 1028 | "Prompt": "Inciter", |
| @@ -1023,7 +1023,6 @@ | |||
| 1023 | "prompt_manager_position": "Staða", | 1023 | "prompt_manager_position": "Staða", |
| 1024 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "Inndælingarstaða. Við hliðina á öðrum leiðbeiningum (afstætt) eða í spjalli (algert).", | 1024 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "Inndælingarstaða. Við hliðina á öðrum leiðbeiningum (afstætt) eða í spjalli (algert).", |
| 1025 | "prompt_manager_relative": "Aðstandandi", | 1025 | "prompt_manager_relative": "Aðstandandi", |
| 1026 | "prompt_manager_absolute": "Algjört", | ||
| 1027 | "prompt_manager_depth": "Dýpt", | 1026 | "prompt_manager_depth": "Dýpt", |
| 1028 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "Inndælingardýpt. 0 = eftir síðustu skilaboð, 1 = fyrir síðustu skilaboð o.s.frv.", | 1027 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "Inndælingardýpt. 0 = eftir síðustu skilaboð, 1 = fyrir síðustu skilaboð o.s.frv.", |
| 1029 | "Prompt": "Ábending", | 1028 | "Prompt": "Ábending", |
| @@ -1023,7 +1023,6 @@ | |||
| 1023 | "prompt_manager_position": "Posizione", | 1023 | "prompt_manager_position": "Posizione", |
| 1024 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "Posizione di iniezione. Accanto ad altri suggerimenti (relativo) o in chat (assoluto).", | 1024 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "Posizione di iniezione. Accanto ad altri suggerimenti (relativo) o in chat (assoluto).", |
| 1025 | "prompt_manager_relative": "Parente", | 1025 | "prompt_manager_relative": "Parente", |
| 1026 | "prompt_manager_absolute": "Assoluto", | ||
| 1027 | "prompt_manager_depth": "Profondità", | 1026 | "prompt_manager_depth": "Profondità", |
| 1028 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "Profondità di iniezione. 0 = dopo l'ultimo messaggio, 1 = prima dell'ultimo messaggio, ecc.", | 1027 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "Profondità di iniezione. 0 = dopo l'ultimo messaggio, 1 = prima dell'ultimo messaggio, ecc.", |
| 1029 | "Prompt": "Prompt", | 1028 | "Prompt": "Prompt", |
| @@ -1023,7 +1023,6 @@ | |||
| 1023 | "prompt_manager_position": "位置", | 1023 | "prompt_manager_position": "位置", |
| 1024 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "挿入位置。他のプロンプトの隣 (相対) またはチャット内 (絶対)。", | 1024 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "挿入位置。他のプロンプトの隣 (相対) またはチャット内 (絶対)。", |
| 1025 | "prompt_manager_relative": "相対的", | 1025 | "prompt_manager_relative": "相対的", |
| 1026 | "prompt_manager_absolute": "絶対", | ||
| 1027 | "prompt_manager_depth": "深さ", | 1026 | "prompt_manager_depth": "深さ", |
| 1028 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "注入の深さ。0 = 最後のメッセージの後、1 = 最後のメッセージの前など。", | 1027 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "注入の深さ。0 = 最後のメッセージの後、1 = 最後のメッセージの前など。", |
| 1029 | "Prompt": "プロンプト", | 1028 | "Prompt": "プロンプト", |
| @@ -1023,7 +1023,6 @@ | |||
| 1023 | "prompt_manager_position": "위치", | 1023 | "prompt_manager_position": "위치", |
| 1024 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "주입 위치. 다른 프롬프트 옆(상대적) 또는 채팅 내(절대적).", | 1024 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "주입 위치. 다른 프롬프트 옆(상대적) 또는 채팅 내(절대적).", |
| 1025 | "prompt_manager_relative": "상대적인", | 1025 | "prompt_manager_relative": "상대적인", |
| 1026 | "prompt_manager_absolute": "순수한", | ||
| 1027 | "prompt_manager_depth": "깊이", | 1026 | "prompt_manager_depth": "깊이", |
| 1028 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "주입 깊이. 0 = 마지막 메시지 뒤, 1 = 마지막 메시지 앞 등", | 1027 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "주입 깊이. 0 = 마지막 메시지 뒤, 1 = 마지막 메시지 앞 등", |
| 1029 | "Prompt": "프롬프트", | 1028 | "Prompt": "프롬프트", |
| @@ -1023,7 +1023,6 @@ | |||
| 1023 | "prompt_manager_position": "Positie", | 1023 | "prompt_manager_position": "Positie", |
| 1024 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "Injectiepositie. Naast andere prompts (relatief) of in-chat (absoluut).", | 1024 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "Injectiepositie. Naast andere prompts (relatief) of in-chat (absoluut).", |
| 1025 | "prompt_manager_relative": "Familielid", | 1025 | "prompt_manager_relative": "Familielid", |
| 1026 | "prompt_manager_absolute": "Absoluut", | ||
| 1027 | "prompt_manager_depth": "Diepte", | 1026 | "prompt_manager_depth": "Diepte", |
| 1028 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "Injectiediepte. 0 = na het laatste bericht, 1 = voor het laatste bericht, etc.", | 1027 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "Injectiediepte. 0 = na het laatste bericht, 1 = voor het laatste bericht, etc.", |
| 1029 | "Prompt": "Prompt", | 1028 | "Prompt": "Prompt", |
| @@ -1023,7 +1023,6 @@ | |||
| 1023 | "prompt_manager_position": "Posição", | 1023 | "prompt_manager_position": "Posição", |
| 1024 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "Posição de injeção. Ao lado de outras solicitações (relativas) ou no chat (absolutas).", | 1024 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "Posição de injeção. Ao lado de outras solicitações (relativas) ou no chat (absolutas).", |
| 1025 | "prompt_manager_relative": "Relativo", | 1025 | "prompt_manager_relative": "Relativo", |
| 1026 | "prompt_manager_absolute": "Absoluto", | ||
| 1027 | "prompt_manager_depth": "Profundidade", | 1026 | "prompt_manager_depth": "Profundidade", |
| 1028 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "Profundidade de injeção. 0 = após a última mensagem, 1 = antes da última mensagem, etc.", | 1027 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "Profundidade de injeção. 0 = após a última mensagem, 1 = antes da última mensagem, etc.", |
| 1029 | "Prompt": "Prompt", | 1028 | "Prompt": "Prompt", |
| @@ -1025,7 +1025,6 @@ | |||
| 1025 | "prompt_manager_position": "Точка инжекта", | 1025 | "prompt_manager_position": "Точка инжекта", |
| 1026 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "Как рассчитывать позицию для инжекта. Она может располагаться по отношению к другим промптам (относительная) либо по отношению к чату (абсолютная).", | 1026 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "Как рассчитывать позицию для инжекта. Она может располагаться по отношению к другим промптам (относительная) либо по отношению к чату (абсолютная).", |
| 1027 | "prompt_manager_relative": "Относительная", | 1027 | "prompt_manager_relative": "Относительная", |
| 1028 | "prompt_manager_absolute": "Абсолютная", | ||
| 1029 | "prompt_manager_depth": "Глубина", | 1028 | "prompt_manager_depth": "Глубина", |
| 1030 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "Глубина вставки. 0 = после последнего сообщения, 1 = перед последним сообщением, и т.д.", | 1029 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "Глубина вставки. 0 = после последнего сообщения, 1 = перед последним сообщением, и т.д.", |
| 1031 | "The prompt to be sent.": "Отправляемый ИИ промпт.", | 1030 | "The prompt to be sent.": "Отправляемый ИИ промпт.", |
| @@ -1023,7 +1023,6 @@ | |||
| 1023 | "prompt_manager_position": "Позиція", | 1023 | "prompt_manager_position": "Позиція", |
| 1024 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "Позиція ін'єкції. Поруч з іншими підказками (відносні) або в чаті (абсолютні).", | 1024 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "Позиція ін'єкції. Поруч з іншими підказками (відносні) або в чаті (абсолютні).", |
| 1025 | "prompt_manager_relative": "Відносна", | 1025 | "prompt_manager_relative": "Відносна", |
| 1026 | "prompt_manager_absolute": "Абсолютний", | ||
| 1027 | "prompt_manager_depth": "Глибина", | 1026 | "prompt_manager_depth": "Глибина", |
| 1028 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "Глибина ін'єкції. 0 = після останнього повідомлення, 1 = перед останнім повідомленням тощо.", | 1027 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "Глибина ін'єкції. 0 = після останнього повідомлення, 1 = перед останнім повідомленням тощо.", |
| 1029 | "Prompt": "Запит", | 1028 | "Prompt": "Запит", |
| @@ -1023,7 +1023,6 @@ | |||
| 1023 | "prompt_manager_position": "Chức vụ", | 1023 | "prompt_manager_position": "Chức vụ", |
| 1024 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "Vị trí tiêm. Bên cạnh các lời nhắc khác (tương đối) hoặc trong trò chuyện (tuyệt đối).", | 1024 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "Vị trí tiêm. Bên cạnh các lời nhắc khác (tương đối) hoặc trong trò chuyện (tuyệt đối).", |
| 1025 | "prompt_manager_relative": "Liên quan đến", | 1025 | "prompt_manager_relative": "Liên quan đến", |
| 1026 | "prompt_manager_absolute": "tuyệt đối", | ||
| 1027 | "prompt_manager_depth": "Chiều sâu", | 1026 | "prompt_manager_depth": "Chiều sâu", |
| 1028 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "Độ sâu phun. 0 = sau tin nhắn cuối cùng, 1 = trước tin nhắn cuối cùng, v.v.", | 1027 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "Độ sâu phun. 0 = sau tin nhắn cuối cùng, 1 = trước tin nhắn cuối cùng, v.v.", |
| 1029 | "Prompt": "Đề xuất", | 1028 | "Prompt": "Đề xuất", |
| @@ -1056,7 +1056,6 @@ | |||
| 1056 | "prompt_manager_position": "位置", | 1056 | "prompt_manager_position": "位置", |
| 1057 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "注入位置。其他提示词旁边(相对)或在聊天中(绝对)。", | 1057 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "注入位置。其他提示词旁边(相对)或在聊天中(绝对)。", |
| 1058 | "prompt_manager_relative": "相对", | 1058 | "prompt_manager_relative": "相对", |
| 1059 | "prompt_manager_absolute": "绝对", | ||
| 1060 | "prompt_manager_depth": "深度", | 1059 | "prompt_manager_depth": "深度", |
| 1061 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "注入深度。0 = 在最后一条消息之后,1 = 在最后一条消息之前,等等。", | 1060 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "注入深度。0 = 在最后一条消息之后,1 = 在最后一条消息之前,等等。", |
| 1062 | "Prompt": "提示词", | 1061 | "Prompt": "提示词", |
| @@ -1025,7 +1025,6 @@ | |||
| 1025 | "prompt_manager_position": "位置", | 1025 | "prompt_manager_position": "位置", |
| 1026 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "注入位置。與其他提示詞相鄰(相對位置)或在聊天中(絕對位置)。", | 1026 | "Injection position. Next to other prompts (relative) or in-chat (absolute).": "注入位置。與其他提示詞相鄰(相對位置)或在聊天中(絕對位置)。", |
| 1027 | "prompt_manager_relative": "相對位置", | 1027 | "prompt_manager_relative": "相對位置", |
| 1028 | "prompt_manager_absolute": "絕對位置", | ||
| 1029 | "prompt_manager_depth": "深度", | 1028 | "prompt_manager_depth": "深度", |
| 1030 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "注入深度。0 = 在最後一條訊息之後,1 = 在最後一條訊息之前,以此類推。", | 1029 | "Injection depth. 0 = after the last message, 1 = before the last message, etc.": "注入深度。0 = 在最後一條訊息之後,1 = 在最後一條訊息之前,以此類推。", |
| 1031 | "Prompt": "提示詞", | 1030 | "Prompt": "提示詞", |
| @@ -70,6 +70,7 @@ import { | |||
| 70 | animation_duration, | 70 | animation_duration, |
| 71 | depth_prompt_role_default, | 71 | depth_prompt_role_default, |
| 72 | shouldAutoContinue, | 72 | shouldAutoContinue, |
| 73 | this_chid, | ||
| 73 | } from '../script.js'; | 74 | } from '../script.js'; |
| 74 | import { printTagList, createTagMapFromList, applyTagsOnCharacterSelect, tag_map, applyTagsOnGroupSelect } from './tags.js'; | 75 | import { printTagList, createTagMapFromList, applyTagsOnCharacterSelect, tag_map, applyTagsOnGroupSelect } from './tags.js'; |
| 75 | import { FILTER_TYPES, FilterHelper } from './filters.js'; | 76 | import { FILTER_TYPES, FilterHelper } from './filters.js'; |
| @@ -120,6 +121,8 @@ const DEFAULT_AUTO_MODE_DELAY = 5; | |||
| 120 | export const groupCandidatesFilter = new FilterHelper(debounce(printGroupCandidates, debounce_timeout.quick)); | 121 | export const groupCandidatesFilter = new FilterHelper(debounce(printGroupCandidates, debounce_timeout.quick)); |
| 121 | let autoModeWorker = null; | 122 | let autoModeWorker = null; |
| 122 | const saveGroupDebounced = debounce(async (group, reload) => await _save(group, reload), debounce_timeout.relaxed); | 123 | const saveGroupDebounced = debounce(async (group, reload) => await _save(group, reload), debounce_timeout.relaxed); |
| 124 | /** @type {Map<string, number>} */ | ||
| 125 | let groupChatQueueOrder = new Map(); | ||
| 123 | 126 | ||
| 124 | function setAutoModeWorker() { | 127 | function setAutoModeWorker() { |
| 125 | clearInterval(autoModeWorker); | 128 | clearInterval(autoModeWorker); |
| @@ -857,7 +860,13 @@ async function generateGroupWrapper(by_auto_mode, type = null, params = {}) { | |||
| 857 | await saveChatConditional(); | 860 | await saveChatConditional(); |
| 858 | $('#send_textarea').val('')[0].dispatchEvent(new Event('input', { bubbles: true })); | 861 | $('#send_textarea').val('')[0].dispatchEvent(new Event('input', { bubbles: true })); |
| 859 | } | 862 | } |
| 863 | groupChatQueueOrder = new Map(); | ||
| 860 | 864 | ||
| 865 | if (power_user.show_group_chat_queue) { | ||
| 866 | for (let i = 0; i < activatedMembers.length; ++i) { | ||
| 867 | groupChatQueueOrder.set(characters[activatedMembers[i]].avatar, i + 1); | ||
| 868 | } | ||
| 869 | } | ||
| 861 | // now the real generation begins: cycle through every activated character | 870 | // now the real generation begins: cycle through every activated character |
| 862 | for (const chId of activatedMembers) { | 871 | for (const chId of activatedMembers) { |
| 863 | throwIfAborted(); | 872 | throwIfAborted(); |
| @@ -865,6 +874,9 @@ async function generateGroupWrapper(by_auto_mode, type = null, params = {}) { | |||
| 865 | const generateType = type == 'swipe' || type == 'impersonate' || type == 'quiet' || type == 'continue' ? type : 'group_chat'; | 874 | const generateType = type == 'swipe' || type == 'impersonate' || type == 'quiet' || type == 'continue' ? type : 'group_chat'; |
| 866 | setCharacterId(chId); | 875 | setCharacterId(chId); |
| 867 | setCharacterName(characters[chId].name); | 876 | setCharacterName(characters[chId].name); |
| 877 | if (power_user.show_group_chat_queue) { | ||
| 878 | printGroupMembers(); | ||
| 879 | } | ||
| 868 | await eventSource.emit(event_types.GROUP_MEMBER_DRAFTED, chId); | 880 | await eventSource.emit(event_types.GROUP_MEMBER_DRAFTED, chId); |
| 869 | 881 | ||
| 870 | if (type !== 'swipe' && type !== 'impersonate' && !isStreamingEnabled()) { | 882 | if (type !== 'swipe' && type !== 'impersonate' && !isStreamingEnabled()) { |
| @@ -885,6 +897,10 @@ async function generateGroupWrapper(by_auto_mode, type = null, params = {}) { | |||
| 885 | messageChunk = textResult?.messageChunk; | 897 | messageChunk = textResult?.messageChunk; |
| 886 | } | 898 | } |
| 887 | } | 899 | } |
| 900 | if (power_user.show_group_chat_queue) { | ||
| 901 | groupChatQueueOrder.delete(characters[chId].avatar); | ||
| 902 | groupChatQueueOrder.forEach((value, key, map) => map.set(key, value - 1)); | ||
| 903 | } | ||
| 888 | } | 904 | } |
| 889 | } finally { | 905 | } finally { |
| 890 | typingIndicator.hide(); | 906 | typingIndicator.hide(); |
| @@ -892,6 +908,10 @@ async function generateGroupWrapper(by_auto_mode, type = null, params = {}) { | |||
| 892 | is_group_generating = false; | 908 | is_group_generating = false; |
| 893 | setSendButtonState(false); | 909 | setSendButtonState(false); |
| 894 | setCharacterId(undefined); | 910 | setCharacterId(undefined); |
| 911 | if (power_user.show_group_chat_queue) { | ||
| 912 | groupChatQueueOrder = new Map(); | ||
| 913 | printGroupMembers(); | ||
| 914 | } | ||
| 895 | setCharacterName(''); | 915 | setCharacterName(''); |
| 896 | activateSendButtons(); | 916 | activateSendButtons(); |
| 897 | showSwipeButtons(); | 917 | showSwipeButtons(); |
| @@ -1006,6 +1026,7 @@ function activateNaturalOrder(members, input, lastMessage, allowSelfResponses, i | |||
| 1006 | } | 1026 | } |
| 1007 | } | 1027 | } |
| 1008 | 1028 | ||
| 1029 | const chattyMembers = []; | ||
| 1009 | // activation by talkativeness (in shuffled order, except banned) | 1030 | // activation by talkativeness (in shuffled order, except banned) |
| 1010 | const shuffledMembers = shuffle([...members]); | 1031 | const shuffledMembers = shuffle([...members]); |
| 1011 | for (let member of shuffledMembers) { | 1032 | for (let member of shuffledMembers) { |
| @@ -1016,26 +1037,30 @@ function activateNaturalOrder(members, input, lastMessage, allowSelfResponses, i | |||
| 1016 | } | 1037 | } |
| 1017 | 1038 | ||
| 1018 | const rollValue = Math.random(); | 1039 | const rollValue = Math.random(); |
| 1019 | let talkativeness = Number(character.talkativeness); | 1040 | const talkativeness = isNaN(character.talkativeness) |
| 1020 | talkativeness = Number.isNaN(talkativeness) | ||
| 1021 | ? talkativeness_default | 1041 | ? talkativeness_default |
| 1022 | : talkativeness; | 1042 | : Number(character.talkativeness); |
| 1023 | if (talkativeness >= rollValue) { | 1043 | if (talkativeness >= rollValue) { |
| 1024 | activatedMembers.push(member); | 1044 | activatedMembers.push(member); |
| 1025 | } | 1045 | } |
| 1046 | if (talkativeness > 0) { | ||
| 1047 | chattyMembers.push(member); | ||
| 1048 | } | ||
| 1026 | } | 1049 | } |
| 1027 | 1050 | ||
| 1028 | // pick 1 at random if no one was activated | 1051 | // pick 1 at random if no one was activated |
| 1029 | let retries = 0; | 1052 | let retries = 0; |
| 1030 | while (activatedMembers.length === 0 && ++retries <= members.length) { | 1053 | // try to limit the selected random character to those with talkativeness > 0 |
| 1031 | const randomIndex = Math.floor(Math.random() * members.length); | 1054 | const randomPool = chattyMembers.length > 0 ? chattyMembers : members; |
| 1032 | const character = characters.find((x) => x.avatar === members[randomIndex]); | 1055 | while (activatedMembers.length === 0 && ++retries <= randomPool.length) { |
| 1056 | const randomIndex = Math.floor(Math.random() * randomPool.length); | ||
| 1057 | const character = characters.find((x) => x.avatar === randomPool[randomIndex]); | ||
| 1033 | 1058 | ||
| 1034 | if (!character) { | 1059 | if (!character) { |
| 1035 | continue; | 1060 | continue; |
| 1036 | } | 1061 | } |
| 1037 | 1062 | ||
| 1038 | activatedMembers.push(members[randomIndex]); | 1063 | activatedMembers.push(randomPool[randomIndex]); |
| 1039 | } | 1064 | } |
| 1040 | 1065 | ||
| 1041 | // de-duplicate array of character avatars | 1066 | // de-duplicate array of character avatars |
| @@ -1313,6 +1338,14 @@ function getGroupCharacterBlock(character) { | |||
| 1313 | template.attr('chid', characters.indexOf(character)); | 1338 | template.attr('chid', characters.indexOf(character)); |
| 1314 | template.find('.ch_fav').val(isFav); | 1339 | template.find('.ch_fav').val(isFav); |
| 1315 | template.toggleClass('is_fav', isFav); | 1340 | template.toggleClass('is_fav', isFav); |
| 1341 | |||
| 1342 | let queuePosition = groupChatQueueOrder.get(character.avatar); | ||
| 1343 | if (queuePosition) { | ||
| 1344 | template.find('.queue_position').text(queuePosition); | ||
| 1345 | template.toggleClass('is_queued', queuePosition > 1); | ||
| 1346 | template.toggleClass('is_active', queuePosition === 1); | ||
| 1347 | } | ||
| 1348 | |||
| 1316 | template.toggleClass('disabled', isGroupMemberDisabled(character.avatar)); | 1349 | template.toggleClass('disabled', isGroupMemberDisabled(character.avatar)); |
| 1317 | 1350 | ||
| 1318 | // Display inline tags | 1351 | // Display inline tags |
| @@ -1605,6 +1638,7 @@ export async function openGroupById(groupId) { | |||
| 1605 | select_group_chats(groupId); | 1638 | select_group_chats(groupId); |
| 1606 | 1639 | ||
| 1607 | if (selected_group !== groupId) { | 1640 | if (selected_group !== groupId) { |
| 1641 | groupChatQueueOrder = new Map(); | ||
| 1608 | await clearChat(); | 1642 | await clearChat(); |
| 1609 | cancelTtsPlay(); | 1643 | cancelTtsPlay(); |
| 1610 | selected_group = groupId; | 1644 | selected_group = groupId; |
| @@ -437,7 +437,7 @@ export function evaluateMacros(content, env) { | |||
| 437 | content = replaceInstructMacros(content, env); | 437 | content = replaceInstructMacros(content, env); |
| 438 | content = replaceVariableMacros(content); | 438 | content = replaceVariableMacros(content); |
| 439 | content = content.replace(/{{newline}}/gi, '\n'); | 439 | content = content.replace(/{{newline}}/gi, '\n'); |
| 440 | content = content.replace(/\n*{{trim}}\n*/gi, ''); | 440 | content = content.replace(/(?:\r?\n)*{{trim}}(?:\r?\n)*/gi, ''); |
| 441 | content = content.replace(/{{noop}}/gi, ''); | 441 | content = content.replace(/{{noop}}/gi, ''); |
| 442 | content = content.replace(/{{input}}/gi, () => String($('#send_textarea').val())); | 442 | content = content.replace(/{{input}}/gi, () => String($('#send_textarea').val())); |
| 443 | 443 | ||
| @@ -179,6 +179,7 @@ let power_user = { | |||
| 179 | send_on_enter: send_on_enter_options.AUTO, | 179 | send_on_enter: send_on_enter_options.AUTO, |
| 180 | console_log_prompts: false, | 180 | console_log_prompts: false, |
| 181 | request_token_probabilities: false, | 181 | request_token_probabilities: false, |
| 182 | show_group_chat_queue: false, | ||
| 182 | render_formulas: false, | 183 | render_formulas: false, |
| 183 | allow_name1_display: false, | 184 | allow_name1_display: false, |
| 184 | allow_name2_display: false, | 185 | allow_name2_display: false, |
| @@ -1601,6 +1602,7 @@ function loadPowerUserSettings(settings, data) { | |||
| 1601 | 1602 | ||
| 1602 | $('#console_log_prompts').prop('checked', power_user.console_log_prompts); | 1603 | $('#console_log_prompts').prop('checked', power_user.console_log_prompts); |
| 1603 | $('#request_token_probabilities').prop('checked', power_user.request_token_probabilities); | 1604 | $('#request_token_probabilities').prop('checked', power_user.request_token_probabilities); |
| 1605 | $('#show_group_chat_queue').prop('checked', power_user.show_group_chat_queue); | ||
| 1604 | $('#auto_fix_generated_markdown').prop('checked', power_user.auto_fix_generated_markdown); | 1606 | $('#auto_fix_generated_markdown').prop('checked', power_user.auto_fix_generated_markdown); |
| 1605 | $('#auto_scroll_chat_to_bottom').prop('checked', power_user.auto_scroll_chat_to_bottom); | 1607 | $('#auto_scroll_chat_to_bottom').prop('checked', power_user.auto_scroll_chat_to_bottom); |
| 1606 | $('#bogus_folders').prop('checked', power_user.bogus_folders); | 1608 | $('#bogus_folders').prop('checked', power_user.bogus_folders); |
| @@ -3567,6 +3569,11 @@ $(document).ready(() => { | |||
| 3567 | saveSettingsDebounced(); | 3569 | saveSettingsDebounced(); |
| 3568 | }); | 3570 | }); |
| 3569 | 3571 | ||
| 3572 | $('#show_group_chat_queue').on('input', function () { | ||
| 3573 | power_user.show_group_chat_queue = !!$(this).prop('checked'); | ||
| 3574 | saveSettingsDebounced(); | ||
| 3575 | }); | ||
| 3576 | |||
| 3570 | $('#auto_scroll_chat_to_bottom').on('input', function () { | 3577 | $('#auto_scroll_chat_to_bottom').on('input', function () { |
| 3571 | power_user.auto_scroll_chat_to_bottom = !!$(this).prop('checked'); | 3578 | power_user.auto_scroll_chat_to_bottom = !!$(this).prop('checked'); |
| 3572 | saveSettingsDebounced(); | 3579 | saveSettingsDebounced(); |
| @@ -2,10 +2,10 @@ | |||
| 2 | <select id="{{prefix}}prompt_manager_footer_append_prompt" class="text_pole" name="append-prompt"> | 2 | <select id="{{prefix}}prompt_manager_footer_append_prompt" class="text_pole" name="append-prompt"> |
| 3 | {{{promptsHtml}}} | 3 | {{{promptsHtml}}} |
| 4 | </select> | 4 | </select> |
| 5 | <a class="menu_button fa-chain fa-solid" title="Insert prompt" data-i18n="[title]Insert prompt"></a> | 5 | <a class="menu_button fa-chain fa-solid fa-fw" title="Insert prompt" data-i18n="[title]Insert prompt"></a> |
| 6 | <a class="caution menu_button fa-x fa-solid" title="Delete prompt" data-i18n="[title]Delete prompt"></a> | 6 | <a class="caution menu_button fa-x fa-solid fa-fw" title="Delete prompt" data-i18n="[title]Delete prompt"></a> |
| 7 | <a class="menu_button fa-file-import fa-solid" id="prompt-manager-import" title="Import a prompt list" data-i18n="[title]Import a prompt list"></a> | 7 | <a class="menu_button fa-file-import fa-solid fa-fw" id="prompt-manager-import" title="Import a prompt list" data-i18n="[title]Import a prompt list"></a> |
| 8 | <a class="menu_button fa-file-export fa-solid" id="prompt-manager-export" title="Export this prompt list" data-i18n="[title]Export this prompt list"></a> | 8 | <a class="menu_button fa-file-export fa-solid fa-fw" id="prompt-manager-export" title="Export this prompt list" data-i18n="[title]Export this prompt list"></a> |
| 9 | <a class="menu_button fa-undo fa-solid" id="prompt-manager-reset-character" title="Reset current character" data-i18n="[title]Reset current character"></a> | 9 | <a class="menu_button fa-undo fa-solid fa-fw" id="prompt-manager-reset-character" title="Reset current character" data-i18n="[title]Reset current character"></a> |
| 10 | <a class="menu_button fa-plus-square fa-solid" title="New prompt" data-i18n="[title]New prompt"></a> | 10 | <a class="menu_button fa-plus-square fa-solid fa-fw" title="New prompt" data-i18n="[title]New prompt"></a> |
| 11 | </div> | 11 | </div> |
| @@ -2922,6 +2922,23 @@ input[type=search]:focus::-webkit-search-cancel-button { | |||
| 2922 | position: relative; | 2922 | position: relative; |
| 2923 | } | 2923 | } |
| 2924 | 2924 | ||
| 2925 | .group_member .queue_position:not(:empty)::before { | ||
| 2926 | content: "#"; | ||
| 2927 | } | ||
| 2928 | |||
| 2929 | .group_member .queue_position { | ||
| 2930 | margin-right: 0.75rem; | ||
| 2931 | font-size: calc(var(--mainFontSize) * 0.9); | ||
| 2932 | } | ||
| 2933 | |||
| 2934 | .group_member.is_queued { | ||
| 2935 | outline: 2px solid var(--golden); | ||
| 2936 | } | ||
| 2937 | |||
| 2938 | .group_member.is_active { | ||
| 2939 | outline: 2px solid var(--active); | ||
| 2940 | } | ||
| 2941 | |||
| 2925 | .character_select.is_fav .avatar, | 2942 | .character_select.is_fav .avatar, |
| 2926 | .group_select.is_fav .avatar, | 2943 | .group_select.is_fav .avatar, |
| 2927 | .group_member.is_fav .avatar, | 2944 | .group_member.is_fav .avatar, |