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 {
2020 system_avatar,
2121 system_message_types,
2222 this_chid,
23+ unshallowCharacter,
2324} from '../script.js';
25+import { getRegexedString, regex_placement } from './extensions/regex/engine.js';
2426import { getGroupAvatar, groups, is_group_generating, openGroupById, openGroupChat } from './group-chats.js';
2527import { t } from './i18n.js';
28+import { getMessageTimeStamp } from './RossAscends-mods.js';
2629import { renderTemplateAsync } from './templates.js';
2730import { accountStorage } from './util/AccountStorage.js';
2831import { sortMoments, timestampToMoment } from './utils.js';
@@ -62,22 +65,54 @@ export async function openWelcomeScreen() {
6265 }
6366
6467 await sendWelcomePanel(recentChats);
68+ await unshallowPermanentAssistant();
6569 sendAssistantMessage();
6670 sendWelcomePrompt();
6771}
6872
73+/**
74+ * Makes sure the assistant character has all data loaded.
75+ * @returns {Promise<void>}
76+ */
77+async 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+*/
92+function 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+
69102function sendAssistantMessage() {
70103 const currentAssistantAvatar = getPermanentAssistantAvatar();
71104 const character = characters.find(x => x.avatar === currentAssistantAvatar);
72105 const name = character ? character.name : neutralCharacterName;
73106 const avatar = character ? getThumbnailUrl('avatar', character.avatar) : system_avatar;
107+ const greeting = getAssistantGreeting(character);
74108
75109 const message = {
76110 name: name,
77111 force_avatar: avatar,
78112 mes: t`If you're connected to an API, try asking me something!`greeting + '\n***\n' + t`**Hint:** Set any character as your welcome page assistant from their "More..." menu.`,
79113 is_system: false,
80114 is_user: false,
115+ send_date: getMessageTimeStamp(),
81116 extra: {
82117 type: system_message_types.ASSISTANT_MESSAGE,
83118 },