Refactor instruct names behavior controls (#2837) * Refactor instruct names behavior controls Closes #2819 * Remove current persona from force names * Don't add current user name in groups * Revert to old text * Add titles to names behavior * Proper default for names_behavior
Signed| @@ -7,8 +7,7 @@ | ||
| 7 | 7 | "stop_sequence": "", |
| 8 | 8 | "wrap": true, |
| 9 | 9 | "macro": true, |
| 10 | 10 | "namesnames_behavior": false"none", |
| 11 | - "names_force_groups": false, | |
| 12 | 11 | "activation_regex": "", |
| 13 | 12 | "system_sequence_prefix": "", |
| 14 | 13 | "system_sequence_suffix": "", |
| @@ -7,8 +7,7 @@ | ||
| 7 | 7 | "stop_sequence": "", |
| 8 | 8 | "wrap": true, |
| 9 | 9 | "macro": true, |
| 10 | 10 | "namesnames_behavior": true"always", |
| 11 | - "names_force_groups": true, | |
| 12 | 11 | "activation_regex": "", |
| 13 | 12 | "system_sequence_prefix": "", |
| 14 | 13 | "system_sequence_suffix": "", |
| @@ -7,8 +7,7 @@ | ||
| 7 | 7 | "stop_sequence": "", |
| 8 | 8 | "wrap": true, |
| 9 | 9 | "macro": true, |
| 10 | 10 | "namesnames_behavior": false"force", |
| 11 | - "names_force_groups": true, | |
| 12 | 11 | "activation_regex": "", |
| 13 | 12 | "system_sequence_prefix": "", |
| 14 | 13 | "system_sequence_suffix": "", |
| @@ -7,8 +7,7 @@ | ||
| 7 | 7 | "stop_sequence": "", |
| 8 | 8 | "wrap": true, |
| 9 | 9 | "macro": true, |
| 10 | 10 | "namesnames_behavior": false"force", |
| 11 | - "names_force_groups": true, | |
| 12 | 11 | "activation_regex": "", |
| 13 | 12 | "system_sequence_prefix": "", |
| 14 | 13 | "system_sequence_suffix": "", |
| @@ -7,8 +7,7 @@ | ||
| 7 | 7 | "stop_sequence": "<|im_end|>", |
| 8 | 8 | "wrap": true, |
| 9 | 9 | "macro": true, |
| 10 | 10 | "namesnames_behavior": false"none", |
| 11 | - "names_force_groups": false, | |
| 12 | 11 | "activation_regex": "", |
| 13 | 12 | "system_sequence_prefix": "", |
| 14 | 13 | "system_sequence_suffix": "", |
| @@ -7,8 +7,7 @@ | ||
| 7 | 7 | "stop_sequence": "<|im_end|>", |
| 8 | 8 | "wrap": true, |
| 9 | 9 | "macro": true, |
| 10 | 10 | "namesnames_behavior": true"always", |
| 11 | - "names_force_groups": true, | |
| 12 | 11 | "activation_regex": "", |
| 13 | 12 | "system_sequence_prefix": "", |
| 14 | 13 | "system_sequence_suffix": "", |
| @@ -9,8 +9,7 @@ | ||
| 9 | 9 | "stop_sequence": "<|END_OF_TURN_TOKEN|>", |
| 10 | 10 | "wrap": false, |
| 11 | 11 | "macro": true, |
| 12 | 12 | "namesnames_behavior": true"always", |
| 13 | - "names_force_groups": true, | |
| 14 | 13 | "activation_regex": "", |
| 15 | 14 | "skip_examples": false, |
| 16 | 15 | "output_suffix": "<|END_OF_TURN_TOKEN|>", |
| @@ -7,8 +7,7 @@ | ||
| 7 | 7 | "stop_sequence": "\n<|im_start|>", |
| 8 | 8 | "wrap": false, |
| 9 | 9 | "macro": true, |
| 10 | 10 | "namesnames_behavior": false"none", |
| 11 | - "names_force_groups": false, | |
| 12 | 11 | "activation_regex": "", |
| 13 | 12 | "system_sequence_prefix": "", |
| 14 | 13 | "system_sequence_suffix": "", |
| @@ -10,8 +10,7 @@ | ||
| 10 | 10 | "separator_sequence": "", |
| 11 | 11 | "wrap": false, |
| 12 | 12 | "macro": true, |
| 13 | 13 | "namesnames_behavior": false"none", |
| 14 | - "names_force_groups": false, | |
| 15 | 14 | "activation_regex": "", |
| 16 | 15 | "skip_examples": false, |
| 17 | 16 | "name": "DreamGen Role-Play V1 Llama3" |
| @@ -7,8 +7,7 @@ | ||
| 7 | 7 | "stop_sequence": "<end_of_turn>", |
| 8 | 8 | "wrap": true, |
| 9 | 9 | "macro": true, |
| 10 | 10 | "namesnames_behavior": false"none", |
| 11 | - "names_force_groups": false, | |
| 12 | 11 | "activation_regex": "", |
| 13 | 12 | "system_sequence_prefix": "", |
| 14 | 13 | "system_sequence_suffix": "", |
| @@ -7,8 +7,7 @@ | ||
| 7 | 7 | "stop_sequence": "", |
| 8 | 8 | "wrap": false, |
| 9 | 9 | "macro": true, |
| 10 | 10 | "namesnames_behavior": false"force", |
| 11 | - "names_force_groups": true, | |
| 12 | 11 | "activation_regex": "", |
| 13 | 12 | "system_sequence_prefix": "BEGINNING OF CONVERSATION: ", |
| 14 | 13 | "system_sequence_suffix": "", |
| @@ -7,8 +7,7 @@ | ||
| 7 | 7 | "stop_sequence": "", |
| 8 | 8 | "wrap": true, |
| 9 | 9 | "macro": true, |
| 10 | 10 | "namesnames_behavior": true"always", |
| 11 | - "names_force_groups": true, | |
| 12 | 11 | "activation_regex": "", |
| 13 | 12 | "system_sequence_prefix": "", |
| 14 | 13 | "system_sequence_suffix": "", |
| @@ -7,8 +7,7 @@ | ||
| 7 | 7 | "stop_sequence": "", |
| 8 | 8 | "wrap": true, |
| 9 | 9 | "macro": true, |
| 10 | 10 | "namesnames_behavior": false"force", |
| 11 | - "names_force_groups": true, | |
| 12 | 11 | "activation_regex": "", |
| 13 | 12 | "system_sequence_prefix": "", |
| 14 | 13 | "system_sequence_suffix": "", |
| @@ -7,8 +7,7 @@ | ||
| 7 | 7 | "stop_sequence": "", |
| 8 | 8 | "wrap": false, |
| 9 | 9 | "macro": true, |
| 10 | 10 | "namesnames_behavior": false"force", |
| 11 | - "names_force_groups": true, | |
| 12 | 11 | "activation_regex": "", |
| 13 | 12 | "system_sequence_prefix": "", |
| 14 | 13 | "system_sequence_suffix": "", |
| @@ -7,8 +7,7 @@ | ||
| 7 | 7 | "stop_sequence": "<|eot_id|>", |
| 8 | 8 | "wrap": false, |
| 9 | 9 | "macro": true, |
| 10 | 10 | "namesnames_behavior": true"always", |
| 11 | - "names_force_groups": true, | |
| 12 | 11 | "activation_regex": "", |
| 13 | 12 | "system_sequence_prefix": "", |
| 14 | 13 | "system_sequence_suffix": "", |
| @@ -7,8 +7,7 @@ | ||
| 7 | 7 | "stop_sequence": "<|eot_id|>", |
| 8 | 8 | "wrap": false, |
| 9 | 9 | "macro": true, |
| 10 | 10 | "namesnames_behavior": false"none", |
| 11 | - "names_force_groups": false, | |
| 12 | 11 | "activation_regex": "", |
| 13 | 12 | "system_sequence_prefix": "", |
| 14 | 13 | "system_sequence_suffix": "", |
| @@ -7,8 +7,7 @@ | ||
| 7 | 7 | "stop_sequence": "</s>", |
| 8 | 8 | "wrap": false, |
| 9 | 9 | "macro": true, |
| 10 | 10 | "namesnames_behavior": false"force", |
| 11 | - "names_force_groups": true, | |
| 12 | 11 | "activation_regex": "", |
| 13 | 12 | "system_sequence_prefix": "<|system|>", |
| 14 | 13 | "system_sequence_suffix": "", |
| @@ -7,8 +7,7 @@ | ||
| 7 | 7 | "stop_sequence": "", |
| 8 | 8 | "wrap": false, |
| 9 | 9 | "macro": true, |
| 10 | 10 | "namesnames_behavior": true"always", |
| 11 | - "names_force_groups": true, | |
| 12 | 11 | "activation_regex": "", |
| 13 | 12 | "system_sequence_prefix": "", |
| 14 | 13 | "system_sequence_suffix": "", |
| @@ -7,8 +7,7 @@ | ||
| 7 | 7 | "stop_sequence": "", |
| 8 | 8 | "wrap": false, |
| 9 | 9 | "macro": true, |
| 10 | 10 | "namesnames_behavior": false"force", |
| 11 | - "names_force_groups": true, | |
| 12 | 11 | "activation_regex": "", |
| 13 | 12 | "system_sequence_prefix": "", |
| 14 | 13 | "system_sequence_suffix": "", |
| @@ -9,8 +9,7 @@ | ||
| 9 | 9 | "stop_sequence": "<|end|>", |
| 10 | 10 | "wrap": false, |
| 11 | 11 | "macro": true, |
| 12 | 12 | "namesnames_behavior": true"always", |
| 13 | - "names_force_groups": true, | |
| 14 | 13 | "activation_regex": "", |
| 15 | 14 | "skip_examples": false, |
| 16 | 15 | "output_suffix": "<|end|>\n", |
| @@ -7,8 +7,7 @@ | ||
| 7 | 7 | "stop_sequence": "<|user|>", |
| 8 | 8 | "wrap": false, |
| 9 | 9 | "macro": true, |
| 10 | 10 | "namesnames_behavior": true"always", |
| 11 | - "names_force_groups": true, | |
| 12 | 11 | "activation_regex": "", |
| 13 | 12 | "system_sequence_prefix": "<|system|>", |
| 14 | 13 | "system_sequence_suffix": "", |
| @@ -7,8 +7,7 @@ | ||
| 7 | 7 | "stop_sequence": "", |
| 8 | 8 | "wrap": true, |
| 9 | 9 | "macro": true, |
| 10 | 10 | "namesnames_behavior": false"none", |
| 11 | - "names_force_groups": false, | |
| 12 | 11 | "activation_regex": "", |
| 13 | 12 | "system_sequence_prefix": "", |
| 14 | 13 | "system_sequence_suffix": "", |
| @@ -7,8 +7,7 @@ | ||
| 7 | 7 | "stop_sequence": "", |
| 8 | 8 | "wrap": false, |
| 9 | 9 | "macro": true, |
| 10 | 10 | "namesnames_behavior": false"force", |
| 11 | - "names_force_groups": true, | |
| 12 | 11 | "activation_regex": "", |
| 13 | 12 | "system_sequence_prefix": "SYSTEM: ", |
| 14 | 13 | "system_sequence_suffix": "", |
| @@ -7,8 +7,7 @@ | ||
| 7 | 7 | "stop_sequence": "", |
| 8 | 8 | "wrap": true, |
| 9 | 9 | "macro": true, |
| 10 | 10 | "namesnames_behavior": false"force", |
| 11 | - "names_force_groups": true, | |
| 12 | 11 | "activation_regex": "", |
| 13 | 12 | "system_sequence_prefix": "", |
| 14 | 13 | "system_sequence_suffix": "", |
| @@ -7,8 +7,7 @@ | ||
| 7 | 7 | "stop_sequence": "", |
| 8 | 8 | "wrap": false, |
| 9 | 9 | "macro": true, |
| 10 | 10 | "namesnames_behavior": false"force", |
| 11 | - "names_force_groups": true, | |
| 12 | 11 | "activation_regex": "", |
| 13 | 12 | "system_sequence_prefix": "BEGINNING OF CONVERSATION:", |
| 14 | 13 | "system_sequence_suffix": "", |
| @@ -7,8 +7,7 @@ | ||
| 7 | 7 | "stop_sequence": "", |
| 8 | 8 | "wrap": true, |
| 9 | 9 | "macro": true, |
| 10 | 10 | "namesnames_behavior": false"force", |
| 11 | - "names_force_groups": true, | |
| 12 | 11 | "activation_regex": "", |
| 13 | 12 | "system_sequence_prefix": "", |
| 14 | 13 | "system_sequence_suffix": "", |
| @@ -7,8 +7,7 @@ | ||
| 7 | 7 | "stop_sequence": "", |
| 8 | 8 | "wrap": true, |
| 9 | 9 | "macro": true, |
| 10 | 10 | "namesnames_behavior": false"force", |
| 11 | - "names_force_groups": true, | |
| 12 | 11 | "activation_regex": "", |
| 13 | 12 | "system_sequence_prefix": "", |
| 14 | 13 | "system_sequence_suffix": "", |
| @@ -7,8 +7,7 @@ | ||
| 7 | 7 | "stop_sequence": "", |
| 8 | 8 | "wrap": true, |
| 9 | 9 | "macro": true, |
| 10 | 10 | "namesnames_behavior": false"none", |
| 11 | - "names_force_groups": false, | |
| 12 | 11 | "activation_regex": "", |
| 13 | 12 | "system_sequence_prefix": "", |
| 14 | 13 | "system_sequence_suffix": "", |
| @@ -162,8 +162,7 @@ | ||
| 162 | 162 | "stop_sequence": "", |
| 163 | 163 | "wrap": true, |
| 164 | 164 | "macro": true, |
| 165 | 165 | "namesnames_behavior": false"force", |
| 166 | - "names_force_groups": true, | |
| 167 | 166 | "activation_regex": "", |
| 168 | 167 | "system_sequence_prefix": "", |
| 169 | 168 | "system_sequence_suffix": "", |
| @@ -3297,14 +3297,23 @@ | ||
| 3297 | 3297 | <input id="instruct_skip_examples" type="checkbox" /> |
| 3298 | 3298 | <small data-i18n="Skip Example Dialogues Formatting">Skip Example Dialogues Formatting</small> |
| 3299 | 3299 | </label> |
| 3300 | 3300 | <label for="instruct_names"div classid="checkbox_labelinstruct_names_behavior"> |
| 3301 | 3301 | <inputsmall iddata-i18n="instruct_names"Include type="checkboxNames" /> |
| 3302 | - <small data-i18n="Include Names">Include Names</small> | |
| 3302 | + Include Names | |
| 3303 | + </small> | |
| 3304 | + <label for="instruct_names_behavior_none" class="checkbox_label" title="Do not add name prefixes before the message contents."> | |
| 3305 | + <input id="instruct_names_behavior_none" name="names_behavior" value="none" type="radio" /> | |
| 3306 | + <small data-i18n="Never">Never</small> | |
| 3303 | 3307 | </label> |
| 3304 | - <label for="instruct_names_force_groups" class="checkbox_label indent20p"> | |
| 3308 | + <label for="instruct_names_behavior_force" class="checkbox_label" title="Only add name prefixes to messages from group characters and past personas."> | |
| 3305 | 3309 | <input id="instruct_names_force_groupsinstruct_names_behavior_force" name="names_behavior" value="force" type="checkboxradio" /> |
| 3306 | 3310 | <small data-i18n="Force for Groups and Past Personas">Force for Groups and Past Personas</small> |
| 3307 | 3311 | </label> |
| 3312 | + <label for="instruct_names_behavior_always" class="checkbox_label" title="Always add name prefixes to messages."> | |
| 3313 | + <input id="instruct_names_behavior_always" name="names_behavior" value="always" type="radio" /> | |
| 3314 | + <small data-i18n="Always">Always</small> | |
| 3315 | + </label> | |
| 3316 | + </div> | |
| 3308 | 3317 | </div> |
| 3309 | 3318 | </div> |
| 3310 | 3319 | <div name="tokenizerSettingsBlock"> |
| @@ -14,6 +14,12 @@ import { regexFromString, resetScrollHeight } from './utils.js'; | ||
| 14 | 14 | */ |
| 15 | 15 | export let instruct_presets = []; |
| 16 | 16 | |
| 17 | +export const names_behavior_types = { | |
| 18 | + NONE: 'none', | |
| 19 | + FORCE: 'force', | |
| 20 | + ALWAYS: 'always', | |
| 21 | +}; | |
| 22 | + | |
| 17 | 23 | const controls = [ |
| 18 | 24 | { id: 'instruct_enabled', property: 'enabled', isCheckbox: true }, |
| 19 | 25 | { id: 'instruct_wrap', property: 'wrap', isCheckbox: true }, |
| @@ -30,8 +36,6 @@ const controls = [ | ||
| 30 | 36 | { id: 'instruct_user_alignment_message', property: 'user_alignment_message', isCheckbox: false }, |
| 31 | 37 | { id: 'instruct_stop_sequence', property: 'stop_sequence', isCheckbox: false }, |
| 32 | 38 | { id: 'instruct_names', property: 'names', isCheckbox: true }, |
| 33 | - { id: 'instruct_macro', property: 'macro', isCheckbox: true }, | |
| 34 | - { id: 'instruct_names_force_groups', property: 'names_force_groups', isCheckbox: true }, | |
| 35 | 39 | { id: 'instruct_first_output_sequence', property: 'first_output_sequence', isCheckbox: false }, |
| 36 | 40 | { id: 'instruct_last_output_sequence', property: 'last_output_sequence', isCheckbox: false }, |
| 37 | 41 | { id: 'instruct_first_input_sequence', property: 'first_input_sequence', isCheckbox: false }, |
| @@ -39,6 +43,7 @@ const controls = [ | ||
| 39 | 43 | { id: 'instruct_activation_regex', property: 'activation_regex', isCheckbox: false }, |
| 40 | 44 | { id: 'instruct_bind_to_context', property: 'bind_to_context', isCheckbox: true }, |
| 41 | 45 | { id: 'instruct_skip_examples', property: 'skip_examples', isCheckbox: true }, |
| 46 | + { id: 'instruct_names_behavior input[name="names_behavior"]', property: 'names_behavior', isCheckbox: false }, | |
| 42 | 47 | { id: 'instruct_system_same_as_user', property: 'system_same_as_user', isCheckbox: true, trigger: true }, |
| 43 | 48 | ]; |
| 44 | 49 | |
| @@ -54,6 +59,15 @@ function migrateInstructModeSettings(settings) { | ||
| 54 | 59 | delete settings.separator_sequence; |
| 55 | 60 | } |
| 56 | 61 | |
| 62 | + // names, names_force_groups => names_behavior | |
| 63 | + if (settings.names !== undefined) { | |
| 64 | + settings.names_behavior = settings.names | |
| 65 | + ? names_behavior_types.ALWAYS | |
| 66 | + : (settings.names_force_groups ? names_behavior_types.FORCE : names_behavior_types.NONE); | |
| 67 | + delete settings.names; | |
| 68 | + delete settings.names_force_groups; | |
| 69 | + } | |
| 70 | + | |
| 57 | 71 | const defaults = { |
| 58 | 72 | input_suffix: '', |
| 59 | 73 | system_sequence: '', |
| @@ -65,6 +79,7 @@ function migrateInstructModeSettings(settings) { | ||
| 65 | 79 | names_force_groups: true, |
| 66 | 80 | skip_examples: false, |
| 67 | 81 | system_same_as_user: false, |
| 82 | + names_behavior: names_behavior_types.FORCE, | |
| 68 | 83 | }; |
| 69 | 84 | |
| 70 | 85 | for (let key in defaults) { |
| @@ -94,6 +109,9 @@ export async function loadInstructMode(data) { | ||
| 94 | 109 | |
| 95 | 110 | if (control.isCheckbox) { |
| 96 | 111 | $element.prop('checked', power_user.instruct[control.property]); |
| 112 | + } else if (control.property === 'names_behavior') { | |
| 113 | + const behavior = power_user.instruct[control.property]; | |
| 114 | + $element.filter(`[value="${behavior}"]`).prop('checked', true); | |
| 97 | 115 | } else { |
| 98 | 116 | $element.val(power_user.instruct[control.property]); |
| 99 | 117 | } |
| @@ -311,9 +329,9 @@ export const force_output_sequence = { | ||
| 311 | 329 | * @returns {string} Formatted instruct mode chat message. |
| 312 | 330 | */ |
| 313 | 331 | export function formatInstructModeChat(name, mes, isUser, isNarrator, forceAvatar, name1, name2, forceOutputSequence) { |
| 314 | 332 | let includeNames = isNarrator ? false : power_user.instruct.namesnames_behavior === names_behavior_types.ALWAYS; |
| 315 | 333 | |
| 316 | 334 | if (!isNarrator && power_user.instruct.names_force_groupsnames_behavior === names_behavior_types.FORCE && ((selected_group && name !== name1) || (forceAvatar && name !== name1))) { |
| 317 | 335 | includeNames = true; |
| 318 | 336 | } |
| 319 | 337 | |
| @@ -416,7 +434,7 @@ export function formatInstructModeExamples(mesExamplesArray, name1, name2) { | ||
| 416 | 434 | return mesExamplesArray.map(x => x.replace(/<START>\n/i, blockHeading)); |
| 417 | 435 | } |
| 418 | 436 | |
| 419 | 437 | const includeNames = power_user.instruct.namesnames_behavior === names_behavior_types.ALWAYS || (!!selected_group && power_user.instruct.names_force_groupsnames_behavior === names_behavior_types.FORCE); |
| 420 | 438 | |
| 421 | 439 | let inputPrefix = power_user.instruct.input_sequence || ''; |
| 422 | 440 | let outputPrefix = power_user.instruct.output_sequence || ''; |
| @@ -460,7 +478,7 @@ export function formatInstructModeExamples(mesExamplesArray, name1, name2) { | ||
| 460 | 478 | |
| 461 | 479 | for (const example of blockExamples) { |
| 462 | 480 | // If force group/persona names is set, we should override the include names for the user placeholder |
| 463 | 481 | const includeThisName = includeNames || (power_user.instruct.names_force_groupsnames_behavior === names_behavior_types.FORCE && example.name == 'example_user'); |
| 464 | 482 | |
| 465 | 483 | const prefix = example.name == 'example_user' ? inputPrefix : outputPrefix; |
| 466 | 484 | const suffix = example.name == 'example_user' ? inputSuffix : outputSuffix; |
| @@ -490,7 +508,7 @@ export function formatInstructModeExamples(mesExamplesArray, name1, name2) { | ||
| 490 | 508 | * @returns {string} Formatted instruct mode last prompt line. |
| 491 | 509 | */ |
| 492 | 510 | export function formatInstructModePrompt(name, isImpersonate, promptBias, name1, name2, isQuiet, isQuietToLoud) { |
| 493 | 511 | const includeNames = name && (power_user.instruct.namesnames_behavior === names_behavior_types.ALWAYS || (!!selected_group && power_user.instruct.names_force_groupsnames_behavior === names_behavior_types.FORCE)) && !(isQuiet && !isQuietToLoud); |
| 494 | 512 | |
| 495 | 513 | function getSequence() { |
| 496 | 514 | // User impersonation prompt |
| @@ -668,6 +686,9 @@ jQuery(() => { | ||
| 668 | 686 | |
| 669 | 687 | if (control.isCheckbox) { |
| 670 | 688 | $element.prop('checked', power_user.instruct[control.property]).trigger('input'); |
| 689 | + } else if (control.property === 'names_behavior') { | |
| 690 | + const behavior = power_user.instruct[control.property]; | |
| 691 | + $element.filter(`[value="${behavior}"]`).prop('checked', true).trigger('input'); | |
| 671 | 692 | } else { |
| 672 | 693 | $element.val(power_user.instruct[control.property]); |
| 673 | 694 | $element.trigger('input'); |
| @@ -541,7 +541,7 @@ function setOpenAIMessages(chat) { | ||
| 541 | 541 | case character_names_behavior.NONE: |
| 542 | 542 | break; |
| 543 | 543 | case character_names_behavior.DEFAULT: |
| 544 | 544 | if ((selected_group && chat[j].name !== name1) || (chat[j].force_avatar && chat[j].name !== name1 && chat[j].extra?.type !== system_message_types.NARRATOR)) { |
| 545 | 545 | content = `${chat[j].name}: ${content}`; |
| 546 | 546 | } |
| 547 | 547 | break; |
| @@ -32,6 +32,7 @@ import { | ||
| 32 | 32 | import { |
| 33 | 33 | instruct_presets, |
| 34 | 34 | loadInstructMode, |
| 35 | + names_behavior_types, | |
| 35 | 36 | selectInstructPreset, |
| 36 | 37 | } from './instruct-mode.js'; |
| 37 | 38 | |
| @@ -224,8 +225,7 @@ let power_user = { | ||
| 224 | 225 | stop_sequence: '', |
| 225 | 226 | wrap: true, |
| 226 | 227 | macro: true, |
| 227 | 228 | namesnames_behavior: falsenames_behavior_types.FORCE, |
| 228 | - names_force_groups: true, | |
| 229 | 229 | activation_regex: '', |
| 230 | 230 | bind_to_context: false, |
| 231 | 231 | user_alignment_message: '', |