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:
Binary file not shown.
+7
-1
@@ -9,13 +9,19 @@ WEB_DASHBOARD_DIR = Path(__file__).resolve().parent.parent.parent / "web-dashboa
|
|||||||
DATA_DIR = WEB_DASHBOARD_DIR / "data"
|
DATA_DIR = WEB_DASHBOARD_DIR / "data"
|
||||||
MARKET_JSON = DATA_DIR / "market.json"
|
MARKET_JSON = DATA_DIR / "market.json"
|
||||||
POOL_JSON = DATA_DIR / "candidate_pool.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"
|
XIAOGUO_MODEL = "Qwen3.6-27B-OptiQ-4bit"
|
||||||
API_TIMEOUT = 60
|
API_TIMEOUT = 60
|
||||||
MAX_SECTORS = 5
|
MAX_SECTORS = 5
|
||||||
MAX_CANDIDATES_POOL = 60
|
MAX_CANDIDATES_POOL = 60
|
||||||
TENCENT_URL = "http://qt.gtimg.cn/q="
|
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):
|
def load_json(path):
|
||||||
try:
|
try:
|
||||||
|
|||||||
+12
-1
@@ -87,7 +87,18 @@ class MoConfig:
|
|||||||
|
|
||||||
hk_rate_fallback: float = 0.87 # 港币→人民币 fallback 汇率
|
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")))
|
port: int = field(default_factory=lambda: int(os.environ.get("PORT", "8899")))
|
||||||
|
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ def check_xiaoguo():
|
|||||||
# 可能是小果离线了,不报严重,记录即可
|
# 可能是小果离线了,不报严重,记录即可
|
||||||
return
|
return
|
||||||
# API — 不通时scanner已降级为unknown,不影响
|
# 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")
|
PORTFOLIO_PATH = str(DATA / "portfolio.json")
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ import json
|
|||||||
import base64
|
import base64
|
||||||
import urllib.request
|
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"
|
OCR_MODEL = "GLM-OCR-8bit"
|
||||||
|
|
||||||
def ocr_image(image_path, prompt="请详细识别这张图片中的所有文字,包括数字、股票名称、金额等。用中文回复。"):
|
def ocr_image(image_path, prompt="请详细识别这张图片中的所有文字,包括数字、股票名称、金额等。用中文回复。"):
|
||||||
|
|||||||
@@ -25,7 +25,14 @@ except ImportError:
|
|||||||
|
|
||||||
DATA_DIR = Path(__file__).parent / "data"
|
DATA_DIR = Path(__file__).parent / "data"
|
||||||
DB_PATH = DATA_DIR / "mofin.db"
|
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"
|
XIAOGUO_MODEL = "Qwen3.6-27B-MTPLX-Optimized-Speed"
|
||||||
MAX_ARTICLES = 5 # 每次最多分析篇数(实测5篇12s)
|
MAX_ARTICLES = 5 # 每次最多分析篇数(实测5篇12s)
|
||||||
|
|
||||||
@@ -117,7 +124,7 @@ def call_xiaoguo(articles):
|
|||||||
clean_proxy()
|
clean_proxy()
|
||||||
opener = urllib.request.build_opener(urllib.request.ProxyHandler({}))
|
opener = urllib.request.build_opener(urllib.request.ProxyHandler({}))
|
||||||
req = urllib.request.Request(
|
req = urllib.request.Request(
|
||||||
XIAOGUO_API, data=payload,
|
_get_xiaoguo_url(), data=payload,
|
||||||
headers={"Content-Type": "application/json"}, method="POST"
|
headers={"Content-Type": "application/json"}, method="POST"
|
||||||
)
|
)
|
||||||
try:
|
try:
|
||||||
|
|||||||
+9
-2
@@ -17,7 +17,14 @@ except ImportError:
|
|||||||
|
|
||||||
DATA_DIR = Path(__file__).parent / "data"
|
DATA_DIR = Path(__file__).parent / "data"
|
||||||
DB_PATH = DATA_DIR / "mofin.db"
|
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"
|
XIAOGUO_MODEL = "Qwen3.6-27B-MTPLX-Optimized-Speed"
|
||||||
SCAN_INTERVAL = 3600 # 同一只股1小时内不重复搜
|
SCAN_INTERVAL = 3600 # 同一只股1小时内不重复搜
|
||||||
MAX_STOCKS_PER_RUN = 15
|
MAX_STOCKS_PER_RUN = 15
|
||||||
@@ -221,7 +228,7 @@ def check_stock(code, name, articles):
|
|||||||
}).encode()
|
}).encode()
|
||||||
|
|
||||||
opener = urllib.request.build_opener(urllib.request.ProxyHandler({}))
|
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")
|
headers={"Content-Type": "application/json"}, method="POST")
|
||||||
try:
|
try:
|
||||||
resp = opener.open(req, timeout=30)
|
resp = opener.open(req, timeout=30)
|
||||||
|
|||||||
Reference in New Issue
Block a user