From c2c1c5451e43bffb5d94dc43d3d82980c0db401c Mon Sep 17 00:00:00 2001 From: Michael Bleigh Date: Wed, 28 Aug 2024 22:42:31 -0700 Subject: [PATCH 1/2] Fixes history rendering of Dotprompt system role. --- js/plugins/dotprompt/src/template.ts | 14 +++++++++----- js/plugins/dotprompt/tests/prompt_test.ts | 19 +++++++++++++++++++ 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/js/plugins/dotprompt/src/template.ts b/js/plugins/dotprompt/src/template.ts index 020f9fad9b..10e07cba4b 100644 --- a/js/plugins/dotprompt/src/template.ts +++ b/js/plugins/dotprompt/src/template.ts @@ -115,11 +115,15 @@ function toMessages( ) return messages; - return [ - ...messages.slice(0, -1), - ...options.history, - messages.at(-1), - ] as MessageData[]; + if (messages.at(-1)?.role === 'user') { + return [ + ...messages.slice(0, -1), + ...options.history, + messages.at(-1), + ] as MessageData[]; + } + + return [...messages, ...options.history] as MessageData[]; } const PART_REGEX = /(<<>>/g; diff --git a/js/plugins/dotprompt/tests/prompt_test.ts b/js/plugins/dotprompt/tests/prompt_test.ts index c9a386141c..ac012a55d3 100644 --- a/js/plugins/dotprompt/tests/prompt_test.ts +++ b/js/plugins/dotprompt/tests/prompt_test.ts @@ -105,6 +105,25 @@ describe('Prompt', () => { assert.strictEqual(rendered.streamingCallback, streamingCallback); assert.strictEqual(rendered.returnToolRequests, true); }); + + it('should support system prompt with history', async () => { + const prompt = testPrompt(`{{ role "system" }}Testing system {{name}}`); + + const rendered = await prompt.render({ + input: { name: 'Michael' }, + history: [ + { role: 'user', content: [{ text: 'history 1' }] }, + { role: 'model', content: [{ text: 'history 2' }] }, + { role: 'user', content: [{ text: 'history 3' }] }, + ], + }); + assert.deepStrictEqual(rendered.history, [ + { role: 'system', content: [{ text: 'Testing system Michael' }] }, + { role: 'user', content: [{ text: 'history 1' }] }, + { role: 'model', content: [{ text: 'history 2' }] }, + ]); + assert.deepStrictEqual(rendered.prompt, [{ text: 'history 3' }]); + }); }); describe('#generate', () => { From 257376e5af1f1f57ba9b501fac46db73b3226929 Mon Sep 17 00:00:00 2001 From: Michael Bleigh Date: Wed, 28 Aug 2024 22:44:41 -0700 Subject: [PATCH 2/2] format --- js/ai/tests/generate/generate_test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/ai/tests/generate/generate_test.ts b/js/ai/tests/generate/generate_test.ts index a20d856f2b..67173d6da7 100644 --- a/js/ai/tests/generate/generate_test.ts +++ b/js/ai/tests/generate/generate_test.ts @@ -17,7 +17,7 @@ import assert from 'node:assert'; import { describe, it } from 'node:test'; import { z } from 'zod'; -import { generate, GenerateResponseChunk } from '../../src/generate'; +import { GenerateResponseChunk, generate } from '../../src/generate'; import { Candidate, GenerateOptions, @@ -25,7 +25,7 @@ import { Message, toGenerateRequest, } from '../../src/generate.js'; -import { defineModel, GenerateResponseChunkData } from '../../src/model'; +import { GenerateResponseChunkData, defineModel } from '../../src/model'; import { CandidateData, GenerateRequest,