Skip to content

Commit 8f22104

Browse files
committed
[Condense] Add a button to condense the task context
1 parent aff94e1 commit 8f22104

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
@@ -76,7 +76,7 @@ import {
7676
} from "../checkpoints"
7777
import { processUserContentMentions } from "../mentions/processUserContentMentions"
7878
import { ApiMessage } from "../task-persistence/apiMessages"
79-
import { getMessagesSinceLastSummary } from "../condense"
79+
import { getMessagesSinceLastSummary, summarizeConversation } from "../condense"
8080
import { maybeRemoveImageBlocks } from "../../api/transform/image-cleaning"
8181

8282
export type ClineEvents = {
@@ -480,6 +480,13 @@ export class Task extends EventEmitter<ClineEvents> {
480480
}
481481
}
482482

483+
public async condenseContext(): Promise<void> {
484+
const { messages } = await summarizeConversation(this.apiConversationHistory, this.api)
485+
if (messages !== this.apiConversationHistory) {
486+
this.overwriteApiConversationHistory(messages)
487+
}
488+
}
489+
483490
async say(
484491
type: ClineSay,
485492
text?: string,

src/core/webview/ClineProvider.ts

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

1112+
/* Condenses a task's message history to use fewer tokens. */
1113+
async condenseTaskContext(taskId: string) {
1114+
let task = undefined
1115+
for (let i = this.clineStack.length - 1; i >= 0; i--) {
1116+
if (this.clineStack[i].taskId === taskId) {
1117+
task = this.clineStack[i]
1118+
break
1119+
}
1120+
}
1121+
if (!task) {
1122+
const { historyItem } = await this.getTaskWithId(taskId)
1123+
task = await this.initClineWithHistoryItem(historyItem)
1124+
}
1125+
await task.condenseContext()
1126+
}
1127+
11121128
// this function deletes a task from task hidtory, and deletes it's checkpoints and delete the task folder
11131129
async deleteTaskWithId(id: string) {
11141130
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)