From 12a9d357a1d4dd8b800e16a03e0270d80a97ce25 Mon Sep 17 00:00:00 2001 From: Brace Sproul Date: Tue, 22 Jul 2025 12:37:37 -0700 Subject: [PATCH] fix: Caching and prompting fixes (#474) --- .../graphs/planner/nodes/generate-message/index.ts | 10 ++++------ .../graphs/programmer/nodes/generate-message/index.ts | 11 ++++------- .../reviewer/nodes/generate-review-actions/index.ts | 5 +++++ apps/open-swe/src/utils/user-request.ts | 4 ++-- 4 files changed, 15 insertions(+), 15 deletions(-) diff --git a/apps/open-swe/src/graphs/planner/nodes/generate-message/index.ts b/apps/open-swe/src/graphs/planner/nodes/generate-message/index.ts index 3c8d73c9..dc840cbc 100644 --- a/apps/open-swe/src/graphs/planner/nodes/generate-message/index.ts +++ b/apps/open-swe/src/graphs/planner/nodes/generate-message/index.ts @@ -86,12 +86,10 @@ export async function generateAction( `MCP tools added to Planner: ${mcpTools.map((t) => t.name).join(", ")}`, ); // Cache Breakpoint 1: Add cache_control marker to the last tool for tools definition caching - if (tools.length > 0) { - tools[tools.length - 1] = { - ...tools[tools.length - 1], - cache_control: { type: "ephemeral" }, - } as any; - } + tools[tools.length - 1] = { + ...tools[tools.length - 1], + cache_control: { type: "ephemeral" }, + } as any; const modelWithTools = model.bindTools(tools, { tool_choice: "auto", diff --git a/apps/open-swe/src/graphs/programmer/nodes/generate-message/index.ts b/apps/open-swe/src/graphs/programmer/nodes/generate-message/index.ts index 0e2e8177..7ac49617 100644 --- a/apps/open-swe/src/graphs/programmer/nodes/generate-message/index.ts +++ b/apps/open-swe/src/graphs/programmer/nodes/generate-message/index.ts @@ -137,14 +137,11 @@ export async function generateAction( logger.info( `MCP tools added to Programmer: ${mcpTools.map((t) => t.name).join(", ")}`, ); - // Cache Breakpoint 1: Add cache_control marker to the last tool for tools definition caching - if (tools.length > 0) { - tools[tools.length - 1] = { - ...tools[tools.length - 1], - cache_control: { type: "ephemeral" }, - } as any; - } + tools[tools.length - 1] = { + ...tools[tools.length - 1], + cache_control: { type: "ephemeral" }, + } as any; const modelWithTools = model.bindTools(tools, { tool_choice: "auto", diff --git a/apps/open-swe/src/graphs/reviewer/nodes/generate-review-actions/index.ts b/apps/open-swe/src/graphs/reviewer/nodes/generate-review-actions/index.ts index 2a5c70ef..85357cfd 100644 --- a/apps/open-swe/src/graphs/reviewer/nodes/generate-review-actions/index.ts +++ b/apps/open-swe/src/graphs/reviewer/nodes/generate-review-actions/index.ts @@ -120,6 +120,11 @@ export async function generateReviewActions( createShellTool(state), createInstallDependenciesTool(state), ]; + tools[tools.length - 1] = { + ...tools[tools.length - 1], + cache_control: { type: "ephemeral" }, + } as any; + const modelWithTools = model.bindTools(tools, { tool_choice: "auto", ...(modelSupportsParallelToolCallsParam diff --git a/apps/open-swe/src/utils/user-request.ts b/apps/open-swe/src/utils/user-request.ts index 8ebfaf24..050d5d69 100644 --- a/apps/open-swe/src/utils/user-request.ts +++ b/apps/open-swe/src/utils/user-request.ts @@ -89,10 +89,10 @@ export function formatUserRequestPrompt( const userFollowupRequest = getRecentUserRequest(messages); if (userFollowupRequest) { - return singleRequestPrompt + return followupRequestPrompt .replace("{USER_REQUEST}", userRequest) .replace("{USER_FOLLOWUP_REQUEST}", userFollowupRequest); } - return followupRequestPrompt.replace("{USER_REQUEST}", userRequest); + return singleRequestPrompt.replace("{USER_REQUEST}", userRequest); }