Emit prompt events in generateRaw (#4587) Closes https://github.com/SillyTavern/Extension-PromptInspector/issues/4

654ddb1608f7b69ec7ce70cd4a31e7b31887830c

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

Signed
1 files changed, +23 -0Showing whitespace changes
public/script.js+23 -0
@@ -3197,6 +3197,11 @@ export async function generateRaw({ prompt = '', api = null, instructOverride =
3197 // construct final prompt from the input. Can either be a string or an array of chat-style messages.3197 // construct final prompt from the input. Can either be a string or an array of chat-style messages.
3198 prompt = createRawPrompt(prompt, api, instructOverride, quietToLoud, systemPrompt, prefill);3198 prompt = createRawPrompt(prompt, api, instructOverride, quietToLoud, systemPrompt, prefill);
31993199
3200 // Allow extensions to stop generation before it happens
3201 const eventAbortController = new AbortController();
3202 const abortHook = () => eventAbortController.abort(new Error('Cancelled by extension'));
3203 eventSource.on(event_types.GENERATION_STOPPED, abortHook);
3204
3200 try {3205 try {
3201 if (responseLengthCustomized) {3206 if (responseLengthCustomized) {
3202 TempResponseLength.save(api, responseLength);3207 TempResponseLength.save(api, responseLength);
@@ -3204,6 +3209,23 @@ export async function generateRaw({ prompt = '', api = null, instructOverride =
3204 /** @type {object|any[]} */3209 /** @type {object|any[]} */
3205 let generateData = {};3210 let generateData = {};
32063211
3212 // Allow extensions to modify the prompt before generation
3213 // 1. for text completion
3214 if (typeof prompt === 'string') {
3215 const eventData = { prompt: prompt, dryRun: false };
3216 await eventSource.emit(event_types.GENERATE_AFTER_COMBINE_PROMPTS, eventData);
3217 prompt = eventData.prompt;
3218 }
3219 // 2. for chat completion
3220 if (Array.isArray(prompt)) {
3221 const eventData = { chat: prompt, dryRun: false };
3222 await eventSource.emit(event_types.CHAT_COMPLETION_PROMPT_READY, eventData);
3223 prompt = eventData.chat;
3224 }
3225
3226 // Check if the generation was aborted during the event
3227 eventAbortController.signal.throwIfAborted();
3228
3207 switch (api) {3229 switch (api) {
3208 case 'kobold':3230 case 'kobold':
3209 case 'koboldhorde':3231 case 'koboldhorde':
@@ -3283,6 +3305,7 @@ export async function generateRaw({ prompt = '', api = null, instructOverride =
32833305
3284 return message;3306 return message;
3285 } finally {3307 } finally {
3308 eventSource.removeListener(event_types.GENERATION_STOPPED, abortHook);
3286 if (responseLengthCustomized && TempResponseLength.isCustomized()) {3309 if (responseLengthCustomized && TempResponseLength.isCustomized()) {
3287 TempResponseLength.restore(api);3310 TempResponseLength.restore(api);
3288 TempResponseLength.removeEventHook(api, eventHook);3311 TempResponseLength.removeEventHook(api, eventHook);