Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion mesa_llm/reasoning/rewoo.py
Original file line number Diff line number Diff line change
Expand Up @@ -200,7 +200,7 @@ async def aplan(
tool_choice="none",
)

self.agent.memory.add_to_memory(
await self.agent.memory.aadd_to_memory(
type="plan", content={"content": rsp.choices[0].message.content}
)

Expand Down
2 changes: 1 addition & 1 deletion tests/test_integration/test_memory_reasoning.py
Original file line number Diff line number Diff line change
Expand Up @@ -709,7 +709,7 @@ def test_async_plan_works(self, monkeypatch):
assert len(entries) == 1
assert entries[0].content["plan"]["content"] == plan_content
assert entries[0].content["plan"]["importance"] == 3
assert memory.grade_event_importance.call_count == 1
assert memory.agrade_event_importance.await_count == 1
reasoning.aexecute_tool_call.assert_awaited_once_with(
plan_content, selected_tools=None, ttl=1
)
Expand Down
38 changes: 38 additions & 0 deletions tests/test_reasoning/test_rewoo.py
Original file line number Diff line number Diff line change
Expand Up @@ -266,6 +266,7 @@ def test_aplan_new_plan_generation(self, llm_response_factory, mock_agent):
mock_agent.memory.format_long_term.return_value = "Long term memory"
mock_agent.memory.format_short_term.return_value = "Short term memory"
mock_agent.memory.add_to_memory = Mock()
mock_agent.memory.aadd_to_memory = AsyncMock()
mock_agent.llm = Mock()
mock_agent.tool_manager = Mock()
mock_agent.tool_manager.get_all_tools_schema.return_value = {}
Expand Down Expand Up @@ -357,6 +358,7 @@ def test_aplan_uses_provided_obs_without_regeneration(self):
mock_agent.memory.format_long_term.return_value = "Long term memory"
mock_agent.memory.format_short_term.return_value = "Short term memory"
mock_agent.memory.add_to_memory = Mock()
mock_agent.memory.aadd_to_memory = AsyncMock()
mock_agent.llm = Mock()
mock_agent.tool_manager = Mock()
mock_agent.tool_manager.get_all_tools_schema.return_value = {}
Expand Down Expand Up @@ -400,6 +402,7 @@ def test_aplan_with_selected_tools(self, llm_response_factory, mock_agent):
mock_agent.memory.format_long_term.return_value = "Long term memory"
mock_agent.memory.format_short_term.return_value = "Short term memory"
mock_agent.memory.add_to_memory = Mock()
mock_agent.memory.aadd_to_memory = AsyncMock()
mock_agent.llm = Mock()
mock_agent.tool_manager = Mock()
mock_agent.tool_manager.get_all_tools_schema.return_value = {}
Expand Down Expand Up @@ -436,6 +439,7 @@ def test_aplan_with_no_tool_calls(self, llm_response_factory, mock_agent):
mock_agent.memory.format_long_term.return_value = "Long term memory"
mock_agent.memory.format_short_term.return_value = "Short term memory"
mock_agent.memory.add_to_memory = Mock()
mock_agent.memory.aadd_to_memory = AsyncMock()
mock_agent.llm = Mock()
mock_agent.tool_manager = Mock()
mock_agent.tool_manager.get_all_tools_schema.return_value = {}
Expand Down Expand Up @@ -468,6 +472,7 @@ def test_aplan_uses_step_prompt_when_no_prompt_given(self, mock_agent):
mock_agent.memory.format_long_term.return_value = "Long term memory"
mock_agent.memory.format_short_term.return_value = "Short term memory"
mock_agent.memory.add_to_memory = Mock()
mock_agent.memory.aadd_to_memory = AsyncMock()
mock_agent.llm = Mock()
mock_agent.tool_manager = Mock()
mock_agent.tool_manager.get_all_tools_schema.return_value = {}
Expand Down Expand Up @@ -536,6 +541,39 @@ def test_remaining_tool_calls_decrement(self, mock_agent):
assert reasoning.remaining_tool_calls == 0
assert result3.llm_plan.tool_calls == [mock_tool_3] # index 2 (3-1=2)

def test_aplan_uses_async_memory_method(self, llm_response_factory, mock_agent):
mock_agent.step_prompt = "Default step prompt"
mock_agent.agenerate_obs = AsyncMock(
return_value=Observation(step=1, self_state={}, local_state={})
)
mock_agent.memory = Mock()
mock_agent.memory.format_long_term.return_value = ""
mock_agent.memory.format_short_term.return_value = ""
mock_agent.memory.aadd_to_memory = AsyncMock()
mock_agent.memory.add_to_memory = Mock()
mock_agent.llm = Mock()
mock_agent.tool_manager = Mock()
mock_agent.tool_manager.get_all_tools_schema.return_value = {}

mock_plan_response = llm_response_factory(content="Async plan content")
mock_exec_response = llm_response_factory(
content="Exec",
tool_calls=[_tool_call("call_1")],
)
mock_agent.llm.agenerate = AsyncMock(
side_effect=[mock_plan_response, mock_exec_response]
)

reasoning = ReWOOReasoning(mock_agent)
reasoning.aexecute_tool_call = AsyncMock(
return_value=Plan(step=1, llm_plan=mock_exec_response.choices[0].message)
)

asyncio.run(reasoning.aplan())

mock_agent.memory.aadd_to_memory.assert_awaited_once()
mock_agent.memory.add_to_memory.assert_not_called()


class TestReWOOSignatureConsistency:
def test_plan_accepts_obs_kwarg(self):
Expand Down
Loading