diff --git a/.changeset/little-news-warn.md b/.changeset/little-news-warn.md new file mode 100644 index 0000000000..d7b898bacf --- /dev/null +++ b/.changeset/little-news-warn.md @@ -0,0 +1,5 @@ +--- +"roo-cline": major +--- + +Fixes bug with context condensing on Amazon Bedrock diff --git a/src/core/condense/__tests__/index.test.ts b/src/core/condense/__tests__/index.test.ts index 81994f3f5b..468ddbd575 100644 --- a/src/core/condense/__tests__/index.test.ts +++ b/src/core/condense/__tests__/index.test.ts @@ -36,7 +36,7 @@ describe("getMessagesSinceLastSummary", () => { expect(result).toEqual(messages) }) - it("should return messages since the last summary", () => { + it("should return messages since the last summary with prepended user message", () => { const messages: ApiMessage[] = [ { role: "user", content: "Hello", ts: 1 }, { role: "assistant", content: "Hi there", ts: 2 }, @@ -47,13 +47,14 @@ describe("getMessagesSinceLastSummary", () => { const result = getMessagesSinceLastSummary(messages) expect(result).toEqual([ + { role: "user", content: "Please continue from the following summary:", ts: 0 }, { role: "assistant", content: "Summary of conversation", ts: 3, isSummary: true }, { role: "user", content: "How are you?", ts: 4 }, { role: "assistant", content: "I'm good", ts: 5 }, ]) }) - it("should handle multiple summary messages and return since the last one", () => { + it("should handle multiple summary messages and return since the last one with prepended user message", () => { const messages: ApiMessage[] = [ { role: "user", content: "Hello", ts: 1 }, { role: "assistant", content: "First summary", ts: 2, isSummary: true }, @@ -64,6 +65,7 @@ describe("getMessagesSinceLastSummary", () => { const result = getMessagesSinceLastSummary(messages) expect(result).toEqual([ + { role: "user", content: "Please continue from the following summary:", ts: 0 }, { role: "assistant", content: "Second summary", ts: 4, isSummary: true }, { role: "user", content: "What's new?", ts: 5 }, ]) diff --git a/src/core/condense/index.ts b/src/core/condense/index.ts index 07c52713ef..8a8b57bb0c 100644 --- a/src/core/condense/index.ts +++ b/src/core/condense/index.ts @@ -213,5 +213,14 @@ export function getMessagesSinceLastSummary(messages: ApiMessage[]): ApiMessage[ } const lastSummaryIndex = messages.length - lastSummaryIndexReverse - 1 - return messages.slice(lastSummaryIndex) + const messagesSinceSummary = messages.slice(lastSummaryIndex) + + // Bedrock requires the first message to be a user message. + // See https://github.com/RooCodeInc/Roo-Code/issues/4147 + const userMessage: ApiMessage = { + role: "user", + content: "Please continue from the following summary:", + ts: messages[0]?.ts ? messages[0].ts - 1 : Date.now(), + } + return [userMessage, ...messagesSinceSummary] }