Skip to content

Commit cca7551

Browse files
authored
fix(memory): honor prompt param in vector store extraction (#4914)
1 parent 5be2630 commit cca7551

3 files changed

Lines changed: 44 additions & 6 deletions

File tree

mem0/memory/main.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -656,10 +656,10 @@ def add(
656656
else:
657657
messages = parse_vision_messages(messages)
658658

659-
vector_store_result = self._add_to_vector_store(messages, processed_metadata, effective_filters, infer)
659+
vector_store_result = self._add_to_vector_store(messages, processed_metadata, effective_filters, infer, prompt=prompt)
660660
return {"results": vector_store_result}
661661

662-
def _add_to_vector_store(self, messages, metadata, filters, infer):
662+
def _add_to_vector_store(self, messages, metadata, filters, infer, prompt=None):
663663
if not infer:
664664
returned_memories = []
665665
for message_dict in messages:
@@ -726,7 +726,7 @@ def _add_to_vector_store(self, messages, metadata, filters, infer):
726726
if is_agent_scoped:
727727
system_prompt += AGENT_CONTEXT_SUFFIX
728728

729-
custom_instr = self.custom_instructions
729+
custom_instr = prompt or self.custom_instructions
730730

731731
user_prompt = generate_additive_extraction_prompt(
732732
existing_memories=existing_memories,
@@ -2064,7 +2064,7 @@ async def add(
20642064
else:
20652065
messages = parse_vision_messages(messages)
20662066

2067-
vector_store_result = await self._add_to_vector_store(messages, processed_metadata, effective_filters, infer)
2067+
vector_store_result = await self._add_to_vector_store(messages, processed_metadata, effective_filters, infer, prompt=prompt)
20682068
return {"results": vector_store_result}
20692069

20702070
async def _add_to_vector_store(
@@ -2073,6 +2073,7 @@ async def _add_to_vector_store(
20732073
metadata: dict,
20742074
effective_filters: dict,
20752075
infer: bool,
2076+
prompt: Optional[str] = None,
20762077
):
20772078
if not infer:
20782079
returned_memories = []
@@ -2141,7 +2142,7 @@ async def _add_to_vector_store(
21412142
if is_agent_scoped:
21422143
system_prompt += AGENT_CONTEXT_SUFFIX
21432144

2144-
custom_instr = self.custom_instructions
2145+
custom_instr = prompt or self.custom_instructions
21452146

21462147
user_prompt = generate_additive_extraction_prompt(
21472148
existing_memories=existing_memories,

tests/memory/test_main.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,43 @@ def test_empty_llm_response_memory_actions(self, mock_memory, caplog):
7878
assert result == [] # Should return empty list when no memories processed
7979

8080

81+
class TestPromptOverridesCustomInstructions:
82+
@pytest.fixture
83+
def mock_memory(self, mocker):
84+
mock_llm, _ = _setup_mocks(mocker)
85+
mock_llm.return_value.generate_response.return_value = '{"memory": []}'
86+
87+
memory = Memory()
88+
memory.custom_instructions = "config-level instructions"
89+
memory.db.get_last_messages = MagicMock(return_value=[])
90+
memory.db.save_messages = MagicMock()
91+
return memory
92+
93+
def test_prompt_overrides_custom_instructions(self, mock_memory):
94+
mock_memory._add_to_vector_store(
95+
messages=[{"role": "user", "content": "hello"}],
96+
metadata={},
97+
filters={},
98+
infer=True,
99+
prompt="per-call override",
100+
)
101+
102+
user_prompt = mock_memory.llm.generate_response.call_args[1]["messages"][1]["content"]
103+
assert "per-call override" in user_prompt
104+
assert "config-level instructions" not in user_prompt
105+
106+
def test_falls_back_to_custom_instructions_when_no_prompt(self, mock_memory):
107+
mock_memory._add_to_vector_store(
108+
messages=[{"role": "user", "content": "hello"}],
109+
metadata={},
110+
filters={},
111+
infer=True,
112+
)
113+
114+
user_prompt = mock_memory.llm.generate_response.call_args[1]["messages"][1]["content"]
115+
assert "config-level instructions" in user_prompt
116+
117+
81118
class TestAsyncUpdate:
82119
@pytest.fixture
83120
def mock_async_memory(self, mocker):

tests/test_main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def test_add(memory_instance):
6161
assert result["results"] == [{"memory": "Test memory", "event": "ADD"}]
6262

6363
memory_instance._add_to_vector_store.assert_called_once_with(
64-
[{"role": "user", "content": "Test message"}], {"user_id": "test_user"}, {"user_id": "test_user"}, True
64+
[{"role": "user", "content": "Test message"}], {"user_id": "test_user"}, {"user_id": "test_user"}, True, prompt=None
6565
)
6666

6767

0 commit comments

Comments
 (0)