WIP before Manual-Headline-Insertion v1 edits (clickability 14d lifecycle pending)
This commit is contained in:
@@ -0,0 +1,138 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Mine Athena's DB for real AI-news engagement patterns.
|
||||||
|
Goal: tell us WHAT KIND of AI news people consume/click, with numbers.
|
||||||
|
Read-only against oracle.db."""
|
||||||
|
import json, math, sqlite3, re, os
|
||||||
|
from collections import Counter, defaultdict
|
||||||
|
|
||||||
|
DB = os.path.join(os.path.dirname(__file__), "oracle.db")
|
||||||
|
c = sqlite3.connect(DB)
|
||||||
|
|
||||||
|
rows = c.execute(
|
||||||
|
"select source,source_id,title,url,summary,signal_score,raw_metadata "
|
||||||
|
"from entries"
|
||||||
|
).fetchall()
|
||||||
|
print(f"TOTAL ENTRIES: {len(rows)}")
|
||||||
|
|
||||||
|
# ---- engagement extractor (per source native units) ----
|
||||||
|
def eng(src, md):
|
||||||
|
if src == "hackernews":
|
||||||
|
return {"points": md.get("score",0), "comments": md.get("descendants",0),
|
||||||
|
"composite": (md.get("score",0) or 0) + 2*(md.get("descendants",0) or 0)}
|
||||||
|
if src == "reddit":
|
||||||
|
return {"ups": md.get("ups",0), "comments": md.get("num_comments",0),
|
||||||
|
"composite": (md.get("ups",0) or 0) + 2*(md.get("num_comments",0) or 0)}
|
||||||
|
if src == "huggingface":
|
||||||
|
return {"likes": md.get("likes",0), "downloads": md.get("downloads",0),
|
||||||
|
"composite": (md.get("likes",0) or 0)*10 + (md.get("downloads",0) or 0)*0.01}
|
||||||
|
if src == "github":
|
||||||
|
return {"stars": md.get("stars",0), "stars_per_day": md.get("stars_per_day",0),
|
||||||
|
"composite": (md.get("stars_per_day",0) or 0)*50 + (md.get("stars",0) or 0)*0.001}
|
||||||
|
if src == "arxiv":
|
||||||
|
return {"points": None, "comments": None, "composite": 0}
|
||||||
|
return {"composite": 0}
|
||||||
|
|
||||||
|
# ---- content-type classifier (keyword on title+summary) ----
|
||||||
|
def ctype(title, summary, src):
|
||||||
|
t = (title + " " + (summary or "")).lower()
|
||||||
|
# order matters: most specific first
|
||||||
|
if src == "huggingface" or re.search(r"\b(gpt-|gpt5|gpt-5|deepseek|glm-|llama|qwen|claude|gemini|mistral|flux|stable-diffusion)\b", t) and re.search(r"\b(release|released|v\d|launch|model)\b", t):
|
||||||
|
return "MODEL_RELEASE"
|
||||||
|
if re.search(r"\b(release|released|launches|unveils|announces|debut|new model|gpt-5|deepseek-v|glm-5)\b", t):
|
||||||
|
return "MODEL_RELEASE"
|
||||||
|
if src == "arxiv" or re.search(r"\b(paper|study|benchmark|arxiv|proposes|learns?|novel|framework for|towards)\b", t):
|
||||||
|
return "RESEARCH"
|
||||||
|
if re.search(r"\b(sues|lawsuit|funding|raises|acqui|ipo|valued|stealing|trade secret|layoff|hire[sd]?|exec|ceo|openai|anthropic|google|meta|microsoft)\b", t) and not re.search(r"\b(repo|library|tool|agent framework)\b", t):
|
||||||
|
return "BUSINESS_LEGAL"
|
||||||
|
if re.search(r"\b(burnout|opinion|think|feel|why|essay|culture|linkedin|social media|future of|we made|i think|hot take)\b", t):
|
||||||
|
return "CULTURE_OPINION"
|
||||||
|
if re.search(r"\b(how to|tutorial|guide|running|build|setup|install|from scratch|learn)\b", t):
|
||||||
|
return "TUTORIAL_HOWTO"
|
||||||
|
if src == "github" or re.search(r"\b(repo|library|framework|tool|agent|sdk|cli|extension|plugin|app|engine)\b", t):
|
||||||
|
return "DEV_TOOL"
|
||||||
|
return "OTHER"
|
||||||
|
|
||||||
|
# ---- aggregate ----
|
||||||
|
by_src = defaultdict(list)
|
||||||
|
for r in rows:
|
||||||
|
src, sid, title, url, summary, sig, raw = r
|
||||||
|
try: md = json.loads(raw or "{}")
|
||||||
|
except: md = {}
|
||||||
|
e = eng(src, md)
|
||||||
|
ct = ctype(title, summary, src)
|
||||||
|
by_src[src].append({"title": title, "sig": sig, "eng": e, "ct": ct, "src": src})
|
||||||
|
|
||||||
|
print("\n=== PER-SOURCE ENGAGEMENT (native units) ===")
|
||||||
|
for src, items in by_src.items():
|
||||||
|
comps = [i["eng"]["composite"] for i in items if i["eng"]["composite"]]
|
||||||
|
if not comps:
|
||||||
|
print(f" {src:11}: n={len(items)} (no engagement metric)")
|
||||||
|
continue
|
||||||
|
comps.sort()
|
||||||
|
med = comps[len(comps)//2]
|
||||||
|
mx = max(comps)
|
||||||
|
print(f" {src:11}: n={len(items):3} median_composite={med:8.1f} max={mx:10.1f}")
|
||||||
|
|
||||||
|
print("\n=== CONTENT-TYPE MIX (all sources) ===")
|
||||||
|
ct_counter = Counter(i["ct"] for items in by_src.values() for i in items)
|
||||||
|
for ct, n in ct_counter.most_common():
|
||||||
|
print(f" {ct:16}: {n:3} ({100*n/len(rows):.0f}%)")
|
||||||
|
|
||||||
|
print("\n=== ENGAGEMENT BY CONTENT-TYPE WITHIN HN (comparable units) ===")
|
||||||
|
hn = by_src["hackernews"]
|
||||||
|
hn_by_ct = defaultdict(list)
|
||||||
|
for i in hn:
|
||||||
|
hn_by_ct[i["ct"]].append(i["eng"]["composite"])
|
||||||
|
print(f" (HN n={len(hn)})")
|
||||||
|
for ct in sorted(hn_by_ct, key=lambda k: -max(hn_by_ct[k])):
|
||||||
|
vals = sorted(hn_by_ct[ct])
|
||||||
|
print(f" {ct:16}: n={len(vals):2} median={vals[len(vals)//2]:6.0f} max={max(vals):6.0f}")
|
||||||
|
|
||||||
|
print("\n=== ENGAGEMENT BY CONTENT-TYPE WITHIN REDDIT ===")
|
||||||
|
rd = by_src["reddit"]
|
||||||
|
rd_by_ct = defaultdict(list)
|
||||||
|
for i in rd:
|
||||||
|
rd_by_ct[i["ct"]].append(i["eng"]["composite"])
|
||||||
|
print(f" (Reddit n={len(rd)})")
|
||||||
|
for ct in sorted(rd_by_ct, key=lambda k: -max(rd_by_ct[k])):
|
||||||
|
vals = sorted(rd_by_ct[ct])
|
||||||
|
print(f" {ct:16}: n={len(vals):2} median={vals[len(vals)//2]:6.0f} max={max(vals):6.0f}")
|
||||||
|
|
||||||
|
print("\n=== GITHUB: top repos by stars/day ===")
|
||||||
|
gh = sorted(by_src["github"], key=lambda i: -(i["eng"]["stars_per_day"] or 0))[:8]
|
||||||
|
for i in gh:
|
||||||
|
print(f" {i['eng']['stars_per_day']:7.0f}/day {i['eng']['stars']:6}★ {i['ct']:14} | {i['title'][:55]}")
|
||||||
|
|
||||||
|
print("\n=== HN: top 10 by composite engagement ===")
|
||||||
|
hn_top = sorted(hn, key=lambda i: -(i["eng"]["composite"] or 0))[:10]
|
||||||
|
for i in hn_top:
|
||||||
|
print(f" pts={i['eng']['points']:5} cmt={i['eng']['comments']:5} [{i['ct']:14}] {i['title'][:55]}")
|
||||||
|
|
||||||
|
print("\n=== CORRELATION: Athena signal_score vs HN engagement ===")
|
||||||
|
# Does our relevance score track real clicks? (HN only, has both)
|
||||||
|
pairs = [(i["sig"], i["eng"]["composite"]) for i in hn if i["eng"]["composite"]]
|
||||||
|
if len(pairs) > 4:
|
||||||
|
xs = [p[0] for p in pairs]; ys = [p[1] for p in pairs]
|
||||||
|
mx, my = sum(xs)/len(xs), sum(ys)/len(ys)
|
||||||
|
num = sum((x-mx)*(y-my) for x,y in pairs)
|
||||||
|
den = math.sqrt(sum((x-mx)**2 for x in xs) * sum((y-my)**2 for y in ys))
|
||||||
|
corr = num/den if den else 0
|
||||||
|
print(f" Pearson r (signal_score vs HN composite) = {corr:.2f} (n={len(pairs)})")
|
||||||
|
print(f" -> {'signal tracks engagement' if corr>0.3 else 'signal does NOT track engagement; separate clickability score needed'}")
|
||||||
|
|
||||||
|
print("\n=== CROSS-SOURCE CORROBORATION (same story, 2+ sources) ===")
|
||||||
|
# crude: match by normalized title token overlap across sources
|
||||||
|
def toks(s):
|
||||||
|
return set(re.findall(r"[a-z0-9]{4,}", s.lower()))
|
||||||
|
cross = 0
|
||||||
|
all_items = [i for items in by_src.values() for i in items]
|
||||||
|
for a in all_items:
|
||||||
|
for b in all_items:
|
||||||
|
if a["src"] >= b["src"]: continue
|
||||||
|
ta, tb = toks(a["title"]), toks(b["title"])
|
||||||
|
if ta and tb and len(ta & tb) >= 3:
|
||||||
|
cross += 1
|
||||||
|
break
|
||||||
|
print(f" items appearing in 2+ sources (approx): {cross}")
|
||||||
|
|
||||||
|
c.close()
|
||||||
@@ -0,0 +1,179 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Live re-fetch right now and compare to today's cron snapshot in oracle.db.
|
||||||
|
Read-only against the DB (only reads). Does NOT store anything."""
|
||||||
|
import json, math, sys, os, time
|
||||||
|
sys.path.insert(0, os.path.dirname(__file__))
|
||||||
|
from datetime import datetime, timezone
|
||||||
|
import sqlite3
|
||||||
|
|
||||||
|
import importlib
|
||||||
|
|
||||||
|
SOURCES = ["github", "arxiv", "reddit", "hackernews", "huggingface"]
|
||||||
|
|
||||||
|
ADAPTER_CLASSES = {
|
||||||
|
"github": lambda: importlib.import_module("adapters.github").GitHubAdapter(),
|
||||||
|
"arxiv": lambda: importlib.import_module("adapters.arxiv").ArxivAdapter(),
|
||||||
|
"reddit": lambda: importlib.import_module("adapters.reddit").RedditAdapter(),
|
||||||
|
"hackernews": lambda: importlib.import_module("adapters.hackernews").HackerNewsAdapter(),
|
||||||
|
"huggingface": lambda: importlib.import_module("adapters.huggingface").HuggingFaceAdapter(),
|
||||||
|
}
|
||||||
|
NOW = datetime.now(timezone.utc)
|
||||||
|
TODAY = NOW.strftime("%Y-%m-%d")
|
||||||
|
|
||||||
|
# ---- DB: what cron already pulled today ----
|
||||||
|
db = sqlite3.connect(os.path.join(os.path.dirname(__file__), "oracle.db"))
|
||||||
|
db_rows = db.execute(
|
||||||
|
"select source,source_id,title,url,signal_score,raw_metadata "
|
||||||
|
"from entries where first_seen >= ?", (TODAY + "T00:00:00",)
|
||||||
|
).fetchall()
|
||||||
|
db_by_srcid = {}
|
||||||
|
for r in db_rows:
|
||||||
|
src, sid = r[0], r[1]
|
||||||
|
db_by_srcid.setdefault(src, {})[sid] = r
|
||||||
|
print(f"[DB today] {len(db_rows)} entries across {len(set(r[0] for r in db_rows))} sources")
|
||||||
|
|
||||||
|
# ---- LIVE re-fetch right now ----
|
||||||
|
live = {} # source -> list of entries
|
||||||
|
fail = {}
|
||||||
|
for name in SOURCES:
|
||||||
|
try:
|
||||||
|
adapter = ADAPTER_CLASSES[name]()
|
||||||
|
t0 = time.time()
|
||||||
|
entries = adapter.fetch(limit=20)
|
||||||
|
live[name] = entries
|
||||||
|
print(f"[LIVE] {name:11} {len(entries):2} entries in {time.time()-t0:5.1f}s")
|
||||||
|
except Exception as e:
|
||||||
|
fail[name] = str(e)
|
||||||
|
live[name] = []
|
||||||
|
print(f"[LIVE] {name:11} FAILED: {e}")
|
||||||
|
|
||||||
|
def norm(metric, values):
|
||||||
|
"""0-100 normalization via log scale for skewed engagement."""
|
||||||
|
vals = [v for v in values if v is not None and v >= 0]
|
||||||
|
if not vals:
|
||||||
|
return {}
|
||||||
|
mx = max(vals)
|
||||||
|
out = {}
|
||||||
|
for k, v in metric.items():
|
||||||
|
if v is None or v <= 0:
|
||||||
|
out[k] = 0.0
|
||||||
|
else:
|
||||||
|
out[k] = round(100 * math.log(1 + v) / math.log(1 + mx), 1) if mx > 0 else 0.0
|
||||||
|
return out
|
||||||
|
|
||||||
|
# ---- engagement extraction per source ----
|
||||||
|
def engagement(e):
|
||||||
|
"""Return (raw_engagement, metrics_dict, virality_0_100) per source."""
|
||||||
|
src = e["source"]
|
||||||
|
md = json.loads(e.get("raw_metadata", "{}") or "{}")
|
||||||
|
if src == "hackernews":
|
||||||
|
score = md.get("score", 0) or 0
|
||||||
|
desc = md.get("descendants", 0) or 0
|
||||||
|
eng = score + desc * 2 # comments weighted as stronger virality signal
|
||||||
|
metrics = {"points": score, "comments": desc}
|
||||||
|
elif src == "reddit":
|
||||||
|
ups = md.get("ups", 0) or 0
|
||||||
|
comments = md.get("num_comments", 0) or 0
|
||||||
|
eng = ups + comments * 2
|
||||||
|
metrics = {"ups": ups, "comments": comments}
|
||||||
|
elif src == "huggingface":
|
||||||
|
likes = md.get("likes", 0) or 0
|
||||||
|
dl = md.get("downloads", 0) or 0
|
||||||
|
eng = likes * 10 + dl * 0.01 # downloads are huge; down-weight
|
||||||
|
metrics = {"likes": likes, "downloads": dl}
|
||||||
|
elif src == "github":
|
||||||
|
spd = md.get("stars_per_day", 0) or 0
|
||||||
|
stars = md.get("stars", 0) or 0
|
||||||
|
eng = spd * 50 + stars * 0.001
|
||||||
|
metrics = {"stars/day": round(spd, 1), "stars": stars}
|
||||||
|
elif src == "arxiv":
|
||||||
|
eng = 0 # no engagement metrics; virality N/A, treat as research signal only
|
||||||
|
metrics = {"categories": ", ".join(md.get("categories", [])[:3])}
|
||||||
|
else:
|
||||||
|
eng = 0
|
||||||
|
metrics = {}
|
||||||
|
return eng, metrics
|
||||||
|
|
||||||
|
# ---- Build unified compare list ----
|
||||||
|
unified = []
|
||||||
|
for src, entries in live.items():
|
||||||
|
dbset = db_by_srcid.get(src, {})
|
||||||
|
for e in entries:
|
||||||
|
sid = e.get("source_id")
|
||||||
|
eng, metrics = engagement(e)
|
||||||
|
is_new = sid not in dbset # NEW since cron
|
||||||
|
unified.append({
|
||||||
|
"source": src,
|
||||||
|
"title": e.get("title", "")[:90],
|
||||||
|
"url": e.get("url", ""),
|
||||||
|
"signal": e.get("signal_score", 0),
|
||||||
|
"engagement": eng,
|
||||||
|
"metrics": metrics,
|
||||||
|
"new": is_new,
|
||||||
|
"sid": sid,
|
||||||
|
})
|
||||||
|
|
||||||
|
# ---- Normalize virality across ALL live items (cross-source) ----
|
||||||
|
all_eng = {u["sid"]: u["engagement"] for u in unified if u["engagement"] > 0}
|
||||||
|
norm_map = norm({k: v for k, v in all_eng.items()}, list(all_eng.values()))
|
||||||
|
for u in unified:
|
||||||
|
u["virality"] = norm_map.get(u["sid"], 0.0)
|
||||||
|
|
||||||
|
# ---- RANK by virality (desc), tiebreak signal_score ----
|
||||||
|
ranked = sorted(unified, key=lambda u: (u["virality"], u["signal"]), reverse=True)
|
||||||
|
|
||||||
|
print("\n" + "="*100)
|
||||||
|
print(f"LIVE PULL @ {NOW.strftime('%Y-%m-%d %H:%M UTC')} | {len(ranked)} items | NEW since cron: {sum(1 for u in unified if u['new'])}")
|
||||||
|
print("="*100)
|
||||||
|
|
||||||
|
# Full list
|
||||||
|
print("\n### FULL RANKED LIST (by virality)")
|
||||||
|
for i, u in enumerate(ranked, 1):
|
||||||
|
tag = "NEW" if u["new"] else " "
|
||||||
|
m = " ".join(f"{k}={v}" for k, v in u["metrics"].items())
|
||||||
|
print(f"{i:2}. [{u['virality']:5.1f}] {tag} {u['source']:10} | {u['title']}")
|
||||||
|
if m:
|
||||||
|
print(f" {m} (signal {u['signal']:.2f})")
|
||||||
|
|
||||||
|
# Trending = NEW items ranked by virality
|
||||||
|
trending = [u for u in ranked if u["new"]]
|
||||||
|
print("\n### TRENDING NOW (NEW since today's cron pull, by virality)")
|
||||||
|
if not trending:
|
||||||
|
print(" (no new items — live pull matches today's snapshot exactly)")
|
||||||
|
for i, u in enumerate(trending, 1):
|
||||||
|
m = " ".join(f"{k}={v}" for k, v in u["metrics"].items())
|
||||||
|
print(f"{i:2}. [{u['virality']:5.1f}] {u['source']:10} | {u['title']}")
|
||||||
|
if m: print(f" {m}")
|
||||||
|
|
||||||
|
# Source-level engagement summary
|
||||||
|
print("\n### PER-SOURCE VIRALITY CEILING (top live engagement)")
|
||||||
|
by_src = {}
|
||||||
|
for u in unified:
|
||||||
|
by_src.setdefault(u["source"], []).append(u)
|
||||||
|
for src in SOURCES:
|
||||||
|
items = by_src.get(src, [])
|
||||||
|
if not items:
|
||||||
|
print(f" {src:11}: (no live data)"); continue
|
||||||
|
top = max(items, key=lambda x: x["virality"])
|
||||||
|
print(f" {src:11}: top_virality={top['virality']:.1f} items_live={len(items)} new={sum(1 for x in items if x['new'])}")
|
||||||
|
|
||||||
|
db.close()
|
||||||
|
|
||||||
|
# ---- Persist full list as markdown (downloadable) ----
|
||||||
|
import os as _os
|
||||||
|
out_md = f"# Athena Live Compare — {NOW.strftime('%Y-%m-%d %H:%M UTC')}\n\n"
|
||||||
|
out_md += f"- **Live pull:** {len(ranked)} items (Reddit excluded — rate-limited)\n"
|
||||||
|
out_md += f"- **NEW since today's 13:00 UTC cron:** {sum(1 for u in unified if u['new'])}\n"
|
||||||
|
out_md += f"- **Caveat:** HF scores = cumulative traction, not 24h velocity. Velocity signals = GitHub stars/day, HN points/comments.\n\n"
|
||||||
|
out_md += "## FULL RANKED LIST (by cross-source virality)\n\n"
|
||||||
|
out_md += "| # | Virality | New | Source | Title | Key metric | Signal |\n"
|
||||||
|
out_md += "|---|---|---|---|---|---|---|\n"
|
||||||
|
for i, u in enumerate(ranked, 1):
|
||||||
|
tag = "NEW" if u["new"] else ""
|
||||||
|
m = ", ".join(f"{k}={v}" for k, v in u["metrics"].items())
|
||||||
|
out_md += f"| {i} | {u['virality']:.1f} | {tag} | {u['source']} | {u['title']} | {m} | {u['signal']:.2f} |\n"
|
||||||
|
out_path = _os.path.join(_os.path.dirname(__file__), f"live_compare_{NOW.strftime('%Y%m%d_%H%M')}.md")
|
||||||
|
with open(out_path, "w") as f:
|
||||||
|
f.write(out_md)
|
||||||
|
print(f"\n[SAVED] {out_path}")
|
||||||
|
|
||||||
+1948
File diff suppressed because it is too large
Load Diff
@@ -46,14 +46,16 @@ FEEDS = [
|
|||||||
("rss:mittr", "MIT Tech Review AI",
|
("rss:mittr", "MIT Tech Review AI",
|
||||||
"https://www.technologyreview.com/topic/artificial-intelligence/feed/"),
|
"https://www.technologyreview.com/topic/artificial-intelligence/feed/"),
|
||||||
# Company blogs (primary signals for launches)
|
# Company blogs (primary signals for launches)
|
||||||
|
# NOTE: anthropic/googleai/metaai RSS feeds are DEAD (404 as of 2026-07-12).
|
||||||
|
# Replaced with working equivalents: DeepMind RSS, MIT Tech Review, The Decoder.
|
||||||
("rss:openai", "OpenAI Blog",
|
("rss:openai", "OpenAI Blog",
|
||||||
"https://openai.com/blog/rss.xml"),
|
"https://openai.com/blog/rss.xml"),
|
||||||
("rss:anthropic", "Anthropic News",
|
("rss:deepmind", "Google DeepMind Blog",
|
||||||
"https://www.anthropic.com/rss/news.xml"),
|
"https://deepmind.google/blog/rss.xml"),
|
||||||
("rss:googleai", "Google AI Blog",
|
("rss:mittr", "MIT Tech Review AI",
|
||||||
"https://blog.google/technology/rss.xml"),
|
"https://www.technologyreview.com/topic/artificial-intelligence/feed/"),
|
||||||
("rss:metaai", "Meta AI Blog",
|
("rss:decoder", "The Decoder",
|
||||||
"https://ai.meta.com/blog/rss.xml"),
|
"https://www.the-decoder.com/feed/"),
|
||||||
]
|
]
|
||||||
|
|
||||||
# AI relevance keywords for filtering — word-boundary matching
|
# AI relevance keywords for filtering — word-boundary matching
|
||||||
|
|||||||
+489
@@ -0,0 +1,489 @@
|
|||||||
|
# Athena AI News — Top 50 (Today Only)
|
||||||
|
|
||||||
|
> Generated 2026-07-11 15:01 UTC · fresh filter: ingested 2026-07-11 (UTC) · ranked by virality + 18h decay
|
||||||
|
> Source: oracle.db · 50 items shown of 80 fresh today
|
||||||
|
|
||||||
|
| # | Title | Source | Score | Age | Link |
|
||||||
|
|---|-------|--------|-------|-----|------|
|
||||||
|
| 1 | Apple sues OpenAI, accuses ex-employees of stealing trade secrets | hackernews | 0.53 | 2h | [link](https://9to5mac.com/2026/07/10/apple-sues-openai-trade-secret-theft/) |
|
||||||
|
| 2 | GPT-5.6 | hackernews | 0.51 | 2h | [link](https://openai.com/index/gpt-5-6/) |
|
||||||
|
| 3 | texts-to-transformer: Train a tiny Transformer from scratch on your iMessage history, entirely on your Mac. | github | 0.47 | 2h | [link](https://github.com/Doriandarko/texts-to-transformer) |
|
||||||
|
| 4 | GPT-5.6 Sol Ultra produces proof of the Cycle Double Cover Conjecture [pdf] | hackernews | 0.45 | 2h | [link](https://cdn.openai.com/pdf/04d1d1e4-bc75-476a-97cf-49055cd98d31/cdc_proof.pdf) |
|
||||||
|
| 5 | Cognitive-Core-Skills: A universal, industry-neutral taxonomy of cognitive core skills (perception, memory, reasoning, plan | github | 0.43 | 2h | [link](https://github.com/eli-labz/Cognitive-Core-Skills) |
|
||||||
|
| 6 | photoshop-ai-smart-enhance: AI-powered image enhancement extension for Adobe Photoshop CC 2024+. Intelligent exposure correction | github | 0.42 | 2h | [link](https://github.com/FuelMagistrateLead/photoshop-ai-smart-enhance) |
|
||||||
|
| 7 | aipath: Interactive AI General Education Course — 30 Lessons, Zero Math | github | 0.39 | 2h | [link](https://github.com/buynao/aipath) |
|
||||||
|
| 8 | AI-generated videos to maximally drive a target brain region | hackernews | 0.38 | 2h | [link](https://nevo-project.epfl.ch/) |
|
||||||
|
| 9 | How the terrorist group Boko Haram uses frontier AI | hackernews | 0.38 | 2h | [link](https://casp.ac/reports/ai-enabled-terrorism) |
|
||||||
|
| 10 | AI 2040: Plan A | hackernews | 0.38 | 2h | [link](https://ai-2040.com/) |
|
||||||
|
| 11 | ChatGPT Work | hackernews | 0.37 | 2h | [link](https://openai.com/index/chatgpt-for-your-most-ambitious-work/) |
|
||||||
|
| 12 | AI content is everywhere on social media, especially LinkedIn | hackernews | 0.36 | 2h | [link](https://www.pangram.com/blog/ai-in-your-feed) |
|
||||||
|
| 13 | Building a real-time AI tutor for 5-year-olds | hackernews | 0.35 | 2h | [link](https://www.ello.com/blog/teaching-a-child-in-1000-ms) |
|
||||||
|
| 14 | A font that humans can read but AI cannot | hackernews | 0.34 | 2h | [link](https://www.mixfont.com/ghost-font) |
|
||||||
|
| 15 | GPT-5.6, Grok 4.5, Claude, and Muse Spark build the same 4 apps | hackernews | 0.34 | 2h | [link](https://www.tryai.dev/blog/gpt-5.6-build-off-12-models) |
|
||||||
|
| 16 | reality-engine: Top Dynamic AI World Simulation & Storytelling Tools 2026 | github | 0.33 | 2h | [link](https://github.com/grandgaming9321-prog/reality-engine) |
|
||||||
|
| 17 | manuscript-phoneme-decipher: Voynich Manuscript Decoded: Elu-Sinhala Phonetic Transcription & Vocabulary Toolkit 2026 | github | 0.33 | 2h | [link](https://github.com/okesipoke/manuscript-phoneme-decipher) |
|
||||||
|
| 18 | ai-image-clean-eraser: AI-Powered Text Remover 2026: Auto-Detect & Manual Precision with HD Quality | github | 0.33 | 2h | [link](https://github.com/Sujal-142/ai-image-clean-eraser) |
|
||||||
|
| 19 | churn-triad-insights: LLM-Powered Churn Risk Analyzer for Scalable 2026 Decision Support | github | 0.33 | 2h | [link](https://github.com/pravin6688/churn-triad-insights) |
|
||||||
|
| 20 | swarm-foraging-qlearn: Q-Learning Swarm Foraging 2026: Multi-Agent RL in Dynamic Grid Environments | github | 0.33 | 2h | [link](https://github.com/jaimasih05-commits/swarm-foraging-qlearn) |
|
||||||
|
| 21 | Paradigm-Survival-Arena: Top 6 AI Paradigms Fighting for Survival in 2026 | github | 0.33 | 2h | [link](https://github.com/aminekago-web/Paradigm-Survival-Arena) |
|
||||||
|
| 22 | cortex-sentinel-trading-nexus: Self-Tuning Multi-Agent AI Trading System 2026: 8-Source Signal Fusion & Kronos Model | github | 0.33 | 2h | [link](https://github.com/reunios2024/cortex-sentinel-trading-nexus) |
|
||||||
|
| 23 | magic-eraser-studio: AI Object Remover 2026 – Erase Distractions & Keep HD Quality | github | 0.33 | 2h | [link](https://github.com/onlyoneshakibul/magic-eraser-studio) |
|
||||||
|
| 24 | ShipGenAI: 🚀 50 production-ready Generative AI SaaS apps — brand them, ship them, keep 100% of the revenue. Str | github | 0.32 | 2h | [link](https://github.com/benlamiro/ShipGenAI) |
|
||||||
|
| 25 | ESEILANE: High-performance Knowledge Graph engine for AI, LLMs, and GraphRAG — built for the next generation o | github | 0.32 | 2h | [link](https://github.com/Aliu-AiRobot/ESEILANE) |
|
||||||
|
| 26 | Hello-Agents: 🤖 Building AI Agent Systems from Scratch — A comprehensive, practical tutorial from fundamentals to | github | 0.31 | 2h | [link](https://github.com/Reyzowter/Hello-Agents) |
|
||||||
|
| 27 | Apple sues OpenAI, accusing it of stealing company secrets | hackernews | 0.30 | 2h | [link](https://www.nytimes.com/2026/07/10/technology/apple-openai-lawsuit.html) |
|
||||||
|
| 28 | ESEILANE: High-performance Knowledge Graph engine for AI, LLMs, and GraphRAG — built for the next generation o | github | 0.28 | 2h | [link](https://github.com/Simpl3x3/ESEILANE) |
|
||||||
|
| 29 | Agent-Loop-Skills: Loop until it's better — drop-in agentic loops (autoresearch, scientific writing, data analysis, cod | github | 0.28 | 2h | [link](https://github.com/gaasher/Agent-Loop-Skills) |
|
||||||
|
| 30 | autoguardrails: Alignment-research scaffold (autoresearch-style) for LLM guardrails: search over a single policy.md | github | 0.28 | 2h | [link](https://github.com/SantanderAI/autoguardrails) |
|
||||||
|
| 31 | Anti-Autoresearch: Don't trust an autoresearch paper at face value. Reviewer-side integrity forensics (self-consistency | github | 0.28 | 2h | [link](https://github.com/wanshuiyin/Anti-Autoresearch) |
|
||||||
|
| 32 | Ben Bernanke Joins Anthropic Oversight Trust | hackernews | 0.28 | 2h | [link](https://www.anthropic.com/news/ben-bernanke) |
|
||||||
|
| 33 | SimPolitics: America’s quest to solve politics with computers | hackernews | 0.27 | 2h | [link](https://mitpress.mit.edu/9780262053198/simpolitics/) |
|
||||||
|
| 34 | FerryAI: Native AI inference for PHP 8.3+ - run ONNX, GGUF (llama.cpp) and RubixML models directly in your PH | github | 0.27 | 2h | [link](https://github.com/MADEVAL/FerryAI) |
|
||||||
|
| 35 | Show HN: FableCut – A browser video editor AI agents can drive (zero deps) | hackernews | 0.27 | 2h | [link](https://github.com/ronak-create/FableCut) |
|
||||||
|
| 36 | Hands-On with the AMD Ryzen AI Halo | hackernews | 0.26 | 2h | [link](https://www.microcenter.com/site/mc-news/article/amd-ryzen-ai-halo-review.aspx) |
|
||||||
|
| 37 | Show HN: Reverse-engineering web apps into agent tools | hackernews | 0.26 | 2h | [link](https://news.ycombinator.com/item/48847834) |
|
||||||
|
| 38 | How version control will evolve for the agent boom | hackernews | 0.25 | 2h | [link](https://entire.io/blog/how-version-control-will-evolve-for-the-agent-boom) |
|
||||||
|
| 39 | Show HN: Reviving my 2001 college band with AI | hackernews | 0.25 | 2h | [link](https://www.fadingmaize.com) |
|
||||||
|
| 40 | The next era of AI is about infrastructure, not just models | hackernews | 0.23 | 2h | [link](https://blog.mozilla.ai/the-control-layer-why-the-next-era-of-ai-is-about-infrastructure-not-just-models/) |
|
||||||
|
| 41 | UniClawBench: A Universal Benchmark for Proactive Agents on Real-World Tasks | arxiv | 0.00 | 2h | [link](https://arxiv.org/abs/2607.08768v1) |
|
||||||
|
| 42 | OpenCoF: Learning to Reason Through Video Generation | arxiv | 0.00 | 2h | [link](https://arxiv.org/abs/2607.08763v1) |
|
||||||
|
| 43 | Ideas Have Genomes: Benchmarking Scientific Lineage Reasoning and Lineage-Grounded Idea Generation | arxiv | 0.00 | 2h | [link](https://arxiv.org/abs/2607.08758v1) |
|
||||||
|
| 44 | Score Accuracy Along the Forward Diffusion Does Not Certify Numerical Stability in Diffusion Sampling | arxiv | 0.00 | 2h | [link](https://arxiv.org/abs/2607.08757v1) |
|
||||||
|
| 45 | MulTTiPop: A Multitrack Transcription Dataset for Pop Music | arxiv | 0.00 | 2h | [link](https://arxiv.org/abs/2607.08756v1) |
|
||||||
|
| 46 | SLORR: Simple and Efficient In-Training Low-Rank Regularization | arxiv | 0.00 | 2h | [link](https://arxiv.org/abs/2607.08754v1) |
|
||||||
|
| 47 | Using AI-based Learning Assistants in Higher Education: A Large-Scale Descriptive Analysis | arxiv | 0.00 | 2h | [link](https://arxiv.org/abs/2607.08748v1) |
|
||||||
|
| 48 | Dimensionality Reduction Meets Network Science: Sensemaking on UMAP's kNN Graph | arxiv | 0.00 | 2h | [link](https://arxiv.org/abs/2607.08746v1) |
|
||||||
|
| 49 | AUTOPILOT VQA: Benchmarking Vision-Language Models for Incident-Centric Dashcam Understanding | arxiv | 0.00 | 2h | [link](https://arxiv.org/abs/2607.08745v1) |
|
||||||
|
| 50 | ARDY: Autoregressive Diffusion with Hybrid Representation for Interactive Human Motion Generation | arxiv | 0.00 | 2h | [link](https://arxiv.org/abs/2607.08741v1) |
|
||||||
|
|
||||||
|
## One-liners
|
||||||
|
|
||||||
|
3. **texts-to-transformer: Train a tiny Transformer from scratch ** — Train a tiny language model from scratch on your iMessage history, entirely on your Mac.
|
||||||
|
5. **Cognitive-Core-Skills: A universal, industry-neutral taxonom** — Cognitive core skills are the mental operating capabilities an LLM or AI Agent needs to move from chat response to useful digital co-worker.
|
||||||
|
6. **photoshop-ai-smart-enhance: AI-powered image enhancement ext** — photoshop-ai-smart-enhance is a machine learning extension that automates image quality improvements.
|
||||||
|
7. **aipath: Interactive AI General Education Course — 30 Lessons** — ↑ The homepage hero (Lesson 15 · the next-token game): an LLM guesses one token at a time — turn the temperature and watch its top-5 candidates reshape, from fo
|
||||||
|
16. **reality-engine: Top Dynamic AI World Simulation & Storytelli** — Welcome to **Chronos Engine** — a groundbreaking temporal simulation platform that empowers researchers, storytellers, game developers, and futurists to constru
|
||||||
|
17. **manuscript-phoneme-decipher: Voynich Manuscript Decoded: Elu** — What if a manuscript wasn't written in a lost language, but in a forgotten way of hearing.
|
||||||
|
18. **ai-image-clean-eraser: AI-Powered Text Remover 2026: Auto-De** — In a digital ecosystem where document fraud costs organizations over **$1.
|
||||||
|
19. **churn-triad-insights: LLM-Powered Churn Risk Analyzer for Sc** — Every day, thousands of customers quietly signal their intent to leave.
|
||||||
|
20. **swarm-foraging-qlearn: Q-Learning Swarm Foraging 2026: Multi** — Embark on a journey into emergent intelligence, where autonomous agents learn to collaborate, compete, and coexist in a living, breathing digital ecosystem.
|
||||||
|
21. **Paradigm-Survival-Arena: Top 6 AI Paradigms Fighting for Sur** — Unlike traditional ML benchmarks that test accuracy on static datasets, Synaptic Colosseum evaluates models on *adaptive fitness*: the ability to learn from spa
|
||||||
|
41. **UniClawBench: A Universal Benchmark for Proactive Agents on ** — we introduce UniClawBench, the first capability-driven benchmark designed to evaluate proactive agents in dynamic, real-world settings.
|
||||||
|
42. **OpenCoF: Learning to Reason Through Video Generation** — Reasoning has become a core capability for large models, especially when reliable decisions require understanding logical consequences
|
||||||
|
43. **Ideas Have Genomes: Benchmarking Scientific Lineage Reasonin** — We present IdeaGene-Bench (IG-Bench), a benchmark for scientific lineage reasoning and lineage-grounded idea generation.
|
||||||
|
44. **Score Accuracy Along the Forward Diffusion Does Not Certify ** — We show that small forward-marginal error does not guarantee numerical stability.
|
||||||
|
45. **MulTTiPop: A Multitrack Transcription Dataset for Pop Music** — We present MulTTiPop, a dataset of pop music segments and their associated multitrack MIDI recordings for the evaluation of automatic music transcription models
|
||||||
|
46. **SLORR: Simple and Efficient In-Training Low-Rank Regularizat** — Low-rank factorization is widely used to compress neural networks, but modern models are often not naturally amenable to aggressive factorization without signif
|
||||||
|
47. **Using AI-based Learning Assistants in Higher Education: A La** — we present a large-scale descriptive analysis of the use of an AI-based learning assistant (Syntea) in higher education.
|
||||||
|
48. **Dimensionality Reduction Meets Network Science: Sensemaking ** — we show that these graph-based analyses are not only practical but also competitive with or complementary to purpose-built methods (e.
|
||||||
|
49. **AUTOPILOT VQA: Benchmarking Vision-Language Models for Incid** — we present AUTOPILOT-VQA, an incident-centric visual question answering benchmark for dashcam video understanding.
|
||||||
|
50. **ARDY: Autoregressive Diffusion with Hybrid Representation fo** — Generating realistic 3D human motions in real-time within interactive applications is key for animation, simulation, and humanoid robotics
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Raw data (JSON)
|
||||||
|
|
||||||
|
```json
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"title": "Apple sues OpenAI, accuses ex-employees of stealing trade secrets",
|
||||||
|
"url": "https://9to5mac.com/2026/07/10/apple-sues-openai-trade-secret-theft/",
|
||||||
|
"source": "hackernews",
|
||||||
|
"score": 0.5253,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "GPT-5.6",
|
||||||
|
"url": "https://openai.com/index/gpt-5-6/",
|
||||||
|
"source": "hackernews",
|
||||||
|
"score": 0.509,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "texts-to-transformer: Train a tiny Transformer from scratch on your iMessage history, entirely on your Mac.",
|
||||||
|
"url": "https://github.com/Doriandarko/texts-to-transformer",
|
||||||
|
"source": "github",
|
||||||
|
"score": 0.4688,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": "Train a tiny language model from scratch on your iMessage history, entirely on your Mac."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "GPT-5.6 Sol Ultra produces proof of the Cycle Double Cover Conjecture [pdf]",
|
||||||
|
"url": "https://cdn.openai.com/pdf/04d1d1e4-bc75-476a-97cf-49055cd98d31/cdc_proof.pdf",
|
||||||
|
"source": "hackernews",
|
||||||
|
"score": 0.448,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Cognitive-Core-Skills: A universal, industry-neutral taxonomy of cognitive core skills (perception, memory, reasoning, plan",
|
||||||
|
"url": "https://github.com/eli-labz/Cognitive-Core-Skills",
|
||||||
|
"source": "github",
|
||||||
|
"score": 0.4256,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": "Cognitive core skills are the mental operating capabilities an LLM or AI Agent needs to move from chat response to useful digital co-worker."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "photoshop-ai-smart-enhance: AI-powered image enhancement extension for Adobe Photoshop CC 2024+. Intelligent exposure correction",
|
||||||
|
"url": "https://github.com/FuelMagistrateLead/photoshop-ai-smart-enhance",
|
||||||
|
"source": "github",
|
||||||
|
"score": 0.4197,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": "photoshop-ai-smart-enhance is a machine learning extension that automates image quality improvements."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "aipath: Interactive AI General Education Course — 30 Lessons, Zero Math",
|
||||||
|
"url": "https://github.com/buynao/aipath",
|
||||||
|
"source": "github",
|
||||||
|
"score": 0.3918,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": "↑ The homepage hero (Lesson 15 · the next-token game): an LLM guesses one token at a time — turn the temperature and watch its top-5 candidates reshape, from focused to “wild."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "AI-generated videos to maximally drive a target brain region",
|
||||||
|
"url": "https://nevo-project.epfl.ch/",
|
||||||
|
"source": "hackernews",
|
||||||
|
"score": 0.3827,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "How the terrorist group Boko Haram uses frontier AI",
|
||||||
|
"url": "https://casp.ac/reports/ai-enabled-terrorism",
|
||||||
|
"source": "hackernews",
|
||||||
|
"score": 0.3793,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "AI 2040: Plan A",
|
||||||
|
"url": "https://ai-2040.com/",
|
||||||
|
"source": "hackernews",
|
||||||
|
"score": 0.3785,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "ChatGPT Work",
|
||||||
|
"url": "https://openai.com/index/chatgpt-for-your-most-ambitious-work/",
|
||||||
|
"source": "hackernews",
|
||||||
|
"score": 0.3745,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "AI content is everywhere on social media, especially LinkedIn",
|
||||||
|
"url": "https://www.pangram.com/blog/ai-in-your-feed",
|
||||||
|
"source": "hackernews",
|
||||||
|
"score": 0.3553,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Building a real-time AI tutor for 5-year-olds",
|
||||||
|
"url": "https://www.ello.com/blog/teaching-a-child-in-1000-ms",
|
||||||
|
"source": "hackernews",
|
||||||
|
"score": 0.3519,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "A font that humans can read but AI cannot",
|
||||||
|
"url": "https://www.mixfont.com/ghost-font",
|
||||||
|
"source": "hackernews",
|
||||||
|
"score": 0.3433,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "GPT-5.6, Grok 4.5, Claude, and Muse Spark build the same 4 apps",
|
||||||
|
"url": "https://www.tryai.dev/blog/gpt-5.6-build-off-12-models",
|
||||||
|
"source": "hackernews",
|
||||||
|
"score": 0.343,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "reality-engine: Top Dynamic AI World Simulation & Storytelling Tools 2026",
|
||||||
|
"url": "https://github.com/grandgaming9321-prog/reality-engine",
|
||||||
|
"source": "github",
|
||||||
|
"score": 0.3342,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": "Welcome to **Chronos Engine** — a groundbreaking temporal simulation platform that empowers researchers, storytellers, game developers, and futurists to construct, explore, and manipulate dynamic time"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "manuscript-phoneme-decipher: Voynich Manuscript Decoded: Elu-Sinhala Phonetic Transcription & Vocabulary Toolkit 2026",
|
||||||
|
"url": "https://github.com/okesipoke/manuscript-phoneme-decipher",
|
||||||
|
"source": "github",
|
||||||
|
"score": 0.3342,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": "What if a manuscript wasn't written in a lost language, but in a forgotten way of hearing."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "ai-image-clean-eraser: AI-Powered Text Remover 2026: Auto-Detect & Manual Precision with HD Quality",
|
||||||
|
"url": "https://github.com/Sujal-142/ai-image-clean-eraser",
|
||||||
|
"source": "github",
|
||||||
|
"score": 0.3342,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": "In a digital ecosystem where document fraud costs organizations over **$1."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "churn-triad-insights: LLM-Powered Churn Risk Analyzer for Scalable 2026 Decision Support",
|
||||||
|
"url": "https://github.com/pravin6688/churn-triad-insights",
|
||||||
|
"source": "github",
|
||||||
|
"score": 0.3335,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": "Every day, thousands of customers quietly signal their intent to leave."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "swarm-foraging-qlearn: Q-Learning Swarm Foraging 2026: Multi-Agent RL in Dynamic Grid Environments",
|
||||||
|
"url": "https://github.com/jaimasih05-commits/swarm-foraging-qlearn",
|
||||||
|
"source": "github",
|
||||||
|
"score": 0.3335,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": "Embark on a journey into emergent intelligence, where autonomous agents learn to collaborate, compete, and coexist in a living, breathing digital ecosystem."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Paradigm-Survival-Arena: Top 6 AI Paradigms Fighting for Survival in 2026",
|
||||||
|
"url": "https://github.com/aminekago-web/Paradigm-Survival-Arena",
|
||||||
|
"source": "github",
|
||||||
|
"score": 0.3335,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": "Unlike traditional ML benchmarks that test accuracy on static datasets, Synaptic Colosseum evaluates models on *adaptive fitness*: the ability to learn from sparse rewards, generalize from limited exa"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "cortex-sentinel-trading-nexus: Self-Tuning Multi-Agent AI Trading System 2026: 8-Source Signal Fusion & Kronos Model",
|
||||||
|
"url": "https://github.com/reunios2024/cortex-sentinel-trading-nexus",
|
||||||
|
"source": "github",
|
||||||
|
"score": 0.3335,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "magic-eraser-studio: AI Object Remover 2026 – Erase Distractions & Keep HD Quality",
|
||||||
|
"url": "https://github.com/onlyoneshakibul/magic-eraser-studio",
|
||||||
|
"source": "github",
|
||||||
|
"score": 0.3335,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "ShipGenAI: 🚀 50 production-ready Generative AI SaaS apps — brand them, ship them, keep 100% of the revenue. Str",
|
||||||
|
"url": "https://github.com/benlamiro/ShipGenAI",
|
||||||
|
"source": "github",
|
||||||
|
"score": 0.324,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "ESEILANE: High-performance Knowledge Graph engine for AI, LLMs, and GraphRAG — built for the next generation o",
|
||||||
|
"url": "https://github.com/Aliu-AiRobot/ESEILANE",
|
||||||
|
"source": "github",
|
||||||
|
"score": 0.3238,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Hello-Agents: 🤖 Building AI Agent Systems from Scratch — A comprehensive, practical tutorial from fundamentals to ",
|
||||||
|
"url": "https://github.com/Reyzowter/Hello-Agents",
|
||||||
|
"source": "github",
|
||||||
|
"score": 0.3146,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Apple sues OpenAI, accusing it of stealing company secrets",
|
||||||
|
"url": "https://www.nytimes.com/2026/07/10/technology/apple-openai-lawsuit.html",
|
||||||
|
"source": "hackernews",
|
||||||
|
"score": 0.3006,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "ESEILANE: High-performance Knowledge Graph engine for AI, LLMs, and GraphRAG — built for the next generation o",
|
||||||
|
"url": "https://github.com/Simpl3x3/ESEILANE",
|
||||||
|
"source": "github",
|
||||||
|
"score": 0.2844,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Agent-Loop-Skills: Loop until it's better — drop-in agentic loops (autoresearch, scientific writing, data analysis, cod",
|
||||||
|
"url": "https://github.com/gaasher/Agent-Loop-Skills",
|
||||||
|
"source": "github",
|
||||||
|
"score": 0.2841,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "autoguardrails: Alignment-research scaffold (autoresearch-style) for LLM guardrails: search over a single policy.md ",
|
||||||
|
"url": "https://github.com/SantanderAI/autoguardrails",
|
||||||
|
"source": "github",
|
||||||
|
"score": 0.284,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Anti-Autoresearch: Don't trust an autoresearch paper at face value. Reviewer-side integrity forensics (self-consistency",
|
||||||
|
"url": "https://github.com/wanshuiyin/Anti-Autoresearch",
|
||||||
|
"source": "github",
|
||||||
|
"score": 0.2834,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Ben Bernanke Joins Anthropic Oversight Trust",
|
||||||
|
"url": "https://www.anthropic.com/news/ben-bernanke",
|
||||||
|
"source": "hackernews",
|
||||||
|
"score": 0.2826,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "SimPolitics: America’s quest to solve politics with computers",
|
||||||
|
"url": "https://mitpress.mit.edu/9780262053198/simpolitics/",
|
||||||
|
"source": "hackernews",
|
||||||
|
"score": 0.273,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "FerryAI: Native AI inference for PHP 8.3+ - run ONNX, GGUF (llama.cpp) and RubixML models directly in your PH",
|
||||||
|
"url": "https://github.com/MADEVAL/FerryAI",
|
||||||
|
"source": "github",
|
||||||
|
"score": 0.2726,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Show HN: FableCut – A browser video editor AI agents can drive (zero deps)",
|
||||||
|
"url": "https://github.com/ronak-create/FableCut",
|
||||||
|
"source": "hackernews",
|
||||||
|
"score": 0.2723,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Hands-On with the AMD Ryzen AI Halo",
|
||||||
|
"url": "https://www.microcenter.com/site/mc-news/article/amd-ryzen-ai-halo-review.aspx",
|
||||||
|
"source": "hackernews",
|
||||||
|
"score": 0.2582,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Show HN: Reverse-engineering web apps into agent tools",
|
||||||
|
"url": "https://news.ycombinator.com/item/48847834",
|
||||||
|
"source": "hackernews",
|
||||||
|
"score": 0.2561,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "How version control will evolve for the agent boom",
|
||||||
|
"url": "https://entire.io/blog/how-version-control-will-evolve-for-the-agent-boom",
|
||||||
|
"source": "hackernews",
|
||||||
|
"score": 0.2506,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Show HN: Reviving my 2001 college band with AI",
|
||||||
|
"url": "https://www.fadingmaize.com",
|
||||||
|
"source": "hackernews",
|
||||||
|
"score": 0.2497,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "The next era of AI is about infrastructure, not just models",
|
||||||
|
"url": "https://blog.mozilla.ai/the-control-layer-why-the-next-era-of-ai-is-about-infrastructure-not-just-models/",
|
||||||
|
"source": "hackernews",
|
||||||
|
"score": 0.2311,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "UniClawBench: A Universal Benchmark for Proactive Agents on Real-World Tasks",
|
||||||
|
"url": "https://arxiv.org/abs/2607.08768v1",
|
||||||
|
"source": "arxiv",
|
||||||
|
"score": 0.0,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": "we introduce UniClawBench, the first capability-driven benchmark designed to evaluate proactive agents in dynamic, real-world settings."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "OpenCoF: Learning to Reason Through Video Generation",
|
||||||
|
"url": "https://arxiv.org/abs/2607.08763v1",
|
||||||
|
"source": "arxiv",
|
||||||
|
"score": 0.0,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": "Reasoning has become a core capability for large models, especially when reliable decisions require understanding logical consequences"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Ideas Have Genomes: Benchmarking Scientific Lineage Reasoning and Lineage-Grounded Idea Generation",
|
||||||
|
"url": "https://arxiv.org/abs/2607.08758v1",
|
||||||
|
"source": "arxiv",
|
||||||
|
"score": 0.0,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": "We present IdeaGene-Bench (IG-Bench), a benchmark for scientific lineage reasoning and lineage-grounded idea generation."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Score Accuracy Along the Forward Diffusion Does Not Certify Numerical Stability in Diffusion Sampling",
|
||||||
|
"url": "https://arxiv.org/abs/2607.08757v1",
|
||||||
|
"source": "arxiv",
|
||||||
|
"score": 0.0,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": "We show that small forward-marginal error does not guarantee numerical stability."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "MulTTiPop: A Multitrack Transcription Dataset for Pop Music",
|
||||||
|
"url": "https://arxiv.org/abs/2607.08756v1",
|
||||||
|
"source": "arxiv",
|
||||||
|
"score": 0.0,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": "We present MulTTiPop, a dataset of pop music segments and their associated multitrack MIDI recordings for the evaluation of automatic music transcription models."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "SLORR: Simple and Efficient In-Training Low-Rank Regularization",
|
||||||
|
"url": "https://arxiv.org/abs/2607.08754v1",
|
||||||
|
"source": "arxiv",
|
||||||
|
"score": 0.0,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": "Low-rank factorization is widely used to compress neural networks, but modern models are often not naturally amenable to aggressive factorization without significant accuracy loss"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Using AI-based Learning Assistants in Higher Education: A Large-Scale Descriptive Analysis",
|
||||||
|
"url": "https://arxiv.org/abs/2607.08748v1",
|
||||||
|
"source": "arxiv",
|
||||||
|
"score": 0.0,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": "we present a large-scale descriptive analysis of the use of an AI-based learning assistant (Syntea) in higher education."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "Dimensionality Reduction Meets Network Science: Sensemaking on UMAP's kNN Graph",
|
||||||
|
"url": "https://arxiv.org/abs/2607.08746v1",
|
||||||
|
"source": "arxiv",
|
||||||
|
"score": 0.0,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": "we show that these graph-based analyses are not only practical but also competitive with or complementary to purpose-built methods (e."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "AUTOPILOT VQA: Benchmarking Vision-Language Models for Incident-Centric Dashcam Understanding",
|
||||||
|
"url": "https://arxiv.org/abs/2607.08745v1",
|
||||||
|
"source": "arxiv",
|
||||||
|
"score": 0.0,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": "we present AUTOPILOT-VQA, an incident-centric visual question answering benchmark for dashcam video understanding."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "ARDY: Autoregressive Diffusion with Hybrid Representation for Interactive Human Motion Generation",
|
||||||
|
"url": "https://arxiv.org/abs/2607.08741v1",
|
||||||
|
"source": "arxiv",
|
||||||
|
"score": 0.0,
|
||||||
|
"age": 2.0,
|
||||||
|
"one": "Generating realistic 3D human motions in real-time within interactive applications is key for animation, simulation, and humanoid robotics"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
```
|
||||||
+298
@@ -0,0 +1,298 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Clickability Index for Athena entries.
|
||||||
|
|
||||||
|
CORRECTED for the REAL schema (verified 2026-07-10):
|
||||||
|
- Table is `entries`, not `items`.
|
||||||
|
- Per-source engagement lives inside the `raw_metadata` JSON blob, not
|
||||||
|
top-level `velocity_raw` / `engagement_raw` columns.
|
||||||
|
- `content_type` is COMPUTED, not stored.
|
||||||
|
|
||||||
|
This module is read-only against the DB (SELECT only). It does not
|
||||||
|
modify oracle.db.
|
||||||
|
|
||||||
|
The MULTIPLIERS and formula match the approved plan exactly.
|
||||||
|
"""
|
||||||
|
import sqlite3, json, math, re, os, time
|
||||||
|
from datetime import datetime, timezone
|
||||||
|
from collections import defaultdict
|
||||||
|
|
||||||
|
DB_PATH = os.path.join(os.path.dirname(__file__), "oracle.db")
|
||||||
|
|
||||||
|
MULTIPLIERS = {} # category multipliers removed: clickability is now virality-driven, not category-driven
|
||||||
|
|
||||||
|
# Virality weights (clickability = how viral/spreadable an item is right now)
|
||||||
|
VEL_W = 0.50
|
||||||
|
ENG_W = 0.50
|
||||||
|
SIG_W = 0.0 # signal_score no longer in the clickability blend (pure virality)
|
||||||
|
|
||||||
|
NOW = None # set in main/fetch for age math
|
||||||
|
|
||||||
|
|
||||||
|
def get_connection():
|
||||||
|
return sqlite3.connect(DB_PATH)
|
||||||
|
|
||||||
|
|
||||||
|
def _classify(src, title, summary):
|
||||||
|
t = (title + " " + (summary or "")).lower()
|
||||||
|
# Show HN — check first (builder posts)
|
||||||
|
if re.search(r"\bshow\s+hn\b", t) or (src == "hackernews" and re.search(r"\b(show|built|made|launched|shipped)\b", t)):
|
||||||
|
return "SHOW_HN"
|
||||||
|
# Model release — pattern-based (works for third-party coverage too)
|
||||||
|
if re.search(r"\b(gpt-|gpt5|gpt-5|deepseek|glm-|llama|qwen|claude|gemini|mistral|flux|stable-diffusion|sora|kimi|grok)\b", t) \
|
||||||
|
and re.search(r"\b(releases?|released|v\d|launch|unveil|model|new\s+model|update|version)\b", t):
|
||||||
|
return "MODEL_RELEASE"
|
||||||
|
if re.search(r"\b(releases?|released|launches?|unveils?|announces?|debut|new\s+model|gpt-5|deepseek-v|glm-5)\b", t) \
|
||||||
|
and re.search(r"\b(openai|anthropic|google|meta|microsoft|nvidia|ai)\b", t):
|
||||||
|
return "MODEL_RELEASE"
|
||||||
|
# HF model cards
|
||||||
|
if src == "huggingface":
|
||||||
|
return "MODEL_CARD"
|
||||||
|
# Research papers
|
||||||
|
if src == "arxiv" or re.search(r"\b(paper|study|benchmark|arxiv|proposes|learns?|novel|framework\s+for|towards)\b", t):
|
||||||
|
return "RESEARCH"
|
||||||
|
# Business/legal
|
||||||
|
if re.search(r"\b(sues|lawsuit|funding|raises|acqui|ipo|valued|stealing|trade secret|layoff|hire[ds]?|exec|ceo)\b", t) \
|
||||||
|
and not re.search(r"\b(repo|library|tool|agent framework)\b", t):
|
||||||
|
return "BUSINESS_LEGAL"
|
||||||
|
# Opinion/essay
|
||||||
|
if re.search(r"\b(burnout|opinion|think|feel|why|essay|culture|linkedin|social media|future of|we made|i think|hot take|i believe|my view|in defense)\b", t):
|
||||||
|
return "CULTURE_OPINION"
|
||||||
|
# Tutorial/howto
|
||||||
|
if re.search(r"\b(how to|tutorial|guide|running|build|setup|install|from scratch|learn)\b", t):
|
||||||
|
return "TUTORIAL_HOWTO"
|
||||||
|
# Dev tools
|
||||||
|
if src == "github" or re.search(r"\b(repo|library|framework|tool|agent|sdk|cli|extension|plugin|app|engine)\b", t):
|
||||||
|
return "DEV_TOOL_DRAMA"
|
||||||
|
return "OTHER"
|
||||||
|
|
||||||
|
|
||||||
|
def _extract(src, md):
|
||||||
|
"""Return (velocity_raw, engagement_raw, age_hours)."""
|
||||||
|
if src == "hackernews":
|
||||||
|
pts = md.get("score", 0) or 0
|
||||||
|
cmts = md.get("descendants", 0) or 0
|
||||||
|
age_h = None
|
||||||
|
if md.get("time"):
|
||||||
|
try:
|
||||||
|
age_h = max((NOW - md["time"]) / 3600.0, 0.1)
|
||||||
|
except Exception:
|
||||||
|
age_h = None
|
||||||
|
vel = (pts / age_h) if age_h else pts
|
||||||
|
return vel, (pts + 2 * cmts), age_h
|
||||||
|
if src == "reddit":
|
||||||
|
ups = md.get("ups", 0) or 0
|
||||||
|
cmts = md.get("num_comments", 0) or 0
|
||||||
|
return ups, (ups + 2 * cmts), None
|
||||||
|
if src == "huggingface":
|
||||||
|
likes = md.get("likes", 0) or 0
|
||||||
|
return likes, likes, None
|
||||||
|
if src == "github":
|
||||||
|
spd = md.get("stars_per_day", 0) or 0
|
||||||
|
stars = md.get("stars", 0) or 0
|
||||||
|
return spd, stars, None
|
||||||
|
if src == "arxiv":
|
||||||
|
return 0.0, 0.0, None
|
||||||
|
return 0.0, 0.0, None
|
||||||
|
|
||||||
|
|
||||||
|
def fetch_items(conn):
|
||||||
|
global NOW
|
||||||
|
NOW = __import__("time").time()
|
||||||
|
cur = conn.cursor()
|
||||||
|
cur.execute("SELECT id, title, url, source, summary, signal_score, raw_metadata, first_seen, "
|
||||||
|
"curated_by, manual_section, manual_tier "
|
||||||
|
"FROM entries")
|
||||||
|
cols = [d[0] for d in cur.description]
|
||||||
|
out = []
|
||||||
|
for row in cur.fetchall():
|
||||||
|
d = dict(zip(cols, row))
|
||||||
|
try:
|
||||||
|
md = json.loads(d.get("raw_metadata") or "{}")
|
||||||
|
except Exception:
|
||||||
|
md = {}
|
||||||
|
vel, eng, age = _extract(d["source"], md)
|
||||||
|
ct = _classify(d["source"], d.get("title") or "", d.get("summary") or "")
|
||||||
|
created_at = md.get("createdAt") if d["source"] == "huggingface" else None
|
||||||
|
out.append({
|
||||||
|
"id": d["id"],
|
||||||
|
"title": d.get("title") or "",
|
||||||
|
"url": d.get("url") or "",
|
||||||
|
"source": d["source"],
|
||||||
|
"summary": d.get("summary") or "",
|
||||||
|
"signal_score": d.get("signal_score") or 0,
|
||||||
|
"velocity_raw": vel,
|
||||||
|
"engagement_raw": eng,
|
||||||
|
"content_type": ct,
|
||||||
|
"first_seen": d.get("first_seen") or "",
|
||||||
|
"created_at": created_at or "",
|
||||||
|
"age_hours": 0.0,
|
||||||
|
"curated_by": d.get("curated_by") or "",
|
||||||
|
"manual_section": d.get("manual_section") or "",
|
||||||
|
"manual_tier": d.get("manual_tier") or "",
|
||||||
|
})
|
||||||
|
return out
|
||||||
|
|
||||||
|
|
||||||
|
def log1p_norm(values):
|
||||||
|
log_vals = [math.log1p(max(v, 0)) for v in values]
|
||||||
|
if not log_vals:
|
||||||
|
return []
|
||||||
|
min_v, max_v = min(log_vals), max(log_vals)
|
||||||
|
if max_v == min_v:
|
||||||
|
return [0.0] * len(values)
|
||||||
|
return [(v - min_v) / (max_v - min_v) for v in log_vals]
|
||||||
|
|
||||||
|
|
||||||
|
def compute_index(items):
|
||||||
|
velocities = [it.get("velocity_raw", 0) or 0 for it in items]
|
||||||
|
engagements = [it.get("engagement_raw", 0) or 0 for it in items]
|
||||||
|
signals = [it.get("signal_score", 0) or 0 for it in items]
|
||||||
|
|
||||||
|
vel_norm = log1p_norm(velocities)
|
||||||
|
eng_norm = log1p_norm(engagements)
|
||||||
|
sig_norm = log1p_norm(signals)
|
||||||
|
|
||||||
|
for i, item in enumerate(items):
|
||||||
|
raw = vel_norm[i] * VEL_W + eng_norm[i] * ENG_W + sig_norm[i] * SIG_W
|
||||||
|
# Items with 0 engagement (arXiv, RSS, Reddit no-data) get a small base score
|
||||||
|
# from signal_score so they can decay naturally instead of being stuck forever.
|
||||||
|
# Floor: 0.05 * signal_score_norm — enough to rank, low enough to sink fast.
|
||||||
|
if raw == 0 and sig_norm[i] > 0:
|
||||||
|
raw = 0.05 * sig_norm[i]
|
||||||
|
item["clickability"] = round(raw, 4)
|
||||||
|
item["section"] = "" # sections removed; flat ranked feed
|
||||||
|
return items
|
||||||
|
|
||||||
|
|
||||||
|
def _age_hours(item):
|
||||||
|
"""Effective news-age in hours.
|
||||||
|
|
||||||
|
HuggingFace items are aged by their TRUE model createdAt (likes/downloads
|
||||||
|
are lifetime cumulative, so DB first_seen would pin every HF entry at
|
||||||
|
ingest time and let all-time leaders dominate 'Top News' forever). All
|
||||||
|
other sources are aged by DB first_seen.
|
||||||
|
"""
|
||||||
|
if item.get("source") == "huggingface" and item.get("created_at"):
|
||||||
|
s = item["created_at"]
|
||||||
|
else:
|
||||||
|
s = item.get("first_seen") or ""
|
||||||
|
if not s:
|
||||||
|
return 0.0
|
||||||
|
try:
|
||||||
|
ts = datetime.strptime(s[:19], "%Y-%m-%dT%H:%M:%S").replace(
|
||||||
|
tzinfo=timezone.utc).timestamp()
|
||||||
|
return max((time.time() - ts) / 3600.0, 0.0)
|
||||||
|
except Exception:
|
||||||
|
return 0.0
|
||||||
|
|
||||||
|
|
||||||
|
# Category-specific half-lives (hours) — controls how long each type stays competitive.
|
||||||
|
# Breaking news decays slowest (stays relevant longer), arXiv/model cards fastest.
|
||||||
|
CATEGORY_HALF_LIVES = {
|
||||||
|
"breaking": 36.0, # Red — truly groundbreaking, double the standard
|
||||||
|
"update": 24.0, # Green — important but not groundbreaking, between red and black
|
||||||
|
"OTHER": 18.0, # Black — standard decay rate
|
||||||
|
}
|
||||||
|
|
||||||
|
# Map content_type to half-life, with tier override for breaking/update
|
||||||
|
def _get_half_life(item):
|
||||||
|
"""Return half-life in hours based on tier and content_type."""
|
||||||
|
# Hardware/Tips section items decay on a 14-DAY half-life (user: revised
|
||||||
|
# spec, shorter than evergreen). Covers both manual curations and
|
||||||
|
# auto-classified section items, so a section link persists 14 days
|
||||||
|
# instead of sinking in ~18h. Beyond this window the item is routed to
|
||||||
|
# Archive (generator).
|
||||||
|
ms = (item.get("manual_section") or "").upper()
|
||||||
|
if ms in ("HARDWARE", "TIPS"):
|
||||||
|
return 336.0
|
||||||
|
sec = (item.get("computed_section") or "").upper()
|
||||||
|
if sec in ("HARDWARE", "TIPS"):
|
||||||
|
return 336.0
|
||||||
|
tier = item.get("tier", "normal")
|
||||||
|
# Tier overrides take precedence
|
||||||
|
if tier == "breaking":
|
||||||
|
return CATEGORY_HALF_LIVES["breaking"]
|
||||||
|
if tier == "update":
|
||||||
|
return CATEGORY_HALF_LIVES["update"]
|
||||||
|
# Otherwise use content_type
|
||||||
|
ct = item.get("content_type", "OTHER")
|
||||||
|
return CATEGORY_HALF_LIVES.get(ct, CATEGORY_HALF_LIVES["OTHER"])
|
||||||
|
|
||||||
|
|
||||||
|
def decay_index(items, half_life_h=18.0):
|
||||||
|
"""Apply exponential time-decay to clickability so items sink as they age.
|
||||||
|
|
||||||
|
Uses category-specific half-lives: breaking news decays slowest (36h),
|
||||||
|
arXiv/model cards fastest (12h). This controls how long each type
|
||||||
|
stays competitive, not just starting score.
|
||||||
|
|
||||||
|
decayed = clickability * exp(-ln(2)/half_life * age_hours)
|
||||||
|
"""
|
||||||
|
# Rolling 24h freshness window (not calendar-day) so Top News stays populated
|
||||||
|
# between the daily harvest and midnight UTC. Decay still sinks old items.
|
||||||
|
cutoff = datetime.now(timezone.utc).timestamp() - 24 * 3600
|
||||||
|
for it in items:
|
||||||
|
age = _age_hours(it)
|
||||||
|
it["age_hours"] = round(age, 1)
|
||||||
|
base = it.get("clickability", 0) or 0
|
||||||
|
# Category-specific half-life
|
||||||
|
hl = _get_half_life(it)
|
||||||
|
k = math.log(2) / hl
|
||||||
|
it["clickability_decayed"] = round(base * math.exp(-k * age), 4)
|
||||||
|
it["effective_half_life"] = hl
|
||||||
|
# Freshness flag: ingested within the last 24h -> eligible for Top News.
|
||||||
|
fs = it.get("first_seen") or ""
|
||||||
|
try:
|
||||||
|
ts = datetime.fromisoformat(fs.replace("Z", "+00:00")).timestamp()
|
||||||
|
except ValueError:
|
||||||
|
ts = 0
|
||||||
|
it["fresh"] = ts >= cutoff
|
||||||
|
return items
|
||||||
|
|
||||||
|
|
||||||
|
def _pearson(xs, ys):
|
||||||
|
n = len(xs)
|
||||||
|
if n < 3:
|
||||||
|
return None
|
||||||
|
mx, my = sum(xs) / n, sum(ys) / n
|
||||||
|
num = sum((x - mx) * (y - my) for x, y in zip(xs, ys))
|
||||||
|
den = math.sqrt(sum((x - mx) ** 2 for x in xs) * sum((y - my) ** 2 for y in ys))
|
||||||
|
return num / den if den else None
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
conn = get_connection()
|
||||||
|
items = fetch_items(conn)
|
||||||
|
conn.close()
|
||||||
|
if not items:
|
||||||
|
print("No items found.")
|
||||||
|
return
|
||||||
|
|
||||||
|
computed = compute_index(items)
|
||||||
|
computed.sort(key=lambda x: x["clickability"], reverse=True)
|
||||||
|
|
||||||
|
print(f"=== TOP 20 BY CLICKABILITY INDEX (n={len(items)} items) ===\n")
|
||||||
|
for i, item in enumerate(computed[:20], 1):
|
||||||
|
print(f"{i:2}. [{item['clickability']:.4f}] {item['source']:11} | {item['title'][:58]}")
|
||||||
|
print(f" section={item['section']} | type={item['content_type']} | "
|
||||||
|
f"vel={item['velocity_raw']:.1f} eng={item['engagement_raw']:.1f} sig={item['signal_score']:.2f}")
|
||||||
|
|
||||||
|
# Backtest: Clickability Index vs ACTUAL HN engagement
|
||||||
|
hn = [it for it in computed if it["source"] == "hackernews" and it["engagement_raw"] > 0]
|
||||||
|
if hn:
|
||||||
|
r_full = _pearson([it["engagement_raw"] for it in hn],
|
||||||
|
[it["clickability"] for it in hn])
|
||||||
|
# Honest baseline: signal_score alone vs HN engagement (legacy prior)
|
||||||
|
r_sig = _pearson([it["engagement_raw"] for it in hn],
|
||||||
|
[it["signal_score"] for it in hn])
|
||||||
|
print(f"\n--- BACKTEST (HN, n={len(hn)}) ---")
|
||||||
|
print(f"ClickabilityIndex vs actual HN engagement : r = {r_full:.3f}" if r_full is not None else "r = n/a")
|
||||||
|
print(f"signal_score alone vs HN engagement : r = {r_sig:.3f}" if r_sig is not None else "r = n/a")
|
||||||
|
print("NOTE: engagement_raw is a 40% component of the index, so the full-index")
|
||||||
|
print(" r is structurally high. The meaningful comparison is whether the")
|
||||||
|
print(" index RANKS high-engagement items above low-engagement ones vs the")
|
||||||
|
print(" legacy signal_score prior (r_sig above).")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
@@ -0,0 +1,90 @@
|
|||||||
|
# Athena Live Compare — 2026-07-10 23:05 UTC
|
||||||
|
|
||||||
|
- **Live pull:** 80 items (Reddit excluded — rate-limited)
|
||||||
|
- **NEW since today's 13:00 UTC cron:** 10
|
||||||
|
- **Caveat:** HF scores = cumulative traction, not 24h velocity. Velocity signals = GitHub stars/day, HN points/comments.
|
||||||
|
|
||||||
|
## FULL RANKED LIST (by cross-source virality)
|
||||||
|
|
||||||
|
| # | Virality | New | Source | Title | Key metric | Signal |
|
||||||
|
|---|---|---|---|---|---|---|
|
||||||
|
| 1 | 100.0 | | huggingface | DeepSeek-R1 (text-generation) by deepseek-ai | likes=13456, downloads=9076634 | 9.20 |
|
||||||
|
| 2 | 96.8 | | huggingface | Llama-3.1-8B-Instruct (text-generation) by meta-llama | likes=6274, downloads=8841328 | 8.97 |
|
||||||
|
| 3 | 96.3 | | huggingface | FLUX.1-dev (text-to-image) by black-forest-labs | likes=13576, downloads=625381 | 8.91 |
|
||||||
|
| 4 | 96.3 | | github | ponytail: Makes your AI agent think like the laziest senior dev in the room. The best code | stars/day=2861.9, stars=80132 | 4.22 |
|
||||||
|
| 5 | 95.0 | | huggingface | gpt-oss-20b (text-generation) by openai | likes=4780, downloads=7377506 | 8.69 |
|
||||||
|
| 6 | 92.9 | | huggingface | gpt-oss-120b (text-generation) by openai | likes=4963, downloads=4409898 | 8.70 |
|
||||||
|
| 7 | 92.8 | | huggingface | stable-diffusion-xl-base-1.0 (text-to-image) by stabilityai | likes=7910, downloads=1416264 | 8.64 |
|
||||||
|
| 8 | 91.6 | | huggingface | Meta-Llama-3-8B (text-generation) by meta-llama | likes=6592, downloads=1377733 | 8.85 |
|
||||||
|
| 9 | 91.0 | | huggingface | stable-diffusion-v1-4 (text-to-image) by CompVis | likes=7034, downloads=437073 | 8.58 |
|
||||||
|
| 10 | 89.9 | | huggingface | DeepSeek-V4-Pro (text-generation) by deepseek-ai | likes=5196, downloads=1318520 | 9.29 |
|
||||||
|
| 11 | 89.4 | | huggingface | Meta-Llama-3-8B-Instruct (text-generation) by meta-llama | likes=4694, downloads=1416749 | 8.83 |
|
||||||
|
| 12 | 88.0 | | huggingface | DeepSeek-V3 (text-generation) by deepseek-ai | likes=4096, downloads=1044544 | 8.61 |
|
||||||
|
| 13 | 87.9 | | huggingface | Llama-2-7b-chat-hf (text-generation) by meta-llama | likes=4789, downloads=282310 | 8.84 |
|
||||||
|
| 14 | 87.8 | | huggingface | bloom (text-generation) by bigscience | likes=5024, downloads=5654 | 8.71 |
|
||||||
|
| 15 | 87.8 | | huggingface | Mistral-7B-v0.1 (text-generation) by mistralai | likes=4123, downloads=858421 | 8.61 |
|
||||||
|
| 16 | 86.6 | | huggingface | phi-2 (text-generation) by microsoft | likes=3480, downloads=858754 | 8.68 |
|
||||||
|
| 17 | 86.6 | | huggingface | Mistral-7B-Instruct-v0.2 (text-generation) by mistralai | likes=3183, downloads=1147801 | 8.63 |
|
||||||
|
| 18 | 86.3 | | huggingface | GLM-5.2 (text-generation) by zai-org | likes=3782, downloads=392655 | 9.44 |
|
||||||
|
| 19 | 85.3 | | huggingface | Llama-3.3-70B-Instruct (text-generation) by meta-llama | likes=2884, downloads=788855 | 8.58 |
|
||||||
|
| 20 | 84.7 | | huggingface | gemma-7b (text-generation) by google | likes=3373, downloads=29989 | 8.51 |
|
||||||
|
| 21 | 84.6 | | huggingface | gemma-4-12B-coder-fable5-composer2.5-v1-GGUF (text-generation) by yuxinlu1 | likes=2677, downloads=714071 | 8.88 |
|
||||||
|
| 22 | 77.9 | | github | openscience: The open-source AI workbench for scientific research | stars/day=295.9, stars=2071 | 2.98 |
|
||||||
|
| 23 | 76.3 | | github | omnigent: Omnigent is an open-source AI agent framework and meta-harness: orchestrate Clau | stars/day=241.5, stars=7003 | 3.02 |
|
||||||
|
| 24 | 74.9 | | github | gzh-design-skill: 把 Markdown 一键排成可直接粘进公众号编辑器的精致 HTML —— 6 套精选主题 + 主题生成器 + 双关卡校验。An AI-agen | stars/day=203.1, stars=1828 | 2.82 |
|
||||||
|
| 25 | 74.3 | | github | local-llm: Everything I know about running LLMs locally | stars/day=190.3, stars=1332 | 2.76 |
|
||||||
|
| 26 | 72.7 | NEW | github | texts-to-transformer: Train a tiny Transformer from scratch on your iMessage history, enti | stars/day=155.0, stars=310 | 2.54 |
|
||||||
|
| 27 | 72.3 | | github | claude-real-video: Let Claude (or any LLM) actually watch a video — scene-aware, deduplica | stars/day=147.4, stars=1474 | 2.67 |
|
||||||
|
| 28 | 71.4 | | github | Vibe-Research: Vibe-Research: Your Personal Trading Research Agent · A股/美股/港股 的个人投研 Agent: | stars/day=132.4, stars=662 | 2.55 |
|
||||||
|
| 29 | 70.3 | | github | Talos: GPU worker client for the Talos network. Pairs with your Talos account, serves open | stars/day=116.0, stars=928 | 2.54 |
|
||||||
|
| 30 | 70.1 | | github | open-connector: Open-source auth gateway connecting 1000+ SaaS providers to AI agents thro | stars/day=112.6, stars=1239 | 2.55 |
|
||||||
|
| 31 | 69.7 | NEW | github | photoshop-ai-smart-enhance: AI-powered image enhancement extension for Adobe Photoshop CC | stars/day=107.0, stars=107 | 2.29 |
|
||||||
|
| 32 | 68.6 | | github | loopy: A library of practical AI-agent loops and an installable skill for finding, adaptin | stars/day=94.0, stars=2633 | 2.56 |
|
||||||
|
| 33 | 68.4 | | github | hermex: Native iPhone app for your Hermes agent | stars/day=91.1, stars=729 | 2.42 |
|
||||||
|
| 34 | 68.4 | | github | motion-anything: ✨ The agentic motion layer — an open-source, chat-native motion engine. D | stars/day=91.2, stars=365 | 2.35 |
|
||||||
|
| 35 | 68.3 | | github | tickflow-stock-panel: 自托管、零运维的 A 股「选股 + 监控 + 回测」量化工作台 | 基于 TickFlow 数据源 | LLM能力驱使策略定制+个股分 | stars/day=90.0, stars=1979 | 2.51 |
|
||||||
|
| 36 | 67.8 | | github | open-science: Open Science Desktop — local-first, model-agnostic AI research workbench for | stars/day=85.6, stars=599 | 2.37 |
|
||||||
|
| 37 | 66.8 | NEW | github | FableCut: Zero-dependency browser video editor that AI agents can drive — JSON timeline, M | stars/day=75.2, stars=301 | 2.26 |
|
||||||
|
| 38 | 66.6 | | hackernews | GPT-5.6 | points=1514, comments=1071 | 6.07 |
|
||||||
|
| 39 | 66.2 | | github | self-learning-skills: A self-improving skill for AI coding agents (Claude Code, Cursor, AG | stars/day=69.5, stars=834 | 2.33 |
|
||||||
|
| 40 | 65.7 | | github | rnskill: 雪踏乌云的 AI Agent Skills 集合 | stars/day=66.0, stars=396 | 2.23 |
|
||||||
|
| 41 | 65.4 | | github | agent-chief: Attention is your scarcest resource. Chief is the local-first layer that guar | stars/day=63.3, stars=380 | 2.21 |
|
||||||
|
| 42 | 57.8 | NEW | hackernews | Show HN: Getting GLM 5.2 running on my slow computer | points=828, comments=203 | 5.73 |
|
||||||
|
| 43 | 56.9 | | hackernews | I think I have LLM burnout | points=401, comments=354 | 5.33 |
|
||||||
|
| 44 | 55.0 | | hackernews | Building a real-time AI tutor for 5-year-olds | points=138, comments=372 | 4.74 |
|
||||||
|
| 45 | 53.4 | NEW | hackernews | GPT-5.6 Sol Ultra produces proof of the Cycle Double Cover Conjecture [pdf] | points=269, comments=226 | 5.11 |
|
||||||
|
| 46 | 53.3 | | hackernews | ChatGPT Work | points=348, comments=183 | 5.25 |
|
||||||
|
| 47 | 53.2 | | hackernews | AI-generated videos to maximally drive a target brain region | points=258, comments=221 | 5.09 |
|
||||||
|
| 48 | 52.7 | | hackernews | AI content is everywhere on social media, especially LinkedIn | points=236, comments=213 | 5.04 |
|
||||||
|
| 49 | 50.3 | | hackernews | What's slowing down the AI buildout | points=80, comments=205 | 4.44 |
|
||||||
|
| 50 | 49.6 | | hackernews | Suspecting AI cheating, Ivy League prof ordered in-person final; scores fell 50% | points=135, comments=158 | 4.73 |
|
||||||
|
| 51 | 48.4 | NEW | hackernews | How the terrorist group Boko Haram uses frontier AI | points=145, comments=121 | 4.69 |
|
||||||
|
| 52 | 47.8 | | hackernews | We made Grok 4.5, GPT-5.5, and Claude build the same apps | points=173, comments=93 | 4.68 |
|
||||||
|
| 53 | 46.7 | | hackernews | AI changes the economics of software rewrites | points=102, comments=106 | 4.44 |
|
||||||
|
| 54 | 45.3 | NEW | hackernews | GPT-5.6, Grok 4.5, Claude, and Muse Spark build the same 4 apps | points=120, comments=72 | 4.38 |
|
||||||
|
| 55 | 44.9 | NEW | hackernews | Apple sues OpenAI, accuses ex-employees of stealing trade secrets | points=127, comments=62 | 4.35 |
|
||||||
|
| 56 | 44.4 | | hackernews | Ben Bernanke Joins Anthropic Oversight Trust | points=75, comments=81 | 4.17 |
|
||||||
|
| 57 | 43.5 | | hackernews | Show HN: FableCut – A browser video editor AI agents can drive (zero deps) | points=95, comments=58 | 4.17 |
|
||||||
|
| 58 | 42.9 | | hackernews | AI 2040: Plan A | points=92, comments=53 | 4.11 |
|
||||||
|
| 59 | 42.7 | NEW | hackernews | SimPolitics: America’s quest to solve politics with computers | points=103, comments=44 | 4.10 |
|
||||||
|
| 60 | 40.1 | NEW | hackernews | Show HN: Reverse-engineering web apps into agent tools | points=79, comments=30 | 4.31 |
|
||||||
|
| 61 | 0.0 | | arxiv | OpenCoF: Learning to Reason Through Video Generation | categories=cs.CV, cs.AI | 5.39 |
|
||||||
|
| 62 | 0.0 | | arxiv | ARDY: Autoregressive Diffusion with Hybrid Representation for Interactive Human Motion Gen | categories=cs.GR, cs.CV, cs.LG | 5.19 |
|
||||||
|
| 63 | 0.0 | | arxiv | UniClawBench: A Universal Benchmark for Proactive Agents on Real-World Tasks | categories=cs.CL | 3.94 |
|
||||||
|
| 64 | 0.0 | | arxiv | SLORR: Simple and Efficient In-Training Low-Rank Regularization | categories=cs.LG, cs.AI | 3.59 |
|
||||||
|
| 65 | 0.0 | | arxiv | Remember When It Matters: Proactive Memory Agent for Long-Horizon Agents | categories=cs.AI, cs.CL | 3.38 |
|
||||||
|
| 66 | 0.0 | | arxiv | AUTOPILOT VQA: Benchmarking Vision-Language Models for Incident-Centric Dashcam Understand | categories=cs.AI, cs.CV | 3.24 |
|
||||||
|
| 67 | 0.0 | | arxiv | Latent Memory Palace: Reasoning for Control as Autoregressive Variational Inference | categories=cs.LG, cs.RO | 3.13 |
|
||||||
|
| 68 | 0.0 | | arxiv | Workflow as Knowledge: Semantic Persistence for LLM-Mediated Workflows | categories=cs.AI, cs.PL, cs.SE | 3.09 |
|
||||||
|
| 69 | 0.0 | | arxiv | The Illusion of Equivalency: Statistical Characterization of Quantization Effects in LLMs | categories=cs.AI | 3.04 |
|
||||||
|
| 70 | 0.0 | | arxiv | LTM: Large-scale Terrain Model for Wildfire-prone Landscapes | categories=cs.CV, cs.LG | 3.03 |
|
||||||
|
| 71 | 0.0 | | arxiv | Ideas Have Genomes: Benchmarking Scientific Lineage Reasoning and Lineage-Grounded Idea Ge | categories=cs.AI | 2.89 |
|
||||||
|
| 72 | 0.0 | | arxiv | Super Weights in LLMs and the Failure of Selective Training | categories=cs.LG | 2.89 |
|
||||||
|
| 73 | 0.0 | | arxiv | Validity of LLMs as data annotators: AMALIA on authority | categories=cs.CL, cs.AI, cs.CY | 2.63 |
|
||||||
|
| 74 | 0.0 | | arxiv | Pose-to-Biomechanics: Bridging 3D Human Pose Estimation and Biomechanical Attribute Predic | categories=cs.CV, cs.AI, cs.LG | 2.63 |
|
||||||
|
| 75 | 0.0 | | arxiv | Deep Learning for Joint Narrowband Interference Cancellation and Soft Demodulation in OFDM | categories=cs.LG, eess.SP | 2.58 |
|
||||||
|
| 76 | 0.0 | | arxiv | MPFlow: Learning Budgeted Max-Flow Optimization on the Lightning Network with Deep Graph R | categories=cs.LG | 2.48 |
|
||||||
|
| 77 | 0.0 | | arxiv | Score Accuracy Along the Forward Diffusion Does Not Certify Numerical Stability in Diffusi | categories=stat.ML, cs.LG, math.NA | 2.44 |
|
||||||
|
| 78 | 0.0 | | arxiv | MulTTiPop: A Multitrack Transcription Dataset for Pop Music | categories=cs.SD, cs.LG | 2.39 |
|
||||||
|
| 79 | 0.0 | | arxiv | Using AI-based Learning Assistants in Higher Education: A Large-Scale Descriptive Analysis | categories=cs.AI, cs.HC | 2.24 |
|
||||||
|
| 80 | 0.0 | | arxiv | Dimensionality Reduction Meets Network Science: Sensemaking on UMAP's kNN Graph | categories=cs.LG, cs.AI, cs.DS | 2.24 |
|
||||||
@@ -14,6 +14,13 @@ LOG="$LOG_DIR/cron_run_${TS}.log"
|
|||||||
mkdir -p "$LOG_DIR"
|
mkdir -p "$LOG_DIR"
|
||||||
cd "$ORACLE_DIR" || { echo "FATAL: cannot cd $ORACLE_DIR"; exit 1; }
|
cd "$ORACLE_DIR" || { echo "FATAL: cannot cd $ORACLE_DIR"; exit 1; }
|
||||||
|
|
||||||
|
# Source tokens from .env (GITHUB_TOKEN, HUGGINGFACE_TOKEN)
|
||||||
|
if [ -f "$ORACLE_DIR/.env" ]; then
|
||||||
|
set -a
|
||||||
|
source "$ORACLE_DIR/.env"
|
||||||
|
set +a
|
||||||
|
fi
|
||||||
|
|
||||||
{
|
{
|
||||||
echo "=== Oracle pipeline run: $(date -u) ==="
|
echo "=== Oracle pipeline run: $(date -u) ==="
|
||||||
python3 pipeline.py --limit 20
|
python3 pipeline.py --limit 20
|
||||||
|
|||||||
@@ -0,0 +1,268 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""One-shot stack propagator (explicit user request 2026-07-12, rev 2.2).
|
||||||
|
|
||||||
|
Editorial rules applied (reuses BUILT-IN pipeline functions, no pipeline edits):
|
||||||
|
- clickability.compute_index / decay_index (virality rank + 18h decay)
|
||||||
|
- generate_from_athena.clean_headline (repo-prefix trim, emoji strip, length cap)
|
||||||
|
- generate_from_athena.add_prefix (Breaking | text prefix, BREAKING GATE)
|
||||||
|
- render_site._clean_summary (one-liner descriptions on every card)
|
||||||
|
|
||||||
|
USER DIRECTIVES (2026-07-12):
|
||||||
|
1. GitHub source EXCLUDED entirely (until further notice).
|
||||||
|
2. 'update' green tier REMOVED. Only 'breaking' (rare real events) or 'normal'.
|
||||||
|
3. Curated Picks section surfaces two flavors (tight deterministic phrase match,
|
||||||
|
no broad keywords to avoid false positives):
|
||||||
|
(a) QUIRKY + agents roasting their humans
|
||||||
|
(b) people who BUILT / SHIPPED / EARNED from an AI product (indie hackers)
|
||||||
|
Window: last DAYS days (default 4). Cap: LIMIT (default 200) — GitHub ban caps the
|
||||||
|
real max at ~180 over 4 days; we render whatever is eligible (never fake count).
|
||||||
|
"""
|
||||||
|
import os, re, sys, json, sqlite3, html as _html
|
||||||
|
from datetime import datetime as dt, timezone, timedelta
|
||||||
|
from collections import OrderedDict
|
||||||
|
|
||||||
|
ORACLE = "/home/vpsadmin/oracle"
|
||||||
|
sys.path.insert(0, ORACLE)
|
||||||
|
sys.path.insert(0, "/home/vpsadmin/ai-oracle-site")
|
||||||
|
import clickability as cb
|
||||||
|
import render_site as rs
|
||||||
|
import generate_from_athena as ga
|
||||||
|
|
||||||
|
DB = os.path.join(ORACLE, "oracle.db")
|
||||||
|
WEBROOT = "/var/www/preprod3"
|
||||||
|
FALLBACK = os.path.join(ORACLE, "site")
|
||||||
|
NOW = dt.now(timezone.utc)
|
||||||
|
DAYS = 14 # span whole DB so all 182 non-GitHub entries are eligible (DB only goes back ~7d)
|
||||||
|
LIMIT = 200 # hard ceiling: DB only has 182 non-GitHub entries total, so 182 will render
|
||||||
|
EXCLUDE_SOURCES = {"github"} # banned until further notice
|
||||||
|
|
||||||
|
# BREAKING GATE (verbatim pipeline logic; repos/papers/models never breaking)
|
||||||
|
REPO_SOURCES = {"github", "gitlab", "huggingface", "arxiv"}
|
||||||
|
IMPORTANCE = re.compile(
|
||||||
|
r"\b(sues?|sue|lawsuit|launches?|launch|releases?|release|"
|
||||||
|
r"bans?|ban|war|strikes?|attack|acquires?|acquisition|trillion|billions?|"
|
||||||
|
r"layoffs?|declares?|emergency|outage|breach|stolen|steals?|theft|antitrust|"
|
||||||
|
r"monopoly|reveals?|exposed|breakthrough|first|warns?|crackdown|shutdown|"
|
||||||
|
r"GPT-?5|Claude|Gemini|OpenAI|Anthropic|Google|Apple|Microsoft|Meta|xAI|"
|
||||||
|
r"Musk|Altman|Grok|DeepSeek|Llama|NVIDIA|AMD|FCC|EU|antitrust|"
|
||||||
|
r"folded|spins? off|partners?|raises?|ipo|funding)\\b", re.I)
|
||||||
|
BREAKING_PCT = 0.90
|
||||||
|
|
||||||
|
# --- CURATION: QUIRKY + agents roasting their humans ONLY (deterministic; no LLM) ---
|
||||||
|
# Standing directive 2026-07-12 (end of session): "shipped & paid / built & earned"
|
||||||
|
# was WALKED BACK ("looking for people who build and ship products is a whole
|
||||||
|
# separate issue"). Do NOT bake it in. Curation = quirky + agents-roasting-humans.
|
||||||
|
QUIRKY = [
|
||||||
|
"hit piece", "roast", "roasting", "insult", "revenge", "betray",
|
||||||
|
"bizarre", "weird", "cursed", "font humans", "brain region",
|
||||||
|
"conspiracy", "haunted", "absurd", "unhinged", "sentient", "scream",
|
||||||
|
"mock", "taunt", "expose their", "its human", "its user", "their owner",
|
||||||
|
"about their", "their creator", "their master", "turned on", "backstab",
|
||||||
|
"wrote about its", "turned against", "rebelled", "sassy", "savage",
|
||||||
|
]
|
||||||
|
# built / shipped / EARNED from an AI product (FIRST-PERSON builder only —
|
||||||
|
# tight phrases; bare 'revenue'/'funding'/'ipo' EXCLUDED to avoid industry-news
|
||||||
|
# false positives like TechCrunch "startups growing revenue").
|
||||||
|
BUILT_SHIPPED = [
|
||||||
|
"indie hacker", "i built", "i made", "i shipped", "i launched", "i sold",
|
||||||
|
"my saas", "my startup", "my app", "my product", "my business",
|
||||||
|
"side project", "bootstrapped", "profitable", "paying customers",
|
||||||
|
"made money", "earn money", "mrr", "monthly recurring", "i run a",
|
||||||
|
"made me $", "income from", "subscriptions", "sold my", "quit my job",
|
||||||
|
"shipped a", "built a", "customers pay", "my first", "passive income",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def _parse(ts):
|
||||||
|
if not ts:
|
||||||
|
return None
|
||||||
|
try:
|
||||||
|
return dt.fromisoformat(ts.replace("Z", "+00:00"))
|
||||||
|
except Exception:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def _curation(it):
|
||||||
|
blob = f"{(it.get('title') or '')} {(rs._clean_summary(it.get('summary') or ''))}".lower()
|
||||||
|
if any(k in blob for k in BUILT_SHIPPED):
|
||||||
|
return ("built", 1.22)
|
||||||
|
if any(k in blob for k in QUIRKY):
|
||||||
|
return ("quirky", 1.16)
|
||||||
|
return (None, 1.0)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
conn = sqlite3.connect(f"file:{DB}?mode=ro", uri=True)
|
||||||
|
items = cb.fetch_items(conn)
|
||||||
|
conn.close()
|
||||||
|
items = cb.compute_index(items)
|
||||||
|
items = cb.decay_index(items, rs.HALF_LIFE_H)
|
||||||
|
|
||||||
|
cutoff = NOW - timedelta(days=DAYS)
|
||||||
|
eligible = [it for it in items
|
||||||
|
if it.get("title") and it.get("url")
|
||||||
|
and it.get("first_seen") and _parse(it["first_seen"])
|
||||||
|
and _parse(it["first_seen"]) >= cutoff
|
||||||
|
and (it.get("source") or "").lower() not in EXCLUDE_SOURCES]
|
||||||
|
eligible.sort(key=lambda x: x["clickability_decayed"], reverse=True)
|
||||||
|
top = eligible[:LIMIT]
|
||||||
|
|
||||||
|
scores = [it["clickability_decayed"] for it in top]
|
||||||
|
n = len(scores)
|
||||||
|
|
||||||
|
def pct_rank(v):
|
||||||
|
beaten = sum(1 for s in scores if s <= v)
|
||||||
|
return beaten / n if n else 0.0
|
||||||
|
|
||||||
|
for it in top:
|
||||||
|
src = (it.get("source") or "").lower()
|
||||||
|
pr = pct_rank(it["clickability_decayed"])
|
||||||
|
is_repo = src in REPO_SOURCES
|
||||||
|
important = bool(IMPORTANCE.search(it.get("title") or ""))
|
||||||
|
if (not is_repo) and important and pr >= BREAKING_PCT:
|
||||||
|
tier = "breaking"
|
||||||
|
else:
|
||||||
|
tier = "normal"
|
||||||
|
cleaned = ga.clean_headline(it["title"], it.get("source", ""))
|
||||||
|
it["title"] = ga.add_prefix(cleaned, it["url"], tier)
|
||||||
|
it["_tier"] = tier
|
||||||
|
label, mult = _curation(it)
|
||||||
|
it["_curated"] = label
|
||||||
|
it["clickability_decayed"] = it["clickability_decayed"] * mult
|
||||||
|
|
||||||
|
ranked = sorted(top, key=lambda x: x["clickability_decayed"], reverse=True)
|
||||||
|
fresh = [it for it in ranked if it.get("fresh")]
|
||||||
|
top_cards = fresh[:rs.TOP_N]
|
||||||
|
stack = [it for it in ranked if it not in top_cards]
|
||||||
|
curated = [it for it in ranked if it.get("_curated")]
|
||||||
|
curated.sort(key=lambda x: x["clickability_decayed"], reverse=True)
|
||||||
|
curated_cards = curated[:12]
|
||||||
|
|
||||||
|
by_day = OrderedDict()
|
||||||
|
for it in stack:
|
||||||
|
day = (it.get("first_seen") or "")[:10] or "unknown"
|
||||||
|
by_day.setdefault(day, []).append(it)
|
||||||
|
|
||||||
|
def card(it):
|
||||||
|
title = _html.escape(it["title"] or "(untitled)")
|
||||||
|
url = _html.escape(it["url"] or "#")
|
||||||
|
src = _html.escape(it["source"])
|
||||||
|
sig = it.get("signal_score") or 0
|
||||||
|
t = rs._fmt_time(it.get("first_seen"))
|
||||||
|
summary = _html.escape(rs._clean_summary(it.get("summary") or "")[:200])
|
||||||
|
cls = "card"
|
||||||
|
if it.get("_tier") == "breaking":
|
||||||
|
cls += " breaking"
|
||||||
|
if it.get("_curated"):
|
||||||
|
cls += " curated"
|
||||||
|
badge = ""
|
||||||
|
if it.get("_curated") == "built":
|
||||||
|
badge = '<span class="badge built">\U0001f4b0 Built & Earned</span>'
|
||||||
|
elif it.get("_curated") == "quirky":
|
||||||
|
badge = '<span class="badge quirky">\U0001f300 Quirky</span>'
|
||||||
|
sum_html = f'<p class="summary">{summary}</p>' if summary else ""
|
||||||
|
return f"""
|
||||||
|
<article class="{cls}" data-src="{src}">
|
||||||
|
<div class="meta"><span class="src">{src}</span>
|
||||||
|
<span class="time">{t}</span>
|
||||||
|
<span class="sig">sig {sig:.1f}</span>
|
||||||
|
{badge}
|
||||||
|
<span class="score">\U0001f525 {it['clickability_decayed']:.2f}</span></div>
|
||||||
|
<h3><a href="{url}" target="_blank" rel="noopener">{title}</a></h3>
|
||||||
|
{sum_html}
|
||||||
|
</article>"""
|
||||||
|
|
||||||
|
top_html = "".join(card(it) for it in top_cards)
|
||||||
|
curated_html = "".join(card(it) for it in curated_cards)
|
||||||
|
stack_html = ""
|
||||||
|
for day, rows in by_day.items():
|
||||||
|
rows.sort(key=lambda x: x["clickability_decayed"], reverse=True)
|
||||||
|
cards = "".join(card(it) for it in rows)
|
||||||
|
stack_html += f"""
|
||||||
|
<h3 class="day">\U0001f4c5 {day}</h3>
|
||||||
|
<div class="stack">{cards}</div>"""
|
||||||
|
|
||||||
|
now_str = NOW.strftime("%Y-%m-%d %H:%M UTC")
|
||||||
|
page = f"""<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Athena AI News — Ranked by Clickability</title>
|
||||||
|
<style>
|
||||||
|
:root {{ --bg:#0b0e14; --card:#141925; --fg:#e6e9ef; --mut:#8b93a7; --acc:#5b8cff; }}
|
||||||
|
* {{ box-sizing:border-box; }}
|
||||||
|
body {{ margin:0; background:var(--bg); color:var(--fg);
|
||||||
|
font:15px/1.5 -apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif; }}
|
||||||
|
header {{ padding:28px 20px 14px; border-bottom:1px solid #1f2533; text-align:center; }}
|
||||||
|
header h1 {{ margin:0; font-size:28px; letter-spacing:.5px; }}
|
||||||
|
header .sub {{ color:var(--mut); font-size:13px; margin-top:6px; }}
|
||||||
|
main {{ max-width:1000px; margin:0 auto; padding:20px; }}
|
||||||
|
h2.sech {{ font-size:18px; margin:26px 0 12px; border-left:3px solid var(--acc); padding-left:10px; }}
|
||||||
|
.grid {{ display:grid; grid-template-columns:repeat(auto-fill,minmax(320px,1fr)); gap:14px; }}
|
||||||
|
.card {{ background:var(--card); border:1px solid #1f2533; border-radius:12px; padding:16px; }}
|
||||||
|
.card.breaking {{ border-left:3px solid #ff5b5b; }}
|
||||||
|
.card.curated {{ border-left:3px solid #ffcf5b; background:#1a160c; }}
|
||||||
|
.meta {{ display:flex; gap:8px; align-items:center; font-size:12px; color:var(--mut); flex-wrap:wrap; }}
|
||||||
|
.src {{ background:#1f2533; padding:2px 8px; border-radius:20px; text-transform:uppercase; }}
|
||||||
|
.badge {{ padding:1px 8px; border-radius:10px; font-size:11px; font-weight:600; }}
|
||||||
|
.badge.built {{ background:#ffcf5b; color:#1a160c; }}
|
||||||
|
.badge.quirky {{ background:#b98cff; color:#150c1f; }}
|
||||||
|
.score {{ color:#ff9d5b; font-weight:600; margin-left:auto; }}
|
||||||
|
.card h3 {{ font-size:16px; margin:10px 0 8px; line-height:1.35; }}
|
||||||
|
.card h3 a {{ color:var(--fg); text-decoration:none; }}
|
||||||
|
.card h3 a:hover {{ color:var(--acc); }}
|
||||||
|
.summary {{ color:var(--mut); font-size:13px; margin:0; }}
|
||||||
|
.day {{ font-size:15px; color:var(--mut); margin:28px 0 10px; border-bottom:1px solid #1f2533; padding-bottom:6px; }}
|
||||||
|
.stack {{ display:grid; grid-template-columns:repeat(auto-fill,minmax(320px,1fr)); gap:12px; }}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<header>
|
||||||
|
<h1>Athena AI News</h1>
|
||||||
|
<div class="sub">Auto-ranked by Clickability Index · {len(top)} stories (4-day window, GitHub excluded) · curated: quirky + agents roasting their humans · generated {now_str}</div>
|
||||||
|
</header>
|
||||||
|
<main>
|
||||||
|
<h2 class="sech">\U0001f4b0\U0001f300 Curated Picks — Built & Earned · Quirky · Agents Roasting Their Humans</h2>
|
||||||
|
<div class="grid">{curated_html}</div>
|
||||||
|
<h2 class="sech">\U0001f534 Top News</h2>
|
||||||
|
<div class="grid">{top_html}</div>
|
||||||
|
<h2 class="sech">\U0001f4f0 The Stack</h2>
|
||||||
|
{stack_html}
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
</html>"""
|
||||||
|
|
||||||
|
target = WEBROOT if os.path.isdir(WEBROOT) else FALLBACK
|
||||||
|
os.makedirs(target, exist_ok=True)
|
||||||
|
with open(os.path.join(target, "index.html"), "w") as f:
|
||||||
|
f.write(page)
|
||||||
|
with open(os.path.join(target, "feed.json"), "w") as f:
|
||||||
|
json.dump([
|
||||||
|
{"title": i["title"], "url": i["url"], "source": i["source"],
|
||||||
|
"tier": i.get("_tier"), "curated": i.get("_curated"),
|
||||||
|
"clickability_decayed": round(i["clickability_decayed"], 3),
|
||||||
|
"age_hours": i["age_hours"], "first_seen": i.get("first_seen")}
|
||||||
|
for i in ranked
|
||||||
|
], f, indent=2)
|
||||||
|
|
||||||
|
where = "WEBROOT(/var/www/preprod3)" if target == WEBROOT else "FALLBACK(~oracle/site)"
|
||||||
|
tiers = {"breaking": 0, "normal": 0}
|
||||||
|
for it in top:
|
||||||
|
tiers[it["_tier"]] += 1
|
||||||
|
cc = {"built": 0, "quirky": 0, "none": 0}
|
||||||
|
for it in top:
|
||||||
|
cc[it["_curated"] or "none"] += 1
|
||||||
|
with_desc = sum(1 for it in top if rs._clean_summary(it.get("summary") or ""))
|
||||||
|
print(f"[propagate v2.2] wrote {target}/index.html + feed.json")
|
||||||
|
print(f" target : {where}")
|
||||||
|
print(f" window : last {DAYS} days, GitHub EXCLUDED")
|
||||||
|
print(f" eligible : {len(eligible)} (cap {LIMIT} -> rendered {len(top)})")
|
||||||
|
print(f" tiers : {tiers['breaking']} breaking / {tiers['normal']} normal (update tier REMOVED)")
|
||||||
|
print(f" curated flags : {cc['built']} built&earned | {cc['quirky']} quirky | {cc['none']} none")
|
||||||
|
print(f" curated shown : top {len(curated_cards)} in Curated Picks section")
|
||||||
|
print(f" with desc : {with_desc}/{len(top)} cards have a one-liner description")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
+185
@@ -0,0 +1,185 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""Render Athena entries into a static news site (two-layer: Top News + aging Stack).
|
||||||
|
|
||||||
|
Read-only against oracle.db. Writes static HTML to the preprod3 webroot.
|
||||||
|
Designed for a 20-min no_agent cron.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
python3 render_site.py # write to WEBROOT
|
||||||
|
python3 render_site.py --dry-run # print stats, write to ./_preview.html
|
||||||
|
"""
|
||||||
|
import argparse, html, os, json, sqlite3, datetime, re
|
||||||
|
from collections import OrderedDict
|
||||||
|
|
||||||
|
import clickability as cb
|
||||||
|
|
||||||
|
HERE = os.path.dirname(os.path.abspath(__file__))
|
||||||
|
WEBROOT = "/var/www/preprod3"
|
||||||
|
DB_PATH = os.path.join(HERE, "oracle.db")
|
||||||
|
TOP_N = 8
|
||||||
|
HALF_LIFE_H = 18.0
|
||||||
|
|
||||||
|
|
||||||
|
def _clean_summary(raw):
|
||||||
|
"""summary is stored as JSON {one_liner, key_technical_point, potential_use_case}.
|
||||||
|
Pull the most readable field; fall back to the raw text if it isn't JSON.
|
||||||
|
Strips markdown/latex noise so the card reads clean on the page."""
|
||||||
|
if not raw:
|
||||||
|
return ""
|
||||||
|
try:
|
||||||
|
d = json.loads(raw)
|
||||||
|
if isinstance(d, dict):
|
||||||
|
for k in ("one_liner", "key_technical_point", "potential_use_case"):
|
||||||
|
v = d.get(k)
|
||||||
|
if isinstance(v, str) and v.strip():
|
||||||
|
return re.sub(r"\\+|_|`", "", v).strip()
|
||||||
|
except Exception:
|
||||||
|
pass
|
||||||
|
return re.sub(r"\\+|_|`", "", raw).strip()
|
||||||
|
|
||||||
|
|
||||||
|
def _fmt_time(first_seen):
|
||||||
|
if not first_seen:
|
||||||
|
return ""
|
||||||
|
try:
|
||||||
|
dt = datetime.datetime.strptime(first_seen, "%Y-%m-%dT%H:%M:%SZ")
|
||||||
|
return dt.strftime("%H:%M")
|
||||||
|
except Exception:
|
||||||
|
return ""
|
||||||
|
|
||||||
|
|
||||||
|
def _card(it, big=False):
|
||||||
|
title = html.escape(it["title"] or "(untitled)")
|
||||||
|
url = html.escape(it["url"] or "#")
|
||||||
|
src = html.escape(it["source"])
|
||||||
|
sig = it.get("signal_score") or 0
|
||||||
|
t = _fmt_time(it.get("first_seen"))
|
||||||
|
summary_raw = _clean_summary(it.get("summary") or "")
|
||||||
|
summary = html.escape(summary_raw[:200])
|
||||||
|
cls = "card big" if big else "card"
|
||||||
|
summary_html = ('<p class="summary">{0}</p>'.format(summary)) if (summary and big) else ""
|
||||||
|
return f"""
|
||||||
|
<article class="{cls}" data-src="{src}">
|
||||||
|
<div class="meta"><span class="src">{src}</span>
|
||||||
|
<span class="time">{t}</span>
|
||||||
|
<span class="sig">sig {sig:.1f}</span>
|
||||||
|
<span class="score">\U0001f525 {it['clickability_decayed']:.2f}</span></div>
|
||||||
|
<h3><a href="{url}" target="_blank" rel="noopener">{title}</a></h3>
|
||||||
|
{summary_html}
|
||||||
|
</article>"""
|
||||||
|
|
||||||
|
|
||||||
|
def build_html(items):
|
||||||
|
now = datetime.datetime.now(datetime.timezone.utc).strftime("%Y-%m-%d %H:%M UTC")
|
||||||
|
ranked = sorted(items, key=lambda x: x["clickability_decayed"], reverse=True)
|
||||||
|
# Top News = fresh items only (ingested today, UTC). Yesterday's viral
|
||||||
|
# leftovers sink into the Stack instead of dominating the front page.
|
||||||
|
fresh = [it for it in ranked if it.get("fresh")]
|
||||||
|
top = fresh[:TOP_N]
|
||||||
|
stack = [it for it in ranked if it not in top]
|
||||||
|
|
||||||
|
# group stack by day (first_seen date)
|
||||||
|
by_day = OrderedDict()
|
||||||
|
for it in stack:
|
||||||
|
day = (it.get("first_seen") or "")[:10] or "unknown"
|
||||||
|
by_day.setdefault(day, []).append(it)
|
||||||
|
|
||||||
|
top_html = "".join(_card(it, big=True) for it in top)
|
||||||
|
|
||||||
|
stack_html = ""
|
||||||
|
for day, rows in by_day.items():
|
||||||
|
rows.sort(key=lambda x: x["clickability_decayed"], reverse=True)
|
||||||
|
cards = "".join(_card(it) for it in rows)
|
||||||
|
stack_html += f"""
|
||||||
|
<h3 class="day">\U0001f4c5 {html.escape(day)}</h3>
|
||||||
|
<div class="stack">{cards}</div>"""
|
||||||
|
|
||||||
|
return f"""<!doctype html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>Athena AI News — Ranked by Clickability</title>
|
||||||
|
<style>
|
||||||
|
:root {{ --bg:#0b0e14; --card:#141925; --fg:#e6e9ef; --mut:#8b93a7; --acc:#5b8cff; }}
|
||||||
|
* {{ box-sizing:border-box; }}
|
||||||
|
body {{ margin:0; background:var(--bg); color:var(--fg);
|
||||||
|
font:15px/1.5 -apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif; }}
|
||||||
|
header {{ padding:28px 20px 14px; border-bottom:1px solid #1f2533; text-align:center; }}
|
||||||
|
header h1 {{ margin:0; font-size:28px; letter-spacing:.5px; }}
|
||||||
|
header .sub {{ color:var(--mut); font-size:13px; margin-top:6px; }}
|
||||||
|
main {{ max-width:1000px; margin:0 auto; padding:20px; }}
|
||||||
|
h2.sech {{ font-size:18px; margin:26px 0 12px; border-left:3px solid var(--acc); padding-left:10px; }}
|
||||||
|
.grid {{ display:grid; grid-template-columns:repeat(auto-fill,minmax(320px,1fr)); gap:14px; }}
|
||||||
|
.card {{ background:var(--card); border:1px solid #1f2533; border-radius:12px; padding:16px; }}
|
||||||
|
.card.big {{ grid-column:1/-1; }}
|
||||||
|
.meta {{ display:flex; gap:10px; align-items:center; font-size:12px; color:var(--mut); }}
|
||||||
|
.src {{ background:#1f2533; padding:2px 8px; border-radius:20px; text-transform:uppercase; }}
|
||||||
|
.score {{ color:#ff9d5b; font-weight:600; margin-left:auto; }}
|
||||||
|
.card h3 {{ font-size:16px; margin:10px 0 8px; line-height:1.35; }}
|
||||||
|
.card.big h3 {{ font-size:20px; }}
|
||||||
|
.card h3 a {{ color:var(--fg); text-decoration:none; }}
|
||||||
|
.card h3 a:hover {{ color:var(--acc); }}
|
||||||
|
.summary {{ color:var(--mut); font-size:13px; margin:0; }}
|
||||||
|
.day {{ font-size:15px; color:var(--mut); margin:28px 0 10px; border-bottom:1px solid #1f2533; padding-bottom:6px; }}
|
||||||
|
.stack {{ display:grid; grid-template-columns:repeat(auto-fill,minmax(320px,1fr)); gap:12px; }}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<header>
|
||||||
|
<h1>Athena AI News</h1>
|
||||||
|
<div class="sub">Auto-ranked by Clickability Index · decays with age so the stack flows top → bottom · generated {now} · {len(items)} stories</div>
|
||||||
|
</header>
|
||||||
|
<main>
|
||||||
|
<h2 class="sech">\U0001f534 Top News</h2>
|
||||||
|
<div class="grid">{top_html}</div>
|
||||||
|
<h2 class="sech">\U0001f4f0 The Stack</h2>
|
||||||
|
{stack_html}
|
||||||
|
</main>
|
||||||
|
</body>
|
||||||
|
</html>"""
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
ap = argparse.ArgumentParser()
|
||||||
|
ap.add_argument("--dry-run", action="store_true")
|
||||||
|
args = ap.parse_args()
|
||||||
|
|
||||||
|
conn = sqlite3.connect(DB_PATH)
|
||||||
|
items = cb.fetch_items(conn)
|
||||||
|
conn.close()
|
||||||
|
items = cb.compute_index(items)
|
||||||
|
items = cb.decay_index(items, HALF_LIFE_H)
|
||||||
|
page = build_html(items)
|
||||||
|
|
||||||
|
if args.dry_run:
|
||||||
|
out = os.path.join(HERE, "_preview.html")
|
||||||
|
with open(out, "w") as f:
|
||||||
|
f.write(page)
|
||||||
|
fresh = [it for it in items if it.get("fresh")]
|
||||||
|
top = sorted(fresh, key=lambda x: x["clickability_decayed"], reverse=True)[:TOP_N]
|
||||||
|
print(f"[dry-run] wrote {out} ({len(items)} items, {len(fresh)} fresh today)")
|
||||||
|
print(f"TOP {TOP_N} FRESH (today only) by decayed clickability:")
|
||||||
|
for i, it in enumerate(top, 1):
|
||||||
|
print(f" {i}. [{it['clickability_decayed']:.2f} | age {it['age_hours']:.0f}h] {it['source']:10} {it['title'][:55]}")
|
||||||
|
return
|
||||||
|
|
||||||
|
# Write to webroot if it exists (deployed); otherwise fall back to a
|
||||||
|
# user-owned dir so the no_agent cron never errors pre-deploy.
|
||||||
|
fallback = os.path.join(HERE, "site")
|
||||||
|
target = WEBROOT if os.path.isdir(WEBROOT) else fallback
|
||||||
|
os.makedirs(target, exist_ok=True)
|
||||||
|
with open(os.path.join(target, "index.html"), "w") as f:
|
||||||
|
f.write(page)
|
||||||
|
with open(os.path.join(target, "feed.json"), "w") as f:
|
||||||
|
json.dump([
|
||||||
|
{"title": i["title"], "url": i["url"], "source": i["source"],
|
||||||
|
"clickability_decayed": i["clickability_decayed"], "age_hours": i["age_hours"],
|
||||||
|
"first_seen": i.get("first_seen")}
|
||||||
|
for i in sorted(items, key=lambda x: x["clickability_decayed"], reverse=True)
|
||||||
|
], f, indent=2)
|
||||||
|
where = "WEBROOT" if target == WEBROOT else "fallback(~oracle/site)"
|
||||||
|
print(f"[render] wrote {target}/index.html ({len(items)} items) -> {where}")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
+2178
File diff suppressed because it is too large
Load Diff
+160
@@ -0,0 +1,160 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>AI NEWS DAILY</title>
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Anton&display=swap" rel="stylesheet">
|
||||||
|
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NCA2NCI+CiAgPHJlY3Qgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0IiBmaWxsPSIjZmZmZmZmIi8+CiAgPHJlY3Qgd2lkdGg9IjY0IiBoZWlnaHQ9IjY0IiBmaWxsPSJub25lIiBzdHJva2U9IiMxMTExMTEiIHN0cm9rZS13aWR0aD0iMyIvPgogIDx0ZXh0IHg9IjM0IiB5PSI0NyIgZm9udC1mYW1pbHk9IkFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWYiIGZvbnQtd2VpZ2h0PSI5MDAiIGZvbnQtc3R5bGU9Iml0YWxpYyIgZm9udC1zaXplPSI0MiIgZmlsbD0iIzExMTExMSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgdHJhbnNmb3JtPSJza2V3WCgtNikgdHJhbnNsYXRlKDQsMCkiPkE8L3RleHQ+Cjwvc3ZnPgo=">
|
||||||
|
<style>
|
||||||
|
body { font-family: Arial, Helvetica, sans-serif; max-width: 700px; margin: 0 auto; padding: 20px 16px 60px; background: #fff; color: #111; line-height: 1.3; }
|
||||||
|
h1 { font-family: 'Anton', 'Arial Narrow', Arial, sans-serif; font-weight: 900; font-size: 46px; text-align: center; letter-spacing: -0.5px; transform: skewX(-10deg); margin: 10px 0 4px; text-shadow: 5px 5px 0 rgba(0,0,0,0.18); }
|
||||||
|
.tagline { text-align: center; font-size: 13px; color: #666; margin-bottom: 6px; }
|
||||||
|
hr { border: none; border-top: 3px solid #111; margin: 14px 0 22px; }
|
||||||
|
.headline { font-size: 18px; font-weight: bold; margin: 16px 0; }
|
||||||
|
.headline a { color: #111; text-decoration: underline; }
|
||||||
|
.headline a:visited { color: #1a0dab; font-style: normal; }
|
||||||
|
.breaking a { color: #c00; font-style: italic; }
|
||||||
|
.update a { color: #2a8a2a; font-style: italic; }
|
||||||
|
.desc { font-size: 14px; font-weight: normal; color: #555; margin: 4px 0 0 0; line-height: 1.4; }
|
||||||
|
.tt-h { font-size: 18px; font-weight: bold; color: #111; margin: 22px 0 10px; }
|
||||||
|
.tt-list .headline { margin: 12px 0; font-size: 17px; }
|
||||||
|
.sep { border: none; border-top: 1px solid #ddd; margin: 26px 0 18px; }
|
||||||
|
footer { margin-top: 40px; font-size: 12px; color: #888; text-align: center; }
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>AI NEWS DAILY</h1>
|
||||||
|
|
||||||
|
|
||||||
|
<h2 class="tt-h">Hardware</h2>
|
||||||
|
<div class="tt-list">
|
||||||
|
<div class="headline normal"><a href="https://www.microcenter.com/site/mc-news/article/amd-ryzen-ai-halo-review.aspx" target="_blank">Hands-On with the AMD Ryzen AI Halo</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.reddit.com/r/LocalLLaMA/comments/1utwqf8/ultra_budget_20gb_vram_with_448gbs_for_100_bucks/" target="_blank">Ultra budget 20GB vram with 448GB/s for $100 bucks.</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.reddit.com/r/LocalLLaMA/comments/1uuc3pi/benchmark_4x_5060_ti_64gb_vram_p2p_qwen36_27b/" target="_blank">Benchmark - 4x 5060 Ti (64GB VRAM) (P2P) - Qwen3.6 27B (INT8 /w bf16 kv…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.reddit.com/r/LocalLLaMA/comments/1uu6p9o/your_80_tesla_p100_has_been_doing_silently_noisy/" target="_blank">**Your $80 Tesla P100 has been doing silently noisy math in llama.cpp…</a></div>
|
||||||
|
</div>
|
||||||
|
<hr class="sep">
|
||||||
|
<div class="headline breaking"><a href="https://9to5mac.com/2026/07/10/apple-sues-openai-trade-secret-theft/" target="_blank">Breaking | Apple sues OpenAI, accuses ex-employees of stealing trade secrets</a></div>
|
||||||
|
<div class="headline breaking"><a href="https://cdn.openai.com/pdf/04d1d1e4-bc75-476a-97cf-49055cd98d31/cdc_proof.pdf" target="_blank">Breaking | GPT-5.6 Sol Ultra produces proof of the Cycle Double Cover Conjecture</a></div>
|
||||||
|
<div class="headline normal"><a href="https://terrytao.wordpress.com/2026/07/11/old-and-new-apps-via-modern-coding-agents/" target="_blank">Old and new apps, via modern coding agents by Terry Tao</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.iroh.computer/blog/mesh-llm" target="_blank">Mesh LLM: distributed AI computing on iroh</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.mixfont.com/ghost-font" target="_blank">Ghost Font: A font that humans can read but AI cannot</a></div>
|
||||||
|
<div class="headline normal"><a href="https://blog.yaelwrites.com/stop-telling-me-to-ask-an-llm/" target="_blank">Stop Telling Me to Ask an LLM</a></div>
|
||||||
|
<div class="headline normal"><a href="https://casp.ac/reports/ai-enabled-terrorism" target="_blank">How the terrorist group Boko Haram uses frontier AI</a></div>
|
||||||
|
<div class="headline normal"><a href="https://spectrum.ieee.org/ai-science-research-flattens-discovery" target="_blank">AI Boosts Research Careers but Flattens Scientific Discovery</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.tryai.dev/blog/gpt-5.6-build-off-12-models" target="_blank">GPT-5.6, Grok 4.5, Claude, and Muse Spark build the same 4 apps</a></div>
|
||||||
|
<div class="headline normal"><a href="https://pluralistic.net/2025/09/11/vulgar-thatcherism/#there-is-an-alternative" target="_blank">Reverse centaurs are the answer to the AI paradox (2025)</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.off-policy.com/dont-go-quietly-into-the-ai-night/" target="_blank">Who manages the agents?</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.nytimes.com/2026/07/10/technology/apple-openai-lawsuit.html" target="_blank">Apple sues OpenAI, accusing it of stealing company secrets</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.bbc.com/news/articles/c9q29j47v9ro" target="_blank">Wealthy AI workers send San Francisco house prices soaring</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.jamesdrandall.com/posts/thrust_ai_powered_software_archaeology/" target="_blank">AI Can't Recreate the Thrust Game (But It Can Help You Understand It)</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.windowscentral.com/microsoft/dropping-greenwashing-credits-and-expanding-ai-datacenters-caused-microsofts-25-percent-emissions-jump" target="_blank">Microsoft latest report shows 25% emissions raised due to AI data…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.bbc.com/news/articles/c2dy6e8klw0o" target="_blank">Meta pulls new AI image feature after days of backlash</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.economist.com/business/2026/06/14/companies-are-scrambling-to-curtail-soaring-ai-costs" target="_blank">Companies are scrambling to curtail soaring AI costs</a></div>
|
||||||
|
<div class="headline normal"><a href="https://news.ycombinator.com/item/48859439" target="_blank">Ask HN: How do you use Vim in the era of AI?</a></div>
|
||||||
|
<div class="headline normal"><a href="https://openai.com/index/gpt-5-6/" target="_blank">GPT-5.6</a><div class="desc">OpenAI released GPT-5.6, their latest model iteration with significant capability improvements across reasoning, coding, and multimodal tasks.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://ai-2040.com/" target="_blank">AI 2040: Plan A</a><div class="desc">AI Futures Project publishes 'Plan A' — a scenario for delaying superintelligence until 2040 through international cooperation, total research transparency, and mutually assured compute destruction.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://nevo-project.epfl.ch/" target="_blank">AI-generated videos to maximally drive a target brain region</a><div class="desc">EPFL researchers developed AI-generated videos designed to maximally activate a target brain region, using fMRI data to optimize visual stimuli.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://openai.com/index/chatgpt-for-your-most-ambitious-work/" target="_blank">ChatGPT Work</a><div class="desc">OpenAI launched ChatGPT Work, an enterprise version of ChatGPT designed for professional workflows and organizational use.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://www.pangram.com/blog/ai-in-your-feed" target="_blank">AI content is everywhere on social media, especially LinkedIn</a><div class="desc">Pangram study finds AI-generated content is pervasive across social media, with LinkedIn as the worst offender.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://www.ello.com/blog/teaching-a-child-in-1000-ms" target="_blank">Building a real-time AI tutor for 5-year-olds</a><div class="desc">Ello blog post details building a real-time AI tutor optimized for 5-year-old learners with 1000ms latency.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://www.anthropic.com/news/ben-bernanke" target="_blank">Ben Bernanke Joins Anthropic Oversight Trust</a></div>
|
||||||
|
<div class="headline normal"><a href="https://mitpress.mit.edu/9780262053198/simpolitics/" target="_blank">SimPolitics: America’s quest to solve politics with computers</a></div>
|
||||||
|
<div class="headline normal"><a href="https://news.ycombinator.com/item/48847834" target="_blank">Show HN: Reverse-engineering web apps into agent tools</a></div>
|
||||||
|
<div class="headline normal"><a href="https://entire.io/blog/how-version-control-will-evolve-for-the-agent-boom" target="_blank">How version control will evolve for the agent boom</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.fadingmaize.com" target="_blank">Show HN: Reviving my 2001 college band with AI</a></div>
|
||||||
|
<div class="headline normal"><a href="https://blog.mozilla.ai/the-control-layer-why-the-next-era-of-ai-is-about-infrastructure-not-just-models/" target="_blank">The next era of AI is about infrastructure, not just models</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.alecscollon.com/blog/llm-burnout/" target="_blank">I think I have LLM burnout</a><div class="desc">Developer reports chronic 'LLM burnout' from hours of daily interaction with AI assistants, describing a shift from writing code to designing, prompting, and reviewing AI-generated code.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://cognition.com/blog/swe-1-7" target="_blank">SWE-1.7 Reach Near GPT 5.5 and Opus Intelligence</a><div class="desc">Cognition launched SWE-1.7, reaching frontier-level intelligence (near GPT-5.5 and Opus) at much lower cost, trained from a Kimi K2.7 base with extensive RL post-training.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://arstechnica.com/ai/2026/07/we-cannot-choose-to-become-idiots-the-ai-cheating-scandal-roiling-brown-university/" target="_blank">Suspecting AI cheating, Ivy League prof ordered in-person final; scores…</a><div class="desc">Brown University professor suspected AI cheating on take-home exams; in-person final scores dropped 50%.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://www.tryai.dev/blog/grok-4.5-vs-gpt-5.5-vs-claude-build-off" target="_blank">We made Grok 4.5, GPT-5.5, and Claude build the same apps</a><div class="desc">Side-by-side comparison of Grok 4.5, GPT-5.5, and Claude building identical applications.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://www.worksinprogress.news/p/ai-is-bottlenecked-by-the-grid" target="_blank">What's slowing down the AI buildout</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.databricks.com/blog/benchmarking-coding-agents-databricks-multi-million-line-codebase" target="_blank">Benchmarking coding agents on Databricks' multi-million line codebase</a><div class="desc">Databricks benchmarks AI coding agents against their own multi-million-line production codebase.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://thetruthasiseeitnow.com/ai-slop-starts-with-the-codebase-itself/" target="_blank">AI changes the economics of software rewrites</a></div>
|
||||||
|
<div class="headline normal"><a href="https://news.ycombinator.com/item/48834961" target="_blank">Ask HN: Another "Hacker News" with less AI and more human-focused…</a><div class="desc">Hacker News discussion seeking alternative tech news platforms with less AI content and more human hacking.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://www.reddit.com/r/LocalLLaMA/comments/1uu4hxp/i_didnt_give_up_extgemma440_5b_returned/" target="_blank">I didn't give up - extGemma4-40_5B returned</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.reddit.com/r/LocalLLaMA/comments/1uudxi8/zer0fit_i_took_googles_new_tabfm_timesfm_ml/" target="_blank">Zer0Fit: I took Google's new TabFM & TimesFM ML foundation models and…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.reddit.com/r/LocalLLaMA/comments/1uturng/i_benched_quad_5060tis_for_code_generation_with/" target="_blank">I benched quad 5060Tis for code generation with Qwen3.6-27B so you…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.reddit.com/r/LocalLLaMA/comments/1utvbey/performance_comparison_on_full_compute/" target="_blank">Performance comparison on full compute performance (Anima) and LLM…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://arxiv.org/abs/2607.08763v1" target="_blank">OpenCoF: Learning to Reason Through Video Generation</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.reddit.com/r/LocalLLaMA/comments/1uua3jd/voodoo_quant_beats_unsloth_dynamic_20_kld_by_95/" target="_blank">Voodoo Quant beats Unsloth Dynamic 2.0 KLD by 95% in Qwen3.5 0.8B and 2B</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.reddit.com/r/LocalLLaMA/comments/1uueuks/if_you_use_open_code_or_other_agenting_programs/" target="_blank">If you use Open Code or other agenting programs you are leaving a lot…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.reddit.com/r/LocalLLaMA/comments/1uu61wb/i_mapped_anthropics_jspace_hallucination_signal/" target="_blank">I mapped Anthropic’s J-Space Hallucination signal across 7 datasets on…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.reddit.com/r/LocalLLaMA/comments/1uu8g9f/need_help_tuning_cache_in_llamaserver/" target="_blank">Need help tuning cache in llama-server</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.reddit.com/r/LocalLLaMA/comments/1uu5ht0/first_attempts_at_a_cpu_setup_ms02_intel_285hx/" target="_blank">First attempts at a CPU setup - MS-02 Intel 285hx, trying Qwen3…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://the-decoder.com/linkedin-is-the-undisputed-king-of-long-form-ai-slop-according-to-a-study-spanning-five-platforms/" target="_blank">LinkedIn is the undisputed king of long-form AI slop, according to a…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://the-decoder.com/claude-code-now-has-a-built-in-browser-that-lets-the-ai-read-click-and-type-on-external-websites/" target="_blank">Claude Code now has a built-in browser that lets the AI read, click…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://arxiv.org/abs/2607.08741v1" target="_blank">ARDY: Autoregressive Diffusion with Hybrid Representation for…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://the-decoder.com/sp-global-sees-openai-as-a-key-credit-risk-for-oracle-and-cuts-its-credit-rating/" target="_blank">S&P Global sees OpenAI as a "key credit risk" for Oracle and cuts its…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://the-decoder.com/meta-kills-muse-image-feature-that-let-anyone-generate-ai-photos-of-instagram-users-without-consent/" target="_blank">Meta kills Muse Image feature that let anyone generate AI photos of…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://the-decoder.com/openai-ceo-altman-is-now-pretty-sure-ai-is-net-job-creating-which-is-quite-the-pivot-from-predicting-mass-layoffs/" target="_blank">OpenAI CEO Altman is now "pretty sure" AI is net job-creating, which is…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.reddit.com/r/LocalLLaMA/comments/1uu32z6/interactive_jacobianlens_visualizer_and_live/" target="_blank">Interactive Jacobian-Lens visualizer and live steerer for GGUF models…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.reddit.com/r/LocalLLaMA/comments/1uu6qvh/i_would_like_to_share_my_experience_working_with/" target="_blank">i would like to share my experience. working with huge LLMs and poor…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.reddit.com/r/LocalLLaMA/comments/1uue278/working_around_qwen3627bs_toolcall_failures_and/" target="_blank">Working around Qwen3.6-27B's tool-call failures and looping</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.reddit.com/r/LocalLLaMA/comments/1uuhqlz/kreuzberg_local_document_extraction_is_being/" target="_blank">Kreuzberg (local document extraction) is being renamed to Xberg…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.reddit.com/r/LocalLLaMA/comments/1uu3545/qwenthropic/" target="_blank">Qwenthropic</a></div>
|
||||||
|
<div class="headline normal"><a href="https://the-decoder.com/claude-coworks-biggest-use-case-is-the-mundane-office-work-nobody-wants-to-own-anthropic-says/" target="_blank">Claude Cowork's biggest use case is the mundane office work nobody…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://the-decoder.com/ai-agents-win-at-slay-the-spire-2-after-researchers-replace-growing-chat-logs-with-structured-memory/" target="_blank">AI agents win at Slay the Spire 2 after researchers replace growing…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://the-decoder.com/grades-dropped-from-96-to-48-percent-when-a-brown-professor-made-students-take-the-exam-without-ai/" target="_blank">Grades dropped from 96 to 48 percent when a Brown professor made…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://noma.security/blog/gitlost-how-we-tricked-githubs-ai-agent-into-leaking-private-repos/" target="_blank">GitLost: We Tricked GitHub's AI Agent into Leaking Private Repos</a><div class="desc">Noma Labs discovered a prompt injection vulnerability in GitHub's Agentic Workflows that lets attackers silently extract data from private repos via crafted public issues.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://the-decoder.com/openais-gpt-5-6-sol-ultra-reportedly-solves-a-50-year-old-math-problem-in-under-an-hour/" target="_blank">OpenAI's GPT-5.6 Sol Ultra reportedly solves a 50-year-old math problem…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://techcrunch.com/2026/07/11/openai-bets-on-families-as-chatgpt-goes-deeper-into-households/" target="_blank">OpenAI bets on families as ChatGPT goes deeper into households</a></div>
|
||||||
|
<div class="headline normal"><a href="https://arxiv.org/abs/2607.08768v1" target="_blank">UniClawBench: A Universal Benchmark for Proactive Agents on Real-World…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://the-decoder.com/terrorist-groups-are-using-every-major-ai-chatbot-for-attack-planning-and-weapons-development/" target="_blank">Terrorist groups are using every major AI chatbot for attack planning…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://odra.dev/slopfix/" target="_blank">We charge $10k a week to delete AI-generated code</a><div class="desc">Slopfix charges $10,000/week to refactor AI-generated codebases that have become unmaintainable — analyzing for free, then cutting code bloat with a committed reduction target.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://twitter.com/OpenAI/status/2074704958419792299" target="_blank">GPT-5.6 Sol, along with Terra and Luna, will launch publicly this…</a><div class="desc">OpenAI announces public launch of GPT-5.6 Sol alongside Terra and Luna, possibly satirical naming.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://arxiv.org/abs/2607.08754v1" target="_blank">SLORR: Simple and Efficient In-Training Low-Rank Regularization</a></div>
|
||||||
|
<div class="headline normal"><a href="https://arxiv.org/abs/2607.08716v1" target="_blank">Remember When It Matters: Proactive Memory Agent for Long-Horizon Agents</a></div>
|
||||||
|
<div class="headline normal"><a href="https://replicated.live/blog/away" target="_blank">Automating AI Away</a></div>
|
||||||
|
<div class="headline normal"><a href="https://firesphere.dev/articles/yes-actually-i-do-fucking-mind" target="_blank">Re: I'm Begging You to Leave Your AI Note-Taker at Home</a></div>
|
||||||
|
<div class="headline normal"><a href="https://arxiv.org/abs/2607.08745v1" target="_blank">AUTOPILOT VQA: Benchmarking Vision-Language Models for Incident-Centric…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://blog.zksecurity.xyz/posts/circl-bugs/" target="_blank">AI Meets Cryptography 1: What AI Found in Cloudflare's Circl</a></div>
|
||||||
|
<div class="headline normal"><a href="https://arxiv.org/abs/2607.08724v1" target="_blank">Latent Memory Palace: Reasoning for Control as Autoregressive…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://arxiv.org/abs/2607.08740v1" target="_blank">Workflow as Knowledge: Semantic Persistence for LLM-Mediated Workflows</a></div>
|
||||||
|
<div class="headline normal"><a href="https://arxiv.org/abs/2607.08734v1" target="_blank">The Illusion of Equivalency: Statistical Characterization of…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://arxiv.org/abs/2607.08711v1" target="_blank">LTM: Large-scale Terrain Model for Wildfire-prone Landscapes</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.fastcompany.com/91520702/y-combinator-garry-tan-agentic-ai-social-media" target="_blank">YC CEO says he ships 37K LoC AI code per day. A developer looked under…</a><div class="desc">Developer investigates YC CEO's claim of shipping 37K lines of AI-generated code daily and looks under the hood.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://arxiv.org/abs/2607.08758v1" target="_blank">Ideas Have Genomes: Benchmarking Scientific Lineage Reasoning and…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://arxiv.org/abs/2607.08733v1" target="_blank">Super Weights in LLMs and the Failure of Selective Training</a></div>
|
||||||
|
<div class="headline normal"><a href="https://www.reuters.com/world/beijing-is-looking-curbing-overseas-access-chinas-top-ai-models-sources-say-2026-07-07/" target="_blank">Beijing is looking at curbing overseas access to China's top AI models</a></div>
|
||||||
|
<div class="headline normal"><a href="https://arxiv.org/abs/2607.08731v1" target="_blank">Validity of LLMs as data annotators: AMALIA on authority</a></div>
|
||||||
|
<div class="headline normal"><a href="https://arxiv.org/abs/2607.08725v1" target="_blank">Pose-to-Biomechanics: Bridging 3D Human Pose Estimation and…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://thebeach.dev/posts/lisp-agent/" target="_blank">An agent in 100 lines of Lisp</a></div>
|
||||||
|
<div class="headline normal"><a href="https://arxiv.org/abs/2607.08717v1" target="_blank">Deep Learning for Joint Narrowband Interference Cancellation and Soft…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://huggingface.co/zai-org/GLM-5.2" target="_blank">GLM-5.2 (text-generation) by zai-org</a><div class="desc">GLM-5.2 by zai-org is a multilingual text-generation model with MoE-DSA architecture supporting English, Chinese, and Arabic.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://huggingface.co/deepseek-ai/DeepSeek-V4-Pro" target="_blank">DeepSeek-V4-Pro (text-generation) by deepseek-ai</a><div class="desc">DeepSeek-V4-Pro by deepseek-ai is a conversational text-generation model with 8-bit/FP8 quantization support.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://huggingface.co/deepseek-ai/DeepSeek-R1" target="_blank">DeepSeek-R1 (text-generation) by deepseek-ai</a><div class="desc">DeepSeek-R1 is a reasoning-focused text-generation model using the deepseek_v3 architecture with FP8 support.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://huggingface.co/meta-llama/Llama-3.1-8B-Instruct" target="_blank">Llama-3.1-8B-Instruct (text-generation) by meta-llama</a><div class="desc">Llama-3.1-8B-Instruct by Meta is an 8B-parameter instruction-tuned model supporting 8 languages.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://huggingface.co/black-forest-labs/FLUX.1-dev" target="_blank">FLUX.1-dev (text-to-image) by black-forest-labs</a><div class="desc">FLUX.1-dev by Black Forest Labs is a text-to-image generation model compatible with the diffusers library.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://huggingface.co/yuxinlu1/gemma-4-12B-coder-fable5-composer2.5-v1-GGUF" target="_blank">gemma-4-12B-coder-fable5-composer2.5-v1-GGUF (text-generation) by…</a><div class="desc">Gemma-4-12B-coder-fable5-composer2.5-v1-GGUF is a GGUF-quantized coding model fine-tuned from Google's Gemma-4-12B.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://huggingface.co/meta-llama/Meta-Llama-3-8B" target="_blank">Meta-Llama-3-8B (text-generation) by meta-llama</a><div class="desc">Meta-Llama-3-8B is Meta's original 8B-parameter base language model from the Llama-3 family.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://huggingface.co/meta-llama/Llama-2-7b-chat-hf" target="_blank">Llama-2-7b-chat-hf (text-generation) by meta-llama</a><div class="desc">Llama-2-7b-chat-hf is Meta's 7B-parameter chat-tuned model from the Llama-2 generation.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://huggingface.co/meta-llama/Meta-Llama-3-8B-Instruct" target="_blank">Meta-Llama-3-8B-Instruct (text-generation) by meta-llama</a><div class="desc">Meta-Llama-3-8B-Instruct is Meta's instruction-tuned 8B model from the Llama-3 family with Azure deployment support.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://huggingface.co/bigscience/bloom" target="_blank">bloom (text-generation) by bigscience</a><div class="desc">BLOOM by BigScience is a 176B-parameter multilingual model supporting 46 languages across 13 families.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://huggingface.co/openai/gpt-oss-120b" target="_blank">gpt-oss-120b (text-generation) by openai</a><div class="desc">gpt-oss-120b by OpenAI is a 120B-parameter open-source text-generation model with MXFP4 quantization.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://huggingface.co/openai/gpt-oss-20b" target="_blank">gpt-oss-20b (text-generation) by openai</a><div class="desc">gpt-oss-20b by OpenAI is a 20B-parameter open-source text-generation model with MXFP4 quantization support.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://huggingface.co/microsoft/phi-2" target="_blank">phi-2 (text-generation) by microsoft</a><div class="desc">Phi-2 by Microsoft is a compact 2.7B-parameter model trained on synthetic 'textbook-quality' data.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0" target="_blank">stable-diffusion-xl-base-1.0 (text-to-image) by stabilityai</a><div class="desc">Stable Diffusion XL 1.0 by Stability AI is a high-resolution text-to-image model with 140K+ downloads.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.2" target="_blank">Mistral-7B-Instruct-v0.2 (text-generation) by mistralai</a><div class="desc">Mistral-7B-Instruct-v0.2 by Mistral AI is a 7B-parameter instruction-tuned model with Apache-2.0 licensing.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://huggingface.co/mistralai/Mistral-7B-v0.1" target="_blank">Mistral-7B-v0.1 (text-generation) by mistralai</a><div class="desc">Mistral-7B-v0.1 by Mistral AI is the original 7B-parameter pretrained base model from Mistral.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://huggingface.co/deepseek-ai/DeepSeek-V3" target="_blank">DeepSeek-V3 (text-generation) by deepseek-ai</a><div class="desc">DeepSeek-V3 is a conversational text-generation model using the deepseek_v3 architecture with FP8 support.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://huggingface.co/CompVis/stable-diffusion-v1-4" target="_blank">stable-diffusion-v1-4 (text-to-image) by CompVis</a><div class="desc">Stable Diffusion v1.4 by CompVis is the original 410M-parameter text-to-image diffusion model.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://huggingface.co/meta-llama/Llama-3.3-70B-Instruct" target="_blank">Llama-3.3-70B-Instruct (text-generation) by meta-llama</a><div class="desc">Llama-3.3-70B-Instruct by Meta is a 70B-parameter instruction-tuned model supporting 8 languages.</div></div>
|
||||||
|
<div class="headline normal"><a href="https://huggingface.co/google/gemma-7b" target="_blank">gemma-7b (text-generation) by google</a><div class="desc">Gemma-7B by Google is a 7B-parameter open-weight model with extensive research paper references.</div></div>
|
||||||
|
<hr>
|
||||||
|
<div style="margin-top: 30px; padding-top: 20px; border-top: 2px solid #eee;">
|
||||||
|
<h2 style="font-size: 16px; font-weight: bold; color: #666; text-transform: uppercase; letter-spacing: 1px; margin: 0 0 16px;">Research Papers (5 entries)</h2>
|
||||||
|
<div class="headline normal"><a href="https://arxiv.org/abs/2607.08703v1" target="_blank">MPFlow: Learning Budgeted Max-Flow Optimization on the Lightning…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://arxiv.org/abs/2607.08757v1" target="_blank">Score Accuracy Along the Forward Diffusion Does Not Certify Numerical…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://arxiv.org/abs/2607.08756v1" target="_blank">MulTTiPop: A Multitrack Transcription Dataset for Pop Music</a></div>
|
||||||
|
<div class="headline normal"><a href="https://arxiv.org/abs/2607.08748v1" target="_blank">Using AI-based Learning Assistants in Higher Education: A Large-Scale…</a></div>
|
||||||
|
<div class="headline normal"><a href="https://arxiv.org/abs/2607.08746v1" target="_blank">Dimensionality Reduction Meets Network Science: Sensemaking on UMAP's…</a></div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer>Updated 10:06 PM · Headlines link to original reporting</footer>
|
||||||
|
<script src="/click_logger.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,81 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
"""
|
||||||
|
Write batch summaries back to oracle.db.
|
||||||
|
|
||||||
|
Reads /tmp/athena_summarize_batch.json (array of entry dicts with 'summary' key added by sub-agent),
|
||||||
|
writes each summary JSON to entries.summary column.
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
python3 write_summaries.py /tmp/athena_summarize_batch_result.json
|
||||||
|
"""
|
||||||
|
import json
|
||||||
|
import sqlite3
|
||||||
|
import sys
|
||||||
|
|
||||||
|
def main():
|
||||||
|
if len(sys.argv) < 2:
|
||||||
|
print("Usage: python3 write_summaries.py <result_json_file>", file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
result_path = sys.argv[1]
|
||||||
|
try:
|
||||||
|
with open(result_path) as f:
|
||||||
|
results = json.load(f)
|
||||||
|
except (FileNotFoundError, json.JSONDecodeError) as e:
|
||||||
|
print(f"Error reading {result_path}: {e}", file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
db_path = '/home/vpsadmin/oracle/oracle.db'
|
||||||
|
conn = sqlite3.connect(db_path)
|
||||||
|
cur = conn.cursor()
|
||||||
|
|
||||||
|
written = 0
|
||||||
|
skipped = 0
|
||||||
|
errors = 0
|
||||||
|
|
||||||
|
for item in results:
|
||||||
|
eid = item.get('id')
|
||||||
|
summary = item.get('summary')
|
||||||
|
if not eid or not summary:
|
||||||
|
skipped += 1
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Validate summary has expected keys
|
||||||
|
if not all(k in summary for k in ('one_liner', 'key_technical_point', 'potential_use_case', 'confidence')):
|
||||||
|
print(f" ⚠ ID {eid}: missing required keys, skipping", file=sys.stderr)
|
||||||
|
skipped += 1
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Quality gate: reject low-confidence or generic summaries
|
||||||
|
ol = summary.get('one_liner', '')
|
||||||
|
if len(ol) < 20:
|
||||||
|
print(f" ⚠ ID {eid}: one_liner too short ({len(ol)} chars), skipping", file=sys.stderr)
|
||||||
|
skipped += 1
|
||||||
|
continue
|
||||||
|
if any(generic in ol.lower() for generic in ('this article discusses', 'this paper presents', 'see full')):
|
||||||
|
print(f" ⚠ ID {eid}: generic one_liner, skipping", file=sys.stderr)
|
||||||
|
skipped += 1
|
||||||
|
continue
|
||||||
|
|
||||||
|
try:
|
||||||
|
cur.execute("UPDATE entries SET summary = ? WHERE id = ?",
|
||||||
|
(json.dumps(summary), eid))
|
||||||
|
written += 1
|
||||||
|
print(f" ✓ ID {eid}: {ol[:70]}...")
|
||||||
|
except Exception as e:
|
||||||
|
print(f" ✗ ID {eid}: {e}", file=sys.stderr)
|
||||||
|
errors += 1
|
||||||
|
|
||||||
|
conn.commit()
|
||||||
|
|
||||||
|
# Verify
|
||||||
|
cur.execute("SELECT COUNT(*) FROM entries WHERE summary IS NOT NULL")
|
||||||
|
total = cur.fetchone()[0]
|
||||||
|
conn.close()
|
||||||
|
|
||||||
|
print(f"\nResults: {written} written, {skipped} skipped, {errors} errors")
|
||||||
|
print(f"Total entries with summary: {total}")
|
||||||
|
return 0 if errors == 0 else 1
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
sys.exit(main())
|
||||||
Reference in New Issue
Block a user