Skip to content

Commit 12dd23b

Browse files
csmith49Calvin Smith
and
Calvin Smith
authored
Enable memory condensation from the frontend (#6333)
Co-authored-by: Calvin Smith <[email protected]>
1 parent 9611093 commit 12dd23b

File tree

8 files changed

+30
-1
lines changed

8 files changed

+30
-1
lines changed

Diff for: frontend/src/components/shared/modals/settings/settings-form.tsx

+7-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import { ModelSelector } from "./model-selector";
2323
import { RuntimeSizeSelector } from "./runtime-size-selector";
2424
import { useConfig } from "#/hooks/query/use-config";
2525
import { useCurrentSettings } from "#/context/settings-context";
26+
import { MEMORY_CONDENSER } from "#/utils/feature-flags";
2627

2728
interface SettingsFormProps {
2829
disabled?: boolean;
@@ -64,12 +65,14 @@ export function SettingsForm({
6465
const isUsingConfirmationMode = !!settings.CONFIRMATION_MODE;
6566
const isUsingBaseUrl = !!settings.LLM_BASE_URL;
6667
const isUsingCustomModel = !!settings.LLM_MODEL && !isKnownModel;
68+
const isUsingDefaultCondenser = !!settings.ENABLE_DEFAULT_CONDENSER;
6769

6870
return (
6971
isUsingSecurityAnalyzer ||
7072
isUsingConfirmationMode ||
7173
isUsingBaseUrl ||
72-
isUsingCustomModel
74+
isUsingCustomModel ||
75+
isUsingDefaultCondenser
7376
);
7477
}
7578

@@ -94,6 +97,9 @@ export function SettingsForm({
9497
const isUsingAdvancedOptions = keys.includes("use-advanced-options");
9598
const newSettings = extractSettings(formData);
9699

100+
// Inject the condenser config from the current feature flag value
101+
newSettings.ENABLE_DEFAULT_CONDENSER = MEMORY_CONDENSER;
102+
97103
saveSettingsView(isUsingAdvancedOptions ? "advanced" : "basic");
98104
await saveUserSettings(newSettings);
99105
onClose();

Diff for: frontend/src/hooks/mutation/use-save-settings.ts

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ const saveSettingsMutationFn = async (settings: Partial<Settings>) => {
1111
confirmation_mode: settings.CONFIRMATION_MODE,
1212
security_analyzer: settings.SECURITY_ANALYZER,
1313
llm_api_key: settings.LLM_API_KEY?.trim() || undefined,
14+
enable_default_condenser: settings.ENABLE_DEFAULT_CONDENSER,
1415
};
1516

1617
await OpenHands.saveSettings(apiSettings);

Diff for: frontend/src/hooks/query/use-settings.ts

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ const getSettingsQueryFn = async () => {
2020
LLM_API_KEY: apiSettings.llm_api_key,
2121
REMOTE_RUNTIME_RESOURCE_FACTOR:
2222
apiSettings.remote_runtime_resource_factor,
23+
ENABLE_DEFAULT_CONDENSER: apiSettings.enable_default_condenser,
2324
};
2425
}
2526

Diff for: frontend/src/i18n/translation.json

+3
Original file line numberDiff line numberDiff line change
@@ -4506,5 +4506,8 @@
45064506
"fr": "Que voulez-vous construire ?",
45074507
"tr": "Ne inşa etmek istiyorsun?",
45084508
"de": "Was möchten Sie erstellen?"
4509+
},
4510+
"SETTINGS_FORM$ENABLE_DEFAULT_CONDENSER_SWITCH_LABEL": {
4511+
"en": "Enable Memory Condenser"
45094512
}
45104513
}

Diff for: frontend/src/services/settings.ts

+7
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export type Settings = {
99
CONFIRMATION_MODE: boolean;
1010
SECURITY_ANALYZER: string;
1111
REMOTE_RUNTIME_RESOURCE_FACTOR: number;
12+
ENABLE_DEFAULT_CONDENSER: boolean;
1213
};
1314

1415
export type ApiSettings = {
@@ -20,6 +21,7 @@ export type ApiSettings = {
2021
confirmation_mode: boolean;
2122
security_analyzer: string;
2223
remote_runtime_resource_factor: number;
24+
enable_default_condenser: boolean;
2325
};
2426

2527
export const DEFAULT_SETTINGS: Settings = {
@@ -31,6 +33,7 @@ export const DEFAULT_SETTINGS: Settings = {
3133
CONFIRMATION_MODE: false,
3234
SECURITY_ANALYZER: "",
3335
REMOTE_RUNTIME_RESOURCE_FACTOR: 1,
36+
ENABLE_DEFAULT_CONDENSER: false,
3437
};
3538

3639
export const getCurrentSettingsVersion = () => {
@@ -60,6 +63,8 @@ export const getLocalStorageSettings = (): Settings => {
6063
const llmApiKey = localStorage.getItem("LLM_API_KEY");
6164
const confirmationMode = localStorage.getItem("CONFIRMATION_MODE") === "true";
6265
const securityAnalyzer = localStorage.getItem("SECURITY_ANALYZER");
66+
const enableDefaultCondenser =
67+
localStorage.getItem("ENABLE_DEFAULT_CONDENSER") === "true";
6368

6469
return {
6570
LLM_MODEL: llmModel || DEFAULT_SETTINGS.LLM_MODEL,
@@ -71,6 +76,8 @@ export const getLocalStorageSettings = (): Settings => {
7176
SECURITY_ANALYZER: securityAnalyzer || DEFAULT_SETTINGS.SECURITY_ANALYZER,
7277
REMOTE_RUNTIME_RESOURCE_FACTOR:
7378
DEFAULT_SETTINGS.REMOTE_RUNTIME_RESOURCE_FACTOR,
79+
ENABLE_DEFAULT_CONDENSER:
80+
enableDefaultCondenser || DEFAULT_SETTINGS.ENABLE_DEFAULT_CONDENSER,
7481
};
7582
};
7683

Diff for: frontend/src/utils/feature-flags.ts

+1
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,4 @@ function loadFeatureFlag(
1313
}
1414

1515
export const MULTI_CONVERSATION_UI = loadFeatureFlag("MULTI_CONVERSATION_UI");
16+
export const MEMORY_CONDENSER = loadFeatureFlag("MEMORY_CONDENSER");

Diff for: openhands/server/session/session.py

+9
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
from openhands.controller.agent import Agent
88
from openhands.core.config import AppConfig
9+
from openhands.core.config.condenser_config import AmortizedForgettingCondenserConfig
910
from openhands.core.const.guide_url import TROUBLESHOOTING_URL
1011
from openhands.core.logger import openhands_logger as logger
1112
from openhands.core.schema import AgentState
@@ -105,6 +106,14 @@ async def initialize_agent(
105106

106107
llm = LLM(config=self.config.get_llm_config_from_agent(agent_cls))
107108
agent_config = self.config.get_agent_config(agent_cls)
109+
110+
if settings.enable_default_condenser:
111+
default_condenser_config = AmortizedForgettingCondenserConfig(
112+
keep_first=3, max_size=20
113+
)
114+
logger.info(f'Enabling default condenser: {default_condenser_config}')
115+
agent_config.condenser = default_condenser_config
116+
108117
agent = Agent.get_cls(agent_cls)(llm, agent_config)
109118

110119
github_token = None

Diff for: openhands/server/settings.py

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ class Settings(BaseModel):
2121
llm_api_key: SecretStr | None = None
2222
llm_base_url: str | None = None
2323
remote_runtime_resource_factor: int | None = None
24+
enable_default_condenser: bool = False
2425

2526
@field_serializer('llm_api_key')
2627
def llm_api_key_serializer(self, llm_api_key: SecretStr, info: SerializationInfo):

0 commit comments

Comments
 (0)