Skip to content

Stop RankingScorer author diversity from keying the retweeter - #54

Closed
Pitchfork-and-Torch wants to merge 19 commits into
mainfrom
cursor/magellan-ranking-author-div-ff33
Closed

Stop RankingScorer author diversity from keying the retweeter#54
Pitchfork-and-Torch wants to merge 19 commits into
mainfrom
cursor/magellan-ranking-author-div-ff33

Conversation

@Pitchfork-and-Torch

Copy link
Copy Markdown
Owner

Bug

RankingScorer::author_pool_counts decayed on wrapper author_id. Phoenix ranking features already key the original author (as_tweet_info / get_original_author_id). Distinct retweeters of one original did not share a diversity bucket. One retweeter of distinct originals did.

This is not #31 (author-size IPS). This is not xai-org#125 (gizmoduck origin size/NSFW). This is not xai-org#128/xai-org#154/xai-org#135 (in_network stamps). in_network stays the poster. Diversity is the post-Phoenix author-repeat lever.

Five-line proof

  • Entry: RankingScorer::author_pool_counts (EnableAuthorDiversity)
  • Sink: PhoenixCandidatePipeline scorers [PhoenixScorer, RankingScorer, VMRanker] then TopKScoreSelector
  • Break: pool count used retweeter author_id while Phoenix hashed get_original_author_id()
  • Viewer effect: one original could take many For You slots via different retweeters; a single retweeter of distinct authors was starved
  • Twin: PostCandidate::as_tweet_info / build_tweet_infos already send the original author to Phoenix

Change

  • Count author diversity on get_original_author_id() (retweeted user, else poster)
  • Originals and quotes unchanged (no retweeted_user_id)

Tests

  • Two retweets of the same original author from different retweeters: second is decayed
  • One retweeter of two original authors: no decay
  • Existing same-poster originals still decay

Standalone rustc model of author_pool_counts + get_original_author_id: 3/3 passed.

cargo test cannot run. Public dump has no home-mixer crate manifest.

Fork PR: none

Open in Web Open in Cursor 

CI agent and others added 19 commits August 14, 2026 20:55
in_network_ids is passed to the VF client without deduplication, while
oon_ids is deduped four lines below. retweeted_tweet_id is pushed for
every candidate that has one, so the same ID repeats once per retweet of
a given post — most often when that post is going viral.

Neither VfClient implementation dedupes its input: StratoVfClient builds
one call per element, and XaiVfClient chunks by XAI_VF_MAX_BATCH_SIZE, so
duplicates consume batch slots and can force an extra round trip.

Not a correctness issue — results collapse into a HashMap keyed by tweet
ID — but redundant work on the For You serving path.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Deduplicate in_network_ids before VF lookup
RankingScorer author-pool decay used the wrapper author_id. Phoenix
already hashes get_original_author_id, so one original could flood For
You through distinct retweeters while a single retweeter of distinct
authors was decayed. Count diversity on the original author.

Co-authored-by: Jon Bailey <Pitchfork-and-Torch@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants