mirror of
https://github.com/Sea-Haven-Industries/open-swe.git
synced 2026-09-30 17:23:15 +00:00
83 lines
2.4 KiB
Python
83 lines
2.4 KiB
Python
|
|
import importlib
|
||
|
|
import sys
|
||
|
|
|
||
|
|
import pytest
|
||
|
|
from langchain_core.messages import HumanMessage
|
||
|
|
|
||
|
|
|
||
|
|
def _clear_deepagents_modules(
|
||
|
|
*,
|
||
|
|
include_agent_server: bool = False,
|
||
|
|
include_agent_reviewer: bool = False,
|
||
|
|
) -> None:
|
||
|
|
for name in list(sys.modules):
|
||
|
|
if name == "deepagents" or name.startswith("deepagents."):
|
||
|
|
del sys.modules[name]
|
||
|
|
elif include_agent_server and name == "agent.server":
|
||
|
|
del sys.modules[name]
|
||
|
|
elif include_agent_reviewer and name == "agent.reviewer":
|
||
|
|
del sys.modules[name]
|
||
|
|
importlib.invalidate_caches()
|
||
|
|
|
||
|
|
|
||
|
|
def _restore_agent_modules() -> None:
|
||
|
|
patch_mod = importlib.import_module("agent._patch_messages_reducer")
|
||
|
|
importlib.reload(patch_mod)
|
||
|
|
for name in ("agent.server", "agent.reviewer"):
|
||
|
|
mod = sys.modules.get(name)
|
||
|
|
if mod is not None:
|
||
|
|
importlib.reload(mod)
|
||
|
|
else:
|
||
|
|
importlib.import_module(name)
|
||
|
|
|
||
|
|
|
||
|
|
def _apply_patch() -> None:
|
||
|
|
_clear_deepagents_modules()
|
||
|
|
patch_mod = importlib.import_module("agent._patch_messages_reducer")
|
||
|
|
importlib.reload(patch_mod)
|
||
|
|
|
||
|
|
|
||
|
|
def test_messages_delta_reducer_accepts_none_state() -> None:
|
||
|
|
_apply_patch()
|
||
|
|
from deepagents import _messages_reducer as reducer_mod
|
||
|
|
|
||
|
|
result = reducer_mod._messages_delta_reducer(None, [])
|
||
|
|
assert result == []
|
||
|
|
|
||
|
|
|
||
|
|
def test_messages_delta_reducer_still_merges_writes() -> None:
|
||
|
|
_apply_patch()
|
||
|
|
from deepagents import _messages_reducer as reducer_mod
|
||
|
|
|
||
|
|
msg = HumanMessage(content="hi", id="m1")
|
||
|
|
result = reducer_mod._messages_delta_reducer(None, [[msg]])
|
||
|
|
assert len(result) == 1
|
||
|
|
assert result[0].content == "hi"
|
||
|
|
|
||
|
|
|
||
|
|
def test_graph_binds_patched_reducer_on_server_import() -> None:
|
||
|
|
_clear_deepagents_modules(include_agent_server=True)
|
||
|
|
try:
|
||
|
|
importlib.import_module("agent.server")
|
||
|
|
from deepagents.graph import _messages_delta_reducer
|
||
|
|
|
||
|
|
assert _messages_delta_reducer(None, []) == []
|
||
|
|
finally:
|
||
|
|
_restore_agent_modules()
|
||
|
|
|
||
|
|
|
||
|
|
def test_late_graph_import_is_repaired_by_patch() -> None:
|
||
|
|
_clear_deepagents_modules()
|
||
|
|
try:
|
||
|
|
from deepagents.graph import _messages_delta_reducer as unpatched
|
||
|
|
|
||
|
|
with pytest.raises(TypeError):
|
||
|
|
unpatched(None, [])
|
||
|
|
|
||
|
|
importlib.reload(importlib.import_module("agent._patch_messages_reducer"))
|
||
|
|
from deepagents.graph import _messages_delta_reducer as patched
|
||
|
|
|
||
|
|
assert patched(None, []) == []
|
||
|
|
finally:
|
||
|
|
_restore_agent_modules()
|