Tirthanker's picture
Add engine 3.0 (BGE-384) work in progress with open-issues list
6b1bc4b verified
Raw History Blame Contribute Delete
1.94 kB
"""Demo with synthetic posts: a brand-new user vs the same user after 30 engaged posts. Run from the folder above: python -m hybrid_engine.example"""
import numpy as np
from hybrid_engine import HybridRecommender
rng = np.random.default_rng(1)
def vec():
v = rng.normal(size=1024); return (v / np.linalg.norm(v)).tolist()
now = 1_800_000_000_000.0
posts = [dict(post_id=f"post-{i}", community=c, post_type="text", score=s, comments=s // 5, age_hours=a, title=f"Post {i}", body="...", tags=t, embedding=vec(), author=f"author-{i % 4}", impressions=imp)
for i, (c, s, a, t, imp) in enumerate([("r/MachineLearning", 300, 3, {"machine-learning": 0.9}, 0), ("r/robotics", 40, 2, {"robotics": 0.95}, 1),
("r/IOT", 15, 30, {"iot": 0.9}, 4), ("r/learnprogramming", 900, 200, {"data-structures-and-algorithms": 0.8}, 50),
("r/computervision", 120, 10, {"computer-vision": 0.9, "deep-learning": 0.7}, 2), ("r/memes", 5000, 600, {}, 300)])]
engine = HybridRecommender()
new_user = {"interests": ["machine-learning", "computer-vision", "robotics"], "history": []}
history = [dict(post_id=f"h{k}", ts_ms=now - 3_600_000 + k * 60_000, visible_ms=5000, focal_ms=5000 if k % 2 else 300, hover_ms=400, clicked=bool(k % 3 == 0), engaged=bool(k % 2),
community="r/computervision", author="author-1", embedding=vec()) for k in range(60)]
for name, user in (("brand-new user", new_user), ("same user after 30 engaged posts", {**new_user, "history": history})):
print(f"\n{name}:")
for d in engine.recommend(user, posts, now, k=6):
print(f" {d['post_id']:8s} score {d['score']:.3f} | v2b {d['v2b']:.3f} | warm {('%.3f' % d['warm_probability']) if d['warm_probability'] is not None else ' - '} "
f"| warm weight {d['warm_weight']:.2f} | freshness x{d['freshness_multiplier']:.2f} | push +{d['push']:.3f}")