Added prefill for custom-request->text completion
| @@ -242,9 +242,16 @@ export class TextCompletionService { | |||
| 242 | 242 | ||
| 243 | // Format messages using instruct formatting | 243 | // Format messages using instruct formatting |
| 244 | const formattedMessages = []; | 244 | const formattedMessages = []; |
| 245 | const prefillActive = prompt[prompt.length - 1].role === 'assistant'; | ||
| 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 | } | ||
| 259 | 267 | ||
| 260 | // Add prompt formatting for the last message | 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 | 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); |