"""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}")