Merge pull request #3989 from bmen25124/prefill_custom_request Added prefill for custom-request->text completion

ad15e4f172ac77ecfdac9e571df690220dd5c9db

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

Signed
1 files changed, +27 -2Showing whitespace changes
public/scripts/custom-request.js+27 -2
@@ -242,9 +242,16 @@ export class TextCompletionService {
242242
243 // Format messages using instruct formatting243 // Format messages using instruct formatting
244 const formattedMessages = [];244 const formattedMessages = [];
245 const prefillActive = prompt.length > 0 ? prompt[prompt.length - 1].role === 'assistant' : false;
245 for (const message of prompt) {246 for (const message of prompt) {
246 let messageContent = message.content;247 let messageContent = message.content;
247 if (!message.ignoreInstruct) {248 if (!message.ignoreInstruct) {
249 const isLastMessage = message === prompt[prompt.length - 1];
250
251 // This complicated logic means:
252 // 1. If prefill is not active, format all messages
253 // 2. If prefill is active, format all messages except the last one
254 if (!isLastMessage || !prefillActive) {
248 messageContent = formatInstructModeChat(255 messageContent = formatInstructModeChat(
249 message.role,256 message.role,
250 message.content,257 message.content,
@@ -256,9 +263,11 @@ export class TextCompletionService {
256 undefined,263 undefined,
257 instructPreset,264 instructPreset,
258 );265 );
266 }
259267
260 // Add prompt formatting for the last message268 // Add prompt formatting for the last message.
261 if (message === prompt[prompt.length - 1]) {269 if (isLastMessage) {
270 if (!prefillActive) { // e.g. "<|im_start|>user:"
262 messageContent += formatInstructModePrompt(271 messageContent += formatInstructModePrompt(
263 undefined,272 undefined,
264 false,273 false,
@@ -269,6 +278,22 @@ export class TextCompletionService {
269 false,278 false,
270 instructPreset,279 instructPreset,
271 );280 );
281 } else { // e.g. "<|im_start|>assistant: Hello, my name is"
282 const overridenInstructPreset = structuredClone(instructPreset);
283 overridenInstructPreset.output_suffix = '';
284 overridenInstructPreset.wrap = false;
285 messageContent = formatInstructModeChat(
286 message.role,
287 message.content,
288 false, // since it is assistant
289 false,
290 undefined,
291 undefined,
292 undefined,
293 undefined,
294 overridenInstructPreset,
295 );
296 }
272 }297 }
273 }298 }
274 formattedMessages.push(messageContent);299 formattedMessages.push(messageContent);