fix: replace hardcoded 192.168.1.122 with node122 (hostname resolves via /etc/hosts to LAN or EasyTier)

- mo_config.py: xiaoguo_host=node122, xiaoguo_api_url property
- market_screener.py, xiaoguo_scanner.py, xiaoguo_news_processor.py: use mo_config or node122 fallback
- scripts/intraday_health_check.py, scripts/ocr_client.py: node122
- EasyTier connects at 10.144.144.2 when off-LAN
This commit is contained in:
hmo
2026-06-30 02:27:52 +08:00
parent efaa20d775
commit f4b2467ae9
7 changed files with 39 additions and 8 deletions
Binary file not shown.
+7 -1
View File
@@ -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:
+12 -1
View File
@@ -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")))
+1 -1
View File
@@ -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")
+1 -1
View File
@@ -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="请详细识别这张图片中的所有文字,包括数字、股票名称、金额等。用中文回复。"):
+9 -2
View File
@@ -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:
+9 -2
View File
@@ -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)