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, +43 -18Ignore whitespace
public/scripts/custom-request.js+43 -18
@@ -242,34 +242,59 @@ 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) {
248- messageContent = formatInstructModeChat(
249+ const isLastMessage = message === prompt[prompt.length - 1];
249- message.role,
250+
250- message.content,
251+ // This complicated logic means:
251- message.role === 'user',
252+ // 1. If prefill is not active, format all messages
252- false,
253+ // 2. If prefill is active, format all messages except the last one
253- undefined,
254+ if (!isLastMessage || !prefillActive) {
254- undefined,
255+ messageContent = formatInstructModeChat(
255- undefined,
256+ message.role,
256- undefined,
257+ message.content,
257- instructPreset,
258+ message.role === 'user',
258- );
259-
260- // Add prompt formatting for the last message
261- if (message === prompt[prompt.length - 1]) {
262- messageContent += formatInstructModePrompt(
263- undefined,
264259 false,
265260 undefined,
266261 undefined,
267262 undefined,
268263 falseundefined,
269- false,
270264 instructPreset,
271265 );
272266 }
267+
268+ // Add prompt formatting for the last message.
269+ if (isLastMessage) {
270+ if (!prefillActive) { // e.g. "<|im_start|>user:"
271+ messageContent += formatInstructModePrompt(
272+ undefined,
273+ false,
274+ undefined,
275+ undefined,
276+ undefined,
277+ false,
278+ false,
279+ instructPreset,
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+ }
297+ }
273298 }
274299 formattedMessages.push(messageContent);
275300 }