Skip to content

Commit 166397a

Browse files
committed
fix: align memory retrieval strategies with agentcore.json config
- Add actor_id=user_id to all retrieve_memories calls (was missing in Strands translator) - Pass memoryOption through to translators so generated Python code matches the strategies written to agentcore.json - shortTerm: no namespace-specific retrieval (no strategies in schema) - longAndShortTerm: retrieve from all three strategy namespaces (/users/{user_id}/facts, /users/{user_id}/preferences, /summaries/{user_id}/) matching SEMANTIC, USER_PREFERENCE, and SUMMARIZATION strategies
1 parent 7c08566 commit 166397a

5 files changed

Lines changed: 30 additions & 8 deletions

File tree

src/cli/operations/agent/import/__tests__/translator.test.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ describe('StrandsTranslator', () => {
4343
const translator = new StrandsTranslator(config, {
4444
agentConfig: config,
4545
enableMemory: false,
46+
memoryOption: 'none',
4647
enableObservability: true,
4748
});
4849
const result = translator.translate();
@@ -68,6 +69,7 @@ describe('StrandsTranslator', () => {
6869
const translator = new StrandsTranslator(config, {
6970
agentConfig: config,
7071
enableMemory: true,
72+
memoryOption: 'longAndShortTerm',
7173
enableObservability: false,
7274
});
7375
const result = translator.translate();
@@ -101,6 +103,7 @@ describe('StrandsTranslator', () => {
101103
const translator = new StrandsTranslator(config, {
102104
agentConfig: config,
103105
enableMemory: false,
106+
memoryOption: 'none',
104107
enableObservability: false,
105108
});
106109
const result = translator.translate();
@@ -125,6 +128,7 @@ describe('StrandsTranslator', () => {
125128
const translator = new StrandsTranslator(config, {
126129
agentConfig: config,
127130
enableMemory: false,
131+
memoryOption: 'none',
128132
enableObservability: false,
129133
});
130134
const result = translator.translate();
@@ -142,6 +146,7 @@ describe('LangGraphTranslator', () => {
142146
const translator = new LangGraphTranslator(config, {
143147
agentConfig: config,
144148
enableMemory: false,
149+
memoryOption: 'none',
145150
enableObservability: true,
146151
});
147152
const result = translator.translate();
@@ -171,6 +176,7 @@ describe('LangGraphTranslator', () => {
171176
const translator = new LangGraphTranslator(config, {
172177
agentConfig: config,
173178
enableMemory: false,
179+
memoryOption: 'none',
174180
enableObservability: false,
175181
});
176182
const result = translator.translate();
@@ -193,6 +199,7 @@ describe('LangGraphTranslator', () => {
193199
const translator = new LangGraphTranslator(config, {
194200
agentConfig: config,
195201
enableMemory: false,
202+
memoryOption: 'none',
196203
enableObservability: false,
197204
});
198205
const result = translator.translate();

src/cli/operations/agent/import/base-translator.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,12 @@ import type {
1414
KnowledgeBaseInfo,
1515
PromptConfiguration,
1616
} from '../../../aws/bedrock-import-types';
17+
import type { MemoryOption } from '../../../tui/screens/generate/types';
1718

1819
export interface TranslatorOptions {
1920
agentConfig: BedrockAgentConfig;
2021
enableMemory: boolean;
22+
memoryOption: MemoryOption;
2123
enableObservability: boolean;
2224
}
2325

@@ -52,6 +54,7 @@ export abstract class BaseBedrockTranslator {
5254
protected readonly promptConfigs: PromptConfiguration[];
5355
protected readonly memoryEnabled: boolean;
5456
protected readonly agentcoreMemoryEnabled: boolean;
57+
protected readonly hasLongTermStrategies: boolean;
5558
protected readonly codeInterpreterEnabled: boolean;
5659
protected readonly userInputEnabled: boolean;
5760
protected readonly multiAgentEnabled: boolean;
@@ -90,6 +93,7 @@ export abstract class BaseBedrockTranslator {
9093
const memoryConfig = this.agentInfo.memoryConfiguration;
9194
this.memoryEnabled = !!memoryConfig?.enabledMemoryTypes?.length;
9295
this.agentcoreMemoryEnabled = options.enableMemory && this.memoryEnabled;
96+
this.hasLongTermStrategies = options.memoryOption === 'longAndShortTerm';
9397

9498
// Features
9599
this.codeInterpreterEnabled = this.actionGroups.some(

src/cli/operations/agent/import/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export async function executeImportAgent(
4343
const translatorOptions = {
4444
agentConfig,
4545
enableMemory,
46+
memoryOption: memory,
4647
enableObservability: true,
4748
};
4849

src/cli/operations/agent/import/langgraph-translator.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -200,11 +200,16 @@ def invoke_${collabName}(query: str, state: Annotated[dict, InjectedState]) -> s
200200
code += 'tools += action_group_tools\n';
201201
}
202202

203-
// Memory retrieval code
204-
const memoryRetrieveCode = this.agentcoreMemoryEnabled
203+
// Memory retrieval code — must match the strategies written to agentcore.json:
204+
// shortTerm has no strategies (no namespace-specific retrieval)
205+
// longAndShortTerm has SEMANTIC, USER_PREFERENCE, and SUMMARIZATION strategies
206+
const memoryRetrieveCode = this.agentcoreMemoryEnabled && this.hasLongTermStrategies
205207
? `
206-
memories = memory_client.retrieve_memories(memory_id=memory_id, namespace=f'/summaries/{user_id}/', query="Retrieve the most recent session summaries.", actor_id=user_id, top_k=20)
207-
memory_synopsis = "\\n".join([m.get("content", {}).get("text", "") for m in memories])`
208+
semantic_memories = memory_client.retrieve_memories(memory_id=memory_id, namespace=f'/users/{user_id}/facts', query="Retrieve relevant facts.", actor_id=user_id, top_k=3)
209+
pref_memories = memory_client.retrieve_memories(memory_id=memory_id, namespace=f'/users/{user_id}/preferences', query="Retrieve user preferences.", actor_id=user_id, top_k=3)
210+
summary_memories = memory_client.retrieve_memories(memory_id=memory_id, namespace=f'/summaries/{user_id}/', query="Retrieve the most recent session summaries.", actor_id=user_id, top_k=3)
211+
all_memories = semantic_memories + pref_memories + summary_memories
212+
memory_synopsis = "\\n".join([m.get("content", {}).get("text", "") for m in all_memories])`
208213
: this.memoryEnabled
209214
? ' memory_synopsis = memory_manager.get_memory_synopsis()'
210215
: '';

src/cli/operations/agent/import/strands-translator.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -170,11 +170,16 @@ def invoke_${collabName}(query: str) -> str:
170170
code += 'tools += action_group_tools\n';
171171
}
172172

173-
// Memory retrieval code
174-
const memoryRetrieveLines = this.agentcoreMemoryEnabled
173+
// Memory retrieval code — must match the strategies written to agentcore.json:
174+
// shortTerm has no strategies (no namespace-specific retrieval)
175+
// longAndShortTerm has SEMANTIC, USER_PREFERENCE, and SUMMARIZATION strategies
176+
const memoryRetrieveLines = this.agentcoreMemoryEnabled && this.hasLongTermStrategies
175177
? [
176-
' memories = memory_client.retrieve_memories(memory_id=memory_id, namespace=f\'/summaries/{user_id}/\', query="Retrieve the most recent session summaries.", top_k=20)',
177-
' memory_synopsis = "\\n".join([m.get("content", {}).get("text", "") for m in memories])',
178+
' semantic_memories = memory_client.retrieve_memories(memory_id=memory_id, namespace=f\'/users/{user_id}/facts\', query="Retrieve relevant facts.", actor_id=user_id, top_k=3)',
179+
' pref_memories = memory_client.retrieve_memories(memory_id=memory_id, namespace=f\'/users/{user_id}/preferences\', query="Retrieve user preferences.", actor_id=user_id, top_k=3)',
180+
' summary_memories = memory_client.retrieve_memories(memory_id=memory_id, namespace=f\'/summaries/{user_id}/\', query="Retrieve the most recent session summaries.", actor_id=user_id, top_k=3)',
181+
' all_memories = semantic_memories + pref_memories + summary_memories',
182+
' memory_synopsis = "\\n".join([m.get("content", {}).get("text", "") for m in all_memories])',
178183
]
179184
: this.memoryEnabled
180185
? [' memory_synopsis = memory_manager.get_memory_synopsis()']

0 commit comments

Comments
 (0)