Skip to content

Commit 0ad6a4e

Browse files
authored
Merge pull request #57 from TNT-Likely/fix/pin-tradingagents-v025
fix(TA): 锁定 tradingagents 到 v0.2.5 + 上游 vendor 失败降级(止住反复报错)
2 parents 279f888 + 49acf83 commit 0ad6a4e

3 files changed

Lines changed: 29 additions & 3 deletions

File tree

requirements.txt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,8 @@ PyJWT>=2.8.0
2020
# 不在 PyPI,用 git+ URL 安装。会拉 langchain/langgraph/yfinance 等较重依赖
2121
# (~115 个包,首次安装 2-5 分钟)。
2222
# 用户启用「TradingAgents 深度分析」Agent 时才会真正调用它;不启用零开销。
23-
tradingagents @ git+https://github.com/TauricResearch/TradingAgents.git@main
23+
# 锁定到 v0.2.5(而非 @main):上游 main 不断加需外部 key/服务的新工具
24+
# (get_verified_market_snapshot→yfinance、get_macro_indicators→FRED、polymarket 等),
25+
# 我们的注入层未覆盖就会硬失败。v0.2.5 是 PanWatch 适配/测试的稳定版,不含这些工具。
26+
# 升级前需先在适配层(toolkit_adapter)对新工具做覆盖/降级。
27+
tradingagents @ git+https://github.com/TauricResearch/TradingAgents.git@v0.2.5

src/agents/tradingagents/toolkit_adapter.py

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -287,8 +287,18 @@ def _patched_route_to_vendor(method_name: str, *args, **kwargs):
287287
_emit_toolkit_log("warning", "ERROR", method_name, symbol, error=str(e)[:200])
288288
return f"[关键词新闻搜索失败「{symbol}」: {e}]"
289289

290-
# 美股 / 其他:直接走上游 vendor
291-
upstream_result = _real_route_to_vendor(method_name, *args, **kwargs)
290+
# 美股 / 其他:直接走上游 vendor。
291+
# 降级兜底:上游某些工具依赖外部 key/服务(FRED 无 key、polymarket SSL、未配置 vendor 等),
292+
# 失败会抛异常拖垮整个深度分析。这里捕获并返回空 —— 单个工具缺数据 ≠ 整轮失败。
293+
try:
294+
upstream_result = _real_route_to_vendor(method_name, *args, **kwargs)
295+
except Exception as e:
296+
logger.warning(f"[TA toolkit] 上游 {method_name} 失败,降级返回空(不中断分析): {e}")
297+
_emit_toolkit_log(
298+
"warning", "DEGRADE", method_name, symbol or "(none)",
299+
error=str(e)[:200], extra_args=_args_summary(args),
300+
)
301+
return ""
292302
upstream_str = str(upstream_result) if upstream_result is not None else ""
293303
action_label = "PASSTHROUGH" if not is_a_share(symbol) else "FALLTHROUGH"
294304
_emit_toolkit_log(

tests/test_ta_load_ohlcv_patch.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,15 @@ def test_load_ohlcv_falls_back_when_no_klines(monkeypatch):
6969
monkeypatch.setattr(ta, "_real_load_ohlcv", lambda symbol, curr_date, *a, **k: sentinel)
7070
out = ta._panwatch_load_ohlcv("601238", "2026-06-18")
7171
assert out is sentinel
72+
73+
74+
def test_route_to_vendor_degrades_on_upstream_error(monkeypatch):
75+
"""上游 vendor 失败(如 FRED 无 key、polymarket SSL)应降级返回空,不抛错中断整轮分析。"""
76+
77+
def boom(method_name, *a, **k):
78+
raise RuntimeError("FRED_API_KEY environment variable is not set")
79+
80+
monkeypatch.setattr(ta, "_real_route_to_vendor", boom)
81+
# get_macro_indicators:首参是指标名(非 A股/港股) → 走上游 passthrough → boom → 降级空
82+
out = ta._patched_route_to_vendor("get_macro_indicators", "fed_funds_rate", "2026-06-18", 30)
83+
assert out == ""

0 commit comments

Comments
 (0)