Files
bitvid/js/feedEngine/index.js
T
thePR0M3TH3ANandClaude Opus 4.8 c0a8636678 feat(feed): make For You inclusive + ranked by your lists (G1-G5)
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]>
2026-06-14 16:57:05 -04:00

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";