improve signed reads, crypto hardening, and scraper transport

This commit is contained in:
k
2026-06-14 21:43:43 +08:00
parent 54884f3e24
commit 78fb63be8e
27 changed files with 1326 additions and 202 deletions
+29
View File
@@ -315,6 +315,8 @@ async def extract_kol_signal(
if post_type not in valid_post_types:
post_type = "other"
tier = _derive_tier(cleaned, tvt_score)
return {
"summary": (data.get("summary") or "").strip() or None,
"post_type": post_type,
@@ -322,6 +324,33 @@ async def extract_kol_signal(
"talks_vs_trades_score": tvt_score,
# Keep old boolean for any callers that still check it
"talks_vs_trades_flag": tvt_score >= 0.5,
# tier mirrors x_analysis' vocabulary (trade_signal / directional /
# noise) so blog/substack/podcast posts get the same SIGNAL/VIEW UI
# badges + the "Signals only" filter that Twitter posts already have.
"tier": tier,
"model": model,
"version": ANALYSIS_VERSION,
}
def _derive_tier(tickers: list[dict], tvt_score: float) -> str:
"""Map kol_analysis output → the trade_signal/directional/noise tiers that
x_analysis emits directly. Non-Twitter analyzers don't ask the model for a
tier, so we derive one from the per-ticker conviction + the talks-vs-trades
(divergence) score. Without this, blog/substack/podcast rows have tier=NULL
and the "Signals only" filter + SIGNAL/VIEW badges never apply to them.
* directional ticker = an explicit non-"mention" action (buy/sell/
reduce/bullish/bearish).
* trade_signal = high conviction (>= 0.6) on a directional ticker, or a
strong talks-vs-trades divergence (>= 0.6) — the platform's top signal.
* directional = a directional view exists but below the trade_signal bar.
* noise = no directional ticker and no notable divergence.
"""
directional = [t for t in tickers if (t.get("action") or "mention") != "mention"]
max_conv = max((float(t.get("conviction") or 0) for t in directional), default=0.0)
if max_conv >= 0.6 or tvt_score >= 0.6:
return "trade_signal"
if directional or tvt_score >= 0.5:
return "directional"
return "noise"