Display a greeting for custom welcome assistants

This commit is contained in:
Cohee
2025-05-26 01:09:57 +03:00
parent c528940a45
commit 61a1078e1d

View File

@@ -20,9 +20,12 @@ import {
system_avatar, system_avatar,
system_message_types, system_message_types,
this_chid, this_chid,
unshallowCharacter,
} from '../script.js'; } from '../script.js';
import { getRegexedString, regex_placement } from './extensions/regex/engine.js';
import { getGroupAvatar, groups, is_group_generating, openGroupById, openGroupChat } from './group-chats.js'; import { getGroupAvatar, groups, is_group_generating, openGroupById, openGroupChat } from './group-chats.js';
import { t } from './i18n.js'; import { t } from './i18n.js';
import { getMessageTimeStamp } from './RossAscends-mods.js';
import { renderTemplateAsync } from './templates.js'; import { renderTemplateAsync } from './templates.js';
import { accountStorage } from './util/AccountStorage.js'; import { accountStorage } from './util/AccountStorage.js';
import { sortMoments, timestampToMoment } from './utils.js'; import { sortMoments, timestampToMoment } from './utils.js';
@@ -62,22 +65,54 @@ export async function openWelcomeScreen() {
} }
await sendWelcomePanel(recentChats); await sendWelcomePanel(recentChats);
await unshallowPermanentAssistant();
sendAssistantMessage(); sendAssistantMessage();
sendWelcomePrompt(); sendWelcomePrompt();
} }
/**
* Makes sure the assistant character has all data loaded.
* @returns {Promise<void>}
*/
async function unshallowPermanentAssistant() {
const assistantAvatar = getPermanentAssistantAvatar();
const characterId = characters.findIndex(x => x.avatar === assistantAvatar);
if (characterId === -1) {
return;
}
await unshallowCharacter(String(characterId));
}
/**
* Returns a greeting message for the assistant based on the character.
* @param {import('./char-data.js').v1CharData} character Character data
* @returns {string} Greeting message
*/
function getAssistantGreeting(character) {
const defaultGreeting = t`If you're connected to an API, try asking me something!`;
if (!character) {
return defaultGreeting;
}
return getRegexedString(character.first_mes || '', regex_placement.AI_OUTPUT) || defaultGreeting;
}
function sendAssistantMessage() { function sendAssistantMessage() {
const currentAssistantAvatar = getPermanentAssistantAvatar(); const currentAssistantAvatar = getPermanentAssistantAvatar();
const character = characters.find(x => x.avatar === currentAssistantAvatar); const character = characters.find(x => x.avatar === currentAssistantAvatar);
const name = character ? character.name : neutralCharacterName; const name = character ? character.name : neutralCharacterName;
const avatar = character ? getThumbnailUrl('avatar', character.avatar) : system_avatar; const avatar = character ? getThumbnailUrl('avatar', character.avatar) : system_avatar;
const greeting = getAssistantGreeting(character);
const message = { const message = {
name: name, name: name,
force_avatar: avatar, force_avatar: avatar,
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.`, mes: greeting + '\n***\n' + t`**Hint:** Set any character as your welcome page assistant from their "More..." menu.`,
is_system: false, is_system: false,
is_user: false, is_user: false,
send_date: getMessageTimeStamp(),
extra: { extra: {
type: system_message_types.ASSISTANT_MESSAGE, type: system_message_types.ASSISTANT_MESSAGE,
}, },