Skip to content

Commit ab7cb28

Browse files
committed
[Condense] Add a button to condense the task context
1 parent f46e14d commit ab7cb28

File tree

6 files changed

+36
-1
lines changed

6 files changed

+36
-1
lines changed

src/core/task/Task.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ import {
8080
} from "../checkpoints"
8181
import { processUserContentMentions } from "../mentions/processUserContentMentions"
8282
import { ApiMessage } from "../task-persistence/apiMessages"
83-
import { getMessagesSinceLastSummary } from "../condense"
83+
import { getMessagesSinceLastSummary, summarizeConversation } from "../condense"
8484
import { maybeRemoveImageBlocks } from "../../api/transform/image-cleaning"
8585

8686
export type ClineEvents = {
@@ -488,6 +488,13 @@ export class Task extends EventEmitter<ClineEvents> {
488488
}
489489
}
490490

491+
public async condenseContext(): Promise<void> {
492+
const messages = await summarizeConversation(this.apiConversationHistory, this.api)
493+
if (messages !== this.apiConversationHistory) {
494+
this.overwriteApiConversationHistory(messages)
495+
}
496+
}
497+
491498
async say(
492499
type: ClineSay,
493500
text?: string,

src/core/webview/ClineProvider.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1133,6 +1133,22 @@ export class ClineProvider extends EventEmitter<ClineProviderEvents> implements
11331133
await downloadTask(historyItem.ts, apiConversationHistory)
11341134
}
11351135

1136+
/* Condenses a task's message history to use fewer tokens. */
1137+
async condenseTaskContext(taskId: string) {
1138+
let task = undefined
1139+
for (let i = this.clineStack.length - 1; i >= 0; i--) {
1140+
if (this.clineStack[i].taskId === taskId) {
1141+
task = this.clineStack[i]
1142+
break
1143+
}
1144+
}
1145+
if (!task) {
1146+
const { historyItem } = await this.getTaskWithId(taskId)
1147+
task = await this.initClineWithHistoryItem(historyItem)
1148+
}
1149+
await task.condenseContext()
1150+
}
1151+
11361152
// this function deletes a task from task hidtory, and deletes it's checkpoints and delete the task folder
11371153
async deleteTaskWithId(id: string) {
11381154
try {

src/core/webview/webviewMessageHandler.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,9 @@ export const webviewMessageHandler = async (provider: ClineProvider, message: We
195195
case "showTaskWithId":
196196
provider.showTaskWithId(message.text!)
197197
break
198+
case "condenseTaskContext":
199+
provider.condenseTaskContext(message.text!)
200+
break
198201
case "deleteTaskWithId":
199202
provider.deleteTaskWithId(message.text!)
200203
break

src/shared/WebviewMessage.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ export interface WebviewMessage {
130130
| "searchFiles"
131131
| "toggleApiConfigPin"
132132
| "setHistoryPreviewCollapsed"
133+
| "condenseTaskContext"
133134
text?: string
134135
disabled?: boolean
135136
askResponse?: ClineAskResponse

webview-ui/src/components/chat/TaskActions.tsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@ export const TaskActions = ({ item }: { item: HistoryItem | undefined }) => {
2424
</Button>
2525
{!!item?.size && item.size > 0 && (
2626
<>
27+
<Button
28+
variant="ghost"
29+
size="sm"
30+
title={t("chat:task.condenseContext")}
31+
onClick={() => vscode.postMessage({ type: "condenseTaskContext", text: item?.id })}>
32+
<span className="codicon codicon-file-zip" />
33+
</Button>
2734
<Button
2835
variant="ghost"
2936
size="sm"

webview-ui/src/i18n/locales/en/chat.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
"tokens": "Tokens:",
88
"cache": "Cache:",
99
"apiCost": "API Cost:",
10+
"condenseContext": "Condense task context",
1011
"contextWindow": "Context Length:",
1112
"closeAndStart": "Close task and start a new one",
1213
"export": "Export task history",

0 commit comments

Comments
 (0)