{"adoption": {"forks": 725, "observed_at": "2026-08-28T04:09:09.910177+00:00", "stars": 5111}, "canonical_url": "https://ross.abutalabs.com/products/lightfm", "card": {"archived": false, "artifact_type": "library", "description": "A Python implementation of LightFM, a hybrid recommendation algorithm.", "domain": ["machine-learning", "data-science", "analytics"], "enriched": true, "function": ["machine-learning", "search-engine"], "health_score": 20, "homepage": null, "language": "Python", "license": "Apache-2.0", "license_family": "permissive", "maturity": "maintenance", "member_repos": ["lyst/lightfm"], "name": "lyst/lightfm", "platform": ["python", "windows"], "pushed_at": "2024-07-24T18:48:54+00:00", "repo": "lyst/lightfm", "stars": 5111, "tags": ["recommender-system", "matrix-factorization", "collaborative-filtering", "hybrid-recommendations", "learning-to-rank", "implicit-feedback", "bpr", "warp", "linux", "macos"], "topics": ["machine-learning", "recommender", "python", "matrix-factorization", "learning-to-rank", "recommender-system"], "urls": [], "use_cases": ["build a movie recommendation engine in python", "recommend items to users with implicit feedback data", "handle cold-start recommendations using item and user metadata", "train a matrix factorization model with WARP ranking loss", "build a hybrid recommender combining content features and collaborative signals", "evaluate recommender models with precision at k"], "what_it_is": "LightFM is a Python library implementing hybrid recommendation algorithms that combine collaborative filtering with user and item metadata via matrix factorization. It supports implicit and explicit feedback with efficient BPR and WARP ranking losses and multithreaded training.", "when_to_avoid": ["you need deep learning or sequence-based recommenders rather than factorization models", "you need a scalable distributed recommender for very large industrial datasets", "you need actively developed features; the project is largely in maintenance mode"], "when_to_choose": ["you need hybrid recommendations that generalize to new users and items via metadata", "you want fast, multithreaded matrix factorization with ranking losses like BPR or WARP", "you work in Python with sparse interaction data and want a simple, well-proven API"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/lightfm", "repo": "lyst/lightfm", "role": "main", "score": 23}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:09:09.910177+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:02:09.096967+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3f6ccb9ffcd800872bd3786ebef3fcbeefae6c84a407ffbc4092baef758cdb9", "fetched_at": "2026-08-28T04:09:09.910177+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lyst/lightfm"}, {"content_hash": "adc91336458280fc7945cc417a1ac876b71de3666fc322625e79271a9c182138", "fetched_at": "2026-08-29T08:56:54.814774+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/lightfm/json"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:09:09.910177+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:02:09.096967+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3f6ccb9ffcd800872bd3786ebef3fcbeefae6c84a407ffbc4092baef758cdb9", "fetched_at": "2026-08-28T04:09:09.910177+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lyst/lightfm"}, {"content_hash": "adc91336458280fc7945cc417a1ac876b71de3666fc322625e79271a9c182138", "fetched_at": "2026-08-29T08:56:54.814774+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/lightfm/json"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:02:09.096967+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3f6ccb9ffcd800872bd3786ebef3fcbeefae6c84a407ffbc4092baef758cdb9", "fetched_at": "2026-08-28T04:09:09.910177+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lyst/lightfm"}, {"content_hash": "adc91336458280fc7945cc417a1ac876b71de3666fc322625e79271a9c182138", "fetched_at": "2026-08-29T08:56:54.814774+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/lightfm/json"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:09:09.910177+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:09:09.910177+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:09:09.910177+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:02:09.096967+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3f6ccb9ffcd800872bd3786ebef3fcbeefae6c84a407ffbc4092baef758cdb9", "fetched_at": "2026-08-28T04:09:09.910177+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lyst/lightfm"}, {"content_hash": "adc91336458280fc7945cc417a1ac876b71de3666fc322625e79271a9c182138", "fetched_at": "2026-08-29T08:56:54.814774+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/lightfm/json"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:09:09.910177+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:09:09.910177+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:02:09.096967+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3f6ccb9ffcd800872bd3786ebef3fcbeefae6c84a407ffbc4092baef758cdb9", "fetched_at": "2026-08-28T04:09:09.910177+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lyst/lightfm"}, {"content_hash": "adc91336458280fc7945cc417a1ac876b71de3666fc322625e79271a9c182138", "fetched_at": "2026-08-29T08:56:54.814774+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/lightfm/json"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:09:09.910177+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:09:09.910177+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:09:09.910177+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:02:09.096967+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3f6ccb9ffcd800872bd3786ebef3fcbeefae6c84a407ffbc4092baef758cdb9", "fetched_at": "2026-08-28T04:09:09.910177+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lyst/lightfm"}, {"content_hash": "adc91336458280fc7945cc417a1ac876b71de3666fc322625e79271a9c182138", "fetched_at": "2026-08-29T08:56:54.814774+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/lightfm/json"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:09:09.910177+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:09:09.910177+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:02:09.096967+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3f6ccb9ffcd800872bd3786ebef3fcbeefae6c84a407ffbc4092baef758cdb9", "fetched_at": "2026-08-28T04:09:09.910177+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lyst/lightfm"}, {"content_hash": "adc91336458280fc7945cc417a1ac876b71de3666fc322625e79271a9c182138", "fetched_at": "2026-08-29T08:56:54.814774+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/lightfm/json"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:02:09.096967+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3f6ccb9ffcd800872bd3786ebef3fcbeefae6c84a407ffbc4092baef758cdb9", "fetched_at": "2026-08-28T04:09:09.910177+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lyst/lightfm"}, {"content_hash": "adc91336458280fc7945cc417a1ac876b71de3666fc322625e79271a9c182138", "fetched_at": "2026-08-29T08:56:54.814774+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/lightfm/json"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:02:09.096967+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3f6ccb9ffcd800872bd3786ebef3fcbeefae6c84a407ffbc4092baef758cdb9", "fetched_at": "2026-08-28T04:09:09.910177+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lyst/lightfm"}, {"content_hash": "adc91336458280fc7945cc417a1ac876b71de3666fc322625e79271a9c182138", "fetched_at": "2026-08-29T08:56:54.814774+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/lightfm/json"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:02:09.096967+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "a3f6ccb9ffcd800872bd3786ebef3fcbeefae6c84a407ffbc4092baef758cdb9", "fetched_at": "2026-08-28T04:09:09.910177+00:00", "kind": "readme", "missing": false, "url": "https://github.com/lyst/lightfm"}, {"content_hash": "adc91336458280fc7945cc417a1ac876b71de3666fc322625e79271a9c182138", "fetched_at": "2026-08-29T08:56:54.814774+00:00", "kind": "registry_pypi", "missing": false, "url": "https://pypi.org/pypi/lightfm/json"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 0, "longevity": 100, "rhythm": 8}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 4052, "days_push": 770, "days_rel": null, "gap_med": null, "n_releases_24m": 0}, "score": 23, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}