openhands / src /utils /cache-utils.ts
SaylorTwift's picture
SaylorTwift HF Staff
Add files using upload-large-folder tool
a070805 verified
Raw
History Blame Contribute Delete
1.95 kB
import { QueryClient } from "@tanstack/react-query";
import type { ActionEvent } from "#/types/agent-server/core/events/action-event";
import { useModelStore } from "#/stores/model-store";
import { stripWorkspacePrefix } from "./path-utils";
/**
* Cache invalidation utilities for TanStack Query
*/
/**
* Handle cache invalidation for ActionEvent
* Invalidates relevant query caches based on the action type
*
* @param event - The ActionEvent to process
* @param conversationId - The conversation ID for cache keys
* @param queryClient - The TanStack Query client instance
*/
export const handleActionEventCacheInvalidation = (
event: ActionEvent,
conversationId: string,
queryClient: QueryClient,
) => {
const { action } = event;
// Invalidate file_changes cache for file-related actions
if (
action.kind === "StrReplaceEditorAction" ||
action.kind === "FileEditorAction" ||
action.kind === "ExecuteBashAction"
) {
queryClient.invalidateQueries(
{
queryKey: ["file_changes", conversationId],
},
{ cancelRefetch: false },
);
}
// Invalidate specific file diff cache for file modifications
if (
(action.kind === "StrReplaceEditorAction" ||
action.kind === "FileEditorAction") &&
action.path
) {
const strippedPath = stripWorkspacePrefix(action.path);
queryClient.invalidateQueries({
queryKey: ["file_diff", conversationId, strippedPath],
});
}
// When the agent autonomously swaps the LLM via SwitchLLMTool, refresh the
// conversation so SwitchProfileButton / ChatInputModel pick up the new
// `llm_model`, and drop any previously-set optimistic profile name (it
// would now misrepresent the agent's choice).
if (event.tool_name === "SwitchLLMTool") {
queryClient.invalidateQueries({
queryKey: ["user", "conversation", conversationId],
});
useModelStore.getState().clearActiveProfile(conversationId);
}
};