[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
This commit is contained in:
Canyon Robins 2025-05-30 14:25:05 -07:00 committed by GitHub
parent 9ba0cd5c7a
commit da63d1e590
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 19 additions and 3 deletions

View file

@ -0,0 +1,5 @@
---
"roo-cline": major
---
Fixes bug with context condensing on Amazon Bedrock

View file

@ -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 },
])

View file

@ -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]
}