mirror of
https://github.com/PR0M3TH3AN/bitvid.git
synced 2026-10-27 16:02:26 +00:00
The For You feed was chronological, hashtag-interest-EXCLUSIVE, and ignored follows entirely (docs/feed-algo-audit.md). Now it is inclusive + ranked: - createForYouScorerStage scores each video: follows-boost (author you follow) + interest/watch-topic affinity (cosine vs your interests+watch-history vector) + freshness - disinterest penalty. Reuses Explore's vector/similarity helpers. - createForYouScoreSorter ranks by that score (muted last, recency tiebreak). - For You pipeline: interests now BOOST not exclude (enforceInterests:false); scorer added; chronological sorter replaced. Never empty (falls back to recency when you have no follows/interests/history). - buildForYouFeedRuntime now feeds subscriptionAuthors + watchHistoryTagCounts. Watched/blocked/muted are still removed (suppression/blacklist/moderation stages unchanged). Cheat-resistant tests (older boosted items only win via the boost). Grid renders end-to-end (~1.3s). Weight tuning is a follow-up. Co-Authored-By: Claude Opus 4.8 <[email protected]>
28 lines
921 B
JavaScript
28 lines
921 B
JavaScript
// js/feedEngine/index.js
|
|
|
|
export { createFeedEngine } from "./engine.js";
|
|
export {
|
|
createDedupeByRootStage,
|
|
createBlacklistFilterStage,
|
|
createDisinterestFilterStage,
|
|
createTagPreferenceFilterStage,
|
|
createWatchHistorySuppressionStage,
|
|
createModerationStage,
|
|
createResolvePostedAtStage,
|
|
} from "./stages.js";
|
|
export { createExploreScorerStage, createForYouScorerStage } from "./exploreScoring.js";
|
|
export { createKidsScorerStage } from "./kidsScoring.js";
|
|
export { createKidsAudienceFilterStage } from "./kidsAudienceFilterStage.js";
|
|
export {
|
|
createChronologicalSorter,
|
|
createForYouScoreSorter,
|
|
createExploreDiversitySorter,
|
|
createKidsScoreSorter,
|
|
} from "./sorters.js";
|
|
export {
|
|
createActiveNostrSource,
|
|
createSubscriptionAuthorsSource,
|
|
createWatchHistoryPointerSource,
|
|
} from "./sources.js";
|
|
export { createWatchHistoryFeedDefinition, registerWatchHistoryFeed } from "./watchHistoryFeed.js";
|