Skip to content

Commit da63d1e

Browse files
authored
[Condense] Fix bug where bedrock requires a user message first (#4150)
* [Condense] Fix bug where bedrock requires a user message first * update tests * Revert previous commits * always prepend user message * fix tests * changeset
1 parent 9ba0cd5 commit da63d1e

File tree

3 files changed

+19
-3
lines changed

3 files changed

+19
-3
lines changed

.changeset/little-news-warn.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"roo-cline": major
3+
---
4+
5+
Fixes bug with context condensing on Amazon Bedrock

src/core/condense/__tests__/index.test.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ describe("getMessagesSinceLastSummary", () => {
3636
expect(result).toEqual(messages)
3737
})
3838

39-
it("should return messages since the last summary", () => {
39+
it("should return messages since the last summary with prepended user message", () => {
4040
const messages: ApiMessage[] = [
4141
{ role: "user", content: "Hello", ts: 1 },
4242
{ role: "assistant", content: "Hi there", ts: 2 },
@@ -47,13 +47,14 @@ describe("getMessagesSinceLastSummary", () => {
4747

4848
const result = getMessagesSinceLastSummary(messages)
4949
expect(result).toEqual([
50+
{ role: "user", content: "Please continue from the following summary:", ts: 0 },
5051
{ role: "assistant", content: "Summary of conversation", ts: 3, isSummary: true },
5152
{ role: "user", content: "How are you?", ts: 4 },
5253
{ role: "assistant", content: "I'm good", ts: 5 },
5354
])
5455
})
5556

56-
it("should handle multiple summary messages and return since the last one", () => {
57+
it("should handle multiple summary messages and return since the last one with prepended user message", () => {
5758
const messages: ApiMessage[] = [
5859
{ role: "user", content: "Hello", ts: 1 },
5960
{ role: "assistant", content: "First summary", ts: 2, isSummary: true },
@@ -64,6 +65,7 @@ describe("getMessagesSinceLastSummary", () => {
6465

6566
const result = getMessagesSinceLastSummary(messages)
6667
expect(result).toEqual([
68+
{ role: "user", content: "Please continue from the following summary:", ts: 0 },
6769
{ role: "assistant", content: "Second summary", ts: 4, isSummary: true },
6870
{ role: "user", content: "What's new?", ts: 5 },
6971
])

src/core/condense/index.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,5 +213,14 @@ export function getMessagesSinceLastSummary(messages: ApiMessage[]): ApiMessage[
213213
}
214214

215215
const lastSummaryIndex = messages.length - lastSummaryIndexReverse - 1
216-
return messages.slice(lastSummaryIndex)
216+
const messagesSinceSummary = messages.slice(lastSummaryIndex)
217+
218+
// Bedrock requires the first message to be a user message.
219+
// See https://github.com/RooCodeInc/Roo-Code/issues/4147
220+
const userMessage: ApiMessage = {
221+
role: "user",
222+
content: "Please continue from the following summary:",
223+
ts: messages[0]?.ts ? messages[0].ts - 1 : Date.now(),
224+
}
225+
return [userMessage, ...messagesSinceSummary]
217226
}

0 commit comments

Comments
 (0)