Skip to content

Commit c5fd1c3

Browse files
authored
fix(continue): fix continue feature (#1459)
* fix(continue): more reliable end token stripping before we would try to strip end tokens once in order from the stop array, now we strip all end tokens from the array until we can't anymore * fix(tools): remove generation prompt in continue mode
1 parent 7fafb23 commit c5fd1c3

File tree

3 files changed

+23
-9
lines changed

3 files changed

+23
-9
lines changed

src/lib/buildPrompt.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,19 +28,28 @@ export async function buildPrompt({
2828
preprompt,
2929
tools,
3030
toolResults,
31+
continueMessage,
3132
})
3233
// Not super precise, but it's truncated in the model's backend anyway
3334
.split(" ")
3435
.slice(-(model.parameters?.truncate ?? 0))
3536
.join(" ");
3637

3738
if (continueMessage && model.parameters?.stop) {
38-
prompt = model.parameters.stop.reduce((acc: string, curr: string) => {
39-
if (acc.endsWith(curr)) {
40-
return acc.slice(0, acc.length - curr.length);
39+
let trimmedPrompt = prompt.trimEnd();
40+
let hasRemovedStop = true;
41+
while (hasRemovedStop) {
42+
hasRemovedStop = false;
43+
for (const stopToken of model.parameters.stop) {
44+
if (trimmedPrompt.endsWith(stopToken)) {
45+
trimmedPrompt = trimmedPrompt.slice(0, -stopToken.length);
46+
hasRemovedStop = true;
47+
break;
48+
}
4149
}
42-
return acc;
43-
}, prompt.trimEnd());
50+
trimmedPrompt = trimmedPrompt.trimEnd();
51+
}
52+
prompt = trimmedPrompt;
4453
}
4554

4655
return prompt;

src/lib/server/models.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,13 @@ async function getChatPromptRender(
9494
process.exit();
9595
}
9696

97-
const renderTemplate = ({ messages, preprompt, tools, toolResults }: ChatTemplateInput) => {
97+
const renderTemplate = ({
98+
messages,
99+
preprompt,
100+
tools,
101+
toolResults,
102+
continueMessage,
103+
}: ChatTemplateInput) => {
98104
let formattedMessages: { role: string; content: string }[] = messages.map((message) => ({
99105
content: message.content,
100106
role: message.from,
@@ -222,10 +228,8 @@ async function getChatPromptRender(
222228

223229
const output = tokenizer.apply_chat_template(formattedMessages, {
224230
tokenize: false,
225-
add_generation_prompt: true,
231+
add_generation_prompt: !continueMessage,
226232
chat_template: chatTemplate,
227-
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
228-
// @ts-ignore
229233
tools: mappedTools,
230234
documents,
231235
});

src/lib/types/Template.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ export type ChatTemplateInput = {
66
preprompt?: string;
77
tools?: Tool[];
88
toolResults?: ToolResult[];
9+
continueMessage?: boolean;
910
};

0 commit comments

Comments
 (0)