diff --git a/__pycache__/market_screener.cpython-312.pyc b/__pycache__/market_screener.cpython-312.pyc index 2a5d602..aa96a2b 100644 Binary files a/__pycache__/market_screener.cpython-312.pyc and b/__pycache__/market_screener.cpython-312.pyc differ diff --git a/market_screener.py b/market_screener.py index 3ba1332..2c44b4f 100644 --- a/market_screener.py +++ b/market_screener.py @@ -9,13 +9,19 @@ WEB_DASHBOARD_DIR = Path(__file__).resolve().parent.parent.parent / "web-dashboa DATA_DIR = WEB_DASHBOARD_DIR / "data" MARKET_JSON = DATA_DIR / "market.json" POOL_JSON = DATA_DIR / "candidate_pool.json" -XIAOGUO_API = "http://192.168.1.122:18003/v1/chat/completions" XIAOGUO_MODEL = "Qwen3.6-27B-OptiQ-4bit" API_TIMEOUT = 60 MAX_SECTORS = 5 MAX_CANDIDATES_POOL = 60 TENCENT_URL = "http://qt.gtimg.cn/q=" +def _get_xiaoguo_url(): + try: + from mo_config import get_config + return get_config().xiaoguo_api_url + except Exception: + return "http://node122:18003/v1/chat/completions" # legacy fallback + def load_json(path): try: diff --git a/mo_config.py b/mo_config.py index a919578..79d1e60 100644 --- a/mo_config.py +++ b/mo_config.py @@ -87,7 +87,18 @@ class MoConfig: hk_rate_fallback: float = 0.87 # 港币→人民币 fallback 汇率 - # ── 服务配置 ────────────────────────────────────────────────── + # ── 小果 LLM 端点(用机器名,/etc/hosts 自动解析 LAN/EasyTier)─ + # node122 = 192.168.1.122 (LAN) / 10.144.144.2 (EasyTier) + xiaoguo_host: str = "node122" + xiaoguo_port: int = 18003 + + @property + def xiaoguo_url(self) -> str: + return f"http://{self.xiaoguo_host}:{self.xiaoguo_port}" + + @property + def xiaoguo_api_url(self) -> str: + return f"{self.xiaoguo_url}/v1/chat/completions" port: int = field(default_factory=lambda: int(os.environ.get("PORT", "8899"))) diff --git a/scripts/intraday_health_check.py b/scripts/intraday_health_check.py index 88ea124..14af743 100644 --- a/scripts/intraday_health_check.py +++ b/scripts/intraday_health_check.py @@ -68,7 +68,7 @@ def check_xiaoguo(): # 可能是小果离线了,不报严重,记录即可 return # API — 不通时scanner已降级为unknown,不影响 - check_http("http://192.168.1.122:18003/v1/models") + check_http("http://node122:18003/v1/models") PORTFOLIO_PATH = str(DATA / "portfolio.json") diff --git a/scripts/ocr_client.py b/scripts/ocr_client.py index 0a3d79d..9d2ced0 100755 --- a/scripts/ocr_client.py +++ b/scripts/ocr_client.py @@ -13,7 +13,7 @@ import json import base64 import urllib.request -OCR_URL = "http://192.168.1.122:18003/v1/chat/completions" +OCR_URL = "http://node122:18003/v1/chat/completions" OCR_MODEL = "GLM-OCR-8bit" def ocr_image(image_path, prompt="请详细识别这张图片中的所有文字,包括数字、股票名称、金额等。用中文回复。"): diff --git a/xiaoguo_news_processor.py b/xiaoguo_news_processor.py index a29bff2..44c1ae8 100644 --- a/xiaoguo_news_processor.py +++ b/xiaoguo_news_processor.py @@ -25,7 +25,14 @@ except ImportError: DATA_DIR = Path(__file__).parent / "data" DB_PATH = DATA_DIR / "mofin.db" -XIAOGUO_API = "http://192.168.1.122:18003/v1/chat/completions" +XIAOGUO_API = "http://node122:18003/v1/chat/completions" # fallback, /etc/hosts resolves to LAN or EasyTier + +def _get_xiaoguo_url(): + try: + from mo_config import get_config + return get_config().xiaoguo_api_url + except Exception: + return XIAOGUO_API XIAOGUO_MODEL = "Qwen3.6-27B-MTPLX-Optimized-Speed" MAX_ARTICLES = 5 # 每次最多分析篇数(实测5篇12s) @@ -117,7 +124,7 @@ def call_xiaoguo(articles): clean_proxy() opener = urllib.request.build_opener(urllib.request.ProxyHandler({})) req = urllib.request.Request( - XIAOGUO_API, data=payload, + _get_xiaoguo_url(), data=payload, headers={"Content-Type": "application/json"}, method="POST" ) try: diff --git a/xiaoguo_scanner.py b/xiaoguo_scanner.py index e467c61..286ac43 100644 --- a/xiaoguo_scanner.py +++ b/xiaoguo_scanner.py @@ -17,7 +17,14 @@ except ImportError: DATA_DIR = Path(__file__).parent / "data" DB_PATH = DATA_DIR / "mofin.db" -XIAOGUO_API = "http://192.168.1.122:18003/v1/chat/completions" +XIAOGUO_API = "http://node122:18003/v1/chat/completions" # fallback, /etc/hosts resolves to LAN or EasyTier + +def _get_xiaoguo_url(): + try: + from mo_config import get_config + return get_config().xiaoguo_api_url + except Exception: + return XIAOGUO_API XIAOGUO_MODEL = "Qwen3.6-27B-MTPLX-Optimized-Speed" SCAN_INTERVAL = 3600 # 同一只股1小时内不重复搜 MAX_STOCKS_PER_RUN = 15 @@ -221,7 +228,7 @@ def check_stock(code, name, articles): }).encode() opener = urllib.request.build_opener(urllib.request.ProxyHandler({})) - req = urllib.request.Request(XIAOGUO_API, data=payload, + req = urllib.request.Request(_get_xiaoguo_url(), data=payload, headers={"Content-Type": "application/json"}, method="POST") try: resp = opener.open(req, timeout=30)