Added prefill for custom-request->text completion
| @@ -242,9 +242,16 @@ export class TextCompletionService { | ||
| 242 | 242 | |
| 243 | 243 | // Format messages using instruct formatting |
| 244 | 244 | const formattedMessages = []; |
| 245 | + const prefillActive = prompt[prompt.length - 1].role === 'assistant'; | |
| 245 | 246 | for (const message of prompt) { |
| 246 | 247 | let messageContent = message.content; |
| 247 | 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 | 255 | messageContent = formatInstructModeChat( |
| 249 | 256 | message.role, |
| 250 | 257 | message.content, |
| @@ -256,9 +263,11 @@ export class TextCompletionService { | ||
| 256 | 263 | undefined, |
| 257 | 264 | instructPreset, |
| 258 | 265 | ); |
| 266 | + } | |
| 259 | 267 | |
| 260 | 268 | // 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 | 271 | messageContent += formatInstructModePrompt( |
| 263 | 272 | undefined, |
| 264 | 273 | false, |
| @@ -269,6 +278,22 @@ export class TextCompletionService { | ||
| 269 | 278 | false, |
| 270 | 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 | 299 | formattedMessages.push(messageContent); |