From c50420fc5ce53e090ab10495da004d97eb37447c Mon Sep 17 00:00:00 2001 From: Yijia-Xiao Date: Thu, 24 Sep 2026 18:51:08 +0000 Subject: [PATCH] refactor: gather the memory log, settlement and reflection in tradingagents/memory - memory/log.py holds TradingMemoryLog, still imported from tradingagents.memory - graph/settlement.py and graph/reflection.py move to memory/; Reflector leaves tradingagents.graph's exports --- tests/test_dataflows_config.py | 2 +- tests/test_memory_log.py | 7 +++---- tests/test_symbol_normalization_paths.py | 2 +- tradingagents/graph/__init__.py | 2 -- tradingagents/graph/trading_graph.py | 5 ++--- tradingagents/memory/__init__.py | 10 ++++++++++ tradingagents/{memory.py => memory/log.py} | 0 tradingagents/{graph => memory}/reflection.py | 0 tradingagents/{graph => memory}/settlement.py | 0 9 files changed, 17 insertions(+), 11 deletions(-) create mode 100644 tradingagents/memory/__init__.py rename tradingagents/{memory.py => memory/log.py} (100%) rename tradingagents/{graph => memory}/reflection.py (100%) rename tradingagents/{graph => memory}/settlement.py (100%) diff --git a/tests/test_dataflows_config.py b/tests/test_dataflows_config.py index fd1ef37e5..dd0393c27 100644 --- a/tests/test_dataflows_config.py +++ b/tests/test_dataflows_config.py @@ -148,7 +148,7 @@ def test_settling_reads_the_graphs_own_config(monkeypatch): graph = _graph(config) graph.memory_log = graph.reflector = None # the settlement below is a stand-in seen = [] - from tradingagents.graph import settlement + from tradingagents.memory import settlement monkeypatch.setattr(settlement, "settle_pending", lambda *a: seen.append(get_vendor("core_stock_apis", "get_stock_data"))) diff --git a/tests/test_memory_log.py b/tests/test_memory_log.py index 5ceb01ac8..7652aafde 100644 --- a/tests/test_memory_log.py +++ b/tests/test_memory_log.py @@ -7,11 +7,10 @@ import pytest from tradingagents.agents.managers.portfolio_manager import create_portfolio_manager from tradingagents.agents.schemas import PortfolioDecision, PortfolioRating -from tradingagents.graph import settlement from tradingagents.graph.propagation import Propagator -from tradingagents.graph.reflection import Reflector from tradingagents.graph.trading_graph import TradingAgentsGraph -from tradingagents.memory import TradingMemoryLog +from tradingagents.memory import TradingMemoryLog, settlement +from tradingagents.memory.reflection import Reflector _SEP = TradingMemoryLog._SEPARATOR @@ -1004,7 +1003,7 @@ def test_the_holding_window_is_configurable(tmp_path, monkeypatch): def test_the_reflection_states_the_window_it_judges(): """Judging a months-long thesis on a week's alpha, without saying so, turns a scope mismatch into a lesson that the call was wrong.""" - from tradingagents.graph.reflection import Reflector + from tradingagents.memory.reflection import Reflector prompt = Reflector(None)._system_prompt(holding_days=5) assert "5" in prompt and "trading day" in prompt diff --git a/tests/test_symbol_normalization_paths.py b/tests/test_symbol_normalization_paths.py index f802ae53b..f3ed1b21d 100644 --- a/tests/test_symbol_normalization_paths.py +++ b/tests/test_symbol_normalization_paths.py @@ -10,7 +10,7 @@ import pandas as pd import tradingagents.agents.context as au import tradingagents.dataflows.vendors.yahoo.market as yahoo_market import tradingagents.dataflows.vendors.yahoo.news as ynews -from tradingagents.graph import settlement +from tradingagents.memory import settlement def test_identity_lookup_normalizes_symbol(monkeypatch): diff --git a/tradingagents/graph/__init__.py b/tradingagents/graph/__init__.py index 54f3037fc..e3715701b 100644 --- a/tradingagents/graph/__init__.py +++ b/tradingagents/graph/__init__.py @@ -1,6 +1,5 @@ from .conditional_logic import ConditionalLogic from .propagation import Propagator -from .reflection import Reflector from .setup import GraphSetup from .trading_graph import TradingAgentsGraph @@ -9,5 +8,4 @@ __all__ = [ "ConditionalLogic", "GraphSetup", "Propagator", - "Reflector", ] diff --git a/tradingagents/graph/trading_graph.py b/tradingagents/graph/trading_graph.py index 9fe826977..1795907db 100644 --- a/tradingagents/graph/trading_graph.py +++ b/tradingagents/graph/trading_graph.py @@ -13,14 +13,13 @@ from tradingagents.dataflows.date_window import get_current_date from tradingagents.dataflows.symbols import safe_ticker_component from tradingagents.default_config import DEFAULT_CONFIG from tradingagents.llm_clients import build_llm_kwargs, create_llm_client -from tradingagents.memory import TradingMemoryLog +from tradingagents.memory import TradingMemoryLog, settlement +from tradingagents.memory.reflection import Reflector from tradingagents.reporting import write_report_tree -from . import settlement from .checkpointer import checkpoint_step, clear_checkpoint, get_checkpointer, thread_id from .conditional_logic import ConditionalLogic from .propagation import Propagator -from .reflection import Reflector from .setup import GraphSetup logger = logging.getLogger(__name__) diff --git a/tradingagents/memory/__init__.py b/tradingagents/memory/__init__.py new file mode 100644 index 000000000..04c764230 --- /dev/null +++ b/tradingagents/memory/__init__.py @@ -0,0 +1,10 @@ +"""The memory log: each decision recorded as made, settled against the market, and reflected on. + +``log`` keeps the entries, ``settlement`` measures a decision's return once its +holding window has traded, and ``reflection`` turns that outcome into a lesson +the next run of the same ticker reads. +""" + +from tradingagents.memory.log import TradingMemoryLog + +__all__ = ["TradingMemoryLog"] diff --git a/tradingagents/memory.py b/tradingagents/memory/log.py similarity index 100% rename from tradingagents/memory.py rename to tradingagents/memory/log.py diff --git a/tradingagents/graph/reflection.py b/tradingagents/memory/reflection.py similarity index 100% rename from tradingagents/graph/reflection.py rename to tradingagents/memory/reflection.py diff --git a/tradingagents/graph/settlement.py b/tradingagents/memory/settlement.py similarity index 100% rename from tradingagents/graph/settlement.py rename to tradingagents/memory/settlement.py