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
243243 // Format messages using instruct formatting
244244 const formattedMessages = [];
245+ const prefillActive = prompt.length > 0 ? prompt[prompt.length - 1].role === 'assistant' : false;
245246 for (const message of prompt) {
246247 let messageContent = message.content;
247248 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) {
248255 messageContent = formatInstructModeChat(
249256 message.role,
250257 message.content,
@@ -256,9 +263,11 @@ export class TextCompletionService {
256263 undefined,
257264 instructPreset,
258265 );
266+ }
259267
260268 // 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:"
262271 messageContent += formatInstructModePrompt(
263272 undefined,
264273 false,
@@ -269,6 +278,22 @@ export class TextCompletionService {
269278 false,
270279 instructPreset,
271280 );
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+ }
272297 }
273298 }
274299 formattedMessages.push(messageContent);