From 6bba18130791d979680a18d3c1474b77ac2d4e96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E9=92=B0?= Date: Wed, 8 Jul 2026 13:53:12 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96Yahoo=20Finance?= =?UTF-8?q?=E8=B7=B3=E8=BF=87=E7=AD=96=E7=95=A5=20+=20Polymarket=E8=B6=85?= =?UTF-8?q?=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - yf_retry: 直接抛出YFRateLimitError,跳过本地重试 - Polymarket: 直连超时从30s降到5s,快速fallback到SSH - 基础数据(yf_retry调用)将优雅降级,不阻塞分析流程 --- tradingagents/dataflows/polymarket.py | 7 +++++-- tradingagents/dataflows/stockstats_utils.py | 13 ++----------- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/tradingagents/dataflows/polymarket.py b/tradingagents/dataflows/polymarket.py index a6e52d0..97637cf 100644 --- a/tradingagents/dataflows/polymarket.py +++ b/tradingagents/dataflows/polymarket.py @@ -24,7 +24,10 @@ logger = logging.getLogger(__name__) GAMMA_BASE = "https://gamma-api.polymarket.com" # Network timeout (seconds), consistent with the other vendors. -REQUEST_TIMEOUT = 30 +REQUEST_TIMEOUT = 15 + +# Timeout for direct Polymarket API call (fail fast, use SSH proxy) +DIRECT_TIMEOUT = 5 # Default number of markets to return, ranked by traded volume. DEFAULT_LIMIT = 6 @@ -33,7 +36,7 @@ DEFAULT_LIMIT = 6 def _request(path: str, params: dict) -> dict: url = f"{GAMMA_BASE}/{path}" try: - response = requests.get(url, params=params, timeout=REQUEST_TIMEOUT) + response = requests.get(url, params=params, timeout=DIRECT_TIMEOUT) response.raise_for_status() return response.json() except requests.RequestException: diff --git a/tradingagents/dataflows/stockstats_utils.py b/tradingagents/dataflows/stockstats_utils.py index 48e4a19..681ddef 100644 --- a/tradingagents/dataflows/stockstats_utils.py +++ b/tradingagents/dataflows/stockstats_utils.py @@ -105,17 +105,8 @@ def yf_retry(func, max_retries=3, base_delay=2.0): retry them internally. This wrapper adds retry logic specifically for rate limits. Other exceptions propagate immediately. """ - for attempt in range(max_retries + 1): - try: - return func() - except YFRateLimitError: - if attempt < max_retries: - delay = base_delay * (2 ** attempt) - logger.warning(f"Yahoo Finance rate limited, retrying in {delay:.0f}s (attempt {attempt + 1}/{max_retries})") - time.sleep(delay) - else: - logger.warning("Yahoo Finance local exhausted, will let caller handle fallback") - raise + # Skip local Yahoo Finance entirely - always use SSH proxy + raise YFRateLimitError("Local Yahoo Finance disabled, use SSH proxy") def _ensure_date_column(data: pd.DataFrame) -> pd.DataFrame: