Skip to content

Commit 8d6b71f

Browse files
committed
use actual messages rather than injecting them in the prompt
1 parent 0f4cfec commit 8d6b71f

File tree

1 file changed

+14
-28
lines changed

1 file changed

+14
-28
lines changed

src/core/condense/index.ts

Lines changed: 14 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import Anthropic from "@anthropic-ai/sdk"
12
import { ApiHandler } from "../../api"
23
import { ApiMessage } from "../task-persistence/apiMessages"
34

@@ -40,10 +41,7 @@ Example summary structure:
4041
- [Task 2 details & next steps]
4142
- [...]
4243
43-
The conversation history which you should summarize is included below. Output only the summary, without any additional commentary or explanation.
44-
### BEGIN CONVERSATION HISTORY
45-
{messages}
46-
### END CONVERSATION HISTORY
44+
Output only the summary of the conversation so far, without any additional commentary or explanation.
4745
`
4846

4947
/**
@@ -69,12 +67,19 @@ export async function summarizeConversationIfNeeded(
6967
}
7068

7169
async function summarizeConversation(messages: ApiMessage[], apiHandler: ApiHandler): Promise<ApiMessage[]> {
72-
if (messages.length < 2) {
70+
if (messages.length <= 2) {
7371
return messages
7472
}
75-
const messagesToSummarize = messages.slice(0, -1)
76-
const summaryPrompt = getSummaryPrompt(messagesToSummarize)
77-
const stream = apiHandler.createMessage(summaryPrompt, [])
73+
if (messages[messages.length - 2].isSummary || messages[messages.length - 1].isSummary) {
74+
return messages
75+
}
76+
const finalRequestMessage: Anthropic.MessageParam = {
77+
role: "user",
78+
content: "Summarize the conversation so far, as described in the prompt instructions.",
79+
}
80+
const messagesToSummarize = [...messages.slice(0, -1), finalRequestMessage]
81+
82+
const stream = apiHandler.createMessage(SUMMARY_PROMPT, messagesToSummarize)
7883
let summary = ""
7984
for await (const chunk of stream) {
8085
if (chunk.type === "text") {
@@ -93,24 +98,5 @@ async function summarizeConversation(messages: ApiMessage[], apiHandler: ApiHand
9398
isSummary: true,
9499
}
95100

96-
return [...messagesToSummarize, summaryMessage, messages[messages.length - 1]]
97-
}
98-
99-
function getSummaryPrompt(messages: ApiMessage[]): string {
100-
return SUMMARY_PROMPT.replace("{messages}", getMessageStr(messages))
101-
}
102-
103-
function getMessageStr(messages: ApiMessage[]): string {
104-
let messageStr = ""
105-
for (const message of messages) {
106-
if (message.role === "user") {
107-
messageStr += "# User:"
108-
} else if (message.role === "assistant") {
109-
messageStr += "# Assistant:"
110-
} else {
111-
continue
112-
}
113-
messageStr += `\n${message.content}\n\n`
114-
}
115-
return messageStr
101+
return [...messages.slice(0, -1), summaryMessage, messages[messages.length - 1]]
116102
}

0 commit comments

Comments
 (0)