Display a greeting for custom welcome assistants

61a1078e1d6b271a259816dd3b80c043eedc6227

Cohee <18619528+Cohee1207@users.noreply.github.com>

1 files changed, +36 -1Showing whitespace changes
public/scripts/welcome-screen.js+36 -1
@@ -20,9 +20,12 @@ import {
20 system_avatar,20 system_avatar,
21 system_message_types,21 system_message_types,
22 this_chid,22 this_chid,
23 unshallowCharacter,
23} from '../script.js';24} from '../script.js';
25import { getRegexedString, regex_placement } from './extensions/regex/engine.js';
24import { getGroupAvatar, groups, is_group_generating, openGroupById, openGroupChat } from './group-chats.js';26import { getGroupAvatar, groups, is_group_generating, openGroupById, openGroupChat } from './group-chats.js';
25import { t } from './i18n.js';27import { t } from './i18n.js';
28import { getMessageTimeStamp } from './RossAscends-mods.js';
26import { renderTemplateAsync } from './templates.js';29import { renderTemplateAsync } from './templates.js';
27import { accountStorage } from './util/AccountStorage.js';30import { accountStorage } from './util/AccountStorage.js';
28import { sortMoments, timestampToMoment } from './utils.js';31import { sortMoments, timestampToMoment } from './utils.js';
@@ -62,22 +65,54 @@ export async function openWelcomeScreen() {
62 }65 }
6366
64 await sendWelcomePanel(recentChats);67 await sendWelcomePanel(recentChats);
68 await unshallowPermanentAssistant();
65 sendAssistantMessage();69 sendAssistantMessage();
66 sendWelcomePrompt();70 sendWelcomePrompt();
67}71}
6872
73/**
74 * Makes sure the assistant character has all data loaded.
75 * @returns {Promise<void>}
76 */
77async function unshallowPermanentAssistant() {
78 const assistantAvatar = getPermanentAssistantAvatar();
79 const characterId = characters.findIndex(x => x.avatar === assistantAvatar);
80 if (characterId === -1) {
81 return;
82 }
83
84 await unshallowCharacter(String(characterId));
85}
86
87/**
88 * Returns a greeting message for the assistant based on the character.
89 * @param {import('./char-data.js').v1CharData} character Character data
90 * @returns {string} Greeting message
91*/
92function getAssistantGreeting(character) {
93 const defaultGreeting = t`If you're connected to an API, try asking me something!`;
94
95 if (!character) {
96 return defaultGreeting;
97 }
98
99 return getRegexedString(character.first_mes || '', regex_placement.AI_OUTPUT) || defaultGreeting;
100}
101
69function sendAssistantMessage() {102function sendAssistantMessage() {
70 const currentAssistantAvatar = getPermanentAssistantAvatar();103 const currentAssistantAvatar = getPermanentAssistantAvatar();
71 const character = characters.find(x => x.avatar === currentAssistantAvatar);104 const character = characters.find(x => x.avatar === currentAssistantAvatar);
72 const name = character ? character.name : neutralCharacterName;105 const name = character ? character.name : neutralCharacterName;
73 const avatar = character ? getThumbnailUrl('avatar', character.avatar) : system_avatar;106 const avatar = character ? getThumbnailUrl('avatar', character.avatar) : system_avatar;
107 const greeting = getAssistantGreeting(character);
74108
75 const message = {109 const message = {
76 name: name,110 name: name,
77 force_avatar: avatar,111 force_avatar: avatar,
78 mes: t`If you're connected to an API, try asking me something!` + '\n***\n' + t`**Hint:** Set any character as your welcome page assistant from their "More..." menu.`,112 mes: greeting + '\n***\n' + t`**Hint:** Set any character as your welcome page assistant from their "More..." menu.`,
79 is_system: false,113 is_system: false,
80 is_user: false,114 is_user: false,
115 send_date: getMessageTimeStamp(),
81 extra: {116 extra: {
82 type: system_message_types.ASSISTANT_MESSAGE,117 type: system_message_types.ASSISTANT_MESSAGE,
83 },118 },